[Kimchi-devel] [PATCH][Wok 1/2] Use javascript libraries from rpms

Ramon Medeiros ramonn at linux.vnet.ibm.com
Fri Aug 12 16:55:38 UTC 2016


Some javascript libraries didn't need to be hardcoded. So, add them to
packages dependency and import them at frontend files

Signed-off-by: Ramon Medeiros <ramonn at linux.vnet.ibm.com>
---
 docs/fedora-deps.md              |   4 +-
 docs/ubuntu-deps.md              |   3 +-
 src/wok/config.py.in             |  22 +++
 ui/pages/login.html.tmpl.fedora  | 332 +++++++++++++++++++++++++++++++++++++++
 ui/pages/login.html.tmpl.ubuntu  | 332 +++++++++++++++++++++++++++++++++++++++
 ui/pages/wok-ui.html.tmpl.fedora | 231 +++++++++++++++++++++++++++
 ui/pages/wok-ui.html.tmpl.ubuntu | 231 +++++++++++++++++++++++++++
 7 files changed, 1153 insertions(+), 2 deletions(-)
 create mode 100644 ui/pages/login.html.tmpl.fedora
 create mode 100644 ui/pages/login.html.tmpl.ubuntu
 create mode 100644 ui/pages/wok-ui.html.tmpl.fedora
 create mode 100644 ui/pages/wok-ui.html.tmpl.ubuntu

diff --git a/docs/fedora-deps.md b/docs/fedora-deps.md
index e665cdb..337f75a 100644
--- a/docs/fedora-deps.md
+++ b/docs/fedora-deps.md
@@ -28,7 +28,9 @@ Runtime Dependencies
     $ sudo yum install python-cherrypy python-cheetah PyPAM m2crypto \
                         python-jsonschema python-psutil python-ldap \
                         python-lxml nginx openssl open-sans-fonts \
-                        fontawesome-fonts logrotate
+                        fontawesome-fonts logrotate js-jquery \
+                        js-moment js-typeahead.js nodejs-lodash.noarch \
+                        nodejs-es5-shim
 
     # For RHEL systems, install the additional packages:
     $ sudo yum install python-ordereddict
diff --git a/docs/ubuntu-deps.md b/docs/ubuntu-deps.md
index 3a0f75c..0fe0038 100644
--- a/docs/ubuntu-deps.md
+++ b/docs/ubuntu-deps.md
@@ -18,7 +18,8 @@ Runtime Dependencies
     $ sudo apt-get install python-cherrypy3 python-cheetah python-pam \
                             python-m2crypto python-jsonschema \
                             python-psutil python-ldap python-lxml nginx \
-                            openssl fonts-font-awesome texlive-fonts-extra
+                            openssl fonts-font-awesome texlive-fonts-extra \
+                            libjs-jquery libjs-lodash jquery-ui libjs-bootstrap
 
 Packages required for UI development
 ------------------------------------
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index cbe585c..c007935 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -57,6 +57,15 @@ FONTS_PATH = {
     ]
 }
 
+JS_LIBS = {
+    "jquery" : "/usr/share/javascript/jquery/2.1.3/jquery.min.js",
+    "lodash" : "/usr/lib/node_modules/lodash/lodash.js",
+    "moment" : "/usr/share/javascript/moment/min/moment-with-locales.min.js",
+    "typeahead" : "/usr/share/javascript/typeahead.js/dist/typeahead.bundle.min.js",
+    "es5-shim" : "/usr/lib/node_modules/es5-shim/es5-shim.min.js"
+}
+
+
 
 def get_log_download_path():
     return os.path.join(paths.state_dir, 'logs')
@@ -103,6 +112,11 @@ class Paths(object):
                 if os.path.exists(font_file):
                     setattr(self, '%s_dir' % font, path)
 
+        for js in JS_LIBS.keys():
+            path = JS_LIBS[js]
+            if os.path.exists(path):
+                setattr(self, '%s_dir' % js, path)
+
     def get_prefix(self):
         if __file__.startswith("/"):
             base = os.path.dirname(__file__)
@@ -172,6 +186,14 @@ class UIConfig(dict):
                         'tools.wokauth.on': False,
                         'tools.nocache.on': False}
 
+        for js, file in JS_LIBS.iteritems():
+            if os.path.exists(file):
+                ui_configs['/js/%s' % os.path.basename(file) ] = {
+                    'tools.staticfile.on': True,
+                    'tools.staticfile.filename': file,
+                    'tools.wokauth.on': False,
+                    'tools.nocache.on': False}
+
         self.update(ui_configs)
 
 
