mirror of
https://github.com/AzuraCast/AzuraCast.git
synced 2024-06-17 22:47:04 +00:00
272 lines
6.7 KiB
JavaScript
272 lines
6.7 KiB
JavaScript
'use strict';
|
|
|
|
const gulp = require('gulp');
|
|
const babel = require('gulp-babel');
|
|
const del = require('del');
|
|
const rev = require('gulp-rev');
|
|
const concat = require('gulp-concat');
|
|
const uglify = require('gulp-uglify');
|
|
const sourcemaps = require('gulp-sourcemaps');
|
|
const sass = require('gulp-sass');
|
|
const clean_css = require('gulp-clean-css');
|
|
const revdel = require('gulp-rev-delete-original');
|
|
const webpackStream = require('webpack-stream');
|
|
const gulpIgnore = require('gulp-ignore');
|
|
|
|
var jsFiles = {
|
|
// Core Libraries
|
|
'jquery': {
|
|
base: 'node_modules/jquery/dist',
|
|
files: [
|
|
'node_modules/jquery/dist/jquery.min.js'
|
|
]
|
|
},
|
|
'vue': {
|
|
base: 'node_modules/vue/dist',
|
|
files: [
|
|
'node_modules/vue/dist/vue.js',
|
|
'node_modules/vue/dist/vue.min.js'
|
|
]
|
|
},
|
|
'lodash': {
|
|
base: 'node_modules/lodash',
|
|
files: [
|
|
'node_modules/lodash/lodash.min.js'
|
|
]
|
|
},
|
|
|
|
// Main per-layout dependencies
|
|
'bootstrap': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/bootstrap/dist/js/bootstrap.bundle.min.js'
|
|
]
|
|
},
|
|
'bootstrap-notify': {
|
|
base: 'node_modules/bootstrap-notify',
|
|
files: [
|
|
'node_modules/bootstrap-notify/bootstrap-notify.min.js'
|
|
]
|
|
},
|
|
'sweetalert': {
|
|
base: 'node_modules/sweetalert/dist',
|
|
files: [
|
|
'node_modules/sweetalert/dist/sweetalert.min.js'
|
|
]
|
|
},
|
|
'autosize': {
|
|
base: 'node_modules/autosize/dist',
|
|
files: [
|
|
'node_modules/autosize/dist/autosize.min.js'
|
|
]
|
|
},
|
|
'material-icons': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/material-icons/iconfont/material-icons.css',
|
|
'node_modules/material-icons/iconfont/MaterialIcons-Regular*'
|
|
]
|
|
},
|
|
'roboto-fontface': {
|
|
base: 'node_modules/roboto-fontface',
|
|
files: [
|
|
'node_modules/roboto-fontface/css/roboto/roboto-fontface.css',
|
|
'node_modules/roboto-fontface/fonts/roboto/*'
|
|
]
|
|
},
|
|
'dirrty': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/dirrty/dist/jquery.dirrty.js'
|
|
]
|
|
},
|
|
|
|
// Individual libraries
|
|
'store': {
|
|
base: 'node_modules/store',
|
|
files: [
|
|
'node_modules/store/store.min.js'
|
|
]
|
|
},
|
|
'zxcvbn': {
|
|
base: 'node_modules/zxcvbn/dist',
|
|
files: [
|
|
'node_modules/zxcvbn/dist/zxcvbn.js'
|
|
]
|
|
},
|
|
'chartjs': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/chart.js/dist/Chart.min.js',
|
|
'node_modules/chart.js/dist/Chart.min.css',
|
|
'node_modules/chartjs-plugin-colorschemes/dist/chartjs-plugin-colorschemes.min.js'
|
|
]
|
|
},
|
|
'chosen': {
|
|
base: 'node_modules/chosen-js',
|
|
files: [
|
|
'node_modules/chosen-js/chosen.jquery.min.js',
|
|
'node_modules/chosen-js/chosen.min.css',
|
|
'node_modules/chosen-js/chosen-sprite*.png'
|
|
]
|
|
},
|
|
'moment': {
|
|
base: 'node_modules/moment/min',
|
|
files: [
|
|
'node_modules/moment/min/moment.min.js',
|
|
'node_modules/moment/min/locales.min.js'
|
|
]
|
|
},
|
|
'moment-timezone': {
|
|
base: 'node_modules/moment-timezone/builds',
|
|
files: [
|
|
'node_modules/moment-timezone/builds/moment-timezone-with-data-10-year-range.min.js'
|
|
]
|
|
},
|
|
'daterangepicker': {
|
|
base: 'node_modules/bootstrap-daterangepicker',
|
|
files: [
|
|
'node_modules/bootstrap-daterangepicker/daterangepicker.*'
|
|
]
|
|
},
|
|
'codemirror': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/codemirror/lib/codemirror.*',
|
|
'node_modules/codemirror/mode/css/css.js'
|
|
]
|
|
},
|
|
'clipboard': {
|
|
base: 'node_modules/clipboard/dist',
|
|
files: [
|
|
'node_modules/clipboard/dist/clipboard.min.js'
|
|
]
|
|
},
|
|
'fancybox': {
|
|
base: 'node_modules/@fancyapps/fancybox/dist',
|
|
files: [
|
|
'node_modules/@fancyapps/fancybox/dist/jquery.fancybox.min.*'
|
|
]
|
|
},
|
|
'flowjs': {
|
|
base: 'node_modules/@flowjs/flow.js/dist',
|
|
files: [
|
|
'node_modules/@flowjs/flow.js/dist/flow.min.js'
|
|
]
|
|
},
|
|
'leaflet': {
|
|
base: 'node_modules/leaflet/dist',
|
|
files: [
|
|
'node_modules/leaflet/dist/leaflet.js',
|
|
'node_modules/leaflet/dist/leaflet.css',
|
|
'node_modules/leaflet/dist/images/*'
|
|
]
|
|
},
|
|
'leaflet-fullscreen': {
|
|
base: 'node_modules/leaflet.fullscreen',
|
|
files: [
|
|
'node_modules/leaflet.fullscreen/Control.FullScreen.js',
|
|
'node_modules/leaflet.fullscreen/Control.FullScreen.css',
|
|
'node_modules/leaflet.fullscreen/icon-*.png'
|
|
]
|
|
},
|
|
'nchan': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/nchan/NchanSubscriber.js'
|
|
]
|
|
},
|
|
'webcaster': {
|
|
base: null,
|
|
files: [
|
|
'js/webcaster/*.js'
|
|
]
|
|
},
|
|
'bootgrid': {
|
|
base: null,
|
|
files: [
|
|
'js/bootgrid/jquery.bootgrid.min.css',
|
|
'js/bootgrid/jquery.bootgrid.updated.js'
|
|
]
|
|
},
|
|
'bootstrap-vue': {
|
|
base: null,
|
|
files: [
|
|
'node_modules/bootstrap-vue/dist/bootstrap-vue.min.js',
|
|
'node_modules/bootstrap-vue/dist/bootstrap-vue.min.css'
|
|
]
|
|
}
|
|
};
|
|
|
|
var defaultTasks = Object.keys(jsFiles);
|
|
|
|
defaultTasks.forEach(function (libName) {
|
|
gulp.task('scripts:' + libName, function () {
|
|
return gulp.src(jsFiles[libName].files, {
|
|
base: jsFiles[libName].base
|
|
}).pipe(gulp.dest('../web/static/dist/lib/' + libName));
|
|
});
|
|
});
|
|
|
|
gulp.task('bundle_deps', gulp.parallel(
|
|
defaultTasks.map(function (name) {
|
|
return 'scripts:' + name;
|
|
})
|
|
));
|
|
|
|
gulp.task('clean', function () {
|
|
return del([
|
|
'../web/static/dist/**/*',
|
|
'../web/static/assets.json',
|
|
'../web/static/webpack.json'
|
|
], { force: true });
|
|
});
|
|
|
|
gulp.task('concat-js', function () {
|
|
return gulp.src('./js/inc/*.js')
|
|
.pipe(sourcemaps.init())
|
|
.pipe(babel({
|
|
presets: ['@babel/env']
|
|
}))
|
|
.pipe(concat('app.js'))
|
|
.pipe(uglify())
|
|
.pipe(sourcemaps.write())
|
|
.pipe(gulp.dest('../web/static/dist'));
|
|
});
|
|
|
|
gulp.task('build-vue', function () {
|
|
return gulp.src(['vue/*.js', 'vue/*.vue'])
|
|
.pipe(webpackStream(require('./webpack.config.js')))
|
|
.pipe(gulpIgnore.exclude('webpack.json'))
|
|
.pipe(babel({
|
|
presets: ['@babel/env']
|
|
}))
|
|
.pipe(uglify())
|
|
.pipe(gulp.dest('../web/static/dist'));
|
|
});
|
|
|
|
gulp.task('build-js', function () {
|
|
return gulp.src(['./js/*.js'])
|
|
.pipe(sourcemaps.init())
|
|
.pipe(uglify())
|
|
.pipe(sourcemaps.write())
|
|
.pipe(gulp.dest('../web/static/dist'));
|
|
});
|
|
|
|
gulp.task('build-css', function () {
|
|
return gulp.src(['./scss/dark.scss', './scss/light.scss'])
|
|
.pipe(sourcemaps.init())
|
|
.pipe(sass())
|
|
.pipe(clean_css())
|
|
.pipe(sourcemaps.write())
|
|
.pipe(gulp.dest('../web/static/dist'));
|
|
});
|
|
|
|
gulp.task('default', gulp.series('clean', gulp.parallel('concat-js', 'build-vue', 'build-js', 'build-css', 'bundle_deps'), function () {
|
|
return gulp.src(['../web/static/dist/**/*.{js,css}'], { base: '../web/static/' })
|
|
.pipe(rev())
|
|
.pipe(revdel())
|
|
.pipe(gulp.dest('../web/static/'))
|
|
.pipe(rev.manifest('assets.json'))
|
|
.pipe(gulp.dest('../web/static/'));
|
|
})); |