Your IP : 3.128.170.204
/**
* Grunt main file
* @param {function} grunt Grunt function
* How to use
* grunt - default task for production
* grunt devel - make non-min files
* grunt deploy - upload js to dev server
*
*/
const sass = require('node-sass');
// var DEV_SERVER = '172.31.240.212',
//var DEV_SERVER = 'ux.ispsystem.net',
//var DEV_SERVER = 'tsjee.ru',
//var DEV_SERVER = '172.31.247.27',
var DEV_SERVER = '172.31.225.71',
//var DEV_SERVER = '172.16.0.7',
PORT = '22',
// PORT = '10043',
THEME = 'orion/',
//THEME = 'testorion/',
OPTIMIZATIONLEVEL = 'SIMPLE_OPTIMIZATIONS';
//WHITESPACE_ONLY
//SIMPLE_OPTIMIZATIONS
var myTerminal = require('child_process').exec,
command = "git branch | sed -n '/\* /s///p'",
branch;
myTerminal(command, function(error, stdout, stderr) {
if (!error) {
branch = stdout;
}
});
/** список модулей для логиновской формы */
const appLoginModule = [
'Common',
'FormUtils',
'FormDependFields',
'Forms',
'Select',
'ScrollController',
'AjaxHelper',
'LoginForm'
];
/** список модулей для внешней формы */
const appExtFormModule = [
'Common',
'Dom',
'FormUtils',
'FormDependFields',
'Forms',
'Wizards',
'ScrollController',
'AjaxHelper',
'ValidChecker',
'Slider',
'SelectAutoComplete',
'Help',
'Hint',
'MultiSelect',
'Select',
'ActionHandler',
'Tabs',
'Showcase',
'ExtFormHelper',
'ProgressBar',
'UpSize',
'InputMask',
'Calendar',
'PrefixSelect',
'Validators',
];
const appStoreModule = [
'Common',
'Dom',
'FormUtils',
'FormDependFields',
'Forms',
'Wizards',
'ScrollController',
'AjaxHelper',
'ValidChecker',
'Slider',
'SelectAutoComplete',
'MultiSelect',
'Select',
'ActionHandler',
'Tabs',
'ExtFormHelper',
'ProgressBar',
'FormListFilter',
'PrefixSelect',
'Store',
'StoreBasket',
'StoreUserMenu',
'Validators',
'Alert',
];
const appDesktopModule = [
'Common',
'Dom',
'Menu',
'UpSize',
'ScrollController',
'AceEditor',
'ActionHandler',
'ActionHandlerList',
'ActionHandlerDashboard',
'AjaxHelper',
'Alert',
'FormUtils',
'FormDependFields',
'Forms',
'MultiSelect',
'Select',
'Bands',
'ChangeBrandColors',
'Cookie',
'DashboardDragAndDrop',
'Deview',
'EditInList',
'FilterList',
'GoogleCharts',
'Captcha',
'Help',
'Hint',
'HorizontScroll',
'HotKeys',
'KeepAlive',
'List',
'ListSorting',
'LiveListFilter',
'LoadScripts',
'LocalStorage',
'MultiLoadTabs',
'ProgressBar',
'SendFormWithFiles',
'Slider',
'SelectAutoComplete',
'TableRowResize',
'Tabs',
'Validators',
'Wizards',
'Calendar',
'ValidChecker',
'Toolbar',
'Map',
'Builder',
'CheckRestart',
'TinyMCE',
'FormWatcher',
'ConfirmBox',
'HorizScrollControl',
'DashboardList',
'Desktop',
'MessageTempl',
'FontSettings',
'ContentMistake',
'CopyToBuffer',
'TestCases',
'TabDrag',
'UsefulLinks',
'InputMask',
'FormListFilter',
'LightBoxProvider',
'FormFixedField',
'GroupEdit',
'GlobalSearch',
'PrefixSelect',
'ResizeFormPage',
'ConfirmForm',
'FieldHeight',
'Jscript',
'Notify',
];
/**
*
*/
function getModuleBuildList(moduleList) {
return moduleList.map(function(moduleName) {
return `build/App.${moduleName}.js`;
});
}
/**
*
*/
function getModuleInitList(moduleList) {
return moduleList.map(function(moduleName) {
return `App.${moduleName}.init`;
});
}
/**
*
*/
function getModuleForBabel(moduleList) {
let outputObject = {};
moduleList.forEach(function(moduleName) {
outputObject[`build/App.${moduleName}.js`] = `src/App.${moduleName}.js`;
});
return outputObject;
}
module.exports = function(grunt) {
//make load modules file
grunt.registerMultiTask('makeLoader', 'Write load modules file', function() {
var modules = this.data.modules,
l = modules.length,
stringModules = '',
prefix = grunt.file.read(this.data.prefix),
suffix = grunt.file.read(this.data.suffix),
dest = this.data.dest;
stringModules += prefix;
stringModules += '\n\t\t\t';
for (var i = 0; i < l; i++) {
if (i !== 0) {
stringModules += '\n\t\t\t,';
}
stringModules += modules[i];
}
stringModules += '\n';
stringModules += suffix;
grunt.file.write(dest, stringModules);
grunt.log.write('File "' + dest + '" just has created\n');
});
var descRemove = 'Remove line breaks in files';
//remove line break form files
grunt.registerMultiTask('removeLineBreak', descRemove, function() {
var files = this.data.files,
l = files.length,
fileContent, fileLines, fl;
while (l--) {
fileContent = grunt.file.read(files[l].src);
fileLines = fileContent.split('\n');
fl = fileLines.length;
while (fl--) {
fileLines[fl] = fileLines[fl].
replace(/^\s+|\s+$/g, '').
replace(/^\t+|\t+$/g, '');
}
fileContent = fileLines.join('');
grunt.file.write(files[l].dest, fileContent);
grunt.log.write('File "' + files[l].dest + '" just has created\n');
}
});
//make js template from html pages
grunt.registerMultiTask('makeTempl', 'Make templates', function() {
var files = this.data.files,
dest = this.data.dest,
l = files.length,
fileContent, output = '',
headContent = "var __FILENAME__ = '",
tailContent = "';",
fileLines, fl, path;
while (l--) {
path = 'templates/' + files[l].name + '.html';
fileContent = grunt.file.read(path);
output += headContent.replace('__FILENAME__', files[l].name) +
fileContent + tailContent;
}
fileLines = output.split('\n');
fl = fileLines.length;
while (fl--) {
fileLines[fl] = fileLines[fl].
replace(/^\s+|\s+$/g, '').
replace(/^\t+|\t+$/g, '');
}
output = fileLines.join('');
grunt.file.write(dest, output);
grunt.log.write(output);
});
var rmConcatStr = 'Remove concat strings';
//
grunt.registerMultiTask('removeConCatStrings', rmConcatStr, function() {
var files = this.data.files,
l = files.length,
fileContent;
while (l--) {
fileContent = grunt.file.read(files[l].src);
fileContent = fileContent.replace(/['"]\s*\+\s*['"]/g, '');
grunt.file.write(files[l].dest, fileContent);
grunt.log.write('File "' + files[l].dest + '", removed concat\n');
}
});
//add build date of js files
grunt.registerMultiTask('addDateBuild', 'Added build time', function() {
var files = this.data.files,
l = files.length,
fileContent,
date = '//Build date: ' + (new Date()).toLocaleString() + '\n';
date += '//Branch: ' + branch;
while (l--) {
fileContent = grunt.file.read(files[l].src);
fileContent = date + fileContent;
grunt.file.write(files[l].dest, fileContent);
grunt.log.write('File "' + files[l].dest + '", add build date\n');
}
grunt.log.write(date);
});
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
appDesktop: {
files: [{
src: [
'src/App.js',
...getModuleBuildList(appDesktopModule),
'src/App.Loader.Desktop.js',
'src/App.ErrorReport.js',
'src/App.Stuff.js'
],
dest: 'devel/app-desktop.js'
}]
},
appLogin: {
files: [{
src: [
'src/App.js',
...getModuleBuildList(appLoginModule),
'src/App.Loader.LoginForm.js',
'src/App.ErrorReport.js',
'src/App.Stuff.js'
],
dest: 'devel/app-login.js'
}]
},
appExtForm: {
files: [{
src: [
'src/App.js',
...getModuleBuildList(appExtFormModule),
'src/App.Loader.ExtForm.js',
'src/App.ErrorReport.js',
'src/App.Stuff.js'
],
dest: 'devel/app-extform.js'
}]
},
appStore: {
files: [{
src: [
//libs
'lib/xss.min.js',
'lib/jquery.inputmask.min.js',
'lib/doT.min.js',
//utils
'build/jquery.ajaxq.js',
'build/templates.js',
'build/eventmgr.js',
'build/scroll.js',
//Apps
'src/App.js',
...getModuleBuildList(appStoreModule),
'src/App.Loader.Store.js',
'src/App.ErrorReport.js',
'src/App.Stuff.js'
],
dest: 'devel/app-store.js'
}]
},
utils: {
files: [{
src: [
'build/jquery.ajaxq.js',
'build/templates.js',
'build/eventmgr.js',
'build/scroll.js'],
dest: 'devel/utils.js'
}]
},
dcmap: {
files: [{
src: [
'build/dcmap.js',
'build/rack.js',
'build/svg.js'],
dest: 'devel/dcmap.js'
}]
},
libs: {
files: [{
src: [
//'lib/ZeroClipboard.min.js',
'lib/xss.min.js',
'lib/jquery.inputmask.min.js',
'lib/doT.min.js'],
dest: 'lib/libs.min.js'
}]
}
},
makeLoader: {
'appDesktop': {
'modules': [
...getModuleInitList(appDesktopModule)
],
'dest' : 'src/App.Loader.Desktop.js',
'prefix': 'src/LoaderHead.js',
'suffix': 'src/LoaderFooter.js'
},
'appLogin': {
'modules': [
...getModuleInitList(appLoginModule),
],
'dest' : 'src/App.Loader.LoginForm.js',
'prefix': 'src/LoaderHead.js',
'suffix': 'src/LoaderFooter.js'
},
'appExtForm': {
'modules': [
...getModuleInitList(appExtFormModule)
],
'dest' : 'src/App.Loader.ExtForm.js',
'prefix': 'src/LoaderHead.js',
'suffix': 'src/LoaderFooter.js'
},
'appStore': {
'modules': [
...getModuleInitList(appStoreModule)
],
'dest': 'src/App.Loader.Store.js',
'prefix': 'src/LoaderHead.js',
'suffix': 'src/LoaderStoreFooter.js'
}
},
removeLineBreak: {
'xsl': {
'files': [
{ 'src': 'src/modules.xsl',
'dest': 'modules.xsl' },
{ 'src': 'src/map.xsl',
'dest': 'map.xsl' },
{ 'src': 'src/setvalues.xsl',
'dest': 'setvalues.xsl' },
{ 'src': 'src/editinlist.xsl',
'dest': 'editinlist.xsl' },
{ 'src': 'src/dashboard.xsl',
'dest': 'dashboard.xsl' },
{ 'src': 'src/dashboard-report.xsl',
'dest': 'dashboard-report.xsl' },
{ 'src': 'src/notify.xsl',
'dest': 'notify.xsl' }
]
}
},
makeTempl: {
'html': {
'files': [
{ 'name': 'messages' },
{ 'name': 'banner' }
],
dest: 'templates/templates.js'
}
},
removeConCatStrings: {
js: {
files: [
{ 'src': 'utils.js',
'dest': 'utils.js' },
{ 'src': 'app-desktop.js',
'dest': 'app-desktop.js' },
{ 'src': 'app-login.js',
'dest': 'app-login.js' },
{ 'src': 'app-store.js',
'dest': 'app-store.js' },
{ 'src': 'app-extform.js',
'dest': 'app-extform.js' },
{ 'src': 'dcmap.js',
'dest': 'dcmap.js' }]
}
},
babel: {
options: {
sourceMap: true,
presets: [['env', {
'include': [
'transform-es2015-template-literals',
'transform-es2015-block-scoping'
]
}]]
},
dist: {
files: {
...getModuleForBabel(appLoginModule),
...getModuleForBabel(appDesktopModule),
...getModuleForBabel(appStoreModule),
...getModuleForBabel(appExtFormModule),
'build/jquery.ajaxq.js': 'src/jquery.ajaxq.js',
'build/templates.js': 'src/templates.js',
'build/eventmgr.js': 'src/eventmgr.js',
'build/scroll.js': 'src/scroll.js',
'build/dcmap.js': 'src/dcmap.js',
'build/rack.js': 'src/rack.js',
'build/svg.js': 'src/svg.js'
}
}
},
sass: {
dist: {
options: {
outputStyle: 'compact',
implementation: sass,
},
files: { // Dictionary of files
'default/main.css': 'sass/main.sass', // 'destination': 'source'
'default/showcase.css': 'sass/showcase.sass', // 'destination': 'source'
}
}
},
postcss: {
options: {
map: true, // inline sourcemaps
// or
map: {
inline: false, // save all sourcemaps as separate files...
annotation: 'default/map/' // ...to the specified directory
},
processors: [
require('pixrem')(), // add fallbacks for rem units
require('autoprefixer')({browsers: 'last 2 versions'}), // add vendor prefixes
//require('cssnano')() // minify the result
]
},
dist: {
src: 'default/*.css'
}
},
exec: {
'app-desktop': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/app-desktop.js ' +
'--compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file app-desktop.min.js',
stdout: true,
stderr: true
},
'app-login': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/app-login.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file app-login.min.js',
stdout: true,
stderr: true
},
'app-extform': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/app-extform.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file app-extform.min.js',
stdout: true,
stderr: true
},
'app-store': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/app-store.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file app-store.min.js',
stdout: true,
stderr: true
},
'xss': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js lib/xss.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file lib/xss.min.js',
stdout: true,
stderr: true
},
'dcmap': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/dcmap.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file dcmap.min.js',
stdout: true,
stderr: true
},
'utils': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js devel/utils.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file utils.min.js',
stdout: true,
stderr: true
},
'tinymce-plugin': {
command: '/usr/bin/java -jar tools/compiler.jar' +
' --js ../common/tinymce/plugins/isp_bill_macro/plugin.js' +
' --compilation_level ' + OPTIMIZATIONLEVEL +
' --js_output_file' +
' ../common/tinymce/plugins/isp_bill_macro/plugin.min.js',
stdout: true,
stderr: true
},
'rsync-all': {
'command': '/usr/bin/rsync -avzh ./ root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME,
},
'deploy-main': {
'command': '/usr/bin/scp -P ' + PORT +
' app-desktop.min.js app-login.min.js app-extform.min.js app-store.min.js billmgrStore.init.js' +
' utils.min.js dcmap.min.js ' +
' setvalues.xsl map.xsl dashboard.xsl form.inc.xsl showcase.xsl' +
' desktop.xsl print.xsl modules.xsl login.xsl extform.xsl' +
' form.inc.xsl showcase.xsl editinlist.xsl dashboard-report.xsl' +
' root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME,
stdout: true,
stderr: true
},
'deploy-css' : {
'command': '/usr/bin/scp -P ' + PORT +
' default/main.css ' +
'default/showcase.css ' +
'root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME + 'default',
stdout: true,
stderr: true
},
'deploy-img': {
'command': '/usr/bin/scp -P ' + PORT +
' img/* ' +
'root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME + 'img',
stdout: true,
stderr: true
},
'deploy-print' : {
'command': '/usr/bin/scp -P ' + PORT +
' ../common/css/print-version.css ' +
'root@' + DEV_SERVER + ':/usr/local/mgr5/skins/common/css',
stdout: true,
stderr: true
},
'deploy-libs': {
'command': '/usr/bin/scp -P ' + PORT +
' lib/libs.min.js ' +
'root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME + 'lib',
stdout: true,
stderr: true
},
'deploy-ispui': {
'command': '/usr/bin/scp -r -P ' + PORT +
' ispui-dist ' +
'root@' + DEV_SERVER + ':/usr/local/mgr5/skins/' + THEME,
stdout: true,
stderr: true
},
'deploy-desktop-devel': {
'command': '/usr/bin/scp -P ' + PORT +
' devel/app-desktop.js' +
' root@' + DEV_SERVER +
':/usr/local/mgr5/skins/orion/app-desktop.min.js'
},
'restart-core': {
'command': '/usr/bin/ssh -p ' + PORT +
' root@' + DEV_SERVER +
' "killall core"',
stdout: true,
stderr: true
}
},
jshint: {
options: {
curly: true,
camelcase: true,
eqeqeq: true,
plusplus: false,
forin: true,
browser: true,
laxcomma: true,
latedef: true,
newcap: true,
validthis: true,
globals: {
jQuery: true,
EventMgr: true,
pageInfo: true,
App: true
}
},
src: ['src/*.js',
'!src/LoaderFooter.js',
'!src/LoaderStoreFooter.js',
'!src/LoaderHead.js',
'!src/App.Loader.Desktop.js',
'!src/App.Loader.ExtForm.js',
'!src/App.Loader.LoginForm.js']
},
gjslint: {
options: {
flags: [
'--disable=6,11',
'--strict=true',
'--check_html=true',
'--multiprocess=true',
'--summary=true'
// '--flagfile .gjslintrc' //use flag file
],
reporter: {
name: 'console' //report to console
},
force: false //don't fail if python is not installed on the computer
},
test: {
src: ['src/*.js',
'!src/LoaderFooter.js',
'!src/LoaderStoreFooter.js',
'!src/LoaderHead.js',
'!src/App.Loader.Desktop.js',
'!src/App.Loader.ExtForm.js',
'!src/App.Loader.LoginForm.js']
}
},
addDateBuild: { js: {
files: [
{ 'src': 'utils.min.js',
'dest': 'utils.min.js' },
{ 'src': 'app-desktop.min.js',
'dest': 'app-desktop.min.js' },
{ 'src': 'app-login.min.js',
'dest': 'app-login.min.js' },
{ 'src': 'app-extform.min.js',
'dest': 'app-extform.min.js' },
{ 'src': 'dcmap.min.js',
'dest': 'dcmap.min.js' }]
}
},
csscomb: {
dist: {
options: {
config: '.csscomb.json'
},
files: {
'default/main.css': ['default/main.css']
}
}
},
jsvalidate: {
options: {
globals: {},
esprimaOptions: {},
verbose: false
},
targetName: {
files: {
src: ['build/*.js', 'devel/*.js', '!src/LoaderFooter.js', '!src/LoaderHead.js', '!src/LoaderStoreFooter.js']
}
}
}
});
// Load the plugins
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-exec');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-gjslint');
grunt.loadNpmTasks('grunt-csscomb');
grunt.loadNpmTasks('grunt-jsvalidate');
grunt.loadNpmTasks('grunt-babel');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-postcss');
// Default task(s).
grunt.registerTask('default', [
'sass',
'postcss',
'makeLoader',
'babel',
'concat',
'removeLineBreak',
'jsvalidate',
'exec:app-desktop',
'exec:app-login',
'exec:app-extform',
'exec:app-store',
'exec:dcmap',
'exec:utils',
'exec:xss',
'exec:tinymce-plugin'
// 'csscomb'
// 'makeTempl'
]);
// Devel task
grunt.registerTask('devel', ['makeLoader', 'concat', 'removeLineBreak']);
// Test tasks
grunt.registerTask('test', ['jshint', 'gjslint']);
// Deploy task
grunt.registerTask('deploy', [
'exec:deploy-main',
'exec:deploy-css',
'exec:deploy-img',
'exec:deploy-print',
'exec:deploy-ispui',
'exec:deploy-libs']);
// Restart coremgr for xslt
grunt.registerTask('restart', [
'exec:restart-core'
]);
grunt.registerTask('devel-deploy', ['exec:deploy-desktop-devel']);
grunt.registerTask('utils', [
'makeLoader',
'concat',
'removeLineBreak',
'exec:utils',
'exec:deploy-main']);
};