diff options
| author | ivar <i@oiee.no> | 2025-10-19 23:41:23 +0200 |
|---|---|---|
| committer | ivar <i@oiee.no> | 2025-10-19 23:41:23 +0200 |
| commit | 3f4c0720e1e3421431e7baa20882a4a4512a7fab (patch) | |
| tree | 734ca81d7d0841d8863e3f523ebba14c282dc681 /src/wwwroot/libraries/fomantic/tasks/docs | |
| download | fagprove-3f4c0720e1e3421431e7baa20882a4a4512a7fab.tar.xz fagprove-3f4c0720e1e3421431e7baa20882a4a4512a7fab.zip | |
Diffstat (limited to 'src/wwwroot/libraries/fomantic/tasks/docs')
| -rw-r--r-- | src/wwwroot/libraries/fomantic/tasks/docs/build.js | 111 | ||||
| -rw-r--r-- | src/wwwroot/libraries/fomantic/tasks/docs/metadata.js | 138 | ||||
| -rw-r--r-- | src/wwwroot/libraries/fomantic/tasks/docs/serve.js | 95 |
3 files changed, 344 insertions, 0 deletions
diff --git a/src/wwwroot/libraries/fomantic/tasks/docs/build.js b/src/wwwroot/libraries/fomantic/tasks/docs/build.js new file mode 100644 index 0000000..9172c5e --- /dev/null +++ b/src/wwwroot/libraries/fomantic/tasks/docs/build.js @@ -0,0 +1,111 @@ +/******************************* + Build Docs + *******************************/ + +var + gulp = require('gulp'), + + // node dependencies + console = require('better-console'), + fs = require('fs'), + map = require('map-stream'), + + // gulp dependencies + print = require('gulp-print').default, + + // user config + config = require('../config/docs'), + + // install config + tasks = require('../config/tasks'), + configSetup = require('../config/project/config'), + install = require('../config/project/install'), + + // metadata parsing + metadata = require('./metadata'), + + // build methods + buildJS = require('../build/javascript').buildJS, + buildCSS = require('../build/css').buildCSS, + buildAssets = require('../build/assets').buildAssets, + + // shorthand + log = tasks.log +; + + +module.exports = function (callback) { + + // use a different config + config = configSetup.addDerivedValues(config); + + // shorthand + const globs = config.globs; + const output = config.paths.output; + + /*-------------- + Parse metadata + ---------------*/ + + function buildMetaData() { + // parse all *.html.eco in docs repo, data will end up in + // metadata.result object. Note this assumes that the docs + // repository is present and in proper directory location as + // specified by docs.json. + console.info('Building Metadata'); + return gulp.src(config.paths.template.eco + globs.eco) + .pipe(map(metadata.parser)) + .on('end', function () { + fs.mkdirSync(output.metadata, {recursive: true}); + fs.writeFileSync(output.metadata + '/metadata.json', JSON.stringify(metadata.result, null, 2)); + }); + } + + /*-------------- + Copy Examples + ---------------*/ + + function copyExample() { + // copy src/ to server + console.info('Copying examples'); + return gulp.src('examples/**/*.*') + .pipe(gulp.dest(output.examples)) + .pipe(print(log.created)); + } + + + /*-------------- + Copy Source + ---------------*/ + + function copyLess() { + // copy src/ to server + console.info('Copying LESS source'); + return gulp.src('src/**/*.*') + .pipe(gulp.dest(output.less)) + .pipe(print(log.created)); + } + + + /*-------------- + Build + ---------------*/ + + console.info('Building Semantic for docs'); + + if (!install.isSetup()) { + console.error('Cannot build files. Run "gulp install" to set-up Semantic'); + callback(); + return; + } + + gulp.series( + buildMetaData, + copyExample, + copyLess, + (callback) => buildJS('docs', config, callback), + (callback) => buildCSS('docs', config, {}, callback), + (callback) => buildAssets(config, callback) + )(callback); + +}; diff --git a/src/wwwroot/libraries/fomantic/tasks/docs/metadata.js b/src/wwwroot/libraries/fomantic/tasks/docs/metadata.js new file mode 100644 index 0000000..bfc8630 --- /dev/null +++ b/src/wwwroot/libraries/fomantic/tasks/docs/metadata.js @@ -0,0 +1,138 @@ + +/******************************* + Summarize Docs +*******************************/ + +var + // node dependencies + console = require('better-console'), + fs = require('fs'), + YAML = require('yamljs') +; + +var data = {}; + +/** + * Test for prefix in string. + * @param {string} str + * @param {string} prefix + * @return {boolean} + */ +function startsWith(str, prefix) { + return str.indexOf(prefix) === 0; +}; + +function inArray(needle, haystack) { + var length = haystack.length; + for(var i = 0; i < length; i++) { + if(haystack[i] == needle) return true; + } + return false; +} + +/** + * Parses a file for metadata and stores result in data object. + * @param {File} file - object provided by map-stream. + * @param {function(?,File)} - callback provided by map-stream to + * reply when done. + */ +function parser(file, callback) { + // file exit conditions + if(file.isNull()) { + return callback(null, file); // pass along + } + + if(file.isStream()) { + return callback(new Error('Streaming not supported')); + } + + try { + + var + /** @type {string} */ + text = String(file.contents.toString('utf8')), + lines = text.split('\n'), + filename = file.path.substring(0, file.path.length - 4), + key = 'server/documents', + position = filename.indexOf(key) + ; + + // exit conditions + if(!lines) { + return; + } + if(position < 0) { + return callback(null, file); + } + + filename = filename.substring(position + key.length + 1, filename.length); + + var + lineCount = lines.length, + active = false, + yaml = [], + categories = [ + 'UI Element', + 'UI Global', + 'UI Collection', + 'UI View', + 'UI Module', + 'UI Behavior' + ], + index, + meta, + line + ; + + for(index = 0; index < lineCount; index++) { + + line = lines[index]; + + // Wait for metadata block to begin + if(!active) { + if(startsWith(line, '---')) { + active = true; + } + continue; + } + // End of metadata block, stop parsing. + if(startsWith(line, '---')) { + break; + } + yaml.push(line); + } + + + // Parse yaml. + meta = YAML.parse(yaml.join('\n')); + if(meta && meta.type && meta.title && inArray(meta.type, categories) ) { + meta.category = meta.type; + meta.filename = filename; + meta.url = '/' + filename; + meta.title = meta.title; + // Primary key will by filepath + data[meta.element] = meta; + } + else { + // skip + // console.log(meta); + } + + + } + + catch(error) { + console.log(error, filename); + } + + callback(null, file); + +} + +/** + * Export function expected by map-stream. + */ +module.exports = { + result : data, + parser : parser +}; diff --git a/src/wwwroot/libraries/fomantic/tasks/docs/serve.js b/src/wwwroot/libraries/fomantic/tasks/docs/serve.js new file mode 100644 index 0000000..51af308 --- /dev/null +++ b/src/wwwroot/libraries/fomantic/tasks/docs/serve.js @@ -0,0 +1,95 @@ +/******************************* + Serve Docs + *******************************/ +var + gulp = require('gulp'), + + // node dependencies + console = require('better-console'), + + // gulp dependencies + print = require('gulp-print').default, + + // user config + config = require('../config/docs'), + + // task config + tasks = require('../config/tasks'), + configSetup = require('../config/project/config'), + + // shorthand + log = tasks.log, + + css = require('../build/css'), + js = require('../build/javascript'), + assets = require('../build/assets') +; + + +module.exports = function () { + + // use a different config + config = configSetup.addDerivedValues(config); + + console.clear(); + console.log('Watching source files for changes'); + + /*-------------- + Copy Source + ---------------*/ + + gulp + .watch(['src/**/*.*']) + .on('all', function (event, path) { + // We don't handle deleted files yet + if (event === 'unlink' || event === 'unlinkDir') { + return; + } + return gulp.src(path, { + base: 'src/' + }) + .pipe(gulp.dest(config.paths.output.less)) + .pipe(print(log.created)) + ; + }) + ; + + /*-------------- + Copy Examples + ---------------*/ + + gulp + .watch(['examples/**/*.*']) + .on('all', function (event, path) { + // We don't handle deleted files yet + if (event === 'unlink' || event === 'unlinkDir') { + return; + } + return gulp.src(path, { + base: 'examples/' + }) + .pipe(gulp.dest(config.paths.output.examples)) + .pipe(print(log.created)) + ; + }) + ; + + /*-------------- + Watch CSS + ---------------*/ + + css.watch('docs', config); + + /*-------------- + Watch JS + ---------------*/ + + js.watch('docs', config); + + /*-------------- + Watch Assets + ---------------*/ + + assets.watch('docs', config); + +}; |
