void WTemplate::resolveString(const std::string& varName, const std::vector<WString>& args, std::ostream& result) { /* * FIXME: have an extra result parameter which indicates whether the * widget is view-only. Better to do that in resolveValue() and * provide a utility method that converts a widget to XHTML ? */ StringMap::const_iterator i = strings_.find(varName); if (i != strings_.end()) result << i->second; else { WWidget *w = resolveWidget(varName); if (w) { w->setParentWidget(this); if (previouslyRendered_ && previouslyRendered_->find(w) != previouslyRendered_->end()) { result << "<span id=\"" << w->id() << "\"> </span>"; } else { applyArguments(w, args); w->htmlText(result); } if (newlyRendered_) newlyRendered_->push_back(w); } else handleUnresolvedVariable(varName, args, result); } }
void PrintResource::handleRequest(const Wt::Http::Request& request, Wt::Http::Response& response) { //log("info")<<"PrintResource::handleRequest() "<<__LINE__; response.addHeader("Cache-Control", "max-age=315360000"); response.setMimeType("text/html; charset=utf-8"); std::ostringstream htmlStream;// = std::cout; htmlStream << ""; //log("info")<<m_content->find("order_form"); if(WContainerWidget *form = dynamic_cast<WContainerWidget*>(m_content->find("order_form"))) { for(int i=0;i < form->count()-1;i++) { WWidget *item = form->widget(i); if(item->id() == "comments") { item->decorationStyle().setBorder(WBorder()); }else item->setHidden(true); } } response.out() <<"<link href=\"http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css\" type=\"text/css\" rel=\"stylesheet\">"<<std::endl; response.out() <<"<link href=\"http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap-theme.min.css\" type=\"text/css\" rel=\"stylesheet\">"<<std::endl; response.out() << "<script src=\"/css/ie_console.js\"></script>"; response.out() << "" "<script type=\"text/javascript\">\n" " window.setTimeout(function () {\n" " window.print();\n" " }, 1000);\n" "</script>\n"<<std::endl; m_content->htmlText(response.out()); //log("info")<<"PrintResource::handleRequest() "<<__LINE__; /* response.out() << "" "<script type=\"text/javascript\">\n" " (function() { \n" " window.setTimeout(function () {\n" " window.print();\n" " }, 1500);\n" " }); \n" "</script>\n"<<std::endl; */ //m_content->htmlText(htmlStream); //std::string htmlStr= ""; //htmlStr << htmlStream; //std::cout <<htmlStream<<std::endl; //renderer.render(WString().fromUTF8(htmlStream.str())); response.out() << WString().fromUTF8(htmlStream.str()) << std::endl; }
bool WTemplate::_id(const std::vector<WString>& args, std::ostream& result) { if (args.size() == 1) { WWidget *w = this->resolveWidget(args[0].toUTF8()); if (w) { result << w->id(); return true; } else return false; } else { LOG_ERROR("Functions::tr(): expects exactly one argument"); return false; } }
void WTemplate::updateDom(DomElement& element, bool all) { if (changed_ || all) { std::set<WWidget *> previouslyRendered; std::vector<WWidget *> newlyRendered; for (WidgetMap::const_iterator i = widgets_.begin(); i != widgets_.end(); ++i) { WWidget *w = i->second; if (w->isRendered() && w->webWidget()->domCanBeSaved()) { previouslyRendered.insert(w); } } bool saveWidgets = element.mode() == DomElement::ModeUpdate; previouslyRendered_ = saveWidgets ? &previouslyRendered : 0; newlyRendered_ = &newlyRendered; std::stringstream html; renderTemplate(html); previouslyRendered_ = 0; newlyRendered_ = 0; for (unsigned i = 0; i < newlyRendered.size(); ++i) { WWidget *w = newlyRendered[i]; if (previouslyRendered.find(w) != previouslyRendered.end()) { if (saveWidgets) element.saveChild(w->id()); previouslyRendered.erase(w); } } element.setProperty(Wt::PropertyInnerHTML, html.str()); changed_ = false; for (std::set<WWidget *>::const_iterator i = previouslyRendered.begin(); i != previouslyRendered.end(); ++i) { WWidget *w = *i; w->webWidget()->setRendered(false); } } WInteractWidget::updateDom(element, all); }
void WTemplate::updateDom(DomElement& element, bool all) { if (changed_ || all) { std::set<WWidget *> previouslyRendered; std::vector<WWidget *> newlyRendered; for (WidgetMap::const_iterator i = widgets_.begin(); i != widgets_.end(); ++i) { WWidget *w = i->second; if (w->isRendered() && w->webWidget()->domCanBeSaved()) { previouslyRendered.insert(w); } } bool saveWidgets = element.mode() == DomElement::ModeUpdate; previouslyRendered_ = saveWidgets ? &previouslyRendered : 0; newlyRendered_ = &newlyRendered; std::stringstream html; renderTemplate(html); previouslyRendered_ = 0; newlyRendered_ = 0; for (unsigned i = 0; i < newlyRendered.size(); ++i) { WWidget *w = newlyRendered[i]; if (previouslyRendered.find(w) != previouslyRendered.end()) { if (saveWidgets) element.saveChild(w->id()); previouslyRendered.erase(w); } } if (encodeTemplateText_) element.setProperty(Wt::PropertyInnerHTML, html.str()); else element.setProperty(Wt::PropertyInnerHTML, encode(html.str())); changed_ = false; for (std::set<WWidget *>::const_iterator i = previouslyRendered.begin(); i != previouslyRendered.end(); ++i) { WWidget *w = *i; // it could be that the widget was removed/deleted in the mean time // as a side-effect of rendering some of the widgets; thus we check // that the widget is still a child for (WidgetMap::const_iterator j = widgets_.begin(); j != widgets_.end(); ++j) { if (j->second == w) { w->webWidget()->setRendered(false); break; } } } WApplication::instance()->session()->renderer() .updateFormObjects(this, true); } WInteractWidget::updateDom(element, all); }