From 1637a1a4ddb579679264f1d38613fb866c056ef3 Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Thu, 25 Feb 2016 15:44:36 +0100
Subject: [PATCH] prettify html, added build tools

prettified html files
added sourcemaps, uglify, ngannotate to gulp
less files are concatenated into app.css
---
 vipra-ui/app/html/about.html                 |  29 +---
 vipra-ui/app/html/articles/index.html        |  16 +-
 vipra-ui/app/html/articles/show.html         |  11 +-
 vipra-ui/app/html/directives/alert.html      |   2 +-
 vipra-ui/app/html/directives/checkbox.html   |   3 +-
 vipra-ui/app/html/directives/dropdown.html   |   2 +-
 vipra-ui/app/html/directives/pagination.html |   2 +-
 vipra-ui/app/html/index.html                 |   6 +-
 vipra-ui/app/html/network.html               |   3 +-
 vipra-ui/app/html/topics/articles.html       |  18 +--
 vipra-ui/app/html/topics/index.html          |  16 +-
 vipra-ui/app/html/topics/show.html           |  13 +-
 vipra-ui/app/html/words/index.html           |  16 +-
 vipra-ui/app/html/words/show.html            |   9 +-
 vipra-ui/app/index.html                      | 148 +++++++++----------
 vipra-ui/gulpfile.js                         |  17 ++-
 vipra-ui/package.json                        |   2 +-
 17 files changed, 128 insertions(+), 185 deletions(-)

diff --git a/vipra-ui/app/html/about.html b/vipra-ui/app/html/about.html
index d84cf035..906d3837 100644
--- a/vipra-ui/app/html/about.html
+++ b/vipra-ui/app/html/about.html
@@ -2,33 +2,19 @@
   <div class="page-header">
     <h1>About</h1>
   </div>
-
   <p><strong>Vipra</strong></p>
-
   <p>Created by Eike Cochu</p>
-  
   <h3>Description</h3>
-
   <p>The Vipra application is a topic modeling based search system with a frontend web application, a backend REST service and a maintenance tool for data import and modeling. It attempts to leverage automatically discovered topic informations in document collections to ease collection browsing and organization. The search system relies on ElasticSearch and Apache Lucene.</p>
-
   <p>This application was created by Eike Cochu for his master's degree thesis in computer science, 2015-2016 at the Freie Universit&auml;t in Berlin, Germany.</p>
-  
   <h3>License</h3>
-
   <p>The MIT License (MIT)</p>
-
   <p>Copyright 2016 Eike Cochu</p>
-
   <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
-
   <p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
-
   <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
-
   <hr>
-
   <h3>Version</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -45,9 +31,7 @@
       </tr>
     </tbody>
   </table>
-  
   <h3>Host</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -64,9 +48,7 @@
       </tr>
     </tbody>
   </table>
-  
   <h3>VM</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -79,9 +61,7 @@
       </tr>
     </tbody>
   </table>
-
   <h3>Database</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -98,9 +78,7 @@
       </tr>
     </tbody>
   </table>
-
   <h3>Configuration</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -117,9 +95,7 @@
       </tr>
     </tbody>
   </table>
-
   <h3>Constants</h3>
-
   <table class="table table-bordered table-fixed">
     <tbody>
       <tr>
@@ -177,7 +153,7 @@
       </tr>
       <tr class="well">
         <td colspan="2">
-          The resulting likeliness precision of topic words. 
+          The resulting likeliness precision of topic words.
         </td>
       </tr>
       <tr>
@@ -262,5 +238,4 @@
     </tbody>
   </table>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/articles/index.html b/vipra-ui/app/html/articles/index.html
index f30bfbbc..85f4e3b1 100644
--- a/vipra-ui/app/html/articles/index.html
+++ b/vipra-ui/app/html/articles/index.html
@@ -1,6 +1,7 @@
 <div ng-cloak ng-hide="$state.current.name !== 'articles'">
   <div class="text-muted">
-    Found <ng-pluralize count="articlesTotal||0" when="{0:'no articles',1:'1 article',other:'{} articles'}"></ng-pluralize> in the database.
+    Found
+    <ng-pluralize count="articlesTotal||0" when="{0:'no articles',1:'1 article',other:'{} articles'}"></ng-pluralize> in the database.
     <span ng-show="articlesTotal">
       Sort by
       <ol class="nya-bs-select nya-bs-condensed" ng-model="sort" ng-model-store="sort" ng-model-default="'date'">
