10#include <boost/lexical_cast.hpp>
11#include <boost/tokenizer.hpp>
12#include <boost/algorithm/string.hpp>
15#include <Wt/WApplication>
16#include <Wt/WEnvironment>
19#include <Wt/WPushButton>
20#include <Wt/WStackedWidget>
21#include <Wt/WTabWidget>
23#include <Wt/WTableCell>
24#include <Wt/WTemplate>
26#include <Wt/WViewWidget>
27#include <Wt/WVBoxLayout>
30#include "view/BlogView.h"
40 const std::string& title,
const std::string& resourceBundle,
41 const std::string& cssPath)
119 languagesDiv->
setId(
"top_languages");
121 for (
unsigned i = 0; i <
languages.size(); ++i) {
123 new WText(
"- ", languagesDiv);
134 contents->
setId(
"main_page");
175 result->
bindWidget(
"languages", languagesDiv);
188 std::string langPath = l.
path_;
193 blog->setInternalBasePath(langPath +
"blog/");
208 WText *a =
new WText(
tr(
"source-browser-link").arg(path));
217 if (langPath.empty())
220 langPath =
'/' + langPath +
'/';
224 for (
unsigned i = 0; i <
languages.size(); ++i) {
248 if (path.size() >= 4 && path.substr(0, 4) ==
"/src") {
255 return new WText(
tr(
"home.intro"));
261 std::string langPath = l.
path_;
262 BlogView *
blog =
new BlogView(langPath +
"blog/",
266 if (!
blog->user().empty())
277 (
"if (window.chat && window.chat.emit) {"
279 "" "window.chat.emit(window.chat, 'login', "
290 return new WText(
tr(
"home.status"));
295 return new WText(
tr(
"home.features"));
307 return new WText(
tr(
"home.other-language"));
312 return makeStaticModel(boost::bind(
createWidget,
this));
315std::string
Home::href(
const std::string& url,
const std::string& description)
317 return "<a href=\"" +
url +
"\" target=\"_blank\">" + description +
"</a>";
322 return new WText(
tr(
"home.community"));
327 std::ifstream f((
filePrefix() +
"releases.txt").c_str());
329 releaseTable->
clear();
350 typedef boost::tokenizer<boost::escaped_list_separator<char> >
352 CsvTokenizer tok(line);
354 CsvTokenizer::iterator i=tok.begin();
356 std::string fileName = *i;
357 std::string description = *(++i);
362 std::string
url =
"http://prdownloads.sourceforge.net/witty/"
363 + fileName +
"?download";
384 requestTemplate->
bindWidget(
"button", quoteButton);
static const std::string SRC_INTERNAL_PATH
DeferredWidget< Function > * deferCreate(Function f)
WWidget * otherLanguage()
WTabWidget * examplesMenu_
void googleAnalyticsLogger()
std::string href(const std::string &url, const std::string &description)
WWidget * documentation()
void setLanguage(int language)
WWidget * wrapView(WWidget *(Home::*createFunction)())
WWidget * linkSourceBrowser(const std::string &examplePath)
WString tr(const char *key)
virtual std::string filePrefix() const =0
virtual WWidget * examples()=0
virtual WWidget * sourceViewer(const std::string &deployPath)=0
virtual WWidget * createQuoteForm()=0
void readReleases(WTable *releaseTable)
Home(const WEnvironment &env, Wt::Dbo::SqlConnectionPool &blogDb, const std::string &title, const std::string &resourceBundle, const std::string &cssPath)
WContainerWidget * sideBarContent_
void logInternalPath(const std::string &path)
Wt::Dbo::SqlConnectionPool & blogDb_
std::vector< Lang > languages
void setLanguageFromPath()
void chatSetUser(const WString &name)
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method)
WWidget * findWidget(const std::string &name)
void doJavaScript(const std::string &javascript, bool afterLoaded=true)
std::string internalPath() const
WMessageResourceBundle & messageResourceBundle()
friend friend class WContainerWidget
WContainerWidget * root() const
Signal< std::string > & internalPathChanged()
std::string internalPathNextPart(const std::string &path) const
void setTitle(const WString &title)
static std::string appRoot()
void useStyleSheet(const WLink &link, const std::string &media="all")
WLogEntry log(const std::string &type) const
std::string url(const std::string &internalPath=std::string()) const
const WEnvironment & environment() const
void setLocale(const WLocale &locale)
friend friend class WMenu
const WString & title() const
void addWidget(WWidget *widget, int stretch=0, WFlags< AlignmentFlag > alignment=0)
void setContentsMargins(int left, int top, int right, int bottom)
void use(const std::string &path, bool loadInMemory=true)
static WString tr(const char *key)
static WString fromUTF8(const std::string &value, bool checkValid=false)
std::string jsStringLiteral(char delimiter='\'') const
WTableCell * elementAt(int row, int column)
virtual void bindWidget(const std::string &varName, WWidget *widget)
void setInternalPathEncoding(bool enabled)
WApplication * createWidget(const WEnvironment &env, SimpleChatServer &server)
std::string longDescription_