Skip to content

Commit

Permalink
🍹 add gulpfile & UMD
Browse files Browse the repository at this point in the history
  • Loading branch information
desandro committed Jun 7, 2017
1 parent c8b16d1 commit 88d283b
Show file tree
Hide file tree
Showing 13 changed files with 447 additions and 32 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,2 +1,3 @@
bower_components/
node_modules/
package-lock.json
8 changes: 8 additions & 0 deletions .jshintrc
@@ -0,0 +1,8 @@
{
"browser": true,
"unused": true,
"undef": true,
"globals": {
"console": false
}
}
131 changes: 131 additions & 0 deletions gulpfile.js
@@ -0,0 +1,131 @@
/*jshint node: true, strict: false */

var fs = require('fs');
var gulp = require('gulp');
var rename = require('gulp-rename');
var replace = require('gulp-replace');

// ----- hint ----- //

var jshint = require('gulp-jshint');

gulp.task( 'hint-js', function() {
return gulp.src('js/**/*.js')
.pipe( jshint() )
.pipe( jshint.reporter('default') );
});

gulp.task( 'hint-test', function() {
return gulp.src('test/unit/*.js')
.pipe( jshint() )
.pipe( jshint.reporter('default') );
});

gulp.task( 'hint-task', function() {
return gulp.src('gulpfile.js')
.pipe( jshint() )
.pipe( jshint.reporter('default') );
});

var jsonlint = require('gulp-json-lint');

gulp.task( 'jsonlint', function() {
return gulp.src( '*.json' )
.pipe( jsonlint() )
.pipe( jsonlint.report('verbose') );
});

gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]);

// -------------------------- RequireJS makes pkgd -------------------------- //

var gutil = require('gulp-util');
var chalk = require('chalk');
var rjsOptimize = require('gulp-requirejs-optimize');

// regex for banner comment
var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*');

function getBanner() {
var src = fs.readFileSync( 'js/index.js', 'utf8' );
var matches = src.match( reBannerComment );
var banner = matches[0].replace( 'Infinite Scroll', 'Infinite Scroll PACKAGED' );
return banner;
}

function addBanner( str ) {
return replace( /^/, str );
}

gulp.task( 'requirejs', function() {
var banner = getBanner();
// HACK src is not needed
// should refactor rjsOptimize to produce src
return gulp.src('js/index.js')
.pipe( rjsOptimize({
baseUrl: 'bower_components',
optimize: 'none',
include: [
'jquery-bridget/jquery-bridget',
'infinite-scroll/js/index',
'imagesloaded/imagesloaded'
],
paths: {
'infinite-scroll': '../',
jquery: 'empty:'
}
}) )
// remove named module
// .pipe( replace( "'infinite-scroll/js/index',", '' ) )
// add banner
.pipe( addBanner( banner ) )
.pipe( rename('infinite-scroll.pkgd.js') )
.pipe( gulp.dest('dist') );
});


// ----- uglify ----- //

var uglify = require('gulp-uglify');

gulp.task( 'uglify', [ 'requirejs' ], function() {
var banner = getBanner();
gulp.src('dist/infinite-scroll.pkgd.js')
.pipe( uglify() )
// add banner
.pipe( addBanner( banner ) )
.pipe( rename('infinite-scroll.pkgd.min.js') )
.pipe( gulp.dest('dist') );
});

// ----- version ----- //

// set version in source files

var minimist = require('minimist');

// use gulp version -t 1.2.3
gulp.task( 'version', function() {
var args = minimist( process.argv.slice(3) );
var version = args.t;
if ( !version || !/\d\.\d\.\d/.test( version ) ) {
gutil.log( 'invalid version: ' + chalk.red( version ) );
return;
}
gutil.log( 'ticking version to ' + chalk.green( version ) );

gulp.src('js/index.js')
.pipe( replace( /Infinite Scroll v\d\.\d+\.\d+/, 'Infinite Scroll v' + version ) )
.pipe( gulp.dest('js') );

gulp.src('package.json')
.pipe( replace( /"version": "\d\.\d+\.\d+"/, '"version": "' + version + '"' ) )
.pipe( gulp.dest('.') );
});

// ----- default ----- //

