12 changed files with 1616 additions and 31 deletions
Split View
Diff Options
-
135tasks/build.js
-
13tasks/clean.js
-
75tasks/config/defaults.js
-
0tasks/config/gulp/banner.js
-
0tasks/config/gulp/comments.js
-
0tasks/config/gulp/log.js
-
0tasks/config/gulp/tasks.js
-
122tasks/config/index.js
-
0tasks/config/install/questions.js
-
11tasks/version.js
-
197tasks/watch.js
-
1094temp.js
@ -0,0 +1,135 @@ |
|||
/******************************* |
|||
Build Task |
|||
*******************************/ |
|||
|
|||
var |
|||
gulp = require('gulp-help')(require('gulp')), |
|||
|
|||
// user config
|
|||
config = require('config'), |
|||
|
|||
// node deps
|
|||
fs = require('fs'), |
|||
|
|||
// gulp deps
|
|||
autoprefixer = require('gulp-autoprefixer'), |
|||
chmod = require('gulp-chmod'), |
|||
clone = require('gulp-clone'), |
|||
flatten = require('gulp-flatten'), |
|||
header = require('gulp-header'), |
|||
less = require('gulp-less'), |
|||
minifyCSS = require('gulp-minify-css'), |
|||
plumber = require('gulp-plumber'), |
|||
print = require('gulp-print'), |
|||
rename = require('gulp-rename'), |
|||
replace = require('gulp-replace'), |
|||
uglify = require('gulp-uglify'), |
|||
|
|||
// gulp config
|
|||
banner = require('./tasks/config/gulp/banner'), |
|||
comments = require('./tasks/config/gulp/comments'), |
|||
log = require('./tasks/config/gulp/log'), |
|||
settings = require('./tasks/config/gulp/settings'), |
|||
|
|||
// shorthand
|
|||
paths = config.paths, |
|||
globs = config.globs, |
|||
|
|||
assets = paths.assets, |
|||
output = paths.output, |
|||
source = paths.source |
|||
|
|||
; |
|||
|
|||
|
|||
// Gulp task to build all files from source
|
|||
module.exports = function(callback) { |
|||
|
|||
var |
|||
stream, |
|||
compressedStream, |
|||
uncompressedStream |
|||
; |
|||
|
|||
console.info('Building Semantic'); |
|||
|
|||
if(!fs.existsSync(config.files.theme)) { |
|||
console.error('Cant build LESS. Run "gulp install" to create a theme config file'); |
|||
return; |
|||
} |
|||
|
|||
// Check for RTL
|
|||
if(config.rtl) { |
|||
gulp.start('build rtl'); |
|||
return; |
|||
} |
|||
|
|||
// copy only assets matching selected components
|
|||
gulp.src(source.themes + '**/assets/**/' + globs.components + '?(s).*') |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.themes)) |
|||
; |
|||
|
|||
// copy source files matching selected components
|
|||
gulp.src(source.definitions + '**/' + globs.components + '.js') |
|||
.pipe(plumber()) |
|||
.pipe(flatten()) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.uncompressed)) |
|||
.pipe(print(log.created)) |
|||
.pipe(uglify(settings.uglify)) |
|||
.pipe(rename(settings.rename.minJS)) |
|||
.pipe(header(banner, settings.header)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.compressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
gulp.start('package compressed js'); |
|||
gulp.start('package uncompressed js'); |
|||
}) |
|||
; |
|||
|
|||
// unified css stream
|
|||
stream = gulp.src(source.definitions + '**/' + globs.components + '.less') |
|||
.pipe(plumber()) |
|||
.pipe(less(settings.less)) |
|||
.pipe(flatten()) |
|||
.pipe(replace(comments.variables.in, comments.variables.out)) |
|||
.pipe(replace(comments.large.in, comments.large.out)) |
|||
.pipe(replace(comments.small.in, comments.small.out)) |
|||
.pipe(replace(comments.tiny.in, comments.tiny.out)) |
|||
.pipe(autoprefixer(settings.prefix)) |
|||
; |
|||
|
|||
// two concurrent streams from same source to concat release
|
|||
uncompressedStream = stream.pipe(clone()); |
|||
compressedStream = stream.pipe(clone()); |
|||
|
|||
uncompressedStream |
|||
.pipe(plumber()) |
|||
.pipe(replace(assets.source, assets.uncompressed)) |
|||
.pipe(header(banner, settings.header)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.uncompressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
gulp.start('package uncompressed css'); |
|||
}) |
|||
; |
|||
|
|||
compressedStream = stream |
|||
.pipe(plumber()) |
|||
.pipe(clone()) |
|||
.pipe(replace(assets.source, assets.compressed)) |
|||
.pipe(minifyCSS(settings.minify)) |
|||
.pipe(rename(settings.rename.minCSS)) |
|||
.pipe(header(banner, settings.header)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.compressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
callback(); |
|||
gulp.start('package compressed css'); |
|||
}) |
|||
; |
|||
}; |
@ -0,0 +1,13 @@ |
|||
/******************************* |
|||
Clean Task |
|||
*******************************/ |
|||
|
|||
var |
|||
config = require('config'), |
|||
del = require('del') |
|||
; |
|||
|
|||
// cleans distribution files
|
|||
module.exports = function(callback) { |
|||
return del([config.clean], settings.del, callback); |
|||
}; |
@ -0,0 +1,122 @@ |
|||
var |
|||
|
|||
// npm deps
|
|||
extend = require('extend'), |
|||
fs = require('fs'), |
|||
path = require('path'), |
|||
|
|||
defaults = require('./config/defaults'), |
|||
|
|||
// holds package.json contents
|
|||
package, |
|||
|
|||
// shorthand vars
|
|||
base, |
|||
clean, |
|||
output, |
|||
source, |
|||
|
|||
config |
|||
|
|||
; |
|||
/******************************* |
|||
Read User Settings |
|||
(semantic.json) |
|||
*******************************/ |
|||
|
|||
try { |
|||
// try to load semantic.json
|
|||
config = require(defaults.files.config); |
|||
|
|||
// try to load package.json
|
|||
package = (fs.existsSync(defaults.files.npm)) |
|||
? require(defaults.files.npm) |
|||
: false |
|||
; |
|||
} |
|||
catch(error) { |
|||
if(error.code === 'MODULE_NOT_FOUND') { |
|||
console.error('No semantic.json config found'); |
|||
} |
|||
} |
|||
|
|||
if(!config) { |
|||
// No semantic.json file use tasks/config/defaults.js
|
|||
config = defaults; |
|||
} |
|||
else { |
|||
// extend defaults using shallow copy
|
|||
config = extend(false, {}, defaults, config); |
|||
} |
|||
|
|||
|
|||
/******************************* |
|||
Derived Values |
|||
*******************************/ |
|||
|
|||
/*-------------- |
|||
Version |
|||
---------------*/ |
|||
|
|||
// npm package.json is only location that holds true "version"
|
|||
config.version = (package !== undefined) |
|||
? package.version || 'Unknown' |
|||
: 'Unknown' |
|||
; |
|||
|
|||
|
|||
/*-------------- |
|||
File Paths |
|||
---------------*/ |
|||
|
|||
// resolve source paths
|
|||
for(var folder in config.paths.source) { |
|||
if(config.paths.source.hasOwnProperty(folder)) { |
|||
config.paths.source[folder] = path.normalize(config.base + config.paths.source[folder]); |
|||
} |
|||
} |
|||
|
|||
// resolve output paths
|
|||
for(folder in config.paths.output) { |
|||
if(config.paths.output.hasOwnProperty(folder)) { |
|||
config.paths.output[folder] = path.normalize(config.base + config.paths.output[folder]); |
|||
} |
|||
} |
|||
|
|||
// resolve "clean" command path
|
|||
config.paths.clean = config.base + config.paths.clean; |
|||
|
|||
|
|||
/*-------------- |
|||
CSS URLs |
|||
---------------*/ |
|||
|
|||
// determine asset paths in css by finding relative path between themes and output
|
|||
// force forward slashes
|
|||
|
|||
config.paths.assets = { |
|||
source : '/../../themes', // relative path from source definition to themes
|
|||
uncompressed : path.relative(config.output.uncompressed, output.themes).replace(/\\/g,'/'), |
|||
compressed : path.relative(output.compressed, output.themes).replace(/\\/g,'/'), |
|||
packaged : path.relative(output.packaged, output.themes).replace(/\\/g,'/') |
|||
}; |
|||
|
|||
|
|||
/*-------------- |
|||
Globs |
|||
---------------*/ |
|||
|
|||
// takes component object and creates file glob matching selected components
|
|||
config.globs.components = (typeof config.components == 'object') |
|||
? (config.components.length > 1) |
|||
? '{' + config.components.join(',') + '}' |
|||
: config.components[0] |
|||
: '{' + defaults.components.join(',') + '}' |
|||
; |
|||
|
|||
/******************************* |
|||
Export |
|||
*******************************/ |
|||
|
|||
|
|||
module.exports = config; |
@ -0,0 +1,11 @@ |
|||
/******************************* |
|||
Version Task |
|||
*******************************/ |
|||
|
|||
var |
|||
config = require('config') |
|||
; |
|||
|
|||
module.exports = function(callback) { |
|||
console.log('Semantic UI ' + config.version); |
|||
}; |
@ -0,0 +1,197 @@ |
|||
/******************************* |
|||
Watch Task |
|||
*******************************/ |
|||
|
|||
|
|||
var |
|||
gulp = require('gulp-help')(require('gulp')), |
|||
|
|||
// user config
|
|||
config = require('config'), |
|||
|
|||
// node deps
|
|||
fs = require('fs'), |
|||
|
|||
// gulp deps
|
|||
autoprefixer = require('gulp-autoprefixer'), |
|||
chmod = require('gulp-chmod'), |
|||
clone = require('gulp-clone'), |
|||
header = require('gulp-header'), |
|||
less = require('gulp-less'), |
|||
minifyCSS = require('gulp-minify-css'), |
|||
plumber = require('gulp-plumber'), |
|||
print = require('gulp-print'), |
|||
rename = require('gulp-rename'), |
|||
replace = require('gulp-replace'), |
|||
uglify = require('gulp-uglify'), |
|||
util = require('gulp-util'), |
|||
watch = require('gulp-watch'), |
|||
|
|||
// gulp config
|
|||
banner = require('./tasks/config/gulp/banner'), |
|||
comments = require('./tasks/config/gulp/comments'), |
|||
log = require('./tasks/config/gulp/log'), |
|||
settings = require('./tasks/config/gulp/settings'), |
|||
|
|||
// shorthand
|
|||
paths = config.paths, |
|||
globs = config.globs, |
|||
|
|||
assets = paths.assets, |
|||
output = paths.output, |
|||
source = paths.source |
|||
|
|||
; |
|||
|
|||
|
|||
module.exports = function(callback) { |
|||
|
|||
// Exit conditions
|
|||
if(!fs.existsSync(config.files.theme)) { |
|||
console.error('Cant compile LESS. Run "gulp install" to create a theme config file'); |
|||
return; |
|||
} |
|||
|
|||
// start rtl task instead
|
|||
if(config.rtl) { |
|||
gulp.start('watch rtl'); |
|||
return; |
|||
} |
|||
|
|||
console.clear(); |
|||
console.log('Watching source files for changes'); |
|||
|
|||
|
|||
// watching changes in style
|
|||
gulp |
|||
.watch([ |
|||
source.config, |
|||
source.definitions + '**/*.less', |
|||
source.site + '**/*.{overrides,variables}', |
|||
source.themes + '**/*.{overrides,variables}' |
|||
], function(file) { |
|||
var |
|||
srcPath, |
|||
stream, |
|||
compressedStream, |
|||
uncompressedStream, |
|||
isDefinition, |
|||
isPackagedTheme, |
|||
isSiteTheme, |
|||
isConfig |
|||
; |
|||
|
|||
gulp.src(file.path) |
|||
.pipe(print(log.modified)) |
|||
; |
|||
|
|||
// recompile on *.override , *.variable change
|
|||
isDefinition = (file.path.indexOf(source.definitions) !== -1); |
|||
isPackagedTheme = (file.path.indexOf(source.themes) !== -1); |
|||
isSiteTheme = (file.path.indexOf(source.site) !== -1); |
|||
isConfig = (file.path.indexOf('.config') !== -1); |
|||
|
|||
if(isDefinition || isPackagedTheme || isSiteTheme) { |
|||
// rebuild only matching definition file
|
|||
srcPath = util.replaceExtension(file.path, '.less'); |
|||
srcPath = srcPath.replace(config.regExp.themePath, source.definitions); |
|||
srcPath = srcPath.replace(source.site, source.definitions); |
|||
} |
|||
else if(isConfig) { |
|||
// impossible to tell which file was updated in theme.config, rebuild all
|
|||
console.log('Change detected in theme config'); |
|||
gulp.start('build'); |
|||
} |
|||
else { |
|||
srcPath = util.replaceExtension(file.path, '.less'); |
|||
} |
|||
|
|||
if( fs.existsSync(srcPath) ) { |
|||
|
|||
// unified css stream
|
|||
stream = gulp.src(srcPath) |
|||
.pipe(plumber()) |
|||
.pipe(less(settings.less)) |
|||
.pipe(replace(comments.variables.in, comments.variables.out)) |
|||
.pipe(replace(comments.large.in, comments.large.out)) |
|||
.pipe(replace(comments.small.in, comments.small.out)) |
|||
.pipe(replace(comments.tiny.in, comments.tiny.out)) |
|||
.pipe(autoprefixer(settings.prefix)) |
|||
; |
|||
|
|||
// use 2 concurrent streams from same pipe
|
|||
uncompressedStream = stream.pipe(clone()); |
|||
compressedStream = stream.pipe(clone()); |
|||
|
|||
uncompressedStream |
|||
.pipe(plumber()) |
|||
.pipe(replace(assets.source, assets.uncompressed)) |
|||
.pipe(header(banner, settings.header)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.uncompressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
gulp.start('package uncompressed css'); |
|||
}) |
|||
; |
|||
|
|||
compressedStream = stream |
|||
.pipe(plumber()) |
|||
.pipe(clone()) |
|||
.pipe(replace(assets.source, assets.compressed)) |
|||
.pipe(minifyCSS(settings.minify)) |
|||
.pipe(rename(settings.rename.minCSS)) |
|||
.pipe(header(banner, settings.header)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.compressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
gulp.start('package compressed css'); |
|||
}) |
|||
; |
|||
|
|||
} |
|||
else { |
|||
console.log('SRC Path Does Not Exist', srcPath); |
|||
} |
|||
}) |
|||
; |
|||
|
|||
// watch for changes in assets that match component names (or their plural)
|
|||
gulp |
|||
.watch([ |
|||
source.themes + '**/assets/**/' + componentGlob + '?(s).*' |
|||
], function(file) { |
|||
// copy assets
|
|||
gulp.src(file.path, { base: source.themes }) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.themes)) |
|||
.pipe(print(log.created)) |
|||
; |
|||
}) |
|||
; |
|||
|
|||
// watch for changes in js
|
|||
gulp |
|||
.watch([ |
|||
source.definitions + '**/*.js' |
|||
], function(file) { |
|||
gulp.src(file.path) |
|||
.pipe(plumber()) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.uncompressed)) |
|||
.pipe(print(log.created)) |
|||
.pipe(uglify(settings.uglify)) |
|||
.pipe(rename(settings.rename.minJS)) |
|||
.pipe(chmod(config.permission)) |
|||
.pipe(gulp.dest(output.compressed)) |
|||
.pipe(print(log.created)) |
|||
.on('end', function() { |
|||
gulp.start('package compressed js'); |
|||
gulp.start('package uncompressed js'); |
|||
}) |
|||
; |
|||
}) |
|||
; |
|||
|
|||
}; |
1094
temp.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save