From 83982a985fcf5d47a2f2eb4686426cc2b19a330f Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Sat, 6 Feb 2016 01:32:27 +0100
Subject: [PATCH] ui updates, template generation

added hide link to info section
added initial letter to article text
added template precompilation for angular
---
 vipra-ui/app/html/articles/show.html | 78 +++++++++++++++-------------
 vipra-ui/app/html/modal.html         | 15 ++++++
 vipra-ui/app/index.html              |  3 +-
 vipra-ui/app/js/app.js               |  4 +-
 vipra-ui/app/js/controllers.js       |  3 +-
 vipra-ui/app/js/helpers.js           |  4 ++
 vipra-ui/app/less/app.less           | 11 ++++
 vipra-ui/bower.json                  |  3 +-
 vipra-ui/gulpfile.js                 | 10 +++-
 vipra-ui/package.json                |  1 +
 10 files changed, 90 insertions(+), 42 deletions(-)
 create mode 100644 vipra-ui/app/html/modal.html

diff --git a/vipra-ui/app/html/articles/show.html b/vipra-ui/app/html/articles/show.html
index f6b8e720..f69cd44e 100644
--- a/vipra-ui/app/html/articles/show.html
+++ b/vipra-ui/app/html/articles/show.html
@@ -1,49 +1,55 @@
 <h1 ng-bind="::article.title"></h1>
 
-<table class="table table-bordered table-condensed">
-  <tbody>
-    <tr>
-      <th>ID</th>
-      <td ng-bind="::article.id"></td>
-    </tr>
-    <tr>
-      <th>Date</th>
-      <td ng-bind="::article.date"></td>
-    </tr>
-    <tr>
-      <th>URL</th>
-      <td><a ng-href="{{::article.url}}" ng-bind="::article.url"></a></td>
-    </tr>
-    <tr>
-      <th>Created</th>
-      <td ng-bind="::article.created"></td>
-    </tr>
-    <tr>
-      <th>Last modified</th>
-      <td ng-bind="::article.modified"></td>
-    </tr>
-    <tr>
-      <th>Word count</th>
-      <td ng-bind="::article.stats.wordCount"></td>
-    </tr>
-    <tr>
-      <th>Links</th>
-      <td>
-        <a ui-sref="network({type:'articles', id:article.id})">Network graph</a>
-      </td>
-    </tr>
-  </tbody>
-</table>
+<h3>Info <hide-link target="#info"/></h3>
+
+<div class="row" id="info">
+  <div class="col-md-12">
+    <table class="table table-bordered table-condensed">
+      <tbody>
+        <tr>
+          <th>ID</th>
+          <td ng-bind="::article.id"></td>
+        </tr>
+        <tr>
+          <th>Date</th>
+          <td ng-bind="::article.date"></td>
+        </tr>
+        <tr>
+          <th>URL</th>
+          <td><a ng-href="{{::article.url}}" ng-bind="::article.url"></a></td>
+        </tr>
+        <tr>
+          <th>Created</th>
+          <td ng-bind="::article.created"></td>
+        </tr>
+        <tr>
+          <th>Last modified</th>
+          <td ng-bind="::article.modified"></td>
+        </tr>
+        <tr>
+          <th>Word count</th>
+          <td ng-bind="::article.stats.wordCount"></td>
+        </tr>
+        <tr>
+          <th>Links</th>
+          <td>
+            <a ui-sref="network({type:'articles', id:article.id})">Network graph</a>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+</div>
 
 <h3>Topics <hide-link target="#topics"/></h3>
 
 <div class="row" id="topics">
-  <div class="col-md-4 topic-links">
+  <div class="col-md-4 topic-links text-right">
     <topic-link topic="topic.topic" ng-repeat="topic in article.topics">
       <span ng-bind-template="({{topic.share}}%)"></span>
     </topic-link>
   </div>
-  <div class="col-md-8">
+  <div class="col-md-offset-1 col-md-6">
     <div class="pie-chart" id="topic-share" highcharts="topicShare"></div>
   </div>
 </div>
diff --git a/vipra-ui/app/html/modal.html b/vipra-ui/app/html/modal.html
new file mode 100644
index 00000000..12a50c29
--- /dev/null
+++ b/vipra-ui/app/html/modal.html
@@ -0,0 +1,15 @@
+<div class="modal-header">
+    <h3 class="modal-title">I'm a modal!</h3>
+</div>
+<div class="modal-body">
+    <ul>
+        <li ng-repeat="item in items">
+            <a href="#" ng-click="$event.preventDefault(); selected.item = item">{{ item }}</a>
+        </li>
+    </ul>
+    Selected: <b>{{ selected.item }}</b>
+</div>
+<div class="modal-footer">
+    <button class="btn btn-primary" type="button" ng-click="ok()">OK</button>
+    <button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button>
+</div>
\ No newline at end of file
diff --git a/vipra-ui/app/index.html b/vipra-ui/app/index.html
index c551576c..7b7f8498 100644
--- a/vipra-ui/app/index.html
+++ b/vipra-ui/app/index.html
@@ -21,10 +21,8 @@
     <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">
-    <link rel="shortcut icon" href="/favicon.ico">
     <meta name="msapplication-TileColor" content="#da532c">
     <meta name="msapplication-TileImage" content="/mstile-144x144.png">
-    <meta name="msapplication-config" content="/browserconfig.xml">
     <meta name="theme-color" content="#ffffff">
 
     <!-- stylesheets -->
