something broken, merge option controller

This commit is contained in:
George Michael Brower 2014-09-07 20:22:30 -04:00
commit 62dafb68f9
17 changed files with 694 additions and 658 deletions

5
.editorconfig Normal file
View File

@ -0,0 +1,5 @@
# 2 space indentation
[*.js]
indent_style = space
indent_size = 2

20
.jscsrc Normal file
View File

@ -0,0 +1,20 @@
{
"preset": "google",
"fileExtensions": [ ".js" ],
"requireParenthesesAroundIIFE": true,
"maximumLineLength": 120,
"validateLineBreaks": "LF",
"validateIndentation": 2,
"disallowKeywords": ["with"],
"disallowSpacesInsideObjectBrackets": null,
"disallowImplicitTypeConversion": ["string"],
"disallowMultipleVarDecl": null,
"safeContextKeyword": "_this",
"excludeFiles": [
"test/data/**"
]
}

14
.jshintrc Normal file
View File

@ -0,0 +1,14 @@
{
"node": true,
"esnext": true,
"bitwise": true,
"camelcase": true,
"curly": true,
"immed": true,
"newcap": false,
"noarg": true,
"undef": true,
"unused": "vars",
"strict": true,
"browser": true
}

View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,45 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>dat-gui</title>
<script src="build/gui.js"></script>
</head>
<body>
<script>
Gui.ready( init );
var object;
function init() {
var gui = new Gui();
object = {
numberProperty: 0,
stringProperty: 'hey',
booleanProperty: false,
functionProperty: function() {
}
}
gui.add( object, 'numberProperty', 0, 1 ); // Slider
gui.add( object, 'stringProperty' ); // Text box
gui.add( object, 'booleanProperty' ); // Check box
gui.add( object, 'functionProperty' ); // Button
console.log( gui );
}
</script>
</body>
</html>

View File

