You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2016/04/06 12:58:33 UTC

fauxton commit: updated refs/heads/master to ae13131

Repository: couchdb-fauxton
Updated Branches:
  refs/heads/master b28a844bd -> ae1313126


Uses webpack for all assets

Use webpack to manage css, images, zeroclipboard and fonts.


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/commit/ae131312
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/tree/ae131312
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/diff/ae131312

Branch: refs/heads/master
Commit: ae1313126cfc629bf65a3e51ece8ea1f11dd3bf4
Parents: b28a844
Author: Garren Smith <ga...@gmail.com>
Authored: Mon Apr 4 15:15:06 2016 +0200
Committer: Garren Smith <ga...@gmail.com>
Committed: Wed Apr 6 12:56:15 2016 +0200

----------------------------------------------------------------------
 Gruntfile.js                                    | 50 ++------------
 app/addons/activetasks/base.js                  |  3 +-
 app/addons/auth/base.js                         |  3 +-
 app/addons/components/base.js                   |  2 +-
 app/addons/config/base.js                       |  3 +-
 app/addons/cors/base.js                         |  3 +-
 app/addons/databases/base.js                    |  3 +-
 .../documents/assets/less/index-results.less    |  2 +-
 app/addons/documents/base.js                    |  3 +-
 app/addons/fauxton/base.js                      |  3 +-
 app/addons/fauxton/components.react.jsx         |  3 +-
 app/addons/permissions/base.js                  |  3 +-
 app/addons/replication/base.js                  |  3 +-
 app/addons/setup/base.js                        |  3 +-
 app/addons/styletests/base.js                   |  3 +-
 app/addons/verifyinstall/base.js                |  3 +-
 app/app.js                                      |  3 +-
 app/main.js                                     |  2 +-
 assets/index.underscore                         |  1 -
 assets/less/bootstrap/bootstrap.less            |  2 +-
 .../less/bootstrap/font-awesome/variables.less  |  3 +-
 assets/less/fauxton.less                        | 12 +++-
 build-helper/less.js                            | 69 --------------------
 devserver.js                                    | 22 -------
 package.json                                    | 12 ++--
 settings.json.default.json                      |  2 +-
 tasks/fauxton.js                                |  2 +-
 webpack.config.dev.js                           | 21 +++++-
 webpack.config.release.js                       | 23 ++++++-
 webpack.config.test.js                          | 21 +++++-
 30 files changed, 120 insertions(+), 168 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/Gruntfile.js
----------------------------------------------------------------------
diff --git a/Gruntfile.js b/Gruntfile.js
index 3e480ca..f4ccec8 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -134,7 +134,7 @@ module.exports = function (grunt) {
       },
 
       bundlerelease_js: {
-        src: ['dist/tmp-out/templates.js', "dist/tmp-out/bundle.js", "dist/tmp-out/1.bundle.js"],
+        src: ['dist/tmp-out/templates.js', "dist/release/bundle.js"],
         dest: "dist/tmp-out/bundle.js"
       }
     },
@@ -146,28 +146,17 @@ module.exports = function (grunt) {
         files: [
           // this gets built in the template task
           {src: "dist/release/index.html", dest: "../../share/www/index.html"},
-          {src: ["**"], dest: "../../share/www/js/", cwd: 'dist/release/dashboard.assets/js/',  expand: true},
-          {src: ["**"], dest: "../../share/www/img/", cwd: 'dist/release/dashboard.assets/img/', expand: true},
-          {src: ["**"], dest: "../../share/www/fonts/", cwd: 'dist/release/dashboard.assets/fonts/', expand: true},
-          {src: ["**"], dest: "../../share/www/css/", cwd: "dist/release/dashboard.assets/css/", expand: true}
         ]
       },
       couchdebug: {
         files: [
           // this gets built in the template task
           {src: "dist/debug/index.html", dest: "../../share/www/index.html"},
-          {src: ["**"], dest: "../../share/www/js/", cwd: "dist/debug/dashboard.assets/js/",  expand: true},
-          {src: ["**"], dest: "../../share/www/img/", cwd: "dist/debug/dashboard.assets/img/", expand: true},
-          {src: ["**"], dest: "../../share/www/fonts/", cwd: "dist/debug/dashboard.assets/fonts/", expand: true},
-          {src: ["**"], dest: "../../share/www/css/", cwd: "dist/debug/dashboard.assets/css/", expand: true}
         ]
       },
       dist:{
         files:[
           {src: 'dist/debug/index.html', dest: 'dist/release/index.html'},
-          {src: ['assets/img/**', 'app/addons/**/assets/img/**'], dest: 'dist/release/dashboard.assets/img/', flatten: true, expand: true},
-          {src: ['node_modules/zeroclipboard/dist/*.swf'], dest: 'dist/release/dashboard.assets/', flatten: true, expand: true, filter: 'isFile'},
-          {src: ['*.eot', '*.woff', '*.svg', '*.ttf'], cwd: './assets/fonts', dest: 'dist/release/dashboard.assets/fonts/', filter: 'isFile', flatten: true, expand: true},
           {src: './favicon.ico', dest: "dist/release/favicon.ico"}
         ]
       },
