summaryrefslogtreecommitdiffstats
path: root/src/wwwroot/libraries/fomantic/tasks/build/javascript.js
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/build/javascript.js
downloadfagprove-3f4c0720e1e3421431e7baa20882a4a4512a7fab.tar.xz
fagprove-3f4c0720e1e3421431e7baa20882a4a4512a7fab.zip
InitialHEADmaster
Diffstat (limited to 'src/wwwroot/libraries/fomantic/tasks/build/javascript.js')
-rw-r--r--src/wwwroot/libraries/fomantic/tasks/build/javascript.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/wwwroot/libraries/fomantic/tasks/build/javascript.js b/src/wwwroot/libraries/fomantic/tasks/build/javascript.js
new file mode 100644
index 0000000..3c97010
--- /dev/null
+++ b/src/wwwroot/libraries/fomantic/tasks/build/javascript.js
@@ -0,0 +1,152 @@
+/*******************************
+ Build Task
+ *******************************/
+
+const
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+
+ // gulp dependencies
+ chmod = require('gulp-chmod'),
+ concat = require('gulp-concat'),
+ dedupe = require('gulp-dedupe'),
+ flatten = require('gulp-flatten'),
+ gulpif = require('gulp-if'),
+ header = require('gulp-header'),
+ normalize = require('normalize-path'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print').default,
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ uglify = require('gulp-uglify'),
+
+ // config
+ config = require('./../config/user'),
+ docsConfig = require('./../config/docs'),
+ tasks = require('../config/tasks'),
+ install = require('../config/project/install'),
+
+ // shorthand
+ globs = config.globs,
+ assets = config.paths.assets,
+
+ banner = tasks.banner,
+ filenames = tasks.filenames,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings
+;
+
+/**
+ * Concat and uglify the Javascript files
+ * @param {string|array} src - source files
+ * @param type
+ * @param config
+ * @return {*}
+ */
+function build(src, type, config) {
+ return gulp.src(src)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
+ .pipe(gulp.dest(config.paths.output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
+ .pipe(gulp.dest(config.paths.output.compressed))
+ .pipe(print(log.created))
+ ;
+}
+
+/**
+ * Packages the Javascript files in dist
+ * @param {string} type - type of the js processing (none, rtl, docs)
+ * @param {boolean} compress - should the output be compressed
+ */
+function pack(type, compress) {
+ const output = type === 'docs' ? docsConfig.paths.output : config.paths.output;
+ const concatenatedJS = compress ? filenames.concatenatedMinifiedJS : filenames.concatenatedJS;
+
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
+ .pipe(plumber())
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concat(concatenatedJS))
+ .pipe(gulpif(compress, uglify(settings.concatUglify)))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermissions, chmod(config.parsedPermissions)))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+}
+
+function buildJS(src, type, config, callback) {
+ if (!install.isSetup()) {
+ console.error('Cannot build Javascript. Run "gulp install" to set-up Semantic');
+ callback();
+ return;
+ }
+
+ if (callback === undefined) {
+ callback = config;
+ config = type;
+ type = src;
+ src = config.paths.source.definitions + '/**/' + config.globs.components + (config.globs.ignored || '') + '.js';
+ }
+
+ // copy source javascript
+ const js = () => build(src, type, config);
+ js.displayName = "Building un/compressed Javascript";
+
+ const packUncompressed = () => pack(type, false);
+ packUncompressed.displayName = 'Packing uncompressed Javascript';
+
+ const packCompressed = () => pack(type, true);
+ packCompressed.displayName = 'Packing compressed Javascript';
+
+ gulp.series(js, gulp.parallel(packUncompressed, packCompressed))(callback);
+}
+
+module.exports = function (callback) {
+ buildJS(false, config, callback);
+};
+
+// We keep the changed files in an array to call build with all of them at the same time
+let timeout, files = [];
+
+module.exports.watch = function (type, config) {
+ gulp
+ .watch([normalize(config.paths.source.definitions + '/**/*.js')])
+ .on('all', function (event, path) {
+ // We don't handle deleted files yet
+ if (event === 'unlink' || event === 'unlinkDir') {
+ return;
+ }
+
+ // Clear timeout
+ timeout && clearTimeout(timeout);
+
+ // Add file to internal changed files array
+ if (!files.includes(path)) {
+ files.push(path);
+ }
+
+ // Update timeout
+ timeout = setTimeout(() => {
+ console.log('Change in javascript detected');
+ // Copy files to build in another array
+ const buildFiles = [...files];
+ // Call method
+ gulp.series((callback) => buildJS(buildFiles, type, config, callback))();
+ // Reset internal changed files array
+ files = [];
+ }, 1000);
+ });
+};
+
+module.exports.buildJS = buildJS; \ No newline at end of file