@@ -14,19 +15,14 @@
         <li value="-" class="nya-bs-option"><a>Descending</a></li>
       </ol>
     </span>
-    <br>
-    Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
+    <br> Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
   </div>
-
-  <pagination total="articlesTotal" page="page" limit="limit" change="changePage"/>
-
+  <pagination total="articlesTotal" page="page" limit="limit" change="changePage" />
   <ol ng-attr-start="{{(page-1)*limit+1}}">
     <li ng-repeat="article in articles">
       <a ui-sref="articles.show({id: article.id})" ng-bind="::article.title"></a>
     </li>
   </ol>
-
-  <pagination total="articlesTotal" page="page" limit="limit"/>
+  <pagination total="articlesTotal" page="page" limit="limit" />
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/articles/show.html b/vipra-ui/app/html/articles/show.html
index 06d1e784..3d0c7e94 100644
--- a/vipra-ui/app/html/articles/show.html
+++ b/vipra-ui/app/html/articles/show.html
@@ -1,7 +1,6 @@
 <div ng-cloak ng-hide="$state.current.name !== 'articles.show'">
   <div class="page-header">
     <h1 ng-bind="::article.title"></h1>
-
     <table class="item-actions">
       <tr>
         <td>
@@ -12,9 +11,7 @@
       </tr>
     </table>
   </div>
-
   <h3>Info <hide-link target="#info"/></h3>
-
   <div class="row" id="info">
     <div class="col-md-12">
       <table class="table table-bordered table-condensed table-fixed table-infos">
@@ -52,9 +49,7 @@
       </table>
     </div>
   </div>
-
   <h3>Topics <hide-link target="#topics"/></h3>
-
   <div class="row" id="topics">
     <div class="col-md-5">
       <table class="table table-morecondensed" ng-show="article.topics.length > 0">
@@ -68,7 +63,7 @@
         </tr>
         <tr ng-repeat="topic in article.topics | orderBy:topicSort:topicSortRev">
           <td>
-            <topic-link topic="topic.topic"/>
+            <topic-link topic="topic.topic" />
           </td>
           <td class="text-right" ng-bind-template="{{(topic.share*100).toFixed(1)}}%"></td>
         </tr>
@@ -79,9 +74,7 @@
       <div class="pie-chart" id="topic-share" highcharts="topicShare"></div>
     </div>
   </div>
-
   <hr>
   <p ng-bind-html="::article.text" class="text-justify"></p>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/directives/alert.html b/vipra-ui/app/html/directives/alert.html
index 441726d4..97d85099 100644
--- a/vipra-ui/app/html/directives/alert.html
+++ b/vipra-ui/app/html/directives/alert.html
@@ -3,4 +3,4 @@
     <span aria-hidden="true">&times;</span>
   </button>
   <ng-transclude/>
-</div>
\ No newline at end of file
+</div>
diff --git a/vipra-ui/app/html/directives/checkbox.html b/vipra-ui/app/html/directives/checkbox.html
index 86e0cf2d..b951ed8d 100644
--- a/vipra-ui/app/html/directives/checkbox.html
+++ b/vipra-ui/app/html/directives/checkbox.html
@@ -1,3 +1,2 @@
 <input type="checkbox" ng-model="ngModel" style="display:none">
-
-<span class="glyphicon" ng-class="{'glyphicon-unchecked':!ngModel,'glyphicon-check':ngModel}" ng-click="ngModel=!ngModel"></span>
\ No newline at end of file
+<span class="glyphicon" ng-class="{'glyphicon-unchecked':!ngModel,'glyphicon-check':ngModel}" ng-click="ngModel=!ngModel"></span>
diff --git a/vipra-ui/app/html/directives/dropdown.html b/vipra-ui/app/html/directives/dropdown.html
index 1da0a980..70c61a65 100644
--- a/vipra-ui/app/html/directives/dropdown.html
+++ b/vipra-ui/app/html/directives/dropdown.html
@@ -4,4 +4,4 @@
     <span class="caret"></span>
   </button>
   <ul ng-attr-class="{{'dropdown-menu ' + align}}" ng-attr-aria-labelledby="{{dropdownId}}" ng-transclude></ul>
