Browse Source

Adds task rewrite, incomplete

pull/1785/head
jlukic 10 years ago
parent
commit
a68ab855ef
12 changed files with 1616 additions and 31 deletions
  1. 135
      tasks/build.js
  2. 13
      tasks/clean.js
  3. 75
      tasks/config/defaults.js
  4. 0
      tasks/config/gulp/banner.js
  5. 0
      tasks/config/gulp/comments.js
  6. 0
      tasks/config/gulp/log.js
  7. 0
      tasks/config/gulp/tasks.js
  8. 122
      tasks/config/index.js
  9. 0
      tasks/config/install/questions.js
  10. 11
      tasks/version.js
  11. 197
      tasks/watch.js
  12. 1094
      temp.js

135
tasks/build.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');
})
;
};

13
tasks/clean.js

@ -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);
};

tasks/defaults.js → tasks/config/defaults.js

@ -4,11 +4,51 @@
module.exports = {
base : '',
theme : './src/theme.config',
/*--------------
Mutable
---------------*/
permission : 644,
rtl : false,
// file paths
files: {
composer : 'composer.json',
config : './semantic.json',
npm : './package.json',
meteor : './package.js',
site : './src/site',
theme : './src/theme.config'
},
// folder paths
paths: {
source: {
config : 'src/theme.config',
definitions : 'src/definitions/',
site : 'src/site/',
themes : 'src/themes/'
},
output: {
packaged : 'dist/',
uncompressed : 'dist/components/',
compressed : 'dist/components/',
themes : 'dist/themes/'
},
clean : 'dist/'
},
// base path of all config.paths
base : '',
// path to theme.config from project root
theme : './src/theme.config',
// whether to load admin tasks
admin: false,
// globs
globs : {},
permission : 644,
rtl : false,
docs : {
source : '../docs/server/files/release/',
@ -102,32 +142,5 @@ module.exports = {
config : './',
site : './src/site',
theme : './src/'
},
// file paths
files: {
composer : 'composer.json',
config : './semantic.json',
npm : './package.json',
meteor : './package.js',
site : './src/site',
theme : './src/theme.config'
},
// same as semantic.json.example
paths: {
source: {
config : 'src/theme.config',
definitions : 'src/definitions/',
site : 'src/site/',
themes : 'src/themes/'
},
output: {
packaged : 'dist/',
uncompressed : 'dist/components/',
compressed : 'dist/components/',
themes : 'dist/themes/'
},
clean : 'dist/'
}
};

tasks/banner.js → tasks/config/gulp/banner.js

tasks/comments.js → tasks/config/gulp/comments.js

tasks/log.js → tasks/config/gulp/log.js

tasks/gulp-settings.js → tasks/config/gulp/tasks.js

122
tasks/config/index.js

@ -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;

tasks/questions.js → tasks/config/install/questions.js

11
tasks/version.js

@ -0,0 +1,11 @@
/*******************************
Version Task
*******************************/
var
config = require('config')
;
module.exports = function(callback) {
console.log('Semantic UI ' + config.version);
};

197
tasks/watch.js

@ -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

Loading…
Cancel
Save