@@ -180,9 +169,6 @@ module.exports = function (grunt) {
 
       debug: {
         files:[
-          {src: ['node_modules/zeroclipboard/dist/*.swf'], dest: 'dist/debug/dashboard.assets/', flatten: true, expand: true, filter: 'isFile'},
-          {src: ['*.eot', '*.woff', '*.svg', '*.ttf'], cwd: './assets/fonts', dest: 'dist/debug/dashboard.assets/fonts/', filter: 'isFile', flatten: true, expand: true},
-          {src: ['assets/img/**', 'app/addons/**/assets/img/**'], dest: 'dist/debug/dashboard.assets/img/', flatten: true, expand: true},
           {src: './favicon.ico', dest: "dist/debug/favicon.ico"}
         ]
       },
@@ -238,18 +224,6 @@ module.exports = function (grunt) {
     },
 
     shell: {
-      'build-less-debug': {
-        command: 'npm run build:less:debug'
-      },
-
-      'build-less-release': {
-        command: 'npm run build:less:release'
-      },
-
-      'css-compress': {
-        command: 'npm run build:css-compress'
-      },
-
       webpack: {
         command: 'npm run webpack:dev'
       },
@@ -295,17 +269,6 @@ module.exports = function (grunt) {
             config.template.release.variables.bundlejs = config.template.release.variables.bundlejs.replace(/BUNDLEJS_FILE/, newFilename);
           }
         }
-      },
-
-      css: {
-        files: { 'dist/release/dashboard.assets/css/': 'dist/tmp-out/index.css' },
-        options: {
-          afterEach: function (fileChanges) {
-            // replace the CSS_FILE placeholder with the actual filename
-            const newFilename = path.basename(fileChanges.newPath);
-            config.template.release.variables.css = config.template.release.variables.css.replace(/CSS_FILE/, newFilename);
-          }
-        }
       }
     },
 
@@ -344,9 +307,8 @@ module.exports = function (grunt) {
   grunt.registerTask('dependencies', ['get_deps', 'gen_load_addons:default']);
 
   // minify code and css, ready for release.
-  grunt.registerTask('build', ['copy:distDepsRequire', 'shell:build-less-release', 'jst', 'shell:webpackrelease', 'concat:bundlerelease_js',
-    'shell:css-compress', 'md5:bundlejs', 'md5:css', 'template:release']);
-
+  grunt.registerTask('build', ['copy:distDepsRequire', 'jst', 'shell:webpackrelease', 'concat:bundlerelease_js',
+    'md5:bundlejs', 'template:release']);
   /*
    * Build the app in either dev, debug, or release mode
    */
@@ -356,14 +318,14 @@ module.exports = function (grunt) {
   });
 
   // build a debug release
-  grunt.registerTask('debug', ['clean', 'dependencies', "gen_initialize:development", 'shell:build-less-debug',
+  grunt.registerTask('debug', ['clean', 'dependencies', "gen_initialize:development",
     'template:development', 'copy:debug']);
 
   grunt.registerTask('debugDev', ['clean', 'dependencies', "gen_initialize:development",
-    'shell:build-less-debug', 'template:development', 'copy:debug', 'jst', 'shell:webpack', 'concat:bundle_js']);
+    'template:development', 'copy:debug', 'jst', 'shell:webpack', 'concat:bundle_js']);
 
   grunt.registerTask('devSetup', ['dependencies', "gen_initialize:development",
-    'shell:build-less-debug', 'template:development', 'copy:debug', 'jst', 'copy:devTemplates']);
+    'template:development', 'copy:debug', 'jst', 'copy:devTemplates']);
   grunt.registerTask('devSetupWithClean', ['clean', 'devSetup']);
 
   grunt.registerTask('watchRun', ['clean:watch', 'dependencies', 'shell:stylecheck']);

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/activetasks/base.js
----------------------------------------------------------------------
diff --git a/app/addons/activetasks/base.js b/app/addons/activetasks/base.js
index 5bf932d..aa4b54a 100644
--- a/app/addons/activetasks/base.js
+++ b/app/addons/activetasks/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './routes'
+  './routes',
+  './assets/less/activetasks.less'
 ],
 
 function (app, FauxtonAPI, Activetasks) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/auth/base.js