-</div>
\ No newline at end of file
+</div>
diff --git a/vipra-ui/app/html/directives/pagination.html b/vipra-ui/app/html/directives/pagination.html
index 2f38a4f4..adc925d4 100644
--- a/vipra-ui/app/html/directives/pagination.html
+++ b/vipra-ui/app/html/directives/pagination.html
@@ -25,4 +25,4 @@
       <a ng-click="toPage()">Page...</a>
     </li>
   </ul>
-</nav>
\ No newline at end of file
+</nav>
diff --git a/vipra-ui/app/html/index.html b/vipra-ui/app/html/index.html
index 833c9fcc..7124f615 100644
--- a/vipra-ui/app/html/index.html
+++ b/vipra-ui/app/html/index.html
@@ -4,7 +4,6 @@
       <div class="heading"></div>
     </div>
   </div>
-
   <div class="row" ng-hide="search">
     <div class="col-md-6 text-center">
       <h4>Latest articles</h4>
@@ -31,13 +30,11 @@
       </ul>
     </div>
   </div>
-
   <div class="row row-spaced">
     <div class="col-md-12">
       <input type="text" class="form-control input-lg" placeholder="Search..." ng-model="search" ng-model-options="{debounce:500}">
     </div>
   </div>
-
   <div class="row row-spaced">
     <div class="text-center" ng-show="searching">
       Searching...
@@ -60,5 +57,4 @@
     </div>
   </div>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/network.html b/vipra-ui/app/html/network.html
index 431188c6..6d933364 100644
--- a/vipra-ui/app/html/network.html
+++ b/vipra-ui/app/html/network.html
@@ -14,5 +14,4 @@
     <div class="fullsize navpadding" id="visgraph"></div>
   </div>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/topics/articles.html b/vipra-ui/app/html/topics/articles.html
index 2818921c..a165d374 100644
--- a/vipra-ui/app/html/topics/articles.html
+++ b/vipra-ui/app/html/topics/articles.html
@@ -1,7 +1,6 @@
 <div ng-cloak ng-hide="$state.current.name !== 'topics.show.articles'">
   <div class="page-header">
     <h1 ng-bind-template="Articles for topic '{{::topic.name}}'"></h1>
-
     <table class="item-actions">
       <tr>
         <td>
@@ -10,9 +9,9 @@
       </tr>
     </table>
   </div>
-  
   <div class="text-muted">
-    Found <ng-pluralize count="articlesTotal||0" when="{0:'no articles',1:'1 article',other:'{} articles'}"></ng-pluralize> in the database.
+    Found
+    <ng-pluralize count="articlesTotal||0" when="{0:'no articles',1:'1 article',other:'{} articles'}"></ng-pluralize> in the database.
     <span ng-show="articlesTotal">
       Sort by
       <ol class="nya-bs-select nya-bs-condensed" ng-model="sort" ng-model-store="sort" ng-model-default="'date'">
@@ -26,19 +25,14 @@
         <li value="-" class="nya-bs-option"><a>Descending</a></li>
       </ol>
     </span>
-    <br>
-    Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
+    <br> Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
   </div>
-
-  <pagination total="articlesTotal" page="page" limit="limit" change="changePage"/>
-
+  <pagination total="articlesTotal" page="page" limit="limit" change="changePage" />
   <ol ng-attr-start="{{(page-1)*limit+1}}">
     <li ng-repeat="article in articles">
       <a ui-sref="articles.show({id: article.id})" ng-bind="::article.title"></a>
     </li>
   </ol>
-
-  <pagination total="articlesTotal" page="page" limit="limit"/>
+  <pagination total="articlesTotal" page="page" limit="limit" />
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/topics/index.html b/vipra-ui/app/html/topics/index.html
index b4273145..c181b832 100644
--- a/vipra-ui/app/html/topics/index.html
+++ b/vipra-ui/app/html/topics/index.html
@@ -1,6 +1,7 @@
 <div ng-cloak ng-hide="$state.current.name !== 'topics'">
   <div class="text-muted">