@@ -34,6 +32,7 @@
     <!-- 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">
diff --git a/vipra-ui/app/js/app.js b/vipra-ui/app/js/app.js
index 1de6e116..7bd748f8 100644
--- a/vipra-ui/app/js/app.js
+++ b/vipra-ui/app/js/app.js
@@ -8,11 +8,13 @@
     'ngResource',
     'ngSanitize',
     'ui.router',
+    'ui.bootstrap',
     'vipra.controllers',
     'vipra.directives',
     'vipra.factories',
     'vipra.filters',
-    'vipra.services'
+    'vipra.services',
+    'vipra.templates'
   ]);
 
   app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
diff --git a/vipra-ui/app/js/controllers.js b/vipra-ui/app/js/controllers.js
index 84012767..120db447 100644
--- a/vipra-ui/app/js/controllers.js
+++ b/vipra-ui/app/js/controllers.js
@@ -95,6 +95,7 @@
 
     ArticleFactory.get({id: $stateParams.id}, function(response) {
       $scope.article = response.data;
+      $scope.article.text = createInitial($scope.article.text);
       $scope.article.date = formatDate($scope.article.date);
       $scope.article.created = formatDateTime($scope.article.created);
       $scope.article.modified = formatDateTime($scope.article.modified);
@@ -117,7 +118,7 @@
         plotOptions: {
           pie: { allowPointSelect: true }
         },
-        title: { text: 'Topic share' },
+        title: { text: '' },
         tooltip: { pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' },
         series: [{
           name: 'Topic Share',
diff --git a/vipra-ui/app/js/helpers.js b/vipra-ui/app/js/helpers.js
index 0b390950..726e96c9 100644
--- a/vipra-ui/app/js/helpers.js
+++ b/vipra-ui/app/js/helpers.js
@@ -19,6 +19,10 @@
     return Math.round(input * 100);
   };
 
+  window.createInitial = function(text) {
+    return '<span class="initial">' + text.substring(0, 1) + "</span>" + text.substring(1);
+  };
+
   String.prototype.ellipsize = function(max) {
     max = max || 20;
     if(this.length > max) {
diff --git a/vipra-ui/app/less/app.less b/vipra-ui/app/less/app.less
index 5b4e052f..0919aec6 100644
--- a/vipra-ui/app/less/app.less
+++ b/vipra-ui/app/less/app.less
@@ -9,6 +9,10 @@ body {
   margin-bottom: 60px;
 }
 
+a:hover {
+  cursor:pointer;
+}
+
 .heading {
   .noselect;
   background: transparent url(/img/logo.svg) no-repeat 50% 50%;
@@ -117,6 +121,13 @@ body {
   border-radius: 3px;
 }
 
+.initial {
+  float: left;
+  font-size: 70px;
+  line-height: 60px;
+  padding-right: 3px;
+}
+
 .topic-links .topic-link {
   display: block;
 }
diff --git a/vipra-ui/bower.json b/vipra-ui/bower.json
index ade95723..8cd59437 100644
--- a/vipra-ui/bower.json
+++ b/vipra-ui/bower.json
@@ -23,6 +23,7 @@
     "angular-resource": "^1.5.0",
     "angular-ui-router": "^0.2.17",
     "angular-sanitize": "^1.5.0",
-    "highcharts": "^4.2.2"
+    "highcharts": "^4.2.2",
+    "angular-bootstrap": "^1.1.2"
   }
 }
diff --git a/vipra-ui/gulpfile.js b/vipra-ui/gulpfile.js
index 87ee3e25..89250fac 100644
--- a/vipra-ui/gulpfile.js
+++ b/vipra-ui/gulpfile.js
@@ -4,7 +4,8 @@ var gulp = require('gulp'),
     uglify = require('gulp-uglify'),
     plumber = require('gulp-plumber'),
     cssnano = require('gulp-cssnano'),
-    webserver = require('gulp-webserver');
+    webserver = require('gulp-webserver'),
+    templatecache = require('gulp-angular-templatecache');
 
 var assets = {
   js: [
@@ -13,6 +14,7 @@ var assets = {
     'bower_components/angular-resource/angular-resource.min.js',
     'bower_components/angular-sanitize/angular-sanitize.min.js',
     'bower_components/angular-ui-router/release/angular-ui-router.min.js',
+    'bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js',
     'bower_components/bootstrap/dist/js/bootstrap.min.js',
     'bower_components/highcharts/highcharts.js',
     'bower_components/vis/dist/vis.min.js'
@@ -46,6 +48,12 @@ gulp.task('html', function() {
       .pipe(gulp.dest('public'));
   gulp.src(['app/html/**/*.html'])
       .pipe(gulp.dest('public/html'));
+  gulp.src(['app/html/**/*.html'])
+      .pipe(templatecache({
+        module: 'vipra.templates',
+        standalone: true
+      }))
+      .pipe(gulp.dest('public/js'));
 });
 
 gulp.task('img', function() {
diff --git a/vipra-ui/package.json b/vipra-ui/package.json
index 5be5d8d2..85743ec7 100644
--- a/vipra-ui/package.json
+++ b/vipra-ui/package.json
@@ -6,6 +6,7 @@
   "private": true,
   "devDependencies": {
     "gulp": "^3.9.0",
+    "gulp-angular-templatecache": "^1.8.0",
     "gulp-concat": "^2.6.0",
     "gulp-cssnano": "^2.1.0",
     "gulp-include": "^2.1.0",
-- 
GitLab