----------------------------------------------------------------------
diff --git a/app/addons/auth/base.js b/app/addons/auth/base.js
index 77d2eb0..07619c5 100644
--- a/app/addons/auth/base.js
+++ b/app/addons/auth/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './routes'
+  './routes',
+  './assets/less/auth.less'
 ],
 
 function (app, FauxtonAPI, Auth) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/components/base.js
----------------------------------------------------------------------
diff --git a/app/addons/components/base.js b/app/addons/components/base.js
index 4a4a892..5c9197a 100644
--- a/app/addons/components/base.js
+++ b/app/addons/components/base.js
@@ -11,7 +11,7 @@
 // the License.
 
 define([
-
+  './assets/less/components.less'
 ],
 
 function () {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/config/base.js
----------------------------------------------------------------------
diff --git a/app/addons/config/base.js b/app/addons/config/base.js
index 04036d3..4676d95 100644
--- a/app/addons/config/base.js
+++ b/app/addons/config/base.js
@@ -16,7 +16,8 @@ define([
   '../../core/api',
 
   // Modules
-  './routes'
+  './routes',
+  './assets/less/config.less'
 ],
 
 function (app, FauxtonAPI, Config) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/cors/base.js
----------------------------------------------------------------------
diff --git a/app/addons/cors/base.js b/app/addons/cors/base.js
index f396cdf..f3d13d7 100644
--- a/app/addons/cors/base.js
+++ b/app/addons/cors/base.js
@@ -12,7 +12,8 @@
 
 define([
   "../../app",
-  "../../core/api"
+  "../../core/api",
+  './assets/less/cors.less'
 ],
 
 function (app, FauxtonAPI) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/databases/base.js
----------------------------------------------------------------------
diff --git a/app/addons/databases/base.js b/app/addons/databases/base.js
index 5642a23..d0a56b9 100644
--- a/app/addons/databases/base.js
+++ b/app/addons/databases/base.js
@@ -13,7 +13,8 @@
 define([
   "../../app",
   "../../core/api",
-  "./routes"
+  "./routes",
+  "./assets/less/databases.less"
 ],
 
 function (app, FauxtonAPI, Databases) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/documents/assets/less/index-results.less
----------------------------------------------------------------------
diff --git a/app/addons/documents/assets/less/index-results.less b/app/addons/documents/assets/less/index-results.less
index 5b2f55f..c58a3c1 100644
--- a/app/addons/documents/assets/less/index-results.less
+++ b/app/addons/documents/assets/less/index-results.less
@@ -46,7 +46,7 @@
   }
 }
 .watermark-logo {
-  background: transparent url('../img/couch-watermark.png') no-repeat 50% 50%;
+  background: transparent url('../../../../../assets/img/couch-watermark.png') no-repeat 50% 50%;
   height: 205px;
   text-align: center;
   margin: 0 20%;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/documents/base.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/base.js b/app/addons/documents/base.js
index 6f74028..79233e9 100644
--- a/app/addons/documents/base.js
+++ b/app/addons/documents/base.js
@@ -15,7 +15,8 @@ define([
   "../../core/api",
 
   // Modules
-  "./routes"
+  "./routes",
+  "./assets/less/documents.less"
 ],
 
 function (app, FauxtonAPI, Documents) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/fauxton/base.js
----------------------------------------------------------------------
diff --git a/app/addons/fauxton/base.js b/app/addons/fauxton/base.js
index 02f5a0a..83fb727 100644
--- a/app/addons/fauxton/base.js
+++ b/app/addons/fauxton/base.js
@@ -19,7 +19,8 @@ define([
   "./navigation/components.react",
   "./navigation/actions",
   '../components/react-components.react',
-  '../components/actions'
+  '../components/actions',
+  './assets/less/fauxton.less'
 ],
 
 function (app, FauxtonAPI, Components, NotificationComponents, Actions, NavbarReactComponents, NavigationActions,

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/fauxton/components.react.jsx
----------------------------------------------------------------------
diff --git a/app/addons/fauxton/components.react.jsx b/app/addons/fauxton/components.react.jsx
index 318344b..e799ac0 100644
--- a/app/addons/fauxton/components.react.jsx
+++ b/app/addons/fauxton/components.react.jsx
@@ -20,7 +20,8 @@ define([
 
   // needed to run the test individually. Don't remove
   "velocity-animate/velocity",
-  "velocity-animate/velocity.ui"
+  "velocity-animate/velocity.ui",
+  "zeroclipboard/dist/ZeroClipboard.swf"
 ],
 
 function (app, FauxtonAPI, React, ReactDOM, ZeroClipboard, ReactBootstrap) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/permissions/base.js
----------------------------------------------------------------------
diff --git a/app/addons/permissions/base.js b/app/addons/permissions/base.js
index 4c405db..bf417c6 100644
--- a/app/addons/permissions/base.js
+++ b/app/addons/permissions/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './routes'
+  './routes',
+  './assets/less/permissions.less'
 ],
 
 function (app, FauxtonAPI, Permissions) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/replication/base.js
----------------------------------------------------------------------
diff --git a/app/addons/replication/base.js b/app/addons/replication/base.js
index a80c7b1..13bf2e6 100644
--- a/app/addons/replication/base.js
+++ b/app/addons/replication/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './route'
+  './route',
+  './assets/less/replication.less'
 ],
 
 function (app, FauxtonAPI, replication) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/setup/base.js
----------------------------------------------------------------------
diff --git a/app/addons/setup/base.js b/app/addons/setup/base.js
index 7f71f1d..c1abf1b 100644
--- a/app/addons/setup/base.js
+++ b/app/addons/setup/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './route'
+  './route',
+  './assets/less/setup.less'
 ],
 
 function (app, FauxtonAPI, Setup) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/styletests/base.js
----------------------------------------------------------------------
diff --git a/app/addons/styletests/base.js b/app/addons/styletests/base.js
index be2ae8b..3bdcb17 100644
--- a/app/addons/styletests/base.js
+++ b/app/addons/styletests/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  "./routes"
+  "./routes",
+  "./assets/less/styletests.less"
 ],
 
 function (app, FauxtonAPI, tests) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/addons/verifyinstall/base.js
----------------------------------------------------------------------
diff --git a/app/addons/verifyinstall/base.js b/app/addons/verifyinstall/base.js
index 225addd..95e8be8 100644
--- a/app/addons/verifyinstall/base.js
+++ b/app/addons/verifyinstall/base.js
@@ -13,7 +13,8 @@
 define([
   '../../app',
   '../../core/api',
-  './routes'
+  './routes',
+  "./assets/less/verifyinstall.less"
 ],
 
 function (app, FauxtonAPI, VerifyInstall) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/app.js
----------------------------------------------------------------------
diff --git a/app/app.js b/app/app.js
index 519cc58..06fa67a 100644
--- a/app/app.js
+++ b/app/app.js
@@ -27,7 +27,8 @@ define([
   './core/couchdbSession',
 
   // plugins
-  'backbone.layoutmanager'
+  'backbone.layoutmanager',
+  "../assets/less/fauxton.less"
 ],
 
 function (app, $, _, Backbone, Bootstrap, Helpers, Utils, FauxtonAPI, Couchdb) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/app/main.js
----------------------------------------------------------------------
diff --git a/app/main.js b/app/main.js
index 1feef4f..89d114a 100644
--- a/app/main.js
+++ b/app/main.js
@@ -15,7 +15,7 @@ require([
   "./app",
   "./core/api",
   "./load_addons",
-  "backbone"
+  "backbone",
 ],
 
 function (app, FauxtonAPI, LoadAddons, Backbone) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/assets/index.underscore
----------------------------------------------------------------------
diff --git a/assets/index.underscore b/assets/index.underscore
index 7f44e1b..c179ec4 100644
--- a/assets/index.underscore
+++ b/assets/index.underscore
@@ -22,7 +22,6 @@
   <title>Project Fauxton</title>
 
   <!-- Application styles. -->
-  <link rel="stylesheet" href="<%= css %>">
   <% if (base) { %>
   <base href="<%= base %>"></base>
   <% } %>

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/assets/less/bootstrap/bootstrap.less
----------------------------------------------------------------------
diff --git a/assets/less/bootstrap/bootstrap.less b/assets/less/bootstrap/bootstrap.less
index 3331980..572fc38 100644
--- a/assets/less/bootstrap/bootstrap.less
+++ b/assets/less/bootstrap/bootstrap.less
@@ -26,7 +26,7 @@
 @import "tables.less";
 
 // Components: common
-@import "/font-awesome/font-awesome.less";
+@import "font-awesome/font-awesome.less";
 @import "dropdowns.less";
 @import "wells.less";
 @import "component-animations.less";

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/assets/less/bootstrap/font-awesome/variables.less
----------------------------------------------------------------------
diff --git a/assets/less/bootstrap/font-awesome/variables.less b/assets/less/bootstrap/font-awesome/variables.less
index 262f88d..53d9ed4 100644
--- a/assets/less/bootstrap/font-awesome/variables.less
+++ b/assets/less/bootstrap/font-awesome/variables.less
@@ -1,7 +1,7 @@
 // Variables
 // --------------------------
 
-@FontAwesomePath:    "../fonts";
+@FontAwesomePath:    "../../../fonts";
 //@FontAwesomePath:    "//netdna.bootstrapcdn.com/font-awesome/3.2.1/font"; // for referencing Bootstrap CDN font files directly
 @FontAwesomeVersion: "3.2.1";
 @borderColor:        #eee;
@@ -732,4 +732,3 @@
   @weibo: "\f18a";
 
   @renren: "\f18b";
-

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/assets/less/fauxton.less
----------------------------------------------------------------------
diff --git a/assets/less/fauxton.less b/assets/less/fauxton.less
index ba65035..3f971d7 100644
--- a/assets/less/fauxton.less
+++ b/assets/less/fauxton.less
@@ -13,6 +13,16 @@
 @import "variables.less";
 @import "bootstrap/bootstrap.less";
 @import "bootstrap/mixins.less";
+
+#grid {
+  .core  {
+    .span(@gridColumns) {
+      width: (@gridColumnWidth * @gridColumns) + (@gridGutterWidth * (@gridColumns - 1));
+    }
+  }
+};
+
+
 @import "layouts.less";
 @import "prettyprint.less";
 @import "icons.less";
@@ -172,9 +182,9 @@ table.databases {
     min-height: @collapsedNavWidth;
     margin-bottom: auto;
     text-shadow: none;
+    .box-shadow(0px 4px 0px rgba(0,0,0,0.45));
     .border-radius(0);
     border-bottom: 1px solid #3a2c2b; 
-    box-shadow: 0px 4px 0 0 rgba(0, 0, 0, 0.4);
     a, a:hover {
       color: #cecece;
       text-decoration: underline;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/build-helper/less.js
----------------------------------------------------------------------
diff --git a/build-helper/less.js b/build-helper/less.js
deleted file mode 100644
index e43d95b..0000000
--- a/build-helper/less.js
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-const root = __dirname + '/../';
-const target = root + process.argv[2];
-
-const fs = require('fs');
-const async = require('async');
-const less = require('less');
-
-let settings;
-if (fs.existsSync(root + 'settings.json')) {
-  settings = require(root + 'settings.json');
-} else if (fs.existsSync(root + 'settings.json.default.json')) {
-  settings = require(root + 'settings.json.default.json');
-} else {
-  throw new Error('no settings.json or settings.json.default found');
-}
-
-const srcAndTarget = settings.deps.map(addonName => {
-  addonName = addonName.name;
-
-  return 'app/addons/' + addonName + '/assets/less/' + addonName + '.less';
-});
-
-const paths = settings.deps.map(addonName => {
-  addonName = addonName.name;
-  return 'app/addons/' + addonName + '/assets/less/';
-});
-
-srcAndTarget.unshift('assets/less/fauxton.less');
-paths.unshift('assets/less');
-
-// --- end setup ---
-
-const options = {
-  paths: paths
-};
-
-const parser = new less.Parser(options);
-
-
-function writeCSS (files) {
-  function concatCSS (src, cb) {
-    fs.readFile(root + src, 'utf8', (err, data) => {
-      if (err) {
-        return cb(null, []);
-      }
-
-      parser.parse(data, (err, tree) => {
-        if (err) {
-          throw err;
-        }
-        return cb(null, [tree.toCSS()]);
-      });
-    });
-  };
-
-  async.concatSeries(files, concatCSS, (err, data) => {
-    fs.writeFile(target, data.join('\n'), (err) => {
-      if (err) {
-        throw err;
-      }
-
-      process.exit(0);
-    });
-  });
-}
-
-writeCSS(srcAndTarget);

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/devserver.js
----------------------------------------------------------------------
diff --git a/devserver.js b/devserver.js
index 40e0481..eac4d5d 100644
--- a/devserver.js
+++ b/devserver.js
@@ -26,22 +26,6 @@ var loadSettings = function () {
 
 var settings = loadSettings();
 
-var less = function () {
-  var _less = spawn('npm', ['run', 'build:less:debug']);
-
-  _less.stdout.on('data', (data) => {
-    console.log(data.toString());
-  });
-
-  _less.stderr.on('error', (data) => {
-    console.log('less error:', data.toString());
-  });
-
-  _less.on('close', (code) => {
-    console.log(`less compile finished with code ${code}`);
-  });
-};
-
 var devSetup = function (cb) {
   console.log('setup dev environment');
   var cmd = 'devSetupWithClean';
@@ -102,12 +86,6 @@ var runWebpackServer = function () {
 
   var compiler = webpack(config);
 
-  compiler.plugin('done', function () {
-    console.log('Bundled done!');
-    console.log('Compiling less');
-    less();
-  });
-
   var server = new WebpackDev(compiler, options);
   var proxy = httpProxy.createServer({
     secure: false,

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 71ff1ce..d95637f 100644
--- a/package.json
+++ b/package.json
@@ -17,13 +17,15 @@
   },
   "devDependencies": {
     "es5-shim": "4.5.4",
+    "file-loader": "^0.8.5",
     "imports-loader": "^0.6.5",
     "mocha": "^2.4.5",
     "mocha-phantomjs": "~4.0.2",
     "nightwatch": "~0.8.18",
     "phantomjs": "^1.9.1",
     "react-addons-test-utils": "^0.14.7",
-    "sinon": "git+https://github.com/sinonjs/sinon.git"
+    "sinon": "git+https://github.com/sinonjs/sinon.git",
+    "url-loader": "^0.5.7"
   },
   "dependencies": {
     "async": "~0.2.6",
@@ -40,6 +42,7 @@
     "chai": "^3.5.0",
     "clean-css": "^3.4.9",
     "couchapp": "~0.11.0",
+    "css-loader": "^0.23.1",
     "d3": "^3.4.11",
     "eslint": "^1.6.0",
     "eslint-loader": "^1.3.0",
@@ -61,7 +64,8 @@
     "grunt-shell": "^1.1.1",
     "http-proxy": "^1.13.2",
     "jquery": "^2.2.0",
-    "less": "^1.7.5",
+    "less": "^2.3.1",
+    "less-loader": "^2.2.3",
     "lodash": "^3.10.1",
     "mkdirp": "^0.5.1",
     "moment": "^2.8.4",
@@ -76,6 +80,7 @@
     "request": "^2.54.0",
     "semver": "^5.1.0",
     "send": "^0.13.1",
+    "style-loader": "^0.13.1",
     "underscore": "~1.4.2",
     "url": "~0.7.9",
     "urls": "~0.0.3",
@@ -86,9 +91,6 @@
   },
   "scripts": {
     "stylecheck": "eslint --ext=js,jsx .",
-    "build:less:debug": "mkdirp ./dist/debug/dashboard.assets/css && node ./build-helper/less.js dist/debug/dashboard.assets/css/index.css",
-    "build:less:release": "mkdirp ./dist/tmp-out && node ./build-helper/less.js dist/tmp-out/index-max.css",
-    "build:css-compress": "mkdirp ./dist/release/dashboard.assets/css/ && cleancss --skip-rebase -o dist/tmp-out/index.css dist/tmp-out/index-max.css",
     "webpack:dev": "webpack --debug --progress --colors --config ./webpack.config.dev.js",
     "webpack:test": "webpack --debug --progress --colors --config ./webpack.config.test.js",
     "webpack:release": "webpack --debug --progress --colors --config ./webpack.config.release.js",

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/settings.json.default.json
----------------------------------------------------------------------
diff --git a/settings.json.default.json b/settings.json.default.json
index 7442a78..a65f6ed 100644
--- a/settings.json.default.json
+++ b/settings.json.default.json
@@ -41,7 +41,7 @@
           "development": false
         },
         "app": {
-          "root": "/_utils/",
+          "root": "/",
           "host": "../..",
           "version": "1.0"
         }

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/tasks/fauxton.js
----------------------------------------------------------------------
diff --git a/tasks/fauxton.js b/tasks/fauxton.js
index ff56839..7a220e4 100644
--- a/tasks/fauxton.js
+++ b/tasks/fauxton.js
@@ -59,7 +59,7 @@ module.exports = function (grunt) {
     grunt.log.writeln(localDeps.length + ' local dependencies');
     var local = fetch(localDeps, function (dep, destination) {
       // TODO: Windows
-      var command = 'cp -r ' + dep.path + ' ' + destination;
+      var command = 'cp -r ' + dep.path + '/ ' + destination + '/';
       grunt.log.writeln(command);
       return command;
     });

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/webpack.config.dev.js
----------------------------------------------------------------------
diff --git a/webpack.config.dev.js b/webpack.config.dev.js
index 7bba762..23aa847 100644
--- a/webpack.config.dev.js
+++ b/webpack.config.dev.js
@@ -39,7 +39,26 @@ module.exports = {
      },
     { test: require.resolve("backbone"),
       loader: "expose?Backbone"
-    }
+    },
+    {
+      test: /\.less$/,
+      loader: 'style!css!less'
+    },
+    {
+      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+      loader: 'url?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.woff2(\?\S*)?$/,   loader: 'url?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/fonts/[name].[ext]' },
+    { test: /\.swf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/[name].[ext]' },
+    { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
   ]
   },
   resolve: {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/webpack.config.release.js
----------------------------------------------------------------------
diff --git a/webpack.config.release.js b/webpack.config.release.js
index 6bc94da..bf6a536 100644
--- a/webpack.config.release.js
+++ b/webpack.config.release.js
@@ -8,7 +8,7 @@ module.exports = {
   ],
 
   output: {
-    path: path.join(__dirname, '/dist/tmp-out'),
+    path: path.join(__dirname, '/dist/release'),
     filename: 'bundle.js'
   },
 
@@ -53,7 +53,26 @@ module.exports = {
      },
     { test: require.resolve("backbone"),
       loader: "expose?Backbone"
-    }
+    },
+    {
+      test: /\.less$/,
+      loader: 'style!css!less'
+    },
+    {
+      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+      loader: 'url?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.woff2(\?\S*)?$/,   loader: 'url?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/fonts/[name].[ext]' },
+    { test: /\.swf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/[name].[ext]' },
+    { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
     ]
   },
   resolve: {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/ae131312/webpack.config.test.js
----------------------------------------------------------------------
diff --git a/webpack.config.test.js b/webpack.config.test.js
index db2ceae..1783f22 100644
--- a/webpack.config.test.js
+++ b/webpack.config.test.js
@@ -43,7 +43,26 @@ module.exports = {
     {
       test: require.resolve("react"),
       loader: "imports?shim=es5-shim/es5-shim&sham=es5-shim/es5-sham"
-    }
+    },
+    {
+      test: /\.less$/,
+      loader: 'style!css!less'
+    },
+    {
+      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+      loader: 'url?limit=10000&mimetype=application/font-woff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.woff2(\?\S*)?$/,   loader: 'url?limit=10000&mimetype=application/font-woff2&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    {
+      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=application/font-tff&name=dashboard.assets/fonts/[name].[ext]'
+    },
+    { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/fonts/[name].[ext]' },
+    { test: /\.swf(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/[name].[ext]' },
+    { test: /\.png(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.gif(\?v=\d+\.\d+\.\d+)?$/,    loader: 'file?name=dashboard.assets/img/[name].[ext]' },
+    { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,    loader: 'url?limit=10000&mimetype=image/svg+xml&name=dashboard.assets/img/[name].[ext]' }
   ]
   },
   resolve: {