Browse Source

Fix paths inside inquirer, updating less vars in install

pull/1191/head
jlukic 10 years ago
parent
commit
e5166aa050
5 changed files with 103 additions and 154 deletions
  1. 4
      .gitignore
  2. 74
      gulpfile.js
  3. 125
      src/theme.config
  4. 8
      tasks/defaults.js
  5. 46
      tasks/questions.js

4
.gitignore

@ -3,8 +3,8 @@ test/coverage/
coverage/
src/**/site/
dist/
src/semantic.config
semantic.config
theme.config
semantic.json
# Numerous always-ignore extensions
*.diff

74
gulpfile.js

@ -400,19 +400,21 @@ gulp.task('check install', false, function () {
});
gulp.task('install', 'Set-up project for first time', function () {
console.clear();
return gulp
.src(defaults.paths.source.config)
.pipe(prompt.prompt(questions.setup, function( answers ) {
.pipe(prompt.prompt(questions.setup, function(answers) {
var
trailingSlash = /(\/$|\\$)+/mg,
templates = {
siteVariable = /@siteFolder .*\'(.*)\'/mg,
templates = {
theme : './src/theme.config.example',
json : './semantic.json.example',
site : './src/_site'
},
siteDestination = answers.site || './src/site',
themeDestination = './src/theme.config',
pathToSite = path.relative(path.resolve('./src'), path.resolve(siteDestination)),
configExists = fs.existsSync('./semantic.json'),
themeConfigExists = fs.existsSync('./src/theme.config'),
@ -428,10 +430,16 @@ gulp.task('install', 'Set-up project for first time', function () {
}
}
;
// exit if config exists and user specifies no overwrite
if(answers.overwrite !== undefined && answers.overwrite == 'no') {
return;
}
console.clear();
console.log('Installing');
console.log('------------------------------');
// create site files
if(siteExists) {
console.info('Site folder exists, merging files (no overwrite)', siteDestination);
@ -439,26 +447,32 @@ gulp.task('install', 'Set-up project for first time', function () {
else {
console.info('Creating site theme folder', siteDestination);
}
// need wrench for recursive copy without overwrite
// copy recursively without overwrite
wrench.copyDirSyncRecursive(templates.site, siteDestination, settings.wrench.recursive);
// write theme less config
if(themeConfigExists) {
console.log('./src/theme.config already exists, skipping');
console.error('./src/theme.config already exists, skipping');
}
else {
console.info('Creating src/theme.config (LESS config)');
fs.createReadStream(templates.theme)
.pipe(fs.createWriteStream('./src/theme.config', { flags: 'wx+' }))
gulp.src(templates.theme)
.pipe(gulp.dest(themeDestination))
;
}
// write semantic json config
// adjust less variable for site folder location
console.info('Adjusting @siteFolder', pathToSite);
gulp.src(themeDestination)
.pipe(replace(siteVariable, pathToSite))
.pipe(gulp.dest(themeDestination))
;
// determine semantic.json config
if(answers.components) {
json.components = answers.components;
}
if(answers.dist) {
answers.dist = answers.dist.replace(trailingSlash, '');
answers.dist = answers.dist;
json.paths.output = {
packaged : answers.dist + '/',
uncompressed : answers.dist + '/components/',
@ -467,28 +481,25 @@ gulp.task('install', 'Set-up project for first time', function () {
};
}
if(answers.site) {
answers.site = answers.site.replace(trailingSlash, '');
json.paths.source.site = answers.site + '/';
}
if(answers.packaged) {
answers.packaged = answers.packaged.replace(trailingSlash, '');
json.paths.output.packaged = answers.packaged + '/';
}
if(answers.compressed) {
answers.compressed = answers.compressed.replace(trailingSlash, '');
json.paths.output.compressed = answers.compressed + '/';
}
if(answers.uncompressed) {
answers.uncompressed = answers.uncompressed.replace(trailingSlash, '');
json.paths.output.uncompressed = answers.uncompressed + '/';
}
// write semantic.json
if(configExists) {
console.info('Extending semantic.json (Gulp config)');
gulp.src(jsonSource)
.pipe(plumber())
.pipe(rename(settings.rename.json))
.pipe(jeditor(json))
.pipe(debug())
.pipe(gulp.dest('./'))
;
}
@ -498,21 +509,40 @@ gulp.task('install', 'Set-up project for first time', function () {
.pipe(plumber())
.pipe(rename({ extname : '' }))
.pipe(jeditor(json))
.pipe(debug())
.pipe(gulp.dest('./'))
;
}
console.log('');
console.log('');
}))
.pipe(prompt.prompt(questions.cleanup, function(answers) {
if(answers.cleanup == 'yes') {
del([
'./src/theme.config.example',
'./semantic.json.example',
'./src/_site'
]);
}
if(answers.build == 'yes') {
gulp.start('build');
}
}))
/* .pipe(prompt.prompt(questions.site, function( answers ) {
;
});
/* TODO add site theming into install process
gulp.task('config', 'Configure basic site settings', function () {
gulp.src('./')
.pipe(prompt.prompt(questions.site, function(answers) {
console.clear();
console.log('Creating site theme file');
console.info('Creating site variables file');
}))*/
;
}))
});
gulp.task('config', 'Configure basic site settings', function () {
});
*/

125
src/theme.config

@ -1,125 +0,0 @@
/*
███████╗███████╗███╗ ███╗ █████╗ ███╗ ██╗████████╗██╗ ██████╗ ██╗ ██╗██╗
██╔════╝██╔════╝████╗ ████║██╔══██╗████╗ ██║╚══██╔══╝██║██╔════╝ ██║ ██║██║
███████╗█████╗ ██╔████╔██║███████║██╔██╗ ██║ ██║ ██║██║ ██║ ██║██║
╚════██║██╔══╝ ██║╚██╔╝██║██╔══██║██║╚██╗██║ ██║ ██║██║ ██║ ██║██║
███████║███████╗██║ ╚═╝ ██║██║ ██║██║ ╚████║ ██║ ██║╚██████╗ ╚██████╔╝██║
╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝
*/
/*******************************
Folders
*******************************/
/* Path to theme packages */
@themesFolder : 'themes/';
/* Path to site override folder */
@siteFolder : '_site/';
/*******************************
Themes
*******************************/
/* To override a theme for an individual element
specify theme name below
Be sure to update the user folder name (see README)
*/
/* Global */
@site : 'default';
@reset : 'default';
/* Elements */
@button : 'default';
@container : 'default';
@icon : 'default';
@divider : 'default';
@flag : 'default';
@header : 'default';
@image : 'default';
@input : 'default';
@label : 'default';
@list : 'default';
@loader : 'default';
@progress : 'default';
@rail : 'default';
@reveal : 'default';
@segment : 'default';
@step : 'default';
/* Collections */
@breadcrumb : 'default';
@form : 'default';
@grid : 'default';
@menu : 'default';
@message : 'default';
@table : 'default';
/* Modules */
@accordion : 'default';
@chatroom : 'default';
@checkbox : 'default';
@dimmer : 'default';
@dropdown : 'default';
@modal : 'default';
@nag : 'default';
@popup : 'default';
@rating : 'default';
@search : 'default';
@shape : 'default';
@sidebar : 'default';
@sticky : 'default';
@tab : 'default';
@transition : 'default';
@video : 'default';
/* Views */
@card : 'default';
@comment : 'default';
@feed : 'default';
@item : 'default';
@statistic : 'default';
/*******************************
Import Directives
*******************************/
@theme : @@element;
/*------------------
Load Default
-------------------*/
@import "@{themesFolder}/default/globals/site.variables";
@import "@{themesFolder}/default/@{type}s/@{element}.variables";
/*------------------
Load Theme
-------------------*/
@import "@{themesFolder}/@{site}/globals/site.variables";
@import "@{themesFolder}/@{theme}/@{type}s/@{element}.variables";
/*------------------
Load Site
-------------------*/
@import "@{siteFolder}/globals/site.variables";
@import "@{siteFolder}/@{type}s/@{element}.variables";
/*------------------
Overrides
-------------------*/
.loadUIOverrides() {
@import "@{themesFolder}/@{theme}/@{type}s/@{element}.overrides";
@import "@{siteFolder}/@{type}s/@{element}.overrides";
}
/* End Config */

8
tasks/defaults.js

@ -5,10 +5,10 @@
module.exports = {
paths: {
source: {
config : 'src/',
definitions : 'src/',
site : 'src/',
themes : 'src/'
config : 'src/theme.config',
definitions : 'src/definitions',
site : 'src/site',
themes : 'src/themes'
},
output: {
packaged : 'dist/',

46
tasks/questions.js

@ -2,11 +2,17 @@
Install Questions
*******************************/
var defaults, fs, when;
var defaults, fs, filter, when;
fs = require('fs');
defaults = require('./defaults');
filter = {
removeTrailingSlash: function(path) {
return path.replace(/(\/$|\\$)+/mg, '');
}
};
when = {
// set-up
@ -133,6 +139,7 @@ module.exports = {
name: 'dist',
message: 'Where should we output Semantic UI?',
default: defaults.paths.output.packaged,
filter: filter.removeTrailingSlash,
when: when.express
},
{
@ -140,6 +147,7 @@ module.exports = {
name: 'site',
message: 'Where should we put your site folder?',
default: defaults.paths.source.site,
filter: filter.removeTrailingSlash,
when: when.custom
},
{
@ -147,6 +155,7 @@ module.exports = {
name: 'packaged',
message: 'Where should we output a packaged version?',
default: defaults.paths.output.packaged,
filter: filter.removeTrailingSlash,
when: when.custom
},
{
@ -154,6 +163,7 @@ module.exports = {
name: 'compressed',
message: 'Where should we output compressed components?',
default: defaults.paths.output.compressed,
filter: filter.removeTrailingSlash,
when: when.custom
},
{
@ -161,10 +171,44 @@ module.exports = {
name: 'uncompressed',
message: 'Where should we output uncompressed components?',
default: defaults.paths.output.uncompressed,
filter: filter.removeTrailingSlash,
when: when.custom
}
],
cleanup: [
{
type: 'list',
name: 'cleanup',
message: 'Install Complete! Should we remove set-up files?',
choices: [
{
name: 'Yes (re-install will require redownloading semantic).',
value: 'yes'
},
{
name: 'No Thanks',
value: 'no'
}
]
},
{
type: 'list',
name: 'build',
message: 'Do you want to build Semantic now?',
choices: [
{
name: 'Yes, make those files',
value: 'yes'
},
{
name: 'No, I\'ll do it later',
value: 'no'
}
]
},
],
site: [
{
type: 'list',

Loading…
Cancel
Save