@ -1,50 +1,49 @@
(function( scope ) { (function(scope) {
'use strict';
var Gui = function( params ) { var Gui = function(params) {
if ( !ready ) { if (!ready) {
Gui.error( 'Gui not ready. Put your code inside Gui.ready()' ); Gui.error('Gui not ready. Put your code inside Gui.ready()');
} }
params = params || {}; params = params || {};
var panel = document.createElement( 'gui-panel' ); var panel = document.createElement('gui-panel');
panel.autoPlace = params.autoPlace !== false; panel.autoPlace = params.autoPlace !== false;
if ( panel.autoPlace ) { if (panel.autoPlace) {
document.body.appendChild( panel ); document.body.appendChild(panel);
} }
return panel; return panel;
}; };
// Register custom controllers // Register custom controllers
// ------------------------------- // -------------------------------
var controllers = {}; var controllers = {};
Gui.register = function( elementName, test ) { Gui.register = function(elementName, test) {
controllers[ elementName ] = test; controllers[elementName] = test;
}; };
// Returns a controller based on a value // Returns a controller based on a value
// ------------------------------- // -------------------------------
Gui.getController = function( value ) { Gui.getController = function(value) {
for ( var type in controllers ) { for (var type in controllers) {
var test = controllers[ type ]; var test = controllers[type];
if ( test( value ) ) { if (test(value)) {
return document.createElement( type ); return document.createElement(type);
} }
@ -52,46 +51,47 @@
}; };
// Gui ready handler ... * shakes fist at polymer * // Gui ready handler ... * shakes fist at polymer *
// ------------------------------- // -------------------------------
var ready = false; var ready = false;
var readyHandlers = []; var readyHandlers = [];
document.addEventListener( 'polymer-ready', function() { document.addEventListener('polymer-ready', function() {
ready = true; ready = true;
readyHandlers.forEach( function( fnc ) { readyHandlers.forEach(function(fnc) {
fnc(); fnc();
} ); });
} ); });
Gui.ready = function( fnc ) { Gui.ready = function(fnc) {
ready ? fnc() : readyHandlers.push( fnc ); if (ready) {
fnc();
} else {
readyHandlers.push(fnc);
}
}; };
// Error // Error
// ------------------------------- // -------------------------------
Gui.error = function() { Gui.error = function() {
var args = Array.prototype.slice.apply( arguments ); var args = Array.prototype.slice.apply(arguments);
args.unshift( 'dat-gui ::' ); args.unshift('dat-gui ::');
console.error.apply( console, args ); console.error.apply(console, args);
} };
Gui.warn = function() { Gui.warn = function() {
var args = Array.prototype.slice.apply( arguments ); var args = Array.prototype.slice.apply(arguments);
args.unshift( 'dat-gui ::' ); args.unshift('dat-gui ::');
console.warn.apply( console, args ); console.warn.apply(console, args);
} };
// Old namespaces // Old namespaces
// ------------------------------- // -------------------------------
@ -109,33 +109,30 @@
dat.dom.dom = function() {}; dat.dom.dom = function() {};
dat.controllers = {}; dat.controllers = {};
dat.controllers.Controller = constructor( 'controller-base' ); dat.controllers.Controller = constructor('controller-base');
dat.controllers.NumberController = constructor( 'controller-number' ); dat.controllers.NumberController = constructor('controller-number');
dat.controllers.FunctionController = constructor( 'controller-function' ); dat.controllers.FunctionController = constructor('controller-function');
dat.controllers.ColorController = constructor( 'controller-color' ); dat.controllers.ColorController = constructor('controller-color');
dat.controllers.BooleanController = constructor( 'controller-boolean' ); dat.controllers.BooleanController = constructor('controller-boolean');
dat.controllers.OptionController = constructor( 'controller-option' ); dat.controllers.OptionController = constructor('controller-option');
dat.controllers.NumberControllerBox = dat.controllers.NumberController; dat.controllers.NumberControllerBox = dat.controllers.NumberController;
dat.controllers.NumberControllerSlider = dat.controllers.NumberController; dat.controllers.NumberControllerSlider = dat.controllers.NumberController;
function constructor( elementName ) { function constructor(elementName) {
return function( object, path ) { return function(object, path) {
var el = document.createElement( elementName ); var el = document.createElement(elementName);
el.watch( object, path ); el.watch(object, path);
return el; return el;
}; };
} }
// Export // Export
// ------------------------------- // -------------------------------
scope.dat = dat; scope.dat = dat;
scope.Gui = Gui; scope.Gui = Gui;
})(this);
})( this );

View File

@ -1,7 +1,10 @@
/* globals Gui, Polymer, PathObserver */
'use strict';
/* /*
[ ] onChange( ) [ ] onChange()
[ ] onFinishChange( ) [ ] onFinishChange()
*/ */
Polymer('controller-base', { Polymer('controller-base', {
@ -16,16 +19,15 @@ Polymer('controller-base', {
init: function() {}, init: function() {},
// Observers // Observers
// ------------------------------- // -------------------------------
watch: function( object, path ) { watch: function(object, path) {
this.object = object; this.object = object;
this.path = path; this.path = path;
this.bind( 'value', new PathObserver( this.object, this.path ) ); this.bind('value', new PathObserver(this.object, this.path));
}, },
@ -36,26 +38,25 @@ Polymer('controller-base', {
}, },
// Helpers // Helpers
// ------------------------------- // -------------------------------
map: function( x, a, b, c, d ) {
return ( x - a ) / ( b - a ) * ( d - c ) + c;
},
on: function( event, listener ) { on: function( event, listener ) {
this.addEventListener( event, listener ); this.addEventListener( event, listener );
return this; return this;
}, },
map: function(x, a, b, c, d) {
return (x - a) / (b - a) * (d - c) + c;
},
// Legacy // Legacy
// ------------------------------- // -------------------------------
listen: function() { listen: function() {
Gui.warn( 'controller.listen() is deprecated. All controllers are listened for free.' ); Gui.warn('controller.listen() is deprecated. ' +
'All controllers are listened for free.');
return this; return this;
}, },
@ -66,7 +67,7 @@ Polymer('controller-base', {
}, },
setValue: function( v ) { setValue: function(v) {
this.value = v; this.value = v;
return this; return this;
@ -82,5 +83,4 @@ Polymer('controller-base', {
}, },
}); });

View File

@ -1,14 +1,16 @@
Gui.register( 'controller-boolean', function( value ) { /* globals Gui, Polymer */
'use strict';
Gui.register('controller-boolean', function(value) {
return typeof value == 'boolean'; return typeof value == 'boolean';
} ); });
Polymer( 'controller-boolean', { Polymer('controller-boolean', {
ready: function() { ready: function() {
}, },
toggle: function() { toggle: function() {

View File

@ -1,9 +1,12 @@
Gui.register( 'controller-function', function( value ) { /* globals Gui, Polymer */
'use strict';
Gui.register('controller-function', function(value) {
return typeof value == 'function'; return typeof value == 'function';
} ); });
Polymer( 'controller-function', { Polymer('controller-function', {
} ); });

View File

@ -1,7 +1,10 @@
/* globals Gui, Polymer */
'use strict';
/* /*
[ ] arrow keys [ ] arrow keys
[ ] min( ) max( ) step( ) commands of yore [ ] min() max() step() commands of yore
[x] only validate input box on blur, not on keydown [x] only validate input box on blur, not on keydown
[x] enter key blurs [x] enter key blurs
@ -13,13 +16,13 @@
*/ */
Gui.register( 'controller-number', function( value ) { Gui.register('controller-number', function(value) {
return typeof value == 'number'; return typeof value == 'number';
} ); });
Polymer( 'controller-number', { Polymer('controller-number', {
value: 0, value: 0,
decimals: 3, decimals: 3,
@ -33,19 +36,23 @@ Polymer( 'controller-number', {
var _this = this; var _this = this;
window.addEventListener( 'keydown', function( e ) { window.addEventListener('keydown', function(e) {
if ( e.keyCode == 18 ) _this._alt = true; if (e.keyCode == 18) {
}, false ); _this._alt = true;
}
}, false);
window.addEventListener( 'keyup', function( e ) { window.addEventListener('keyup', function(e) {
if ( e.keyCode == 18 ) _this._alt = false; if (e.keyCode == 18) {
}, false ); _this._alt = false;
}
}, false);
this.super(); // this.super();
}, },
init: function( min, max, step ) { init: function(min, max, step) {
this.min = min; this.min = min;
this.max = max; this.max = max;
@ -56,18 +63,18 @@ Polymer( 'controller-number', {
// Observers // Observers
// ------------------------------- // -------------------------------
valueChanged: function( newValue ) { valueChanged: function(newValue) {
if ( this.step !== undefined ) { if (this.step !== undefined) {
this.value = Math.round( this.value / this.step ) * this.step; this.value = Math.round(this.value / this.step) * this.step;
} }
if ( this.min !== undefined ) { if (this.min !== undefined) {
this.value = Math.max( this.value, this.min ); this.value = Math.max(this.value, this.min);
} }
if ( this.max !== undefined ) { if (this.max !== undefined) {
this.value = Math.min( this.value, this.max ); this.value = Math.min(this.value, this.max);
} }
this.super(); this.super();
@ -75,29 +82,29 @@ Polymer( 'controller-number', {
minChanged: function() { minChanged: function() {
this.value = Math.max( this.value, this.min ); this.value = Math.max(this.value, this.min);
this.update(); this.update();
}, },
maxChanged: function() { maxChanged: function() {
this.value = Math.min( this.value, this.max ); this.value = Math.min(this.value, this.max);
this.update(); this.update();
}, },
update: function() { update: function() {
var ratio = this.map( this.value, this.min, this.max, 0, 1 ); var ratio = this.map(this.value, this.min, this.max, 0, 1);
if ( this.min < 0 && this.max > 0 ) { if (this.min < 0 && this.max > 0) {
this.$.container.classList.add( 'straddle-zero' ); this.$.container.classList.add('straddle-zero');
var zero = this.map( 0, this.min, this.max, 0, 1 ); var zero = this.map(0, this.min, this.max, 0, 1);
if ( this.value >= 0 ) { if (this.value >= 0) {
this.$.fill.style.left = zero * 100 + '%'; this.$.fill.style.left = zero * 100 + '%';
this.$.fill.style.width = (ratio - zero) * 100 + '%'; this.$.fill.style.width = (ratio - zero) * 100 + '%';
@ -107,15 +114,15 @@ Polymer( 'controller-number', {
this.$.fill.style.left = ''; this.$.fill.style.left = '';
this.$.fill.style.width = (zero - ratio) * 100 + '%'; this.$.fill.style.width = (zero - ratio) * 100 + '%';
this.$.fill.style.right = ( 1 - zero ) * 100 + '%'; this.$.fill.style.right = (1 - zero) * 100 + '%';
} }
} else { } else {
this.$.container.classList.remove( 'straddle-zero' ); this.$.container.classList.remove('straddle-zero');
if ( this.max > 0 ) { if (this.max > 0) {
this.$.fill.style.left = 0; this.$.fill.style.left = 0;
this.$.fill.style.width = ratio * 100 + '%'; this.$.fill.style.width = ratio * 100 + '%';
@ -124,7 +131,7 @@ Polymer( 'controller-number', {
} else { } else {
this.$.fill.style.left = ''; this.$.fill.style.left = '';
this.$.fill.style.width = ( 1 - ratio ) * 100 + '%'; this.$.fill.style.width = (1 - ratio) * 100 + '%';
this.$.fill.style.right = 0; this.$.fill.style.right = 0;
} }
@ -133,134 +140,130 @@ Polymer( 'controller-number', {
this.$.knob.style.left = ratio * 100 + '%'; this.$.knob.style.left = ratio * 100 + '%';
this.$.container.classList.toggle( 'positive', this.value >= 0 ); this.$.container.classList.toggle('positive', this.value >= 0);
this.$.container.classList.toggle( 'negative', this.value < 0 ); this.$.container.classList.toggle('negative', this.value < 0);
this.super(); this.super();
}, },
// Events // Events
// ------------------------------- // -------------------------------
click: function( e ) { click: function(e) {
this.$.input.select(); this.$.input.select();
}, },
keydown: function( e ) { keydown: function(e) {
if ( e.keyCode == 13 ) { if (e.keyCode == 13) {
this.$.input.blur(); this.$.input.blur();
} }
}, },
down: function( e ) { down: function(e) {
e.preventDefault(); e.preventDefault();
this._rect = this.$.track.getBoundingClientRect(); this._rect = this.$.track.getBoundingClientRect();
if ( !this._alt ) this.value = this.valueFromX( e.x ); if (!this._alt) { this.value = this.valueFromX(e.x); }
this.fire( 'sliderDown' ); this.fire( 'sliderDown' );
}, },
up: function( e ) { up: function(e) {
// this.$.container.classList.add( 'transition' );
// this.$.container.classList.add( 'transition');
this.fire( 'sliderUp' ); this.fire( 'sliderUp' );
}, },
trackstart: function( e ) { trackstart: function(e) {
// this.$.container.classList.remove( 'transition' ); // this.$.container.classList.remove( 'transition');
this._dragFriction = 1; this._dragFriction = 1;
}, },
trackx: function( e ) { trackx: function(e) {
if ( this.step === undefined ) { if (this.step === undefined) {
var dv = this.valueFromDX( e.ddx ); var dv = this.valueFromDX(e.ddx);
if ( this._alt ) dv /= 10; if (this._alt) { dv /= 10; }
this.value += dv * this._dragFriction; this.value += dv * this._dragFriction;
} else { } else {
this.value = this.valueFromX( e.pageX ); this.value = this.valueFromX(e.pageX);
} }
}, },
tracky: function( e ) { tracky: function(e) {
this._dragFriction = Math.max( 0.01, Math.min( 1, this.map( e.dy, 50, 300, 1, 0.1 ) ) ); this._dragFriction = Math.max(0.01,
Math.min(1, this.map(e.dy, 50, 300, 1, 0.1)));
}, },
blur: function( e ) { blur: function(e) {
var v = parseFloat( this.$.input.value ); var v = parseFloat(this.$.input.value);
if ( v === v ) { if (v === v) {
this.value = v; this.value = v;
} }
}, },
// Filters // Filters
// ------------------------------- // -------------------------------
truncate: function( v ) { truncate: function(v) {
if ( v % 1 !== 0 && this.decimals !== undefined ) { if (v % 1 !== 0 && this.decimals !== undefined) {
return this.limitDecimals( v, this.decimals ); return this.limitDecimals(v, this.decimals);
} else { } else {
return v; return v;
} }
}, },
// Helpers // Helpers
// ------------------------------- // -------------------------------
limitDecimals: function( v, maxDecimals ) { limitDecimals: function(v, maxDecimals) {
var str = v.toString(); var str = v.toString();
var numDecimals = str.substring( str.indexOf( '.' ) + 1 ).length; var numDecimals = str.substring(str.indexOf('.') + 1).length;
str = v.toFixed( Math.min( numDecimals, this.decimals ) ); str = v.toFixed(Math.min(numDecimals, this.decimals));
for ( var z, i = 0, l = str.length; i < l; i++ ) { for (var z, i = 0, l = str.length; i < l; i++) {
if ( str.charAt( i ) !== '0' ) { if (str.charAt(i) !== '0') {
z = i; z = i;
} }
} }
return str.substring( 0, z+1 ); return str.substring(0, z + 1);
}, },
valueFromX: function( x ) { valueFromX: function(x) {
return this.map( x, this._rect.left, this._rect.right, this.min, this.max ); return this.map(x, this._rect.left, this._rect.right, this.min, this.max);
}, },
valueFromDX: function( dx ) { valueFromDX: function(dx) {
return this.map( dx, 0, this._rect.width, 0, this.max - this.min ); return this.map(dx, 0, this._rect.width, 0, this.max - this.min);
} }

View File

@ -1,20 +1,23 @@
Gui.register( 'controller-string', function( value ) { /* globals Gui, Polymer */
'use strict';
Gui.register('controller-string', function(value) {
return typeof value == 'string'; return typeof value == 'string';
} ); });
Polymer( 'controller-string', { Polymer('controller-string', {
click: function( e ) { click: function(e) {
this.$.input.select(); this.$.input.select();
}, },
keydown: function( e ) { keydown: function(e) {
if ( e.keyCode == 13 ) { if (e.keyCode == 13) {
this.$.input.blur(); this.$.input.blur();
} }

View File

@ -1,3 +1,6 @@
/* globals Polymer, Path, Gui */
'use strict';
// [ ] scrolling when docked // [ ] scrolling when docked
// [ ] scrolling when window short and not docked // [ ] scrolling when window short and not docked
@ -5,12 +8,12 @@ Polymer('gui-panel', {
docked: false, docked: false,
open: true, open: true,
touch: 'ontouchstart' in window || !!window.DocumentTouch && document instanceof DocumentTouch, touch: ('ontouchstart' in window) ||
(!!window.DocumentTouch && document instanceof window.DocumentTouch),
ready: function() { ready: function() {
this.defined = {}; this.defined = {};
// window.addEventListener( 'resize', this.checkHeight.bind( this ) );
}, },
@ -29,22 +32,23 @@ Polymer('gui-panel', {
this.defined[ name ] = initialValue; this.defined[ name ] = initialValue;
return this.add.apply( this, args ); return this.add.apply(this, args);
}, },
add: function( object, path ) { add: function(object, path) {
// Make controller // Make controller
var value = Path.get( path ).getValueFrom( object ); var value = Path.get(path).getValueFrom(object);
if ( value == null || value == undefined ) { if (value === null || value === undefined) {
return Gui.error( object + ' doesn\'t have a value for path "' + path + '".' ); return Gui.error(object +
' doesn\'t have a value for path "' + path + '".');
} }
var args = Array.prototype.slice.call( arguments, 2 ); var args = Array.prototype.slice.call( arguments, 2 );
var controllers; var controller;
if ( args[ 0 ] instanceof Array || typeof args[ 0 ] == 'object' ) { if ( args[ 0 ] instanceof Array || typeof args[ 0 ] == 'object' ) {
controller = document.createElement( 'controller-option' ); controller = document.createElement( 'controller-option' );
@ -56,41 +60,41 @@ Polymer('gui-panel', {
return Gui.error( 'Unrecognized type:', value ); return Gui.error( 'Unrecognized type:', value );
} }
controller.watch( object, path ) controller.watch(object, path);
controller.init.apply( controller, args ); controller.init.apply(controller, args);
// Make row // Make row
var row = document.createElement( 'gui-row' ); var row = document.createElement('gui-row');
row.name = path; row.name = path;
controller.row = row; controller.row = row;
controller.name = function( name ) { controller.name = function(name) {
row.name = name; row.name = name;
}; };
controller.comment = function( comment ) { controller.comment = function(comment) {
row.comment = comment; row.comment = comment;
}; };
row.appendChild( controller ); row.appendChild(controller);
this.appendChild( row ); this.appendChild(row);
return controller; return controller;
}, },
// Observers // Observers
// ------------------------------- // -------------------------------
openChanged: function() { openChanged: function() {
if ( this.open || this.docked ) { if (this.open || this.docked) {
// let the style sheet take care of things // let the style sheet take care of things
this.$.container.style.transform = '';
this.$.panel.style.transform = ''; this.$.panel.style.transform = '';
} else { } else {
@ -99,11 +103,10 @@ Polymer('gui-panel', {
// wish i could pipe javascript variables into styl. // wish i could pipe javascript variables into styl.
var y = -this.$.controllers.offsetHeight + 'px'; var y = -this.$.controllers.offsetHeight + 'px';
this.$.panel.style.transform = 'translate3d(0, ' + y + ', 0)'; this.$.container.style.transform = 'translate3d(0, ' + y + ', 0)';
} }
}, },
dockedChanged: function() { dockedChanged: function() {
@ -112,10 +115,13 @@ Polymer('gui-panel', {
}, },
// Events // Events
// ------------------------------- // -------------------------------
tapClose: function() {
this.open = !this.open;
},
toggleOpen: function() { toggleOpen: function() {
this.open = !this.open; this.open = !this.open;
}, },
@ -127,18 +133,23 @@ Polymer('gui-panel', {
// } else { // } else {
// this.docked = false; // this.docked = false;
// } // }
// if ( window.innerHeight < this.$.controllers.offsetHeight) {
// this.docked = true;
// } else {
// this.docked = false;
// }
// }, // },
// Legacy // Legacy
// ------------------------------- // -------------------------------
listenAll: function() { listenAll: function() {
Gui.warn( 'controller.listenAll() is deprecated. All controllers are listened for free.' ); Gui.warn('controller.listenAll() is deprecated. ' +
'All controllers are listened for free.');
}, }
// todo: domElement // todo: domElement

View File

@ -1,3 +1,6 @@
/* globals Polymer */
'use strict';
Polymer('gui-row', { Polymer('gui-row', {
comment: null, comment: null,

View File

@ -1,88 +1,101 @@
var gulp = require( 'gulp' ), var gulp = require('gulp'),
stylus = require( 'gulp-stylus' ), $ = require('gulp-load-plugins')(),
plates = require( 'gulp-plates' ), nib = require('nib'),
rename = require( 'gulp-rename' ), fs = require('fs'),
vulcan = require( 'gulp-vulcanize' ), marked = require('marked'),
insert = require( 'gulp-insert' ), karma = require('karma'),
replace = require( 'gulp-replace' ), browserSync = require('browser-sync'),
clean = require( 'gulp-clean' ), reload = browserSync.reload;
nib = require( 'nib' ),
fs = require( 'fs' ),
marked = require( 'marked' ),
karma = require( 'karma' );
gulp.task( 'default', [ 'docs', 'build' ] ); gulp.task('default', ['docs', 'build'])
gulp.task( 'watch', [ 'default' ], function() { gulp.task('watch', ['default'], function() {
karma.server.start( { karma.server.start({
frameworks: [ 'jasmine' ], frameworks: ['jasmine'],
files: [ files: [
'build/gui.js', 'build/gui.js',
'tests/*.js' 'tests/*.js'
] ]
} ); });
gulp.watch( [ 'elements/**/*.styl', 'elements/**/*.html', 'elements/**/*.js', 'gui.html' ], [ 'build' ] ); gulp.watch(['elements/**/*.styl', 'elements/**/*.html',
gulp.watch( [ 'README.md', 'docs/*' ], [ 'docs' ] ); 'elements/**/*.js', 'gui.html'], ['build']);
} ); gulp.watch(['README.md', 'docs/*'], ['docs']);
gulp.task( 'build', [ 'vulcanize' ], function() { });
return gulp.src( 'build/gui.html' ) gulp.task('build', ['vulcanize'], function() {
.pipe( replace( /\\/g, "\\\\" ) )
.pipe( replace( /'/g, "\\'" ) )
.pipe( replace( /^(.*)$/gm, "'$1'," ) )
.pipe( insert.wrap( 'document.write([', '].join("\\n"))' ) )
.pipe( rename( 'gui.js' ) )
.pipe( gulp.dest( 'build' ) );
} ); return gulp.src('build/gui.html')
.pipe($.replace(/\\/g, '\\\\'))
.pipe($.replace(/'/g, '\\\''))
.pipe($.replace(/^(.*)$/gm, '\'$1\','))
.pipe($.insert.wrap('document.write([', '].join("\\n"))'))
.pipe($.rename('gui.js'))
.pipe(gulp.dest('build'));
gulp.task( 'vulcanize', [ 'css' ], function() { });
return gulp.src( 'gui.html' ) gulp.task('vulcanize', ['css'], function() {
.pipe( vulcan( {
return gulp.src('gui.html')
.pipe($.vulcanize({
dest: 'build', dest: 'build',
inline: true, inline: true,
strip: true strip: true
} ) ); }));
} ); });
gulp.task( 'css', function() { gulp.task('jscs', function() {
return gulp.src('elements/**/*.js')
.pipe($.jscs());
});
return css( 'elements/**/*.styl', 'elements' ); gulp.task('jshint', function() {
return gulp.src('elements/**/*.js')
.pipe(reload({stream: true, once: true}))
.pipe($.jshint('.jshintrc'))
.pipe($.jshint.reporter('jshint-stylish'))
.pipe($.if(!browserSync.active, $.jshint.reporter('fail')));
});
} ); gulp.task('lint', ['jscs', 'jshint']);
gulp.task( 'docs', function() { gulp.task('css', function() {
css( 'docs/*.styl', 'docs' ); return css('elements/**/*.styl', 'elements');
});
gulp.task('docs', function() {
css('docs/*.styl', 'docs');
var content = { var content = {
readme: marked( fs.readFileSync( 'README.md', 'utf8' ) ) readme: marked(fs.readFileSync('README.md', 'utf8'))
}; };
return gulp.src( 'docs/template.html' ) return gulp.src('docs/template.html')
.pipe( plates( content ) ) .pipe($.plates(content))
.pipe( rename( 'index.html' ) ) .pipe($.rename('index.html'))
.pipe( gulp.dest( './' ) ); .pipe(gulp.dest('./'));
} ); });
gulp.task( 'clean', function() { gulp.task('clean', function() {
return gulp.src( [ 'build/*', '**/*.css' ] ) return gulp.src(['build/*', '**/*.css'])
.pipe( clean() ); .pipe($.clean());
} ); });
function css( src, dest ) { function css(src, dest) {
return gulp.src( src ) return gulp.src(src)
.pipe( stylus( { use: [ nib() ] } ) ) .pipe($.stylus({ use: [nib()] }))
.pipe( gulp.dest( dest ) ); .pipe(gulp.dest(dest));
} }

View File

@ -2,15 +2,22 @@
"name": "dat.gui", "name": "dat.gui",
"version": "0.0.0", "version": "0.0.0",
"devDependencies": { "devDependencies": {
"browser-sync": "^1.3.6",
"gulp": "^3.8.7", "gulp": "^3.8.7",
"gulp-clean": "^0.3.1", "gulp-clean": "^0.3.1",
"gulp-if": "^1.2.4",
"gulp-insert": "^0.4.0", "gulp-insert": "^0.4.0",
"gulp-jscs": "^1.1.2",
"gulp-jshint": "^1.8.4",
"gulp-load-plugins": "^0.6.0",
"gulp-plates": "0.0.5", "gulp-plates": "0.0.5",
"gulp-reload": "0.0.4",
"gulp-rename": "^1.2.0", "gulp-rename": "^1.2.0",
"gulp-replace": "^0.4.0", "gulp-replace": "^0.4.0",
"gulp-stylus": "^1.3.0", "gulp-stylus": "^1.3.0",
"gulp-vulcanize": "^1.0.0", "gulp-vulcanize": "^1.0.0",
"gulp-watch": "^0.6.9", "gulp-watch": "^0.6.9",
"jshint-stylish": "^0.4.0",
"karma": "^0.12.23", "karma": "^0.12.23",
"karma-chrome-launcher": "^0.1.4", "karma-chrome-launcher": "^0.1.4",
"karma-jasmine": "^0.1.5", "karma-jasmine": "^0.1.5",