Browse Source

Iteration on install

pull/1785/head
jlukic 10 years ago
parent
commit
93cd582642
13 changed files with 168 additions and 88 deletions
  1. 4
      gulpfile.js
  2. 21
      src/theme.config.example
  3. 9
      tasks/admin/create-repos.js
  4. 26
      tasks/check-install.js
  5. 12
      tasks/collections/internal.js
  6. 21
      tasks/config/defaults.js
  7. 82
      tasks/config/project/install.js
  8. 10
      tasks/config/project/tasks.js
  9. 52
      tasks/install.js
  10. 5
      tasks/rtl/build.js
  11. 4
      tasks/rtl/watch.js
  12. 2
      tasks/version.js
  13. 8
      tasks/watch.js

4
gulpfile.js

@ -10,8 +10,9 @@ var
// import tasks // import tasks
build = require('./tasks/build'), build = require('./tasks/build'),
checkInstall = require('./tasks/check-install'),
clean = require('./tasks/clean'), clean = require('./tasks/clean'),
checkInstall = require('./tasks/check-install'),
install = require('./tasks/install'), install = require('./tasks/install'),
version = require('./tasks/version'), version = require('./tasks/version'),
watch = require('./tasks/watch') watch = require('./tasks/watch')
@ -24,6 +25,7 @@ var
gulp.task('watch', 'Watch for site/theme changes', watch); gulp.task('watch', 'Watch for site/theme changes', watch);
gulp.task('build', 'Builds all files from source', build); gulp.task('build', 'Builds all files from source', build);
gulp.task('clean', 'Clean dist folder', clean); gulp.task('clean', 'Clean dist folder', clean);
gulp.task('version', 'Displays current version of Semantic', version); gulp.task('version', 'Displays current version of Semantic', version);

21
src/theme.config.example

