void WMenuItem::setText(const WString& text) { if (!text_) { text_ = new WLabel(anchor()); text_->setTextFormat(Wt::PlainText); } text_->setText(text); if (!customPathComponent_) { std::string result; #ifdef WT_TARGET_JAVA WString t = text; #else const WString& t = text; #endif if (t.literal()) result = t.narrow(); else result = t.key(); for (unsigned i = 0; i < result.length(); ++i) { if (std::isspace((unsigned char)result[i])) result[i] = '-'; else if (std::isalnum((unsigned char)result[i])) result[i] = std::tolower((unsigned char)result[i]); else result[i] = '_'; } setPathComponent(result); customPathComponent_ = false; } }
void WTemplate::bindString(const std::string& varName, const WString& value, TextFormat textFormat) { WWidget *w = resolveWidget(varName); if (w) bindWidget(varName, 0); WString v = value; if (textFormat == XHTMLText && v.literal()) { if (!removeScript(v)) v = escapeText(v, true); } else if (textFormat == PlainText) v = escapeText(v, true); StringMap::const_iterator i = strings_.find(varName); if (i == strings_.end() || i->second != v.toUTF8()) { strings_[varName] = v.toUTF8(); changed_ = true; repaint(RepaintInnerHtml); } }
std::string asJSLiteral(const boost::any& v, TextFormat textFormat) { if (v.empty()) return std::string("''"); else if (v.type() == typeid(WString)) { WString s = boost::any_cast<WString>(v); bool plainText = false; if (textFormat == XHTMLText) { if (s.literal()) plainText = !WWebWidget::removeScript(s); } else plainText = true; if (plainText && textFormat != XHTMLUnsafeText) s = WWebWidget::escapeText(s); return s.jsStringLiteral(); } else if (v.type() == typeid(std::string) || v.type() == typeid(const char *)) { WString s = v.type() == typeid(std::string) ? WString::fromUTF8(boost::any_cast<std::string>(v)) : WString::fromUTF8(boost::any_cast<const char *>(v)); bool plainText; if (textFormat == XHTMLText) plainText = !WWebWidget::removeScript(s); else plainText = true; if (plainText && textFormat != XHTMLUnsafeText) s = WWebWidget::escapeText(s); return s.jsStringLiteral(); } else if (v.type() == typeid(bool)) { bool b = boost::any_cast<bool>(v); return b ? "true" : "false"; } else if (v.type() == typeid(WDate)) { const WDate& d = boost::any_cast<WDate>(v); return "new Date(" + boost::lexical_cast<std::string>(d.year()) + ',' + boost::lexical_cast<std::string>(d.month() - 1) + ',' + boost::lexical_cast<std::string>(d.day()) + ')'; } else if (v.type() == typeid(WDateTime)) { const WDateTime& dt = boost::any_cast<WDateTime>(v); const WDate& d = dt.date(); const WTime& t = dt.time(); return "new Date(" + boost::lexical_cast<std::string>(d.year()) + ',' + boost::lexical_cast<std::string>(d.month() - 1) + ',' + boost::lexical_cast<std::string>(d.day()) + ',' + boost::lexical_cast<std::string>(t.hour()) + ',' + boost::lexical_cast<std::string>(t.minute()) + ',' + boost::lexical_cast<std::string>(t.second()) + ',' + boost::lexical_cast<std::string>(t.msec()) + ')'; } #define ELSE_LEXICAL_ANY(TYPE) \ else if (v.type() == typeid(TYPE)) \ return boost::lexical_cast<std::string>(boost::any_cast<TYPE>(v)) ELSE_LEXICAL_ANY(short); ELSE_LEXICAL_ANY(unsigned short); ELSE_LEXICAL_ANY(int); ELSE_LEXICAL_ANY(unsigned int); ELSE_LEXICAL_ANY(long); ELSE_LEXICAL_ANY(unsigned long); ELSE_LEXICAL_ANY(::int64_t); ELSE_LEXICAL_ANY(::uint64_t); ELSE_LEXICAL_ANY(long long); ELSE_LEXICAL_ANY(unsigned long long); ELSE_LEXICAL_ANY(float); ELSE_LEXICAL_ANY(double); #undef ELSE_LEXICAL_ANY else {