gulp.task( 'default', [
'hint',
'uglify',
]);
38 changes: 37 additions & 1 deletion js/button.js
@@ -1,4 +1,32 @@
var utils = fizzyUIUtils;
// button
( function( window, factory ) {
// universal module definition
/* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'./core',
'fizzy-ui-utils/utils',
], function( InfiniteScroll, utils ) {
return factory( window, InfiniteScroll, utils );
});
} else if ( typeof module == 'object' && module.exports ) {
// CommonJS
module.exports = factory(
window,
require('./core'),
require('fizzy-ui-utils')
);
} else {
// browser global
factory(
window,
window.InfiniteScroll,
window.fizzyUIUtils
);
}

}( window, function factory( window, InfiniteScroll, utils ) {

// InfiniteScroll.defaults.button = null;

Expand Down Expand Up @@ -50,3 +78,11 @@ InfiniteScrollButton.prototype.hide = function() {
InfiniteScrollButton.prototype.destroy = function() {
this.element.removeEventListener( this.clickHandler );
};

// -------------------------- -------------------------- //

InfiniteScroll.Button = InfiniteScrollButton;

return InfiniteScroll;

}));
37 changes: 36 additions & 1 deletion js/core.js
@@ -1,4 +1,33 @@
var utils = fizzyUIUtils;
// core
( function( window, factory ) {
// universal module definition
/* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'ev-emitter/ev-emitter',
'fizzy-ui-utils/utils',
], function( EvEmitter, utils) {
return factory( window, EvEmitter, utils );
});
} else if ( typeof module == 'object' && module.exports ) {
// CommonJS
module.exports = factory(
window,
require('ev-emitter'),
require('fizzy-ui-utils')
);
} else {
// browser global
window.InfiniteScroll = factory(
window,
window.EvEmitter,
window.fizzyUIUtils
);
}

}( window, function factory( window, EvEmitter, utils ) {

var jQuery = window.jQuery;
// internal store of all InfiniteScroll intances
var instances = {};
Expand Down Expand Up @@ -343,3 +372,9 @@ utils.htmlInit( InfiniteScroll, 'infinite-scroll' );
if ( jQuery && jQuery.bridget ) {
jQuery.bridget( 'infiniteScroll', InfiniteScroll );
}

// -------------------------- -------------------------- //

return InfiniteScroll;

}));
37 changes: 36 additions & 1 deletion js/history.js
@@ -1,5 +1,34 @@
// history
( function( window, factory ) {
// universal module definition
/* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'./core',
'fizzy-ui-utils/utils',
], function( InfiniteScroll, utils ) {
return factory( window, InfiniteScroll, utils );
});
} else if ( typeof module == 'object' && module.exports ) {
// CommonJS
module.exports = factory(
window,
require('./core'),
require('fizzy-ui-utils')
);
} else {
// browser global
factory(
window,
window.InfiniteScroll,
window.fizzyUIUtils
);
}

}( window, function factory( window, InfiniteScroll, utils ) {

var proto = InfiniteScroll.prototype;
var utils = fizzyUIUtils;

InfiniteScroll.defaults.history = 'replace';
// InfiniteScroll.defaults.historyTitle = false;
Expand Down Expand Up @@ -167,3 +196,9 @@ proto.onBeforeunload = function() {
proto.onPageLoadHistory = function( response, path ) {
this.setHistory( response.title, path );
};

// -------------------------- -------------------------- //

return InfiniteScroll;

}));
39 changes: 39 additions & 0 deletions js/index.js
@@ -0,0 +1,39 @@
/*!
* Infinite Scroll v3.0.0-beta.1
* Automatically add next page
*
* Licensed GPLv3 for open source use
* or Infinite Scroll Commercial License for commercial use
*
* https://infinite-scroll.com
* Copyright 2017 Metafizzy
*/

( function( window, factory ) {
// universal module definition
/* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'./core',
'./page-load',
'./scroll-watch',
'./history',
'./button',
'./status',
], factory );
} else if ( typeof module == 'object' && module.exports ) {
// CommonJS
module.exports = factory(
require('./core'),
require('./page-load'),
require('./scroll-watch'),
require('./history'),
require('./button'),
require('./status')
);
}

})( window, function factory( InfiniteScroll ) {
return InfiniteScroll;
});
33 changes: 33 additions & 0 deletions js/page-load.js
@@ -1,3 +1,30 @@
// page-load
( function( window, factory ) {
// universal module definition
/* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'./core',
], function( InfiniteScroll ) {
return factory( window, InfiniteScroll );
});
} else if ( typeof module == 'object' && module.exports ) {
// CommonJS
module.exports = factory(
window,
require('./core')
);
} else {
// browser global
factory(
window,
window.InfiniteScroll
);
}

}( window, function factory( window, InfiniteScroll ) {

var proto = InfiniteScroll.prototype;

// InfiniteScroll.defaults.append = false;
Expand Down Expand Up @@ -230,3 +257,9 @@ function request( url, responseType, onLoad, onError ) {

req.send();
}

// -------------------------- -------------------------- //

return InfiniteScroll;

}));

0 comments on commit 88d283b

Please sign in to comment.