@ -9,17 +9,6 @@
*/ */
/*******************************
Folders
*******************************/
/* Path to theme packages */
@themesFolder : 'themes/';
/* Path to site override folder */
@siteFolder : 'site/';
/******************************* /*******************************
Theme Selection Theme Selection
*******************************/ *******************************/
@ -84,6 +73,16 @@
@item : 'default'; @item : 'default';
@statistic : 'default'; @statistic : 'default';
/*******************************
Folders
*******************************/
/* Path to theme packages */
@themesFolder : 'themes/';
/* Path to site override folder */
@siteFolder : 'site/';
/******************************* /*******************************
Import Theme Import Theme

9
tasks/admin/create-repos.js

@ -115,7 +115,6 @@ module.exports = function(callback) {
.pipe(plumber()) .pipe(plumber())
.pipe(flatten()) .pipe(flatten())
.pipe(replace(release.paths.source, release.paths.output)) .pipe(replace(release.paths.source, release.paths.output))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -131,7 +130,6 @@ module.exports = function(callback) {
.pipe(replace(regExp.match.settingsReference, regExp.replace.settingsReference)) .pipe(replace(regExp.match.settingsReference, regExp.replace.settingsReference))
.pipe(replace(regExp.match.jQuery, regExp.replace.jQuery)) .pipe(replace(regExp.match.jQuery, regExp.replace.jQuery))
.pipe(rename('index.js')) .pipe(rename('index.js'))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -143,7 +141,6 @@ module.exports = function(callback) {
.pipe(flatten()) .pipe(flatten())
.pipe(replace(regExp.match.name, regExp.replace.name)) .pipe(replace(regExp.match.name, regExp.replace.name))
.pipe(replace(regExp.match.titleName, regExp.replace.titleName)) .pipe(replace(regExp.match.titleName, regExp.replace.titleName))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -179,7 +176,6 @@ module.exports = function(callback) {
} }
return bower; return bower;
})) }))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -208,7 +204,6 @@ module.exports = function(callback) {
}; };
return package; return package;
})) }))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -232,7 +227,6 @@ module.exports = function(callback) {
composer.description = 'Single component release of ' + component; composer.description = 'Single component release of ' + component;
return composer; return composer;
})) }))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -248,7 +242,6 @@ module.exports = function(callback) {
.pipe(replace(regExp.match.spacedVersions, regExp.replace.spacedVersions)) .pipe(replace(regExp.match.spacedVersions, regExp.replace.spacedVersions))
.pipe(replace(regExp.match.spacedLists, regExp.replace.spacedLists)) .pipe(replace(regExp.match.spacedLists, regExp.replace.spacedLists))
.pipe(replace(regExp.match.trim, regExp.replace.trim)) .pipe(replace(regExp.match.trim, regExp.replace.trim))
.pipe(chmod(config.permission))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}); });
@ -280,7 +273,7 @@ module.exports = function(callback) {
.pipe(replace(regExp.match.titleName, regExp.replace.titleName)) .pipe(replace(regExp.match.titleName, regExp.replace.titleName))
.pipe(replace(regExp.match.version, version)) .pipe(replace(regExp.match.version, version))
.pipe(replace(regExp.match.files, fileNames)) .pipe(replace(regExp.match.files, fileNames))
.pipe(rename(defaults.files.npm)) .pipe(rename(release.files.npm))
.pipe(gulp.dest(outputDirectory)) .pipe(gulp.dest(outputDirectory))
; ;
}) })

26
tasks/check-install.js

@ -7,18 +7,22 @@ var
gulp = require('gulp'), gulp = require('gulp'),
fs = require('fs'), fs = require('fs'),
console = require('better-console'), console = require('better-console'),
install = require('./config/project/install') 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');
}
});

12
tasks/collections/internal.js

@ -50,7 +50,7 @@ module.exports = function(gulp) {
---------------*/ ---------------*/
gulp.task('package uncompressed css', function() { 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(plumber())
.pipe(replace(assets.uncompressed, assets.packaged)) .pipe(replace(assets.uncompressed, assets.packaged))
.pipe(concatCSS(filenames.concatenatedCSS)) .pipe(concatCSS(filenames.concatenatedCSS))
@ -61,7 +61,7 @@ module.exports = function(gulp) {
}); });
gulp.task('package compressed css', function() { 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(plumber())
.pipe(replace(assets.uncompressed, assets.packaged)) .pipe(replace(assets.uncompressed, assets.packaged))
.pipe(concatCSS(filenames.concatenatedMinifiedCSS)) .pipe(concatCSS(filenames.concatenatedMinifiedCSS))
@ -74,7 +74,7 @@ module.exports = function(gulp) {
}); });
gulp.task('package uncompressed js', function() { 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(plumber())
.pipe(replace(assets.uncompressed, assets.packaged)) .pipe(replace(assets.uncompressed, assets.packaged))
.pipe(concat(filenames.concatenatedJS)) .pipe(concat(filenames.concatenatedJS))
@ -86,7 +86,7 @@ module.exports = function(gulp) {
}); });
gulp.task('package compressed js', function() { 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(plumber())
.pipe(replace(assets.uncompressed, assets.packaged)) .pipe(replace(assets.uncompressed, assets.packaged))
.pipe(concat(filenames.concatenatedMinifiedJS)) .pipe(concat(filenames.concatenatedMinifiedJS))
@ -103,7 +103,7 @@ module.exports = function(gulp) {
---------------*/ ---------------*/
gulp.task('package uncompressed rtl css', function () { 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(replace(assets.uncompressed, assets.packaged))
.pipe(concatCSS(filenames.concatenatedRTLCSS)) .pipe(concatCSS(filenames.concatenatedRTLCSS))
.pipe(gulp.dest(output.packaged)) .pipe(gulp.dest(output.packaged))
@ -112,7 +112,7 @@ module.exports = function(gulp) {
}); });
gulp.task('package compressed rtl css', function () { 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(replace(assets.uncompressed, assets.packaged))
.pipe(concatCSS(filenames.concatenatedMinifiedRTLCSS)) .pipe(concatCSS(filenames.concatenatedMinifiedRTLCSS))
.pipe(minifyCSS(settings.minify)) .pipe(minifyCSS(settings.minify))

21
tasks/config/defaults.js

@ -15,11 +15,9 @@ module.exports = {
// file paths // file paths
files: { files: {
composer : 'composer.json', config : 'semantic.json',
config : './semantic.json', site : 'src/site',
npm : './package.json', theme : 'src/theme.config'
site : './src/site',
theme : './src/theme.config'
}, },
// folder paths // folder paths
@ -39,11 +37,6 @@ module.exports = {
clean : 'dist/' clean : 'dist/'
}, },
globs : {
// files ignored for concatenated release
ignored : '!(*.min|*.map|*.rtl)'
},
// components to include in package // components to include in package
components: [ components: [
@ -109,6 +102,12 @@ module.exports = {
], ],
// whether to load admin tasks // whether to load admin tasks
admin: false admin: false,
// globs used for matching file patterns
globs : {
ignored : '!(*.min|*.map|*.rtl)',
ignoredRTL : '!(*.min|*.map)'
}
}; };

82
tasks/config/project/install.js

@ -4,6 +4,7 @@
var var
fs = require('fs'), fs = require('fs'),
path = require('path'),
defaults = require('../defaults'), defaults = require('../defaults'),
requireDotFile = require('require-dot-file') requireDotFile = require('require-dot-file')
@ -74,6 +75,56 @@ module.exports = {
return true; 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 // files cleaned up after install
setupFiles: [ setupFiles: [
'./src/theme.config.example', './src/theme.config.example',
@ -81,6 +132,11 @@ module.exports = {
'./src/_site' './src/_site'
], ],
files: {
config: 'semantic.json',
theme : 'theme.config',
},
// modified to create configs // modified to create configs
templates: { templates: {
config : 'semantic.json.example', config : 'semantic.json.example',
@ -88,11 +144,6 @@ module.exports = {
theme : './src/theme.config.example' theme : './src/theme.config.example'
}, },
files: {
config: 'semantic.json',
theme : 'theme.config'
},
// folder paths // folder paths
folders: { folders: {
config : './', config : './',
@ -240,11 +291,11 @@ module.exports = {
choices: [ choices: [
{ {
name: 'No', name: 'No',
value: 'no' value: false
}, },
{ {
name: 'Yes', 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
}
}
} }
}; };

10
tasks/config/project/tasks.js

@ -91,7 +91,6 @@ module.exports = {
/* File Renames */ /* File Renames */
rename: { rename: {
json : { extname : '.json' },
minJS : { extname : '.min.js' }, minJS : { extname : '.min.js' },
minCSS : { extname : '.min.css' }, minCSS : { extname : '.min.css' },
rtlCSS : { extname : '.rtl.css' }, rtlCSS : { extname : '.rtl.css' },
@ -107,15 +106,6 @@ module.exports = {
/* Minified JS Settings */ /* Minified JS Settings */
uglify: { uglify: {
mangle : true mangle : true
},
/* Copy Folder Recursively */
wrench: {
recursive: {
forceDelete : true,
excludeHiddenUnix : true,
preserveFiles : true
}
} }
} }
}; };

52
tasks/install.js

@ -3,7 +3,7 @@
*******************************/ *******************************/
var var
gulp = require('gulp-help')(require('gulp')), gulp = require('gulp'),
// node dependencies // node dependencies
console = require('better-console'), console = require('better-console'),
@ -17,21 +17,28 @@ var
plumber = require('gulp-plumber'), plumber = require('gulp-plumber'),
prompt = require('gulp-prompt'), prompt = require('gulp-prompt'),
rename = require('gulp-rename'), rename = require('gulp-rename'),
replace = require('gulp-replace'),
wrench = require('wrench'), wrench = require('wrench'),
// user config // user config
config = require('./config/user'), config = require('./config/user'),
// install config // install config
install = require('config/project/install'), install = require('./config/project/install'),
// shorthand // shorthand
questions = install.questions questions = install.questions,
settings = install.settings
; ;
// Export install task // Export install task
module.exports = function () { module.exports = function () {
var pm = install.getPackageManager();
console.log(pm);
return;
console.clear(); console.clear();
// if semantic.json exists skip root questions // if semantic.json exists skip root questions
@ -44,7 +51,7 @@ module.exports = function () {
}) }))
.pipe(prompt.prompt(questions.setup, function(answers) { .pipe(prompt.prompt(questions.setup, function(answers) {
var var
siteVariable = /@siteFolder .*\'(.*)/mg, 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') { if(answers.overwrite !== undefined && answers.overwrite == 'no') {
return; return;
} }
@ -79,6 +86,10 @@ module.exports = function () {
console.log('Installing'); console.log('Installing');
console.log('------------------------------'); console.log('------------------------------');
/*--------------
Site Themes
---------------*/
// create site files // create site files
if(siteExists) { if(siteExists) {
console.info('Site folder exists, merging files (no overwrite)', siteDestination); console.info('Site folder exists, merging files (no overwrite)', siteDestination);
@ -87,10 +98,14 @@ module.exports = function () {
console.info('Creating site theme folder', siteDestination); 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); 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); console.info('Adjusting @siteFolder', sitePathReplace);
if(themeConfigExists) { if(themeConfigExists) {
gulp.src(config.files.site) gulp.src(config.files.site)
@ -111,13 +126,20 @@ module.exports = function () {
; ;
} }
// determine semantic.json config /*--------------
Semantic.json
---------------*/
// add components
if(answers.components) { if(answers.components) {
json.components = answers.components; json.components = answers.components;
} }
// add permissions
if(answers.permission) { if(answers.permission) {
json.permission = +answers.permission; json.permission = answers.permission;
} }
// add dist folder paths
if(answers.dist) { if(answers.dist) {
answers.dist = answers.dist; answers.dist = answers.dist;
json.paths.output = { json.paths.output = {
@ -127,12 +149,11 @@ module.exports = function () {
themes : answers.dist + '/themes/' themes : answers.dist + '/themes/'
}; };
} }
// add rtl choice
if(answers.rtl) { if(answers.rtl) {
json.rtl = (answers.rtl == 'yes') json.rtl = answers.rtl;
? true
: false
;
} }
// add site path
if(answers.site) { if(answers.site) {
json.paths.source.site = answers.site + '/'; json.paths.source.site = answers.site + '/';
} }
@ -153,7 +174,6 @@ module.exports = function () {
.pipe(plumber()) .pipe(plumber())
.pipe(rename(settings.rename.json)) // preserve file extension .pipe(rename(settings.rename.json)) // preserve file extension
.pipe(jsonEditor(json)) .pipe(jsonEditor(json))
.pipe(chmod(config.permission))
.pipe(gulp.dest('./')) .pipe(gulp.dest('./'))
; ;
} }
@ -163,7 +183,6 @@ module.exports = function () {
.pipe(plumber()) .pipe(plumber())
.pipe(rename({ extname : '' })) // remove .template from ext .pipe(rename({ extname : '' })) // remove .template from ext
.pipe(jsonEditor(json)) .pipe(jsonEditor(json))
.pipe(chmod(config.permission))
.pipe(gulp.dest('./')) .pipe(gulp.dest('./'))
; ;
} }
@ -182,4 +201,5 @@ module.exports = function () {
} }
})) }))
; ;
}); };

5
tasks/rtl/build.js

@ -3,7 +3,7 @@
*******************************/ *******************************/
var var
gulp = require('gulp-help')(require('gulp')), gulp = require('gulp'),
// node dependencies // node dependencies
fs = require('fs'), fs = require('fs'),
@ -43,6 +43,9 @@ var
settings = tasks.settings settings = tasks.settings
; ;
// add internal tasks (concat release)
require('../collections/internal')(gulp);
module.exports = function(callback) { module.exports = function(callback) {
var var

4
tasks/rtl/watch.js

@ -3,7 +3,7 @@
*******************************/ *******************************/
var var
gulp = require('gulp-help')(require('gulp')), gulp = require('gulp'),
// node deps // node deps
console = require('better-console'), console = require('better-console'),
@ -46,6 +46,8 @@ var
; ;
// add internal tasks (concat release)
require('../collections/internal')(gulp);
module.exports = function(callback) { module.exports = function(callback) {

2
tasks/version.js

@ -3,7 +3,7 @@
*******************************/ *******************************/
var var
config = require('./config/project/release') release = require('./config/project/release')
; ;
module.exports = function(callback) { module.exports = function(callback) {

8
tasks/watch.js

@ -3,13 +3,13 @@
*******************************/ *******************************/
var var
gulp = require('gulp-help')(require('gulp')), gulp = require('gulp'),
// node deps // node dependencies
console = require('better-console'), console = require('better-console'),
fs = require('fs'), fs = require('fs'),
// gulp deps // gulp dependencies
autoprefixer = require('gulp-autoprefixer'), autoprefixer = require('gulp-autoprefixer'),
chmod = require('gulp-chmod'), chmod = require('gulp-chmod'),
clone = require('gulp-clone'), clone = require('gulp-clone'),
@ -46,7 +46,7 @@ var
; ;
// add tasks that shouldn't be exposed to end-user // add tasks that shouldn't be exposed to end-user
gulp = require('./collections/internal')(gulp); require('./collections/internal')(gulp);
// export task // export task

|||||||
100:0
Loading…
Cancel
Save