separate main and docs gulp files for easier maintenance

This commit is contained in:
Kevin Ross 2016-03-09 17:08:03 -06:00
parent 0dd3573840
commit 2dafee14dc
2 changed files with 153 additions and 142 deletions

129
gulp-docs.js Normal file
View File

@ -0,0 +1,129 @@
import {Preset, Clean, Copy, Jekyll, MinifyCss, Sass, RollupEs, RollupUmd, RollupIife, ScssLint, EsLint, TaskSeries, Uglify} from 'gulp-pipeline/src/index'
//import gulp from 'gulp'
//import findup from 'findup-sync'
//import pkg from './package.json'
//import moment from 'moment'
const referenceDocNotice =
`$1\n
[//]: # DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by gulp docs:copy:bs\n
{% callout info %}\n**Bootstrap Reference Documentation**
This is a part of the reference documentation from <a href="http://getbootstrap.com">Bootstrap</a>.
It is included here to demonstrate rendering with Material Design for Bootstrap default styling.
See the <a href="/material-design/buttons">Material Design</a> section for more elements and customization options.
{% endcallout %}
\n\n$2`
const copyProcessor = (content, srcpath) => { // https://regex101.com/r/cZ7aO8/2
return content
.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice) // insert docs reference
.replace(/Fancy display heading/, 'Fancy heading') // remove sample text 'display' as this is a particular MD style and is confusing
}
const preset = Preset.baseline({
javascripts: {
source: {options: {cwd: 'docs/assets/js/src'}},
watch: {options: {cwd: 'docs/assets/js/src'}},
test: {options: {cwd: 'docs/assets/js/tests'}},
dest: 'docs/dist'
},
stylesheets: {
source: {options: {cwd: 'docs/assets/scss'}},
watch: {options: {cwd: 'docs/assets/scss'}},
dest: 'docs/dist'
}
})
const prefix = {task: {prefix: 'docs:'}}
export default function (gulp, options) {
let javascripts = [
new RollupIife(gulp, preset, prefix, options.rollupConfig, {
options: {
dest: 'docs.iife.js',
moduleName: 'docs'
}
}),
new Uglify(gulp, preset, prefix, {
task: {name: 'vendor:uglify'},
source: {options: {cwd: 'docs/assets/js/vendor'}},
options: {dest: 'docs-vendor.min.js'}
})
]
let eslint = new EsLint(gulp, preset, prefix)
let scsslint = new ScssLint(gulp, preset, prefix, {
source: {glob: ['**/*.scss', '!docs.scss']},
watch: {glob: ['**/*.scss', '!docs.scss']}
})
let linters = [scsslint, eslint]
let sass = new Sass(gulp, preset, prefix)
let jekyll = new Jekyll(gulp, preset, prefix, {options: {raw: 'baseurl: "/bootstrap-material-design"'}})
new TaskSeries(gulp, 'default', [
new Clean(gulp, preset),
linters,
[
sass,
javascripts
],
new MinifyCss(gulp, preset, prefix)
], prefix)
new TaskSeries(gulp, 'lint', linters, prefix)
new TaskSeries(gulp, 'js', [eslint, javascripts], prefix)
new TaskSeries(gulp, 'css', [scsslint, sass], prefix)
// docs copy
new TaskSeries(gulp, 'copy:bs-docs', [
new Copy(gulp, preset, prefix, {
task: {name: 'copy:bs-docs-content'},
source: {
options: {cwd: '../bootstrap/docs/content'},
glob: ['**/*']
},
dest: 'docs/content/',
process: copyProcessor
}),
new Copy(gulp, preset, prefix, {
task: {name: 'copy:bs-docs-components'},
source: {
options: {cwd: '../bootstrap/docs/components'},
glob: ['**/*']
},
dest: 'docs/components/',
process: copyProcessor
}),
new Copy(gulp, preset, prefix, {
task: {name: 'copy:bs-docs-scss'},
source: {
options: {cwd: '../bootstrap/docs/assets/scss'},
glob: ['**/*', '!docs.scss'] // keep variable customizations
},
dest: 'docs/assets/scss/',
process: (content, srcpath) => {
return content.replace(/([\s\S]+)/mg, '// DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by gulp docs:copy:bs\n\n$1');
}
}),
new Copy(gulp, preset, prefix, {
task: {name: 'copy:bs-docs-plugins'},
source: {
options: {cwd: '../bootstrap/docs/_plugins'},
glob: ['**/*', '!bridge.rb']
},
dest: 'docs/_plugins/'
}),
new Copy(gulp, preset, prefix, {
task: {name: 'copy:bs-docs-js-vendor'},
source: {
options: {cwd: '../bootstrap/docs/assets/js/vendor'},
glob: [
'**/*',
'!tether.min.js',
'!jquery.min.js'
]
},
dest: 'docs/assets/js/vendor/'
}, prefix)
])
}

