mirror of
https://github.com/a2nt/silverstripe-webpack.git
synced 2024-10-22 17:05:31 +02:00
Intial commit
This commit is contained in:
parent
3d354656da
commit
6a33a8583b
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# START Do not modify the lines between here and #END, they will be regenerated by GitIgnoreEditor
|
||||||
|
/betternavigator
|
||||||
|
/cms
|
||||||
|
/debugbar
|
||||||
|
/framework
|
||||||
|
/ideannotator
|
||||||
|
/redirectedurls
|
||||||
|
/reports
|
||||||
|
/silverstripe-scaled-uploads
|
||||||
|
/silverstripe-version-truncator
|
||||||
|
/siteconfig
|
||||||
|
# END of GitIgnoreEditor
|
||||||
|
|
||||||
|
/node_modules
|
||||||
|
/composer.lock
|
||||||
|
/yarn.lock
|
||||||
|
/vendor
|
||||||
|
/site/dist
|
12
browserconfig.xml
Normal file
12
browserconfig.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig>
|
||||||
|
<msapplication>
|
||||||
|
<tile>
|
||||||
|
<square70x70logo src="/site/dist/icons/mstile-70x70.png"/>
|
||||||
|
<square150x150logo src="/site/dist/icons/mstile-150x150.png"/>
|
||||||
|
<wide310x150logo src="/site/dist/icons/mstile-310x150.png"/>
|
||||||
|
<square310x310logo src="/site/dist/icons/mstile-310x310.png"/>
|
||||||
|
<TileColor>#000</TileColor>
|
||||||
|
</tile>
|
||||||
|
</msapplication>
|
||||||
|
</browserconfig>
|
10
cache.appcache
Executable file
10
cache.appcache
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
CACHE MANIFEST
|
||||||
|
|
||||||
|
FALLBACK:
|
||||||
|
/
|
||||||
|
/site/dist/css/app.css
|
||||||
|
/site/dist/img/logo.png
|
||||||
|
/site/dist/img/fonts/fontawesome-webfont.woff2?v=4.7.0
|
||||||
|
/site/dist/img/fonts/fontawesome-webfont.woff?v=4.7.0
|
||||||
|
/site/dist/img/fonts/fontawesome-webfont.ttf?v=4.7.0
|
||||||
|
/site/dist/js/app.js
|
32
composer.json
Executable file
32
composer.json
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "silverstripe/installer",
|
||||||
|
"description": "The SilverStripe webpack boilerplate",
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.0",
|
||||||
|
"silverstripe/cms": "*",
|
||||||
|
"silverstripe/framework": "3.7.x-dev",
|
||||||
|
"silverstripe/redirectedurls": "*",
|
||||||
|
"axllent/silverstripe-scaled-uploads": "*",
|
||||||
|
"jonom/silverstripe-betternavigator": "*",
|
||||||
|
"axllent/silverstripe-version-truncator": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/PHPUnit": "~3.7",
|
||||||
|
"gdmedia/ss-auto-git-ignore": "^1.0",
|
||||||
|
"axyr/silverstripe-ideannotator": "dev-master",
|
||||||
|
"lekoala/silverstripe-debugbar": "^1.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"post-update-cmd": "GDM\\SSAutoGitIgnore\\UpdateScript::Go"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"process-timeout": 600,
|
||||||
|
"discard-changes": true
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"3.x-dev": "3.6.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
11
humans.txt
Executable file
11
humans.txt
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
/* AUTHOR */
|
||||||
|
Name:
|
||||||
|
|
||||||
|
/* TEAM */
|
||||||
|
Site: https://bla-bla.com/
|
||||||
|
|
||||||
|
/* SITE */
|
||||||
|
Doctype: HTML5
|
||||||
|
IDE: PHPStorm, Sublime Text, Photoshop, Transmit
|
||||||
|
Framework: SilverStripe
|
||||||
|
Language: English
|
49
manifest.json
Normal file
49
manifest.json
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"name": "SilverStripe",
|
||||||
|
"short_name": "SilverStripe website",
|
||||||
|
"description": "",
|
||||||
|
"dir": "auto",
|
||||||
|
"lang": "en-US",
|
||||||
|
"display": "standalone",
|
||||||
|
"orientation": "any",
|
||||||
|
"start_url": "/?homescreen=1",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#000000",
|
||||||
|
"icons": [{
|
||||||
|
"src": "/dist/icons/android-chrome-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-256x256.png",
|
||||||
|
"sizes": "256x256",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-384x384.png",
|
||||||
|
"sizes": "384x384",
|
||||||
|
"type": "image/png"
|
||||||
|
}, {
|
||||||
|
"src": "/dist/icons/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}]
|
||||||
|
}
|
110
package.json
Executable file
110
package.json
Executable file
@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
"name": "ss-webpack-boilerplate",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Lets you create SilverStripe faster",
|
||||||
|
"author": "Tony Air <tony@twma.pro>",
|
||||||
|
"license": "MIT",
|
||||||
|
"private": false,
|
||||||
|
"engines": {
|
||||||
|
"yarn": ">= 1.0.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "cross-env NODE_ENV=development webpack-dev-server -d --config webpack.config.dev.js",
|
||||||
|
"dash": "cross-env NODE_ENV=development webpack-dashboard -- webpack-dev-server --config webpack.config.dev.js",
|
||||||
|
"prebuild": "rimraf build",
|
||||||
|
"build": "cross-env NODE_ENV=production webpack -p --config webpack.config.prod.js --progress"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"bootstrap": "twbs/bootstrap#>= 3.1.0",
|
||||||
|
"favicons-webpack-plugin": "^0.0.7",
|
||||||
|
"jquery": "^3.3.1",
|
||||||
|
"js-yaml": "^3.10.0",
|
||||||
|
"popper": "^1.0.1",
|
||||||
|
"popper.js": "^1.12.9"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"exports-loader": "^0.7.0",
|
||||||
|
"favicons-webpack-plugin": "^0.0.7",
|
||||||
|
"@silverstripe/eslint-config": "0.0.2",
|
||||||
|
"autoprefixer": "^7.2.5",
|
||||||
|
"babel-core": "^6.26.0",
|
||||||
|
"babel-loader": "^7.1.2",
|
||||||
|
"babel-plugin-transform-react-jsx": "^6.24.1",
|
||||||
|
"babel-preset-es2015": "^6.24.1",
|
||||||
|
"babel-preset-react": "^6.24.1",
|
||||||
|
"babel-preset-stage-2": "^6.24.1",
|
||||||
|
"browser-sync": "^2.23.6",
|
||||||
|
"browser-sync-webpack-plugin": "^1.2.0",
|
||||||
|
"copy-webpack-plugin": "^4.3.1",
|
||||||
|
"copyfiles": "^1.2.0",
|
||||||
|
"cross-env": "^5.1.3",
|
||||||
|
"css-loader": "^0.28.9",
|
||||||
|
"extract-text-webpack-plugin": "^3.0.2",
|
||||||
|
"file-loader": "^1.1.5",
|
||||||
|
"html-webpack-plugin": "^2.30.1",
|
||||||
|
"laravel-mix": "^1.0",
|
||||||
|
"lost": "^8.2.0",
|
||||||
|
"node-sass": "^4.6.1",
|
||||||
|
"optimize-css-assets-webpack-plugin": "^3.2.0",
|
||||||
|
"postcss-loader": "^2.0.10",
|
||||||
|
"react": "^16.2.0",
|
||||||
|
"react-dom": "^16.2.0",
|
||||||
|
"react-hot-loader": "^3.1.3",
|
||||||
|
"redux": "^3.7.2",
|
||||||
|
"redux-devtools-extension": "^2.13.2",
|
||||||
|
"resolve-url-loader": "^2.2.1",
|
||||||
|
"rimraf": "^2.6.2",
|
||||||
|
"sass-loader": "^6.0.6",
|
||||||
|
"script-ext-html-webpack-plugin": "^1.8.8",
|
||||||
|
"style-loader": "^0.19.0",
|
||||||
|
"svg-url-loader": "^2.3.1",
|
||||||
|
"uglifyjs-webpack-plugin": "^1.1.6",
|
||||||
|
"url-loader": "^0.6.2",
|
||||||
|
"webpack": "^3.8.1",
|
||||||
|
"webpack-dashboard": "^1.1.1",
|
||||||
|
"webpack-dev-server": "^2.11.1",
|
||||||
|
"webpack-manifest-plugin": "^1.3.2",
|
||||||
|
"webpack-merge": "^4.1.1",
|
||||||
|
"worker-loader": "^1.1.0"
|
||||||
|
},
|
||||||
|
"stylelint": {
|
||||||
|
"rules": {
|
||||||
|
"block-no-empty": null,
|
||||||
|
"color-no-invalid-hex": true,
|
||||||
|
"comment-empty-line-before": [
|
||||||
|
"always", {
|
||||||
|
"ignore": [
|
||||||
|
"stylelint-commands",
|
||||||
|
"after-comment"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"declaration-colon-space-after": "always",
|
||||||
|
"indentation": [
|
||||||
|
4, {
|
||||||
|
"except": [
|
||||||
|
"value"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"max-empty-lines": 2,
|
||||||
|
"rule-empty-line-before": [
|
||||||
|
"always", {
|
||||||
|
"except": [
|
||||||
|
"first-nested"
|
||||||
|
],
|
||||||
|
"ignore": [
|
||||||
|
"after-comment"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"unit-whitelist": [
|
||||||
|
"em",
|
||||||
|
"rem",
|
||||||
|
"%",
|
||||||
|
"s",
|
||||||
|
"px"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
phpcs.xml.dist
Executable file
25
phpcs.xml.dist
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<ruleset name="SS3">
|
||||||
|
<description>Coding standard for SilverStripe 3.x</description>
|
||||||
|
|
||||||
|
<!-- Don't sniff third party libraries -->
|
||||||
|
<exclude-pattern>*/vendor/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/thirdparty/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/node_modules/*</exclude-pattern>
|
||||||
|
|
||||||
|
<!-- Show progress and output sniff names on violation, and add colours -->
|
||||||
|
<arg value="sp"/>
|
||||||
|
<arg name="colors"/>
|
||||||
|
|
||||||
|
<!-- Use PSR-2 as a base standard -->
|
||||||
|
<rule ref="PSR2">
|
||||||
|
<!-- Allow classes to not declare a namespace -->
|
||||||
|
<exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
|
||||||
|
|
||||||
|
<!-- Allow underscores in class names -->
|
||||||
|
<exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/>
|
||||||
|
|
||||||
|
<!-- Allow non camel cased method names -->
|
||||||
|
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/>
|
||||||
|
</rule>
|
||||||
|
</ruleset>
|
18
phpunit.xml
Executable file
18
phpunit.xml
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
<phpunit bootstrap="framework/tests/bootstrap.php" colors="true">
|
||||||
|
|
||||||
|
<testsuite name="Default">
|
||||||
|
<directory>cms/tests</directory>
|
||||||
|
<directory>framework/tests</directory>
|
||||||
|
</testsuite>
|
||||||
|
|
||||||
|
<listeners>
|
||||||
|
<listener class="SS_TestListener" file="framework/dev/TestListener.php" />
|
||||||
|
</listeners>
|
||||||
|
|
||||||
|
<groups>
|
||||||
|
<exclude>
|
||||||
|
<group>sanitychecks</group>
|
||||||
|
</exclude>
|
||||||
|
</groups>
|
||||||
|
|
||||||
|
</phpunit>
|
7
robots.txt
Executable file
7
robots.txt
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
Crawl-delay: 10
|
||||||
|
Disallow: /admin
|
||||||
|
Disallow: /Security
|
||||||
|
Sitemap: https://www.bla-bla.org/sitemap.xml
|
||||||
|
Host: https://www.bla-bla.org
|
90
site/WebpackTemplateProvider.php
Normal file
90
site/WebpackTemplateProvider.php
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Directs assets requests to Webpack server or to static files
|
||||||
|
*/
|
||||||
|
|
||||||
|
class WebpackTemplateProvider extends Object implements TemplateGlobalProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function get_template_global_variables()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'WebpackDevServer' => 'isActive',
|
||||||
|
'WebpackCSS' => 'loadCSS',
|
||||||
|
'WebpackJS' => 'loadJS',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int port number
|
||||||
|
*/
|
||||||
|
private static $port = 3000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string host name
|
||||||
|
*/
|
||||||
|
private static $hostname = 'localhost';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string assets static files directory
|
||||||
|
*/
|
||||||
|
private static $distDir = 'site/dist';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load CSS file
|
||||||
|
* @param $path
|
||||||
|
*/
|
||||||
|
public static function loadCSS($path)
|
||||||
|
{
|
||||||
|
if (!self::isActive()) {
|
||||||
|
Requirements::css(self::_toPublicPath($path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load JS file
|
||||||
|
* @param $path
|
||||||
|
*/
|
||||||
|
public static function loadJS($path)
|
||||||
|
{
|
||||||
|
$path = self::isActive() ?
|
||||||
|
self::_toDevServerPath($path) :
|
||||||
|
self::_toPublicPath($path);
|
||||||
|
|
||||||
|
Requirements::javascript($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if dev mode is enabled and if webpack server is online
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isActive()
|
||||||
|
{
|
||||||
|
$class = __CLASS__;
|
||||||
|
return Director::isDev() && !!@fsockopen(
|
||||||
|
$class::config()->get('hostname'),
|
||||||
|
$class::config()->get('port')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function _toDevServerPath($path)
|
||||||
|
{
|
||||||
|
$class = __CLASS__;
|
||||||
|
return sprintf(
|
||||||
|
'http://%s:%s/%s',
|
||||||
|
$class::config()->get('hostname'),
|
||||||
|
$class::config()->get('port'),
|
||||||
|
$path
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function _toPublicPath($path)
|
||||||
|
{
|
||||||
|
$class = __CLASS__;
|
||||||
|
return $class::config()->get('distDir') . '/' . $path;
|
||||||
|
}
|
||||||
|
}
|
10
site/_config/webpack.yml
Normal file
10
site/_config/webpack.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# that's important to place this file into /site/_config/webpack.yml
|
||||||
|
# with all configuration variables presented
|
||||||
|
# Cuz WebPack compiling script use it to set configuration
|
||||||
|
|
||||||
|
WebpackTemplateProvider:
|
||||||
|
dist: site/dist
|
||||||
|
hostname: localhost
|
||||||
|
port: "3000"
|
||||||
|
pages: site/src/js/types
|
||||||
|
src: site/src
|
10
site/src/_config/webpack.yml
Normal file
10
site/src/_config/webpack.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# that's important to place this file into /site/_config/webpack.yml
|
||||||
|
# with all configuration variables presented
|
||||||
|
# Cuz WebPack compiling script use it to set configuration
|
||||||
|
|
||||||
|
WebpackTemplateProvider:
|
||||||
|
dist: site/dist
|
||||||
|
hostname: localhost
|
||||||
|
port: "3000"
|
||||||
|
pages: site/src/js/types
|
||||||
|
src: site/src
|
BIN
site/src/favicon.png
Normal file
BIN
site/src/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.0 KiB |
19
site/src/js/_components/_spinner.js
Normal file
19
site/src/js/_components/_spinner.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Just an example component
|
||||||
|
*/
|
||||||
|
import $ from "jquery";
|
||||||
|
|
||||||
|
const SpinnerUI = (($) => {
|
||||||
|
class SpinnerUI {
|
||||||
|
static show(callback) {
|
||||||
|
$("#PageLoading").show(0, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
static hide(callback) {
|
||||||
|
$("#PageLoading").hide("slow", callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SpinnerUI;
|
||||||
|
})($);
|
||||||
|
|
||||||
|
export default SpinnerUI;
|
8
site/src/js/_events.js
Normal file
8
site/src/js/_events.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* Add your global events here
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
AJAX: "ajax-load",
|
||||||
|
LOADED: "load"
|
||||||
|
};
|
88
site/src/js/_pageType_and_component_template.js
Normal file
88
site/src/js/_pageType_and_component_template.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import $ from "jquery";
|
||||||
|
|
||||||
|
const TypePage = (($) => {
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
const NAME = "TypePage";
|
||||||
|
//const DATA_KEY = "pageUI." + NAME;
|
||||||
|
|
||||||
|
const Events = require("./_events");
|
||||||
|
|
||||||
|
class TypePage {
|
||||||
|
// Static methods
|
||||||
|
static init() {
|
||||||
|
console.log("Initializing: " + NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
static destroy() {
|
||||||
|
console.log("Destroying: " + NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery extension functions
|
||||||
|
// Constructor
|
||||||
|
constructor(element) {
|
||||||
|
console.log("Constructing: " + NAME + " elements");
|
||||||
|
|
||||||
|
this._element = element;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public methods
|
||||||
|
dispose() {
|
||||||
|
console.log("Disposing: " + NAME + " elements");
|
||||||
|
|
||||||
|
$.removeData(this._element, DATA_KEY);
|
||||||
|
this._element = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static _jQueryInterface() {
|
||||||
|
return this.each(function () {
|
||||||
|
// attach functionality to element
|
||||||
|
const $element = $(this);
|
||||||
|
let data = $element.data(DATA_KEY);
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new TypePage(this);
|
||||||
|
$element.data(DATA_KEY, data);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
$(window).on(Events.AJAX + " " + Events.LOADED, function() {
|
||||||
|
TypePage.init();
|
||||||
|
});
|
||||||
|
|
||||||
|
// JQuery extension functions
|
||||||
|
/*$.fn[NAME] = TypePage._jQueryInterface;
|
||||||
|
$.fn[NAME].Constructor = TypePage;
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
||||||
|
return TypePage._jQueryInterface;
|
||||||
|
};*/
|
||||||
|
|
||||||
|
return TypePage;
|
||||||
|
})($);
|
||||||
|
|
||||||
|
export default TypePage;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
import $ from 'jquery';
|
||||||
|
|
||||||
|
(function (G) {
|
||||||
|
G.initPulsePage = function () {
|
||||||
|
G.destroyPulsePage();
|
||||||
|
};
|
||||||
|
|
||||||
|
G.destroyPulsePage = function () {};
|
||||||
|
|
||||||
|
$(window).on("ajax-content-loaded", function () {
|
||||||
|
G.initPulsePage();
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
G.initPulsePage();
|
||||||
|
});
|
||||||
|
}(this));*/
|
38
site/src/js/app.js
Normal file
38
site/src/js/app.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// import images
|
||||||
|
function importAll(r) {
|
||||||
|
return r.keys().map(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
const images = importAll(require.context("../img/", false, /\.(png|jpe?g|svg)$/));
|
||||||
|
|
||||||
|
import "../scss/app.scss";
|
||||||
|
|
||||||
|
// import Bootstrap
|
||||||
|
import Popper from "popper.js";
|
||||||
|
window.Popper = Popper;
|
||||||
|
import "bootstrap/js/dist/util";
|
||||||
|
import "bootstrap/js/dist/alert";
|
||||||
|
import "bootstrap/js/dist/button";
|
||||||
|
import "bootstrap/js/dist/carousel";
|
||||||
|
import "bootstrap/js/dist/collapse";
|
||||||
|
import "bootstrap/js/dist/dropdown";
|
||||||
|
import "bootstrap/js/dist/modal";
|
||||||
|
import "bootstrap/js/dist/tooltip";
|
||||||
|
import "bootstrap/js/dist/popover";
|
||||||
|
import "bootstrap/js/dist/scrollspy";
|
||||||
|
import "bootstrap/js/dist/tab";
|
||||||
|
//
|
||||||
|
|
||||||
|
// import your custom UI components
|
||||||
|
import "./main.js";
|
||||||
|
|
||||||
|
// TODO: hot module update
|
||||||
|
/*const Events = require("./_events");
|
||||||
|
if (module.hot) {
|
||||||
|
module.hot.accept();
|
||||||
|
module.hot.addStatusHandler(status => {
|
||||||
|
if(status === "apply"){
|
||||||
|
$(window).trigger(Events.AJAX);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}*/
|
38
site/src/js/main.js
Normal file
38
site/src/js/main.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import $ from "jquery";
|
||||||
|
|
||||||
|
import Events from "./_events";
|
||||||
|
// import an example component
|
||||||
|
import Spinner from "./_components/_spinner";
|
||||||
|
|
||||||
|
const MainUI = (($) => {
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
const NAME = "MainUI";
|
||||||
|
|
||||||
|
class MainUI {
|
||||||
|
// Static methods
|
||||||
|
static init() {
|
||||||
|
this.destroy();
|
||||||
|
console.log("Initializing: " + NAME);
|
||||||
|
|
||||||
|
Spinner.hide(function() {
|
||||||
|
$("body").addClass("loaded");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static destroy() {
|
||||||
|
console.log("Destroying: " + NAME);
|
||||||
|
Spinner.show(function() {
|
||||||
|
$("body").removeClass("loaded");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(window).on(Events.AJAX + " " + Events.LOADED, function() {
|
||||||
|
MainUI.init();
|
||||||
|
});
|
||||||
|
|
||||||
|
return MainUI;
|
||||||
|
})($);
|
||||||
|
|
||||||
|
export default MainUI;
|
7
site/src/scss/_layout.scss
Normal file
7
site/src/scss/_layout.scss
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* Your custom style
|
||||||
|
*/
|
||||||
|
|
||||||
|
html,body {
|
||||||
|
background:#000;
|
||||||
|
}
|
10
site/src/scss/_variables.scss
Normal file
10
site/src/scss/_variables.scss
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Your custom variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
// bootstrap minify bugfix:
|
||||||
|
$navbar-dark-toggler-icon-bg: none;
|
||||||
|
$navbar-light-toggler-icon-bg: none;
|
||||||
|
|
||||||
|
// IE > 9
|
||||||
|
$enable-flex: true;
|
42
site/src/scss/app.scss
Normal file
42
site/src/scss/app.scss
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Your custom variables
|
||||||
|
@import "variables";
|
||||||
|
|
||||||
|
// Bootstrap basics
|
||||||
|
@import "../../../node_modules/bootstrap/scss/functions";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/variables";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/mixins";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/root";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/reboot";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/type";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/images";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/code";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/grid";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/tables";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/forms";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/buttons";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/transitions";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/dropdown";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/button-group";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/input-group";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/custom-forms";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/nav";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/navbar";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/card";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/breadcrumb";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/pagination";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/badge";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/jumbotron";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/alert";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/progress";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/media";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/list-group";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/close";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/modal";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/tooltip";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/popover";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/carousel";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/utilities";
|
||||||
|
@import "../../../node_modules/bootstrap/scss/print";
|
||||||
|
|
||||||
|
// Your custom UI
|
||||||
|
@import "layout";
|
64
site/templates/Page.ss
Normal file
64
site/templates/Page.ss
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="$ContentLocale.ATT" dir="$i18nScriptDirection.ATT">
|
||||||
|
<%-- manifest="/cache.appcache" --%>
|
||||||
|
<head>
|
||||||
|
$MetaTags
|
||||||
|
<meta name="theme-color" content="#000000" />
|
||||||
|
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
|
||||||
|
<link rel="author" type="text/plain" href="{$AbsoluteBaseURL}humans.txt" />
|
||||||
|
<link rel="sitemap" type="application/xml" title="Sitemap" href="{$AbsoluteBaseURL}sitemap.xml" />
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
<link rel="preconnect" href="https://maps.google.com" />
|
||||||
|
<link rel="preconnect" href="https://ajax.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://csi.gstatic.com" />
|
||||||
|
<link rel="preconnect" href="https://maps.googleapis.com" />
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://www.youtube.com">
|
||||||
|
<link rel="preconnect" href="https://i.ytimg.com">
|
||||||
|
<link rel="preconnect" href="https://i9.ytimg.com">
|
||||||
|
<link rel="preconnect" href="https://s.ytimg.com">
|
||||||
|
|
||||||
|
<% base_tag %>
|
||||||
|
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="{$AbsoluteBaseURL}{$Project}/site/dist/icons/favicon.ico" />
|
||||||
|
<link rel="icon" sizes="144x144" type="image/png" href="{$AbsoluteBaseURL}{$Project}/site/dist/icons/android-chrome-144x144.png" />
|
||||||
|
<link rel="apple-touch-icon" href="{$AbsoluteBaseURL}{$Project}/site/dist/icons/apple-touch-icon.png" />
|
||||||
|
<link rel="apple-touch-icon-precomposed" href="{$AbsoluteBaseURL}{$Project}/site/dist/icons/apple-touch-icon-precomposed.png" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest" />
|
||||||
|
|
||||||
|
<meta name="application-name" content="{$SiteConfig.Title}" />
|
||||||
|
<meta name="msapplication-TileImage" content="{$AbsoluteBaseURL}{$Project}/site/dist/icons/mstile-144x144.png" />
|
||||||
|
<meta name="msapplication-TileColor" content="#2F98F1" />
|
||||||
|
|
||||||
|
<meta content="yes" name="apple-mobile-web-app-capable" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1" />
|
||||||
|
</head>
|
||||||
|
<body oncontextmenu="return false;">
|
||||||
|
<header>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main data-ajax-region="LayoutAjax">
|
||||||
|
$Layout
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<div class="hidden-print">
|
||||||
|
$BetterNavigator
|
||||||
|
</div>
|
||||||
|
|
||||||
|
$WebpackJS('app.js')
|
||||||
|
$WebpackCSS('app.css')
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
122
webpack.config.common.js
Executable file
122
webpack.config.common.js
Executable file
@ -0,0 +1,122 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const webpack = require("webpack");
|
||||||
|
const ExtractTextPlugin = require("extract-text-webpack-plugin");
|
||||||
|
const ManifestPlugin = require("webpack-manifest-plugin");
|
||||||
|
const conf = require("./webpack.configuration");
|
||||||
|
const isProduction = process.env.NODE_ENV === "production";
|
||||||
|
|
||||||
|
const jsScripts = {
|
||||||
|
app: path.join(conf.SRC, "js/app.js"),
|
||||||
|
};
|
||||||
|
|
||||||
|
const _getAllFilesFromFolder = function(dir) {
|
||||||
|
let filesystem = require("fs");
|
||||||
|
let results = [];
|
||||||
|
|
||||||
|
filesystem.readdirSync(dir).forEach(function(file) {
|
||||||
|
|
||||||
|
file = dir + "/" + file;
|
||||||
|
let stat = filesystem.statSync(file);
|
||||||
|
|
||||||
|
if (stat && stat.isDirectory()) {
|
||||||
|
results = results.concat(_getAllFilesFromFolder(file))
|
||||||
|
} else results.push(file);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
// add page specific scripts
|
||||||
|
const pageScripts = _getAllFilesFromFolder(conf.PAGES);
|
||||||
|
pageScripts.forEach((file) => {
|
||||||
|
jsScripts[path.basename(file, ".js")] = file;
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: jsScripts,
|
||||||
|
devtool: "source-map",
|
||||||
|
externals: {
|
||||||
|
"custom-select": "CustomSelect",
|
||||||
|
"ui-progress-button": "UIProgressButton"
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.jsx?$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: {
|
||||||
|
loader: "babel-loader",
|
||||||
|
options: {
|
||||||
|
presets: [
|
||||||
|
["es2015", {
|
||||||
|
modules: false
|
||||||
|
}],
|
||||||
|
["stage-2"]
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
["transform-react-jsx"],
|
||||||
|
["react-hot-loader/babel"],
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
test: /\.(png|jpg|gif|svg)$/,
|
||||||
|
loader: "file-loader",
|
||||||
|
options: {
|
||||||
|
name: "img/[name].[ext]",
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
test: /\.eot(\?v=\d+.\d+.\d+)?$/,
|
||||||
|
use: {
|
||||||
|
loader: "file-loader",
|
||||||
|
options: {
|
||||||
|
name: "fonts/[name].[ext]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
||||||
|
use: {
|
||||||
|
loader: "url-loader",
|
||||||
|
options: {
|
||||||
|
name: "fonts/[name].[ext]",
|
||||||
|
limit: 10000,
|
||||||
|
mimetype: "application/font-woff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
test: /\.[ot]tf(\?v=\d+.\d+.\d+)?$/,
|
||||||
|
use: {
|
||||||
|
loader: "url-loader",
|
||||||
|
options: {
|
||||||
|
name: "fonts/[name].[ext]",
|
||||||
|
limit: 10000,
|
||||||
|
mimetype: "application/octet-stream"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
test: /\.worker\.js$/,
|
||||||
|
use: {
|
||||||
|
loader: "worker-loader"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.ProvidePlugin({
|
||||||
|
$: "jquery",
|
||||||
|
jQuery: "jquery",
|
||||||
|
"window.jQuery": "jquery",
|
||||||
|
Popper: ["popper.js", "default"],
|
||||||
|
Util: "exports-loader?Util!bootstrap/js/dist/util",
|
||||||
|
Alert: "exports-loader?Alert!bootstrap/js/dist/alert",
|
||||||
|
Button: "exports-loader?Button!bootstrap/js/dist/button",
|
||||||
|
Carousel: "exports-loader?Carousel!bootstrap/js/dist/carousel",
|
||||||
|
Collapse: "exports-loader?Collapse!bootstrap/js/dist/collapse",
|
||||||
|
Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown",
|
||||||
|
Modal: "exports-loader?Modal!bootstrap/js/dist/modal",
|
||||||
|
Tooltip: "exports-loader?Tooltip!bootstrap/js/dist/tooltip",
|
||||||
|
Popover: "exports-loader?Popover!bootstrap/js/dist/popover",
|
||||||
|
Scrollspy: "exports-loader?Scrollspy!bootstrap/js/dist/scrollspy",
|
||||||
|
Tab: "exports-loader?Tab!bootstrap/js/dist/tab",
|
||||||
|
})
|
||||||
|
],
|
||||||
|
};
|
97
webpack.config.dev.js
Executable file
97
webpack.config.dev.js
Executable file
@ -0,0 +1,97 @@
|
|||||||
|
const autoprefixer = require('autoprefixer');
|
||||||
|
const webpack = require('webpack');
|
||||||
|
const merge = require('webpack-merge');
|
||||||
|
const common = require('./webpack.config.common.js');
|
||||||
|
const conf = require('./webpack.configuration');
|
||||||
|
|
||||||
|
const IP = process.env.IP || conf.HOSTNAME;
|
||||||
|
const PORT = process.env.PORT || conf.PORT;
|
||||||
|
|
||||||
|
const config = merge.strategy({
|
||||||
|
entry: 'prepend'
|
||||||
|
})(common, {
|
||||||
|
|
||||||
|
entry: {
|
||||||
|
app: [
|
||||||
|
'react-hot-loader/patch',
|
||||||
|
'webpack-dev-server/client?http://' + conf.HOSTNAME + ':' + conf.PORT + '/',
|
||||||
|
'webpack/hot/only-dev-server',
|
||||||
|
],
|
||||||
|
main: [
|
||||||
|
'webpack-dev-server/client?http://' + conf.HOSTNAME + ':' + conf.PORT + '/',
|
||||||
|
'webpack/hot/only-dev-server',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
output: {
|
||||||
|
path: conf.BUILD,
|
||||||
|
filename: '[name].js',
|
||||||
|
// necessary for HMR to know where to load the hot update chunks
|
||||||
|
publicPath: 'http://' + conf.HOSTNAME + ':' + conf.PORT + '/'
|
||||||
|
},
|
||||||
|
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.scss$/,
|
||||||
|
use: [{
|
||||||
|
loader: 'style-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
loader: 'css-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
loader: 'postcss-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true,
|
||||||
|
plugins: [
|
||||||
|
autoprefixer({
|
||||||
|
// If we want to use the same browser list for more tools
|
||||||
|
// this list should be moved to package.json
|
||||||
|
// https://evilmartians.com/chronicles/autoprefixer-7-browserslist-2-released
|
||||||
|
browsers: [
|
||||||
|
'ie >= 11',
|
||||||
|
'ie_mob >= 11',
|
||||||
|
'Safari >= 10',
|
||||||
|
'Android >= 4.4',
|
||||||
|
'Chrome >= 44', // Retail
|
||||||
|
'Samsung >= 4'
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
// http://lostgrid.org/docs.html
|
||||||
|
require('lost')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
loader: 'sass-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true
|
||||||
|
}
|
||||||
|
}, ]
|
||||||
|
}, ]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.NamedModulesPlugin(),
|
||||||
|
new webpack.HotModuleReplacementPlugin(),
|
||||||
|
new webpack.NoEmitOnErrorsPlugin(),
|
||||||
|
],
|
||||||
|
|
||||||
|
devServer: {
|
||||||
|
host: IP,
|
||||||
|
port: PORT,
|
||||||
|
historyApiFallback: true,
|
||||||
|
hot: true,
|
||||||
|
overlay: {
|
||||||
|
warnings: true,
|
||||||
|
errors: true
|
||||||
|
},
|
||||||
|
headers: {
|
||||||
|
'Access-Control-Allow-Origin': '*'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = config;
|
102
webpack.config.prod.js
Executable file
102
webpack.config.prod.js
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const autoprefixer = require('autoprefixer');
|
||||||
|
const webpack = require('webpack');
|
||||||
|
const merge = require('webpack-merge');
|
||||||
|
const common = require('./webpack.config.common.js');
|
||||||
|
const OptimizeCSSAssets = require('optimize-css-assets-webpack-plugin');
|
||||||
|
const conf = require('./webpack.configuration');
|
||||||
|
const ExtractTextPlugin = require("extract-text-webpack-plugin");
|
||||||
|
const FaviconsWebpackPlugin = require("favicons-webpack-plugin");
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const confYML = yaml.safeLoad(fs.readFileSync(path.join(__dirname, "site/_config/webpack.yml"), "utf8"));
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
|
||||||
|
output: {
|
||||||
|
path: conf.BUILD,
|
||||||
|
filename: '[name].js',
|
||||||
|
publicPath: confYML.WebpackTemplateProvider.dist + '/',
|
||||||
|
},
|
||||||
|
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.scss$/,
|
||||||
|
use: ExtractTextPlugin.extract({
|
||||||
|
fallback: "style-loader",
|
||||||
|
use: [{
|
||||||
|
loader: 'css-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
loader: 'postcss-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true,
|
||||||
|
plugins: [
|
||||||
|
autoprefixer({
|
||||||
|
// If we want to use the same browser list for more tools
|
||||||
|
// this list should be moved to package.json
|
||||||
|
// https://evilmartians.com/chronicles/autoprefixer-7-browserslist-2-released
|
||||||
|
browsers: [
|
||||||
|
'ie >= 11',
|
||||||
|
'ie_mob >= 11',
|
||||||
|
'Safari >= 10',
|
||||||
|
'Android >= 4.4',
|
||||||
|
'Chrome >= 44', // Retail
|
||||||
|
'Samsung >= 4'
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
// http://lostgrid.org/docs.html
|
||||||
|
require('lost')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
loader: 'resolve-url-loader'
|
||||||
|
}, {
|
||||||
|
loader: 'sass-loader',
|
||||||
|
options: {
|
||||||
|
sourceMap: true
|
||||||
|
}
|
||||||
|
}, ]
|
||||||
|
})
|
||||||
|
}, ]
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env': {
|
||||||
|
'NODE_ENV': JSON.stringify('production')
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||||
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
|
sourceMap: true,
|
||||||
|
comments: false
|
||||||
|
}),
|
||||||
|
new ExtractTextPlugin({
|
||||||
|
filename: '[name].css',
|
||||||
|
allChunks: true
|
||||||
|
}),
|
||||||
|
new OptimizeCSSAssets(),
|
||||||
|
new FaviconsWebpackPlugin({
|
||||||
|
logo: conf.SRC + '/favicon.png',
|
||||||
|
prefix: '/icons/',
|
||||||
|
statsFilename: confYML.WebpackTemplateProvider.dist + '/icons/iconstats.json',
|
||||||
|
icons: {
|
||||||
|
android: true,
|
||||||
|
appleIcon: true,
|
||||||
|
appleStartup: true,
|
||||||
|
coast: true,
|
||||||
|
favicons: true,
|
||||||
|
firefox: true,
|
||||||
|
opengraph: true,
|
||||||
|
twitter: true,
|
||||||
|
yandex: true,
|
||||||
|
windows: true
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
12
webpack.configuration.js
Executable file
12
webpack.configuration.js
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
const conf = yaml.safeLoad(fs.readFileSync(path.join(__dirname, "site/_config/webpack.yml"), "utf8"));
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
SRC: path.join(__dirname, conf.WebpackTemplateProvider.src),
|
||||||
|
BUILD: path.join(__dirname, conf.WebpackTemplateProvider.dist),
|
||||||
|
PAGES: path.join(__dirname, conf.WebpackTemplateProvider.pages),
|
||||||
|
HOSTNAME: conf.WebpackTemplateProvider.hostname,
|
||||||
|
PORT: conf.WebpackTemplateProvider.port
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user