-    Found <ng-pluralize count="topicsTotal||0" when="{0:'no topics',1:'1 topic',other:'{} topics'}"></ng-pluralize> in the database.
+    Found
+    <ng-pluralize count="topicsTotal||0" when="{0:'no topics',1:'1 topic',other:'{} topics'}"></ng-pluralize> in the database.
     <span ng-show="topicsTotal">
       Sort by
       <ol class="nya-bs-select nya-bs-condensed" ng-model="sort">
@@ -13,19 +14,14 @@
         <li value="-" class="nya-bs-option"><a>Descending</a></li>
       </ol>
     </span>
-    <br>
-    Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
+    <br> Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
   </div>
-
-  <pagination total="topicsTotal" page="page" limit="limit" change="changePage"/>
-
+  <pagination total="topicsTotal" page="page" limit="limit" change="changePage" />
   <ol ng-attr-start="{{(page-1)*limit+1}}">
     <li ng-repeat="topic in topics">
       <a ui-sref="topics.show({id: topic.id})">{{topic.name}}</a>
     </li>
   </ol>
-
-  <pagination total="topicsTotal" page="page" limit="limit"/>
+  <pagination total="topicsTotal" page="page" limit="limit" />
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/topics/show.html b/vipra-ui/app/html/topics/show.html
index 0d31e783..d0cdb176 100644
--- a/vipra-ui/app/html/topics/show.html
+++ b/vipra-ui/app/html/topics/show.html
@@ -14,11 +14,9 @@
         </div>
       </div>
     </h1>
-
     <bs-alert type="danger" ng-if="renameErrors">
       <span ng-bind-html="renameErrors"></span>
     </bs-alert>
-    
     <table class="item-actions">
       <tr>
         <td>
@@ -35,9 +33,7 @@
       </tr>
     </table>
   </div>
-
   <h3>Info <hide-link target="#info"/></h3>
-
   <div class="row" id="info">
     <div class="col-md-12">
       <table class="table table-bordered table-condensed table-fixed table-infos">
@@ -58,9 +54,7 @@
       </table>
     </div>
   </div>
-
   <h3>Words <hide-link target="#words"/></h3>
-
   <div class="row" id="words">
     <div class="col-md-12">
       <table class="table table-bordered table-condensed table-fixed">
@@ -76,7 +70,9 @@
         </thead>
         <tbody>
           <tr ng-repeat="word in topic.words | orderBy:wordSort:wordSortRev">
-            <td><a ui-sref="words.show({id:word.id})" ng-bind="word.id"></a></td>
+            <td>
+              <a ui-sref="words.show({id:word.id})" ng-bind="word.id"></a>
+            </td>
             <td ng-bind-template="{{word.likeliness.toFixed(6)}}"></td>
           </tr>
         </tbody>
@@ -84,5 +80,4 @@
     </div>
   </div>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/words/index.html b/vipra-ui/app/html/words/index.html
index d89dba08..2875ec90 100644
--- a/vipra-ui/app/html/words/index.html
+++ b/vipra-ui/app/html/words/index.html
@@ -1,6 +1,7 @@
 <div ng-cloak ng-hide="$state.current.name !== 'words'">
   <div class="text-muted">
-    Found <ng-pluralize count="wordsTotal||0" when="{0:'no words',1:'1 word',other:'{} words'}"></ng-pluralize> in the database.
+    Found
+    <ng-pluralize count="wordsTotal||0" when="{0:'no words',1:'1 word',other:'{} words'}"></ng-pluralize> in the database.
     <span ng-show="wordsTotal">
       Sort by
       <ol class="nya-bs-select nya-bs-condensed" ng-model="sort">
@@ -13,12 +14,9 @@
         <li value="-" class="nya-bs-option"><a>Descending</a></li>
       </ol>
     </span>
-    <br>
-    Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
+    <br> Page <span ng-bind="page||1"></span> of <span ng-bind="maxPage||1"></span>.
   </div>
-
-  <pagination total="wordsTotal" page="page" limit="limit" change="changePage"/>
-
+  <pagination total="wordsTotal" page="page" limit="limit" change="changePage" />
   <div class="row">
     <div class="col-md-4">
       <ul class="list-unstyled">
@@ -42,8 +40,6 @@
       </ul>
     </div>
   </div>