View File

@ -1,17 +1,11 @@
import {Preset, Clean, Copy, Jekyll, MinifyCss, Sass, RollupEs, RollupUmd, RollupIife, ScssLint, EsLint, TaskSeries, Uglify} from 'gulp-pipeline/src/index'
// debug the project source - remove for repo
//import {Clean, CleanDigest, Images, MinifyCss, Sass, RollupIife, ScssLint, EsLint, Rev, TaskSeries} from 'gulp-pipeline'
//import Preset from '../../../gulp-pipeline/src/preset'
import extend from 'extend'
import stringify from 'stringify-object'
import gulp from 'gulp'
import findup from 'findup-sync'
const node_modules = findup('node_modules')
import pkg from './package.json'
import moment from 'moment'
import gulpDocs from './gulp-docs'
const node_modules = findup('node_modules')
let preset = Preset.baseline({
javascripts: {
@ -60,163 +54,51 @@ let rollupConfig = {
}
let rollups = [
new RollupEs(gulp, preset, extend(true, {}, rollupConfig, {options: {dest: 'bootstrap-material-design.es.js'}})),
new RollupUmd(gulp, preset, extend(true, {}, rollupConfig, {
new RollupEs(gulp, preset, rollupConfig, {options: {dest: 'bootstrap-material-design.es.js'}}),
new RollupUmd(gulp, preset, rollupConfig, {
options: {
dest: 'bootstrap-material-design.umd.js',
moduleName: 'bootstrapMaterialDesign'
}
})),
new RollupIife(gulp, preset, extend(true, {}, rollupConfig, {
}),
new RollupIife(gulp, preset, rollupConfig, {
options: {
dest: 'bootstrap-material-design.iife.js',
moduleName: 'bootstrapMaterialDesign'
}
})),
}),
]
let eslint = new EsLint(gulp, preset)
let scsslint = new ScssLint(gulp, preset)
let sass = new Sass(gulp, preset)
let lint = [scsslint, eslint]
let linters = [scsslint, eslint]
// instantiate ordered array of recipes (for each instantiation the tasks will be created e.g. sass and sass:watch)
let recipes = [
new TaskSeries(gulp, 'default', [
new Clean(gulp, preset),
lint,
linters,
[
sass,
rollups
],
new MinifyCss(gulp, preset)
]
// Simple helper to create the default and watch tasks as a sequence of the recipes already defined
new TaskSeries(gulp, 'default', recipes)
new TaskSeries(gulp, 'lint', lint)
])
new TaskSeries(gulp, 'lint', linters)
new TaskSeries(gulp, 'js', [eslint, rollups])
new TaskSeries(gulp, 'css', [scsslint, sass])
/**
* DOCS
*/
let docsPreset = Preset.baseline({
javascripts: {
source: {options: {cwd: 'docs/assets/js/src'}},
watch: {options: {cwd: 'docs/assets/js/src'}},
test: {options: {cwd: 'docs/assets/js/tests'}},
dest: 'docs/dist'
},
stylesheets: {
source: {options: {cwd: 'docs/assets/scss'}},
watch: {options: {cwd: 'docs/assets/scss'}},
dest: 'docs/dist'
}
})
gulpDocs(gulp, {rollupConfig: rollupConfig})
const docsConfig = {task: {prefix: 'docs:'}}
let docs = [
[
new ScssLint(gulp, docsPreset, docsConfig, {
source: {glob: ['**/*.scss', '!docs.scss']},
watch: {glob: ['**/*.scss', '!docs.scss']}
}),
new EsLint(gulp, docsPreset, docsConfig)
],
[
new RollupIife(gulp, docsPreset, docsConfig, rollupConfig, {
options: {
dest: 'docs.iife.js',
moduleName: 'docs'
}
}),
new Uglify(gulp, docsPreset, docsConfig, {
task: {name: 'vendor:uglify'},
source: {options: {cwd: 'docs/assets/js/vendor'}},
options: {dest: 'docs-vendor.min.js'}
}),
new Sass(gulp, docsPreset, docsConfig)
]
]
const referenceDocNotice =
`$1\n
[//]: # DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by gulp docs:copy:bs\n
{% callout info %}\n**Bootstrap Reference Documentation**
This is a part of the reference documentation from <a href="http://getbootstrap.com">Bootstrap</a>.
It is included here to demonstrate rendering with Material Design for Bootstrap default styling.
See the <a href="/material-design/buttons">Material Design</a> section for more elements and customization options.
{% endcallout %}
\n\n$2`
const docsProcess = (content, srcpath) => { // https://regex101.com/r/cZ7aO8/2
return content
.replace(/(---[\s\S]+?---)([\s\S]+)/mg, referenceDocNotice) // insert docs reference
.replace(/Fancy display heading/, 'Fancy heading') // remove sample text 'display' as this is a particular MD style and is confusing
}
let bsDocs = [
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:bs-docs-content'},
source: {
options: {cwd: '../bootstrap/docs/content'},
glob: ['**/*']
},
dest: 'docs/content/',
process: docsProcess
}),
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:bs-docs-components'},
source: {
options: {cwd: '../bootstrap/docs/components'},
glob: ['**/*']
},
dest: 'docs/components/',
process: docsProcess
}),
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:bs-docs-scss'},
source: {
options: {cwd: '../bootstrap/docs/assets/scss'},
glob: ['**/*', '!docs.scss'] // keep variable customizations
},
dest: 'docs/assets/scss/',
process: (content, srcpath) => {
return content.replace(/([\s\S]+)/mg, '// DO NOT EDIT IT WILL BE OVERWRITTEN - copy of bootstrap documentation generated by gulp docs:copy:bs\n\n$1');
}
}),
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:bs-docs-plugins'},
source: {
options: {cwd: '../bootstrap/docs/_plugins'},
glob: ['**/*', '!bridge.rb']
},
dest: 'docs/_plugins/'
}),
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:bs-docs-js-vendor'},
source: {
options: {cwd: '../bootstrap/docs/assets/js/vendor'},
glob: [
'**/*',
'!tether.min.js',
'!jquery.min.js'
]
},
dest: 'docs/assets/js/vendor/'
})
]
new TaskSeries(gulp, 'docs:copy:bs', bsDocs)
new Copy(gulp, docsPreset, docsConfig, {
task: {name: 'copy:dist'},
source: {
options: {cwd: 'dist'},
glob: ['js/*.iife*', 'css/*.*']
},
dest: 'docs/dist/'
})
new Jekyll(gulp, docsPreset, docsConfig, {options: {raw: 'baseurl: "/bootstrap-material-design"'}})
//
//new Copy(gulp, preset, {
// task: {name: 'copy:dist-to-docs'},
// source: {
// options: {cwd: 'dist'},
// glob: ['js/*.iife*', 'css/*.*']
// },
// dest: 'docs/dist/'
//})
//
//new TaskSeries(gulp, 'prep-release', [])