summaryrefslogtreecommitdiffstats
path: root/src/wwwroot/libraries/fomantic/tasks/docs
diff options
context:
space:
mode:
authorivar <i@oiee.no>2025-10-19 23:41:23 +0200
committerivar <i@oiee.no>2025-10-19 23:41:23 +0200
commit3f4c0720e1e3421431e7baa20882a4a4512a7fab (patch)
tree734ca81d7d0841d8863e3f523ebba14c282dc681 /src/wwwroot/libraries/fomantic/tasks/docs
downloadfagprove-master.tar.xz
fagprove-master.zip
InitialHEADmaster
Diffstat (limited to 'src/wwwroot/libraries/fomantic/tasks/docs')
-rw-r--r--src/wwwroot/libraries/fomantic/tasks/docs/build.js111
-rw-r--r--src/wwwroot/libraries/fomantic/tasks/docs/metadata.js138
-rw-r--r--src/wwwroot/libraries/fomantic/tasks/docs/serve.js95
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);
+
+};