505 lines
13 KiB
JavaScript
505 lines
13 KiB
JavaScript
/* --------------------------------------------------------------------
|
|
* Fill in module info here.
|
|
*/
|
|
|
|
var info = {
|
|
entries: {
|
|
"apps/apps": [
|
|
"apps/index.jsx"
|
|
],
|
|
|
|
"dashboard/dashboard": [
|
|
"dashboard/list.js",
|
|
],
|
|
|
|
"docker/docker": [
|
|
"docker/containers.js"
|
|
],
|
|
"docker/console": [
|
|
"docker/console.js",
|
|
],
|
|
|
|
"kdump/kdump": [
|
|
"kdump/kdump.js",
|
|
"kdump/kdump.css",
|
|
],
|
|
|
|
"kubernetes/kubernetes": [
|
|
"kubernetes/styles/main.less",
|
|
"kubernetes/scripts/main.js",
|
|
],
|
|
"kubernetes/registry": [
|
|
"kubernetes/styles/registry.less",
|
|
"kubernetes/scripts/registry.js",
|
|
],
|
|
|
|
"machines/machines": [
|
|
"machines/index.js",
|
|
"machines/machines.less",
|
|
],
|
|
|
|
"machines/vnc": [
|
|
"machines/vnc.js",
|
|
],
|
|
|
|
"ovirt/vnc": [
|
|
"ovirt/vnc.js",
|
|
],
|
|
|
|
"networkmanager/network": [
|
|
"networkmanager/interfaces.js",
|
|
"networkmanager/utils.js"
|
|
],
|
|
|
|
"ostree/ostree": [
|
|
"ostree/app.js",
|
|
"ostree/ostree.less",
|
|
],
|
|
|
|
"ovirt/ovirt": [
|
|
"ovirt/index.js",
|
|
"ovirt/ovirt.less",
|
|
],
|
|
|
|
"playground/jquery-patterns": [
|
|
"playground/jquery-patterns.js",
|
|
],
|
|
"playground/metrics": [
|
|
"playground/metrics.js",
|
|
],
|
|
"playground/pkgs": [
|
|
"playground/pkgs.js",
|
|
],
|
|
"playground/plot": [
|
|
"playground/plot.js",
|
|
],
|
|
"playground/react-patterns": [
|
|
"playground/react-patterns",
|
|
],
|
|
"playground/service": [
|
|
"playground/service",
|
|
],
|
|
"playground/speed": [
|
|
"playground/speed",
|
|
],
|
|
"playground/test": [
|
|
"playground/test",
|
|
],
|
|
"playground/translate": [
|
|
"playground/translate",
|
|
],
|
|
|
|
"realmd/domain": [
|
|
"realmd/operation.js",
|
|
],
|
|
|
|
"selinux/selinux": [
|
|
"selinux/setroubleshoot.js",
|
|
"selinux/setroubleshoot.css",
|
|
],
|
|
|
|
"shell/index": [
|
|
"shell/index.js",
|
|
"shell/shell.less",
|
|
],
|
|
"shell/index-stub": [
|
|
"shell/index-stub.js",
|
|
],
|
|
"shell/index-no-machines": [
|
|
"shell/index-no-machines.js",
|
|
],
|
|
|
|
"sosreport/sosreport": [
|
|
"sosreport/index.js",
|
|
"sosreport/sosreport.css",
|
|
],
|
|
|
|
"storaged/storage": [
|
|
"storaged/devices.js"
|
|
],
|
|
|
|
"subscriptions/subscriptions": [
|
|
"subscriptions/main.js",
|
|
"subscriptions/subscriptions.css",
|
|
],
|
|
|
|
"systemd/services": [
|
|
"systemd/init.js",
|
|
],
|
|
"systemd/logs": [
|
|
"systemd/logs.js",
|
|
],
|
|
"systemd/system": [
|
|
"systemd/host.js",
|
|
"systemd/host.css",
|
|
],
|
|
"systemd/terminal": [
|
|
"systemd/terminal.jsx",
|
|
"systemd/terminal.css",
|
|
],
|
|
|
|
"tuned/performance": [
|
|
"tuned/dialog.js",
|
|
],
|
|
|
|
"packagekit/updates": [
|
|
"packagekit/updates.jsx",
|
|
"packagekit/updates.css",
|
|
],
|
|
|
|
"users/users": [
|
|
"users/local.js",
|
|
"users/users.css",
|
|
]
|
|
},
|
|
|
|
tests: [
|
|
"docker/test-docker",
|
|
|
|
"kdump/test-config-client",
|
|
|
|
"lib/test-dummy",
|
|
"lib/test-journal-renderer",
|
|
"lib/test-machines",
|
|
"lib/test-patterns",
|
|
|
|
"networkmanager/test-utils",
|
|
|
|
"storaged/test-util",
|
|
|
|
"kubernetes/scripts/test-utils",
|
|
"kubernetes/scripts/test-images",
|
|
"kubernetes/scripts/test-projects",
|
|
"kubernetes/scripts/test-nodes",
|
|
"kubernetes/scripts/test-kube-client",
|
|
"kubernetes/scripts/test-tags",
|
|
"kubernetes/scripts/test-connection",
|
|
"kubernetes/scripts/test-volumes",
|
|
|
|
"ostree/test-utils",
|
|
|
|
"machines/test-machines",
|
|
],
|
|
|
|
files: [
|
|
"apps/index.html",
|
|
"apps/default.png",
|
|
"apps/manifest.json",
|
|
|
|
"dashboard/index.html",
|
|
"dashboard/manifest.json",
|
|
|
|
"docker/console.html",
|
|
"docker/manifest.json",
|
|
"docker/index.html",
|
|
"docker/images/drive-harddisk-symbolic.svg",
|
|
|
|
"kdump/index.html",
|
|
"kdump/manifest.json",
|
|
|
|
"kubernetes/manifest.json",
|
|
"kubernetes/override.json",
|
|
"kubernetes/index.html",
|
|
"kubernetes/registry.html",
|
|
|
|
"machines/index.html",
|
|
"machines/manifest.json",
|
|
"machines/vnc.html",
|
|
"machines/vnc.css",
|
|
|
|
"networkmanager/index.html",
|
|
"networkmanager/manifest.json",
|
|
|
|
"ostree/manifest.json",
|
|
"ostree/index.html",
|
|
|
|
"ovirt/index.html",
|
|
"ovirt/manifest.json",
|
|
"ovirt/vnc.html",
|
|
"ovirt/vnc.css",
|
|
|
|
"packagekit/index.html",
|
|
"packagekit/manifest.json",
|
|
|
|
"playground/hammer.gif",
|
|
"playground/manifest.json",
|
|
"playground/jquery-patterns.html",
|
|
"playground/metrics.html",
|
|
"playground/pkgs.html",
|
|
"playground/plot.html",
|
|
"playground/po.js",
|
|
"playground/react-patterns.html",
|
|
"playground/service.html",
|
|
"playground/speed.html",
|
|
"playground/test.html",
|
|
"playground/translate.html",
|
|
|
|
"realmd/manifest.json",
|
|
|
|
"selinux/manifest.json",
|
|
"selinux/setroubleshoot.html",
|
|
|
|
"shell/images/server-error.png",
|
|
"shell/images/server-large.png",
|
|
"shell/images/server-small.png",
|
|
"shell/index.html",
|
|
"shell/simple.html",
|
|
"shell/shell.html",
|
|
"shell/stub.html",
|
|
|
|
"sosreport/index.html",
|
|
"sosreport/sosreport.png",
|
|
"sosreport/manifest.json",
|
|
|
|
"storaged/index.html",
|
|
"storaged/manifest.json",
|
|
"storaged/images/storage-array.png",
|
|
"storaged/images/storage-disk.png",
|
|
|
|
"subscriptions/index.html",
|
|
"subscriptions/manifest.json",
|
|
|
|
"systemd/index.html",
|
|
"systemd/logs.html",
|
|
"systemd/manifest.json",
|
|
"systemd/services.html",
|
|
"systemd/terminal.html",
|
|
|
|
"tuned/manifest.json",
|
|
|
|
"users/index.html",
|
|
"users/manifest.json",
|
|
]
|
|
};
|
|
|
|
var externals = {
|
|
"cockpit": "cockpit",
|
|
"jquery": "jQuery",
|
|
};
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* Implementation
|
|
*/
|
|
|
|
var webpack = require("webpack");
|
|
var copy = require("copy-webpack-plugin");
|
|
var html = require('html-webpack-plugin');
|
|
var extract = require("extract-text-webpack-plugin");
|
|
var extend = require("extend");
|
|
var path = require("path");
|
|
var fs = require("fs");
|
|
|
|
/* For node 0.10.x we need this defined */
|
|
if (typeof(global.Promise) == "undefined")
|
|
global.Promise = require('promise');
|
|
|
|
/* These can be overridden, typically from the Makefile.am */
|
|
var srcdir = process.env.SRCDIR || __dirname;
|
|
var builddir = process.env.BUILDDIR || __dirname;
|
|
var distdir = builddir + path.sep + "dist";
|
|
var libdir = path.resolve(srcdir, "pkg" + path.sep + "lib");
|
|
var nodedir = path.resolve(srcdir, "node_modules");
|
|
var section = process.env.ONLYDIR || null;
|
|
|
|
/* A standard nodejs and webpack pattern */
|
|
var production = process.env.NODE_ENV === 'production';
|
|
|
|
/*
|
|
* Note that we're avoiding the use of path.join as webpack and nodejs
|
|
* want relative paths that start with ./ explicitly.
|
|
*
|
|
* In addition we mimic the VPATH style functionality of GNU Makefile
|
|
* where we first check builddir, and then srcdir. In order to avoid
|
|
* people having to run ./configure to hack on Cockpit we also help
|
|
* resolve files that have a '.in' suffix if the resulting file
|
|
* doesn't exist.
|
|
*/
|
|
|
|
function vpath(/* ... */) {
|
|
var filename = Array.prototype.join.call(arguments, path.sep);
|
|
var expanded = builddir + path.sep + filename;
|
|
if (fs.existsSync(expanded))
|
|
return expanded;
|
|
expanded = srcdir + path.sep + filename;
|
|
if (!fs.existsSync(expanded) && fs.existsSync(expanded + ".in"))
|
|
return expanded + ".in";
|
|
return expanded;
|
|
}
|
|
|
|
/* Qualify all the paths in entries */
|
|
Object.keys(info.entries).forEach(function(key) {
|
|
if (section && key.indexOf(section) !== 0) {
|
|
delete info.entries[key];
|
|
return;
|
|
}
|
|
|
|
info.entries[key] = info.entries[key].map(function(value) {
|
|
if (value.indexOf("/") === -1)
|
|
return value;
|
|
else
|
|
return vpath("pkg", value);
|
|
});
|
|
});
|
|
|
|
/* Qualify all the paths in files listed */
|
|
var files = [];
|
|
info.files.forEach(function(value) {
|
|
if (!section || value.indexOf(section) === 0)
|
|
files.push({ from: vpath("pkg", value), to: value });
|
|
});
|
|
info.files = files;
|
|
|
|
var plugins = [
|
|
new webpack.DefinePlugin({
|
|
'process.env': {
|
|
'NODE_ENV': JSON.stringify(production ? 'production' : 'development')
|
|
}
|
|
}),
|
|
new copy(info.files),
|
|
new extract("[name].css"),
|
|
];
|
|
|
|
var output = {
|
|
path: distdir,
|
|
filename: "[name].js",
|
|
sourceMapFilename: "[file].map",
|
|
};
|
|
|
|
/* Only minimize when in production mode */
|
|
if (production) {
|
|
plugins.unshift(new webpack.optimize.UglifyJsPlugin({
|
|
beautify: true,
|
|
compress: {
|
|
warnings: false
|
|
},
|
|
}));
|
|
|
|
/* Rename output files when minimizing */
|
|
output.filename = "[name].min.js";
|
|
}
|
|
|
|
/* Fill in the tests properly */
|
|
info.tests.forEach(function(test) {
|
|
var ext = production ? ".min.js" : ".js";
|
|
if (!section || test.indexOf(section) === 0) {
|
|
info.entries[test] = vpath("pkg", test + ".js");
|
|
plugins.push(new html({
|
|
title: path.basename(test),
|
|
filename: test + ".html",
|
|
template: libdir + path.sep + "qunit-template.html",
|
|
builddir: test.split("/").map(function() { return "../" }).join(""),
|
|
script: path.basename(test + ext),
|
|
inject: false,
|
|
}));
|
|
}
|
|
});
|
|
|
|
/* Just for the sake of tests, jquery.js and cockpit.js files */
|
|
if (!section || section.indexOf("base1") === 0) {
|
|
files.push({
|
|
from: srcdir + path.sep + "src/base1/cockpit.js",
|
|
to: "base1/cockpit.js"
|
|
}, {
|
|
from: nodedir + path.sep + "jquery/dist/jquery.js",
|
|
to: "base1/jquery.js"
|
|
}, {
|
|
from: srcdir + path.sep + "po/po.js",
|
|
to: "shell/po.js"
|
|
});
|
|
}
|
|
|
|
var aliases = {
|
|
"angular": "angular/angular.js",
|
|
"angular-route": "angular-route/angular-route.js",
|
|
"d3": "d3/d3.js",
|
|
"moment": "moment/moment.js",
|
|
"react": "react-lite/dist/react-lite.js",
|
|
"term": "term.js-cockpit/src/term.js",
|
|
};
|
|
|
|
/* HACK: To get around redux warning about reminimizing code */
|
|
if (production)
|
|
aliases["redux/dist/redux"] = "redux/dist/redux.min.js";
|
|
|
|
module.exports = {
|
|
resolve: {
|
|
alias: aliases,
|
|
modulesDirectories: [ libdir, nodedir ]
|
|
},
|
|
resolveLoader: {
|
|
root: nodedir
|
|
},
|
|
entry: info.entries,
|
|
output: output,
|
|
externals: externals,
|
|
plugins: plugins,
|
|
|
|
devtool: "source-map",
|
|
|
|
module: {
|
|
preLoaders: [
|
|
{
|
|
test: /\.js$/, // include .js files
|
|
exclude: /\/node_modules\/.*\//, // exclude external dependencies
|
|
loader: "jshint-loader"
|
|
},
|
|
{
|
|
test: /\.es6$/, // include .js files
|
|
loader: "jshint-loader?esversion=6"
|
|
},
|
|
{
|
|
test: /\.jsx$/,
|
|
exclude: /\/node_modules\/.*\//, // exclude external dependencies
|
|
loader: "eslint-loader"
|
|
}
|
|
],
|
|
loaders: [
|
|
{
|
|
test: /\.js$/,
|
|
exclude: /\/node_modules\/.*\//, // exclude external dependencies
|
|
loader: 'strict' // Adds "use strict"
|
|
},
|
|
{
|
|
test: /\.jsx$/,
|
|
loader: "babel-loader"
|
|
},
|
|
{
|
|
test: /\.es6$/,
|
|
loader: "babel-loader"
|
|
},
|
|
{
|
|
test: /\.css$/,
|
|
loader: extract.extract("css-loader?minimize=&root=" + libdir)
|
|
},
|
|
{
|
|
test: /\.less$/,
|
|
loader: extract.extract("css-loader?sourceMap&minimize=!less-loader?sourceMap&compress=false&root=" + libdir)
|
|
},
|
|
{
|
|
test: /views\/[^\/]+\.html$/,
|
|
loader: "ng-cache?prefix=[dir]"
|
|
},
|
|
{
|
|
test: /[\/]angular\.js$/,
|
|
loader: "exports?angular"
|
|
}
|
|
],
|
|
|
|
/* The stuff in noVNC are plain ol javascript */
|
|
noParse: [
|
|
/\/node_modules\/noVNC\//
|
|
]
|
|
},
|
|
|
|
jshint: {
|
|
emitErrors: true,
|
|
failOnHint: true,
|
|
latedef: "nofunc",
|
|
sub: true,
|
|
multistr: true,
|
|
undef: true,
|
|
unused: "vars",
|
|
predef: [ "window", "document", "console" ],
|
|
},
|
|
};
|