diff --git a/build.json b/build.json
deleted file mode 100644
index c555f82dd..000000000
--- a/build.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "base": "",
-
- "paths": {
- "source": {
- "config" : "src/semantic.config",
- "definitions" : "src/definitions/",
- "site" : "src/_site/",
- "themes" : "src/themes/"
- },
- "output": {
- "packaged" : "dist/",
- "uncompressed" : "dist/components/",
- "compressed" : "dist/components/",
- "themes" : "dist/themes"
- },
- "clean" : "dist/"
- }
-
-}
diff --git a/gulpfile.js b/gulpfile.js
index 89b219bca..a125dfbeb 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -7,37 +7,32 @@
Set-up
*******************************/
+
var
- gulp = require('gulp-help')(require('gulp')),
+ gulp = require('gulp-help')(require('gulp')),
- // read settings file
- config = require('./build.json'),
+ // node components & oddballs
+ del = require('del'),
+ fs = require('fs'),
+ path = require('path'),
+ console = require('better-console'),
- // shorthand
- base = config.base,
- source = config.paths.source,
- output = config.paths.output,
- clean = config.paths.clean,
-
- // required node components (& oddballs)
- del = require('del'),
- fs = require('fs'),
- path = require('path'),
- clone = require('gulp-clone'),
-
- // required gulp components
+ // gulp dependencies
autoprefixer = require('gulp-autoprefixer'),
+ clone = require('gulp-clone'),
concat = require('gulp-concat'),
concatCSS = require('gulp-concat-css'),
copy = require('gulp-copy'),
debug = require('gulp-debug'),
flatten = require('gulp-flatten'),
+ header = require('gulp-header'),
karma = require('gulp-karma'),
less = require('gulp-less'),
minifyCSS = require('gulp-minify-css'),
notify = require('gulp-notify'),
plumber = require('gulp-plumber'),
print = require('gulp-print'),
+ prompt = require('gulp-prompt'),
rename = require('gulp-rename'),
replace = require('gulp-replace'),
sourcemaps = require('gulp-sourcemaps'),
@@ -45,71 +40,33 @@ var
util = require('gulp-util'),
watch = require('gulp-watch'),
- settings = {
- del: {
- silent: true
- },
- minify: {
- processImport: false,
- keepSpecialComments: 0
- },
- prefix: {
- browsers: [
- "last 2 version",
- "> 1%",
- "opera 12.1",
- "safari 6",
- "ie 9",
- "bb 10",
- "android 4"
- ]
- },
- minJS: {
- extname: '.min.js'
- },
- minCSS: {
- extname: '.min.css'
- }
- },
+ // settings
+ config = require('./semantic.json'),
+ package = require('./package.json'),
- comments = {
- // remove variable comments from css
- variables : {
- in : /\/\*[\s\S]+\/\* End Config \*\//m,
- out : '',
- },
- // adds spacing around comments
- large: {
- in : /(\/\*\*\*\*[\s\S]+?\*\/)/mg,
- out : '\n\n$1\n'
- },
- small: {
- in : /(\/\*---[\s\S]+?\*\/)/mg,
- out : '\n$1\n'
- },
- tiny: {
- in : /(\/\* [\s\S]+? \*\/)/mg,
- out : '\n$1'
- }
- },
+ // config
+ banner = require('./tasks/banner'),
+ comments = require('./tasks/comments'),
+ defaults = require('./tasks/defaults'),
+ log = require('./tasks/log'),
+ questions = require('./tasks/questions'),
+ settings = require('./tasks/settings'),
- log = {
- created: function(file) {
- return "Created: " + file;
- },
- modified: function(file) {
- return "Modified: " + file;
- }
- },
+ // shorthand
+ base = config.base,
+ clean = config.paths.clean,
+ output = config.paths.output,
+ source = config.paths.source,
+ // derived
assetPaths = {
uncompressed : path.relative(output.uncompressed, output.themes),
compressed : path.relative(output.compressed, output.themes),
packaged : path.relative(output.packaged, output.themes)
},
+ // temporary
folder
-
;
// Add base directory
@@ -127,13 +84,22 @@ for(folder in output) {
clean = base + clean;
+
+
/*******************************
Tasks
*******************************/
+gulp.task('default', false, [
+ 'check install'
+]);
+
gulp.task('watch', 'Watch for site/theme changes (Default Task)', function () {
- return gulp
+ console.log('Watching source files');
+
+ // watching changes in style
+ gulp
.watch([
source.config,
source.definitions + '**/*.less',
@@ -162,15 +128,10 @@ gulp.task('watch', 'Watch for site/theme changes (Default Task)', function () {
if( fs.existsSync(srcPath) ) {
- // copy assets
- gulp.src(source.themes + '**/assets/**')
- .pipe(gulp.dest(output.themes))
- ;
-
// unified css stream
stream = gulp.src(srcPath)
.pipe(plumber())
- .pipe(sourcemaps.init())
+ //.pipe(sourcemaps.init())
.pipe(less(settings.less))
.pipe(replace(comments.variables.in, comments.variables.out))
.pipe(replace(comments.large.in, comments.large.out))
@@ -183,12 +144,24 @@ gulp.task('watch', 'Watch for site/theme changes (Default Task)', function () {
uncompressedStream = stream.pipe(clone());
compressedStream = stream.pipe(clone());
+ uncompressedStream
+ .pipe(replace(assetPaths.source, assetPaths.uncompressed))
+ //.pipe(sourcemaps.write('/', settings.sourcemap))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed css');
+ })
+ ;
+
compressedStream = stream
.pipe(clone())
.pipe(replace(assetPaths.source, assetPaths.compressed))
.pipe(minifyCSS(settings.minify))
.pipe(rename(settings.minCSS))
- .pipe(sourcemaps.write('/', {includeContent: true, sourceRoot: '/src'}))
+ //.pipe(sourcemaps.write('/', settings.sourcemap))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.compressed))
.pipe(print(log.created))
.on('end', function() {
@@ -196,23 +169,47 @@ gulp.task('watch', 'Watch for site/theme changes (Default Task)', function () {
})
;
- uncompressedStream
- .pipe(replace(assetPaths.source, assetPaths.uncompressed))
- .pipe(sourcemaps.write('/', {includeContent: true, sourceRoot: '/src'}))
- .pipe(gulp.dest(output.uncompressed))
- .pipe(print(log.created))
- .on('end', function() {
- gulp.start('package uncompressed css');
- })
- ;
-
}
else {
- console.log('Definition file not found', path);
+ console.error('Definition file not found', path);
}
})
;
+ // watch changes in assets
+ gulp
+ .watch([
+ source.themes + '**/assets/**'
+ ], function(file) {
+ // copy assets
+ gulp.src(file.path, { base: source.themes })
+ .pipe(gulp.dest(output.themes))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+ // watch changes in js
+ gulp
+ .watch([
+ source.definitions + '**/*.js'
+ ], function(file) {
+ gulp.src(file.path)
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(sourcemaps.init())
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.minJS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed js');
+ gulp.start('package uncompressed js');
+ })
+ ;
+ })
+ ;
+
});
// Builds all files
@@ -223,29 +220,34 @@ gulp.task('build', 'Builds all files from source', function(callback) {
uncompressedStream
;
+ console.info('Building Semantic');
+
// copy assets
gulp.src(source.themes + '**/assets/**')
.pipe(gulp.dest(output.themes))
;
// javascript stream
- stream = gulp.src(source.definitions + '**/*.js')
+ gulp.src(source.definitions + '**/*.js')
.pipe(flatten())
- .pipe(sourcemaps.init())
.pipe(gulp.dest(output.uncompressed))
- .pipe(uglify())
+ .pipe(print(log.created))
+ // .pipe(sourcemaps.init())
+ .pipe(uglify(settings.uglify))
.pipe(rename(settings.minJS))
- .pipe(sourcemaps.write('/', {includeContent: true, sourceRoot: '/src'}))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
.on('end', function() {
- gulp.start('package js');
+ gulp.start('package compressed js');
+ gulp.start('package uncompressed js');
})
;
// unified css stream
stream = gulp.src(source.definitions + '**/*.less')
.pipe(plumber())
- .pipe(sourcemaps.init())
+ //.pipe(sourcemaps.init())
.pipe(less(settings.less))
.pipe(flatten())
.pipe(replace(comments.variables.in, comments.variables.out))
@@ -259,12 +261,24 @@ gulp.task('build', 'Builds all files from source', function(callback) {
uncompressedStream = stream.pipe(clone());
compressedStream = stream.pipe(clone());
+ uncompressedStream
+ .pipe(replace(assetPaths.source, assetPaths.uncompressed))
+ //.pipe(sourcemaps.write('/', settings.sourcemap))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed css');
+ })
+ ;
+
compressedStream = stream
.pipe(clone())
.pipe(replace(assetPaths.source, assetPaths.compressed))
.pipe(minifyCSS(settings.minify))
.pipe(rename(settings.minCSS))
- .pipe(sourcemaps.write('/', {includeContent: true, sourceRoot: '/src'}))
+ //.pipe(sourcemaps.write('/', settings.sourcemap))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.compressed))
.pipe(print(log.created))
.on('end', function() {
@@ -272,20 +286,9 @@ gulp.task('build', 'Builds all files from source', function(callback) {
})
;
- uncompressedStream
- .pipe(replace(assetPaths.source, assetPaths.uncompressed))
- .pipe(sourcemaps.write('/', {includeContent: true, sourceRoot: '/src'}))
- .pipe(gulp.dest(output.uncompressed))
- .pipe(print(log.created))
- .on('end', function() {
- gulp.start('package uncompressed css');
- })
- ;
});
-
-
// cleans distribution files
gulp.task('clean', 'Clean dist folder', function(callback) {
console.log('Cleaning directory: ' + clean);
@@ -293,18 +296,58 @@ gulp.task('clean', 'Clean dist folder', function(callback) {
});
gulp.task('version', 'Displays current version of Semantic', function(callback) {
- var package = require('./package.json');
console.log('Semantic UI ' + package.version);
});
+/*--------------
+ Config
+---------------*/
+
+gulp.task('check install', false, function () {
+ if(0) {
+ setTimeout(function() {
+ gulp.start('install');
+ }, 100);
+ }
+ else {
+ gulp.start('watch');
+ }
+});
+
+gulp.task('install', 'Set-up project for first time', function () {
+ if( !fs.existsSync(source.config) || !fs.existsSync(source.site) ) {
+
+ console.clear();
+ gulp
+ .src(defaults.paths.source.config)
+ .pipe(prompt.prompt(questions.setup, function( answers ) {
+ console.log(answers);
+ console.info('Creating site folder');
+ console.info('Creating theme config file (semantic.config)');
+ console.info('Creating build config file (semantic.json)');
+ }))
+ ;
+
+ }
+ else {
+ console.log('has config');
+ }
+ // !
+
+});
+gulp.task('config', 'Configure basic site settings', function () {
+
+});
+
+
/*--------------
Internal
---------------*/
+
gulp.task('package uncompressed css', false, function() {
- return gulp.src(output.uncompressed + '**/!(*.min|*.map)')
- .pipe(debug({verbose: true}))
+ return gulp.src(output.uncompressed + '**/!(*.min|*.map).css')
.pipe(replace(assetPaths.uncompressed, assetPaths.packaged))
.pipe(concatCSS('semantic.css'))
.pipe(gulp.dest(output.packaged))
@@ -312,38 +355,37 @@ gulp.task('package uncompressed css', false, function() {
;
});
gulp.task('package compressed css', false, function() {
- return gulp.src(output.compressed + '**/**.min.css')
- .pipe(debug({verbose: true}))
- .pipe(replace(assetPaths.compressed, assetPaths.packaged))
+ return gulp.src(output.uncompressed + '**/!(*.min|*.map).css')
+ .pipe(replace(assetPaths.uncompressed, assetPaths.packaged))
.pipe(concatCSS('semantic.min.css'))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.packaged))
.pipe(print(log.created))
;
});
-gulp.task('package uncompressed javascript', false, function() {
- return gulp.src(output.uncompressed + '**/*.js')
+gulp.task('package uncompressed js', false, function() {
+ return gulp.src(output.uncompressed + '**/!(*.min|*.map).js')
.pipe(replace(assetPaths.uncompressed, assetPaths.packaged))
- .pipe(concatCSS('semantic.js'))
+ .pipe(concat('semantic.js'))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.packaged))
.pipe(print(log.created))
;
});
-gulp.task('package compressed javascript', false, function() {
- return gulp.src(output.compressed + '**/*.min.js')
- .pipe(replace(assetPaths.compressed, assetPaths.packaged))
- .pipe(concatCSS('semantic.min.js'))
+gulp.task('package compressed js', false, function() {
+ return gulp.src(output.uncompressed + '**/!(*.min|*.map).js')
+ .pipe(replace(assetPaths.uncompressed, assetPaths.packaged))
+ .pipe(concat('semantic.min.js'))
+ .pipe(uglify(settings.uglify))
+ .pipe(header(banner, settings.header))
.pipe(gulp.dest(output.packaged))
.pipe(print(log.created))
;
});
-gulp.task('default', false, [
- 'watch'
-]);
-
-
/*--------------
Maintainer
---------------*/
diff --git a/package.json b/package.json
index 85dc417ff..d727df323 100755
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"jquery": "x.x.x"
},
"devDependencies": {
+ "better-console": "^0.2.3",
"del": "^0.1.3",
"gulp": "^3.8.8",
"gulp-autoprefixer": "^1.0.1",
@@ -31,6 +32,7 @@
"gulp-csscomb": "^3.0.3",
"gulp-debug": "^1.0.1",
"gulp-flatten": "0.0.4",
+ "gulp-header": "^1.1.1",
"gulp-help": "^1.2.0",
"gulp-karma": "0.0.4",
"gulp-less": "^1.3.6",
@@ -38,13 +40,13 @@
"gulp-notify": "^2.0.0",
"gulp-plumber": "^0.6.6",
"gulp-print": "^1.1.0",
+ "gulp-prompt": "^0.1.1",
"gulp-rename": "^1.2.0",
"gulp-replace": "^0.4.0",
"gulp-sourcemaps": "^1.2.4",
"gulp-uglify": "^1.0.1",
"gulp-util": "^3.0.1",
"gulp-watch": "^1.1.0",
- "require-dir": "^0.1.0",
"rtlcss": "^1.4.0"
}
}
diff --git a/src/definitions/elements/button.less b/src/definitions/elements/button.less
index ac133b2e5..75d68068c 100644
--- a/src/definitions/elements/button.less
+++ b/src/definitions/elements/button.less
@@ -22,7 +22,6 @@
Button
*******************************/
-/* Prototype */
.ui.button {
cursor: pointer;
display: inline-block;
diff --git a/src/themes/default/assets/fonts/icons.svg b/src/themes/default/assets/fonts/icons.svg
index a9f846950..047844b8e 100644
--- a/src/themes/default/assets/fonts/icons.svg
+++ b/src/themes/default/assets/fonts/icons.svg
@@ -501,4 +501,4 @@
-
\ No newline at end of file
+
\ No newline at end of file