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/metadata.js | |
| download | fagprove-master.tar.xz fagprove-master.zip | |
Diffstat (limited to 'src/wwwroot/libraries/fomantic/tasks/docs/metadata.js')
| -rw-r--r-- | src/wwwroot/libraries/fomantic/tasks/docs/metadata.js | 138 |
1 files changed, 138 insertions, 0 deletions
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 +}; |
