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

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
*******************************/
@ -84,6 +73,16 @@
@item : 'default';
@statistic : 'default';
/*******************************
Folders
*******************************/
/* Path to theme packages */
@themesFolder : 'themes/';
/* Path to site override folder */
@siteFolder : 'site/';
/*******************************
Import Theme

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

26
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');
}
});
};

12
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))

21
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)'
}
};

82
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
}
}
}
};

10
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
}
}
}
};

52
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 () {
}
}))
;
});
};

5
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

4
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) {

2
tasks/version.js

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

8
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

Loading…
Cancel
Save