-
-  <pagination total="wordsTotal" page="page" limit="limit"/>
+  <pagination total="wordsTotal" page="page" limit="limit" />
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/html/words/show.html b/vipra-ui/app/html/words/show.html
index d1ca723b..11857549 100644
--- a/vipra-ui/app/html/words/show.html
+++ b/vipra-ui/app/html/words/show.html
@@ -2,9 +2,7 @@
   <div class="page-header">
     <h1 ng-bind="::word.id"></h1>
   </div>
-
   <h3>Info <hide-link target="#info"/></h3>
-
   <div class="row" id="info">
     <div class="col-md-12">
       <table class="table table-bordered table-condensed table-fixed table-infos">
@@ -17,18 +15,15 @@
       </table>
     </div>
   </div>
-
   <h3>Topics <hide-link target="#topics"/></h3>
-
   <div class="row" id="topics">
     <div class="col-md-12">
       <ol>
         <li ng-repeat="topic in ::topics">
-          <topic-link topic="topic"/>
+          <topic-link topic="topic" />
         </li>
       </ol>
     </div>
   </div>
 </div>
-
-<div ng-cloak ui-view></div>
\ No newline at end of file
+<div ng-cloak ui-view></div>
diff --git a/vipra-ui/app/index.html b/vipra-ui/app/index.html
index dbb7057b..a76fe610 100644
--- a/vipra-ui/app/index.html
+++ b/vipra-ui/app/index.html
@@ -1,80 +1,78 @@
 <!DOCTYPE html>
 <html lang="en" ng-app="vipra.app" ng-controller="RootController">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Vipra</title>
 
-    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
-    <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
-    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
-    <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
-    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
-    <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
-    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
-    <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
-    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
-    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
-    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
-    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
-    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
-    <link rel="manifest" href="/manifest.json">
-    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
-    <meta name="msapplication-TileColor" content="#da532c">
-    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
-    <meta name="theme-color" content="#ffffff">
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>Vipra</title>
+  <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
+  <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
+  <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
+  <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
+  <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
+  <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
+  <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
+  <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
+  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
+  <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
+  <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
+  <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
+  <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
+  <link rel="manifest" href="/manifest.json">
+  <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
+  <meta name="msapplication-TileColor" content="#da532c">
+  <meta name="msapplication-TileImage" content="/mstile-144x144.png">
+  <meta name="theme-color" content="#ffffff">
+  <!-- stylesheets -->
+  <link href="css/vendor.css" rel="stylesheet">
+  <link href="css/app.css" rel="stylesheet">
+  <!-- javascript -->
+  <script src="js/vendor.js"></script>
+  <script src="js/app.js"></script>
+  <script src="js/templates.js"></script>
+</head>
 
-    <!-- stylesheets -->
-    <link href="css/vendor.css" rel="stylesheet">
-    <link href="css/app.css" rel="stylesheet">
+<body>
+  <nav class="navbar navbar-default navbar-static-top navbar-breadcrumbs">
+    <div class="container-fluid">
+      <!-- Brand and toggle get grouped for better mobile display -->
+      <div class="navbar-header">
+        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#vipra-navbar-collapse-1" aria-expanded="false">
+          <span class="sr-only">Toggle navigation</span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+        </button>
+        <a ui-sref="index" class="navbar-brand" ng-class="{spin:loading.any}"></a>
+      </div>
+      <!-- Collect the nav links, forms, and other content for toggling -->
+      <div class="collapse navbar-collapse" id="vipra-navbar-collapse-1">
+        <ul class="nav navbar-nav">
+          <li ng-class="{active:$state.includes('articles')}">
+            <a ui-sref="articles">Articles</a>
+          </li>
+          <li ng-class="{active:$state.includes('topics')}">
+            <a ui-sref="topics">Topics</a>
+          </li>
+          <li ng-class="{active:$state.includes('words')}">
+            <a ui-sref="words">Words</a>
+          </li>
+        </ul>
+        <ul class="nav navbar-nav navbar-right">
+          <li ng-class="{active:$state.includes('about')}">
+            <a ui-sref="about">
+              <span class="glyphicon glyphicon-question-sign"></span>
+            </a>
+          </li>
+        </ul>
+      </div>
+      <!-- /.navbar-collapse -->
+    </div>
+    <!-- /.container-fluid -->
+  </nav>
+  <div ncy-breadcrumb ng-hide="$state.current.name === 'index'"></div>
+  <div class="container" ui-view ng-cloak></div>
+</body>
 
