Updated OpenVPN Dashboard
diff --git a/views/ngXosViews/openVPNDashboard/gulp/build.js b/views/ngXosViews/openVPNDashboard/gulp/build.js
index 625e3ee..33a2cac 100644
--- a/views/ngXosViews/openVPNDashboard/gulp/build.js
+++ b/views/ngXosViews/openVPNDashboard/gulp/build.js
@@ -13,7 +13,7 @@
 var uglify = require('gulp-uglify');
 var templateCache = require('gulp-angular-templatecache');
 var runSequence = require('run-sequence');
-var concat = require('gulp-concat');
+var concat = require('gulp-concat-util');
 var del = require('del');
 var wiredep = require('wiredep');
 var angularFilesort = require('gulp-angular-filesort');
@@ -27,16 +27,22 @@
 var mqpacker = require('css-mqpacker');
 var csswring = require('csswring');
 
-var TEMPLATE_FOOTER = `}]);
-angular.module('xos.openVPNDashboard').run(function($location){$location.path('/')});
-angular.bootstrap(angular.element('#xosOpenVPNDashboard'), ['xos.openVPNDashboard']);`;
+const TEMPLATE_FOOTER = `
+angular.module('xos.openVPNDashboard')
+.run(['$location', function(a){
+  a.path('/');
+}])
+`
 
 module.exports = function(options){
-
+  
   // delete previous builded file
   gulp.task('clean', function(){
     return del(
-      [options.dashboards + 'xosOpenVPNDashboard.html'],
+      [
+        options.dashboards + 'xosOpenVPNDashboard.html',
+        options.static + 'css/xosOpenVPNDashboard.css'
+      ],
       {force: true}
     );
   });
@@ -57,7 +63,8 @@
     .pipe(gulp.dest(options.tmp + '/css/'));
   });
 
-  gulp.task('copyCss', ['css'], function(){
+  // copy css in correct folder
+  gulp.task('copyCss', ['wait'], function(){
     return gulp.src([`${options.tmp}/css/*.css`])
     .pipe(concat('xosOpenVPNDashboard.css'))
     .pipe(gulp.dest(options.static + 'css/'))
@@ -71,6 +78,8 @@
     .pipe(ngAnnotate())
     .pipe(angularFilesort())
     .pipe(concat('xosOpenVPNDashboard.js'))
+    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
+    .pipe(concat.footer(TEMPLATE_FOOTER))
     .pipe(uglify())
     .pipe(gulp.dest(options.static + 'js/'));
   });
@@ -80,21 +89,17 @@
     return gulp.src('./src/templates/*.html')
       .pipe(templateCache({
         module: 'xos.openVPNDashboard',
-        root: 'templates/',
-        templateFooter: TEMPLATE_FOOTER
+        root: 'templates/'
       }))
       .pipe(gulp.dest(options.tmp));
   });
 
   // copy html index to Django Folder
-  gulp.task('copyHtml', ['clean'], function(){
+  gulp.task('copyHtml', function(){
     return gulp.src(options.src + 'index.html')
       // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n.*)*\n<!-- endbower --><!-- endcss -->/, ''))
-      .pipe(replace(/<!-- bower:js -->(\n.*)*\n<!-- endbower --><!-- endjs -->/, ''))
-      .pipe(replace(/ng-app=".*"\s/, ''))
-      // rewriting css path
-      // .pipe(replace(/(<link.*">)/, ''))
+      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
+      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
       // injecting minified files
       .pipe(
         inject(
@@ -135,16 +140,25 @@
       .pipe(eslint.failAfterError());
   });
 
+  gulp.task('wait', function (cb) {
+    // setTimeout could be any async task
+    setTimeout(function () {
+      cb();
+    }, 1000);
+  });
+
   gulp.task('build', function() {
     runSequence(
-      'lint',
+      'clean',
+      'sass',
       'templates',
       'babel',
       'scripts',
       'wiredep',
-      'copyHtml',
+      'css',
       'copyCss',
+      'copyHtml',
       'cleanTmp'
     );
   });
-};
+};
\ No newline at end of file