From fb70e3b1769e9d008b75585e7c3fdfa061491f4d Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 17 May 2017 00:00:56 +0900 Subject: Refactoring --- webpack/module/rules/i18n.ts | 34 ++++++++++++++++++++++++++++++++++ webpack/module/rules/index.ts | 11 +++++++++++ webpack/module/rules/stylus.ts | 13 +++++++++++++ webpack/module/rules/tag.ts | 20 ++++++++++++++++++++ webpack/module/rules/theme-color.ts | 25 +++++++++++++++++++++++++ 5 files changed, 103 insertions(+) create mode 100644 webpack/module/rules/i18n.ts create mode 100644 webpack/module/rules/index.ts create mode 100644 webpack/module/rules/stylus.ts create mode 100644 webpack/module/rules/tag.ts create mode 100644 webpack/module/rules/theme-color.ts (limited to 'webpack/module/rules') diff --git a/webpack/module/rules/i18n.ts b/webpack/module/rules/i18n.ts new file mode 100644 index 0000000000..0539e97db4 --- /dev/null +++ b/webpack/module/rules/i18n.ts @@ -0,0 +1,34 @@ +/** + * Replace i18n texts + */ + +const StringReplacePlugin = require('string-replace-webpack-plugin'); + +export default (lang, locale) => ({ + enforce: 'pre', + test: /\.(tag|js)$/, + exclude: /node_modules/, + loader: StringReplacePlugin.replace({ + replacements: [ + { + pattern: /%i18n:(.+?)%/g, replacement: (_, key) => { + let text = locale; + const error = key.split('.').some(k => { + if (text.hasOwnProperty(k)) { + text = text[k]; + return false; + } else { + return true; + } + }); + if (error) { + console.warn(`key '${key}' not found in '${lang}'`); + return key; + } else { + return text.replace(/'/g, '\\\'').replace(/"/g, '\\"'); + } + } + } + ] + }) +}); diff --git a/webpack/module/rules/index.ts b/webpack/module/rules/index.ts new file mode 100644 index 0000000000..2308f4e535 --- /dev/null +++ b/webpack/module/rules/index.ts @@ -0,0 +1,11 @@ +import i18n from './i18n'; +import themeColor from './theme-color'; +import tag from './tag'; +import stylus from './stylus'; + +export default (lang, locale) => [ + i18n(lang, locale), + themeColor(), + tag(), + stylus() +]; diff --git a/webpack/module/rules/stylus.ts b/webpack/module/rules/stylus.ts new file mode 100644 index 0000000000..dd1e4c3218 --- /dev/null +++ b/webpack/module/rules/stylus.ts @@ -0,0 +1,13 @@ +/** + * Stylus support + */ + +export default () => ({ + test: /\.styl$/, + exclude: /node_modules/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { loader: 'stylus-loader' } + ] +}); diff --git a/webpack/module/rules/tag.ts b/webpack/module/rules/tag.ts new file mode 100644 index 0000000000..706af35b40 --- /dev/null +++ b/webpack/module/rules/tag.ts @@ -0,0 +1,20 @@ +/** + * Riot tags + */ + +export default () => ({ + test: /\.tag$/, + exclude: /node_modules/, + loader: 'riot-tag-loader', + query: { + hot: false, + style: 'stylus', + expr: false, + compact: true, + parserOptions: { + style: { + compress: true + } + } + } +}); diff --git a/webpack/module/rules/theme-color.ts b/webpack/module/rules/theme-color.ts new file mode 100644 index 0000000000..7ee545191c --- /dev/null +++ b/webpack/module/rules/theme-color.ts @@ -0,0 +1,25 @@ +/** + * Theme color provider + */ + +const StringReplacePlugin = require('string-replace-webpack-plugin'); + +const constants = require('../../../src/const.json'); + +export default () => ({ + enforce: 'pre', + test: /\.tag$/, + exclude: /node_modules/, + loader: StringReplacePlugin.replace({ + replacements: [ + { + pattern: /\$theme\-color\-foreground/g, + replacement: () => constants.themeColorForeground + }, + { + pattern: /\$theme\-color/g, + replacement: () => constants.themeColor + }, + ] + }) +}); -- cgit v1.2.3-freya