* Add nouislider * Add LEDBrightnessComponent * Move LEDBrightnessComponent to correct folder * Add LED brightness page to side menu and device routes * Add LEDBrightnessComponent to device index file * Add LEDBrightnessComponent and NouisliderModule to shared module * Remove ngModelChange from LEDBrightnessComponent until onChange is implemented * Fix stylelint issue in led brightness component * Add nouislider files to webpack.config.js * Add adjusting LED brightness sliders with arrow keys * Various tweaks to LEDBrightnessComponent * Fix linting issues in LEDBrightnessComponent * Allow "::ng-deep" pseudo element in stylelint config * Add reading LED brightness settings from user configuration * led-brightness save * Move slider to its own wrapper component, add debounce for slider change events * Small fixes to imports and exports of SliderWrapperComponent * Fix slide component making change event when initial value is set * Export SliderPips interface * Fix LED Brightness slider pips * Add support for value unit in SliderWrapperComponent * Add a bit of space before LED brightness sliders so the slider handle doesn't go beyond the page in the min position * Implement onDestroy, fix slider pip values and imports in LEDBrightnessComponent * Fix imports, implement onDestroy in SliderWrapperComponent * Move fix for slider pip value style to global styles file * Reorder stylelint rules
482 lines
17 KiB
JavaScript
482 lines
17 KiB
JavaScript
const AOT_BUILD = process.env.AOT_BUILD;
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const ProgressPlugin = require('webpack/lib/ProgressPlugin');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const autoprefixer = require('autoprefixer');
|
|
const postcssUrl = require('postcss-url');
|
|
const cssnano = require('cssnano');
|
|
|
|
const { NoEmitOnErrorsPlugin, SourceMapDevToolPlugin, NamedModulesPlugin } = require('webpack');
|
|
const { GlobCopyWebpackPlugin, BaseHrefWebpackPlugin } = require('@angular/cli/plugins/webpack');
|
|
const { CommonsChunkPlugin } = require('webpack').optimize;
|
|
const { AotPlugin } = require('@ngtools/webpack');
|
|
|
|
const nodeModules = path.join(process.cwd(), 'node_modules');
|
|
const realNodeModules = fs.realpathSync(nodeModules);
|
|
const genDirNodeModules = path.join(process.cwd(), 'src', '$$_gendir', 'node_modules');
|
|
const entryPoints = ["inline","polyfills","sw-register","scripts","styles","vendor","main"];
|
|
const minimizeCss = AOT_BUILD;
|
|
const baseHref = "";
|
|
const deployUrl = "";
|
|
const postcssPlugins = function () {
|
|
// safe settings based on: https://github.com/ben-eb/cssnano/issues/358#issuecomment-283696193
|
|
const importantCommentRe = /@preserve|@license|[@#]\s*source(?:Mapping)?URL|^!/i;
|
|
const minimizeOptions = {
|
|
autoprefixer: false,
|
|
safe: true,
|
|
mergeLonghand: false,
|
|
discardComments: { remove: (comment) => !importantCommentRe.test(comment) }
|
|
};
|
|
return [
|
|
postcssUrl({
|
|
url: (URL) => {
|
|
// Only convert root relative URLs, which CSS-Loader won't process into require().
|
|
if (!URL.startsWith('/') || URL.startsWith('//')) {
|
|
return URL;
|
|
}
|
|
if (deployUrl.match(/:\/\//)) {
|
|
// If deployUrl contains a scheme, ignore baseHref use deployUrl as is.
|
|
return `${deployUrl.replace(/\/$/, '')}${URL}`;
|
|
}
|
|
else if (baseHref.match(/:\/\//)) {
|
|
// If baseHref contains a scheme, include it as is.
|
|
return baseHref.replace(/\/$/, '') +
|
|
`/${deployUrl}/${URL}`.replace(/\/\/+/g, '/');
|
|
}
|
|
else {
|
|
// Join together base-href, deploy-url and the original URL.
|
|
// Also dedupe multiple slashes into single ones.
|
|
return `/${baseHref}/${deployUrl}/${URL}`.replace(/\/\/+/g, '/');
|
|
}
|
|
}
|
|
}),
|
|
autoprefixer(),
|
|
].concat(minimizeCss ? [cssnano(minimizeOptions)] : []);
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
"target": "electron-renderer",
|
|
"resolve": {
|
|
"extensions": [
|
|
".ts",
|
|
".js"
|
|
],
|
|
"modules": [
|
|
"./node_modules",
|
|
"./node_modules"
|
|
],
|
|
"symlinks": true
|
|
},
|
|
"resolveLoader": {
|
|
"modules": [
|
|
"./node_modules",
|
|
"./node_modules"
|
|
]
|
|
},
|
|
"entry": {
|
|
"main": [
|
|
"./src/main-renderer.ts"
|
|
],
|
|
"polyfills": [
|
|
"./src/polyfills.ts"
|
|
],
|
|
"scripts": [
|
|
"script-loader!./node_modules/bootstrap/dist/js/bootstrap.js",
|
|
"script-loader!./node_modules/select2/dist/js/select2.full.js",
|
|
"script-loader!./node_modules/nouislider/distribute/nouislider.js"
|
|
],
|
|
"styles": [
|
|
"./node_modules/bootstrap/dist/css/bootstrap.min.css",
|
|
"./node_modules/nouislider/distribute/nouislider.min.css",
|
|
"./src/styles.scss"
|
|
]
|
|
},
|
|
"output": {
|
|
"path": path.join(__dirname, "../uhk-agent/dist/renderer"),
|
|
"filename": "[name].bundle.js",
|
|
"chunkFilename": "[id].chunk.js"
|
|
},
|
|
"module": {
|
|
"rules": [
|
|
{
|
|
"enforce": "pre",
|
|
"test": /\.js$/,
|
|
"loader": "source-map-loader",
|
|
"exclude": [
|
|
/\/node_modules\//
|
|
]
|
|
},
|
|
{
|
|
"test": /\.json$/,
|
|
"loader": "json-loader"
|
|
},
|
|
{
|
|
"test": /\.html$/,
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"test": /\.(eot|svg)$/,
|
|
"loader": "file-loader?name=[name].[hash:20].[ext]"
|
|
},
|
|
{
|
|
"test": /\.(jpg|png|webp|gif|otf|ttf|woff|woff2|cur|ani)$/,
|
|
"loader": "url-loader?name=[name].[hash:20].[ext]&limit=10000"
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.css$/,
|
|
"use": [
|
|
"exports-loader?module.exports.toString()",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.scss$|\.sass$/,
|
|
"use": [
|
|
"exports-loader?module.exports.toString()",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "sass-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"precision": 8,
|
|
"includePaths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.less$/,
|
|
"use": [
|
|
"exports-loader?module.exports.toString()",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "less-loader",
|
|
"options": {
|
|
"sourceMap": false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.styl$/,
|
|
"use": [
|
|
"exports-loader?module.exports.toString()",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "stylus-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"paths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.css$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.scss$|\.sass$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "sass-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"precision": 8,
|
|
"includePaths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.less$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "less-loader",
|
|
"options": {
|
|
"sourceMap": false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.styl$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "css-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"importLoaders": 1
|
|
}
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "postcss",
|
|
"plugins": postcssPlugins
|
|
}
|
|
},
|
|
{
|
|
"loader": "stylus-loader",
|
|
"options": {
|
|
"sourceMap": false,
|
|
"paths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"test": /\.ts$/,
|
|
"loader": "@ngtools/webpack"
|
|
}
|
|
]
|
|
},
|
|
"plugins": [
|
|
new NoEmitOnErrorsPlugin(),
|
|
new GlobCopyWebpackPlugin({
|
|
"patterns": [
|
|
"assets",
|
|
"favicon.ico"
|
|
],
|
|
"globOptions": {
|
|
"cwd": path.join(process.cwd(), "src"),
|
|
"dot": true,
|
|
"ignore": "**/.gitkeep"
|
|
}
|
|
}),
|
|
new ProgressPlugin(),
|
|
new HtmlWebpackPlugin({
|
|
"template": "./src/index.html",
|
|
"filename": "./index.html",
|
|
"hash": false,
|
|
"inject": true,
|
|
"compile": true,
|
|
"favicon": false,
|
|
"minify": !AOT_BUILD ? false : {
|
|
removeAttributeQuotes: true,
|
|
collapseWhitespace: true,
|
|
html5: true,
|
|
minifyCSS: true,
|
|
removeComments: true,
|
|
removeEmptyAttributes: true,
|
|
},
|
|
"cache": true,
|
|
"showErrors": true,
|
|
"chunks": "all",
|
|
"excludeChunks": [],
|
|
"title": "Webpack App",
|
|
"xhtml": true,
|
|
"chunksSortMode": function sort(left, right) {
|
|
let leftIndex = entryPoints.indexOf(left.names[0]);
|
|
let rightindex = entryPoints.indexOf(right.names[0]);
|
|
if (leftIndex > rightindex) {
|
|
return 1;
|
|
}
|
|
else if (leftIndex < rightindex) {
|
|
return -1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
}),
|
|
new BaseHrefWebpackPlugin({ baseHref: '' }),
|
|
new CommonsChunkPlugin({
|
|
"minChunks": 2,
|
|
"async": "common"
|
|
}),
|
|
new CommonsChunkPlugin({
|
|
"name": [
|
|
"inline"
|
|
],
|
|
"minChunks": null
|
|
}),
|
|
new CommonsChunkPlugin({
|
|
"name": [
|
|
"vendor"
|
|
],
|
|
"minChunks": (module) => {
|
|
return module.resource
|
|
&& (module.resource.startsWith(nodeModules)
|
|
|| module.resource.startsWith(genDirNodeModules)
|
|
|| module.resource.startsWith(realNodeModules));
|
|
},
|
|
"chunks": [
|
|
"main"
|
|
]
|
|
}),
|
|
new SourceMapDevToolPlugin({
|
|
"filename": "[file].map[query]",
|
|
"moduleFilenameTemplate": "[resource-path]",
|
|
"fallbackModuleFilenameTemplate": "[resource-path]?[hash]",
|
|
"sourceRoot": "webpack:///"
|
|
}),
|
|
new NamedModulesPlugin({}),
|
|
new AotPlugin({
|
|
"mainPath": "main-renderer.ts",
|
|
"hostReplacementPaths": {
|
|
"environments/environment.ts": "environments/environment.ts"
|
|
},
|
|
"exclude": [],
|
|
"tsConfigPath": "src/tsconfig.renderer.json",
|
|
"skipCodeGeneration": !process.env.AOT_BUILD
|
|
})
|
|
],
|
|
"node": {
|
|
"fs": true,
|
|
"global": true,
|
|
"crypto": "empty",
|
|
"tls": "empty",
|
|
"net": "empty",
|
|
"process": true,
|
|
"module": false,
|
|
"clearImmediate": false,
|
|
"setImmediate": false
|
|
},
|
|
"devServer": {
|
|
"historyApiFallback": true
|
|
}
|
|
};
|