diff options
Diffstat (limited to 'web-ui')
-rw-r--r-- | web-ui/Gruntfile.js | 476 | ||||
-rw-r--r-- | web-ui/app/index.html | 6 | ||||
-rw-r--r-- | web-ui/app/js/views/templates.js | 2 | ||||
-rw-r--r-- | web-ui/app/scss/main.scss | 8 | ||||
-rw-r--r-- | web-ui/app/scss/styles.scss | 14 | ||||
-rw-r--r-- | web-ui/app/templates/compose/no_message_selected.hbs (renamed from web-ui/app/templates/no_message_selected.hbs) | 0 | ||||
-rw-r--r-- | web-ui/bower.json | 2 | ||||
-rw-r--r-- | web-ui/config/buildoptions.js | 11 | ||||
-rw-r--r-- | web-ui/config/compass.rb | 29 | ||||
-rw-r--r-- | web-ui/config/imagemin.js | 14 | ||||
-rw-r--r-- | web-ui/config/package.sh | 36 | ||||
-rwxr-xr-x | web-ui/go | 2 | ||||
-rw-r--r-- | web-ui/package.json | 56 |
13 files changed, 123 insertions, 533 deletions
diff --git a/web-ui/Gruntfile.js b/web-ui/Gruntfile.js deleted file mode 100644 index 8a04a9fd..00000000 --- a/web-ui/Gruntfile.js +++ /dev/null @@ -1,476 +0,0 @@ -/* - * Copyright (c) 2014 ThoughtWorks, Inc. - * - * Pixelated is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Pixelated is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. - */ -'use strict'; - -// # Globbing -// for performance reasons we're only matching one level down: -// 'test/spec/{,*/}*.js' -// use this if you want to recursively match all subfolders: -// 'test/spec/**/*.js' - -module.exports = function (grunt) { - var exec = require('child_process').exec; - - // Load grunt tasks automatically - require('load-grunt-tasks')(grunt); - - // Time how long tasks take. Can help when optimizing build times - require('time-grunt')(grunt); - - // Define the configuration for all the tasks - grunt.initConfig({ - compress: { - main: { - options: { - archive: 'archive.zip' - }, - files: [ - {src: ['dist/**/*']} // includes files in path - ] - } - }, - - // Project settings - yeoman: { - // configurable paths - app: require('./bower.json').appPath || 'app', - dist: 'dist' - }, - - // Watches files for changes and runs tasks based on the changed files - watch: { - js: { - files: ['{.tmp,<%= yeoman.app %>}/js/{,*/}*.js'], - tasks: ['newer:jshint:all', 'update-control-tower'] - }, - jsTest: { - files: ['test/spec/{,*/}*.js'], - tasks: ['newer:jshint:test', 'karma'] - }, - sass: { - files: ['<%= yeoman.app %>/scss/{,*/}*.scss'], - tasks: ['compass:dev'] - }, - html: { - files: ['<%= yeoman.app %>/index.html'], - livereload: true - }, - templates: { - files: ['<%= yeoman.app %>/templates/**/*.hbs'], - tasks: ['handlebars:dev'] - }, - gruntfile: { - files: ['Gruntfile.js'] - } - }, - - compass: { - dist: { - options: { - sassDir: '<%= yeoman.app %>/scss', - cssDir: '<%= yeoman.dist %>/css', - environment: 'production' - } - }, - dev: { - options: { - sassDir: '<%= yeoman.app %>/scss', - cssDir: 'app/css' - } - } - }, - - // The actual grunt server settings - connect: { - options: { - port: 9000, - // Change this from '0.0.0.0' to 'localhost' to limit access from outside. - hostname: '0.0.0.0', - livereload: true - }, - test: { - options: { - port: 9001, - base: [ - '.tmp', - 'test', - '<%= yeoman.app %>' - ] - } - }, - dist: { - options: { - base: '<%= yeoman.dist %>' - } - } - }, - - // Make sure code styles are up to par and there are no obvious mistakes - jshint: { - options: { - jshintrc: '.jshintrc', - reporter: require('jshint-stylish') - }, - all: [ - 'Gruntfile.js', - '<%= yeoman.app %>/scripts/{,*/}*.js' - ], - test: { - options: { - jshintrc: '.jshintrc' - }, - src: ['test/spec/{,*/}*.js'] - } - }, - - // Empties folders to start fresh - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= yeoman.dist %>/*', - ] - }] - }, - server: ['.tmp', '<%= yeoman.app %>/js/generated'] - }, - - uglify: { - dist: { - files: [{ - expand: true, - cwd: '.tmp', - src: 'app.min.js', - dest: 'dist' - }] - } - }, - - cssmin: { - minify: { - expand: true, - cwd: '<%= yeoman.app %>/css/', - src: ['*.css', '!*.min.css'], - dest: '<%= yeoman.dist %>/css/' - } - }, - - // The following *-min tasks produce minified files in the dist folder - imagemin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.{png,jpg,jpeg,gif}', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - - svgmin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.svg', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - - htmlmin: { - dist: { - options: { - // Optional configurations that you can uncomment to use - // removeCommentsFromCDATA: true, - // collapseBooleanAttributes: true, - // removeAttributeQuotes: true, - // removeRedundantAttributes: true, - // useShortDoctype: true, - // removeEmptyAttributes: true, - // removeOptionalTags: true*/ - }, - files: [{ - expand: true, - cwd: '<%= yeoman.app %>', - src: ['*.html', 'templates/*.html'], - dest: '<%= yeoman.dist %>' - }] - } - }, - - // Allow the use of non-minsafe AngularJS files. Automatically makes it - // minsafe compatible so Uglify does not destroy the ng references - // Replace Google CDN references - cdnify: { - dist: { - html: ['<%= yeoman.dist %>/*.html'] - } - }, - - // Copies remaining files to places other tasks can use - copy: { - dist: { - files: [{ - expand: true, - dot: true, - cwd: '<%= yeoman.app %>', - dest: '<%= yeoman.dist %>', - src: [ - '*.{ico,png,txt}', - '.htaccess', - 'images/{,*/}*.{webp}', - 'fonts/*', - 'templates/*', - 'locales/**/*', - 'bower_components/font-awesome/css/font-awesome.min.css', - 'bower_components/font-awesome/fonts/*' - ] - }, { - expand: true, - cwd: '.tmp/images', - dest: '<%= yeoman.dist %>/images', - src: [ - 'generated/*' - ] - }] - }, - styles: { - expand: true, - cwd: '<%= yeoman.app %>/styles', - dest: '.tmp/css/', - src: '{,*/}*.css' - } - }, - - // Run some tasks in parallel to speed up the build process - concurrent: { - server: [ - 'copy:styles' - ], - test: [ - 'copy:styles' - ], - dist: [ - 'copy:styles', - 'imagemin', - 'svgmin', - 'htmlmin' - ] - }, - requirejs: { - compile: { - options: { - baseUrl: 'app', - wrap: true, - almond: true, - optimize: 'none', - mainConfigFile: 'app/js/main.js', - out: '.tmp/app.concatenated.js', - include: ['js/main'], - name: 'bower_components/almond/almond' - - } - } - }, - concat: { - options: { - separator: ';', - }, - dist: { - src: [ - 'app/bower_components/modernizr/modernizr.js', - 'app/bower_components/lodash/dist/lodash.js', - 'app/bower_components/jquery/dist/jquery.js', - 'app/js/lib/highlightRegex.js', - 'app/bower_components/handlebars/handlebars.min.js', - 'app/bower_components/typeahead.js/dist/typeahead.bundle.min.js', - 'app/bower_components/foundation/js/foundation.js', - 'app/bower_components/foundation/js/foundation/foundation.reveal.js', - 'app/bower_components/foundation/js/foundation/foundation.offcanvas.js', - '.tmp/app.concatenated.js', - ], - dest: '.tmp/app.min.js', - }, - }, - useminPrepare: { - html: 'dist/index.html', - options: { - dest: 'dist' - } - }, - usemin: { - html: 'dist/index.html' - }, - 'regex-replace': { - dist: { - src: ['dist/index.html'], - actions: [ - { - name: 'remove-requirejs-from-index', - search: 'remove-in-build.*end-remove-in-build', - replace: function(match){ - return ''; - }, - flags: 'g' - } - ] - } - }, - handlebars: { - dist: { - options: { - namespace: 'Pixelated' - }, - files: { - '<%= yeoman.dist %>/js/generated/hbs/templates.js': '<%= yeoman.app %>/templates/**/*.hbs' - } - }, - dev: { - options: { - namespace: 'Pixelated' - }, - files: { - '<%= yeoman.app %>/js/generated/hbs/templates.js': '<%= yeoman.app %>/templates/**/*.hbs' - } - } - }, - - // Test settings - karma: { - options: { - configFile: 'karma.conf.js' - }, - - ci: { - singleRun: true, - autoWatch: false, - colors: false, - reporters: ['junit'] - }, - - single: { - singleRun: true, - autoWatch: false - }, - - dev: { - singleRun: false, - browsers: ['PhantomJS'] - }, - debug: { - singleRun: false, - browsers: ['Chrome'] - } - - } - - }); - - grunt.loadNpmTasks('grunt-contrib-requirejs'); - grunt.loadNpmTasks('grunt-contrib-concat'); - - grunt.registerTask('build', function (target) { - if (target === 'dist') { - return grunt.task.run(['package', 'dist:keepalive']); - } - - grunt.task.run([ - 'clean:server', - 'compass:dev', - 'handlebars:dev', - 'concurrent:server', - 'update-control-tower' - ]); - }); - - /* - grunt.registerTask('watch', function (target) { - grunt.task.run([ - 'build', - 'watch' - ]); - }); - */ - - grunt.registerTask('test-watch', [ - 'clean:server', - 'handlebars:dev', - 'connect:test', - 'karma:dev' - ]); - - grunt.registerTask('debug', [ - 'clean:server', - 'handlebars:dev', - 'connect:test', - 'karma:debug' - ]); - - grunt.registerTask('test-ci', [ - 'clean:server', - 'stopbrowsers', - 'handlebars:dev', - 'concurrent:test', - 'connect:test', - 'karma:ci' - ]); - - grunt.registerTask('test', [ - 'clean:server', - 'handlebars:dev', - 'connect:test', - 'karma:single' - ]); - - grunt.registerTask('package', [ - 'clean:dist', - 'useminPrepare', - 'compass:dist', - 'handlebars:dev', - 'concurrent:dist', - 'copy:dist', - 'cdnify', - 'cssmin', - 'requirejs', - 'concat:dist', - 'uglify', - 'usemin', - 'regex-replace:dist', - 'compress' - ]); - - grunt.registerTask('default', [ - 'newer:jshint', - 'test', - 'package' - ]); - - grunt.registerTask('stopbrowsers', function () { - ['phantom', 'firefox'].forEach(function (browser) { - console.log('killing all ' + browser + ' instances'); - exec('pgrep -f "' + browser + '" | xargs kill'); - console.log('... done'); - }); - }); - - grunt.registerTask('update-control-tower', function () { - exec('bash -c "flight-control-tower control-tower.yml && mv control_tower.html .tmp/"'); - }); -}; diff --git a/web-ui/app/index.html b/web-ui/app/index.html index 546a59b6..16521d37 100644 --- a/web-ui/app/index.html +++ b/web-ui/app/index.html @@ -61,7 +61,7 @@ </div> </div> -<!-- build:js app.min.js --> +<!--usemin_start--> <script src="/bower_components/modernizr/modernizr.js"></script> <script src="/bower_components/lodash/dist/lodash.js"></script> <script src="/bower_components/jquery/dist/jquery.js"></script> @@ -71,9 +71,9 @@ <script src="/bower_components/foundation/js/foundation.js" ></script> <script src="/bower_components/foundation/js/foundation/foundation.reveal.js" ></script> <script src="/bower_components/foundation/js/foundation/foundation.offcanvas.js"></script> -<!-- endbuild--> +<script src="/bower_components/requirejs/require.js" data-main="js/main.js"></script> +<!--usemin_end--> -<!-- remove-in-build --><script src="/bower_components/requirejs/require.js" data-main="js/main.js"></script><!-- end-remove-in-build --> <script> diff --git a/web-ui/app/js/views/templates.js b/web-ui/app/js/views/templates.js index 4847eb4d..9d202207 100644 --- a/web-ui/app/js/views/templates.js +++ b/web-ui/app/js/views/templates.js @@ -49,7 +49,7 @@ define(['hbs/templates'], function (templates) { refreshTrigger: window.Pixelated['app/templates/mail_actions/refresh_trigger.hbs'], paginationTrigger: window.Pixelated['app/templates/mail_actions/pagination_trigger.hbs'] }, - noMessageSelected: window.Pixelated['app/templates/no_message_selected.hbs'], + noMessageSelected: window.Pixelated['app/templates/compose/no_message_selected.hbs'], search: { trigger: window.Pixelated['app/templates/search/search_trigger.hbs'] }, diff --git a/web-ui/app/scss/main.scss b/web-ui/app/scss/main.scss index 8489d525..f4ce2c4b 100644 --- a/web-ui/app/scss/main.scss +++ b/web-ui/app/scss/main.scss @@ -1,8 +1,8 @@ -@import "reset.scss"; -@import "foundation.scss"; @import "compass/css3"; -@import "colors.scss"; -@import "styles.scss"; +@import "reset"; +@import "foundation"; +@import "colors"; +@import "styles"; html { diff --git a/web-ui/app/scss/styles.scss b/web-ui/app/scss/styles.scss index 7fe0ec05..bd7ea2b5 100644 --- a/web-ui/app/scss/styles.scss +++ b/web-ui/app/scss/styles.scss @@ -1,11 +1,11 @@ @import "compass/css3"; -@import "colors.scss"; -@import "mixins.scss"; -@import "alerts.scss"; -@import "read.scss"; -@import "reply.scss"; -@import "compose.scss"; -@import "security.scss"; +@import "colors"; +@import "mixins"; +@import "alerts"; +@import "read"; +@import "reply"; +@import "compose"; +@import "security"; #logo { diff --git a/web-ui/app/templates/no_message_selected.hbs b/web-ui/app/templates/compose/no_message_selected.hbs index 0442192d..0442192d 100644 --- a/web-ui/app/templates/no_message_selected.hbs +++ b/web-ui/app/templates/compose/no_message_selected.hbs diff --git a/web-ui/bower.json b/web-ui/bower.json index ea8a5f7b..7543a33b 100644 --- a/web-ui/bower.json +++ b/web-ui/bower.json @@ -13,7 +13,7 @@ "typeahead.js": "0.10.2" }, "devDependencies": { - "handlebars": "~1.3.0", + "handlebars": "2.0.0", "jasmine-flight": "3.0.0", "jasmine-jquery": "2.0.5", "almond": "~0.3.0" diff --git a/web-ui/config/buildoptions.js b/web-ui/config/buildoptions.js new file mode 100644 index 00000000..639a573e --- /dev/null +++ b/web-ui/config/buildoptions.js @@ -0,0 +1,11 @@ +({ + baseUrl: '../app', + wrap: true, + almond: true, + optimize: 'none', + mainConfigFile: '../app/js/main.js', + out: '../.tmp/app.concatenated.js', + include: ['js/main'], + name: 'bower_components/almond/almond' +}) + diff --git a/web-ui/config/compass.rb b/web-ui/config/compass.rb new file mode 100644 index 00000000..0b9463a7 --- /dev/null +++ b/web-ui/config/compass.rb @@ -0,0 +1,29 @@ +# Require any additional compass plugins here. + +# Set this to the root of your project when deployed: + +target_dir = ENV['PIXELATED_BUILD'] == 'package' ? 'dist' : 'app' + + +http_path = "/" +css_dir = "#{target_dir}/css" +sass_dir = "app/scss" +images_dir = "app/images" +javascripts_dir = "app/js" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed +output_style = :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/web-ui/config/imagemin.js b/web-ui/config/imagemin.js new file mode 100644 index 00000000..d63f7a7c --- /dev/null +++ b/web-ui/config/imagemin.js @@ -0,0 +1,14 @@ +var Imagemin = require('imagemin'); + +var imagemin = new Imagemin() + .src('app/images/*.{gif,jpg,png,svg}') + .dest('dist/images') + .use(Imagemin.jpegtran({ progressive: true })); + +imagemin.run(function (err, files) { + if (err) { + throw err; + } + + console.log(files[0]); +}); diff --git a/web-ui/config/package.sh b/web-ui/config/package.sh new file mode 100644 index 00000000..b4e3c17d --- /dev/null +++ b/web-ui/config/package.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# prepare files for .deb package +export PIXELATED_BUILD='package' + +mkdir -p dist + +# initial npm tasks +./go clean +./go compass +./go handlebars +./go imagemin +./go minify_html +./go buildmain + + +# copy files +cd app +cp --parents 404.html fonts/* locales/**/* bower_components/font-awesome/css/font-awesome.min.css bower_components/font-awesome/fonts/* ../dist +cd - + +# concat js files and minify +cat \ +app/bower_components/modernizr/modernizr.js \ +app/bower_components/lodash/dist/lodash.js \ +app/bower_components/jquery/dist/jquery.js \ +app/js/lib/highlightRegex.js \ +app/bower_components/handlebars/handlebars.min.js \ +app/bower_components/typeahead.js/dist/typeahead.bundle.min.js \ +app/bower_components/foundation/js/foundation.js \ +app/bower_components/foundation/js/foundation/foundation.reveal.js \ +app/bower_components/foundation/js/foundation/foundation.offcanvas.js \ +.tmp/app.concatenated.js > dist/app.js +node_modules/.bin/minify dist/app.js > dist/app.min.js +rm dist/app.js + @@ -1,3 +1,3 @@ #!/bin/bash -node_modules/grunt-cli/bin/grunt $GRUNT_OPTS $* +npm run $* diff --git a/web-ui/package.json b/web-ui/package.json index 60736713..d13d42a5 100644 --- a/web-ui/package.json +++ b/web-ui/package.json @@ -3,55 +3,31 @@ "version": "0.0.0", "devDependencies": { "bower": "1.3.12", - "connect-livereload": "0.5.2", - "express": "4.10.4", - "generator-flight": "0.8.0", - "grunt": "^0.4.5", - "grunt-autoprefixer": "2.0.0", - "grunt-build-control": "0.2.2", - "grunt-cli": "^0.1.13", - "grunt-concurrent": "1.0.0", - "grunt-contrib-clean": "0.6.0", - "grunt-contrib-coffee": "0.12.0", - "grunt-contrib-compass": "1.0.1", - "grunt-contrib-compress": "0.12.0", - "grunt-contrib-concat": "0.5.0", - "grunt-contrib-connect": "0.9.0", - "grunt-contrib-copy": "0.7.0", - "grunt-contrib-cssmin": "0.10.0", - "grunt-contrib-handlebars": "^0.8.0", - "grunt-contrib-htmlmin": "0.3.0", - "grunt-contrib-imagemin": "0.9.2", - "grunt-contrib-jshint": "0.10.0", - "grunt-contrib-requirejs": "~0.4.4", - "grunt-contrib-uglify": "0.6.0", - "grunt-contrib-watch": "0.6.1", - "grunt-google-cdn": "0.4.3", - "grunt-karma": "0.9.0", - "grunt-newer": "0.8.0", - "grunt-ngmin": "0.0.3", - "grunt-regex-replace": "^0.2.6", - "grunt-rev": "~0.1.0", - "grunt-svgmin": "2.0.0", - "grunt-usemin": "2.6.2", "handlebars": "2.0.0", + "html-minifier": "^0.6.9", + "imagemin": "3.1.0", + "jshint": "2.5.10", "jshint-stylish": "1.0.0", "karma": "0.12.28", "karma-chrome-launcher": "0.1.7", "karma-firefox-launcher": "0.1.3", "karma-jasmine": "0.2.2", - "karma-junit-reporter": "^0.2.2", + "karma-junit-reporter": "0.2.2", "karma-phantomjs-launcher": "0.1.4", "karma-requirejs": "0.2.2", - "karma-safari-launcher": "~0.1.1", - "load-grunt-tasks": "1.0.0", - "node-static": "0.7.6", - "requirejs": "2.1.15", - "time-grunt": "1.0.0", - "tiny-lr": "0.1.4" + "requirejs": "2.1.15" }, "scripts": { - "test": "karma start --single-run --browsers PhantomJS", - "watch-test": "karma start" + "test": "npm run clean && npm run handlebars && node_modules/karma/bin/karma start --single-run --browsers PhantomJS $GRUNT_OPTS", + "watch-test": "node_modules/karma/bin/karma start", + "handlebars": "handlebars app/templates/**/*.hbs > app/js/generated/hbs/templates.js --namespace=window.Pixelated --root .", + "compass": "compass compile", + "build": "npm run clean && npm run handlebars && npm run compass", + "jshint": "node_modules/.bin/jshint --config=.jshintrc `find app -name '*.js' | grep -v -e 'lib' -e 'bower' -e 'generated'`", + "clean": "rm -rf .tmp/ dist/**/* app/js/generated/hbs/* app/css/*", + "buildmain": "node_modules/requirejs/bin/r.js -o config/buildoptions.js", + "package": "/bin/bash config/package.sh", + "imagemin": "node config/imagemin.js", + "minify_html": "node_modules/.bin/html-minifier app/index.html --collapse-whitespace | sed 's|<!--usemin_start-->.*<!--usemin_end-->|<script src=\"app.min.js\" type=\"text/javascript\"></script>|' > dist/index.html" } } |