dev: refactoring + lokalise fetch + process
This commit is contained in:
1 parent
26e3e21005
commit
e55c5805b4
95 files changed
+199
-3337
No files matched your search
@@ -0,0 +1,22 @@
|
||||
html,body,body div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,figure,footer,header,menu,nav,section,time,mark,audio,video,details,summary{margin:0;padding:0;border:0;font-size:100%;font-weight:normal;vertical-align:baseline;background:transparent}main,article,aside,figure,footer,header,nav,section,details,summary{display:block}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}img,object,embed{max-width:100%}html{overflow-y:scroll}ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{margin:0;padding:0;font-size:100%;vertical-align:baseline;background:transparent}del{text-decoration:line-through}abbr[title],dfn[title]{border-bottom:1px dotted #000;cursor:help}table{border-collapse:separate;border-spacing:0}th{font-weight:bold;vertical-align:bottom}td{font-weight:normal;vertical-align:top}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}input,select{vertical-align:middle}pre{white-space:pre;white-space:pre-wrap;white-space:pre-line;word-wrap:break-word}input[type="radio"]{vertical-align:text-bottom}input[type="checkbox"]{vertical-align:bottom}.ie7 input[type="checkbox"]{vertical-align:baseline}.ie6 input{vertical-align:text-bottom}select,input,textarea{font:99% sans-serif}table{font-size:inherit;font:100%}small{font-size:85%}strong{font-weight:bold}td,td img{vertical-align:top}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-0.5em}sub{bottom:-0.25em}pre,code,kbd,samp{font-family:monospace, sans-serif}.clickable,label,input[type=button],input[type=submit],input[type=file],button{cursor:pointer}button,input,select,textarea{margin:0}button,input[type=button]{width:auto;overflow:visible}.ie7 img{-ms-interpolation-mode:bicubic}.clearfix:after{content:" ";display:block;clear:both}@font-face{font-family:'wiki-js';src:url("/fonts/wiki-js.woff2?1497824388") format("woff2"),url("/fonts/wiki-js.woff?1497824388") format("woff");font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:'wiki-js' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-bold:before{content:""}.icon-italic:before{content:""}.icon-twitter:before{content:""}.icon-facebook:before{content:""}.icon-facebook-f:before{content:""}.icon-github:before{content:""}.icon-strikethrough:before{content:""}.icon-pinterest:before{content:""}.icon-google-plus:before{content:""}.icon-linkedin:before{content:""}.icon-github-alt:before{content:""}.icon-youtube-play:before{content:""}.icon-dropbox:before{content:""}.icon-stack-overflow:before{content:""}.icon-instagram:before{content:""}.icon-flickr:before{content:""}.icon-bitbucket:before{content:""}.icon-apple:before{content:""}.icon-windows2:before{content:""}.icon-android:before{content:""}.icon-linux:before{content:""}.icon-skype:before{content:""}.icon-trello:before{content:""}.icon-slack:before{content:""}.icon-wordpress:before{content:""}.icon-google:before{content:""}.icon-reddit:before{content:""}.icon-behance:before{content:""}.icon-steam:before{content:""}.icon-codepen:before{content:""}.icon-git-square:before{content:""}.icon-git:before{content:""}.icon-header:before{content:""}.icon-twitch:before{content:""}.icon-pinterest-p:before{content:""}.icon-get-pocket:before{content:""}.icon-wikipedia-w:before{content:""}.icon-safari:before{content:""}.icon-chrome:before{content:""}.icon-firefox:before{content:""}.icon-opera:before{content:""}.icon-internet-explorer:before{content:""}.icon-amazon:before{content:""}.icon-vimeo:before{content:""}.icon-reddit-alien:before{content:""}.icon-edge:before{content:""}.icon-gitlab:before{content:""}.icon-snapchat-ghost:before{content:""}.icon-eye2:before{content:""}.icon-paper-clip:before{content:""}.icon-mail2:before{content:""}.icon-toggle:before{content:""}.icon-layout:before{content:""}.icon-link2:before{content:""}.icon-bell2:before{content:""}.icon-lock:before{content:""}.icon-unlock:before{content:""}.icon-ribbon:before{content:""}.icon-image:before{content:""}.icon-signal:before{content:""}.icon-target:before{content:""}.icon-clipboard:before{content:""}.icon-clock:before{content:""}.icon-watch2:before{content:""}.icon-air-play:before{content:""}.icon-camera:before{content:""}.icon-video:before{content:""}.icon-disc:before{content:""}.icon-printer:before{content:""}.icon-monitor:before{content:""}.icon-server:before{content:""}.icon-cog:before{content:""}.icon-heart:before{Line truncated
|
||||
* animate.css -http://daneden.me/animate
|
||||
* Version - 3.5.1
|
||||
* Licensed under the MIT license - http://opensource.org/licenses/MIT
|
||||
*
|
||||
* Copyright (c) 2016 Daniel Eden
|
||||
*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.flipOutX,.animated.flipOutY,.animated.bounceIn,.animated.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{from,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -15px, 0);transform:translate3d(0, -15px, 0)}90%{-webkit-transform:translate3d(0, -4px, 0);transform:translate3d(0, -4px, 0)}}@keyframes bounce{from,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -15px, 0);transform:translate3d(0, -15px, 0)}90%{-webkit-transform:translate3d(0, -4px, 0);transform:translate3d(0, -4px, 0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes pulse{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}30%{-webkit-transform:scale3d(1.25, 0.75, 1);transform:scale3d(1.25, 0.75, 1)}40%{-webkit-transform:scale3d(0.75, 1.25, 1);transform:scale3d(0.75, 1.25, 1)}50%{-webkit-transform:scale3d(1.15, 0.85, 1);transform:scale3d(1.15, 0.85, 1)}65%{-webkit-transform:scale3d(0.95, 1.05, 1);transform:scale3d(0.95, 1.05, 1)}75%{-webkit-transform:scale3d(1.05, 0.95, 1);transform:scale3d(1.05, 0.95, 1)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes rubberBand{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}30%{-webkit-transform:scale3d(1.25, 0.75, 1);transform:scale3d(1.25, 0.75, 1)}40%{-webkit-transform:scale3d(0.75, 1.25, 1);transform:scale3d(0.75, 1.25, 1)}50%{-webkit-transform:scale3d(1.15, 0.85, 1);transform:scale3d(1.15, 0.85, 1)}65%{-webkit-transform:scale3d(0.95, 1.05, 1);transform:scale3d(0.95, 1.05, 1)}75%{-webkit-transform:scale3d(1.05, 0.95, 1);transform:scale3d(1.05, 0.95, 1)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkiLine truncated
|
||||
* jQuery contextMenu - Plugin for simple contextMenu handling
|
||||
*
|
||||
* Version: v2.2.5-dev
|
||||
*
|
||||
* Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
|
||||
* Web: http://swisnl.github.io/jQuery-contextMenu/
|
||||
*
|
||||
* Copyright (c) 2011-2016 SWIS BV and contributors
|
||||
*
|
||||
* Licensed under
|
||||
* MIT License http://www.opensource.org/licenses/mit-license
|
||||
*
|
||||
* Date: 2016-08-27T11:09:08.919Z
|
||||
*/.context-menu-icon{display:list-item;font-family:inherit}.context-menu-icon::before{position:absolute;top:50%;left:0;width:2em;font-family:FontAwesome;font-size:14px;font-style:normal;font-weight:normal;line-height:1;color:#2196f3;text-align:center;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled::before{color:#bbb}.context-menu-list{position:absolute;display:inline-block;min-width:13em;max-width:26em;padding:0 0;margin:.3em;font-family:inherit;font-size:14px;list-style-type:none;background:#fff;border:1px solid #2196f3;border-radius:.2em;-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.25);box-shadow:0 2px 5px rgba(0,0,0,0.25)}.context-menu-item{position:relative;padding:7px 2em;color:#69707a;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;font-size:14px;text-align:left}.context-menu-separator{padding:0;margin:.35em 0;border-bottom:1px solid #e6e6e6}.context-menu-item.context-menu-hover{color:#fff;cursor:pointer;background-color:#2196f3}.context-menu-item.context-menu-disabled{color:#bbb;cursor:default;background-color:#fff}.context-menu-input.context-menu-hover{cursor:default}.context-menu-submenu:after{position:absolute;top:50%;right:.5em;z-index:1;width:0;height:0;content:'';border-color:transparent transparent transparent #2f2f2f;border-style:solid;border-width:.25em 0 .25em .25em;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.context-menu-item>.context-menu-list{top:.3em;right:-.3em;display:none}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline}.hljs{display:block;overflow-x:auto;padding:0.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-link{text-decoration:underline}.CodeMirror{color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirroLine truncated
|
||||
/*# sourceMappingURL=bundle.css.map */
|
||||
Binary file not shown.
@@ -0,0 +1,189 @@
|
||||
'use strict'
|
||||
|
||||
/**
|
||||
* FUSEBOX
|
||||
*
|
||||
* Client & Server compiler / bundler / watcher
|
||||
*/
|
||||
|
||||
const Promise = require('bluebird')
|
||||
const autoprefixer = require('autoprefixer')
|
||||
const colors = require('colors/safe')
|
||||
const fsbx = require('fuse-box')
|
||||
const nodemon = require('nodemon')
|
||||
const fs = require('fs-extra')
|
||||
const yargs = require('yargs')
|
||||
const yaml = require('js-yaml')
|
||||
const path = require('path')
|
||||
|
||||
// -------------------------------------------------------
|
||||
// PARSE CMD ARGUMENTS
|
||||
// -------------------------------------------------------
|
||||
|
||||
const opts = yargs
|
||||
.option('d', {
|
||||
alias: 'dev',
|
||||
describe: 'Start in Developer mode',
|
||||
type: 'boolean'
|
||||
})
|
||||
.option('b', {
|
||||
alias: 'build',
|
||||
describe: 'Start in Build mode',
|
||||
type: 'boolean'
|
||||
})
|
||||
.help('h')
|
||||
.alias('h', 'help')
|
||||
.argv
|
||||
|
||||
if (opts.dev) {
|
||||
console.info(colors.bgWhite.black(' Starting Wiki.js in DEVELOPER mode... '))
|
||||
} else if (opts.build) {
|
||||
console.info(colors.bgWhite.black(' Starting Wiki.js in BUILD mode... '))
|
||||
} else {
|
||||
yargs.showHelp()
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// GET CONFIG
|
||||
// -------------------------------------------------------
|
||||
|
||||
try {
|
||||
const config = yaml.safeLoad(fs.readFileSync(path.join(process.cwd(), 'dev/config/config.yml'), 'utf8'))
|
||||
global.config = config
|
||||
} catch (ex) {
|
||||
console.error(ex)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// BUILD VARS
|
||||
// -------------------------------------------------------
|
||||
|
||||
const ALIASES = {
|
||||
'brace-ext-modelist': 'brace/ext/modelist.js',
|
||||
'simplemde': 'simplemde/dist/simplemde.min.js',
|
||||
'vue': (opts.dev) ? 'vue/dist/vue.js' : 'vue/dist/vue.min.js',
|
||||
'vue-lodash': 'vue-lodash/dist/vue-lodash.min.js',
|
||||
'vue-resource': (opts.dev) ? 'vue-resource/dist/vue-resource.js' : 'vue-resource/dist/vue-resource.es2015.js'
|
||||
}
|
||||
const SHIMS = {
|
||||
diff2html: {
|
||||
source: '../../node_modules/diff2html/dist/diff2html.min.js',
|
||||
exports: 'Diff2Html'
|
||||
},
|
||||
diff2htmlui: {
|
||||
source: '../../node_modules/diff2html/dist/diff2html-ui.min.js',
|
||||
exports: 'Diff2HtmlUI'
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// Tasks
|
||||
// -------------------------------------------------------
|
||||
|
||||
console.info(colors.white('└── ') + colors.green('Running tasks...'))
|
||||
let tasks = require('./tasks')
|
||||
let tasksToRun = []
|
||||
|
||||
tasksToRun.push(tasks.cleanFuseboxCache)
|
||||
tasksToRun.push(tasks.copySimpleMdeAssets)
|
||||
tasksToRun.push(tasks.copyAceModes)
|
||||
|
||||
if (opts.build) {
|
||||
tasksToRun.push(tasks.cleanTestResults)
|
||||
tasksToRun.push(tasks.fetchLocalizationResources)
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// FUSEBOX PRODUCER
|
||||
// -------------------------------------------------------
|
||||
|
||||
const babelrc = fs.readJsonSync('.babelrc')
|
||||
const scssChain = [
|
||||
fsbx.SassPlugin({
|
||||
includePaths: ['node_modules'],
|
||||
outputStyle: opts.dev ? 'nested' : 'compressed'
|
||||
}),
|
||||
fsbx.PostCSS([
|
||||
autoprefixer({
|
||||
remove: false,
|
||||
browsers: babelrc.presets[0][1].targets.browsers
|
||||
})
|
||||
]),
|
||||
fsbx.CSSPlugin(opts.dev ? {} : {
|
||||
group: 'bundle.css',
|
||||
outFile: './assets/css/bundle.css',
|
||||
inject: false
|
||||
})
|
||||
]
|
||||
|
||||
Promise.mapSeries(tasksToRun, fn => fn()).then(() => {
|
||||
let fuse = fsbx.FuseBox.init({
|
||||
homeDir: '../../client',
|
||||
output: '../../assets/js/$name.js',
|
||||
alias: ALIASES,
|
||||
target: 'browser',
|
||||
tsConfig: '../config/tsconfig.json',
|
||||
plugins: [
|
||||
fsbx.EnvPlugin({ NODE_ENV: (opts.dev) ? 'development' : 'production' }),
|
||||
fsbx.VueComponentPlugin({
|
||||
script: fsbx.BabelPlugin(babelrc),
|
||||
template: fsbx.ConsolidatePlugin({
|
||||
engine: 'pug'
|
||||
}),
|
||||
style: scssChain
|
||||
}),
|
||||
scssChain,
|
||||
fsbx.RawPlugin(['.svg']),
|
||||
fsbx.BabelPlugin(babelrc),
|
||||
fsbx.JSONPlugin()
|
||||
],
|
||||
debug: false,
|
||||
log: true
|
||||
})
|
||||
|
||||
// -------------------------------------------------------
|
||||
// FUSEBOX DEV
|
||||
// -------------------------------------------------------
|
||||
|
||||
if (opts.dev) {
|
||||
fuse.dev({
|
||||
port: 5555,
|
||||
httpServer: false
|
||||
})
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// FUSEBOX BUNDLES
|
||||
// -------------------------------------------------------
|
||||
|
||||
if (opts.dev) {
|
||||
fuse.bundle('libs').shim(SHIMS).instructions('~ index.js')
|
||||
fuse.bundle('app').instructions('!> [index.js]').hmr({ reload: true }).watch()
|
||||
} else {
|
||||
fuse.bundle('bundle.min.js').shim(SHIMS).instructions('> index.js')
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
// FUSEBOX RUN
|
||||
// -------------------------------------------------------
|
||||
|
||||
fuse.run().then(() => {
|
||||
console.info(colors.green.bold('\nAssets compilation + bundling completed.'))
|
||||
|
||||
if (opts.dev) {
|
||||
nodemon({
|
||||
exec: 'node server',
|
||||
ignore: ['assets/', 'client/', 'data/', 'dev/', 'node_modules/', 'repo/', 'test/', 'test-results/'],
|
||||
ext: 'js json graphql',
|
||||
watch: ['server'],
|
||||
env: { 'NODE_ENV': 'development' }
|
||||
})
|
||||
}
|
||||
return true
|
||||
}).catch(err => {
|
||||
console.error(colors.red(' X Bundle compilation failed! ' + err.message))
|
||||
process.exit(1)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,118 @@
|
||||
/* global config */
|
||||
|
||||
const Promise = require('bluebird')
|
||||
const colors = require('colors/safe')
|
||||
const fs = Promise.promisifyAll(require('fs-extra'))
|
||||
const path = require('path')
|
||||
const uglify = require('uglify-es')
|
||||
const request = require('request-promise')
|
||||
const yaml = require('js-yaml')
|
||||
const _ = require('lodash')
|
||||
|
||||
module.exports = {
|
||||
async fetchLocalizationResources () {
|
||||
console.info(colors.white(' └── ') + colors.green('Fetching latest localization resources...'))
|
||||
let langs = await request({
|
||||
method: 'POST',
|
||||
uri: `${config.lokalise.api}/string/list`,
|
||||
form: {
|
||||
api_token: config.lokalise.key,
|
||||
id: config.lokalise.project
|
||||
},
|
||||
json: true
|
||||
})
|
||||
if (langs && langs.strings && _.isPlainObject(langs.strings)) {
|
||||
_.forIn(langs.strings, (langData, langKey) => {
|
||||
let lang = {}
|
||||
let langTotal = 0
|
||||
langData.forEach(item => {
|
||||
if (item.is_archived === '1') { return }
|
||||
item.key = _.replace(item.key, '::', '.')
|
||||
_.set(lang, item.key, item.translation)
|
||||
langTotal++
|
||||
})
|
||||
let langYaml = yaml.safeDump(lang, {
|
||||
indent: 2,
|
||||
sortKeys: true,
|
||||
lineWidth: 2048
|
||||
})
|
||||
fs.writeFileSync(path.join(process.cwd(), `server/locales/${langKey}.yml`), langYaml, 'utf8')
|
||||
console.info(colors.white(` ${langKey}.yml - ${langTotal} keys written`))
|
||||
})
|
||||
} else {
|
||||
throw new Error('Failed to fetch language list from Lokalise API.')
|
||||
}
|
||||
return true
|
||||
},
|
||||
/**
|
||||
* SimpleMDE
|
||||
*/
|
||||
copySimpleMdeAssets () {
|
||||
return fs.accessAsync('./assets/js/simplemde').then(() => {
|
||||
console.info(colors.white(' └── ') + colors.magenta('SimpleMDE directory already exists. Task skipped.'))
|
||||
return true
|
||||
}).catch(err => {
|
||||
if (err.code === 'ENOENT') {
|
||||
console.info(colors.white(' └── ') + colors.green('Copy + Minify SimpleMDE to assets...'))
|
||||
return fs.copy('./node_modules/simplemde/dist/simplemde.min.js', './assets/js/simplemde/simplemde.min.js')
|
||||
} else {
|
||||
throw err
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* ACE Modes
|
||||
*/
|
||||
copyAceModes () {
|
||||
return fs.accessAsync('./assets/js/ace').then(() => {
|
||||
console.info(colors.white(' └── ') + colors.magenta('ACE modes directory already exists. Task skipped.'))
|
||||
return true
|
||||
}).catch(err => {
|
||||
if (err.code === 'ENOENT') {
|
||||
console.info(colors.white(' └── ') + colors.green('Copy + Minify ACE modes to assets...'))
|
||||
return fs.ensureDirAsync('./assets/js/ace').then(() => {
|
||||
return Promise.join(
|
||||
// Core
|
||||
Promise.all([
|
||||
fs.readFileAsync('./node_modules/brace/index.js', 'utf8'),
|
||||
fs.readFileAsync('./node_modules/brace/ext/modelist.js', 'utf8'),
|
||||
fs.readFileAsync('./node_modules/brace/theme/dawn.js', 'utf8'),
|
||||
fs.readFileAsync('./node_modules/brace/theme/tomorrow_night.js', 'utf8'),
|
||||
fs.readFileAsync('./node_modules/brace/mode/markdown.js', 'utf8')
|
||||
]).then(items => {
|
||||
console.info(colors.white(' ace.js'))
|
||||
let result = uglify.minify(items.join(';\n'), { output: { 'max_line_len': 1000000 } })
|
||||
return fs.writeFileAsync('./assets/js/ace/ace.js', result.code)
|
||||
}),
|
||||
// Modes
|
||||
fs.readdirAsync('./node_modules/brace/mode').then(modeList => {
|
||||
return Promise.map(modeList, mdFile => {
|
||||
return fs.readFileAsync(path.join('./node_modules/brace/mode', mdFile), 'utf8').then(modeCode => {
|
||||
console.info(colors.white(' mode-' + mdFile))
|
||||
let result = uglify.minify(modeCode, { output: { 'max_line_len': 1000000 } })
|
||||
return fs.writeFileAsync(path.join('./assets/js/ace', 'mode-' + mdFile), result.code)
|
||||
})
|
||||
}, { concurrency: 3 })
|
||||
})
|
||||
)
|
||||
})
|
||||
} else {
|
||||
throw err
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Delete Fusebox cache
|
||||
*/
|
||||
cleanFuseboxCache () {
|
||||
console.info(colors.white(' └── ') + colors.green('Clearing fuse-box cache...'))
|
||||
return fs.emptyDirAsync('./.fusebox')
|
||||
},
|
||||
/**
|
||||
* Delete Test Results
|
||||
*/
|
||||
cleanTestResults () {
|
||||
console.info(colors.white(' └── ') + colors.green('Clearing test results...'))
|
||||
return fs.remove('./test-results')
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user