-    <!-- javascript -->
-    <script src="js/vendor.js"></script>
-    <script src="js/app.js"></script>
-    <script src="js/templates.js"></script>
-  </head>
-  <body>
-    <nav class="navbar navbar-default navbar-static-top navbar-breadcrumbs">
-      <div class="container-fluid">
-        <!-- Brand and toggle get grouped for better mobile display -->
-        <div class="navbar-header">
-          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#vipra-navbar-collapse-1" aria-expanded="false">
-            <span class="sr-only">Toggle navigation</span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-            <span class="icon-bar"></span>
-          </button>
-          <a ui-sref="index" class="navbar-brand" ng-class="{spin:loading.any}"></a>
-        </div>
-
-        <!-- Collect the nav links, forms, and other content for toggling -->
-        <div class="collapse navbar-collapse" id="vipra-navbar-collapse-1">
-          <ul class="nav navbar-nav">
-            <li ng-class="{active:$state.includes('articles')}">
-              <a ui-sref="articles">Articles</a>
-            </li>
-            <li ng-class="{active:$state.includes('topics')}">
-              <a ui-sref="topics">Topics</a>
-            </li>
-            <li ng-class="{active:$state.includes('words')}">
-              <a ui-sref="words">Words</a>
-            </li>
-          </ul>
-
-          <ul class="nav navbar-nav navbar-right">
-            <li ng-class="{active:$state.includes('about')}">
-              <a ui-sref="about">
-                <span class="glyphicon glyphicon-question-sign"></span>
-              </a>
-            </li>
-          </ul>
-        </div><!-- /.navbar-collapse -->
-      </div><!-- /.container-fluid -->
-    </nav>
-
-    <div ncy-breadcrumb ng-hide="$state.current.name === 'index'"></div>
-
-    <div class="container" ui-view ng-cloak></div>
-  </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/vipra-ui/gulpfile.js b/vipra-ui/gulpfile.js
index 3a7fd600..56965ffd 100644
--- a/vipra-ui/gulpfile.js
+++ b/vipra-ui/gulpfile.js
@@ -1,10 +1,13 @@
+/* jshint ignore: start */
+
 var gulp = require('gulp'),
     less = require('gulp-less'),
     concat = require('gulp-concat'),
     uglify = require('gulp-uglify'),
-    plumber = require('gulp-plumber'),
     cssnano = require('gulp-cssnano'),
     webserver = require('gulp-webserver'),
+    sourcemaps = require('gulp-sourcemaps'),
+    ngannotate = require('gulp-ng-annotate'),
     templatecache = require('gulp-angular-templatecache');
 
 var assets = {
@@ -37,15 +40,21 @@ var assets = {
 
 gulp.task('less', function() {
   gulp.src('app/less/**/*.less')
-      .pipe(plumber())
+      .pipe(sourcemaps.init())
+      .pipe(concat('app.css'))
       .pipe(less())
+      .pipe(cssnano())
+      .pipe(sourcemaps.write('.'))
       .pipe(gulp.dest('public/css'));
 });
 
 gulp.task('js', function() {
   gulp.src('app/js/**/*.js')
-      .pipe(plumber())
+      .pipe(sourcemaps.init())
       .pipe(concat('app.js'))
+      .pipe(ngannotate())
+      .pipe(uglify())
+      .pipe(sourcemaps.write('.'))
       .pipe(gulp.dest('public/js'));
 });
 
@@ -59,6 +68,8 @@ gulp.task('html', function() {
         module: 'vipra.templates',
         standalone: true
       }))
+      .pipe(ngannotate())
+      .pipe(uglify())
       .pipe(gulp.dest('public/js'));
 });
 
diff --git a/vipra-ui/package.json b/vipra-ui/package.json
index 83d14ec7..dd09ca97 100644
--- a/vipra-ui/package.json
+++ b/vipra-ui/package.json
@@ -12,7 +12,7 @@
     "gulp-cssnano": "^2.1.0",
     "gulp-include": "^2.1.0",
     "gulp-less": "^3.0.5",
-    "gulp-plumber": "^1.0.1",
+    "gulp-ng-annotate": "^2.0.0",
     "gulp-sourcemaps": "^1.6.0",
     "gulp-uglify": "^1.5.1",
     "gulp-webserver": "^0.9.1"
-- 
GitLab