From f00cfc2e089e99c5dc4af581b66c18717b4165e9 Mon Sep 17 00:00:00 2001 From: Eric Bidelman Date: Tue, 24 Nov 2015 12:46:06 -0800 Subject: [PATCH] Update packages, css fixes, new logo --- README.md | 6 ++++-- bower.json | 3 +++ gulpfile.js | 44 ++++++++++++++++++++++++----------------- images/gmail.png | Bin 30657 -> 8918 bytes images/gmail_small.png | Bin 12062 -> 0 bytes index.html | 2 +- package.json | 44 +++++++++++++++++++++-------------------- scripts/app.js | 18 ++++++++++++++++- scripts/googleapis.js | 44 +++++++++++++++++++++++------------------ styles/app.css | 1 + 10 files changed, 100 insertions(+), 62 deletions(-) mode change 100644 => 100755 images/gmail.png delete mode 100644 images/gmail_small.png diff --git a/README.md b/README.md index 18f7db0..4faa39e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Demo: [https://poly-mail.appspot.com/](https://poly-mail.appspot.com/)   (m #### Performance -*TLDR: paint is ~590ms and the app loads ~1s on Chrome desktop. Motorola G - Chrome - 3G Fast connection first paint is 1.66s* The full performance improvements over the Polymer 0.5 version are documented [here](https://github.com/ebidel/polymer-gmail/issues/6#issuecomment-123875813). +*TLDR: paint is ~590ms and the app loads ~1s on Chrome desktop. Motorola G - Chrome - 3G Fast connection first paint is 1.66s* The full performance improvements over the Polymer 0.5 version are documented [here](https://github.com/ebidel/polymer-gmail/issues/6#issuecomment-123875813). [Full results](https://github.com/ebidel/polymer-gmail/issues/6#issuecomment-123875813) @@ -20,7 +20,9 @@ Demo: [https://poly-mail.appspot.com/](https://poly-mail.appspot.com/)   (m In your local checkout, install the deps and Polymer elements - npm install; bower install + npm install + +This will also run `bower install` for you. ### Development & Building diff --git a/bower.json b/bower.json index d258470..3e90c79 100644 --- a/bower.json +++ b/bower.json @@ -5,6 +5,9 @@ "Eric Bidelman " ], "description": "Polymer version of Gmail app", + "scripts": { + "postinstall": "bower install" + }, "main": "index.html", "keywords": [ "webcomponents", diff --git a/gulpfile.js b/gulpfile.js index 0edcc6c..f72b06c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,12 +29,22 @@ var babelify = require('babelify'); var runSequence = require('run-sequence'); var path = require('path'); -var version = null; +var version = JSON.parse(fs.readFileSync('./package.json', 'utf8')).version; var isProd = false; +const AUTOPREFIXER_BROWSERS = ['last 2 versions', 'ios 8', 'Safari 8']; + +function minifyHtml() { + return $.minifyHtml({quotes: true, empty: true, spare: true}); +} + +function uglifyJS() { + return $.uglify({preserveComments: 'some'}); +} + /** Clean */ gulp.task('clean', function(done) { - del(['dist', 'scripts/bundle.js'], done); + return del(['dist', 'scripts/bundle.js']); }); /** Styles */ @@ -56,10 +66,7 @@ gulp.task('styles', function() { // })) // .pipe(gulp.dest('./dist/styles')); return gulp.src('./styles/*.css') - .pipe($.autoprefixer({ - browsers: ['last 2 versions'], - cascade: false - })) + .pipe($.autoprefixer(AUTOPREFIXER_BROWSERS)) .pipe($.minifyCss()) .pipe($.license('Apache', { organization: 'Google Inc. All rights reserved.' @@ -88,7 +95,7 @@ function buildBundle(file) { entries: [file], debug: isProd }) - .transform(babelify) // es6 -> e5 + .transform(babelify, {presets: ['es2015']}) // es6 -> e5 .bundle(); } @@ -100,7 +107,7 @@ gulp.task('jsbundle', function() { return buildBundle('./scripts/app.js') .pipe(source('bundle.js')) - .pipe($.streamify($.uglify())) + .pipe($.streamify(uglifyJS())) .pipe($.license('Apache', { organization: 'Google Inc. All rights reserved.' })) @@ -108,7 +115,7 @@ gulp.task('jsbundle', function() { }); /** Root */ -gulp.task('root', ['getversion'], function() { +gulp.task('root', function() { gulp.src([ './*.*', '!{package,bower}.json', @@ -187,8 +194,9 @@ gulp.task('vulcanize', function() { //excludes: [path.resolve('./dist/third_party/polymer.html')] //stripExcludes: false, })) - // .pipe($.minifyInline()) // TODO: messes up SVG icons - .pipe($.crisper()) // Separate JS into its own file for CSP compliance. + .pipe($.crisper()) // Separate JS into its own file for CSP compliance and reduce html parser load. + .pipe($.if('*.html', minifyHtml())) // Minify html output + .pipe($.if('*.js', uglifyJS())) // Minify js output .pipe(gulp.dest('./dist/elements')) }); @@ -202,10 +210,6 @@ gulp.task('watch', function() { gulp.watch('./scripts/**/*.js', ['jsbundle']); }); -gulp.task('getversion', function() { - version = JSON.parse(fs.readFileSync('./package.json', 'utf8')).version; -}); - /** Main tasks */ var allTasks = ['root', 'styles', 'jsbundle', 'images'];//, 'serviceworker']; @@ -220,10 +224,14 @@ gulp.task('bump', function() { gulp.task('default', function() { isProd = true; - return runSequence('clean', 'bump', 'getversion', 'js', - allTasks, 'vulcanize', 'precache', 'copy_bower_components'); + return runSequence('clean', 'js', allTasks, 'vulcanize', 'precache', + 'copy_bower_components'); }) gulp.task('dev', function() { - return runSequence('clean', 'getversion', allTasks, 'watch'); + return runSequence('clean', allTasks, 'watch'); +}); + +gulp.task('release', ['bump'], function() { + return runSequence('default'); }); diff --git a/images/gmail.png b/images/gmail.png old mode 100644 new mode 100755 index 671b0260f7329af3975bc0712dd207a8a77fa4bc..7a54cdf30f7ae02679a8651a760aa68c33eadccb GIT binary patch literal 8918 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 a3y<+Knthn*#IV0{ixuvu$P`GKJ^O#&y(K^Z diff --git a/images/gmail_small.png b/images/gmail_small.png deleted file mode 100644 index fe8c85b074fe249b2f669ade8d6c570c4517f0e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12062 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 - + diff --git a/package.json b/package.json index aa73f75..2ba1372 100644 --- a/package.json +++ b/package.json @@ -6,31 +6,33 @@ "node": ">=0.10.0" }, "devDependencies": { - "babelify": "^6.1.2", - "browserify": "^9.0.8", - "del": "^1.1.1", - "glob": "^5.0.12", - "gulp": "^3.8.11", - "gulp-autoprefixer": "^2.3.1", - "gulp-bump": "^0.3.0", - "gulp-crisper": "0.0.4", - "gulp-jscs": "^2.0.0", - "gulp-jshint": "^1.11.2", + "babel-preset-es2015": "^6.1.18", + "babelify": "^7.2.0", + "browserify": "^12.0.1", + "del": "^2.1.0", + "glob": "^6.0.1", + "gulp": "^3.9.0", + "gulp-autoprefixer": "^3.1.0", + "gulp-bump": "^1.0.0", + "gulp-crisper": "^1.0.0", + "gulp-if": "^2.0.0", + "gulp-jscs": "^3.0.2", + "gulp-jshint": "^2.0.0", "gulp-license": "^1.0.0", - "gulp-load-plugins": "^0.10.0", + "gulp-load-plugins": "^1.1.0", "gulp-minify-css": "^1.1.0", - "gulp-minify-inline": "^0.1.0", + "gulp-minify-html": "^1.0.4", "gulp-rename": "^1.2.2", - "gulp-replace": "^0.5.3", - "gulp-sass": "^1.3.3", - "gulp-streamify": "0.0.5", - "gulp-uglify": "^1.2.0", - "gulp-util": "^3.0.4", - "gulp-vulcanize": "^6.0.0", - "gulp-watch": "^4.2.4", - "jshint-stylish": "^2.0.1", + "gulp-replace": "^0.5.4", + "gulp-sass": "^2.1.0", + "gulp-streamify": "^1.0.2", + "gulp-uglify": "^1.5.1", + "gulp-util": "^3.0.7", + "gulp-vulcanize": "^6.1.0", + "gulp-watch": "^4.3.5", + "jshint-stylish": "^2.1.0", "lodash.assign": "^3.1.0", - "run-sequence": "^1.1.0", + "run-sequence": "^1.1.5", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" } diff --git a/scripts/app.js b/scripts/app.js index 6fdd8a3..5e889d2 100644 --- a/scripts/app.js +++ b/scripts/app.js @@ -323,7 +323,7 @@ import {GMail as Gmail, GPlus as Gplus} from './googleapis'; }); this._scrollArchiveSetup = false; - }.bind(this)); + }); } this._scrollArchiveSetup = true; @@ -463,6 +463,22 @@ import {GMail as Gmail, GPlus as Gplus} from './googleapis'; template.toggleToast('Connection is flaky. Content may be stale.'); }); + // Log first paint. + if (window.chrome.loadTimes) { + var getFP = function() { + let load = window.chrome.loadTimes(); + let fp = (load.firstPaintTime - load.startLoadTime) * 1000; + return Math.round(fp); + }; + window.onload = (e) => { + let render = () => { + let fp = getFP(); + console.info(`First paint: ${fp} ms`); + }; + setTimeout(render, 100); // Wait a tick so we're guaranteed a fp time. + }; + } + // // Prevent context menu. // window.oncontextmenu = function() { // return false; diff --git a/scripts/googleapis.js b/scripts/googleapis.js index 0bfe92d..c5d0ffc 100644 --- a/scripts/googleapis.js +++ b/scripts/googleapis.js @@ -72,7 +72,7 @@ export class GMail extends GoogleClientAPI { static getValueForHeaderField(headers, field) { // jshint boss:true - for (var i = 0, header; header = headers[i]; ++i) { + for (let i = 0, header; header = headers[i]; ++i) { if (header.name === field || header.name === field.toLowerCase()) { return header.value; } @@ -88,15 +88,15 @@ export class GMail extends GoogleClientAPI { } fixUpMessages(resp) { - var messages = resp.result.messages; + let messages = resp.result.messages; // jshint boss:true - for (var j = 0, m; m = messages[j]; ++j) { - var headers = m.payload.headers; + for (let j = 0, m; m = messages[j]; ++j) { + let headers = m.payload.headers; - var date = new Date(GMail.getValueForHeaderField(headers, 'Date')); + let date = new Date(GMail.getValueForHeaderField(headers, 'Date')); - var isToday = GMail.isToday(new Date(), date); + let isToday = GMail.isToday(new Date(), date); if (isToday) { // Example: Thu Sep 25 2014 14:43:18 GMT-0700 (PDT) -> 14:43:18. m.date = date.toLocaleTimeString().replace( @@ -109,8 +109,14 @@ export class GMail extends GoogleClientAPI { m.to = GMail.getValueForHeaderField(headers, 'To'); m.subject = GMail.getValueForHeaderField(headers, 'Subject'); - var fromHeaders = GMail.getValueForHeaderField(headers, 'From'); - var fromHeaderMatches = fromHeaders.match(this._FROM_HEADER_REGEX); + let fromHeaders = GMail.getValueForHeaderField(headers, 'From'); + + // Use Reply-To Header if From header wasn't found. + if (!fromHeaders) { + fromHeaders = GMail.getValueForHeaderField(headers, 'Reply-To'); + } + + let fromHeaderMatches = fromHeaders.match(this._FROM_HEADER_REGEX); m.from = {}; @@ -137,15 +143,15 @@ export class GMail extends GoogleClientAPI { fetchLabels() { return this.init().then(api => { - var fetchLabels = api.users.labels.list({userId: 'me'}); + let fetchLabels = api.users.labels.list({userId: 'me'}); return fetchLabels.then(resp => { - var labels = resp.result.labels.filter((label, i) => { + let labels = resp.result.labels.filter((label, i) => { // Add color to label. label.color = GMail.Labels.Colors[i % GMail.Labels.Colors.length]; return label.type !== 'system'; // Don't include system labels. }); - var labelMap = labels.reduce((o, v, i) => { + let labelMap = labels.reduce((o, v, i) => { o[v.id] = v; return o; }, {}); @@ -158,11 +164,11 @@ export class GMail extends GoogleClientAPI { fetchMail(q) { return this.init().then(api => { // Fetch only the emails in the user's inbox. - var fetchThreads = api.users.threads.list({userId: 'me', q: q}); + let fetchThreads = api.users.threads.list({userId: 'me', q: q}); return fetchThreads.then(resp => { - var batch = gapi.client.newBatch(); - var threads = resp.result.threads; + let batch = gapi.client.newBatch(); + let threads = resp.result.threads; if (!threads) { return []; @@ -170,15 +176,15 @@ export class GMail extends GoogleClientAPI { // Setup a batch operation to fetch all messages for each thread. // jshint boss:true - for (var i = 0, thread; thread = threads[i]; ++i) { - var req = api.users.threads.get({userId: 'me', 'id': thread.id}); + for (let i = 0, thread; thread = threads[i]; ++i) { + let req = api.users.threads.get({userId: 'me', 'id': thread.id}); batch.add(req, {id: thread.id}); // Give each request a unique id for lookup later. } // Like Promise.all, but resp is an object instead of promise results. return batch.then(resp => { // jshint boss:true - for (var i = 0, thread; thread = threads[i]; ++i) { + for (let i = 0, thread; thread = threads[i]; ++i) { thread.messages = this.fixUpMessages( resp.result[thread.id]).reverse(); //thread.archived = false; // initialize archived. @@ -222,7 +228,7 @@ export class GPlus extends GoogleClientAPI { } fetchFriendProfilePics() { - var users = {}; + let users = {}; return this.init().then(plus => { return new Promise((resolve, reject) => { this._getAllUserProfileImages(users, null, resolve); @@ -234,7 +240,7 @@ export class GPlus extends GoogleClientAPI { return this.init().then(api => { // Get user's profile pic, cover image, email, and name. return api.people.get({userId: 'me'}).then(resp => { - // var img = resp.result.image && resp.result.image.url.replace(/(.+)\?sz=\d\d/, "$1?sz=" + this.PROFILE_IMAGE_SIZE); + // let img = resp.result.image && resp.result.image.url.replace(/(.+)\?sz=\d\d/, "$1?sz=" + this.PROFILE_IMAGE_SIZE); if (!resp.result.cover) { return null; } diff --git a/styles/app.css b/styles/app.css index 79c5e19..310a26c 100644 --- a/styles/app.css +++ b/styles/app.css @@ -76,6 +76,7 @@ paper-icon-item.iron-selected iron-icon { #navheader { font-size: inherit; color: white; + flex-shrink: 0; } #navheader iron-image {