Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/CSS-Tricks/The-Printliminator.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Gruntfile.js')
-rw-r--r--Gruntfile.js318
1 files changed, 278 insertions, 40 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index de21abd..eb0bfee 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,16 +1,22 @@
-/*global module:false*/
+/*global module :false*/
module.exports = function( grunt ) {
'use strict';
var pkg = grunt.file.readJSON( 'package.json' ),
config = {
- src : 'src/',
- bookmarkletJs : 'bookmarklet',
+ // key in root directory - **not shared publically**
+ chromeKey : 'chrome.pem',
+
+ settings : grunt.file.readJSON( 'src/options.json' ),
+ // misc variables
printliminatorJs : 'printliminator',
- printliminatorFunctionName : 'csstricksPrintliminator',
+ printliminatorFunctionName : 'thePrintliminator',
+
+ // temporary file
+ bookmarkletJs : 'bookmarklet',
// bookmarklet builder URLs
indexHtml : 'index.html',
@@ -19,7 +25,7 @@ module.exports = function( grunt ) {
printliminator : '//css-tricks.github.io/The-Printliminator/printliminator.min.js'
},
dev : {
- printliminator : 'src/printliminator.js'
+ printliminator : 'dist/bookmarklet/printliminator.js'
},
// note to add to dynamically created index.html in the root folder
@@ -28,7 +34,7 @@ module.exports = function( grunt ) {
'██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██\n' +
'██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀▀▀▀██\n' +
'█████▀ ▀████▀ ██ ██ ▀████▀ ██ ██ ██ ██ ▀████▀ █████▀ ██ ██ █████▀\n' +
- 'To make changes, modify the "src/index.html"\n-->'
+ 'To make changes, modify the "src/bookmarklet/index.html"\n-->'
};
@@ -37,66 +43,279 @@ module.exports = function( grunt ) {
// Project configuration.
grunt.initConfig({
- pkg: pkg,
- config: config,
+ pkg : pkg,
+ config : config,
- jshint: {
- options: {
- globals: {
- '<%= config.printliminatorFunctionName %>': false
+ jshint : {
+ options : {
+ globals : {
+ '<%= config.printliminatorFunctionName %>' : false
},
- browser: true,
- undef: true
+ browser : true,
+ undef : true,
+ esnext : true
},
- files: {
- src: [
- '<%= config.src %><%= config.printliminatorJs %>.js', '!<%= config.src %>*.min.js'
+ files : {
+ src : [
+ 'test/spec.js',
+ 'dist/**/*.js'
]
}
},
- uglify: {
- options: {
- report: 'gzip'
+ uglify : {
+ options : {
+ report : 'gzip'
},
- main: {
+ main : {
files : {
- '<%= config.printliminatorJs %>.min.js' : [ '<%= config.src %><%= config.printliminatorJs %>.js' ]
+ '<%= config.printliminatorJs %>.min.js' : [ 'dist/bookmarklet/<%= config.printliminatorJs %>.js' ]
}
},
- mark: {
+ bookmarklet : {
files : {
- '<%= config.bookmarkletJs %>.min.js' : [ '<%= config.src %><%= config.bookmarkletJs %>.js' ]
+ '<%= config.bookmarkletJs %>.min.js' : [ 'src/bookmarklet/<%= config.bookmarkletJs %>.js' ]
}
}
},
- clean: {
- build: {
- src: [
+ clean : {
+ build : {
+ src : [
+ 'dist/**/*',
config.indexHtml,
- config.src + '*.min.js',
'*.min.js'
]
},
cleanup : {
- src: [ config.bookmarkletJs + '.min.js' ]
+ src : [
+ config.bookmarkletJs + '.min.js',
+ 'src/printliminator.css',
+ 'src/chrome/popup.css',
+ 'src/*-temp.*',
+ 'src/chrome/*-temp.*',
+ 'src/bookmarklet/*-temp.*'
+ ]
+ }
+
+ },
+
+ copy : {
+ chrome : {
+ files : [{
+ expand : true,
+ dot : true,
+ flatten : true,
+ src : [
+ 'src/printliminator.css',
+ 'src/icons/*.png',
+ 'src/chrome/manifest.json'
+ ],
+ dest : 'dist/chrome/'
+ }]
+ },
+ chromeLocales : {
+ expand : true,
+ src : [ '_locales/**/*.json' ],
+ dest : 'dist/chrome'
+ },
+ // Opera can use chrome.crx; just renamed
+ opera : {
+ src : 'dist/chrome.crx',
+ dest : 'dist/opera.nex'
+ }
+ },
+
+ sass : {
+ dist : {
+ options : {
+ style : 'expanded',
+ sourcemap : 'none',
+ noCache : true
+ },
+ files : {
+ 'src/printliminator.css' : 'src/printliminator-temp.scss',
+ 'src/bookmarklet/printliminator-temp.css' : 'src/bookmarklet/printliminator-temp.scss',
+ 'dist/chrome/popup.css' : 'src/chrome/popup-temp.scss',
+ 'src/bookmarklet/iframe-temp.css' : 'src/bookmarklet/iframe-temp.scss'
+ }
+ }
+ },
+
+ preprocess : {
+ extMainScss : {
+ src : 'src/printliminator.scss',
+ dest : 'src/printliminator-temp.scss',
+ options : {
+ context : {
+ MODE : 'EXT',
+ settings : '<%= config.settings %>'
+ }
+ }
+ },
+ extBookmarkletScss : {
+ src : 'src/printliminator.scss',
+ dest : 'src/bookmarklet/printliminator-temp.scss',
+ options : {
+ context : {
+ MODE : 'BOOKMARKLET',
+ settings : '<%= config.settings %>'
+ }
+ }
+ },
+ extPopupScss : {
+ src : 'src/chrome/popup.scss',
+ dest : 'src/chrome/popup-temp.scss',
+ options : {
+ context : '<%= config.settings %>'
+ }
+ },
+ bookmarkletPopupScss : {
+ src : 'src/bookmarklet/iframe.scss',
+ dest : 'src/bookmarklet/iframe-temp.scss',
+ options : {
+ context : '<%= config.settings %>'
+ }
+ },
+ extHtml : {
+ src : 'src/chrome/popup.html',
+ dest : 'dist/chrome/popup.html',
+ options : {
+ context : '<%= config.settings %>'
+ }
+ },
+ bookmarkletHtml : {
+ src : 'src/bookmarklet/iframe.html',
+ dest : 'src/bookmarklet/iframe-temp.html',
+ options : {
+ context : '<%= config.settings %>'
+ }
+ },
+ extPopupJs : {
+ src : 'src/chrome/popup.js',
+ dest : 'dist/chrome/popup.js',
+ options : {
+ context : '<%= config.settings %>'
+ }
+ },
+ extJs : {
+ src : 'src/printliminator.js',
+ dest : 'dist/chrome/printliminator.js',
+ options : {
+ // inline : true,
+ context : {
+ MODE : 'EXT',
+ settings : '<%= config.settings %>'
+ }
+ }
+ },
+ bookmarkletJs : {
+ src : 'src/printliminator.js',
+ dest : 'dist/bookmarklet/printliminator.js',
+ options : {
+ // inline : true,
+ context : {
+ MODE : 'BOOKMARKLET',
+ settings : '<%= config.settings %>'
+ }
+ }
+ }
+ },
+
+ jasmine : {
+ src : 'dist/chrome/printliminator.js',
+ options : {
+ specs : 'test/*Spec.js'
+ }
+ },
+
+ compress : {
+ chrome : {
+ options : {
+ archive : 'dist/chrome.zip'
+ },
+ files : [{
+ expand : true,
+ cwd : 'dist/chrome/',
+ src : ['**'],
+ dest : '',
+ filter : 'isFile'
+ }]
+ }
+ },
+
+ crx : {
+ chrome : {
+ options : {
+ privateKey : '<%= config.chromeKey %>',
+ },
+ src : 'dist/chrome/*.*',
+ dest : 'dist/chrome.crx',
}
}
});
grunt.loadNpmTasks( 'grunt-contrib-clean' );
+ grunt.loadNpmTasks( 'grunt-contrib-compress' );
+ grunt.loadNpmTasks( 'grunt-contrib-copy' );
+ grunt.loadNpmTasks( 'grunt-contrib-jasmine' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+ grunt.loadNpmTasks( 'grunt-contrib-sass' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
+ grunt.loadNpmTasks( 'grunt-crx' );
+ grunt.loadNpmTasks( 'grunt-preprocess' );
+
+ grunt.registerTask( 'update', 'update dist files', function() {
+ grunt.task.run([
+ 'default',
+ 'updateVersions',
+ 'compress',
+ // make Chrome extension
+ 'crx',
+ // Opera extension
+ 'copy:opera',
+ // Firefox extension will match Chrome files in v43+
+ // http://techcrunch.com/2015/08/21/chrome-extensions-are-coming-to-firefox/
+ ]);
+ });
+
+ grunt.registerTask( 'default', 'Default build', function() {
+ grunt.task.run([
+ 'clean:build',
+ 'preprocess',
+ 'sass',
+ 'bookmarklet-addStyles',
+ 'uglify',
+ 'bookmarklet-create',
+ 'copy:chrome',
+ 'copy:chromeLocales',
+ 'jshint',
+ 'jasmine',
+ 'clean:cleanup'
+ ]);
+ });
+
+ grunt.registerTask( 'bookmarklet-addStyles', function() {
+ // string replace settings in css & html; add to bookmarklet
+ var printliminator = grunt.file.read( 'dist/bookmarklet/printliminator.js' ),
+ styles = grunt.file.read( 'src/bookmarklet/printliminator-temp.css' ).replace( /\s+/g, ' ' ),
+ popupHTML = grunt.file.read( 'src/bookmarklet/iframe-temp.html' ).replace( /\s+/g, ' ' ),
+ popupCSS = grunt.file.read( 'src/bookmarklet/iframe-temp.css' ).replace( /\s+/g, ' ' ),
+ printliminator = printliminator
+ .replace( /\{styles\}/, styles )
+ .replace( /\{popupHTML\}/, popupHTML )
+ .replace( /\{popupCSS\}/, popupCSS );
+ grunt.file.write( 'dist/bookmarklet/printliminator.js', printliminator );
+ });
- grunt.registerTask( 'writeBookmarklet', function(){
+ grunt.registerTask( 'bookmarklet-create', function(){
// Add bookmarklet code for both production & development
// load bookmarket min file
var content = grunt.file.read( config.bookmarkletJs + '.min.js' ),
// load index.html template
- baseHtml = grunt.file.read( config.src + config.indexHtml ),
- bookmarkHtml = grunt.file.read( config.src + config.bookmarkHtml ),
+ baseHtml = grunt.file.read( 'src/bookmarklet/' + config.indexHtml ),
+ bookmarkHtml = grunt.file.read( 'src/bookmarklet/' + config.bookmarkHtml ),
modFile = function( mode ) {
var regex = new RegExp('\\{' + mode + '\\}'),
@@ -126,14 +345,33 @@ module.exports = function( grunt ) {
grunt.file.write( config.bookmarkHtml, bookmarkHtml );
});
- grunt.registerTask( 'default', 'Default build', function() {
- grunt.task.run([
- 'clean:build',
- 'jshint',
- 'uglify',
- 'writeBookmarklet',
- 'clean:cleanup'
- ]);
+ // update version numbers to match the package.json version
+ grunt.registerTask( 'updateVersions', function() {
+ var i, project, result,
+ projectFile = [
+ 'dist/chrome/manifest.json',
+ 'dist/chrome/printliminator.js',
+ 'dist/bookmarklet/printliminator.js'
+ ],
+ len = projectFile.length;
+ for ( i = 0; i < len; i++ ) {
+ if ( !grunt.file.exists( projectFile[ i ] ) ) {
+ grunt.log.error( 'file ' + projectFile[ i ] + ' not found' );
+ return true; // return false to abort the execution
+ }
+ if ( /json$/i.test( projectFile[ i ] ) ) {
+ project = grunt.file.readJSON( projectFile[ i ] ); // get file as json object
+ project.version = pkg.version;
+ result = JSON.stringify( project, null, 2 );
+ // write manifest back to src & dist folders
+ grunt.file.write( projectFile[ i ], result );
+ grunt.file.write( projectFile[ i ].replace( /^dist/, 'src' ), result );
+ } else {
+ project = grunt.file.read( projectFile[ i ] );
+ result = project.replace( /\{version\}/g, pkg.version );
+ grunt.file.write( projectFile[ i ], result );
+ }
+ }
});
};