diff --git a/ui/pages/login.html.tmpl.fedora b/ui/pages/login.html.tmpl.fedora
new file mode 100644
index 0000000..22aa8f1
--- /dev/null
+++ b/ui/pages/login.html.tmpl.fedora
@@ -0,0 +1,332 @@
+#*
+ * Project Wok
+ *
+ * Copyright IBM Corp, 2014-2016
+ *
+ * Code derived from Project Kimchi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+#silent next = "?next=%s" % $getVar('data.next', '') if $getVar('data.next', '') else ""
+#from wok.config import get_version
+<!DOCTYPE html>
+<html lang="$lang.lang[0]">
+<head>
+    <meta charset="UTF-8">
+    <title>Wok</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-title" content="Wok">
+    <link href="$href('images/apple-touch-icon-57x57.png')" sizes="57x57" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-72x72.png')" sizes="72x72" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-76x76.png')" sizes="76x76" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-114x114.png')" sizes="114x114" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-144x144.png')" sizes="144x144" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-152x152.png')" sizes="152x152" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-180x180.png')" sizes="120x120" rel="apple-touch-icon-precomposed">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-36x36.png')" sizes="36x36">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-48x48.png')" sizes="48x48">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-72x72.png')" sizes="72x72">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-144x144.png')" sizes="144x144">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-192x192.png')" sizes="192x192">
+    <link rel="icon" type="image/png" href="$href('images/favicon-16x16.png')" sizes="16x16">
+    <link rel="icon" type="image/png" href="$href('images/favicon-32x32.png')" sizes="32x32">
+    <link rel="icon" type="image/png" href="$href('images/favicon-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/favicon-194x194.png')" sizes="194x194">
+    <link rel="mask-icon" href="$href('images/safari-pinned-tab.svg')" color="#5bbad5">
+    <meta name="application-name" content="Wok">
+    <meta name="msapplication-config" content="none" />
+    <meta name="msapplication-TileColor" content="#f73434" />
+    <meta name="msapplication-square70x70logo" content="$href('images/mstile-70x70.png')" />
+    <meta name="msapplication-square150x150logo" content="$href('images/mstile-150x150.png')" />
+    <meta name="msapplication-wide310x150logo" content="$href('images/mstile-310x310.png')" />
+    <meta name="msapplication-square310x310logo" content="$href('images/mstile-310x150.png')" />
+    <link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
+    <link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap.custom.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-select/dist/css/bootstrap-select.min.css')">
+    <link rel="stylesheet" href="$href('libs/datatables/css/datatables.min.css')">
+    <link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
+    <link rel="stylesheet" href="$href('css/opensans/opensans.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap-select.custom.css')">
+    <link rel="stylesheet" href="$href('css/datatables.bootstrap.css')">
+    <link rel="stylesheet" href="$href('css/wok.css')">
+    <script src="js/es5-shim.min.js"></script>
+    <script src="js/jquery.min.js"></script>
+    <script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+    <script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
+    <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script>
+    <script src="$href('libs/bootstrap/bootstrap.min.js')"></script>
+    <script src="$href('libs/bootstrap-select/dist/js/bootstrap-select.min.js')"></script>
+    <script src="js/lodash.js"></script>
+    <script src="js/moment-with-locales.min.js"></script>
+    <script src="$href('libs/datatables/js/datatables.min.js')"></script>
+    <script src="$href('js/wok.min.js')"></script>
+</head>
+<body class="login" onload="wok.login_main()">
+    <div class="topbar">
+        <nav class="navbar navbar-inverse">
+            <div class="container">
+                <div class="navbar-header">
+                    <a class="navbar-brand" href="#">Wok</a>
+                </div>
+            </div>
+        </nav>
+        <nav class="navbar navbar-default">
+            <div class="container">
+                <div class="navbar-header">
+                </div>
+                    <ul class="nav navbar-nav">
+                        <li class="hostname"><span class="host-location"></span></li>
+                    </ul>
+            </div>
+        </nav>
+    </div>
+    <div class="content">
+        <div class="container">
+            <div id="login-window" class="login-area row">
+                <div class="err-area">
+                    <div id="messUserPass" class="alert alert-danger" style="display: none;">$_("The username or password you entered is incorrect. Please try again.")</div>
+                    <div id="messSession" class="alert alert-danger" style="display: none;">$_("Session timeout, please re-login.")</div>
+                    <div id="missServer" class="alert alert-danger" style="display: none;">$_("Server unreachable.")</div>
+                </div>
+                <form id="form-login" class="form-horizontal" method="post">
+                    <div class="form-group">
+                        <label for="username" class="sr-only">$_("User Name")</label>
+                        <input type="text" class="form-control" id="username" name="username" required="required" placeholder="$_(" User Name ")" autofocus autocomplete="off" />
+                        <div id="username-msg" class="msg-required"></div>
+                    </div>
+                    <div class="form-group">
+                        <label for="password" class="sr-only">$_("Password")</label>
+                        <input type="password" class="form-control" id="password" name="password" required="required" placeholder="$_(" Password ")"  autocomplete="off" />
+                        <div id="password-msg" class="msg-required"></div>
+                    </div>
+                    <div class="form-group">
+                        <button id="btn-login" class="btn btn-login col-md-12 col-lg-12">
+                            <span id="login">$_("Log in")</span>
+                            <span id="logging" style="display: none;">$_("Logging in...")</span>
+                        </button>
+                    </div>
+                    <div class="form-group">
+                        <label for="userLang">$_("Language")</label>
+                        <select id="userLang" class="selectpicker col-md-12 col-lg-12">
+                            <option value="en_US">English (US)</option>
+                            <option value="zh_CN">中文(简体)</option>
+                            <option value="pt_BR">Português (Brasil)</option>
+                            <option value="de_DE">Deutsch (Deutschland)</option>
+                            <option value="es_ES">Español (España)</option>
+                            <option value="fr_FR">Français (France)</option>
+                            <option value="it_IT">Italiano (Italia)</option>
+                            <option value="ja_JP">日本語 (日本)</option>
+                            <option value="ko_KR">한국어 (대한민국)</option>
+                            <option value="ru_RU">Русский (Россия)</option>
+                            <option value="zh_TW">中文(繁體)</option>
+                        </select>
+                    </div>
+                    <div class="form-group">
+                        <label for="userLocale">$_("Locale")</label>
+                        <select id="userLocale" class="selectpicker col-md-12 col-lg-12">
+                           <option value="af-ZA">Afrikaans (South Africa)</option>
+                           <option value="sq-AL">Albanian (Albania)</option>
+                           <option value="am-ET">Amharic (Ethiopia)</option>
+                           <option value="ar-DZ">Arabic (Algeria)</option>
+                           <option value="ar-BH">Arabic (Bahrain)</option>
+                           <option value="ar-EG">Arabic (Egypt)</option>
+                           <option value="ar-IQ">Arabic (Iraq)</option>
+                           <option value="ar-JO">Arabic (Jordan)</option>
+                           <option value="ar-KW">Arabic (Kuwait)</option>
+                           <option value="ar-LB">Arabic (Lebanon)</option>
+                           <option value="ar-LY">Arabic (Libya)</option>
+                           <option value="ar-MR">Arabic (Mauritania)</option>
+                           <option value="ar-MA">Arabic (Morocco)</option>
+                           <option value="ar-OM">Arabic (Oman)</option>
+                           <option value="ar-QA">Arabic (Qatar)</option>
+                           <option value="ar-SA">Arabic (Saudi Arabia)</option>
+                           <option value="ar-SY">Arabic (Syria)</option>
+                           <option value="ar-TN">Arabic (Tunisia)</option>
+                           <option value="ar-AE">Arabic (United Arab Emirates)</option>
+                           <option value="ar-YE">Arabic (Yemen)</option>
+                           <option value="hy-AM">Armenian (Armenia)</option>
+                           <option value="as-IN">Assamese (India)</option>
+                           <option value="az-AZ">Azerbaijani (Azerbaijan)</option>
+                           <option value="eu-ES">Basque (Spain)</option>
+                           <option value="be-BY">Belarusian (Belarus)</option>
+                           <option value="bn-BD">Bengali (Bangladesh)</option>
+                           <option value="bn-IN">Bengali (India)</option>
+                           <option value="bs-BA">Bosnian (Bosnia)</option>
+                           <option value="bg-BG">Bulgarian (Bulgaria)</option>
+                           <option value="my-MM">Burmese (Myanmar)</option>
+                           <option value="ca-ES">Catalan (Spain)</option>
+                           <option value="zh-CN">Chinese-simplified (China)</option>
+                           <option value="zh-SG">Chinese-simplified (Singapore)</option>
+                           <option value="zh-HK">Chinese-traditional (Hong Kong S.A.R. of China)</option>
+                           <option value="zh-MO">Chinese-traditional (Macao)</option>
+                           <option value="zh-TW">Chinese-traditional (Taiwan)</option>
+                           <option value="hr-HR">Croatian (Croatia)</option>
+                           <option value="cs-CZ">Czech (Czech Republic)</option>
+                           <option value="da-DK">Danish (Denmark)</option>
+                           <option value="nl-BE">Dutch (Belgium)</option>
+                           <option value="nl-NL">Dutch (The Netherlands)</option>
+                           <option value="en-AU">English (Australia)</option>
+                           <option value="en-BE">English (Belgium)</option>
+                           <option value="en-CM">English (Cameroon)</option>
+                           <option value="en-CA">English (Canada)</option>
+                           <option value="en-GH">English (Ghana)</option>
+                           <option value="en-HK">English (Hong Kong S.A.R. of China)</option>
+                           <option value="en-IN">English (India)</option>
+                           <option value="en-IE">English (Ireland)</option>
+                           <option value="en-KE">English (Kenya)</option>
+                           <option value="en-MU">English (Mauritius)</option>
+                           <option value="en-NZ">English (New Zealand)</option>
+                           <option value="en-NG">English (Nigeria)</option>
+                           <option value="en-PH">English (Philippines)</option>
+                           <option value="en-SG">English (Singapore)</option>
+                           <option value="en-ZA">English (South Africa)</option>
+                           <option value="en-TZ">English (Tanzania)</option>
+                           <option value="en-GB">English (United Kingdom)</option>
+                           <option value="en-US">English (United States)</option>
+                           <option value="en-ZM">English (Zambia)</option>
+                           <option value="et-EE">Estonian (Estonia)</option>
+                           <option value="tl-PH">Filipino (Philippines)</option>
+                           <option value="fi-FI">Finnish (Finland)</option>
+                           <option value="fr-DZ">French (Algeria)</option>
+                           <option value="fr-CM">French (Cameroon)</option>
+                           <option value="fr-CD">French (Democratic Republic of the Congo)</option>
+                           <option value="fr-BE">French (Belgium)</option>
+                           <option value="fr-CA">French (Canada)</option>
+                           <option value="fr-FR">French (France)</option>
+                           <option value="fr-CI">French (Ivory Coast [Côte d’Ivoire])</option>
+                           <option value="fr-LU">French (Luxembourg)</option>
+                           <option value="fr-MR">French (Mauritania)</option>
+                           <option value="fr-MU">French (Mauritius)</option>
+                           <option value="fr-MA">French (Morocco)</option>
+                           <option value="fr-SN">French (Senegal)</option>
+                           <option value="fr-CH">French (Switzerland)</option>
+                           <option value="fr-TN">French (Tunisia)</option>
+                           <option value="gl-ES">Galician (Spain)</option>
+                           <option value="lg-UG">Ganda (Uganda)</option>
+                           <option value="ka-GE">Georgian (Georgia)</option>
+                           <option value="de-AT">German (Austria)</option>
+                           <option value="de-DE">German (Germany)</option>
+                           <option value="de-LU">German (Luxembourg)</option>
+                           <option value="de-CH">German (Switzerland)</option>
+                           <option value="el-GR">Greek (Greece)</option>
+                           <option value="gu-IN">Gujarati (India)</option>
+                           <option value="ha-NG">Hausa (Nigeria)</option>
+                           <option value="he-IL">Hebrew (Israel)</option>
+                           <option value="hi-IN">Hindi (India)</option>
+                           <option value="hu-HU">Hungarian (Hungary)</option>
+                           <option value="is-IS">Icelandic (Iceland)</option>
+                           <option value="ig-NG">Igbo (Nigeria)</option>
+                           <option value="id-ID">Indonesian (Indonesia)</option>
+                           <option value="it-IT">Italian (Italy)</option>
+                           <option value="it-CH">Italian (Switzerland)</option>
+                           <option value="ja-JP">Japanese (Japan)</option>
+                           <option value="kn-IN">Kannada (India)</option>
+                           <option value="kk-KZ">Kazakh (Kazakhstan)</option>
+                           <option value="km-KH">Khmer (Cambodia)</option>
+                           <option value="rw-RW">Kinyarwanda (Rwanda)</option>
+                           <option value="kok-IN">Konkani (India)</option>
+                           <option value="ko-KR">Korean (Korea, South)</option>
+                           <option value="lo-LA">Lao (Laos)</option>
+                           <option value="lv-LV">Latvian (Latvia)</option>
+                           <option value="lt-LT">Lithuanian (Lithuania)</option>
+                           <option value="mk-MK">Macedonian (Macedonia)</option>
+                           <option value="ms-MY">Malay-Latin (Malaysia)</option>
+                           <option value="ml-IN">Malayalam (India)</option>
+                           <option value="mt-MT">Maltese (Malta)</option>
+                           <option value="mr-IN">Marathi (India)</option>
+                           <option value="mn-Cyrl-MN">Mongolian-Cyrillic (Mongolia)</option>
+                           <option value="ne-IN">Nepali (India)</option>
+                           <option value="ne-NP">Nepali (Nepal)</option>
+                           <option value="nb-NO">Norwegian Bokmål (Norway)</option>
+                           <option value="nn-NO">Norwegian Nynorsk (Norway)</option>
+                           <option value="or-IN">Oriya [aka, Odia] (India)</option>
+                           <option value="om-ET">Oromo (Ethiopia)</option>
+                           <option value="pl-PL">Polish (Poland)</option>
+                           <option value="pt-AO">Portuguese (Angola)</option>
+                           <option value="pt-BR">Portuguese (Brazil)</option>
+                           <option value="pt-MO">Portuguese (Macao)</option>
+                           <option value="pt-MZ">Portuguese (Mozambique)</option>
+                           <option value="pt-PT">Portuguese (Portugal)</option>
+                           <option value="pa-IN">Punjabi (India)</option>
+                           <option value="ro-RO">Romanian (Romania)</option>
+                           <option value="ru-RU">Russian (Russia)</option>
+                           <option value="sr-RS">Serbian-Cyrillic (Serbia)</option>
+                           <option value="sr-ME">Serbian-Latin (Montenegro)</option>
+                           <option value="sr-Latn-RS">Serbian-Latin (Serbia)</option>
+                           <option value="si-LK">Sinhala (Sri Lanka)</option>
+                           <option value="sk-SK">Slovak (Slovakia)</option>
+                           <option value="sl-SI">Slovenian (Slovenia)</option>
+                           <option value="es-AR">Spanish (Argentina)</option>
+                           <option value="es-BO">Spanish (Bolivia)</option>
+                           <option value="es-CL">Spanish (Chile)</option>
+                           <option value="es-CO">Spanish (Colombia)</option>
+                           <option value="es-CR">Spanish (Costa Rica)</option>
+                           <option value="es-DO">Spanish (Dominican Republic)</option>
+                           <option value="es-EC">Spanish (Ecuador)</option>
+                           <option value="es-SV">Spanish (El Salvador)</option>
+                           <option value="es-GT">Spanish (Guatemala)</option>
+                           <option value="es-HN">Spanish (Honduras)</option>
+                           <option value="es-MX">Spanish (Mexico)</option>
+                           <option value="es-NI">Spanish (Nicaragua)</option>
+                           <option value="es-PA">Spanish (Panama)</option>
+                           <option value="es-PY">Spanish (Paraguay)</option>
+                           <option value="es-PE">Spanish (Peru)</option>
+                           <option value="es-PR">Spanish (Puerto Rico)</option>
+                           <option value="es-ES">Spanish (Spain)</option>
+                           <option value="es-US">Spanish (United States)</option>
+                           <option value="es-UY">Spanish (Uruguay)</option>
+                           <option value="es-VE">Spanish (Venezuela)</option>
+                           <option value="sw-KE">Swahili (Kenya)</option>
+                           <option value="sw-TZ">Swahili (Tanzania)</option>
+                           <option value="sv-SE">Swedish (Sweden)</option>
+                           <option value="ta-IN">Tamil (India)</option>
+                           <option value="te-IN">Telugu (India)</option>
+                           <option value="th-TH">Thai (Thailand)</option>
+                           <option value="tr-TR">Turkish (Turkey)</option>
+                           <option value="uk-UA">Ukrainian (Ukraine)</option>
+                           <option value="ur-IN">Urdu (India)</option>
+                           <option value="ur-PK">Urdu (Pakistan)</option>
+                           <option value="uz-Cyrl-UZ">Uzbek-Cyrillic (Uzbekistan)</option>
+                           <option value="uz-Latn-UZ">Uzbek-Latin (Uzbekistan)</option>
+                           <option value="vi-VN">Vietnamese (Vietnam)</option>
+                           <option value="cy-GB">Welsh (United Kingdom)</option>
+                           <option value="yo-NG">Yoruba (Nigeria)</option>
+                           <option value="zu-ZA">Zulu (South Africa)</option>
+                           <option value="az-AZ">Azerbaijani-Latin (Azerbaijan)</option>
+                           <option value="sr-CS">Serbian-Cyrillic ()</option>
+                           <option value="sr-Cyrl-CS">Serbian-Cyrillic (Serbia and Montenegro)</option>
+                           <option value="sr-Latn-CS">Serbian-Latin (Serbia and Montenegro)</option>
+                        </select>
+                    </div>
+                </form>
+            </div>
+            <div class="row">
+                <div class="col-lg-4 delayed-fadein">
+                    <p class="text-muted powered hidden">Powered by:</p>
+                    <ul id="wok-logos" class="list-inline"></ul>
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ui/pages/login.html.tmpl.ubuntu b/ui/pages/login.html.tmpl.ubuntu
new file mode 100644
index 0000000..3d8ddcc
--- /dev/null
+++ b/ui/pages/login.html.tmpl.ubuntu
@@ -0,0 +1,332 @@
+#*
+ * Project Wok
+ *
+ * Copyright IBM Corp, 2014-2016
+ *
+ * Code derived from Project Kimchi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+#silent next = "?next=%s" % $getVar('data.next', '') if $getVar('data.next', '') else ""
+#from wok.config import get_version
+<!DOCTYPE html>
+<html lang="$lang.lang[0]">
+<head>
+    <meta charset="UTF-8">
+    <title>Wok</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-title" content="Wok">
+    <link href="$href('images/apple-touch-icon-57x57.png')" sizes="57x57" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-72x72.png')" sizes="72x72" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-76x76.png')" sizes="76x76" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-114x114.png')" sizes="114x114" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-144x144.png')" sizes="144x144" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-152x152.png')" sizes="152x152" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-180x180.png')" sizes="120x120" rel="apple-touch-icon-precomposed">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-36x36.png')" sizes="36x36">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-48x48.png')" sizes="48x48">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-72x72.png')" sizes="72x72">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-144x144.png')" sizes="144x144">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-192x192.png')" sizes="192x192">
+    <link rel="icon" type="image/png" href="$href('images/favicon-16x16.png')" sizes="16x16">
+    <link rel="icon" type="image/png" href="$href('images/favicon-32x32.png')" sizes="32x32">
+    <link rel="icon" type="image/png" href="$href('images/favicon-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/favicon-194x194.png')" sizes="194x194">
+    <link rel="mask-icon" href="$href('images/safari-pinned-tab.svg')" color="#5bbad5">
+    <meta name="application-name" content="Wok">
+    <meta name="msapplication-config" content="none" />
+    <meta name="msapplication-TileColor" content="#f73434" />
+    <meta name="msapplication-square70x70logo" content="$href('images/mstile-70x70.png')" />
+    <meta name="msapplication-square150x150logo" content="$href('images/mstile-150x150.png')" />
+    <meta name="msapplication-wide310x150logo" content="$href('images/mstile-310x310.png')" />
+    <meta name="msapplication-square310x310logo" content="$href('images/mstile-310x150.png')" />
+    <link rel="stylesheet" href="/usr/share/javascript/jquery-ui/css/smoothness/jquery-ui.min.css">
+    <link rel="stylesheet" href="/usr/share/javascript/jquery-ui/css/smoothness/jquery-ui.css">
+    <link rel="stylesheet" href="/usr/share/javascript/bootstrap/css/bootstrap.css">
+    <link rel="stylesheet" href="$href('libs/bootstrap-select/dist/css/bootstrap-select.min.css')">
+    <link rel="stylesheet" href="$href('libs/datatables/css/datatables.min.css')">
+    <link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
+    <link rel="stylesheet" href="$href('css/opensans/opensans.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap-select.custom.css')">
+    <link rel="stylesheet" href="$href('css/datatables.bootstrap.css')">
+    <link rel="stylesheet" href="$href('css/wok.css')">
+    <script src="$href('libs/es5-shim/es5-shim.min.js')"></script>
+    <script src="/usr/share/javascript/jquery/jquery.min.js"></script>
+    <script src="/usr/share/javascript/jquery-ui/jquery-ui.min.js"></script>
+    <script src="/usr/share/javascript/jquery-ui/ui/i18n/jquery-ui-i18n.js"></script>
+    <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script>
+    <script src="/usr/share/javascript/bootstrap/js/bootstrap.min.js"></script>
+    <script src="$href('libs/bootstrap-select/dist/js/bootstrap-select.min.js')"></script>
+    <script src="/usr/share/javascript/lodash.js"></script>
+    <script src="$href('libs/moment/moment-with-locales.min.js')"></script>
+    <script src="$href('libs/datatables/js/datatables.min.js')"></script>
+    <script src="$href('js/wok.min.js')"></script>
+</head>
+<body class="login" onload="wok.login_main()">
+    <div class="topbar">
+        <nav class="navbar navbar-inverse">
+            <div class="container">
+                <div class="navbar-header">
+                    <a class="navbar-brand" href="#">Wok</a>
+                </div>
+            </div>
+        </nav>
+        <nav class="navbar navbar-default">
+            <div class="container">
+                <div class="navbar-header">
+                </div>
+                    <ul class="nav navbar-nav">
+                        <li class="hostname"><span class="host-location"></span></li>
+                    </ul>
+            </div>
+        </nav>
+    </div>
+    <div class="content">
+        <div class="container">
+            <div id="login-window" class="login-area row">
+                <div class="err-area">
+                    <div id="messUserPass" class="alert alert-danger" style="display: none;">$_("The username or password you entered is incorrect. Please try again.")</div>
+                    <div id="messSession" class="alert alert-danger" style="display: none;">$_("Session timeout, please re-login.")</div>
+                    <div id="missServer" class="alert alert-danger" style="display: none;">$_("Server unreachable.")</div>
+                </div>
+                <form id="form-login" class="form-horizontal" method="post">
+                    <div class="form-group">
+                        <label for="username" class="sr-only">$_("User Name")</label>
+                        <input type="text" class="form-control" id="username" name="username" required="required" placeholder="$_(" User Name ")" autofocus autocomplete="off" />
+                        <div id="username-msg" class="msg-required"></div>
+                    </div>
+                    <div class="form-group">
+                        <label for="password" class="sr-only">$_("Password")</label>
+                        <input type="password" class="form-control" id="password" name="password" required="required" placeholder="$_(" Password ")"  autocomplete="off" />
+                        <div id="password-msg" class="msg-required"></div>
+                    </div>
+                    <div class="form-group">
+                        <button id="btn-login" class="btn btn-login col-md-12 col-lg-12">
+                            <span id="login">$_("Log in")</span>
+                            <span id="logging" style="display: none;">$_("Logging in...")</span>
+                        </button>
+                    </div>
+                    <div class="form-group">
+                        <label for="userLang">$_("Language")</label>
+                        <select id="userLang" class="selectpicker col-md-12 col-lg-12">
+                            <option value="en_US">English (US)</option>
+                            <option value="zh_CN">中文(简体)</option>
+                            <option value="pt_BR">Português (Brasil)</option>
+                            <option value="de_DE">Deutsch (Deutschland)</option>
+                            <option value="es_ES">Español (España)</option>
+                            <option value="fr_FR">Français (France)</option>
+                            <option value="it_IT">Italiano (Italia)</option>
+                            <option value="ja_JP">日本語 (日本)</option>
+                            <option value="ko_KR">한국어 (대한민국)</option>
+                            <option value="ru_RU">Русский (Россия)</option>
+                            <option value="zh_TW">中文(繁體)</option>
+                        </select>
+                    </div>
+                    <div class="form-group">
+                        <label for="userLocale">$_("Locale")</label>
+                        <select id="userLocale" class="selectpicker col-md-12 col-lg-12">
+                           <option value="af-ZA">Afrikaans (South Africa)</option>
+                           <option value="sq-AL">Albanian (Albania)</option>
+                           <option value="am-ET">Amharic (Ethiopia)</option>
+                           <option value="ar-DZ">Arabic (Algeria)</option>
+                           <option value="ar-BH">Arabic (Bahrain)</option>
+                           <option value="ar-EG">Arabic (Egypt)</option>
+                           <option value="ar-IQ">Arabic (Iraq)</option>
+                           <option value="ar-JO">Arabic (Jordan)</option>
+                           <option value="ar-KW">Arabic (Kuwait)</option>
+                           <option value="ar-LB">Arabic (Lebanon)</option>
+                           <option value="ar-LY">Arabic (Libya)</option>
+                           <option value="ar-MR">Arabic (Mauritania)</option>
+                           <option value="ar-MA">Arabic (Morocco)</option>
+                           <option value="ar-OM">Arabic (Oman)</option>
+                           <option value="ar-QA">Arabic (Qatar)</option>
+                           <option value="ar-SA">Arabic (Saudi Arabia)</option>
+                           <option value="ar-SY">Arabic (Syria)</option>
+                           <option value="ar-TN">Arabic (Tunisia)</option>
+                           <option value="ar-AE">Arabic (United Arab Emirates)</option>
+                           <option value="ar-YE">Arabic (Yemen)</option>
+                           <option value="hy-AM">Armenian (Armenia)</option>
+                           <option value="as-IN">Assamese (India)</option>
+                           <option value="az-AZ">Azerbaijani (Azerbaijan)</option>
+                           <option value="eu-ES">Basque (Spain)</option>
+                           <option value="be-BY">Belarusian (Belarus)</option>
+                           <option value="bn-BD">Bengali (Bangladesh)</option>
+                           <option value="bn-IN">Bengali (India)</option>
+                           <option value="bs-BA">Bosnian (Bosnia)</option>
+                           <option value="bg-BG">Bulgarian (Bulgaria)</option>
+                           <option value="my-MM">Burmese (Myanmar)</option>
+                           <option value="ca-ES">Catalan (Spain)</option>
+                           <option value="zh-CN">Chinese-simplified (China)</option>
+                           <option value="zh-SG">Chinese-simplified (Singapore)</option>
+                           <option value="zh-HK">Chinese-traditional (Hong Kong S.A.R. of China)</option>
+                           <option value="zh-MO">Chinese-traditional (Macao)</option>
+                           <option value="zh-TW">Chinese-traditional (Taiwan)</option>
+                           <option value="hr-HR">Croatian (Croatia)</option>
+                           <option value="cs-CZ">Czech (Czech Republic)</option>
+                           <option value="da-DK">Danish (Denmark)</option>
+                           <option value="nl-BE">Dutch (Belgium)</option>
+                           <option value="nl-NL">Dutch (The Netherlands)</option>
+                           <option value="en-AU">English (Australia)</option>
+                           <option value="en-BE">English (Belgium)</option>
+                           <option value="en-CM">English (Cameroon)</option>
+                           <option value="en-CA">English (Canada)</option>
+                           <option value="en-GH">English (Ghana)</option>
+                           <option value="en-HK">English (Hong Kong S.A.R. of China)</option>
+                           <option value="en-IN">English (India)</option>
+                           <option value="en-IE">English (Ireland)</option>
+                           <option value="en-KE">English (Kenya)</option>
+                           <option value="en-MU">English (Mauritius)</option>
+                           <option value="en-NZ">English (New Zealand)</option>
+                           <option value="en-NG">English (Nigeria)</option>
+                           <option value="en-PH">English (Philippines)</option>
+                           <option value="en-SG">English (Singapore)</option>
+                           <option value="en-ZA">English (South Africa)</option>
+                           <option value="en-TZ">English (Tanzania)</option>
+                           <option value="en-GB">English (United Kingdom)</option>
+                           <option value="en-US">English (United States)</option>
+                           <option value="en-ZM">English (Zambia)</option>
+                           <option value="et-EE">Estonian (Estonia)</option>
+                           <option value="tl-PH">Filipino (Philippines)</option>
+                           <option value="fi-FI">Finnish (Finland)</option>
+                           <option value="fr-DZ">French (Algeria)</option>
+                           <option value="fr-CM">French (Cameroon)</option>
+                           <option value="fr-CD">French (Democratic Republic of the Congo)</option>
+                           <option value="fr-BE">French (Belgium)</option>
+                           <option value="fr-CA">French (Canada)</option>
+                           <option value="fr-FR">French (France)</option>
+                           <option value="fr-CI">French (Ivory Coast [Côte d’Ivoire])</option>
+                           <option value="fr-LU">French (Luxembourg)</option>
+                           <option value="fr-MR">French (Mauritania)</option>
+                           <option value="fr-MU">French (Mauritius)</option>
+                           <option value="fr-MA">French (Morocco)</option>
+                           <option value="fr-SN">French (Senegal)</option>
+                           <option value="fr-CH">French (Switzerland)</option>
+                           <option value="fr-TN">French (Tunisia)</option>
+                           <option value="gl-ES">Galician (Spain)</option>
+                           <option value="lg-UG">Ganda (Uganda)</option>
+                           <option value="ka-GE">Georgian (Georgia)</option>
+                           <option value="de-AT">German (Austria)</option>
+                           <option value="de-DE">German (Germany)</option>
+                           <option value="de-LU">German (Luxembourg)</option>
+                           <option value="de-CH">German (Switzerland)</option>
+                           <option value="el-GR">Greek (Greece)</option>
+                           <option value="gu-IN">Gujarati (India)</option>
+                           <option value="ha-NG">Hausa (Nigeria)</option>
+                           <option value="he-IL">Hebrew (Israel)</option>
+                           <option value="hi-IN">Hindi (India)</option>
+                           <option value="hu-HU">Hungarian (Hungary)</option>
+                           <option value="is-IS">Icelandic (Iceland)</option>
+                           <option value="ig-NG">Igbo (Nigeria)</option>
+                           <option value="id-ID">Indonesian (Indonesia)</option>
+                           <option value="it-IT">Italian (Italy)</option>
+                           <option value="it-CH">Italian (Switzerland)</option>
+                           <option value="ja-JP">Japanese (Japan)</option>
+                           <option value="kn-IN">Kannada (India)</option>
+                           <option value="kk-KZ">Kazakh (Kazakhstan)</option>
+                           <option value="km-KH">Khmer (Cambodia)</option>
+                           <option value="rw-RW">Kinyarwanda (Rwanda)</option>
+                           <option value="kok-IN">Konkani (India)</option>
+                           <option value="ko-KR">Korean (Korea, South)</option>
+                           <option value="lo-LA">Lao (Laos)</option>
+                           <option value="lv-LV">Latvian (Latvia)</option>
+                           <option value="lt-LT">Lithuanian (Lithuania)</option>
+                           <option value="mk-MK">Macedonian (Macedonia)</option>
+                           <option value="ms-MY">Malay-Latin (Malaysia)</option>
+                           <option value="ml-IN">Malayalam (India)</option>
+                           <option value="mt-MT">Maltese (Malta)</option>
+                           <option value="mr-IN">Marathi (India)</option>
+                           <option value="mn-Cyrl-MN">Mongolian-Cyrillic (Mongolia)</option>
+                           <option value="ne-IN">Nepali (India)</option>
+                           <option value="ne-NP">Nepali (Nepal)</option>
+                           <option value="nb-NO">Norwegian Bokmål (Norway)</option>
+                           <option value="nn-NO">Norwegian Nynorsk (Norway)</option>
+                           <option value="or-IN">Oriya [aka, Odia] (India)</option>
+                           <option value="om-ET">Oromo (Ethiopia)</option>
+                           <option value="pl-PL">Polish (Poland)</option>
+                           <option value="pt-AO">Portuguese (Angola)</option>
+                           <option value="pt-BR">Portuguese (Brazil)</option>
+                           <option value="pt-MO">Portuguese (Macao)</option>
+                           <option value="pt-MZ">Portuguese (Mozambique)</option>
+                           <option value="pt-PT">Portuguese (Portugal)</option>
+                           <option value="pa-IN">Punjabi (India)</option>
+                           <option value="ro-RO">Romanian (Romania)</option>
+                           <option value="ru-RU">Russian (Russia)</option>
+                           <option value="sr-RS">Serbian-Cyrillic (Serbia)</option>
+                           <option value="sr-ME">Serbian-Latin (Montenegro)</option>
+                           <option value="sr-Latn-RS">Serbian-Latin (Serbia)</option>
+                           <option value="si-LK">Sinhala (Sri Lanka)</option>
+                           <option value="sk-SK">Slovak (Slovakia)</option>
+                           <option value="sl-SI">Slovenian (Slovenia)</option>
+                           <option value="es-AR">Spanish (Argentina)</option>
+                           <option value="es-BO">Spanish (Bolivia)</option>
+                           <option value="es-CL">Spanish (Chile)</option>
+                           <option value="es-CO">Spanish (Colombia)</option>
+                           <option value="es-CR">Spanish (Costa Rica)</option>
+                           <option value="es-DO">Spanish (Dominican Republic)</option>
+                           <option value="es-EC">Spanish (Ecuador)</option>
+                           <option value="es-SV">Spanish (El Salvador)</option>
+                           <option value="es-GT">Spanish (Guatemala)</option>
+                           <option value="es-HN">Spanish (Honduras)</option>
+                           <option value="es-MX">Spanish (Mexico)</option>
+                           <option value="es-NI">Spanish (Nicaragua)</option>
+                           <option value="es-PA">Spanish (Panama)</option>
+                           <option value="es-PY">Spanish (Paraguay)</option>
+                           <option value="es-PE">Spanish (Peru)</option>
+                           <option value="es-PR">Spanish (Puerto Rico)</option>
+                           <option value="es-ES">Spanish (Spain)</option>
+                           <option value="es-US">Spanish (United States)</option>
+                           <option value="es-UY">Spanish (Uruguay)</option>
+                           <option value="es-VE">Spanish (Venezuela)</option>
+                           <option value="sw-KE">Swahili (Kenya)</option>
+                           <option value="sw-TZ">Swahili (Tanzania)</option>
+                           <option value="sv-SE">Swedish (Sweden)</option>
+                           <option value="ta-IN">Tamil (India)</option>
+                           <option value="te-IN">Telugu (India)</option>
+                           <option value="th-TH">Thai (Thailand)</option>
+                           <option value="tr-TR">Turkish (Turkey)</option>
+                           <option value="uk-UA">Ukrainian (Ukraine)</option>
+                           <option value="ur-IN">Urdu (India)</option>
+                           <option value="ur-PK">Urdu (Pakistan)</option>
+                           <option value="uz-Cyrl-UZ">Uzbek-Cyrillic (Uzbekistan)</option>
+                           <option value="uz-Latn-UZ">Uzbek-Latin (Uzbekistan)</option>
+                           <option value="vi-VN">Vietnamese (Vietnam)</option>
+                           <option value="cy-GB">Welsh (United Kingdom)</option>
+                           <option value="yo-NG">Yoruba (Nigeria)</option>
+                           <option value="zu-ZA">Zulu (South Africa)</option>
+                           <option value="az-AZ">Azerbaijani-Latin (Azerbaijan)</option>
+                           <option value="sr-CS">Serbian-Cyrillic ()</option>
+                           <option value="sr-Cyrl-CS">Serbian-Cyrillic (Serbia and Montenegro)</option>
+                           <option value="sr-Latn-CS">Serbian-Latin (Serbia and Montenegro)</option>
+                        </select>
+                    </div>
+                </form>
+            </div>
+            <div class="row">
+                <div class="col-lg-4 delayed-fadein">
+                    <p class="text-muted powered hidden">Powered by:</p>
+                    <ul id="wok-logos" class="list-inline"></ul>
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ui/pages/wok-ui.html.tmpl.fedora b/ui/pages/wok-ui.html.tmpl.fedora
new file mode 100644
index 0000000..1dcf0df
--- /dev/null
+++ b/ui/pages/wok-ui.html.tmpl.fedora
@@ -0,0 +1,231 @@
+#*
+ * Project Wok
+ *
+ * Copyright IBM Corp, 2015-2016
+ *
+ * Code derived from Project Kimchi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+#from wok.config import get_version
+<!DOCTYPE html>
+<html lang="$lang.lang[0]">
+<head>
+    <meta charset="UTF-8">
+    <title>Wok</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-title" content="Wok">
+    <link href="$href('images/apple-touch-icon-57x57.png')" sizes="57x57" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-72x72.png')" sizes="72x72" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-76x76.png')" sizes="76x76" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-114x114.png')" sizes="114x114" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-144x144.png')" sizes="144x144" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-152x152.png')" sizes="152x152" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-180x180.png')" sizes="120x120" rel="apple-touch-icon-precomposed">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-36x36.png')" sizes="36x36">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-48x48.png')" sizes="48x48">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-72x72.png')" sizes="72x72">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-144x144.png')" sizes="144x144">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-192x192.png')" sizes="192x192">
+    <link rel="icon" type="image/png" href="$href('images/favicon-16x16.png')" sizes="16x16">
+    <link rel="icon" type="image/png" href="$href('images/favicon-32x32.png')" sizes="32x32">
+    <link rel="icon" type="image/png" href="$href('images/favicon-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/favicon-194x194.png')" sizes="194x194">
+    <link rel="mask-icon" href="$href('images/safari-pinned-tab.svg')" color="#5bbad5">
+    <meta name="application-name" content="Wok">
+    <meta name="msapplication-config" content="none" />
+    <meta name="msapplication-TileColor" content="#f73434" />
+    <meta name="msapplication-square70x70logo" content="$href('images/mstile-70x70.png')" />
+    <meta name="msapplication-square150x150logo" content="$href('images/mstile-150x150.png')" />
+    <meta name="msapplication-wide310x150logo" content="$href('images/mstile-310x310.png')" />
+    <meta name="msapplication-square310x310logo" content="$href('images/mstile-310x150.png')" />
+    <link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
+    <link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap.custom.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-select/dist/css/bootstrap-select.min.css')">
+    <link rel="stylesheet" href="$href('libs/jquery-bootgrid/dist/css/jquery.bootgrid.min.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-switch/dist/css/bootstrap-switch.min.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-editable/dist/css/bootstrap-editable.css')">
+    <link rel="stylesheet" href="$href('libs/datatables/css/datatables.min.css')">
+    <link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
+    <link rel="stylesheet" href="$href('css/opensans/opensans.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap-select.custom.css')">
+    <link rel="stylesheet" href="$href('css/datatables.bootstrap.css')">
+    <link rel="stylesheet" href="$href('css/wok.css')">
+    <script src="js/es5-shim.min.js"></script>
+    <script src="js/jquery.min.js"></script>
+    <script src="$href('libs/jquery-containsNC/jquery.containsNC.js')"></script>
+    <script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+    <script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
+    <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script>
+    <script src="$href('libs/list-js/list.min.js')"></script>
+    <script src="$href('libs/bootstrap/bootstrap.min.js')"></script>
+    <script src="$href('libs/bootstrap-select/dist/js/bootstrap-select.min.js')"></script>
+    <script src="$href('libs/jquery-bootgrid/dist/js/jquery.bootgrid.min.js')"></script>
+    <script src="$href('libs/bootstrap-switch/dist/js/bootstrap-switch.min.js')"></script>
+    <script src="$href('libs/bootstrap-editable/dist/js/bootstrap-editable.min.js')"></script>
+    <script src="js/typeahead.bundle.min.js"></script>
+    <script src="js/lodash.js"></script>
+    <script src="js/moment-with-locales.min.js"></script>
+    <script src="$href('libs/datatables/js/datatables.min.js')"></script>
+    <script src="$href('base64/jquery.base64.js')"></script>
+    <script src="$href('js/wok.min.js')"></script>
+    <!-- This is used for detecting if the UI needs to be built -->
+    <style type="text/css">
+    #buildme {
+        position: fixed;
+        background: rgba(0, 0, 0, 0.5);
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        z-index: 10000;
+    }
+    #buildme div {
+        background-color: #FFB2C0;
+        border-style: solid;
+        border-color: #FF0000;
+        padding: 30px;
+        width: 75%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 50px;
+        -moz-border-radius: 15px;
+        border-radius: 15px;
+    }
+    </style>
+    </head>
+<body onload="wok.main()">
+    <div class="topbar">
+        <nav class="navbar navbar-inverse">
+          <div class="container">
+            <div class="navbar-header">
+              <a id="logo" class="navbar-brand" href="#" title="Wok">Wok</a>
+            </div>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown hide-content peers" id="peers">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="topbar-text">$_("Peers")</span><span class="caret"></span></a>
+                   <ul class="dropdown-menu">
+                       <li id="search-peers"><span>$_("Searching")...</span></li>
+                       <li id="no-peers" class="hide-content">$_("No peers found.")</li>
+                   </ul>
+                </li>
+                <li class="dropdown" id="user-login">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+                        <i class="fa fa-user" id="user-icon"></i><span class="topbar-text empty-when-logged-off" id="user-name"></span><span class="caret"></span>
+                    </a>
+                    <ul class="dropdown-menu">
+                        <li class="critical"><a id="btn-logout" href="javascript: void(0);"><i class="fa fa-ban"></i><span>$_("Log out")</span></a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle"></i><span class="topbar-text">$_("Help")</span><span class="caret"></span></a>
+                    <ul class="dropdown-menu">
+                        <li><a id="btn-help" href="javascript: void(0);">$_("Help")</a></li>
+                        <li><a id="btn-about" href="#" data-toggle="modal" data-target="#aboutModal">$_("About")</a></li>
+                    </ul>
+                </li>
+            </ul>
+          </div>
+      </nav>
+      <nav class="navbar navbar-default">
+        <div class="container" id="navigation-bar">
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-menu" aria-expanded="false">
+                    <span class="sr-only">$_("Toggle navigation")</span>
+                    <span class="icon-bar"><!-- Hamburguer button here --></span>
+                </button>
+            </div>
+            <div id="functionalTabPanel" class="collapse navbar-collapse">
+                <ul class="nav navbar-nav">
+                    <li class="hostname"><span class="host-location"></span></li>
+                </ul>
+            </div>
+            <div id="tabPanel" class="collapse navbar-collapse">
+               <ul class="nav navbar-nav">
+               </ul>
+            </div>
+        </div>
+      </nav>
+    </div>
+    <div class="content">
+        <div id="main">
+        </div>
+    </div>
+    </div>
+
+    <div id="buildme" style="display:none">
+        <div><p>Oops!  It looks like I am running from a source tree and you forgot to build!
+    Please run the following command from the wok and plugins directories and reload this page:</p>
+        <p><code>make</code></p>
+        </div>
+    </div>
+
+    <div class="modal fade host-modal" id="aboutModal" tabindex="-1" role="dialog" labelledby="aboutModalLabel" aria-hidden="true">
+    </div>
+
+
+    <div class="fade in session-expiring" id="session-expiring-alert" hidden>
+      <button type="button" class="close">&times;</button>
+      <div class="well">
+        <p>$_("Your session will expire on: 30s. Do you want to renew it?")</p>
+        <div class="form-group">
+          <button class="btn btn-primary btn-xs" id="renew-session-button" onclick="wok.session.renewSession();">Renew</button>
+          <button class="btn btn-primary btn-xs" id="dismiss-session-button" onclick="wok.session.hideExpiringAlert();">Dismiss</button>
+        </div>
+      </div>
+    </div>
+
+
+    <script id="about-tmpl" type="wok/template">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content" >
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">$_("About")</h4>
+                </div>
+                <div class="modal-body">
+                    <div class="content">
+                        <div class="col-md-10">
+                                <ul id="wok-about" class="list-inline">
+                                    <li>
+                                        <img src="$href('images/wok.svg')" alt="Wok $get_version()" title="Wok">
+                                        <span class="plugin-title">Wok</span>
+                                        <span class="plugin-version">$get_version()</span>
+                                    </li>
+                                </ul>
+                        </div>
+                    </div>
+                 </div>
+            </div>
+         </div>
+    </script>
+    <footer class="footer">
+        <div class="container">
+            <p class="text-muted powered hidden">$_("Powered by"):</p>
+            <ul id="plugins">
+            </ul>
+            <span class="wok-version">Wok Version: $get_version()</span>
+        </div>
+    </footer>
+</body>
+</html>
diff --git a/ui/pages/wok-ui.html.tmpl.ubuntu b/ui/pages/wok-ui.html.tmpl.ubuntu
new file mode 100644
index 0000000..b458a6c
--- /dev/null
+++ b/ui/pages/wok-ui.html.tmpl.ubuntu
@@ -0,0 +1,231 @@
+#*
+ * Project Wok
+ *
+ * Copyright IBM Corp, 2015-2016
+ *
+ * Code derived from Project Kimchi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+#from wok.config import get_version
+<!DOCTYPE html>
+<html lang="$lang.lang[0]">
+<head>
+    <meta charset="UTF-8">
+    <title>Wok</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-title" content="Wok">
+    <link href="$href('images/apple-touch-icon-57x57.png')" sizes="57x57" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-72x72.png')" sizes="72x72" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-76x76.png')" sizes="76x76" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-114x114.png')" sizes="114x114" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-144x144.png')" sizes="144x144" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-152x152.png')" sizes="152x152" rel="apple-touch-icon-precomposed">
+    <link href="$href('images/apple-touch-icon-180x180.png')" sizes="120x120" rel="apple-touch-icon-precomposed">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-36x36.png')" sizes="36x36">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-48x48.png')" sizes="48x48">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-72x72.png')" sizes="72x72">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-144x144.png')" sizes="144x144">
+    <link rel="icon" type="image/png" href="$href('images/android-chrome-192x192.png')" sizes="192x192">
+    <link rel="icon" type="image/png" href="$href('images/favicon-16x16.png')" sizes="16x16">
+    <link rel="icon" type="image/png" href="$href('images/favicon-32x32.png')" sizes="32x32">
+    <link rel="icon" type="image/png" href="$href('images/favicon-96x96.png')" sizes="96x96">
+    <link rel="icon" type="image/png" href="$href('images/favicon-194x194.png')" sizes="194x194">
+    <link rel="mask-icon" href="$href('images/safari-pinned-tab.svg')" color="#5bbad5">
+    <meta name="application-name" content="Wok">
+    <meta name="msapplication-config" content="none" />
+    <meta name="msapplication-TileColor" content="#f73434" />
+    <meta name="msapplication-square70x70logo" content="$href('images/mstile-70x70.png')" />
+    <meta name="msapplication-square150x150logo" content="$href('images/mstile-150x150.png')" />
+    <meta name="msapplication-wide310x150logo" content="$href('images/mstile-310x310.png')" />
+    <meta name="msapplication-square310x310logo" content="$href('images/mstile-310x150.png')" />
+    <link rel="stylesheet" href="/usr/share/javascript/jquery-ui/css/smoothness/jquery-ui.min.css">
+    <link rel="stylesheet" href="/usr/share/javascript/jquery-ui/css/smoothness/jquery-ui.css">
+    <link rel="stylesheet" href="/usr/share/javascript/bootstrap/css/bootstrap.css">
+    <link rel="stylesheet" href="$href('libs/bootstrap-select/dist/css/bootstrap-select.min.css')">
+    <link rel="stylesheet" href="$href('libs/jquery-bootgrid/dist/css/jquery.bootgrid.min.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-switch/dist/css/bootstrap-switch.min.css')">
+    <link rel="stylesheet" href="$href('libs/bootstrap-editable/dist/css/bootstrap-editable.css')">
+    <link rel="stylesheet" href="$href('libs/datatables/css/datatables.min.css')">
+    <link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
+    <link rel="stylesheet" href="$href('css/opensans/opensans.css')">
+    <link rel="stylesheet" href="$href('css/bootstrap-select.custom.css')">
+    <link rel="stylesheet" href="$href('css/datatables.bootstrap.css')">
+    <link rel="stylesheet" href="$href('css/wok.css')">
+    <script src="$href('libs/es5-shim/es5-shim.min.js')"></script>
+    <script src="/usr/share/javascript/jquery/jquery.min.js""></script>
+    <script src="$href('libs/jquery-containsNC/jquery.containsNC.js')"></script>
+    <script src="/usr/share/javascript/jquery-ui/jquery-ui.min.js"></script>
+    <script src="/usr/share/javascript/jquery-ui/ui/i18n/jquery-ui-i18n.js"></script>
+    <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script>
+    <script src="$href('libs/list-js/list.min.js')"></script>
+    <script src="/usr/share/javascript/bootstrap/js/bootstrap.min.js"></script>
+    <script src="$href('libs/bootstrap-select/dist/js/bootstrap-select.min.js')"></script>
+    <script src="$href('libs/jquery-bootgrid/dist/js/jquery.bootgrid.min.js')"></script>
+    <script src="$href('libs/bootstrap-switch/dist/js/bootstrap-switch.min.js')"></script>
+    <script src="$href('libs/bootstrap-editable/dist/js/bootstrap-editable.min.js')"></script>
+    <script src="$href('libs/typeahead/typeahead.bundle.min.js')"></script>
+    <script src="/usr/share/javascript/lodash.js"></script>
+    <script src="$href('libs/moment/moment-with-locales.min.js')"></script>
+    <script src="$href('libs/datatables/js/datatables.min.js')"></script>
+    <script src="$href('base64/jquery.base64.js')"></script>
+    <script src="$href('js/wok.min.js')"></script>
+    <!-- This is used for detecting if the UI needs to be built -->
+    <style type="text/css">
+    #buildme {
+        position: fixed;
+        background: rgba(0, 0, 0, 0.5);
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        z-index: 10000;
+    }
+    #buildme div {
+        background-color: #FFB2C0;
+        border-style: solid;
+        border-color: #FF0000;
+        padding: 30px;
+        width: 75%;
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 50px;
+        -moz-border-radius: 15px;
+        border-radius: 15px;
+    }
+    </style>
+    </head>
+<body onload="wok.main()">
+    <div class="topbar">
+        <nav class="navbar navbar-inverse">
+          <div class="container">
+            <div class="navbar-header">
+              <a id="logo" class="navbar-brand" href="#" title="Wok">Wok</a>
+            </div>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown hide-content peers" id="peers">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="topbar-text">$_("Peers")</span><span class="caret"></span></a>
+                   <ul class="dropdown-menu">
+                       <li id="search-peers"><span>$_("Searching")...</span></li>
+                       <li id="no-peers" class="hide-content">$_("No peers found.")</li>
+                   </ul>
+                </li>
+                <li class="dropdown" id="user-login">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+                        <i class="fa fa-user" id="user-icon"></i><span class="topbar-text empty-when-logged-off" id="user-name"></span><span class="caret"></span>
+                    </a>
+                    <ul class="dropdown-menu">
+                        <li class="critical"><a id="btn-logout" href="javascript: void(0);"><i class="fa fa-ban"></i><span>$_("Log out")</span></a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle"></i><span class="topbar-text">$_("Help")</span><span class="caret"></span></a>
+                    <ul class="dropdown-menu">
+                        <li><a id="btn-help" href="javascript: void(0);">$_("Help")</a></li>
+                        <li><a id="btn-about" href="#" data-toggle="modal" data-target="#aboutModal">$_("About")</a></li>
+                    </ul>
+                </li>
+            </ul>
+          </div>
+      </nav>
+      <nav class="navbar navbar-default">
+        <div class="container" id="navigation-bar">
+            <div class="navbar-header">
+                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-menu" aria-expanded="false">
+                    <span class="sr-only">$_("Toggle navigation")</span>
+                    <span class="icon-bar"><!-- Hamburguer button here --></span>
+                </button>
+            </div>
+            <div id="functionalTabPanel" class="collapse navbar-collapse">
+                <ul class="nav navbar-nav">
+                    <li class="hostname"><span class="host-location"></span></li>
+                </ul>
+            </div>
+            <div id="tabPanel" class="collapse navbar-collapse">
+               <ul class="nav navbar-nav">
+               </ul>
+            </div>
+        </div>
+      </nav>
+    </div>
+    <div class="content">
+        <div id="main">
+        </div>
+    </div>
+    </div>
+
+    <div id="buildme" style="display:none">
+        <div><p>Oops!  It looks like I am running from a source tree and you forgot to build!
+    Please run the following command from the wok and plugins directories and reload this page:</p>
+        <p><code>make</code></p>
+        </div>
+    </div>
+
+    <div class="modal fade host-modal" id="aboutModal" tabindex="-1" role="dialog" labelledby="aboutModalLabel" aria-hidden="true">
+    </div>
+
+
+    <div class="fade in session-expiring" id="session-expiring-alert" hidden>
+      <button type="button" class="close">&times;</button>
+      <div class="well">
+        <p>$_("Your session will expire on: 30s. Do you want to renew it?")</p>
+        <div class="form-group">
+          <button class="btn btn-primary btn-xs" id="renew-session-button" onclick="wok.session.renewSession();">Renew</button>
+          <button class="btn btn-primary btn-xs" id="dismiss-session-button" onclick="wok.session.hideExpiringAlert();">Dismiss</button>
+        </div>
+      </div>
+    </div>
+
+
+    <script id="about-tmpl" type="wok/template">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content" >
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">$_("About")</h4>
+                </div>
+                <div class="modal-body">
+                    <div class="content">
+                        <div class="col-md-10">
+                                <ul id="wok-about" class="list-inline">
+                                    <li>
+                                        <img src="$href('images/wok.svg')" alt="Wok $get_version()" title="Wok">
+                                        <span class="plugin-title">Wok</span>
+                                        <span class="plugin-version">$get_version()</span>
+                                    </li>
+                                </ul>
+                        </div>
+                    </div>
+                 </div>
+            </div>
+         </div>
+    </script>
+    <footer class="footer">
+        <div class="container">
+            <p class="text-muted powered hidden">$_("Powered by"):</p>
+            <ul id="plugins">
+            </ul>
+            <span class="wok-version">Wok Version: $get_version()</span>
+        </div>
+    </footer>
+</body>
+</html>
-- 
2.5.5




More information about the Kimchi-devel mailing list