diff --git a/gulpfile.js b/gulpfile.js index 59e231495..c0d4fd9e9 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,8 +10,9 @@ var // import tasks build = require('./tasks/build'), - checkInstall = require('./tasks/check-install'), clean = require('./tasks/clean'), + + checkInstall = require('./tasks/check-install'), install = require('./tasks/install'), version = require('./tasks/version'), watch = require('./tasks/watch') @@ -24,6 +25,7 @@ var gulp.task('watch', 'Watch for site/theme changes', watch); gulp.task('build', 'Builds all files from source', build); + gulp.task('clean', 'Clean dist folder', clean); gulp.task('version', 'Displays current version of Semantic', version); diff --git a/src/theme.config.example b/src/theme.config.example index bf17b37ab..898541062 100644 --- a/src/theme.config.example +++ b/src/theme.config.example @@ -9,17 +9,6 @@ */ -/******************************* - Folders -*******************************/ - -/* Path to theme packages */ -@themesFolder : 'themes/'; - -/* Path to site override folder */ -@siteFolder : 'site/'; - - /******************************* Theme Selection *******************************/ @@ -84,6 +73,16 @@ @item : 'default'; @statistic : 'default'; +/******************************* + Folders +*******************************/ + +/* Path to theme packages */ +@themesFolder : 'themes/'; + +/* Path to site override folder */ +@siteFolder : 'site/'; + /******************************* Import Theme diff --git a/tasks/admin/create-repos.js b/tasks/admin/create-repos.js index c9d32b8b9..37aedb03e 100644 --- a/tasks/admin/create-repos.js +++ b/tasks/admin/create-repos.js @@ -115,7 +115,6 @@ module.exports = function(callback) { .pipe(plumber()) .pipe(flatten()) .pipe(replace(release.paths.source, release.paths.output)) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -131,7 +130,6 @@ module.exports = function(callback) { .pipe(replace(regExp.match.settingsReference, regExp.replace.settingsReference)) .pipe(replace(regExp.match.jQuery, regExp.replace.jQuery)) .pipe(rename('index.js')) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -143,7 +141,6 @@ module.exports = function(callback) { .pipe(flatten()) .pipe(replace(regExp.match.name, regExp.replace.name)) .pipe(replace(regExp.match.titleName, regExp.replace.titleName)) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -179,7 +176,6 @@ module.exports = function(callback) { } return bower; })) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -208,7 +204,6 @@ module.exports = function(callback) { }; return package; })) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -232,7 +227,6 @@ module.exports = function(callback) { composer.description = 'Single component release of ' + component; return composer; })) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -248,7 +242,6 @@ module.exports = function(callback) { .pipe(replace(regExp.match.spacedVersions, regExp.replace.spacedVersions)) .pipe(replace(regExp.match.spacedLists, regExp.replace.spacedLists)) .pipe(replace(regExp.match.trim, regExp.replace.trim)) - .pipe(chmod(config.permission)) .pipe(gulp.dest(outputDirectory)) ; }); @@ -280,7 +273,7 @@ module.exports = function(callback) { .pipe(replace(regExp.match.titleName, regExp.replace.titleName)) .pipe(replace(regExp.match.version, version)) .pipe(replace(regExp.match.files, fileNames)) - .pipe(rename(defaults.files.npm)) + .pipe(rename(release.files.npm)) .pipe(gulp.dest(outputDirectory)) ; }) diff --git a/tasks/check-install.js b/tasks/check-install.js index 78abd32e0..9bab87e87 100644 --- a/tasks/check-install.js +++ b/tasks/check-install.js @@ -7,18 +7,22 @@ var gulp = require('gulp'), fs = require('fs'), console = require('better-console'), - install = require('./config/project/install') ; +// export task +module.exports = function() { + + setTimeout(function() { + if( !install.isSetup() ) { + console.log('Starting install...'); + gulp.start('install'); + return; + } + else { + gulp.start('watch'); + } + }, 50); // Delay to allow console.clear to remove messages from check event + -gulp.task('check install', false, function () { - if( !install.isSetup() ) { - console.log('Starting install...'); - gulp.start('install'); - return; - } - else { - gulp.start('watch'); - } -}); +}; \ No newline at end of file diff --git a/tasks/collections/internal.js b/tasks/collections/internal.js index c92c70741..e75be2ff9 100644 --- a/tasks/collections/internal.js +++ b/tasks/collections/internal.js @@ -50,7 +50,7 @@ module.exports = function(gulp) { ---------------*/ gulp.task('package uncompressed css', function() { - return gulp.src(output.uncompressed + '**/' + config.globs.components + config.globs.ignored + '.css') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignored + '.css') .pipe(plumber()) .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concatCSS(filenames.concatenatedCSS)) @@ -61,7 +61,7 @@ module.exports = function(gulp) { }); gulp.task('package compressed css', function() { - return gulp.src(output.uncompressed + '**/' + config.globs.components + config.globs.ignored + '.css') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignored + '.css') .pipe(plumber()) .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concatCSS(filenames.concatenatedMinifiedCSS)) @@ -74,7 +74,7 @@ module.exports = function(gulp) { }); gulp.task('package uncompressed js', function() { - return gulp.src(output.uncompressed + '**/' + config.globs.components + '!(*.min|*.map).js') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignored + '.js') .pipe(plumber()) .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concat(filenames.concatenatedJS)) @@ -86,7 +86,7 @@ module.exports = function(gulp) { }); gulp.task('package compressed js', function() { - return gulp.src(output.uncompressed + '**/' + config.globs.components + '!(*.min|*.map).js') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignored + '.js') .pipe(plumber()) .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concat(filenames.concatenatedMinifiedJS)) @@ -103,7 +103,7 @@ module.exports = function(gulp) { ---------------*/ gulp.task('package uncompressed rtl css', function () { - return gulp.src(output.uncompressed + '**/' + config.globs.components + '!(*.min|*.map).rtl.css') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignoredRTL + '.rtl.css') .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concatCSS(filenames.concatenatedRTLCSS)) .pipe(gulp.dest(output.packaged)) @@ -112,7 +112,7 @@ module.exports = function(gulp) { }); gulp.task('package compressed rtl css', function () { - return gulp.src(output.uncompressed + '**/' + config.globs.components + '!(*.min|*.map).rtl.css') + return gulp.src(output.uncompressed + '**/' + globs.components + globs.ignoredRTL + '.rtl.css') .pipe(replace(assets.uncompressed, assets.packaged)) .pipe(concatCSS(filenames.concatenatedMinifiedRTLCSS)) .pipe(minifyCSS(settings.minify)) diff --git a/tasks/config/defaults.js b/tasks/config/defaults.js index b2dae8f15..eb5d669ab 100644 --- a/tasks/config/defaults.js +++ b/tasks/config/defaults.js @@ -15,11 +15,9 @@ module.exports = { // file paths files: { - composer : 'composer.json', - config : './semantic.json', - npm : './package.json', - site : './src/site', - theme : './src/theme.config' + config : 'semantic.json', + site : 'src/site', + theme : 'src/theme.config' }, // folder paths @@ -39,11 +37,6 @@ module.exports = { clean : 'dist/' }, - globs : { - // files ignored for concatenated release - ignored : '!(*.min|*.map|*.rtl)' - }, - // components to include in package components: [ @@ -109,6 +102,12 @@ module.exports = { ], // whether to load admin tasks - admin: false + admin: false, + + // globs used for matching file patterns + globs : { + ignored : '!(*.min|*.map|*.rtl)', + ignoredRTL : '!(*.min|*.map)' + } }; diff --git a/tasks/config/project/install.js b/tasks/config/project/install.js index 32159b0b4..187d255d0 100644 --- a/tasks/config/project/install.js +++ b/tasks/config/project/install.js @@ -4,6 +4,7 @@ var fs = require('fs'), + path = require('path'), defaults = require('../defaults'), requireDotFile = require('require-dot-file') @@ -74,6 +75,56 @@ module.exports = { return true; }, + // checks if files are in a PM directory + getPackageManager: function(directory) { + var + walk = function(directory) { + var + pathArray = directory.split('/'), + folder = pathArray[pathArray.length - 1], + nextDirectory = path.normalize(directory + '../') + ; + console.log(directory, folder); + if( folder == 'bower_components') { + return { + name: 'bower', + root: nextDirectory + }; + } + else if(folder == 'node_modules') { + return { + name: 'npm', + root: nextDirectory + }; + } + else if(folder == 'composer') { + return { + name: 'composer', + root: nextDirectory + }; + } + else if(folder == 'components' || folder == 'modules') { + return { + name: 'custom', + root: nextDirectory + }; + } + else { + // reached file system root, let's stop + if(path.resolve(directory) == '/') { + return false; + } + // recurse + return walk(nextDirectory); + } + } + ; + + // start walk from outside component folder + directory = directory || (__dirname + '/../'); + return walk(directory); + }, + // files cleaned up after install setupFiles: [ './src/theme.config.example', @@ -81,6 +132,11 @@ module.exports = { './src/_site' ], + files: { + config: 'semantic.json', + theme : 'theme.config', + }, + // modified to create configs templates: { config : 'semantic.json.example', @@ -88,11 +144,6 @@ module.exports = { theme : './src/theme.config.example' }, - files: { - config: 'semantic.json', - theme : 'theme.config' - }, - // folder paths folders: { config : './', @@ -240,11 +291,11 @@ module.exports = { choices: [ { name: 'No', - value: 'no' + value: false }, { name: 'Yes', - value: 'yes' + value: true }, ] }, @@ -534,6 +585,23 @@ module.exports = { } ] + }, + + settings: { + + /* Rename Files */ + rename: { + json : { extname : '.json' }, + }, + + /* Copy Install Folders */ + wrench: { + recursive: { + forceDelete : true, + excludeHiddenUnix : true, + preserveFiles : true + } + } } }; \ No newline at end of file diff --git a/tasks/config/project/tasks.js b/tasks/config/project/tasks.js index 5792183b5..fe8d53856 100644 --- a/tasks/config/project/tasks.js +++ b/tasks/config/project/tasks.js @@ -91,7 +91,6 @@ module.exports = { /* File Renames */ rename: { - json : { extname : '.json' }, minJS : { extname : '.min.js' }, minCSS : { extname : '.min.css' }, rtlCSS : { extname : '.rtl.css' }, @@ -107,15 +106,6 @@ module.exports = { /* Minified JS Settings */ uglify: { mangle : true - }, - - /* Copy Folder Recursively */ - wrench: { - recursive: { - forceDelete : true, - excludeHiddenUnix : true, - preserveFiles : true - } } } }; \ No newline at end of file diff --git a/tasks/install.js b/tasks/install.js index d5c0d6a41..f9f134beb 100644 --- a/tasks/install.js +++ b/tasks/install.js @@ -3,7 +3,7 @@ *******************************/ var - gulp = require('gulp-help')(require('gulp')), + gulp = require('gulp'), // node dependencies console = require('better-console'), @@ -17,21 +17,28 @@ var plumber = require('gulp-plumber'), prompt = require('gulp-prompt'), rename = require('gulp-rename'), + replace = require('gulp-replace'), wrench = require('wrench'), // user config config = require('./config/user'), // install config - install = require('config/project/install'), + install = require('./config/project/install'), // shorthand - questions = install.questions + questions = install.questions, + settings = install.settings + ; // Export install task module.exports = function () { + var pm = install.getPackageManager(); + console.log(pm); + return; + console.clear(); // if semantic.json exists skip root questions @@ -44,7 +51,7 @@ module.exports = function () { - }) + })) .pipe(prompt.prompt(questions.setup, function(answers) { var siteVariable = /@siteFolder .*\'(.*)/mg, @@ -70,7 +77,7 @@ module.exports = function () { } ; - // exit if config exists and user specifies no overwrite + // exit if config exists and user specifies not to proceed if(answers.overwrite !== undefined && answers.overwrite == 'no') { return; } @@ -79,6 +86,10 @@ module.exports = function () { console.log('Installing'); console.log('------------------------------'); + /*-------------- + Site Themes + ---------------*/ + // create site files if(siteExists) { console.info('Site folder exists, merging files (no overwrite)', siteDestination); @@ -87,10 +98,14 @@ module.exports = function () { console.info('Creating site theme folder', siteDestination); } - // copy recursively without overwrite + // Copy _site template without overwrite wrench.copyDirSyncRecursive(config.templates.site, siteDestination, settings.wrench.recursive); - // adjust less variable for site folder location + /*-------------- + Theme.config + ---------------*/ + + // Adjust LESS variables for site folder location console.info('Adjusting @siteFolder', sitePathReplace); if(themeConfigExists) { gulp.src(config.files.site) @@ -111,13 +126,20 @@ module.exports = function () { ; } - // determine semantic.json config + /*-------------- + Semantic.json + ---------------*/ + + // add components if(answers.components) { json.components = answers.components; } + // add permissions if(answers.permission) { - json.permission = +answers.permission; + json.permission = answers.permission; } + + // add dist folder paths if(answers.dist) { answers.dist = answers.dist; json.paths.output = { @@ -127,12 +149,11 @@ module.exports = function () { themes : answers.dist + '/themes/' }; } + // add rtl choice if(answers.rtl) { - json.rtl = (answers.rtl == 'yes') - ? true - : false - ; + json.rtl = answers.rtl; } + // add site path if(answers.site) { json.paths.source.site = answers.site + '/'; } @@ -153,7 +174,6 @@ module.exports = function () { .pipe(plumber()) .pipe(rename(settings.rename.json)) // preserve file extension .pipe(jsonEditor(json)) - .pipe(chmod(config.permission)) .pipe(gulp.dest('./')) ; } @@ -163,7 +183,6 @@ module.exports = function () { .pipe(plumber()) .pipe(rename({ extname : '' })) // remove .template from ext .pipe(jsonEditor(json)) - .pipe(chmod(config.permission)) .pipe(gulp.dest('./')) ; } @@ -182,4 +201,5 @@ module.exports = function () { } })) ; -}); \ No newline at end of file + +}; \ No newline at end of file diff --git a/tasks/rtl/build.js b/tasks/rtl/build.js index 98376a7fc..a749519c3 100644 --- a/tasks/rtl/build.js +++ b/tasks/rtl/build.js @@ -3,7 +3,7 @@ *******************************/ var - gulp = require('gulp-help')(require('gulp')), + gulp = require('gulp'), // node dependencies fs = require('fs'), @@ -43,6 +43,9 @@ var settings = tasks.settings ; +// add internal tasks (concat release) +require('../collections/internal')(gulp); + module.exports = function(callback) { var diff --git a/tasks/rtl/watch.js b/tasks/rtl/watch.js index 1090085dd..5e42275e1 100644 --- a/tasks/rtl/watch.js +++ b/tasks/rtl/watch.js @@ -3,7 +3,7 @@ *******************************/ var - gulp = require('gulp-help')(require('gulp')), + gulp = require('gulp'), // node deps console = require('better-console'), @@ -46,6 +46,8 @@ var ; +// add internal tasks (concat release) +require('../collections/internal')(gulp); module.exports = function(callback) { diff --git a/tasks/version.js b/tasks/version.js index c2b70cc28..df49f5542 100644 --- a/tasks/version.js +++ b/tasks/version.js @@ -3,7 +3,7 @@ *******************************/ var - config = require('./config/project/release') + release = require('./config/project/release') ; module.exports = function(callback) { diff --git a/tasks/watch.js b/tasks/watch.js index 2c3d8c90d..3728658c9 100644 --- a/tasks/watch.js +++ b/tasks/watch.js @@ -3,13 +3,13 @@ *******************************/ var - gulp = require('gulp-help')(require('gulp')), + gulp = require('gulp'), - // node deps + // node dependencies console = require('better-console'), fs = require('fs'), - // gulp deps + // gulp dependencies autoprefixer = require('gulp-autoprefixer'), chmod = require('gulp-chmod'), clone = require('gulp-clone'), @@ -46,7 +46,7 @@ var ; // add tasks that shouldn't be exposed to end-user -gulp = require('./collections/internal')(gulp); +require('./collections/internal')(gulp); // export task