aboutsummaryrefslogtreecommitdiff
path: root/mod/page
diff options
context:
space:
mode:
Diffstat (limited to 'mod/page')
-rw-r--r--mod/page403
1 files changed, 403 insertions, 0 deletions
diff --git a/mod/page b/mod/page
new file mode 100644
index 0000000..b326d6c
--- /dev/null
+++ b/mod/page
@@ -0,0 +1,403 @@
+// file : mod/page -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef MOD_PAGE
+#define MOD_PAGE
+
+#include <xml/forward>
+
+#include <web/xhtml-fragment>
+
+#include <brep/types>
+#include <brep/utility>
+
+#include <brep/package>
+
+#include <mod/options-types> // page_menu
+
+namespace brep
+{
+ // Page common building blocks.
+ //
+
+ // Generates CSS link elements.
+ //
+ class CSS_LINKS
+ {
+ public:
+ CSS_LINKS (const path& p, const dir_path& r): path_ (p), root_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const path& path_;
+ const dir_path& root_;
+ };
+
+ // Generates page header element.
+ //
+ class DIV_HEADER
+ {
+ public:
+ DIV_HEADER (const dir_path& root,
+ const web::xhtml::fragment& logo,
+ const vector<page_menu>& menu):
+ root_ (root), logo_ (logo), menu_ (menu) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const dir_path& root_;
+ const web::xhtml::fragment& logo_;
+ const vector<page_menu>& menu_;
+ };
+
+ // Generates package search form element.
+ //
+ class FORM_SEARCH
+ {
+ public:
+ FORM_SEARCH (const string& q): query_ (q) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& query_;
+ };
+
+ // Generates counter element.
+ //
+ // It could be redunant to distinguish between singular and plural word forms
+ // if it wouldn't be so cheap in English, and phrase '1 Packages' wouldn't
+ // look that ugly.
+ //
+ class DIV_COUNTER
+ {
+ public:
+ DIV_COUNTER (size_t c, const char* s, const char* p)
+ : count_ (c), singular_ (s), plural_ (p) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ size_t count_;
+ const char* singular_;
+ const char* plural_;
+ };
+
+ // Generates package name element.
+ //
+ class TR_NAME
+ {
+ public:
+ TR_NAME (const string& n, const string& q, const dir_path& r)
+ : name_ (n), query_param_ (q), root_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& name_;
+ const string& query_param_;
+ const dir_path& root_;
+ };
+
+ // Generates package version element.
+ //
+ class TR_VERSION
+ {
+ public:
+ // Display the version as a link to the package version details page.
+ //
+ TR_VERSION (const string& p, const string& v, const dir_path& r)
+ : package_ (&p), version_ (v), root_ (&r) {}
+
+ // Display the version as a regular text.
+ //
+ TR_VERSION (const string& v)
+ : package_ (nullptr), version_ (v), root_ (nullptr) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string* package_;
+ const string& version_;
+ const dir_path* root_;
+ };
+
+ // Generates package summary element.
+ //
+ class TR_SUMMARY
+ {
+ public:
+ TR_SUMMARY (const string& s): summary_ (s) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& summary_;
+ };
+
+ // Generates package license alternatives element.
+ //
+ class TR_LICENSE
+ {
+ public:
+ TR_LICENSE (const license_alternatives& l): licenses_ (l) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const license_alternatives& licenses_;
+ };
+
+ // Generates package license alternatives elements. Differs from TR_LICENSE
+ // by producing multiple rows instead of a single one.
+ //
+ class TR_LICENSES
+ {
+ public:
+ TR_LICENSES (const license_alternatives& l): licenses_ (l) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const license_alternatives& licenses_;
+ };
+
+ // Generates package tags element.
+ //
+ class TR_TAGS
+ {
+ public:
+ TR_TAGS (const strings& ts, const dir_path& r): tags_ (ts), root_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const strings& tags_;
+ const dir_path& root_;
+ };
+
+ // Generates package dependencies element.
+ //
+ class TR_DEPENDS
+ {
+ public:
+ TR_DEPENDS (const dependencies& d, const dir_path& r)
+ : dependencies_ (d), root_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const dependencies& dependencies_;
+ const dir_path& root_;
+ };
+
+ // Generates package requirements element.
+ //
+ class TR_REQUIRES
+ {
+ public:
+ TR_REQUIRES (const requirements& r): requirements_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const requirements& requirements_;
+ };
+
+ // Generates url element.
+ //
+ class TR_URL
+ {
+ public:
+ TR_URL (const url& u, const char* l = "url"): url_ (u), label_ (l) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const url& url_;
+ const char* label_;
+ };
+
+ // Generates email element.
+ //
+ class TR_EMAIL
+ {
+ public:
+ TR_EMAIL (const email& e, const char* l = "email")
+ : email_ (e), label_ (l) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const email& email_;
+ const char* label_;
+ };
+
+ // Generates package version priority element.
+ //
+ class TR_PRIORITY
+ {
+ public:
+ TR_PRIORITY (const priority& p): priority_ (p) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const priority& priority_;
+ };
+
+ // Generates package location element.
+ //
+ class TR_LOCATION
+ {
+ public:
+ TR_LOCATION (const string& n, const dir_path& r)
+ : name_ (n), root_ (r) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& name_;
+ const dir_path& root_;
+ };
+
+ // Generates package download URL element.
+ //
+ class TR_DOWNLOAD
+ {
+ public:
+ TR_DOWNLOAD (const string& u): url_ (u) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& url_;
+ };
+
+ // Generates sha256sum element.
+ //
+ class TR_SHA256SUM
+ {
+ public:
+ TR_SHA256SUM (const string& s): sha256sum_ (s) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& sha256sum_;
+ };
+
+ // Generates comment element.
+ //
+ class SPAN_COMMENT
+ {
+ public:
+ SPAN_COMMENT (const string& c): comment_ (c) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& comment_;
+ };
+
+ // Generates package description element.
+ //
+ class P_DESCRIPTION
+ {
+ public:
+ // Genereate full description.
+ //
+ P_DESCRIPTION (const string& d, const string& id = "")
+ : description_ (d), length_ (d.size ()), url_ (nullptr), id_ (id) {}
+
+ // Genereate brief description.
+ //
+ P_DESCRIPTION (const string& d, size_t l, const string& u)
+ : description_ (d), length_ (l), url_ (&u) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& description_;
+ size_t length_;
+ const string* url_; // Full page url.
+ string id_;
+ };
+
+ // Generates package description element.
+ //
+ class PRE_CHANGES
+ {
+ public:
+ // Genereate full changes info.
+ //
+ PRE_CHANGES (const string& c)
+ : changes_ (c), length_ (c.size ()), url_ (nullptr) {}
+
+ // Genereate brief changes info.
+ //
+ PRE_CHANGES (const string& c, size_t l, const string& u)
+ : changes_ (c), length_ (l), url_ (&u) {}
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ const string& changes_;
+ size_t length_;
+ const string* url_; // Full page url.
+ };
+
+ // Generates paging element.
+ //
+ class DIV_PAGER
+ {
+ public:
+ DIV_PAGER (size_t current_page,
+ size_t item_count,
+ size_t item_per_page,
+ size_t page_number_count,
+ const string& url);
+
+ void
+ operator() (xml::serializer&) const;
+
+ private:
+ size_t current_page_;
+ size_t item_count_;
+ size_t item_per_page_;
+ size_t page_number_count_;
+ const string& url_;
+ };
+
+ // Convert the argument to a string representing the valid HTML 5 'id'
+ // attribute value.
+ //
+ string
+ html_id (const string&);
+}
+
+#endif // MOD_PAGE