Your IP : 3.128.170.204


Current Path : /usr/local/mgr5/skins/orion/
Upload File :
Current File : //usr/local/mgr5/skins/orion/Gruntfile.js

/**
 * 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']);

};