Sfoglia il codice sorgente

last sync 2017-03-06

TonyKang 8 anni fa
parent
commit
e732db0dcc
100 ha cambiato i file con 13559 aggiunte e 2 eliminazioni
  1. 11 0
      protect/controllers/billController.js
  2. 60 0
      protect/controllers/projectController.js
  3. 14 0
      protect/db/cfgdb.js
  4. 7 0
      protect/db/projectdb.js
  5. 7 0
      protect/db/smartcostdb.js
  6. 2 2
      protect/models/bills.js
  7. 132 0
      protect/models/calculate_demo.js
  8. 109 0
      protect/models/group_folder.js
  9. 202 0
      protect/rpt_component/JpcEx.js
  10. 52 0
      protect/rpt_component/Jpc_Band.js
  11. 78 0
      protect/rpt_component/Jpc_BillTab.js
  12. 548 0
      protect/rpt_component/Jpc_CrossTab.js
  13. 98 0
      protect/rpt_component/Jpc_Data.js
  14. 47 0
      protect/rpt_component/Jpc_Field.js
  15. 229 0
      protect/rpt_component/Jpc_FlowTab.js
  16. 18 0
      protect/rpt_component/Jpc_Function.js
  17. 27 0
      protect/rpt_component/Jpc_Param.js
  18. 47 0
      protect/rpt_component/Jpc_RTE.js
  19. 197 0
      protect/rpt_component/Jpc_ValueDefine.js
  20. 58 0
      protect/rpt_component/helper/Jpc_Helper_Area.js
  21. 74 0
      protect/rpt_component/helper/Jpc_Helper_Band.js
  22. 148 0
      protect/rpt_component/helper/Jpc_Helper_Common.js
  23. 60 0
      protect/rpt_component/helper/Jpc_Helper_CommonOutput.js
  24. 189 0
      protect/rpt_component/helper/Jpc_Helper_CrossTab.js
  25. 58 0
      protect/rpt_component/helper/Jpc_Helper_Discrete.js
  26. 44 0
      protect/rpt_component/helper/Jpc_Helper_Field.js
  27. 43 0
      protect/rpt_component/helper/Jpc_Helper_FlowTab.js
  28. 14 0
      protect/rpt_component/helper/Jpc_Helper_Text.js
  29. 1 0
      server.js
  30. 963 0
      src/ExcelConverter/ExcelConverter.js
  31. 125 0
      src/ZaoJiaShuTest.html
  32. 286 0
      src/baobiao.html
  33. 26 0
      src/css/cust_flex_grid.css
  34. BIN
      src/css/ztree/img/diy/1_close.png
  35. BIN
      src/css/ztree/img/diy/1_open.png
  36. BIN
      src/css/ztree/img/diy/2.png
  37. BIN
      src/css/ztree/img/diy/3.png
  38. BIN
      src/css/ztree/img/diy/4.png
  39. BIN
      src/css/ztree/img/diy/5.png
  40. BIN
      src/css/ztree/img/diy/6.png
  41. BIN
      src/css/ztree/img/diy/7.png
  42. BIN
      src/css/ztree/img/diy/8.png
  43. BIN
      src/css/ztree/img/diy/9.png
  44. BIN
      src/css/ztree/img/line_conn.gif
  45. BIN
      src/css/ztree/img/loading.gif
  46. BIN
      src/css/ztree/img/zTreeStandard.gif
  47. BIN
      src/css/ztree/img/zTreeStandard.png
  48. 97 0
      src/css/ztree/zTreeStyle.css
  49. 164 0
      src/gongliaoji.html
  50. BIN
      src/img/baobiao.png
  51. 1913 0
      src/js/ztree/jquery.ztree.core.js
  52. 628 0
      src/js/ztree/jquery.ztree.excheck.js
  53. 63 0
      src/scripts/excelSpreadHelper.js
  54. 279 0
      src/wijmo/controls/cultures/wijmo.culture.ar-AE.js
  55. 13 0
      src/wijmo/controls/cultures/wijmo.culture.ar-AE.min.js
  56. 279 0
      src/wijmo/controls/cultures/wijmo.culture.bg.js
  57. 13 0
      src/wijmo/controls/cultures/wijmo.culture.bg.min.js
  58. 279 0
      src/wijmo/controls/cultures/wijmo.culture.ca.js
  59. 13 0
      src/wijmo/controls/cultures/wijmo.culture.ca.min.js
  60. 279 0
      src/wijmo/controls/cultures/wijmo.culture.cs.js
  61. 13 0
      src/wijmo/controls/cultures/wijmo.culture.cs.min.js
  62. 279 0
      src/wijmo/controls/cultures/wijmo.culture.da.js
  63. 13 0
      src/wijmo/controls/cultures/wijmo.culture.da.min.js
  64. 279 0
      src/wijmo/controls/cultures/wijmo.culture.el.js
  65. 13 0
      src/wijmo/controls/cultures/wijmo.culture.el.min.js
  66. 280 0
      src/wijmo/controls/cultures/wijmo.culture.en-CA.js
  67. 13 0
      src/wijmo/controls/cultures/wijmo.culture.en-CA.min.js
  68. 280 0
      src/wijmo/controls/cultures/wijmo.culture.et.js
  69. 13 0
      src/wijmo/controls/cultures/wijmo.culture.et.min.js
  70. 279 0
      src/wijmo/controls/cultures/wijmo.culture.eu.js
  71. 13 0
      src/wijmo/controls/cultures/wijmo.culture.eu.min.js
  72. 279 0
      src/wijmo/controls/cultures/wijmo.culture.fi.js
  73. 13 0
      src/wijmo/controls/cultures/wijmo.culture.fi.min.js
  74. 280 0
      src/wijmo/controls/cultures/wijmo.culture.fr-CA.js
  75. 13 0
      src/wijmo/controls/cultures/wijmo.culture.fr-CA.min.js
  76. 279 0
      src/wijmo/controls/cultures/wijmo.culture.gl.js
  77. 13 0
      src/wijmo/controls/cultures/wijmo.culture.gl.min.js
  78. 279 0
      src/wijmo/controls/cultures/wijmo.culture.he.js
  79. 13 0
      src/wijmo/controls/cultures/wijmo.culture.he.min.js
  80. 280 0
      src/wijmo/controls/cultures/wijmo.culture.hi.js
  81. 13 0
      src/wijmo/controls/cultures/wijmo.culture.hi.min.js
  82. 279 0
      src/wijmo/controls/cultures/wijmo.culture.hr.js
  83. 13 0
      src/wijmo/controls/cultures/wijmo.culture.hr.min.js
  84. 279 0
      src/wijmo/controls/cultures/wijmo.culture.hu.js
  85. 13 0
      src/wijmo/controls/cultures/wijmo.culture.hu.min.js
  86. 279 0
      src/wijmo/controls/cultures/wijmo.culture.id.js
  87. 13 0
      src/wijmo/controls/cultures/wijmo.culture.id.min.js
  88. 279 0
      src/wijmo/controls/cultures/wijmo.culture.kk.js
  89. 13 0
      src/wijmo/controls/cultures/wijmo.culture.kk.min.js
  90. 279 0
      src/wijmo/controls/cultures/wijmo.culture.lt.js
  91. 13 0
      src/wijmo/controls/cultures/wijmo.culture.lt.min.js
  92. 279 0
      src/wijmo/controls/cultures/wijmo.culture.lv.js
  93. 13 0
      src/wijmo/controls/cultures/wijmo.culture.lv.min.js
  94. 279 0
      src/wijmo/controls/cultures/wijmo.culture.nl.js
  95. 13 0
      src/wijmo/controls/cultures/wijmo.culture.nl.min.js
  96. 279 0
      src/wijmo/controls/cultures/wijmo.culture.no.js
  97. 13 0
      src/wijmo/controls/cultures/wijmo.culture.no.min.js
  98. 279 0
      src/wijmo/controls/cultures/wijmo.culture.pl.js
  99. 13 0
      src/wijmo/controls/cultures/wijmo.culture.pl.min.js
  100. 0 0
      src/wijmo/controls/cultures/wijmo.culture.ro.js

+ 11 - 0
protect/controllers/billController.js

@@ -27,6 +27,17 @@ module.exports = {
             }
         });
     },
+    getAll_Construct: function(req, res) {
+        var user_id = req.body.user_id;
+        var project_id = req.body.project_id;
+        BillsData.getAll_Construct(user_id, project_id, function(err, bills){
+            if (bills) {
+                callback(req, res, err, bills);
+            } else {
+                callback(req, res, err, null);
+            }
+        });
+    },
     testCalculate: function(req, res){
         var user_id = req.body.user_id;
         calDemoMdl.testCalculate(user_id, function(err, result){

+ 60 - 0
protect/controllers/projectController.js

@@ -0,0 +1,60 @@
+/**
+ * Created by Tony on 2017/2/14.
+ */
+var PrjFolder = require('../models/group_folder');
+
+var callback = function(req, res, err, data){
+    if(err){
+        //res.send({success: false, error: err});
+        res.json({success: false, error: err});
+    }
+    else{
+        //res.send({success: true, data: data});
+        res.json({success:true, data: data});
+    }
+}
+
+module.exports = {
+    getAllProjects: function(req, res){
+        var user_id = req.body.user_id;
+        PrjFolder.getAll(user_id, function(err, result){
+            if (result) {
+                callback(req, res, err, result);
+            } else {
+                callback(req, res, err, null);
+            }
+        });
+    },
+    getProjectsByUserId: function(req, res) {
+        //var user_id = req.body.user_id;
+    },
+
+    saveProjects: function(req, res) {
+        var user_id = req.body.user_id;
+        var prjData = JSON.parse( req.body.prjData);
+        PrjFolder.createNew(user_id, prjData, function(err, result){
+            if (result) {
+                callback(req, res, err, result);
+            } else {
+                callback(req, res, err, null);
+            }
+        });
+    },
+
+    updateProject: function(req, res) {
+        var user_id = req.body.user_id;
+        var prj_id = req.body.prj_id;
+        var prj_Update = JSON.parse( req.body.prj_Update);
+        PrjFolder.update(user_id, prj_id, prj_Update, function(err, result){
+            if (result) {
+                callback(req, res, err, result);
+            } else {
+                callback(req, res, err, null);
+            }
+        });
+    },
+
+    remove: function(req, res){
+    }
+
+}

+ 14 - 0
protect/db/cfgdb.js

@@ -0,0 +1,14 @@
+/**
+ * Created by Tony on 2017/3/1.
+ */
+var mg = require('mongoose');
+//mg.connect('mongodb://localhost/Demo');
+exports.mongoose = {
+    getConnection : function(server, port, dbName) {
+        if (port) {
+            return mg.createConnection(server + ":" + port,dbName);
+        } else {
+            return mg.createConnection(server,dbName);
+        }
+    }
+};

+ 7 - 0
protect/db/projectdb.js

@@ -0,0 +1,7 @@
+/**
+ * Created by Tony on 2017/2/14.
+ */
+var mg = require('mongoose');
+var db = mg.createConnection('localhost','Projects');
+//mg.connect('mongodb://localhost/Reports');
+exports.mongoose = db;

+ 7 - 0
protect/db/smartcostdb.js

@@ -0,0 +1,7 @@
+/**
+ * Created by Tony on 2016/12/23.
+ */
+var mg = require('mongoose');
+var db = mg.createConnection('localhost','Reports');
+//mg.connect('mongodb://localhost/Reports');
+exports.mongoose = db;

+ 2 - 2
protect/models/bills.js

@@ -115,7 +115,7 @@ BillDataDAO.prototype.getAll = function(userid, callback){
 
 BillDataDAO.prototype.iniDb = function(server, port, dbName, collectionName, schema) {
     dbConnection = cfgdb.mongoose.getConnection(server, port, dbName);
-    ConstructBillData = dbConnection.model(collectionName, schema);;
+    ConstructBillData = dbConnection.model(collectionName, schema);
 }
 
 BillDataDAO.prototype.deIniDb = function() {
@@ -127,7 +127,7 @@ BillDataDAO.prototype.deIniDb = function() {
 BillDataDAO.prototype.getAll_Construct = function(userid, prjid, callback){
     var me = this;
     me.iniDb('localhost', null, 'Demo', "construct_bills", ConstructBillsSchema)
-    ConstructBillData.find({}, function(err, templates){
+    ConstructBillData.find({"ProjectID":prjid}, function(err, templates){
         me.deIniDb();
         if(templates.length){
             callback(false, templates);

+ 132 - 0
protect/models/calculate_demo.js

@@ -0,0 +1,132 @@
+/**
+ * Created by Tony on 2017/2/20.
+ */
+var mongoose = require('mongoose');
+var demodb = require('../db/demodb');
+var async = require('async');
+//var Schema = demodb.mongoose.Schema;
+var Schema = mongoose.Schema;
+
+var calSchema = new Schema({
+    "ID": Number,
+    "cal_type": Number,
+    "value": Number,
+    "test_result": Number
+});
+calSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
+    return this.collection.findAndModify(query, sort, doc, options, callback);
+};
+
+//var BillsData = demodb.mongoose.model("bills", BillsSchema);
+var calsMdl = demodb.mongoose.model("demo_cals", calSchema);
+
+var CalDataDAO = function(){};
+
+CalDataDAO.prototype.get = function(id, callback){
+    calsMdl.find({ID: id}, function(err, templates){
+        if(templates.length){
+            callback(false, templates[0]);
+        }
+        else{
+            callback('No result found!');
+        }
+    })
+}
+
+CalDataDAO.prototype.testCalculate = function(userid, callback) {
+    var startIdx = 1, endIdx = 100000, cnt = 1;
+    var testRst = 0;
+    var dt1 = new Date(), dt2 = null;
+    console.log('start time: ' + dt1);
+    demodb.mongoose.collections.demo_cals.find({"ID": {$gte: startIdx, $lte: endIdx}}).forEach( function(obj) {
+        if(obj.cal_type){
+            //*/
+            if(obj.cal_type == 1) {
+                //obj.test_result = obj.value * 1.1;
+                testRst = obj.value * 1.1;
+            } else if(obj.cal_type == 2) {
+                //obj.test_result = obj.value * 1.2;
+                testRst = obj.value * 1.2;
+            } else {
+                //obj.test_result = obj.value + 1;
+                testRst = obj.value + 1;
+            }
+            /*/
+            testRst = 0;
+            //obj.test_result = 0;
+            //*/
+        }
+        //demodb.mongoose.collections.demo_cals.save(obj);
+        demodb.mongoose.collections.demo_cals.update({_id: obj._id}, {$set: {test_result: testRst} } );
+        cnt++;
+        if (cnt > endIdx) {
+            dt2 = new Date();
+            console.log('finished time: ' + dt2);
+        }
+    });
+    callback(false, "calculate OK!");
+}
+
+CalDataDAO.prototype.testCalculate2 = function(userid, callback) {
+    var startIdx = 1, endIdx = 100000, cnt = 1;
+    var testRst = 0;
+    async.waterfall([
+        function (cb) {
+            var dt1 = new Date();
+            console.log('start time: ' + dt1 );
+            cb(null, dt1);
+        },
+        function (dt1, cb) {
+            calsMdl.find({"ID": {$gte: startIdx, $lte: endIdx}}, function(err, data){
+                var len = data.length;
+                var cnt = 0;
+                if(len){
+                    //callback(false, templates[0]);
+                    for (var i = 0; i < len; i++) {
+                        //*/
+                        if(data[i].cal_type == 1) {
+                            //data[i].test_result = data[i].value * 1.1;
+                            testRst = data[i].value * 1.1;
+                        } else if(data[i].cal_type == 2) {
+                            //data[i].test_result = data[i].value * 1.2;
+                            testRst = data[i].value * 1.2;
+                        } else {
+                            //data[i].test_result = data[i].value + 1;
+                            testRst = data[i].value + 1;
+                        }
+                        /*/
+                        testRst = 0;
+                        //*/
+                        //demodb.mongoose.collections.demo_cals.update({_id: obj._id}, {$set: {test_result: testRst} } );
+                        calsMdl.update({_id: data[i]._id}, {$set: {test_result: testRst}}, {upsert : false}, function(error){
+                            cnt++;
+                            if(error) {
+                                console.log(error);
+                                console.log('failed time: ' + (new Date()));
+                                callback("update failed!");
+                                //break;
+                            }
+                            //if (cnt >= len) {
+                            //    console.log('finished time: ' + (new Date()));
+                            //    cb(null, 'calculate OK!');
+                            //}
+                        });
+                    }
+                    console.log('finished time: ' + (new Date()));
+                    cb(null, 'calculate OK!');
+                }
+                else{
+                    cb('No result found!');
+                }
+            });
+        }
+    ], function (err, data) {
+        if (err) {
+            callback(err, "calculate failed!");
+        } else {
+            callback(err, data);
+        }
+    });
+}
+
+module.exports = new CalDataDAO();

+ 109 - 0
protect/models/group_folder.js

@@ -0,0 +1,109 @@
+/**
+ * Created by Tony on 2017/2/14.
+ */
+var mongoose = require('mongoose');
+var projectdb = require('../db/projectdb');
+
+var Schema = mongoose.Schema;
+var counterSchema = new Schema({
+    _id: String,
+    sequence_value: Number
+});
+counterSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
+    return this.collection.findAndModify(query, sort, doc, options, callback);
+};
+var counterModel = projectdb.mongoose.model("counters", counterSchema);
+
+//var UserGroupSchema = new Schema({
+//    "UserID": String,
+//    "TopID": Number,
+//    "Sequence": Number,
+//    "SubIDS": Array,
+//    "isReadOnly": Boolean,
+//    "Description": String
+//});
+
+var ProjectSchema = new Schema({
+    "ID" : Number,
+    "UserID": String,
+    "ParentID": Number,
+    "NextSiblingID": Number,
+    "parallelSeq": Number,
+    "innerSeq": Number,
+    "TypeID": Number,
+    "Name": String,
+    "Description": String
+});
+
+//var UserProjectsData = projectdb.mongoose.model("user_grps", UserGroupSchema);
+var ProjectsData = projectdb.mongoose.model("projects", ProjectSchema);
+
+var ProjectDataDAO = function(){};
+
+ProjectDataDAO.prototype.get = function(id, callback){
+    ProjectsData.find({ID: id}, function(err, templates){
+        if(templates.length){
+            callback(false, templates[0]);
+        }
+        else{
+            callback('No result found!');
+        }
+    })
+}
+
+ProjectDataDAO.prototype.getAll = function(userid, callback){
+    ProjectsData.find({}, function(err, templates){
+        if(templates.length){
+            callback(false, templates);
+        }
+        else{
+            callback('No result found!');
+        }
+    })
+}
+
+ProjectDataDAO.prototype.remove = function(userid, projectId, callback){
+    //
+}
+
+ProjectDataDAO.prototype.removeAll = function(userid, callback){
+    //
+}
+
+ProjectDataDAO.prototype.createNew = function(userid, folderData, callback){
+    counterModel.findAndModify({_id: "project_grp_id"}, [], { $inc: { sequence_value: 1 } }, {'new':true},
+        function (err, result) {
+            if (err) callback(err)
+            else {
+                //result.value.sequence_value
+                folderData.ID = result.value.sequence_value;
+                //ProjectsData.save
+                ProjectsData.create(folderData, function(err, result) {
+                    if(err) {
+                        console.log(err);
+                    } else {
+                        console.log('save ok');
+                    }
+                    //projectdb.close();
+                });
+            }
+        }
+    );
+}
+
+ProjectDataDAO.prototype.update = function(userid, prj_id, proUpdate, callback){
+    var conditions = {UserID: userid, ID: prj_id};
+    var update = proUpdate;
+    var options    = {upsert : false};
+    ProjectsData.update(conditions, update, options, function(error){
+        if(error) {
+            console.log(error);
+            callback("update failed!");
+        } else {
+            console.log('update ok!');
+            callback(false, "ok");
+        }
+    });
+}
+
+module.exports = new ProjectDataDAO();

+ 202 - 0
protect/rpt_component/JpcEx.js

@@ -0,0 +1,202 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcBand = require('./Jpc_Band');
+var JpcFlowTab = require('./Jpc_FlowTab');
+var JpcBillTab = require('./Jpc_BillTab');
+var JpcCrossTab = require('./Jpc_CrossTab');
+var JpcField = require('./Jpc_Field');
+var JpcParam = require('./Jpc_Param');
+var JpcFunc = require('./Jpc_Function');
+var JpcData = require('./Jpc_Data');
+var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
+var JE = require('./Jpc_RTE'); //Important: for self-define function execution purpose
+
+var JpcExSrv = function(){};
+JpcExSrv.prototype.createNew = function(){
+    function private_buildDftItems(rptTpl, dftCollection, propArray, nodeName) {
+        var rst = {};
+        if (dftCollection) {
+            for (var i = 0; i < dftCollection.length; i++) {
+                var item = {};
+                for (var j = 0; j < propArray.length; j++) {
+                    item[propArray[j]] = dftCollection[i][propArray[j]];
+                }
+                rst[dftCollection[i][JV.PROP_ID]] = item;
+            }
+            if (rptTpl && rptTpl[nodeName] && rptTpl[nodeName].length > 0) {
+                for (var i = 0; i < rptTpl[nodeName].length; i++) {
+                    var rptDftItem = rptTpl[nodeName][i];
+                    if (rst[rptDftItem[JV.PROP_ID]] == undefined) {
+                        var item = {};
+                        for (var j = 0; j < propArray.length; j++) {
+                            item[propArray[j]] = rptDftItem[propArray[j]];
+                        }
+                        rst[rptDftItem[JV.PROP_ID]] = item;
+                    }
+                }
+            }
+        }
+        return rst;
+    }
+    function private_buildDftControls(rptTpl, dftControlCollection) {
+        var rst = private_buildDftItems(rptTpl,dftControlCollection, JV.CONTROL_PROPS, JV.NODE_CONTROL_COLLECTION);
+        return rst;
+    }
+    function private_buildDftFonts(rptTpl, dftFontCollection) {
+        var rst = private_buildDftItems(rptTpl,dftFontCollection, JV.FONT_PROPS, JV.NODE_FONT_COLLECTION);
+        return rst;
+    }
+    function private_buildDftStyles(rptTpl, dftStyleCollection) {
+        var rst = {};
+        if (dftStyleCollection) {
+            for (var i = 0; i < dftStyleCollection.length; i++) {
+                var item = {};
+                if (dftStyleCollection[i][JV.PROP_BORDER_STYLE] && dftStyleCollection[i][JV.PROP_BORDER_STYLE].length > 0) {
+                    for (var j = 0; j < dftStyleCollection[i][JV.PROP_BORDER_STYLE].length; j++) {
+                        var borderItem = {};
+                        for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
+                            borderItem[JV.BORDER_STYLE_PROPS[k]] = dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];
+                        }
+                        item[dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;
+                    }
+                }
+                rst[dftStyleCollection[i][JV.PROP_ID]] = item;
+            }
+            if (rptTpl && rptTpl[JV.NODE_STYLE_COLLECTION] && rptTpl[JV.NODE_STYLE_COLLECTION].length > 0) {
+                for (var i = 0; i < rptTpl[JV.NODE_STYLE_COLLECTION].length; i++) {
+                    var rptDftItem = rptTpl[JV.NODE_STYLE_COLLECTION][i];
+                    if (rst[rptDftItem[JV.PROP_ID]] == undefined) {
+                        var item = {};
+                        for (var j = 0; j < rptDftItem[JV.PROP_BORDER_STYLE].length; j++) {
+                            var borderItem = {};
+                            for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {
+                                borderItem[JV.BORDER_STYLE_PROPS[k]] = rptDftItem[JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];
+                            }
+                            item[rptDftItem[JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;
+                        }
+                        rst[rptDftItem[JV.PROP_ID]] = item;
+                    }
+                }
+            }
+        }
+        return rst;
+    }
+    var JpcResult = {};
+    //JpcResult.report_title
+    JpcResult.initialize = function(rptTpl) {
+        var me = this;
+        if (rptTpl[JV.NODE_FLOW_INFO]) {
+            me.flowTab = JpcFlowTab.createNew();
+            me.flowTab.initialize();
+        }
+        if (rptTpl[JV.NODE_BILL_INFO]) {
+            me.billTab = JpcBillTab.createNew();
+            me.billTab.initialize();
+        }
+        //var dt1 = new Date();
+        if (rptTpl[JV.NODE_CROSS_INFO]) {
+            me.crossTab = JpcCrossTab.createNew();
+            me.crossTab.initialize();
+        }
+        me.totalPages = 0;
+        me.runTimePageData = {};
+        me.fields = JpcField.createNew(rptTpl);
+        me.params = JpcParam.createNew(rptTpl);
+        me.formulas = JpcFunc.createNew(rptTpl);
+    };
+
+    JpcResult.analyzeData = function(rptTpl, dataObj, defProperties) {
+        var me = this;
+        //1. data object
+        var dataHelper = JpcData.createNew();
+        dataHelper.analyzeData(rptTpl, dataObj);
+        //2. tab object
+        //pre-condition: the data should be sorted in SQL/NoSQL level!
+        //var dt1 = new Date();
+        if (me.flowTab) {
+            me.flowTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));
+        }
+        if (me.crossTab) {
+            me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));
+        }
+        //var dt2 = new Date();
+        //alert(dt2 - dt1);
+        //3. formulas
+        me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
+        //4. paging
+        me.paging(rptTpl, dataObj, defProperties);
+        //alert('analyzeData was completed!');
+        //for garbage collection:
+        dataHelper = null;
+    };
+    JpcResult.paging = function(rptTpl, dataObj, defProperties) {
+        var me = this;
+        if (me.flowTab) {
+            me.totalPages = me.flowTab.preSetupPages(rptTpl, dataObj, defProperties);
+        } else if (me.crossTab) {
+            me.totalPages = me.crossTab.preSetupPages(rptTpl, defProperties);
+        } else if (me.billTab) {
+            //me.totalPages = billTab.paging();
+        }
+    };
+    JpcResult.executeFormulas = function(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {
+        var me = this;
+        for (var i = 0; i < me.formulas.length; i++) {
+            if (me.formulas[i][JV.PROP_RUN_TYPE] === runType) {
+                var expression = me.formulas[i][JV.PROP_EXPRESSION];
+                if (expression) {
+                    eval(expression);
+                }
+            }
+        }
+    };
+    JpcResult.outputAsSimpleJSONPageArray = function(rptTpl, dataObj, startPage, endPage, defProperties) {
+        var me = this, rst = {};
+        if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {
+            rst[JV.NODE_CONTROL_COLLECTION] = private_buildDftControls(rptTpl, (defProperties == null)?null:defProperties.ctrls);
+            rst[JV.NODE_STYLE_COLLECTION] = private_buildDftStyles(rptTpl, (defProperties == null)?null:defProperties.styles);
+            rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);
+            rst[JV.NODE_PAGE_INFO] = JpcCommonHelper.getPageSize(rptTpl);
+            rst.items = [];
+            var bands = JpcBand.createNew(rptTpl, defProperties);
+            try {
+                for (var page = startPage; page <= endPage; page++) {
+                    me.runTimePageData.currentPage = page;
+                    me.executeFormulas(JV.RUN_TYPE_BEFORE_OUTPUT, rptTpl, dataObj, me);
+                    rst.items.push(me.outputAsSimpleJSONPage(rptTpl, dataObj, bands, page, rst[JV.NODE_CONTROL_COLLECTION]));
+                }
+                if (bands[JV.BAND_PROP_MERGE_BAND]) {
+                    var mergedBand = {}, band = bands[JV.BAND_PROP_MERGE_BAND];
+                    mergedBand[JV.PROP_LEFT] = band[JV.PROP_LEFT].toFixed(0);
+                    mergedBand[JV.PROP_RIGHT] = band[JV.PROP_RIGHT].toFixed(0);
+                    mergedBand[JV.PROP_TOP] = band[JV.PROP_TOP].toFixed(0);
+                    mergedBand[JV.PROP_BOTTOM] = band[JV.PROP_BOTTOM].toFixed(0);
+                    mergedBand[JV.BAND_PROP_STYLE] = band[JV.BAND_PROP_STYLE];
+                    rst[JV.BAND_PROP_MERGE_BAND] = mergedBand;
+                }
+            } finally {
+                bands = null;
+            }
+        }
+        return rst;
+    };
+    JpcResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, bands, page, controls) {
+        var me = this, rst = null;
+        if (me.totalPages >= page) {
+            rst = {};
+            rst[JV.PROP_PAGE_SEQ] = page;
+            //rst.cells = [];
+            if (me.flowTab) {
+                rst.cells = me.flowTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);
+            } else if (me.crossTab) {
+                rst.cells = me.crossTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);
+            } else if (me.billTab) {
+                //
+            }
+        }
+        return rst;
+    };
+    //JpcEx.rte.currentRptObj = JpcResult;
+    return JpcResult;
+}
+
+module.exports = new JpcExSrv();

+ 52 - 0
protect/rpt_component/Jpc_Band.js

@@ -0,0 +1,52 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
+var JpcBandHelper = require('./helper/Jpc_Helper_Band');
+
+var JpcBand = {
+    createNew: function(rptTpl, defProperties) {
+        var me = this;
+        var JpcBandResult = {};
+        if (rptTpl[JV.NODE_BAND_COLLECTION]) {
+            for (var i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_BAND_COLLECTION][i], JpcBandResult, rptTpl, defProperties);
+            }
+        }
+        return JpcBandResult;
+    },
+    createSingle: function(bandNode, parentObj, rptTpl, defProperties) {
+        var me = this;
+        if (bandNode && bandNode[JV.BAND_PROP_NAME]) {
+            var item = {Left:0, Right:0, Top:0, Bottom:0};
+            item[JV.BAND_PROP_STYLE] = JpcCommonHelper.getStyle(bandNode[JV.BAND_PROP_STYLE], defProperties.styles, null);
+            item[JV.BAND_PROP_CONTROL] = JpcCommonHelper.getControl(bandNode[JV.BAND_PROP_CONTROL], defProperties.ctrls, null);
+            if (bandNode[JV.BAND_PROP_HEIGHT]) {
+                item[JV.BAND_PROP_HEIGHT] = 1.0 * bandNode[JV.BAND_PROP_HEIGHT];
+            } else {
+                item[JV.BAND_PROP_HEIGHT] = 0.0;
+            }
+            if (bandNode[JV.BAND_PROP_WIDTH]) {
+                item[JV.BAND_PROP_WIDTH] = 1.0 * bandNode[JV.BAND_PROP_WIDTH];
+            } else {
+                item[JV.BAND_PROP_WIDTH] = 0.0;
+            }
+            item[JV.BAND_PROP_DISPLAY_TYPE] = JpcBandHelper.getBandTypeValByString(bandNode[JV.BAND_PROP_DISPLAY_TYPE]);
+            item[JV.BAND_PROP_ALIGNMENT] = JpcCommonHelper.getLayoutAlignment(bandNode[JV.BAND_PROP_ALIGNMENT]);
+            item[JV.PROP_CALCULATION] = JpcCommonHelper.getPosCalculationType(bandNode[JV.PROP_CALCULATION]);
+
+            if (bandNode[JV.BAND_PROP_MERGE_BORDER]) {
+                item[JV.BAND_PROP_MERGE_BORDER] = bandNode[JV.BAND_PROP_MERGE_BORDER];
+            }
+            if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
+                for (var i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+                    me.createSingle(bandNode[JV.BAND_PROP_SUB_BANDS][i], parentObj, rptTpl, defProperties);
+                }
+            }
+            parentObj[bandNode[JV.BAND_PROP_NAME]] = item;
+            if (item[JV.BAND_PROP_MERGE_BORDER] != null && item[JV.BAND_PROP_MERGE_BORDER] != undefined && item[JV.BAND_PROP_MERGE_BORDER] == 'T') {
+                parentObj[JV.BAND_PROP_MERGE_BAND] = item;
+            }
+        }
+    }
+}
+
+module.exports = JpcBand;

+ 78 - 0
protect/rpt_component/Jpc_BillTab.js

@@ -0,0 +1,78 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcFieldHelper = require('./helper/Jpc_Helper_Field');
+var JpcBandHelper = require('./helper/Jpc_Helper_Band');
+var JpcBand = require('./Jpc_Band');
+var JpcFlowTabHelper = require('./helper/Jpc_Helper_FlowTab');
+var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
+var JpcDiscreteHelper = require('./helper/Jpc_Helper_Discrete');
+var JpcTextHelper = require('./helper/Jpc_Helper_Text');
+var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
+var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
+
+var JpcBillTabSrv = function(){};
+JpcBillTabSrv.prototype.createNew = function(){
+    var JpcBillTabResult = {};
+    JpcBillTabResult.initialize = function() {
+        var me = this;
+        me.disp_fields_idx = [];
+    };
+    JpcBillTabResult.sorting = function(rptTpl) {
+        var me = this;
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);
+    };
+    JpcBillTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
+        var me = this, rst = [], tabRstLst = [];
+        //1 calculate the band position
+        var pageStatus = [true, false, false, false, false, false, false, false];
+        JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
+        //2. start to output detail-part
+        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        //2.1 output content
+        tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus));
+        //2.2 output discrete
+        tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT));
+    }
+    JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.PROP_BILL_FIELDS];
+                var data_details = dataObj[JV.DATA_MASTER_DATA];
+                for (var i = 0; i < tab_fields.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = null;
+                    if (me.disp_fields_idx[i] != JV.BLANK_FIELD_INDEX) {
+                        data_field = data_details[me.disp_fields_idx[i]];
+                    } else {
+                        data_field = JE.F(tab_field[JV.PROP_FIELD_ID]);
+                        if (data_field) {
+                            data_field = data_field[JV.PROP_AD_HOC_DATA];
+                        }
+                    }
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, page - 1), controls);
+                        cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, true, false);
+                        rst.push(cellItem);
+                    }
+                }
+                if (tab[JV.PROP_TEXT]) {
+                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
+                }
+                if (tab[JV.PROP_TEXTS]) {
+                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                        rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
+                    }
+                }
+                if (tab[JV.NODE_DISCRETE_INFO]) {
+                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0));
+                }
+            }
+        }
+        return rst;
+    }
+    return JpcBillTabResult;
+}
+
+module.exports = new JpcBillTabSrv();

+ 548 - 0
protect/rpt_component/Jpc_CrossTab.js

@@ -0,0 +1,548 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcFieldHelper = require('./helper/Jpc_Helper_Field');
+var JpcBandHelper = require('./helper/Jpc_Helper_Band');
+var JpcBand = require('./Jpc_Band');
+var JpcFlowTabHelper = require('./helper/Jpc_Helper_FlowTab');
+var JpcCrossTabHelper = require('./helper/Jpc_Helper_CrossTab');
+var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
+var JpcDiscreteHelper = require('./helper/Jpc_Helper_Discrete');
+var JpcTextHelper = require('./helper/Jpc_Helper_Text');
+var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
+var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
+
+var JpcCrossTabSrv = function(){};
+JpcCrossTabSrv.prototype.createNew = function(){
+    function private_addTabValue(tabValuedIdxLst, sortedSequence, segIdx, preRec, nextRec, dispSerialIdxLst, sorted_sum_value_Lst, rst_sum_value_Lst) {
+        if (tabValuedIdxLst) {
+            var serial1stTier = null;
+            if (dispSerialIdxLst) serial1stTier = [];
+            var pgseg1stTier = [];
+            var sumVal = [];
+            var sumValL = 1;
+            if (sortedSequence) {
+                var arrDupVals = sortedSequence[segIdx];
+                var arrDupSumVals = null;
+                if (sorted_sum_value_Lst != null) {
+                    arrDupSumVals = sorted_sum_value_Lst[segIdx];
+                    sumValL = arrDupSumVals[0].length;
+                }
+
+                for (var i = 0; i < nextRec; i++) {
+                    if (arrDupVals.length <= preRec + i) {
+                        pgseg1stTier[i] = JV.BLANK_VALUE_INDEX;
+                        sumVal[i] = [];
+                        for (var ei = 0; ei < sumValL; ei++) {
+                            sumVal[i][ei] = null;
+                        }
+                        if (serial1stTier != null) {
+                            serial1stTier[i] = JV.BLANK_VALUE_INDEX;
+                        }
+                        continue;
+                    }
+                    var duplicateValueArr = arrDupVals[preRec + i];
+                    pgseg1stTier[i] = duplicateValueArr[0];
+                    if (arrDupSumVals != null) sumVal[i] = arrDupSumVals[preRec + i];
+
+                    if (serial1stTier != null) {
+                        serial1stTier[i] = preRec + i;
+                    }
+                }
+                tabValuedIdxLst.push(pgseg1stTier);
+                if (dispSerialIdxLst != null) {
+                    dispSerialIdxLst.push(serial1stTier);
+                }
+                if (sorted_sum_value_Lst != null && rst_sum_value_Lst != null) {
+                    rst_sum_value_Lst.push(sumVal);
+                }
+            } else {
+                //should push blank value index rather than null
+                for (var i = 0; i < nextRec; i++) {
+                    pgseg1stTier[i] = JV.BLANK_VALUE_INDEX;
+                    sumVal[i] = null;
+                    if (serial1stTier != null) {
+                        serial1stTier[i] = JV.BLANK_VALUE_INDEX;
+                    }
+                }
+                tabValuedIdxLst.push(pgseg1stTier);
+                if (dispSerialIdxLst != null) {
+                    dispSerialIdxLst.push(serial1stTier);
+                }
+                if (sorted_sum_value_Lst != null && rst_sum_value_Lst != null) {
+                    rst_sum_value_Lst.push(sumVal);
+                }
+            }
+        }
+    }
+    function private_addContentValue(dispValueIdxLst_Content, sortedContentSequence, segIdx, counterRowRec, maxRowRec, counterColRec, maxColRec, page_seg_map, pageIdx) {
+        if (dispValueIdxLst_Content != null) {
+            page_seg_map.push([pageIdx,segIdx]);
+            var arrContents = [];
+            if (sortedContentSequence != null) {
+                var arrAllContent = sortedContentSequence[segIdx];
+                for (var i = 0; i < maxRowRec; i++) {
+                    arrContents.push([]);
+                    for (var j = 0; j < maxColRec; j++) {
+                        if (arrAllContent.length <= counterRowRec + i || arrAllContent[counterRowRec + i].length <= counterColRec + j) {
+                            arrContents[i][j] = JV.BLANK_VALUE_INDEX;
+                        } else {
+                            arrContents[i][j] = arrAllContent[counterRowRec + i][counterColRec + j];
+                        }
+                    }
+                }
+                dispValueIdxLst_Content.push(arrContents);
+            } else {
+                //should push blank value index rather than null
+                for (var i = 0; i < maxRowRec; i++) {
+                    arrContents.push([]);
+                    for (var j = 0; j < maxColRec; j++) {
+                        arrContents[i][j] = JV.BLANK_VALUE_INDEX;
+                    }
+                }
+                dispValueIdxLst_Content.push(arrContents);
+            }
+        }
+    }
+    function private_SortAndOptimize(rptTpl, dataObj, dataSeq, sortTab, rstFieldsIdx) {
+        var result = [];
+        var tab = rptTpl[JV.NODE_CROSS_INFO][sortTab];
+        if (tab) {
+            var sIDX = 0;
+            //1. prepare and sort by tab-field
+            var fields = [];
+            JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], fields, rstFieldsIdx);
+            var data_details = dataObj[JV.DATA_DETAIL_DATA];
+            JpcCrossTabHelper.sortTabFields(fields, rstFieldsIdx, data_details, dataSeq);
+            //2. distinguish sort tab fields value
+            var b1 = false;
+            for (var i = 0; i < dataSeq.length; i++) {
+                sIDX = 0;
+                var segArr = [];
+                if (dataSeq[i].length == 1) {
+                    JpcCrossTabHelper.pushToSeg(segArr, dataSeq, i, 0, 1);
+                } else {
+                    for (var j = 1; j < dataSeq[i].length; j++) {
+                        b1 = false;
+                        for (var k = 0; k < rstFieldsIdx.length; k++) {
+                            if (data_details[rstFieldsIdx[k]][dataSeq[i][j - 1]] != data_details[rstFieldsIdx[k]][dataSeq[i][j]]) {
+                                b1 = true;
+                                break;
+                            }
+                        }
+                        if (b1) {
+                            JpcCrossTabHelper.pushToSeg(segArr, dataSeq, i, sIDX, j);
+                            sIDX = j;
+                            if (j == dataSeq[i].length - 1) {
+                                JpcCrossTabHelper.pushToSeg(segArr, dataSeq, i, j, dataSeq[i].length);
+                            }
+                        } else if (j == dataSeq[i].length - 1) {
+                            JpcCrossTabHelper.pushToSeg(segArr, dataSeq, i, sIDX, dataSeq[i].length);
+                        }
+                    }
+                }
+                if (segArr.length > 0) result.push(segArr);
+            }
+        }
+        return result;
+    }
+    function private_SortForDisplayContent(rptTpl, rowSeq, colSeq, rstFieldsIdx){
+        var result = [];
+        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
+        if (tab) {
+            JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], null, rstFieldsIdx);
+        }
+        for (var i = 0; i < rowSeq.length; i++) {
+            var rl = rowSeq[i], cl = colSeq[i];
+            var ds = [];
+            //1. initialize to blank value index
+            for (var j = 0; j < rl.length; j++) {
+                ds.push([]);
+                for (var k = 0; k < cl.length; k++) {
+                    ds[j].push(JV.BLANK_VALUE_INDEX);
+                }
+            }
+            //2. then fill up the right index
+            for (var j = 0; j < rl.length; j++) {
+                var ra = rl[j];
+                for (var k = 0; k < ra.length; k++) {
+                    var colIdx = JpcCrossTabHelper.getColIDX(cl, ra[k]);
+                    if (colIdx >= 0) {
+                        ds[j][colIdx] = ra[k];
+                    }
+                }
+            }
+            result.push(ds);
+        }
+        return result;
+    }
+
+    var JpcCrossTabResult = {};
+    JpcCrossTabResult.initialize = function() {
+        var me = this;
+        me.dispValueIdxLst_Row = [];
+        me.dispValueIdxLst_Col = [];
+        me.dispValueIdxLst_Content = [];
+        me.dispSerialIdxLst_Row = [];
+        me.col_sum_fields_idx = [];
+        me.col_sum_fields_value_total = [];
+        me.dispSumValueLst_Col = [];
+        me.page_seg_map = [];
+        me.row_fields_idx = [];
+        me.col_fields_idx = [];
+        me.content_fields_idx = [];
+        me.row_extension_fields_idx = [];
+        me.row_sum_extension_fields_idx = [];
+        me.crsOrient = JV.PAGE_ORIENTATION_V_FIRST;
+        me.pageStatusLst = [];
+    };
+    JpcCrossTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
+        var me = this;
+        //IMPORTANT: the data should be sorted in SQL/NoSQL level!
+        me.sortedRowSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_ROW, me.row_fields_idx);
+        me.sortedColSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_COL, me.col_fields_idx);
+        me.sortedContentSequence = private_SortForDisplayContent(rptTpl, me.sortedRowSequence, me.sortedColSequence, me.content_fields_idx);
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL_SUM][JV.TAB_CROSS_FIELDS], null, me.col_sum_fields_idx);
+        //pre-sum the data(for col sum display)
+        var data_details = dataObj[JV.DATA_DETAIL_DATA],
+            data_fields = [];
+        for (var i = 0; i < me.col_sum_fields_idx.length; i++) {
+            var data_field = data_details[me.col_sum_fields_idx[i]];
+            data_fields.push(data_field);
+        }
+        for (var i = 0; i < me.sortedRowSequence.length; i++) { //seg level
+            if (me.sortedRowSequence[i].length > 0) {
+                me.col_sum_fields_value_total.push([]);
+                for (var j = 0; j < me.sortedRowSequence[i].length; j++) {
+                    var rowGrandTotal = [];
+                    for (var di = 0; di < data_fields.length; di++) {
+                        rowGrandTotal.push(0.0);
+                        for (var k = 0; k < me.sortedRowSequence[i][j].length; k++) {
+                            //3. start to sum
+                            rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.sortedRowSequence[i][j][k]);
+                        }
+                    }
+                    me.col_sum_fields_value_total[i].push(rowGrandTotal);
+                }
+            }
+
+        }
+    };
+    JpcCrossTabResult.preSetupPages = function(rptTpl, defProperties) {
+        var rst = 0, me = this;
+        //1. original initialize
+        var maxRowRec = 1, maxColRec = 1, counterRowRec = 0, counterColRec = 0, pageIdx = 0, segCnt = me.sortedContentSequence.length;
+        var pageStatus = [true, true, false, true, false, false, false, false];
+        //2. calculate the page info one by one
+        var bands = JpcBand.createNew(rptTpl, defProperties);
+        function private_resetBandArea() {
+            JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
+            maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);
+            maxColRec = JpcCrossTabHelper.getMaxColsPerPage(bands, rptTpl);
+        }
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT][JV.TAB_CROSS_FIELDS], null, me.row_extension_fields_idx);
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT][JV.TAB_CROSS_FIELDS], null, me.row_sum_extension_fields_idx);
+        for (var segIdx = 0; segIdx < segCnt; segIdx++) {
+            //2.1. seg level initialize
+            private_resetBandArea();
+            var orgMaxRowRec = maxRowRec, orgMaxColRec = maxColRec;
+            var rowSplitCnt = Math.ceil(1.0 * me.sortedRowSequence[segIdx].length / maxRowRec);
+            var colSplitCnt = Math.ceil(1.0 * me.sortedColSequence[segIdx].length / maxColRec);
+            pageStatus[JV.STATUS_CROSS_ROW_END] = true;
+            private_resetBandArea();
+            var hasAdHocRow = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_ROW_SUM, rptTpl, bands, me.sortedRowSequence, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
+            if (hasAdHocRow) {
+                hasAdHocRow = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_ROW_EXT, rptTpl, bands, me.sortedRowSequence, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
+            }
+            pageStatus[JV.STATUS_CROSS_ROW_END] = false;
+            pageStatus[JV.STATUS_CROSS_COL_END] = true;
+            private_resetBandArea();
+            var hasAdHocCol = !JpcCrossTabHelper.chkTabEnd(JV.NODE_CROSS_COL_SUM, rptTpl, bands, me.sortedColSequence, segIdx, (colSplitCnt - 1) * orgMaxColRec, maxColRec);
+            pageStatus[JV.STATUS_CROSS_COL_END] = false;
+            private_resetBandArea();
+            if (hasAdHocRow) rowSplitCnt++;
+            if (hasAdHocCol) colSplitCnt++;
+            //2.2
+            for (var colIdx = 0; colIdx < colSplitCnt; colIdx++) {
+                pageStatus[JV.STATUS_CROSS_COL_END] = colIdx == (colSplitCnt - 1)?true:false;
+                private_resetBandArea();
+                counterColRec = orgMaxColRec * colIdx;
+                var currentSortedContentSequence = me.sortedContentSequence;
+                var currentSortedColSequence = me.sortedColSequence;
+                if (hasAdHocCol && colIdx == (colSplitCnt - 1)) {
+                    currentSortedColSequence = null;
+                    currentSortedContentSequence = null;
+                    counterColRec = 0;
+                }
+                for (var rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
+                    pageStatus[JV.STATUS_CROSS_ROW_END] = rowIdx == (rowSplitCnt - 1)?true:false;
+                    private_resetBandArea();
+                    me.pageStatusLst.push(pageStatus.slice(0));
+                    pageIdx++;
+                    counterRowRec = orgMaxRowRec * rowIdx;
+                    var currentSortedRowSequence = me.sortedRowSequence;
+                    if (hasAdHocRow && rowIdx == (rowSplitCnt - 1)) {
+                        currentSortedRowSequence = null;
+                        currentSortedContentSequence = null;
+                        counterRowRec = 0;
+                    }
+                    private_addTabValue(me.dispValueIdxLst_Row, currentSortedRowSequence, segIdx, counterRowRec, maxRowRec, me.dispSerialIdxLst_Row, me.col_sum_fields_value_total, me.dispSumValueLst_Col);
+                    private_addTabValue(me.dispValueIdxLst_Col, currentSortedColSequence, segIdx, counterColRec, maxColRec, null, null, null);
+                    private_addContentValue(me.dispValueIdxLst_Content, currentSortedContentSequence, segIdx, counterRowRec, maxRowRec, counterColRec, maxColRec, me.page_seg_map, pageIdx);
+                }
+            }
+            JpcCrossTabHelper.initialPageStatus(pageStatus);
+        }
+        bands = null;
+        //3. set pageSeq and return the result
+        rst = pageIdx;
+        return rst;
+    };
+    JpcCrossTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
+        var me = this, rst = [], tabRstLst = [];
+        var segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
+        //1 calculate the band position
+        JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
+        //2. start to output detail-part
+        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        //2.1 Row-Tab
+        tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls));
+        //2.2 Col-Tab
+        tabRstLst.push(me.outputColTab(rptTpl, dataObj, page, bands, unitFactor, controls));
+        //2.3 Content-Tab
+        tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls));
+        //2.4 Sum-Tab Row
+        //2.4 Sum-tab Col
+        tabRstLst.push(me.outputTabSum(rptTpl, dataObj, page, bands, unitFactor, JV.NODE_CROSS_COL_SUM, controls));
+        //2.x row tab ext
+        tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
+        tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
+        //2.5 Discrete
+        tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
+        for (var i = 0; i < tabRstLst.length; i++) {
+            rst = rst.concat(tabRstLst[i]);
+            tabRstLst[i] = null;
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputRowTab = function(rptTpl, dataObj, page, bands, unitFactor, controls) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                var data_details = dataObj[JV.DATA_DETAIL_DATA];
+                var valuesIdx = me.dispValueIdxLst_Row[page - 1];
+                var serialsIdx = me.dispSerialIdxLst_Row[page - 1];
+                for (var i = 0; i < me.row_fields_idx.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = data_details[me.row_fields_idx[i]];
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        var rows = valuesIdx.length;
+                        for (var rowIdx = 0; rowIdx < rows; rowIdx++) {
+                            rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[rowIdx], serialsIdx[rowIdx], rows, rowIdx, 1, 0, unitFactor, true, controls));
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputColTab = function(rptTpl, dataObj, page, bands, unitFactor, controls) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                var data_details = dataObj[JV.DATA_DETAIL_DATA];
+                var valuesIdx = me.dispValueIdxLst_Col[page - 1];
+                for (var i = 0; i < me.col_fields_idx.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = data_details[me.col_fields_idx[i]];
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        var cols = valuesIdx.length;
+                        for (var colIdx = 0; colIdx < cols; colIdx++) {
+                            rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            //2. output texts
+                            if (tab[JV.PROP_TEXT]) {
+                                rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
+                            }
+                            if (tab[JV.PROP_TEXTS]) {
+                                for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputContent = function (rptTpl, dataObj, page, bands, unitFactor, controls) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                var data_details = dataObj[JV.DATA_DETAIL_DATA];
+                var contentValuesIdx = me.dispValueIdxLst_Content[page - 1];
+                for (var i = 0; i < tab_fields.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = data_details[me.content_fields_idx[i]];
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        var rows = contentValuesIdx.length;
+                        for (var rowIdx = 0; rowIdx < rows; rowIdx++) {
+                            var cols = contentValuesIdx[rowIdx].length;
+                            for (var colIdx = 0; colIdx < cols; colIdx++) {
+                                rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx][colIdx], -1, rows, rowIdx, cols, colIdx, unitFactor, true, controls));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputTabSum = function (rptTpl, dataObj, page, bands, unitFactor, tabNodeName, controls) {
+        var me = this, rst = [],
+            tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName],
+            band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS];
+                for (var i = 0; i < me.dispSumValueLst_Col[page - 1].length; i++) {
+                    if (me.dispSumValueLst_Col[page - 1][i] != null) {
+                        for (var j = 0; j < me.dispSumValueLst_Col[page - 1][i].length; j++) {
+                            var tab_field = tab_fields[j];
+                            var val = me.dispSumValueLst_Col[page - 1][i][j];
+                            var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                            cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, me.dispSumValueLst_Col[page - 1].length, i, 1, 0, 1, 0, true, false);
+                            rst.push(cellItem);
+                        }
+                    } else {
+                        var sumL = 1;
+                        for (var si = 0; si < me.dispSumValueLst_Col.length; si++) {
+                            if (me.dispSumValueLst_Col[si][0] != null) {
+                                sumL = me.dispSumValueLst_Col[si][0].length;
+                                break;
+                            }
+                        }
+                        for (var j = 0; j < sumL; j++) {
+                            var tab_field = tab_fields[j];
+                            var val = null;
+                            var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                            cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, me.dispSumValueLst_Col[page - 1].length, i, 1, 0, 1, 0, true, false);
+                            rst.push(cellItem);
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputTabExt = function (rptTpl, dataObj, page, bands, unitFactor, controls) {
+        var me = this, rst = [],
+            tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS],
+                    data_details = dataObj[JV.DATA_DETAIL_DATA],
+                    valuesIdx = me.dispValueIdxLst_Col[page - 1];
+                for (var i = 0; i < me.row_extension_fields_idx.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = data_details[me.row_extension_fields_idx[i]];
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        var cols = valuesIdx.length;
+                        for (var colIdx = 0; colIdx < cols; colIdx++) {
+                            rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            //2. output texts if has
+                            if (tab[JV.PROP_TEXT]) {
+                                rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
+                            }
+                            if (tab[JV.PROP_TEXTS]) {
+                                for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputSumTabExt = function (rptTpl, dataObj, page, bands, unitFactor, segIdx, controls) {
+        var me = this, rst = [],
+            tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true && pageStatus[JV.STATUS_CROSS_ROW_END] === true) {
+                var tab_fields = tab[JV.TAB_CROSS_FIELDS],
+                    data_details = dataObj[JV.DATA_DETAIL_DATA],
+                    data_fields = [];
+                for (var i = 0; i < me.row_sum_extension_fields_idx.length; i++) {
+                    var data_field = data_details[me.row_sum_extension_fields_idx[i]];
+                    data_fields.push(data_field);
+                }
+                //2. initialize grand total value
+                var rowGrandTotal = [];
+                for (var di = 0; di < data_fields.length; di++) {
+                    rowGrandTotal[di] = 0.0;
+                    //3. start to sum
+                    for (var i = 0; i < me.sortedColSequence[segIdx].length; i++) {
+                        //me.sortedColSequence[segIdx][i][0] //this is the data field value index!
+                        rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.sortedColSequence[segIdx][i][0]);
+                    }
+                }
+                //4. output
+                for (var di = 0; di < tab_fields.length; di++) {
+                    var tab_field = tab_fields[di];
+                    if (!tab_field[JV.PROP_HIDDEN]) {
+                        var val = rowGrandTotal[di];
+                        var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
+                        cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
+                        rst.push(cellItem);
+                    }
+                }
+                //output texts if has
+                if (tab[JV.PROP_TEXT]) {
+                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
+                }
+                if (tab[JV.PROP_TEXTS]) {
+                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                        rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcCrossTabResult.outputTabField = function (band, tab_field, data_field, valueIdx, serialIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls) {
+        var me = this, rst = null;
+        if (isRow == true && tab_field[JV.PROP_IS_SERIAL] && tab_field[JV.PROP_IS_SERIAL] == true) {
+            if (serialIdx >= 0) rst = JpcCommonOutputHelper.createCommonOutput(tab_field, serialIdx + 1)
+            else rst = JpcCommonOutputHelper.createCommonOutput(tab_field, "", controls);
+        } else {
+            rst = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, valueIdx), controls);
+        }
+        //position
+        if (isRow == true) {
+            rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, 1, 0, true, false);
+        } else {
+            rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, 1, 0, false, false);
+        }
+        return rst;
+    }
+    return JpcCrossTabResult;
+}
+
+module.exports = new JpcCrossTabSrv();

+ 98 - 0
protect/rpt_component/Jpc_Data.js

@@ -0,0 +1,98 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcData = {
+    createNew: function() {
+        var JpcDataRst = {};
+        JpcDataRst.dataSeq = [];
+        JpcDataRst.analyzeData = function(rptTpl, dataObj) {
+            var me = this;
+            if ((rptTpl) && (dataObj)) {
+                //1. get ID fields
+                var masterIDs = [];
+                for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
+                    var mstFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i];
+                    if ((mstFieldObj[JV.PROP_IS_ID]) && (mstFieldObj[JV.PROP_IS_ID] === 'T')) {
+                        masterIDs.push({"idx": i, "seq": mstFieldObj[JV.PROP_ID_SEQ]});
+                    }
+                }
+                var detailIDs = [];
+                for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
+                    var dtlFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i];
+                    if ((dtlFieldObj[JV.PROP_IS_ID]) && (dtlFieldObj[JV.PROP_IS_ID] === 'T')) {
+                        detailIDs.push({"idx": i, "seq": dtlFieldObj[JV.PROP_ID_SEQ]});
+                    }
+                }
+                //2. sort the ID fields
+                if (masterIDs.length > 1) {
+                    masterIDs.sort(function(a, b) {
+                        return 1*a["seq"] - 1*b["seq"];
+                    })
+                }
+                if (detailIDs.length > 1) {
+                    detailIDs.sort(function(a, b) {
+                        return 1*a["seq"] - 1*b["seq"];
+                    })
+                }
+                //3. prepare data sequence
+                if (masterIDs.length > 0) {
+                    var mst_dt_len = 0, dtl_dt_len = 0, mst_fields = [];
+                    for (var i = 0; i < masterIDs.length; i++) {
+                        mst_fields.push(dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]]);
+                        mst_dt_len = dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]].length;
+                    }
+                    var dtl_fields = [];
+                    for (var i = 0; i < detailIDs.length; i++) {
+                        dtl_fields.push(dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]]);
+                        dtl_dt_len = dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]].length;
+                    }
+                    var sIdx = 0;
+                    var isEqual = true;
+                    for (var i = 0; i < mst_dt_len; i++) {
+                        me.dataSeq.push([]);
+                        //then compare the master/detail ID-field value
+                        for (var j = sIdx; j < dtl_dt_len; j++) {
+                            isEqual = true;
+                            for (var k = 0; k < mst_fields.length; k++) {
+                                if (!(mst_fields[k][i] === dtl_fields[k][j])) {
+                                    isEqual = false;
+                                    break;
+                                }
+                            }
+                            if (isEqual) {
+                                me.dataSeq[i].push(j);
+                            } else {
+                                sIdx = j;
+                                //below logic is for the data robustness purpose, to avoid those strange record(detail level) which could not match even one of the master record!
+                                if (i < mst_dt_len - 1 && j < dtl_dt_len - 1) {
+                                    for (var j1 = j; j1 < dtl_dt_len; j1++) {
+                                        isEqual = true;
+                                        for (var k = 0; k < mst_fields.length; k++) {
+                                            if (!(mst_fields[k][i + 1] === dtl_fields[k][j1])) {
+                                                isEqual = false;
+                                                break;
+                                            }
+                                        }
+                                        if (isEqual) {
+                                            sIdx = j1;
+                                            break;
+                                        }
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
+                } else { //if no master data
+                    var field = dataObj[JV.DATA_DETAIL_DATA][0];
+                    me.dataSeq = [[]];
+                    for (var i = 0; i < field.length; i++) {
+                        me.dataSeq[0].push(i);
+                    }
+                }
+            }
+            //alert(3);
+        };
+        return JpcDataRst;
+    }
+}
+
+module.exports = JpcData;

+ 47 - 0
protect/rpt_component/Jpc_Field.js

@@ -0,0 +1,47 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcField = {
+    createNew: function(rptTpl) {
+        var JpcFieldResult = {};
+        var me = this;
+        JpcFieldResult[JV.NODE_DISCRETE_FIELDS] = {};
+        if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS][i], JpcFieldResult[JV.NODE_DISCRETE_FIELDS], rptTpl, JV.DATA_DISCRETE_DATA, i);
+            }
+        }
+        JpcFieldResult[JV.NODE_MASTER_FIELDS] = {};
+        if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i], JpcFieldResult[JV.NODE_MASTER_FIELDS], rptTpl, JV.DATA_MASTER_DATA, i);
+            }
+        }
+        JpcFieldResult[JV.NODE_DETAIL_FIELDS] = {};
+        if (rptTpl[JV.NODE_FIELD_MAP] && rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i], JpcFieldResult[JV.NODE_DETAIL_FIELDS], rptTpl, JV.DATA_DETAIL_DATA, i);
+            }
+        }
+        JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS] = {};
+        if (rptTpl[JV.NODE_NO_MAPPING_FIELDS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_NO_MAPPING_FIELDS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_NO_MAPPING_FIELDS][i], JpcFieldResult[JV.NODE_NO_MAPPING_FIELDS], rptTpl, "NA", JV.BLANK_FIELD_INDEX);
+            }
+        }
+        //
+        return JpcFieldResult;
+    },
+    createSingle: function(fieldNode, parentObj, rptTpl, dataNodeName, sequence) {
+        var me = this;
+        if (fieldNode && fieldNode[JV.PROP_ID]) {
+            var item = {};
+            item[JV.PROP_ID] = fieldNode[JV.PROP_ID];
+            item[JV.PROP_NAME] = fieldNode[JV.PROP_NAME];
+            item[JV.PROP_DATA_TYPE] = fieldNode[JV.PROP_DATA_TYPE];
+            item.DataNodeName = dataNodeName;
+            item.DataSeq = sequence;
+            parentObj[JV.PROP_ID + "_" + fieldNode[JV.PROP_ID]] = item;
+        }
+    }
+}
+
+module.exports = JpcField;

+ 229 - 0
protect/rpt_component/Jpc_FlowTab.js

@@ -0,0 +1,229 @@
+var JV = require('./Jpc_ValueDefine');
+var JE = require('./Jpc_RTE');
+var JpcFieldHelper = require('./helper/Jpc_Helper_Field');
+var JpcBandHelper = require('./helper/Jpc_Helper_Band');
+var JpcBand = require('./Jpc_Band');
+var JpcFlowTabHelper = require('./helper/Jpc_Helper_FlowTab');
+var JpcCommonHelper = require('./helper/Jpc_Helper_Common');
+var JpcDiscreteHelper = require('./helper/Jpc_Helper_Discrete');
+var JpcTextHelper = require('./helper/Jpc_Helper_Text');
+var JpcCommonOutputHelper = require('./helper/Jpc_Helper_CommonOutput');
+var JpcAreaHelper = require('./helper/Jpc_Helper_Area');
+
+var JpcFlowTabSrv = function(){};
+JpcFlowTabSrv.prototype.createNew = function(){
+    function private_addPageValue(ValuedIdxLst, sortedSequence, preRec, nextRec,page_seg_map, segIdx, pageIdx) {
+        var vIdx = [];
+        for (var vi = 0; vi < nextRec; vi++) {
+            if (sortedSequence.length > preRec + vi) {
+                vIdx.push(sortedSequence[preRec + vi]);
+            } else {
+                vIdx.push(JV.BLANK_VALUE_INDEX);
+            }
+        }
+        page_seg_map.push([pageIdx, segIdx]);
+        ValuedIdxLst.push(vIdx);
+    }
+    var JpcFlowTabResult = {};
+    JpcFlowTabResult.initialize = function() {
+        var me = this;
+        me.segments = [];
+        me.dispValueIdxLst = [];
+        me.page_seg_map = [];
+        me.disp_fields_idx = [];
+        me.seg_sum_fields_idx = [];
+        me.seg_sum_tab_fields = [];
+        me.page_sum_fields_idx = [];
+        me.group_fields_idx = [];
+        me.pageStatusLst = [];
+        me.groupSumValLst = [];
+        me.segSumValLst = [];
+        me.multiCols = 1;
+    };
+    JpcFlowTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
+        var me = this;
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS], me.seg_sum_tab_fields, me.seg_sum_fields_idx);
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], null, me.page_sum_fields_idx);
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_FIELDS], null, me.group_fields_idx);
+        for (var si = 0; si < dataSeq.length; si++) {
+            me.segments.push(dataSeq[si].slice(0));
+        }
+        //pre-sum the data(for seg sum display)
+        var data_details = dataObj[JV.DATA_DETAIL_DATA],
+            data_fields = [];
+        for (var i = 0; i < me.seg_sum_fields_idx.length; i++) {
+            var data_field = data_details[me.seg_sum_fields_idx[i]];
+            data_fields.push(data_field);
+        }
+        for (var i = 0; i < me.segments.length; i++) { //seg level
+            if (me.segments[i].length > 0) {
+                var rowGrandTotal = [];
+                for (var di = 0; di < data_fields.length; di++) {
+                    rowGrandTotal.push(0.0);
+                    for (var j = 0; j < me.segments[i].length; j++) {
+                        //3. start to sum
+                        rowGrandTotal[di] = rowGrandTotal[di] + 1.0 * JpcFieldHelper.getValue(data_fields[di], me.segments[i][j]);
+                    }
+                }
+                me.segSumValLst.push(rowGrandTotal);
+            }
+
+        }
+    };
+    JpcFlowTabResult.preSetupPages = function (rptTpl, dataOjb, defProperties) {
+        var rst = 0, me = this, counterRowRec = 0, maxRowRec = 1, pageIdx = 0;
+        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_idx);
+        var bands = JpcBand.createNew(rptTpl, defProperties);
+        var pageStatus = [true, true, false, false, false, false, false, false];
+        if (rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN]) {
+            me.multiCols = 1 * rptTpl[JV.NODE_FLOW_INFO][JV.PROP_MULTI_COLUMN];
+        }
+        function private_resetBandArea() {
+            JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
+            maxRowRec = JpcFlowTabHelper.getMaxRowsPerPage(bands, rptTpl);
+        }
+        for (var segIdx = 0; segIdx < me.segments.length; segIdx++) {
+            private_resetBandArea();
+            var orgMaxRowRec = maxRowRec;
+            var rowSplitCnt = Math.ceil(1.0 * me.segments[segIdx].length / orgMaxRowRec);
+            pageStatus[JV.STATUS_SEGMENT_END] = true;
+            private_resetBandArea();
+            var hasAdHocRow = !JpcFlowTabHelper.chkSegEnd(bands, rptTpl, me.segments, segIdx, (rowSplitCnt - 1) * orgMaxRowRec, maxRowRec);
+            if (hasAdHocRow) rowSplitCnt++;
+            if (rowSplitCnt % me.multiCols > 0) {
+                rowSplitCnt++
+            }
+            for (var rowIdx = 0; rowIdx < rowSplitCnt; rowIdx++) {
+                pageStatus[JV.STATUS_SEGMENT_END] = rowIdx == (rowSplitCnt - 1)?true:false;
+                if (pageIdx > 0) pageStatus[JV.STATUS_REPORT_START] = false;
+                private_resetBandArea();
+                me.pageStatusLst.push(pageStatus.slice(0));
+                pageIdx++;
+                counterRowRec = orgMaxRowRec * rowIdx;
+                private_addPageValue(me.dispValueIdxLst, me.segments[segIdx], counterRowRec, maxRowRec,me.page_seg_map, segIdx, pageIdx);
+            }
+            pageStatus[JV.STATUS_SEGMENT_END] = false;
+            pageStatus[JV.STATUS_REPORT_START] = false;
+        }
+        rst = Math.ceil(1.0 * pageIdx / me.multiCols);
+        return rst;
+    };
+    JpcFlowTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
+        var me = this, rst = [], tabRstLst = [];
+        var segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
+        //1 calculate the band position
+        JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
+        //2. start to output detail-part
+        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        for (var pi = 0; pi < me.multiCols; pi++) {
+            var actualPage = (page - 1) * me.multiCols + pi + 1;
+            //2.1 Content-Tab
+            tabRstLst.push(me.outputContent(rptTpl, dataObj, actualPage, bands, unitFactor, controls, pi));
+            //2.2 Column tab
+            tabRstLst.push(me.outputColumn(rptTpl, dataObj, actualPage, segIdx, bands, unitFactor, controls, pi));
+            //2.3 Sum Seg
+            tabRstLst.push(me.outputSegSum(rptTpl, dataObj, actualPage, segIdx, bands, unitFactor, controls));
+            //2.4 Sum Page
+            //2.5 Discrete
+            if (pi == 0) {
+                tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_FLOW_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[actualPage - 1], segIdx, 1, pi, $CURRENT_RPT));
+            }
+        }
+        for (var i = 0; i < tabRstLst.length; i++) {
+            rst = rst.concat(tabRstLst[i]);
+            tabRstLst[i] = null;
+        }
+        return rst;
+    };
+    JpcFlowTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, multiColIdx, $CURRENT_RPT) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = tab[JV.PROP_FLOW_FIELDS];
+                var data_details = dataObj[JV.DATA_DETAIL_DATA];
+                var contentValuesIdx = me.dispValueIdxLst[page - 1];
+                for (var i = 0; i < tab_fields.length; i++) {
+                    var tab_field = tab_fields[i];
+                    var data_field = null;
+                    if (me.disp_fields_idx[i] != JV.BLANK_FIELD_INDEX) {
+                        data_field = data_details[me.disp_fields_idx[i]];
+                    } else {
+                        data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                        if (data_field) {
+                            data_field = data_field[JV.PROP_AD_HOC_DATA];
+                        }
+                    }
+                    if (!(tab_field[JV.PROP_HIDDEN])) {
+                        for (var rowIdx = 0; rowIdx < contentValuesIdx.length; rowIdx++) {
+                            rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx], -1, contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx));
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    };
+    JpcFlowTabResult.outputColumn = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, controls, multiColIdx) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                if (tab[JV.PROP_TEXT]) {
+                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, me.multiCols, multiColIdx));
+                }
+                if (tab[JV.PROP_TEXTS]) {
+                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                        rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, me.multiCols, multiColIdx));
+                    }
+                }
+                if (tab[JV.NODE_DISCRETE_INFO]) {
+                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, me.multiCols, multiColIdx));
+                }
+            }
+        }
+        return rst;
+    };
+    JpcFlowTabResult.outputSegSum = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, controls) {
+        var me = this, rst = [];
+        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var pageStatus = me.pageStatusLst[page - 1];
+            if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                var tab_fields = me.seg_sum_tab_fields;
+                for (var i = 0; i < tab_fields.length; i++) {
+                    var cellItem = JpcCommonOutputHelper.createCommonOutput(tab_fields[i], me.segSumValLst[segIdx][i], controls);
+                    cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_fields[i][JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0, true, false);
+                    rst.push(cellItem);
+                }
+                if (tab[JV.PROP_TEXT]) {
+                    rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
+                }
+                if (tab[JV.PROP_TEXTS]) {
+                    for (var j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                        rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, me.multiCols, 0));
+                    }
+                }
+                if (tab[JV.NODE_DISCRETE_INFO]) {
+                    rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, me.multiCols, 0));
+                }
+            }
+        }
+        return rst;
+    };
+    JpcFlowTabResult.outputTabField = function (band, tab_field, data_field, valueIdx, serialIdx, rows, rowIdx, cols, colIdx, unitFactor, isRow, controls, multiColIdx) {
+        var me = this, rst = null;
+        rst = JpcCommonOutputHelper.createCommonOutput(tab_field, JpcFieldHelper.getValue(data_field, valueIdx), controls);
+        rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
+        return rst;
+    }
+
+    return JpcFlowTabResult;
+}
+
+module.exports = new JpcFlowTabSrv();

+ 18 - 0
protect/rpt_component/Jpc_Function.js

@@ -0,0 +1,18 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcFunc = {
+    createNew: function (rptTpl) {
+        var me = this;
+        var rst = [];
+        if (rptTpl[JV.NODE_FORMULAS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_FORMULAS].length; i++) {
+                var item = {};
+                item[JV.PROP_RUN_TYPE] = rptTpl[JV.NODE_FORMULAS][i][JV.PROP_RUN_TYPE];
+                item[JV.PROP_EXPRESSION] = rptTpl[JV.NODE_FORMULAS][i][JV.PROP_EXPRESSION];
+                rst.push(item);
+            }
+        }
+        return rst;
+    }
+};
+
+module.exports = JpcFunc;

+ 27 - 0
protect/rpt_component/Jpc_Param.js

@@ -0,0 +1,27 @@
+var JV = require('./Jpc_ValueDefine');
+var JpcParam = {
+    createNew: function(rptTpl) {
+        var JpcParamResult = {};
+        var me = this;
+        if (rptTpl[JV.NODE_DISCRETE_PARAMS]) {
+            for (var i = 0; i < rptTpl[JV.NODE_DISCRETE_PARAMS].length; i++) {
+                me.createSingle(rptTpl[JV.NODE_DISCRETE_PARAMS][i], JpcParamResult, rptTpl, i);
+            }
+        }
+        return JpcParamResult;
+    },
+    createSingle: function(paramNode, parentObj, rptTpl, sequence) {
+        var me = this;
+        if (paramNode && paramNode[JV.PROP_ID]) {
+            var item = {};
+            item[JV.PROP_ID] = paramNode[JV.PROP_ID];
+            item[JV.PROP_NAME] = paramNode[JV.PROP_NAME];
+            item[JV.PROP_DATA_TYPE] = paramNode[JV.PROP_DATA_TYPE];
+            if (paramNode[JV.PROP_DFT_VALUE]) item[JV.PROP_DFT_VALUE] = paramNode[JV.PROP_DFT_VALUE];
+            item.DataSeq = sequence;
+            parentObj[JV.PROP_ID + "_" + paramNode[JV.PROP_ID]] = item;
+        }
+    }
+}
+
+module.exports = JpcParam;

+ 47 - 0
protect/rpt_component/Jpc_RTE.js

@@ -0,0 +1,47 @@
+/**
+ * Created by Tony on 2016/12/28.
+ */
+
+var JV = require('./Jpc_ValueDefine');
+var JE = {
+    F: function(fID, $CURRENT_RPT) {
+        var rst = null;
+        if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID])) {
+            rst = $CURRENT_RPT.fields[JV.NODE_DETAIL_FIELDS][JV.PROP_ID + "_" + fID];
+        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + "_" + fID])) {
+            rst = $CURRENT_RPT.fields[JV.NODE_MASTER_FIELDS][JV.PROP_ID + "_" + fID];
+        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + "_" + fID])) {
+            rst = $CURRENT_RPT.fields[JV.NODE_DISCRETE_FIELDS][JV.PROP_ID + "_" + fID];
+        } else if ($CURRENT_RPT && ($CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + "_" + fID])) {
+            rst = $CURRENT_RPT.fields[JV.NODE_NO_MAPPING_FIELDS][JV.PROP_ID + "_" + fID];
+        } else {
+            rst = {msg: "the Field-ID is not valid, no result could be found!"};
+        }
+        return rst;
+    },
+    P: function(pID, $CURRENT_RPT) {
+        var rst = null;
+        if ($CURRENT_RPT && ($CURRENT_RPT.params[JV.PROP_ID + "_" + pID])) {
+            rst = $CURRENT_RPT.params[JV.PROP_ID + "_" + pID];
+        } else {
+            rst = {msg: "the Param-ID is not valid, no result was found!"};
+        }
+        return rst;
+    },
+    getCurrentPage: function ($CURRENT_RPT) {
+        var rst = 0;
+        if ($CURRENT_RPT) {
+            rst = $CURRENT_RPT.runTimePageData.currentPage;
+        }
+        return rst;
+    },
+    getTotalPage: function ($CURRENT_RPT) {
+        var rst = 0;
+        if ($CURRENT_RPT) {
+            rst = $CURRENT_RPT.totalPages;
+        }
+        return rst;
+    }
+}
+
+module.exports = JE;

+ 197 - 0
protect/rpt_component/Jpc_ValueDefine.js

@@ -0,0 +1,197 @@
+var JV = {
+    NODE_CROSS_INFO: "交叉表_信息",
+    NODE_CROSS_ROW: "交叉行",
+    NODE_CROSS_COL: "交叉列",
+    NODE_CROSS_CONTENT: "交叉数据",
+    NODE_CROSS_ROW_SUM: "交叉行合计",
+    NODE_CROSS_COL_SUM: "交叉列合计",
+    NODE_CROSS_ROW_EXT: "交叉行拓展",
+    NODE_CROSS_ROW_SUM_EXT: "交叉行拓展合计",
+    NODE_FIELD_MAP: "指标_数据_映射",
+    NODE_DISCRETE_FIELDS: "离散指标_集合",
+    NODE_NO_MAPPING_FIELDS: "无映射离散指标_集合",
+    NODE_DISCRETE_PARAMS: "离散参数_集合",
+    NODE_MASTER_FIELDS: "主数据指标_集合",
+    NODE_DETAIL_FIELDS: "从数据指标_集合",
+    NODE_BAND_COLLECTION: "布局框_集合",
+    NODE_FORMULAS: "计算式_集合",
+    NODE_DISCRETE_INFO: "离散信息",
+    NODE_BILL_INFO: "账单式表_信息",
+    NODE_BILL_CONTENT : "账单式表_数据",
+    NODE_FLOW_INFO: "流水式表_信息",
+    NODE_FLOW_GROUP: "流水式表_分组信息",
+    NODE_FLOW_SEG_SUM: "流水式表_段统计信息",
+    NODE_FLOW_PAGE_SUM: "流水式表_页统计信息",
+    NODE_FLOW_COLUMN : "流水式表_列",
+    NODE_FLOW_CONTENT : "流水式表_数据",
+    PROP_MULTI_COLUMN: "多列显示数量",
+
+    NODE_MAIN_INFO: "主信息",
+    NODE_PAGE_INFO: "打印页面_信息",
+    NODE_MARGINS: "页边距",
+
+    NODE_FONT_COLLECTION: "font_collection",
+    NODE_STYLE_COLLECTION: "style_collection",
+    NODE_CONTROL_COLLECTION: "control_collection",
+
+    PROP_ID: "ID",
+    PROP_AD_HOC_DATA: "data_field",
+    PROP_CMN_HEIGHT: "CommonHeight",
+    PROP_CMN_WIDTH: "CommonWidth",
+    PROP_BAND_NAME: "BandName",
+    PROP_UNITS: "单位",
+    PROP_PAGE_SIZE: "页规格",
+    PROP_ORIENTATION: "方向",
+    PROP_LEFT: "Left",
+    PROP_RIGHT: "Right",
+    PROP_TOP: "Top",
+    PROP_BOTTOM: "Bottom",
+    PROP_DATA_TYPE: "DataType",
+    PROP_NAME: "Name",
+    PROP_DFT_VALUE: "Default_Value",
+    PROP_EXPRESSION: "expression",
+    PROP_RUN_TYPE: "run_type",
+    PROP_BORDER_STYLE: "border_style",
+    PROP_POSITION: "Position",
+    PROP_HIDDEN: "Hidden",
+    PROP_IS_SERIAL: "isSerial",
+    PROP_FONT: "font",
+    PROP_CONTROL: "control",
+    PROP_STYLE: "style",
+    PROP_VALUE: "Value",
+    PROP_LABEL: "Label",
+    PROP_AREA: "area",
+    PROP_DISCRETE_FIELDS: "discrete_field_s",
+    PROP_FLOW_FIELDS: "flow_field_s",
+    PROP_BILL_FIELDS: "bill_field_s",
+    PROP_GROUP_FIELDS: "group_field_s",
+    PROP_SUM_FIELDS: "sum_field_s",
+    PROP_TEXTS: "text_s",
+    PROP_TEXT: "text",
+    PROP_FIELD_ID: "FieldID",
+    PROP_PARAM_ID: "ParamID",
+    PROP_PREFIX: "Prefix",
+    PROP_SUFFIX: "Suffix",
+    PROP_FORMAT: "Format",
+
+    PROP_SHOW_ZERO: "ShowZero",
+    PROP_EXTENSION_TYPE: "ExtType",
+
+    PROP_CALCULATION: "CalculationType",
+    PROP_H_CALCULATION: "H_CalculationType",
+    PROP_V_CALCULATION: "V_CalculationType",
+
+    IDX_LEFT: 0,
+    IDX_TOP: 1,
+    IDX_RIGHT: 2,
+    IDX_BOTTOM: 3,
+
+    BAND_PROP_NAME: "Name",
+    BAND_PROP_MERGE_BAND: "MergeBand",
+    BAND_PROP_STYLE: "style",
+    BAND_PROP_CONTROL: "control",
+    BAND_PROP_HEIGHT: "Height",
+    BAND_PROP_WIDTH: "Width",
+    BAND_PROP_DISPLAY_TYPE: "DisplayType",
+    BAND_PROP_ALIGNMENT: "Alignment",
+    BAND_PROP_MERGE_BORDER: "MergeBorder",
+    BAND_PROP_SUB_BANDS: "band_s",
+
+    MEASUREMENT: {
+        PIXEL:["像素点", "象素点", "PIXEL"],
+        CM: ["厘米", "CM"],
+        INCH: ["英寸","INCH"]
+    },
+
+    PROP_IS_ID: "isID",
+    PROP_ID_SEQ: "IDSeq",
+
+    TAB_CROSS_FIELDS: "cross_field_s",
+    TAB_FIELD_PROP_SORT: "Sort",
+    TAB_FIELD_PROP_SORT_VAL_NOSORT: "no_sort",
+    TAB_FIELD_PROP_SORT_VAL_ASC: "ascend",
+    TAB_FIELD_PROP_SORT_VAL_DESC: "descend",
+
+    DATA_DISCRETE_DATA: "discrete_data",
+    DATA_MASTER_DATA: "master_data",
+    DATA_DETAIL_DATA: "detail_data",
+
+    BLANK_FIELD_INDEX: -10,
+    BLANK_VALUE_INDEX: -100,
+    BLANK_PAGE_VALUE_INDEX: -200,
+
+    RUN_TYPE_BEFORE_PAGING: "before_paging",
+    RUN_TYPE_BEFORE_OUTPUT: "before_output",
+
+    PAGE_STATUS: ["EveryPage","FirstPage", "LastPage", "SegmentStart", "SegmentEnd", "Group", "CrossRowEnd", "CrossColEnd"],
+
+    CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap"],
+    BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
+    PROP_LINE_WEIGHT: "LineWeight",
+    PROP_DASH_STYLE: "DashStyle",
+    PROP_COLOR: "Color",
+    FONT_PROPS: ["Name", "FontHeight", "FontColor", "FontBold", "FontItalic", "FontUnderline", "FontStrikeOut", "FontAngle"],
+
+    STATUS_NORMAL: 0,
+    STATUS_REPORT_START: 1,
+    STATUS_REPORT_END: 2,
+    STATUS_SEGMENT_START: 3,
+    STATUS_SEGMENT_END: 4,
+    STATUS_GROUP: 5,
+    STATUS_CROSS_ROW_END: 6,
+    STATUS_CROSS_COL_END: 7,
+
+    LAYOUT: ["Top","Bottom", "Left", "Right", "Fulfill"],
+    LAYOUT_TOP: 0,
+    LAYOUT_BOTTOM: 1,
+    LAYOUT_LEFT: 2,
+    LAYOUT_RIGHT: 3,
+    LAYOUT_FULFILL: 4,
+
+    OUTPUT_ALIGN: {
+        H: ["Left", "Center", "Right"],
+        V: ["Top", "Center", "Bottom"]
+    },
+
+    CAL_TYPE:["percentage","abstract"],
+    CAL_TYPE_PERCENTAGE: 0,
+    CAL_TYPE_ABSTRACT: 1,
+
+    PAGE_ORIENTATION_V_FIRST: 0,
+    PAGE_ORIENTATION_H_FIRST: 1,
+
+    ORIENTATION_PORTRAIT: "PORTRAIT",
+    ORIENTATION_LANDSCAPE: "LANDSCAPE",
+    ORIENTATION_PORTRAIT_CHN: "纵",
+    ORIENTATION_LANDSCAPE_CHN: "横",
+    SIZE_A3: [11.69, 16.54],
+    SIZE_A4: [8.27, 11.69],
+    SIZE_A5: [5.83, 8.27],
+    SIZE_B5: [6.93, 9.84],
+    SIZE_LETTER: [8.5, 11.0],
+    SIZE_LEGAL: [8.5, 14.0],
+    SIZE_16K: [7.75, 10.75],
+    SIZE_EXECUTIVE: [7.25, 10.5],
+
+    OUTPUT_OFFSET: [2,1,2,3],
+    OFFSET_IDX_LEFT: 0,
+    OFFSET_IDX_RIGHT: 1,
+    OFFSET_IDX_TOP: 2,
+    OFFSET_IDX_BOTTOM: 3,
+
+    PROP_PAGE_SEQ: "page_seq",
+
+    PAGE_SELF_DEFINE: "自定义",
+
+    PAGES_SIZE_STR: ["A3", "A4", "A5", "B5", "LETTER", "LEGAL", "EXECUTIVE", "16K"],
+    PAGES_SIZE: [[11.69, 16.54], [8.27, 11.69], [5.83, 8.27], [6.93, 9.84], [8.5, 11.0], [8.5, 14.0], [7.25, 10.5], [7.25, 10.5]],
+
+    HUNDRED_PERCENT : 100.0,
+
+    VERTICAL_ANGLE: "90",
+    ANTI_VERTICAL_ANGLE: "-90",
+
+    LAST_DEF: ""
+}
+
+module.exports = JV;

+ 58 - 0
protect/rpt_component/helper/Jpc_Helper_Area.js

@@ -0,0 +1,58 @@
+var JV = require('../Jpc_ValueDefine');
+
+var JpcAreaHelper = {
+    outputArea: function(areaNode, band, unitFactor, rowAmount, rowIdx, colAmount, colIdx, multipleDispCol, multipleColIdx,syncHeight, syncWidth) {
+        var rst = {}, maxMultiColumns = 3;
+        if (multipleDispCol > 0 && multipleDispCol <= maxMultiColumns) {
+            //1. calculate left/right
+            var areaWidth = 1.0 * (band[JV.PROP_RIGHT] - band[JV.PROP_LEFT]) / multipleDispCol;
+            areaWidth = areaWidth / colAmount;
+            var innerLeft = 0.0, innerRight = areaWidth;
+            switch (areaNode[JV.PROP_H_CALCULATION]) {
+                case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] :
+                    innerLeft = (1.0 * areaNode[JV.PROP_LEFT] * areaWidth / JV.HUNDRED_PERCENT);
+                    innerRight = (1.0 * areaNode[JV.PROP_RIGHT] * areaWidth / JV.HUNDRED_PERCENT) ;
+                    break;
+                case JV.CAL_TYPE[JV.CAL_TYPE_ABSTRACT] :
+                    innerLeft = 1.0 * areaNode[JV.PROP_LEFT] * unitFactor;
+                    innerRight = 1.0 * areaNode[JV.PROP_RIGHT] * unitFactor ;
+                    break;
+            }
+            //2. calculate top/bottom
+            var  areaHeight = 1.0 * (band[JV.PROP_BOTTOM] - band[JV.PROP_TOP]);
+            areaHeight = areaHeight / rowAmount;
+            var innerTop = 0.0, innerBottom = areaHeight;
+            switch (areaNode[JV.PROP_V_CALCULATION]) {
+                case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] :
+                    innerTop = (1.0 * areaNode[JV.PROP_TOP] * areaHeight / JV.HUNDRED_PERCENT);
+                    innerBottom = (1.0 * areaNode[JV.PROP_BOTTOM] * areaHeight / JV.HUNDRED_PERCENT) ;
+                    break;
+                case JV.CAL_TYPE[JV.CAL_TYPE_ABSTRACT] :
+                    innerTop = 1.0 * areaNode[JV.PROP_TOP] * unitFactor;
+                    innerBottom = 1.0 * areaNode[JV.PROP_BOTTOM] * unitFactor ;
+                    break;
+            }
+            //
+            var rstLeft = 0.0, rstRight = 0.0, rstTop = 0.0, rstBottom = 0.0;
+            if (syncHeight) {
+                rstBottom = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * (rowIdx + 1) + innerTop);
+            } else {
+                rstBottom = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * rowIdx + innerBottom);
+            }
+            if (syncWidth) {
+                rstRight = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * (colIdx + 1) + innerLeft + multipleColIdx * areaWidth);
+            } else {
+                rstRight = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * colIdx + innerRight + multipleColIdx * areaWidth);
+            }
+            rstLeft = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * colIdx + innerLeft + multipleColIdx * areaWidth);
+            rstTop = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * rowIdx + innerTop);
+            rst[JV.PROP_LEFT] = rstLeft;
+            rst[JV.PROP_RIGHT] = rstRight;
+            rst[JV.PROP_TOP] = rstTop;
+            rst[JV.PROP_BOTTOM] = rstBottom;
+        }
+        return rst;
+    }
+};
+
+module.exports = JpcAreaHelper;

+ 74 - 0
protect/rpt_component/helper/Jpc_Helper_Band.js

@@ -0,0 +1,74 @@
+var JV = require('../Jpc_ValueDefine');
+var JpcCommonHelper = require('./Jpc_Helper_Common');
+
+var JpcBandHelper = {
+    getBandTypeValByString: function(bandType) {
+        var rst = JV.PAGE_STATUS.indexOf(bandType);
+        if (rst < 0) rst = JV.STATUS_NORMAL;
+        return rst;
+    },
+    setBandArea: function(bands, rptTpl, pageStatus) {
+        var me = this;
+        if (rptTpl[JV.NODE_BAND_COLLECTION]) {
+            var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+            var orgArea = JpcCommonHelper.getReportArea(rptTpl, unitFactor);
+            for (var i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
+                me.setBandPos(bands, rptTpl[JV.NODE_BAND_COLLECTION][i], orgArea, unitFactor, pageStatus);
+            }
+        }
+    },
+    setBandPos: function(bands, bandNode, orgArea, unitFactor, pageStatus) {
+        var me = this, band = bands[bandNode[JV.BAND_PROP_NAME]];
+        //1. initialize
+        band[JV.PROP_LEFT] = orgArea[JV.IDX_LEFT];
+        band[JV.PROP_TOP] = orgArea[JV.IDX_TOP];
+        band[JV.PROP_RIGHT] = orgArea[JV.IDX_RIGHT];
+        band[JV.PROP_BOTTOM] = orgArea[JV.IDX_BOTTOM];
+        //2. set this band
+        if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+            switch (band[JV.BAND_PROP_ALIGNMENT]) {
+                case JV.LAYOUT_TOP:
+                    if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
+                        band.Bottom = band.Top + unitFactor * band[JV.BAND_PROP_HEIGHT];
+                    } else {
+                        band.Bottom = band.Top + (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
+                    }
+                    orgArea[JV.IDX_TOP] = band.Bottom;
+                    break;
+                case JV.LAYOUT_BOTTOM:
+                    if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
+                        band.Top = band.Bottom - unitFactor * band[JV.BAND_PROP_HEIGHT];
+                    } else {
+                        band.Top = band.Bottom - (band.Bottom - band.Top) * band[JV.BAND_PROP_HEIGHT] / 100;
+                    }
+                    orgArea[JV.IDX_BOTTOM] = band.Top;
+                    break;
+                case JV.LAYOUT_LEFT:
+                    if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
+                        band.Right = band.Left + unitFactor * band[JV.BAND_PROP_WIDTH];
+                    } else {
+                        band.Right = band.Left + (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
+                    }
+                    orgArea[JV.IDX_LEFT] = band.Right;
+                    break;
+                case JV.LAYOUT_RIGHT:
+                    if (band[JV.PROP_CALCULATION] == JV.CAL_TYPE_ABSTRACT) {
+                        band.Left = band.Right - unitFactor * band[JV.BAND_PROP_WIDTH];
+                    } else {
+                        band.Left = band.Right - (band.Right - band.Left) * band[JV.BAND_PROP_WIDTH] / 100;
+                    }
+                    orgArea[JV.IDX_RIGHT] = band.Left;
+                    break;
+            }
+            //3. set sub-bands
+            if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
+                var bandArea = [band.Left, band.Top, band.Right, band.Bottom];
+                for (var i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
+                    me.setBandPos(bands, bandNode[JV.BAND_PROP_SUB_BANDS][i], bandArea, unitFactor, pageStatus);
+                }
+            }
+        }
+    }
+};
+
+module.exports = JpcBandHelper;

+ 148 - 0
protect/rpt_component/helper/Jpc_Helper_Common.js

@@ -0,0 +1,148 @@
+var JV = require('../Jpc_ValueDefine');
+
+var JpcCommonHelper = {
+    commonConstant: {},
+    getResultByID: function (KeyID, collectionList) {
+        var rst = null;
+        if (KeyID) {
+            for (var i = 0; i < collectionList.length; i++) {
+                var collection = collectionList[i];
+                if (collection && collection instanceof Array) {
+                    for (var j = 0; j < collection.length; j++) {
+                        if (collection[j][JV.PROP_ID] === KeyID) {
+                            rst = collection[j];
+                            break;
+                        }
+                    }
+                    if (rst) break;
+                }
+            }
+        }
+        return rst;
+    },
+    getFont: function(fontName, dftFonts, rptTpl) {
+        var me = this, rst = null, list = [];
+        if (rptTpl) list.push(rptTpl[JV.NODE_FONT_COLLECTION]);
+        list.push(dftFonts);
+        rst = me.getResultByID(fontName, list);
+        return rst;
+    },
+    getStyle: function(styleName, dftStyles, rptTpl) {
+        var me = this, rst = null, list = [];
+        if (rptTpl) list.push(rptTpl[JV.NODE_STYLE_COLLECTION]);
+        list.push(dftStyles);
+        rst = me.getResultByID(styleName, list);
+        return rst;
+    },
+    getControl: function(controlName, dftControls, rptTpl) {
+        var me = this, rst = null, list = [];
+        if (rptTpl) list.push(rptTpl[JV.NODE_CONTROL_COLLECTION]);
+        list.push(dftControls);
+        rst = me.getResultByID(controlName, list);
+        return rst;
+    },
+    getLayoutAlignment: function(alignStr) {
+        var rst = JV.LAYOUT.indexOf(alignStr);
+        if (rst < 0) rst = JV.LAYOUT_FULFILL;
+        return rst;
+    },
+    getPosCalculationType: function (typeStr) {
+        var rst = JV.CAL_TYPE.indexOf(typeStr);
+        if (rst < 0) rst = JV.CAL_TYPE_ABSTRACT;
+        return rst;
+    },
+    getScreenDPI: function() {
+        var me = this, arrDPI = [];
+        if (!me.commonConstant.resolution) {
+            arrDPI = [96,96];
+            me.commonConstant.resolution = arrDPI;
+        } else {
+            arrDPI = me.commonConstant.resolution;
+        }
+        return arrDPI;
+    },
+    getScreenDPI_bk: function() {
+        var me = this, arrDPI = [];
+        if (!me.commonConstant.resolution) {
+            if (window) {
+                if (window.screen.deviceXDPI != undefined) {
+                    arrDPI.push(window.screen.deviceXDPI);
+                    arrDPI.push(window.screen.deviceYDPI);
+                } else {
+                    var tmpNode = document.createElement("DIV");
+                    tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
+                    document.body.appendChild(tmpNode);
+                    arrDPI.push(parseInt(tmpNode.offsetWidth));
+                    arrDPI.push(parseInt(tmpNode.offsetHeight));
+                    tmpNode.parentNode.removeChild(tmpNode);
+                }
+            } else {
+                arrDPI = [96,96];
+            }
+            me.commonConstant.resolution = arrDPI;
+        } else {
+            arrDPI = me.commonConstant.resolution;
+        }
+        return arrDPI;
+    },
+    getUnitFactor: function(rptTpl) {
+        var me = this;
+        return me.translateUnit(rptTpl[JV.NODE_MAIN_INFO][JV.PROP_UNITS]);
+    },
+    translateUnit: function(unitStr) {
+        var me = this, rst = 1.0;
+        if (unitStr) {
+            var resolution = me.getScreenDPI();
+            if (JV.MEASUREMENT.PIXEL.indexOf(unitStr) >= 0) {
+                rst = 1.0;
+            } else if (JV.MEASUREMENT.CM.indexOf(unitStr) >= 0) {
+                rst = 1.0 * resolution[0] / 2.54;
+            } else if (JV.MEASUREMENT.INCH.indexOf(unitStr) >= 0) {
+                rst = 1.0 * resolution[0];
+            }
+        }
+        return rst;
+    },
+    getPageSize: function (rptTpl) {
+        var me = this, size = null;
+        var sizeStr = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE];
+        var sizeIdx = JV.PAGES_SIZE_STR.indexOf(sizeStr);
+        if (sizeIdx >= 0) {
+            size = JV.PAGES_SIZE[sizeIdx].slice(0);
+        } else if (sizeStr === JV.PAGE_SELF_DEFINE) {
+            //
+        } else {
+            size = JV.SIZE_A4.slice(0);
+        }
+        var page_orientation = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION];
+        if (page_orientation === JV.ORIENTATION_LANDSCAPE || page_orientation === JV.ORIENTATION_LANDSCAPE_CHN) {
+            //swap x,y
+            var tmp = size[0];
+            size[0] = size[1];
+            size[1] = tmp;
+        }
+        return size;
+    },
+    getReportArea: function(rptTpl, unitFactor) {
+        var me = this, resolution = me.getScreenDPI(), rst = [], size = me.getPageSize(rptTpl);
+        size[0] = resolution[0] * size[0];
+        size[1] = resolution[0] * size[1];
+        rst.push(unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]);
+        rst.push(unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_TOP]);
+        rst.push(size[0] - unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT]);
+        rst.push(size[1] - unitFactor * rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_BOTTOM]);
+        return rst;
+    },
+    getSegIdxByPageIdx: function(page, page_seg_map) {
+        var rst = -1;
+        for (var pIdx = 0; pIdx < page_seg_map.length; pIdx++) {
+            if (page_seg_map[pIdx][0] == page) {
+                rst = page_seg_map[pIdx][1];
+                break;
+            }
+        }
+        return rst;
+    }
+};
+
+module.exports = JpcCommonHelper;

+ 60 - 0
protect/rpt_component/helper/Jpc_Helper_CommonOutput.js

@@ -0,0 +1,60 @@
+var JV = require('../Jpc_ValueDefine');
+var JpcFieldHelper = require('./Jpc_Helper_Field');
+
+var JpcCommonOutputHelper = {
+    createCommonOutputWithoutDecorate: function (node, value, controls) {
+        var rst = {};
+        //1. font/style/control
+        rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
+        rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
+        rst[JV.PROP_STYLE] = node[[JV.PROP_STYLE]];
+        //2. value
+        rst[JV.PROP_VALUE] = value;
+        if (node[JV.PROP_FORMAT]) {
+            if (!(isNaN(parseFloat(rst[JV.PROP_VALUE])))) {
+                var dotIdx = node[JV.PROP_FORMAT].indexOf(".");
+                if (dotIdx >= 0) {
+                    rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(node[JV.PROP_FORMAT].length - dotIdx - 1);
+                } else {
+                    rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(0);
+                }
+            }
+        }
+        if (node[JV.PROP_PREFIX] && rst[JV.PROP_VALUE] != null) {
+            rst[JV.PROP_VALUE] = node[JV.PROP_PREFIX] + rst[JV.PROP_VALUE];
+        }
+        if (node[JV.PROP_SUFFIX] && rst[JV.PROP_VALUE] != null) {
+            rst[JV.PROP_VALUE] = rst[JV.PROP_VALUE] + node[JV.PROP_SUFFIX];
+        }
+        return rst;
+    },
+    createCommonOutput: function (node, value, controls) {
+        var rst = {};
+        //1. font/style/control
+        rst[JV.PROP_FONT] = node[[JV.PROP_FONT]];
+        rst[JV.PROP_CONTROL] = node[[JV.PROP_CONTROL]];
+        rst[JV.PROP_STYLE] = node[[JV.PROP_STYLE]];
+        //2. value
+        rst[JV.PROP_VALUE] = value;
+        JpcFieldHelper.decorateValue(rst, controls);
+        if (node[JV.PROP_FORMAT]) {
+            if (!(isNaN(parseFloat(rst[JV.PROP_VALUE])))) {
+                var dotIdx = node[JV.PROP_FORMAT].indexOf(".");
+                if (dotIdx >= 0) {
+                    rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(node[JV.PROP_FORMAT].length - dotIdx - 1);
+                } else {
+                    rst[JV.PROP_VALUE] = parseFloat(rst[JV.PROP_VALUE]).toFixed(0);
+                }
+            }
+        }
+        if (node[JV.PROP_PREFIX] && rst[JV.PROP_VALUE] != null && rst[JV.PROP_VALUE] != "") {
+            rst[JV.PROP_VALUE] = node[JV.PROP_PREFIX] + rst[JV.PROP_VALUE];
+        }
+        if (node[JV.PROP_SUFFIX] && rst[JV.PROP_VALUE] != null && rst[JV.PROP_VALUE] != "") {
+            rst[JV.PROP_VALUE] = rst[JV.PROP_VALUE] + node[JV.PROP_SUFFIX];
+        }
+        return rst;
+    }
+}
+
+module.exports = JpcCommonOutputHelper;

+ 189 - 0
protect/rpt_component/helper/Jpc_Helper_CrossTab.js

@@ -0,0 +1,189 @@
+var JV = require('../Jpc_ValueDefine');
+var JpcCommonHelper = require('./Jpc_Helper_Common');
+
+var JpcCrossTabHelper = {
+    getColIDX: function(cl, val) {
+        var rst = -1;
+        for (var i = 0; i < cl.length; i++) {
+            var ca = cl[i];
+            for (var j = 0; j < ca.length; j++) {
+                if (ca[j] == val) {
+                    rst = i;
+                    break;
+                }
+            }
+            if (rst != -1) {
+                break;
+            }
+        }
+        return rst;
+    },
+    pushToSeg: function(segArr, dataSeq, segIdx, sIdx, eIdx) {
+        var arrIdx = [];
+        for (var k = sIdx; k < eIdx; k++) {
+            arrIdx.push(dataSeq[segIdx][k]);
+        }
+        segArr.push(arrIdx);
+    },
+    sortFieldValue: function(sIDX, eIDX, sortOrder, dataField, dataValSeq) {
+        var tmpSeq = [];
+        if ((sortOrder) && (sortOrder != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT)) {
+            if (sIDX >= 0 && eIDX >= sIDX && dataValSeq.length > eIDX) {
+                var reversed = 1;
+                if (sortOrder === JV.TAB_FIELD_PROP_SORT_VAL_DESC) {
+                    reversed = -1;
+                }
+                for (var i = sIDX; i <= eIDX; i++) {
+                    tmpSeq.push(dataValSeq[i]);
+                }
+                tmpSeq.sort(function(idx1, idx2) {
+                    var rst = 0;
+                    if (isNaN(parseFloat(dataField[idx1])) || isNaN(parseFloat(dataField[idx1]))) {
+                        if (dataField[idx1] > dataField[idx2]) {
+                            rst = reversed;
+                        } else if (dataField[idx1] < dataField[idx2]) {
+                            rst = -reversed;
+                        }
+                    } else {
+                        if ((1.0 * dataField[idx1]) > (1.0 * dataField[idx2])) {
+                            rst = reversed;
+                        } else if ((1.0 * dataField[idx1]) < (1.0 * dataField[idx2])) {
+                            rst = -reversed;
+                        }
+                    }
+                    return rst;
+                });
+            }
+        }
+        if (tmpSeq.length > 0) {
+            for (var i = sIDX; i <= eIDX; i++) {
+                dataValSeq[i] = tmpSeq[i - sIDX];
+            }
+        }
+        return tmpSeq;
+    },
+    checkIfEqual: function(dataFields, seq1, seq2) {
+        var rst = true;
+        for (var i = 0; i < dataFields.length; i++) {
+            if ((dataFields[i][seq1] !== dataFields[i][seq2])) {
+                rst = false;
+                break;
+            }
+        }
+        return rst;
+    },
+    sortTabFields: function(tabFields, fieldSeqs, data_details, dataSeq) {
+        var me = this;
+        var sIDX = 0, eIDX = -1, isFirstSort = true;
+        for (var i = 0; i < tabFields.length; i++) {
+            var tabField = tabFields[i];
+            if (tabField[JV.TAB_FIELD_PROP_SORT] != JV.TAB_FIELD_PROP_SORT_VAL_NOSORT) {
+                if (isFirstSort) {
+                    isFirstSort = false;
+                    //first field, should sort all data items
+                    for (var j = 0; j < dataSeq.length; j++) {
+                        sIDX = 0;
+                        eIDX = dataSeq[j].length - 1;
+                        //sort the field value here
+                        me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                    }
+                } else {
+                    //then sort the rest fields one by one
+                    for (var j = 0; j < dataSeq.length; j++) {
+                        var chkFields = [];
+                        for (var k = 0; k < i; k++) {
+                            chkFields.push(data_details[fieldSeqs[k]]);
+                        }
+                        sIDX = 0, eIDX = -1;
+                        for (var m = 1; m < dataSeq[j].length; m++) {
+                            if (!(me.checkIfEqual(chkFields, dataSeq[j][m - 1], dataSeq[j][m]))) {
+                                eIDX = m - 1;
+                            } else if (m == dataSeq[j].length - 1) {
+                                eIDX = m;
+                            };
+                            if (eIDX >= sIDX) {
+                                if (eIDX != sIDX) {
+                                    me.sortFieldValue(sIDX, eIDX, tabField[JV.TAB_FIELD_PROP_SORT],data_details[fieldSeqs[i]], dataSeq[j]);
+                                }
+                                sIDX = m;
+                                eIDX = m - 1; //for protection purpose
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    getMaxTabCntPerPage: function(bands, rptTpl, tabNodeName, tabMeasurePropName, measureForCal) {
+        var rst = 1;
+        if (rptTpl[JV.NODE_CROSS_INFO][tabNodeName]) {
+            var tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName];
+            var maxFieldMeasure = 1.0;
+            if (JV.CAL_TYPE_ABSTRACT == JpcCommonHelper.getPosCalculationType(tab[JV.PROP_CALCULATION])) {
+                var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+                maxFieldMeasure = 1.0 * rptTpl[JV.NODE_CROSS_INFO][tabNodeName][tabMeasurePropName] * unitFactor;
+            } else {
+                maxFieldMeasure = measureForCal * rptTpl[JV.NODE_CROSS_INFO][tabNodeName][tabMeasurePropName] / JV.HUNDRED_PERCENT;
+            }
+            rst = Math.floor(measureForCal / maxFieldMeasure);
+        }
+        return rst;
+    },
+    getMaxRowsPerPage: function(bands, rptTpl) {
+        var me = this, rst = 1;
+        var band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW][JV.PROP_BAND_NAME]];
+        if (band) {
+            rst =  me.getMaxTabCntPerPage(bands, rptTpl, JV.NODE_CROSS_ROW, JV.PROP_CMN_HEIGHT, band.Bottom - band.Top);
+        }
+        return rst;
+    },
+    getMaxColsPerPage: function(bands, rptTpl) {
+        var me = this, rst = 1;
+        var band = bands[rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL][JV.PROP_BAND_NAME]];
+        if (band) {
+            rst =  me.getMaxTabCntPerPage(bands, rptTpl, JV.NODE_CROSS_COL, JV.PROP_CMN_WIDTH, band.Right - band.Left);
+        }
+        return rst;
+    },
+    chkTabEnd: function(tabType, rptTpl, bands, sortedSequence, segIdx, preRec, nextRec) {
+        var me = this, rst = true;
+        var remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
+        rst = me.hasEnoughSpace(tabType, rptTpl, bands, remainAmt);
+        return rst;
+    },
+    hasEnoughSpace: function (tabType, rptTpl, bands, remainAmt) {
+        if (remainAmt < 0) return false;
+        var rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
+        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        var band = null;
+        if (rptTpl[JV.NODE_CROSS_INFO][tabType]) {
+            band = bands[rptTpl[JV.NODE_CROSS_INFO][tabType][JV.PROP_BAND_NAME]];
+        }
+        if (band != null && band != undefined) {
+            if (tabType === JV.NODE_CROSS_ROW_SUM || tabType === JV.NODE_CROSS_ROW_EXT) {
+                measurement = 1.0 * rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW][JV.PROP_CMN_HEIGHT] * unitFactor;
+                var spareHeight = measurement * remainAmt;
+                var douH = 1.0 * (band.Bottom - band.Top);
+                rst = (spareHeight >= douH) || (spareHeight - douH <= douDiffForCompare);
+            } else if (tabType === JV.NODE_CROSS_COL_SUM) {
+                measurement = 1.0 * rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL][JV.PROP_CMN_WIDTH] * unitFactor;
+                var spareWidth = measurement * remainAmt;
+                var douW = 1.0 * (band.Right - band.Left);
+                rst = (spareWidth >= douW) || (spareWidth - douW <= douDiffForCompare);
+            }
+        }
+        return rst;
+    },
+    initialPageStatus: function (pageStatus) {
+        pageStatus[JV.STATUS_NORMAL] = true;
+        pageStatus[JV.STATUS_REPORT_START] = false;
+        pageStatus[JV.STATUS_REPORT_END] = false;
+        pageStatus[JV.STATUS_SEGMENT_START] = false;
+        pageStatus[JV.STATUS_SEGMENT_END] = false;
+        pageStatus[JV.STATUS_GROUP] = false;
+        pageStatus[JV.STATUS_CROSS_ROW_END] = false;
+        pageStatus[JV.STATUS_CROSS_COL_END] = false;
+    }
+};
+
+module.exports = JpcCrossTabHelper;

+ 58 - 0
protect/rpt_component/helper/Jpc_Helper_Discrete.js

@@ -0,0 +1,58 @@
+var JV = require('../Jpc_ValueDefine');
+var JE = require('../Jpc_RTE');
+var JpcTextHelper = require('./Jpc_Helper_Text');
+var JpcCommonOutputHelper = require('./Jpc_Helper_CommonOutput');
+var JpcAreaHelper = require('./Jpc_Helper_Area');
+
+var JpcDiscreteHelper = {
+    outputDiscreteInfo: function (discreteArray, bands, dataObj, unitFactor, pageStatus, segIdx, multiCols, multiColIdx, $CURRENT_RPT) {
+        var rst = [];
+        if (discreteArray && dataObj) {
+            for (var i = 0; i < discreteArray.length; i++) {
+                var band = bands[discreteArray[i][JV.PROP_BAND_NAME]];
+                if (band && pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] == true) {
+                    if (discreteArray[i][JV.PROP_TEXT]) {
+                        rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx));
+                    }
+                    if (discreteArray[i][JV.PROP_TEXTS]) {
+                        for (var j = 0; j < discreteArray[i][JV.PROP_TEXTS].length; j++) {
+                            rst.push(JpcTextHelper.outputText(discreteArray[i][JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx));
+                        }
+                    }
+                    if (discreteArray[i][JV.PROP_DISCRETE_FIELDS]) {
+                        for (var j = 0; j < discreteArray[i][JV.PROP_DISCRETE_FIELDS].length; j++) {
+                            var df = discreteArray[i][JV.PROP_DISCRETE_FIELDS][j];
+                            var value = "";
+                            if (df[JV.PROP_FIELD_ID]) {
+                                var field = JE.F(df[JV.PROP_FIELD_ID], $CURRENT_RPT);
+                                if (field.DataSeq != JV.BLANK_FIELD_INDEX) {
+                                    var data = dataObj[field.DataNodeName][field.DataSeq];
+                                    if (data && data.length > 0) {
+                                        if (data.length > segIdx) {
+                                            value = data[segIdx];
+                                        } else {
+                                            value = data[0];
+                                        }
+                                    }
+                                } else {
+                                    if (field[JV.PROP_AD_HOC_DATA] && field[JV.PROP_AD_HOC_DATA].length > 0) value = field[JV.PROP_AD_HOC_DATA][0]
+                                    else value = "";
+                                }
+                            } else if (df[JV.PROP_PARAM_ID]) {
+                                var param = JE.P(df[JV.PROP_PARAM_ID], $CURRENT_RPT);
+                                value = param[JV.PROP_DFT_VALUE];
+                            }
+                            var item = JpcCommonOutputHelper.createCommonOutputWithoutDecorate(df, value, null);
+                            //position
+                            item[JV.PROP_AREA] = JpcAreaHelper.outputArea(df[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, multiCols, multiColIdx, false, false);
+                            rst.push(item);
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    }
+}
+
+module.exports = JpcDiscreteHelper;

+ 44 - 0
protect/rpt_component/helper/Jpc_Helper_Field.js

@@ -0,0 +1,44 @@
+var JV = require('../Jpc_ValueDefine');
+
+var JpcFieldHelper = {
+    getValue: function(dataField, valueIdx) {
+        var rst = "";
+        if (dataField && (dataField.length > valueIdx) && (valueIdx >= 0)) {
+            rst = dataField[valueIdx];
+        }
+        return rst;
+    },
+    decorateValue: function (cell, controls) {
+        if (controls) {
+            var val = cell[JV.PROP_VALUE];
+            var showZero = controls[cell[JV.PROP_CONTROL]][JV.PROP_SHOW_ZERO];
+            if (showZero && showZero == 'F' ) {
+                if (0.0 == 1.0 * (0 + val)) {
+                    cell[JV.PROP_VALUE] = "";
+                }
+            }
+        }
+    },
+    findAndPutDataFieldIdx: function (rptTpl, tab_fields, rstFields, rstFieldsIdx) {
+        if (tab_fields) {
+            var detail_fields = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS];
+            for (var i = 0; i < tab_fields.length; i++) {
+                var isFounded = false;
+                for (var j = 0; j < detail_fields.length; j++) {
+                    if (tab_fields[i]["FieldID"] == detail_fields[j]["ID"]) {
+                        isFounded = true;
+                        if (rstFields) rstFields.push(tab_fields[i]);
+                        if (rstFieldsIdx) rstFieldsIdx.push(j);
+                        break;
+                    }
+                }
+                if (!isFounded) {
+                    if (rstFields) rstFields.push(tab_fields[i]);
+                    if (rstFieldsIdx) rstFieldsIdx.push(JV.BLANK_FIELD_INDEX);
+                }
+            }
+        }
+    }
+};
+
+module.exports = JpcFieldHelper;

+ 43 - 0
protect/rpt_component/helper/Jpc_Helper_FlowTab.js

@@ -0,0 +1,43 @@
+var JV = require('../Jpc_ValueDefine');
+var JpcCommonHelper = require('./Jpc_Helper_Common');
+
+var JpcFlowTabHelper = {
+    getMaxRowsPerPage: function(bands, rptTpl) {
+        var me = this, rst = 1;
+        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band) {
+            var maxFieldMeasure = 1.0;
+            if (JV.CAL_TYPE_ABSTRACT == JpcCommonHelper.getPosCalculationType(tab[JV.PROP_CALCULATION])) {
+                var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+                maxFieldMeasure = 1.0 * rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT] * unitFactor;
+            } else {
+                maxFieldMeasure = (band.Bottom - band.Top) * rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT] / JV.HUNDRED_PERCENT;
+            }
+            rst = Math.floor((band.Bottom - band.Top) / maxFieldMeasure);
+        }
+        return rst;
+    },
+    chkSegEnd: function (bands, rptTpl, sortedSequence, segIdx, preRec, nextRec) {
+        var me = this, rst = true;
+        var remainAmt = preRec + nextRec - sortedSequence[segIdx].length;
+        rst = me.hasEnoughSpace(rptTpl, bands, remainAmt);
+        return rst;
+    },
+    hasEnoughSpace: function (rptTpl, bands, remainAmt) {
+        if (remainAmt < 0) return false;
+        var rst = true, measurement = 1.0, douDiffForCompare = 0.00001;
+        var unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
+        var tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
+        var band = bands[tab[JV.PROP_BAND_NAME]];
+        if (band != null && band != undefined) {
+            measurement = 1.0 * tab[JV.PROP_CMN_HEIGHT] * unitFactor;
+            var spareHeight = measurement * remainAmt;
+            var douH = 1.0 * (band.Bottom - band.Top);
+            rst = (spareHeight >= douH) || (spareHeight - douH <= douDiffForCompare);
+        }
+        return rst;
+    }
+};
+
+module.exports = JpcFlowTabHelper;

+ 14 - 0
protect/rpt_component/helper/Jpc_Helper_Text.js

@@ -0,0 +1,14 @@
+var JV = require('../Jpc_ValueDefine');
+var JpcCommonOutputHelper = require('./Jpc_Helper_CommonOutput');
+var JpcAreaHelper = require('./Jpc_Helper_Area');
+
+var JpcTextHelper = {
+    outputText: function (textNode, band, unitFactor, rows, rowIdx, cols, colIdx, multiCols, multiColIdx) {
+        var rst = JpcCommonOutputHelper.createCommonOutput(textNode, textNode[JV.PROP_LABEL], null);
+        //position
+        rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(textNode[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, multiCols, multiColIdx, false, false);
+        return rst;
+    }
+};
+
+module.exports = JpcTextHelper;

+ 1 - 0
server.js

@@ -63,6 +63,7 @@ var apiRouter = express.Router();
 apiRouter.post('/getReport', reportController.getReportAllPages);
 apiRouter.post('/setDftCache', cacheController.setReportDefaultCache);
 apiRouter.post('/getBills', billController.getAllBills);
+apiRouter.post('/getConstructBills', billController.getAll_Construct);
 
 apiRouter.post('/setProjects', projectController.saveProjects);
 apiRouter.post('/getProjects', projectController.getProjectsByUserId);

+ 963 - 0
src/ExcelConverter/ExcelConverter.js

@@ -0,0 +1,963 @@
+var wijmo;
+(function (wijmo) {
+    (function (_grid) {
+        'use strict';
+
+        /**
+        * ExcelConverter class provides function exporting FlexGrid to xlsx file
+        * and importing xlsx file to FlexGrid.
+        */
+        var ExcelConverter = (function () {
+            function ExcelConverter() {
+            }
+            /**
+            * export the FlexGrid to xlsx file
+            *
+            * @param flex the FlexGrid need be exported to xlsx file
+            * @param convertOption the options for exporting.
+            */
+            ExcelConverter.export = function (flex, convertOption) {
+                if (typeof convertOption === "undefined") { convertOption = { includeColumnHeader: true }; }
+                var file, result;
+
+                file = this.parseFlexGridToCommonFormat(flex, convertOption);
+                result = xlsx(file);
+
+                result.base64Array = this._base64DecToArr(result.base64);
+
+                return result;
+            };
+
+            /**
+            * import the xlsx file
+            *
+            * @param file the base64 string converted from xlsx file
+            * @param flex the Flex Grid need bind the data import from xlsx file
+            * @param convertOption the options for importing.
+            * @param moreSheets flexgrid array for importing multiple sheets of the excel file.
+            */
+            ExcelConverter.import = function (file, flex, convertOption, moreSheets) {
+                if (typeof convertOption === "undefined") { convertOption = { includeColumnHeader: true }; }
+                var fileData = this._base64EncArr(new Uint8Array(file)), fileObj = xlsx(fileData);
+
+                this.parseCommonFormatToFlexGrid(fileObj, flex, convertOption, moreSheets);
+            };
+
+            /**
+            * Parse the flexgrid to common format of xlsx file.
+            *
+            * @param flex the FlexGrid need be parsed to  common format of xlsx file
+            * @param convertOption the options for exporting.
+            */
+            ExcelConverter.parseFlexGridToCommonFormat = function (flex, convertOption) {
+                if (typeof convertOption === "undefined") { convertOption = { includeColumnHeader: true }; }
+                var file = {
+                    sheets: [],
+                    creator: 'Mike Lu',
+                    created: new Date(),
+                    lastModifiedBy: 'Mike Lu',
+                    modified: new Date(),
+                    activeWorksheet: 0
+                }, index, grid;
+
+                if (wijmo.isArray(flex)) {
+                    for (index = 0; index < flex.length; index++) {
+                        grid = flex[index];
+
+                        // export the FlexGrid to xlsx.
+                        this._exportFlexGrid(grid, file, convertOption);
+                    }
+                } else {
+                    this._exportFlexGrid(flex, file, convertOption);
+                }
+
+                return file;
+            };
+
+            /**
+            * Parse the common format of the xlsx file to flexgrid.
+            *
+            * @param fileObj the common format of the xlsx file.
+            * @param flex the Flex Grid need bind the data import from xlsx file.
+            * @param convertOption the options for importing.
+            * @param moreSheets flexgrid array for importing multiple sheets of the excel file.
+            */
+            ExcelConverter.parseCommonFormatToFlexGrid = function (fileObj, flex, convertOption, moreSheets) {
+                if (typeof convertOption === "undefined") { convertOption = { includeColumnHeader: true }; }
+                var currentIncludeRowHeader = convertOption.includeColumnHeader, sheetCount = 1, sheetIndex = 0, c = 0, r = 0, columns, columnSetting, column, columnHeader, sheetHeaders, sheetHeader, headerForamt, row, currentSheet, columnCount, isGroupHeader, item, nextRowIdx, nextRow, summaryBelow, groupRow, frozenColumns, frozenRows, formula, flexHostElement, cellIndex, cellStyle, styledCells, excelThemes, mergedRange, fonts, valType, textAlign, groupCollapsed = false;
+
+                flex.columns.clear();
+                flex.rows.clear();
+                flex.frozenColumns = 0;
+                flex.frozenRows = 0;
+
+                if (fileObj.sheets.length === 0) {
+                    return;
+                }
+
+                excelThemes = fileObj.themes;
+
+                if (moreSheets) {
+                    sheetCount = fileObj.sheets.length;
+                }
+
+                for (; sheetIndex < sheetCount; sheetIndex++) {
+                    styledCells = {};
+                    mergedRange = {};
+                    r = 0;
+                    columns = [];
+                    fonts = [];
+                    currentSheet = fileObj.sheets[sheetIndex];
+
+                    if (convertOption.includeColumnHeader) {
+                        r = 1;
+                        if (currentSheet.rows.length <= 1) {
+                            currentIncludeRowHeader = false;
+                            r = 0;
+                        }
+                        sheetHeaders = currentSheet.rows[0];
+                    }
+                    columnCount = this._getColumnCount(currentSheet.rows);
+                    summaryBelow = currentSheet.summaryBelow;
+
+                    if (sheetIndex > 0) {
+                        flexHostElement = document.createElement('div');
+                        flex = new _grid.FlexGrid(flexHostElement);
+                    }
+
+                    for (c = 0; c < columnCount; c++) {
+                        flex.columns.push(new wijmo.grid.Column());
+                        if (!!currentSheet.cols[c]) {
+                            if (!isNaN(currentSheet.cols[c].width)) {
+                                flex.columns[c].width = currentSheet.cols[c].width * 6;
+                            }
+
+                            if (!currentSheet.cols[c].visible && currentSheet.cols[c].visible != undefined) {
+                                flex.columns[c].visible = !!currentSheet.cols[c].visible;
+                            }
+                        }
+                    }
+
+                    for (; r < currentSheet.rows.length; r++) {
+                        isGroupHeader = false;
+                        row = currentSheet.rows[r];
+
+                        if (row) {
+                            nextRowIdx = r + 1;
+                            while (nextRowIdx < currentSheet.rows.length) {
+                                nextRow = currentSheet.rows[nextRowIdx];
+                                if (nextRow) {
+                                    if ((isNaN(row.groupLevel) && !isNaN(nextRow.groupLevel)) || (!isNaN(row.groupLevel) && row.groupLevel < nextRow.groupLevel)) {
+                                        isGroupHeader = true;
+                                    }
+                                    break;
+                                } else {
+                                    nextRowIdx++;
+                                }
+                            }
+                        }
+
+                        if (isGroupHeader && !summaryBelow) {
+                            groupRow = new _grid.GroupRow();
+                            groupCollapsed = row.collapsed;
+                            groupRow.level = isNaN(row.groupLevel) ? 0 : row.groupLevel;
+                            flex.rows.push(groupRow);
+                        } else {
+                            flex.rows.push(new _grid.Row());
+                        }
+
+                        if (row && !!row.height && !isNaN(row.height)) {
+                            flex.rows[currentIncludeRowHeader ? r - 1 : r].height = row.height * 96 / 72;
+                        }
+
+                        for (c = 0; c < columnCount; c++) {
+                            if (!row) {
+                                flex.setCellData(currentIncludeRowHeader ? r - 1 : r, c, '');
+                                this._setColumn(columns, c, undefined);
+                            } else {
+                                item = row.cells[c];
+                                formula = item ? item.formula : undefined;
+                                if (formula && formula[0] !== '=') {
+                                    formula = '=' + formula;
+                                }
+                                formula = formula ? this._parseFlexSheetFormula(formula) : undefined;
+                                flex.setCellData(currentIncludeRowHeader ? r - 1 : r, c, formula && moreSheets ? formula : this._getItemValue(item));
+                                if (!isGroupHeader && item && item.value != null && item.value !== '') {
+                                    this._setColumn(columns, c, item);
+                                }
+
+                                // Set styles for the cell in current processing sheet.
+                                cellIndex = r * columnCount + c;
+                                cellStyle = item ? item.style : undefined;
+                                if (cellStyle) {
+                                    valType = this._getItemType(item);
+                                    if (cellStyle.hAlign) {
+                                        textAlign = cellStyle.hAlign;
+                                    } else {
+                                        switch (valType) {
+                                            case 2 /* Number */:
+                                                textAlign = 'right';
+                                                break;
+                                            case 3 /* Boolean */:
+                                                textAlign = 'center';
+                                                break;
+                                            default:
+                                                textAlign = 'left';
+                                                break;
+                                        }
+                                    }
+                                    styledCells[cellIndex] = {
+                                        fontWeight: cellStyle.font && cellStyle.font.bold ? 'bold' : 'none',
+                                        fontStyle: cellStyle.font && cellStyle.font.italic ? 'italic' : 'none',
+                                        textDecoration: cellStyle.font && cellStyle.font.underline ? 'underline' : 'none',
+                                        textAlign: textAlign,
+                                        fontFamily: cellStyle.font && cellStyle.font.family ? cellStyle.font.family : '',
+                                        fontSize: cellStyle.font && cellStyle.font.size ? Math.round(+cellStyle.font.size * 96 / 72) + 'px' : '',
+                                        color: cellStyle.font ? this._parseExcelColor(cellStyle.font.color, excelThemes) : '',
+                                        backgroundColor: cellStyle.fill && cellStyle.fill.color ? this._parseExcelColor(cellStyle.fill.color, excelThemes) : ''
+                                    };
+                                    if (cellStyle.font && fonts.indexOf(cellStyle.font.family) === -1) {
+                                        fonts.push(cellStyle.font.family);
+                                    }
+                                }
+
+                                // Get merged cell ranges.
+                                if (item && wijmo.isNumber(item.rowSpan) && wijmo.isNumber(item.colSpan)) {
+                                    for (var i = r; i < r + item.rowSpan; i++) {
+                                        for (var j = c; j < c + item.colSpan; j++) {
+                                            cellIndex = i * columnCount + j;
+                                            mergedRange[cellIndex] = new _grid.CellRange(r, c, r + item.rowSpan - 1, c + item.colSpan - 1);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        if (!groupCollapsed && row && !row.visible && row.visible != undefined) {
+                            flex.rows[currentIncludeRowHeader ? r - 1 : r].visible = row.visible;
+                        }
+                    }
+
+                    if (currentSheet.frozenPane) {
+                        frozenColumns = currentSheet.frozenPane.columns;
+                        if (wijmo.isNumber(frozenColumns) && !isNaN(frozenColumns)) {
+                            flex.frozenColumns = frozenColumns;
+                        }
+
+                        frozenRows = currentSheet.frozenPane.rows;
+                        if (wijmo.isNumber(frozenRows) && !isNaN(frozenRows)) {
+                            flex.frozenRows = currentIncludeRowHeader && frozenRows > 0 ? frozenRows - 1 : frozenRows;
+                        }
+                    }
+
+                    for (c = 0; c < flex.columnHeaders.columns.length; c++) {
+                        columnSetting = columns[c];
+                        column = flex.columns[c];
+                        if (currentIncludeRowHeader) {
+                            sheetHeader = sheetHeaders ? sheetHeaders.cells[c] : undefined;
+                            if (sheetHeader && sheetHeader.value) {
+                                headerForamt = this._parseExcelFormat(sheetHeader);
+                                columnHeader = wijmo.Globalize.format(sheetHeader.value, headerForamt);
+                            } else {
+                                columnHeader = this._numAlpha(c);
+                            }
+                        } else {
+                            columnHeader = this._numAlpha(c);
+                        }
+                        column.header = columnHeader;
+                        if (columnSetting) {
+                            if (columnSetting.dataType) {
+                                column.dataType = columnSetting.dataType;
+                            }
+                            column.format = columnSetting.format;
+                        }
+                    }
+
+                    // Set sheet related info for importing.
+                    // This property contains the name, style of cells, merge cells and used fonts of current sheet.
+                    if (moreSheets) {
+                        flex['wj_sheetInfo'] = {
+                            name: currentSheet.name,
+                            styledCells: styledCells,
+                            mergedRange: mergedRange,
+                            fonts: fonts
+                        };
+                    }
+
+                    if (sheetIndex === 0) {
+                        flex['styledCells'] = styledCells;
+                        flex['mergedRange'] = mergedRange;
+                    }
+
+                    if (moreSheets && sheetIndex > 0) {
+                        moreSheets.push(flex);
+                    }
+                }
+            };
+
+            // export the flexgrid to excel file
+            ExcelConverter._exportFlexGrid = function (flex, file, convertOption) {
+                var worksheetData = [], columnSettings = [], workSheet = {
+                    name: '',
+                    cols: [],
+                    rows: [],
+                    frozenPane: {},
+                    summaryBelow: false
+                }, groupLevel = 0, worksheetDataHeader, rowHeight, column, row, groupRow, isGroupRow, value, columnSetting, ri, ci, sheetInfo, fakeCell, headerCellStyle;
+
+                // Set sheet name for the exporting sheet.
+                sheetInfo = flex['wj_sheetInfo'];
+                workSheet.name = sheetInfo ? sheetInfo.name : '';
+
+                if (!sheetInfo) {
+                    fakeCell = document.createElement('div'), fakeCell.style.visibility = 'hidden';
+                    flex.hostElement.appendChild(fakeCell);
+                    headerCellStyle = this._getCellStyle(flex, fakeCell, 0, 0, "columnHeaders") || {};
+                }
+
+                // add the headers in the worksheet.
+                if (convertOption.includeColumnHeader && flex.columnHeaders.rows.length > 0) {
+                    for (ri = 0; ri < flex.columnHeaders.rows.length; ri++) {
+                        worksheetDataHeader = {
+                            visible: true,
+                            cells: []
+                        };
+                        rowHeight = flex.columnHeaders.rows[ri].height;
+                        if (rowHeight) {
+                            rowHeight = rowHeight * 72 / 96;
+                        }
+                        worksheetDataHeader.height = rowHeight;
+                        worksheetDataHeader.visible = true;
+
+                        for (ci = 0; ci < flex.columnHeaders.columns.length; ci++) {
+                            column = flex.columnHeaders.columns[ci];
+                            value = flex.columnHeaders.getCellData(ri, ci, true);
+
+                            if (ri === 0) {
+                                columnSetting = this._getColumnSetting(column, flex.columnHeaders.columns.defaultSize);
+                                columnSettings.push(columnSetting);
+                            }
+
+                            worksheetDataHeader.cells.push({
+                                value: value,
+                                style: this._extend(this._parseCellStyle(headerCellStyle), {
+                                    font: {
+                                        bold: true
+                                    },
+                                    hAlign: columnSetting.style.hAlign
+                                })
+                            });
+                        }
+                        worksheetData.push(worksheetDataHeader);
+                    }
+                } else {
+                    for (ci = 0; ci < flex.columnHeaders.columns.length; ci++) {
+                        column = flex.columnHeaders.columns[ci];
+
+                        columnSetting = this._getColumnSetting(column, flex.columnHeaders.columns.defaultSize);
+                        columnSettings.push(columnSetting);
+                    }
+                }
+                workSheet.cols = columnSettings;
+
+                for (ri = 0; ri < flex.cells.rows.length; ri++) {
+                    row = flex.rows[ri];
+                    isGroupRow = row instanceof _grid.GroupRow;
+
+                    if (isGroupRow) {
+                        groupRow = wijmo.tryCast(row, _grid.GroupRow);
+                        groupLevel = groupRow.level + 1;
+                    }
+
+                    worksheetData.push(this._parseFlexGridRowToSheetRow(flex, row, ri, columnSettings, convertOption.includeColumnHeader, isGroupRow, groupLevel));
+                }
+
+                workSheet.rows = worksheetData;
+                workSheet.frozenPane = {
+                    rows: convertOption.includeColumnHeader ? (flex.frozenRows + flex.columnHeaders.rows.length) : flex.frozenRows,
+                    columns: flex.frozenColumns
+                };
+
+                file.sheets.push(workSheet);
+
+                if (!sheetInfo) {
+                    // done with style element
+                    flex.hostElement.removeChild(fakeCell);
+                }
+            };
+
+            // Parse the row data of flex grid to a sheet row
+            ExcelConverter._parseFlexGridRowToSheetRow = function (flex, row, rowIndex, columnSettings, includeColumnHeader, isGroupRow, groupLevel) {
+                var rowHeight = row.height, worksheetDataItem, columnSetting, format, val, unformattedVal, groupHeader, isFormula, cellIndex, cellStyle, mergedCells, rowSpan, colSpan, sheetInfo, isCommonRow, fakeCell;
+
+                sheetInfo = flex['wj_sheetInfo'];
+
+                worksheetDataItem = {
+                    visible: true,
+                    cells: []
+                };
+
+                if (rowHeight) {
+                    rowHeight = rowHeight * 72 / 96;
+                }
+                worksheetDataItem.visible = row.visible;
+                worksheetDataItem.height = rowHeight;
+                worksheetDataItem.groupLevel = isGroupRow ? (groupLevel - 1) : groupLevel;
+
+                isCommonRow = row.constructor === wijmo.grid.Row || row.constructor === wijmo.grid._NewRowTemplate || row.constructor === wijmo.grid.detail.DetailRow;
+
+                if (!sheetInfo) {
+                    fakeCell = document.createElement('div'), fakeCell.style.visibility = 'hidden';
+                    flex.hostElement.appendChild(fakeCell);
+                }
+
+                for (var ci = 0; ci < flex.columnHeaders.columns.length; ci++) {
+                    colSpan = 1;
+                    rowSpan = 1;
+                    if (sheetInfo) {
+                        cellIndex = rowIndex * flex.columns.length + ci;
+
+                        // Get merge range for cell.
+                        if (sheetInfo.mergedRange) {
+                            mergedCells = sheetInfo.mergedRange[cellIndex];
+                        }
+
+                        // Get style for cell.
+                        if (sheetInfo.styledCells) {
+                            cellStyle = sheetInfo.styledCells[cellIndex];
+                        }
+                    } else {
+                        cellStyle = this._getCellStyle(flex, fakeCell, rowIndex, ci) || {};
+                    }
+
+                    if (mergedCells) {
+                        if (rowIndex === mergedCells.topRow && ci === mergedCells.leftCol) {
+                            rowSpan = mergedCells.bottomRow - mergedCells.topRow + 1;
+                            colSpan = mergedCells.rightCol - mergedCells.leftCol + 1;
+                        } else {
+                            continue;
+                        }
+                    }
+
+                    columnSetting = columnSettings[ci];
+                    if (isCommonRow || isGroupRow) {
+                        val = flex.getCellData(rowIndex, ci, true);
+                        unformattedVal = flex.getCellData(rowIndex, ci, false);
+                        isFormula = val && wijmo.isString(val) && val.length > 1 && val[0] === '=';
+                        format = columnSetting.style.format;
+                        if (!format) {
+                            if (wijmo.isDate(unformattedVal)) {
+                                format = 'm/d/yyyy';
+                            } else if (wijmo.isNumber(unformattedVal) && !wijmo.isInt(unformattedVal)) {
+                                format = this._formatMap['n'];
+                            } else if (wijmo.isInt(unformattedVal)) {
+                                if (unformattedVal.toString() === val) {
+                                    format = '#,##0';
+                                } else {
+                                    format = 'General';
+                                }
+                            }
+                        }
+                    } else {
+                        val = flex.columnHeaders.getCellData(0, ci, true);
+                        format = 'General';
+                    }
+
+                    if (isGroupRow && row['hasChildren'] && ci === flex.columns.firstVisibleIndex) {
+                        // Process the group header of the flex grid.
+                        if (val) {
+                            groupHeader = val;
+                        } else {
+                            groupHeader = row.dataItem && row.dataItem.groupDescription ? row.dataItem.groupDescription.propertyName + ': ' + row.dataItem.name + ' (' + row.dataItem.items.length + ' items)' : '';
+                        }
+
+                        worksheetDataItem.cells.push({
+                            value: groupHeader,
+                            formula: isFormula ? this._parseExcelFormula(val) : null,
+                            colSpan: colSpan,
+                            rowSpan: rowSpan,
+                            style: this._extend(this._parseCellStyle(cellStyle), {
+                                formatCode: format,
+                                originalFormat: columnSetting.style.format,
+                                font: {
+                                    bold: true
+                                },
+                                hAlign: 'left',
+                                indent: groupLevel - 1
+                            })
+                        });
+                    } else {
+                        // Add the cell content
+                        worksheetDataItem.cells.push({
+                            value: format === 'General' ? val : unformattedVal,
+                            formula: isFormula ? this._parseExcelFormula(val) : null,
+                            colSpan: colSpan,
+                            rowSpan: rowSpan,
+                            style: this._extend(this._parseCellStyle(cellStyle), {
+                                formatCode: format,
+                                originalFormat: columnSetting.style.format,
+                                hAlign: cellStyle && cellStyle.textAlign ? undefined : wijmo.isDate(unformattedVal) && columnSetting.style.hAlign === '' ? 'left' : columnSetting.style.hAlign
+                            })
+                        });
+                    }
+                }
+
+                if (!sheetInfo) {
+                    // done with style element
+                    flex.hostElement.removeChild(fakeCell);
+                }
+
+                return worksheetDataItem;
+            };
+
+            // Parse css style to Excel style.
+            // To jcc: you may merge your changes here.
+            ExcelConverter._parseCellStyle = function (cellStyle) {
+                var fontSize = cellStyle && cellStyle.fontSize ? +cellStyle.fontSize.substring(0, cellStyle.fontSize.indexOf('px')) : 14;
+
+                // We should parse the font size from pixel to point for exporting.
+                if (isNaN(fontSize)) {
+                    fontSize = 10;
+                } else {
+                    fontSize = Math.round(fontSize * 72 / 96);
+                }
+
+                return {
+                    font: {
+                        bold: cellStyle && cellStyle.fontWeight && cellStyle.fontWeight === 'bold',
+                        italic: cellStyle && cellStyle.fontStyle && cellStyle.fontStyle === 'italic',
+                        underline: cellStyle && cellStyle.textDecoration && cellStyle.textDecoration === 'underline',
+                        family: cellStyle ? this._parseExcelFontFamily(cellStyle.fontFamily) : 'Arial',
+                        size: fontSize,
+                        color: cellStyle && cellStyle.color ? cellStyle.color : ''
+                    },
+                    fill: {
+                        color: cellStyle && cellStyle.backgroundColor ? cellStyle.backgroundColor : ''
+                    },
+                    hAlign: cellStyle && cellStyle.textAlign
+                };
+            };
+
+            // Parse the cell format of flex grid to excel format.
+            ExcelConverter._parseCellFormat = function (format) {
+                var dec = -1, fisrtFormatChar = format[0], mapFormat = this._formatMap[fisrtFormatChar], currencySymbol = wijmo.culture.Globalize.numberFormat.currency.symbol, decimalArray = [], xlsxFormat;
+
+                if (!mapFormat) {
+                    return 'General';
+                }
+
+                if (fisrtFormatChar === 'c') {
+                    mapFormat = mapFormat.replace(/\{0\}/g, currencySymbol);
+                }
+
+                if (format.length > 1) {
+                    dec = parseInt(format.substr(1));
+                    if (dec === 0) {
+                        return mapFormat.replace(/\.00/g, '');
+                    }
+                }
+
+                if (!isNaN(dec)) {
+                    for (var i = 0; i < dec; i++) {
+                        decimalArray.push(0);
+                    }
+                }
+
+                if (decimalArray.length > 0) {
+                    xlsxFormat = mapFormat.replace(/\.00/g, '.' + decimalArray.join(''));
+                } else {
+                    if (mapFormat) {
+                        xlsxFormat = mapFormat;
+                    } else {
+                        xlsxFormat = format.replace(/tt/, 'AM/PM');
+                    }
+                }
+
+                return xlsxFormat;
+            };
+
+            // parse the basic excel format to js format
+            ExcelConverter._parseExcelFormat = function (item) {
+                if (item === undefined || item === null || item.value === undefined || item.value === null || isNaN(item.value)) {
+                    return undefined;
+                }
+
+                var formatCode = item.style && item.style.formatCode ? item.style.formatCode : '', currencySymbol = wijmo.culture.Globalize.numberFormat.currency.symbol, format = '', lastDotIndex;
+
+                if (wijmo.isDate(item.value)) {
+                    if (!formatCode || formatCode === 'General') {
+                        return 'M/d/yyyy';
+                    }
+                    format = formatCode.replace(/&quot;/g, '').replace(/;@/g, '').replace(/\[\$\-.+\]/g, '').replace(/AM\/PM/gi, 'tt').replace(/\\[\-\s,]/g, function (str) {
+                        return str.substring(1);
+                    }).replace(/m+:?|:?m+/g, function (str) {
+                        if (str.indexOf(':') > -1) {
+                            return str;
+                        } else {
+                            return str.toUpperCase();
+                        }
+                    });
+                } else if (wijmo.isNumber(item.value)) {
+                    if (!formatCode || formatCode === 'General') {
+                        return item.value === Math.round(item.value) ? 'd' : 'f2';
+                    }
+                    lastDotIndex = formatCode.lastIndexOf('.');
+                    if (formatCode.indexOf(currencySymbol) > -1 || formatCode.indexOf('$') > -1) {
+                        format = 'c';
+                    } else if (formatCode[formatCode.length - 1] === '%') {
+                        format = 'p';
+                    } else {
+                        format = 'n';
+                    }
+
+                    if (lastDotIndex > -1) {
+                        format += formatCode.substring(lastDotIndex, formatCode.lastIndexOf('0')).length;
+                    } else {
+                        format += '0';
+                    }
+                } else {
+                    format = formatCode;
+                }
+
+                return format;
+            };
+
+            // Parse the css font family to excel font family.
+            ExcelConverter._parseExcelFontFamily = function (fontFamily) {
+                var firstQuotesIndex, lastQuotesIndex;
+
+                if (fontFamily) {
+                    firstQuotesIndex = fontFamily.indexOf('"');
+                    lastQuotesIndex = fontFamily.lastIndexOf('"');
+
+                    if (firstQuotesIndex > -1 && firstQuotesIndex !== lastQuotesIndex) {
+                        fontFamily = fontFamily.substring(firstQuotesIndex + 1, lastQuotesIndex);
+                    }
+                } else {
+                    fontFamily = 'Arial';
+                }
+                return fontFamily;
+            };
+
+            // Parse the excel color to css color.
+            ExcelConverter._parseExcelColor = function (color, excelThemes) {
+                var parsedColor = '';
+
+                if (!color) {
+                    return parsedColor;
+                }
+
+                if (typeof color === "string") {
+                    return color;
+                }
+
+                switch (color.colorType) {
+                    case 'rgbColor':
+                        parsedColor = '#' + color.value.substring(2);
+                        break;
+                    case 'indexedColor':
+                        parsedColor = '#' + this._indexedColors[color.value];
+                        break;
+                    case 'themeColor':
+                        parsedColor = this._getColorFromExcelTheme(excelThemes[color.theme], color.value);
+                        break;
+                }
+
+                return parsedColor;
+            };
+
+            // Get the color by the excel theme color and value.
+            ExcelConverter._getColorFromExcelTheme = function (themeColor, value) {
+                var numberVal, color, hslArray;
+
+                if (value) {
+                    numberVal = +value;
+                    color = new wijmo.Color('#' + themeColor), hslArray = color.getHsl();
+
+                    // About the tint value and theme color convert to rgb color,
+                    // please refer https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.tabcolor.aspx
+                    if (numberVal < 0) {
+                        hslArray[2] = hslArray[2] * (1.0 + numberVal);
+                    } else {
+                        hslArray[2] = hslArray[2] * (1.0 - numberVal) + (1 - 1 * (1.0 - numberVal));
+                    }
+
+                    color = wijmo.Color.fromHsl(hslArray[0], hslArray[1], hslArray[2]);
+                    return color.toString();
+                }
+
+                // if the color value is undefined, we should return the themeColor (TFS 121712)
+                return '#' + themeColor;
+            };
+
+            // Parse the formula to excel formula.
+            ExcelConverter._parseExcelFormula = function (formula) {
+                var func = formula.substring(1, formula.indexOf('(')).toLowerCase(), format;
+
+                switch (func) {
+                    case 'ceiling':
+                    case 'floor':
+                        formula = formula.substring(0, formula.lastIndexOf(')')) + ', 1)';
+                        break;
+                    case 'round':
+                        formula = formula.substring(0, formula.lastIndexOf(')')) + ', 0)';
+                        break;
+                    case 'text':
+                        format = formula.substring(formula.lastIndexOf(','), formula.lastIndexOf('\"'));
+                        format = this._parseCellFormat(format.substring(format.lastIndexOf('\"') + 1));
+                        formula = formula.substring(0, formula.lastIndexOf(',') + 1) + '\"' + format + '\")';
+                        break;
+                }
+                return formula;
+            };
+
+            // Parse the excel formula to flexsheet formula.
+            ExcelConverter._parseFlexSheetFormula = function (excelFormula) {
+                var func = excelFormula.substring(1, excelFormula.indexOf('(')).toLowerCase(), value, format, lowerCaseFormat;
+
+                switch (func) {
+                    case 'ceiling':
+                    case 'floor':
+                    case 'round':
+                        excelFormula = excelFormula.substring(0, excelFormula.lastIndexOf(',')) + ')';
+                        break;
+                    case 'text':
+                        format = excelFormula.substring(excelFormula.indexOf('\"'), excelFormula.lastIndexOf('\"'));
+
+                        // Fix TFS issue 122648
+                        format = format.substring(format.lastIndexOf('\"') + 1);
+                        lowerCaseFormat = format.toLowerCase();
+                        if (lowerCaseFormat.indexOf('0') > -1) {
+                            // For processing number format
+                            value = 0;
+                        } else if (lowerCaseFormat.indexOf('m') > -1) {
+                            // For processing date format
+                            value = new Date();
+                        } else {
+                            // For processing string format
+                            value = '';
+                        }
+                        format = this._parseExcelFormat({
+                            value: value,
+                            style: {
+                                formatCode: format
+                            }
+                        });
+                        format = format.replace(/Y+/g, function (str) {
+                            return str.toLowerCase();
+                        });
+                        excelFormula = excelFormula.substring(0, excelFormula.indexOf('\"') + 1) + format + '\")';
+                        break;
+                }
+                return excelFormula;
+            };
+
+            // Gets the column setting, include width, visible, format and alignment
+            ExcelConverter._getColumnSetting = function (column, defaultWidth) {
+                var width = column.size;
+
+                width = width ? width / 6 : defaultWidth / 6;
+
+                return {
+                    autoWidth: true,
+                    width: width,
+                    visible: column.visible,
+                    style: {
+                        format: column.format ? this._parseCellFormat(column.format) : '',
+                        hAlign: this._toExcelHAlign(column.getAlignment())
+                    }
+                };
+            };
+
+            // Parse the CSS alignment to excel hAlign.
+            ExcelConverter._toExcelHAlign = function (value) {
+                value = value ? value.trim().toLowerCase() : value;
+                if (!value)
+                    return value;
+
+                if (value.indexOf('center') > -1) {
+                    return 'center';
+                }
+
+                if (value.indexOf('right') > -1 || value.indexOf('end') > -1) {
+                    return 'right';
+                }
+
+                if (value.indexOf('justify') > -1) {
+                    return 'justify';
+                }
+
+                return 'left';
+            };
+
+            // gets column count for specific row
+            ExcelConverter._getColumnCount = function (sheetData) {
+                var columnCount = 0, data;
+
+                for (var i = 0; i < sheetData.length; i++) {
+                    data = sheetData[i] ? sheetData[i].cells : [];
+                    if (data && data.length > columnCount) {
+                        columnCount = data.length;
+                    }
+                }
+
+                return columnCount;
+            };
+
+            // convert the column index to alphabet
+            ExcelConverter._numAlpha = function (i) {
+                var t = Math.floor(i / 26) - 1;
+                return (t > -1 ? this._numAlpha(t) : '') + this._alphabet.charAt(i % 26);
+            };
+
+            // Get DataType for value of the specific excel item
+            ExcelConverter._getItemType = function (item) {
+                if (item === undefined || item === null || item.value === undefined || item.value === null || isNaN(item.value)) {
+                    return undefined;
+                }
+
+                return wijmo.getType(item.value);
+            };
+
+            // Set column definition for the Flex Grid
+            ExcelConverter._setColumn = function (columns, columnIndex, item) {
+                var dataType, format;
+                if (!columns[columnIndex]) {
+                    columns.push({
+                        dataType: this._getItemType(item),
+                        format: this._parseExcelFormat(item)
+                    });
+                } else {
+                    dataType = this._getItemType(item);
+                    if (columns[columnIndex].dataType === undefined || (dataType !== undefined && dataType !== 1 /* String */ && columns[columnIndex].dataType === 1 /* String */)) {
+                        columns[columnIndex].dataType = dataType;
+                    }
+
+                    format = this._parseExcelFormat(item);
+                    if (format && format !== 'General') {
+                        columns[columnIndex].format = format;
+                    }
+                }
+            };
+
+            // Get value from the excel cell item
+            ExcelConverter._getItemValue = function (item) {
+                if (item === undefined || item === null || item.value === undefined || item.value === null) {
+                    return undefined;
+                }
+
+                var val = item.value;
+
+                if (wijmo.isNumber(val) && isNaN(val)) {
+                    return '';
+                } else if (val instanceof Date && isNaN(val.getTime())) {
+                    return '';
+                } else {
+                    return val;
+                }
+            };
+
+            // Get style of cell.
+            ExcelConverter._getCellStyle = function (flex, fakeCell, r, c, panel) {
+                if (typeof panel === "undefined") { panel = "cells"; }
+                // create element to get styles
+                var theStyle;
+
+                try  {
+                    // get styles for any panel, row, column
+                    flex.cellFactory.updateCell(flex[panel], r, c, fakeCell);
+                } catch (ex) {
+                    return undefined;
+                }
+
+                theStyle = window.getComputedStyle(fakeCell);
+                return theStyle;
+            };
+
+            // extends the source hash to destination hash
+            ExcelConverter._extend = function (dst, src) {
+                for (var key in src) {
+                    var value = src[key];
+                    if (wijmo.isObject(value) && dst[key]) {
+                        wijmo.copy(dst[key], value); // copy sub-objects
+                    } else {
+                        dst[key] = value; // assign values
+                    }
+                }
+                return dst;
+            };
+
+            // taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
+            ExcelConverter._b64ToUint6 = function (nChr) {
+                return nChr > 64 && nChr < 91 ? nChr - 65 : nChr > 96 && nChr < 123 ? nChr - 71 : nChr > 47 && nChr < 58 ? nChr + 4 : nChr === 43 ? 62 : nChr === 47 ? 63 : 0;
+            };
+
+            // decode the base64 string to int array
+            ExcelConverter._base64DecToArr = function (sBase64, nBlocksSize) {
+                var sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""), nInLen = sB64Enc.length, nOutLen = nBlocksSize ? Math.ceil((nInLen * 3 + 1 >> 2) / nBlocksSize) * nBlocksSize : nInLen * 3 + 1 >> 2, taBytes = new Uint8Array(nOutLen);
+
+                for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
+                    nMod4 = nInIdx & 3;
+                    nUint24 |= this._b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
+                    if (nMod4 === 3 || nInLen - nInIdx === 1) {
+                        for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
+                            taBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;
+                        }
+                        nUint24 = 0;
+                    }
+                }
+                return taBytes;
+            };
+
+            // taken from https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
+            /* Base64 string to array encoding */
+            ExcelConverter._uint6ToB64 = function (nUint6) {
+                return nUint6 < 26 ? nUint6 + 65 : nUint6 < 52 ? nUint6 + 71 : nUint6 < 62 ? nUint6 - 4 : nUint6 === 62 ? 43 : nUint6 === 63 ? 47 : 65;
+            };
+
+            ExcelConverter._base64EncArr = function (aBytes) {
+                var nMod3 = 2, sB64Enc = "";
+
+                for (var nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
+                    nMod3 = nIdx % 3;
+                    if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) {
+                        sB64Enc += "\r\n";
+                    }
+                    nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);
+                    if (nMod3 === 2 || aBytes.length - nIdx === 1) {
+                        sB64Enc += String.fromCharCode(this._uint6ToB64(nUint24 >>> 18 & 63), this._uint6ToB64(nUint24 >>> 12 & 63), this._uint6ToB64(nUint24 >>> 6 & 63), this._uint6ToB64(nUint24 & 63));
+                        nUint24 = 0;
+                    }
+                }
+
+                return sB64Enc.substr(0, sB64Enc.length - 2 + nMod3) + (nMod3 === 2 ? '' : nMod3 === 1 ? '=' : '==');
+            };
+            ExcelConverter._formatMap = {
+                n: '#,##0.00',
+                c: '{0}#,##0.00_);({0}#,##0.00)',
+                p: '0.00%'
+            };
+            ExcelConverter._alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+            ExcelConverter._indexedColors = [
+                '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF',
+                '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF',
+                '800000', '008000', '000080', '808000', '800080', '008080', 'C0C0C0', '808080',
+                '9999FF', '993366', 'FFFFCC', 'CCFFFF', '660066', 'FF8080', '0066CC', 'CCCCFF',
+                '000080', 'FF00FF', 'FFFF00', '00FFFF', '800080', '800000', '008080', '0000FF',
+                '00CCFF', 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF', 'FF99CC', 'CC99FF', 'FFCC99',
+                '3366FF', '33CCCC', '99CC00', 'FFCC00', 'FF9900', 'FF6600', '666699', '969696',
+                '003366', '339966', '003300', '333300', '993300', '993366', '333399', '333333',
+                '000000', 'FFFFFF'];
+            return ExcelConverter;
+        })();
+        _grid.ExcelConverter = ExcelConverter;
+    })(wijmo.grid || (wijmo.grid = {}));
+    var grid = wijmo.grid;
+})(wijmo || (wijmo = {}));
+
+
+
+
+
+//# sourceMappingURL=ExcelConverter.js.map

+ 125 - 0
src/ZaoJiaShuTest.html

@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head lang="en">
+    <meta charset="UTF-8">
+    <title></title>
+</head>
+<body>
+    <script src="/src/lib/jquery-1.9.1.min.js"></script>
+    <table id="forPrintHide">
+        <tr>
+            <td>
+                <input type="button" value="获取 DummyFolder" onclick="getDummyFolder()"/>
+                <input type="button" value="保存 DummyFolder" onclick="saveDummyFolder()"/>
+                <input type="button" value="更新 DummyFolder" onclick="updateDummyFolder()"/>
+                <input type="button" value="计算 DummyFolder" onclick="calculateDummyFolder()"/>
+            </td>
+        </tr>
+    </table>
+    <canvas id="myCanvas" width="2000" height="1280">
+    </canvas>
+
+</body>
+<script>
+    var dummyID = -100, dummyParentID = -1, dummySiblingID = -1;
+    var dummyProjects = [
+        {
+            "ID" : dummyID,
+            "UserID": "admin",
+            "ParentID": dummyParentID,
+            "NextSiblingID": dummySiblingID,
+            "parallelSeq": 1,
+            "innerSeq": 1,
+            "TypeID": 0,
+            "Name": "Dummy Top Folder",
+            "Description": ""
+        },
+        {
+            "ID" : dummyID,
+            "UserID": "admin",
+            "ParentID": 1,
+            "NextSiblingID": dummySiblingID,
+            "parallelSeq": 0,
+            "innerSeq": 2,
+            "TypeID": 0,
+            "Name": "Dummy Second Folder",
+            "Description": ""
+        },
+        {
+            "ID" : dummyID,
+            "UserID": "admin",
+            "ParentID": dummyParentID,
+            "NextSiblingID": dummySiblingID,
+            "parallelSeq": 2,
+            "innerSeq": 1,
+            "TypeID": 1,
+            "Name": "Dummy Top Project",
+            "Description": ""
+        }
+    ]
+
+    function getDummyFolder() {
+        //
+    }
+
+    function saveDummyFolder() {
+        $.ajax({
+            type:"POST",
+            url: 'http://localhost:3010/api/setProjects',
+            data: {"user_id": "admin", "prjData": JSON.stringify(dummyProjects[1])},
+            dataType: 'json',
+            cache: false,
+            timeout: 15000,
+            success: function(result){
+                if (result.success) {
+                    alert('Save "' + dummyProjects[1].Name + '" OK!')
+                }
+            },
+            error: function(jqXHR, textStatus, errorThrown){
+                alert('error: ' + textStatus + " " + errorThrown);
+            }
+        });
+    }
+
+    function updateDummyFolder() {
+        var update = {$set : {parallelSeq : 3}};
+        $.ajax({
+            type:"POST",
+            url: 'http://localhost:3010/api/updateProjects',
+            data: {"user_id": "admin", "prj_id": 2, "prj_Update": JSON.stringify(update)},
+            dataType: 'json',
+            cache: false,
+            timeout: 15000,
+            success: function(result){
+                if (result.success) {
+                    alert('Update OK!')
+                }
+            },
+            error: function(jqXHR, textStatus, errorThrown){
+                alert('error: ' + textStatus + " " + errorThrown);
+            }
+        });
+    }
+
+    function calculateDummyFolder() {
+        $.ajax({
+            type:"POST",
+            url: 'http://localhost:3010/api/testCalculateBills',
+            data: {"user_id": "admin"},
+            dataType: 'json',
+            cache: false,
+            timeout: 150000,
+            success: function(result){
+                if (result.success) {
+                    alert(result.data);
+                }
+            },
+            error: function(jqXHR, textStatus, errorThrown){
+                alert('error: ' + textStatus + " " + errorThrown);
+            }
+        });
+    }
+
+</script>
+
+</html>

+ 286 - 0
src/baobiao.html

@@ -0,0 +1,286 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>报表-Smartcost</title>
+    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="css/bootstrap/themes.css">
+    <link rel="stylesheet" href="css/main.css">
+    <link rel="stylesheet" href="css/font-awesome/font-awesome.min.css">
+    <!--zTree-->
+  	<link rel="stylesheet" href="css/ztree/zTreeStyle.css" type="text/css">
+</head>
+<body>
+    <div class="header">
+        <!-- <div class="top-msg clearfix">
+            <div class="alert alert-warning mb-0 py-0" role="alert">
+                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
+                  <span aria-hidden="true">&times;</span>
+                </button>
+                <strong>Warning!</strong> Better check yourself, you're not looking too good.
+            </div>
+        </div> -->
+        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 justify-content-between">
+            <span class="header-logo px-2">Smartcost</span>
+            <div class="navbar-text"><a href="project-management.html">项目管理</a><i class="fa fa-angle-right fa-fw"></i>文件夹<i class="fa fa-angle-right fa-fw"></i>建设项目<i class="fa fa-angle-right fa-fw"></i>单项工程<i class="fa fa-angle-right fa-fw"></i>单位工程</div>
+            <div class="float-lg-right navbar-text pt-0">
+                <div class="dropdown d-inline-block">
+                    <button class="btn btn-link btn-sm dropdown-toggle" type="button" data-toggle="dropdown">陈特</button>
+                    <div class="dropdown-menu dropdown-menu-right">
+                        <a class="dropdown-item" href="user-info.html" target="_blank">账号资料</a>
+                        <a class="dropdown-item" href="user-buy.html" target="_blank">产品购买</a>
+                        <a class="dropdown-item" href="user-set.html" target="_blank">偏好设置</a>
+                    </div>
+                </div>
+                <span class="btn btn-link btn-sm new-msg">
+                  <i class="fa fa-envelope-o" aria-hidden="true"></i>&nbsp;2
+                </span>
+                <button class="btn btn-link btn-sm">注销</button>
+            </div>
+        </nav>
+    </div>
+    <div class="main">
+        <div class="main-nav">
+            <ul class="nav flex-column">
+                <li><a href="zaojiashu.html">造价书</a></li>
+                <li><a href="gongliaoji.html">工料机</a></li>
+                <li><a href="baobiao.html" class="active">报表</a></li>
+            </ul>
+        </div>
+        <div class="content">
+            <div class="container-fluid">
+              <div class="row">
+                <div class="col-lg-2 p-0">
+                  <div class="print-list">
+                  <div class="list-tools d-flex justify-content-center">
+                    <button class="btn btn-secondary btn-sm mr-1" data-toggle="modal" data-target="#addForm"><i class="fa fa-plus-square"></i> 添加报表</button>
+                    <button class="btn btn-secondary btn-sm" data-toggle="modal" data-target="#editForm"><i class="fa fa-cog"></i> 管理报表</button>
+                  </div>
+                    <div class="form-list">
+                      <ul id="treeDemo" class="ztree"></ul>
+                    </div>
+                  </div>
+                </div>
+                <div class="col-lg-10 p-0">
+                  <div class="toolsbar">
+                    <div class="print-toolsbar">
+                      <div class="panel">
+                        <div class="panel-body">
+                          <button class="btn btn-secondary btn-sm" type="button">
+                            <i class="fa fa-print"></i><br>
+                            打印 <span id="checkCount" class="badge badge-primary">5</span>
+                          </button>
+                        </div>
+                      </div>
+                      <div class="panel">
+                          <div class="panel-body">
+                            <div class="btn-group" role="group" aria-label="Button group with nested dropdown">
+                              <div class="btn-group" role="group">
+                                <button id="btnGroupDrop1" type="button" class="btn btn-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                  纵向
+                                </button>
+                                <div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
+                                  <a class="dropdown-item" href="#">横向</a>
+                                </div>
+                              </div>
+                              <div class="btn-group" role="group">
+                                <button id="btnGroupDrop1" type="button" class="btn btn-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                                  A4
+                                </button>
+                                <div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
+                                  <a class="dropdown-item" href="#">A3</a>
+                                </div>
+                              </div>
+                            </div>
+                          </div>
+                          <div class="panel-foot text-muted">
+                            预览设置
+                          </div>
+                      </div>
+                      <div class="panel">
+                          <div class="panel-body">
+                            <div class="btn-group" role="group">
+                              <button type="button" class="btn btn-secondary btn-sm">-</button>
+                              <a class="btn btn-secondary btn-sm" data-toggle="tooltip" data-placement="bottom" title="重置默认大小">1000%</a>
+                              <button type="button" class="btn btn-secondary btn-sm">+</button>
+                            </div>
+                          </div>
+                          <div class="panel-foot text-muted">
+                            缩放
+                          </div>
+                      </div>
+                      <div class="panel">
+                          <div class="panel-body">
+                            <div class="btn-group" role="group" aria-label="Button group with nested dropdown">
+                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="modal" data-target="#paper"><i class="fa fa-file-o"></i> 纸张</button>
+                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="modal" data-target="#format"><i class="fa fa-bold"></i> 格式</button>
+                              <button type="button" class="btn btn-secondary btn-sm" data-toggle="modal" data-target="#content"><i class="fa fa-file-text-o"></i> 内容</button>
+                            </div>
+                          </div>
+                          <div class="panel-foot text-muted">
+                            报表设置
+                          </div>
+                      </div>
+                    </div>
+                  </div>
+                    <div class="print-view poj-list">
+                      <div class="pageContainer">
+                        <div class="page">
+                          <img src="img/baobiao.png">
+                        </div>
+                        <div class="page">
+                          <img src="img/baobiao.png">
+                        </div>
+                        <div class="page">
+                          <img src="img/baobiao.png">
+                        </div>
+                        <div class="page">
+                          <img src="img/baobiao.png">
+                        </div>
+                      </div>
+                    </div>
+                </div>
+              </div>
+            </div>
+        </div>
+      </div>
+      <!--弹出纸张-->
+      <div class="modal fade" id="paper" data-backdrop="static">
+          <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                  <div class="modal-header">
+                      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+              <span aria-hidden="true">&times;</span>
+            </button>
+                      <h4 class="modal-title">纸张</h4>
+                  </div>
+                  <div class="modal-body">
+                  </div>
+                  <div class="modal-footer">
+                      <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                      <a href="" class="btn btn-primary">确定</a>
+                  </div>
+              </div>
+          </div>
+      </div>
+      <!--弹出页面-->
+      <div class="modal fade" id="format" data-backdrop="static">
+          <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                  <div class="modal-header">
+                      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+              <span aria-hidden="true">&times;</span>
+            </button>
+                      <h4 class="modal-title">格式</h4>
+                  </div>
+                  <div class="modal-body">
+                  </div>
+                  <div class="modal-footer">
+                      <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                      <a href="" class="btn btn-primary">确定</a>
+                  </div>
+              </div>
+          </div>
+      </div>
+      <!--弹出格式-->
+      <div class="modal fade" id="content" data-backdrop="static">
+          <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                  <div class="modal-header">
+                      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+              <span aria-hidden="true">&times;</span>
+            </button>
+                      <h4 class="modal-title">内容</h4>
+                  </div>
+                  <div class="modal-body">
+                  </div>
+                  <div class="modal-footer">
+                      <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                      <a href="" class="btn btn-primary">确定</a>
+                  </div>
+              </div>
+          </div>
+      </div>
+    <!-- JS. -->
+    <script src="js/jquery/jquery.min.js"></script>
+    <script src="js/tether/tether.min.js"></script>
+    <script src="js/bootstrap/bootstrap.min.js"></script>
+    <script src="js/global.js"></script>
+    <!-- zTree -->
+  	<script type="text/javascript" src="js/ztree/jquery.ztree.core.js"></script>
+  	<script type="text/javascript" src="js/ztree/jquery.ztree.excheck.js"></script>
+    <SCRIPT type="text/javascript">
+  		<!--
+  		var setting = {
+  			view: {
+  				selectedMulti: false
+  			},
+  			check: {
+  				enable: true
+  			},
+  			data: {
+  				simpleData: {
+  					enable: true
+  				}
+  			},
+  			callback: {
+  				onCheck: onCheck
+  			}
+  		};
+
+  		var zNodes =[
+  			{ id:1, pId:0, name:"随意勾选 1", open:true},
+  			{ id:11, pId:1, name:"随意勾选 1-1"},
+  			{ id:12, pId:1, name:"随意勾选  1-2", open:true},
+  			{ id:121, pId:12, name:"随意勾选 1-2-1", checked:true},
+  			{ id:122, pId:12, name:"随意勾选 1-2-2"},
+  			{ id:123, pId:12, name:"随意勾选 1-2-3"},
+  			{ id:13, pId:1, name:"随意勾选 1-3"},
+  			{ id:2, pId:0, name:"随意勾选 2", open:true},
+  			{ id:21, pId:2, name:"随意勾选 2-1"},
+  			{ id:22, pId:2, name:"随意勾选 2-2", open:true},
+  			{ id:221, pId:22, name:"随意勾选 2-2-1", checked:true},
+  			{ id:222, pId:22, name:"随意勾选 2-2-2"},
+  			{ id:223, pId:22, name:"随意勾选 2-2-3"},
+  			{ id:23, pId:2, name:"随意勾选 2-3", checked:true}
+  		];
+
+  		var clearFlag = false;
+  		function onCheck(e, treeId, treeNode) {
+  			count();
+  			if (clearFlag) {
+  				clearCheckedOldNodes();
+  			}
+  		}
+  		function clearCheckedOldNodes() {
+  			var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
+  			nodes = zTree.getChangeCheckedNodes();
+  			for (var i=0, l=nodes.length; i<l; i++) {
+  				nodes[i].checkedOld = nodes[i].checked;
+  			}
+  		}
+  		function count() {
+  			var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
+  			checkCount = zTree.getCheckedNodes(true).length;
+  			$("#checkCount").text(checkCount);
+
+  		}
+  		function createTree() {
+  			$.fn.zTree.init($("#treeDemo"), setting, zNodes);
+  			count();
+  		}
+
+  		$(document).ready(function(){
+  			createTree();
+  		});
+  		//-->
+  	</SCRIPT>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

+ 26 - 0
src/css/cust_flex_grid.css

@@ -0,0 +1,26 @@
+.custom-flex-grid .wj-header.wj-cell {
+  color: #fff;
+  background-color: #000;
+  border-bottom: solid 1px #404040;
+  border-right: solid 1px #404040;
+  font-weight: bold;
+}
+
+.custom-flex-grid .wj-cell {
+  background-color: #fff;
+  border: none;
+}
+
+.custom-flex-grid .wj-alt:not(.wj-state-selected):not(.wj-state-multi-selected) {
+  background-color: #fff;
+}
+
+.custom-flex-grid .wj-state-selected {
+  background: #000;
+  color: #fff;
+}
+
+.custom-flex-grid .wj-state-multi-selected {
+  background: #222;
+  color: #fff;
+}

BIN
src/css/ztree/img/diy/1_close.png


BIN
src/css/ztree/img/diy/1_open.png


BIN
src/css/ztree/img/diy/2.png


BIN
src/css/ztree/img/diy/3.png


BIN
src/css/ztree/img/diy/4.png


BIN
src/css/ztree/img/diy/5.png


BIN
src/css/ztree/img/diy/6.png


BIN
src/css/ztree/img/diy/7.png


BIN
src/css/ztree/img/diy/8.png


BIN
src/css/ztree/img/diy/9.png


BIN
src/css/ztree/img/line_conn.gif


BIN
src/css/ztree/img/loading.gif


BIN
src/css/ztree/img/zTreeStandard.gif


BIN
src/css/ztree/img/zTreeStandard.png


+ 97 - 0
src/css/ztree/zTreeStyle.css

@@ -0,0 +1,97 @@
+/*-------------------------------------
+zTree Style
+
+version:	3.5.19
+author:		Hunter.z
+email:		hunter.z@263.net
+website:	http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+
+.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
+.ztree {margin:0; padding:5px; color:#333}
+.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
+.ztree li ul{ margin:0; padding:0 0 0 18px}
+.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}
+
+.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
+	text-decoration:none; vertical-align:top; display: inline-block}
+.ztree li a:hover {text-decoration:underline}
+.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
+.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
+.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;
+	opacity:0.8; filter:alpha(opacity=80)}
+.ztree li a.tmpTargetNode_prev {}
+.ztree li a.tmpTargetNode_next {}
+.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
+	font-size:12px; border:1px #7EC4CC solid; *border:0px}
+.ztree li span {line-height:16px; margin-right:2px}
+.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;
+	border:0 none; cursor: pointer;outline:none;
+	background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+	background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
+
+.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
+.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
+.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
+.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
+.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
+.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
+.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
+.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
+.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
+.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
+.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
+.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
+.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
+.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
+.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
+.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
+.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
+.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
+.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
+.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
+.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
+
+.ztree li span.button.switch {width:18px; height:18px}
+.ztree li span.button.root_open{background-position:-92px -54px}
+.ztree li span.button.root_close{background-position:-74px -54px}
+.ztree li span.button.roots_open{background-position:-92px 0}
+.ztree li span.button.roots_close{background-position:-74px 0}
+.ztree li span.button.center_open{background-position:-92px -18px}
+.ztree li span.button.center_close{background-position:-74px -18px}
+.ztree li span.button.bottom_open{background-position:-92px -36px}
+.ztree li span.button.bottom_close{background-position:-74px -36px}
+.ztree li span.button.noline_open{background-position:-92px -72px}
+.ztree li span.button.noline_close{background-position:-74px -72px}
+.ztree li span.button.root_docu{ background:none;}
+.ztree li span.button.roots_docu{background-position:-56px 0}
+.ztree li span.button.center_docu{background-position:-56px -18px}
+.ztree li span.button.bottom_docu{background-position:-56px -36px}
+.ztree li span.button.noline_docu{ background:none;}
+
+.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
+
+.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+
+ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
+
+span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
+	background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+	background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
+
+ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
+.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
+
+/* level style*/
+/*.ztree li span.button.level0 {
+	display:none;
+}
+.ztree li ul.level0 {
+	padding:0;
+	background:none;
+}*/

+ 164 - 0
src/gongliaoji.html

@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>工料机-Smartcost</title>
+    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="css/bootstrap/themes.css">
+    <link rel="stylesheet" href="css/main.css">
+    <link rel="stylesheet" href="css/font-awesome/font-awesome.min.css">
+</head>
+
+<body>
+    <div class="header">
+        <!-- <div class="top-msg clearfix">
+            <div class="alert alert-warning mb-0 py-0" role="alert">
+                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
+                  <span aria-hidden="true">&times;</span>
+                </button>
+                <strong>注意!</strong> 这是一条消息通知 <a href="#">链接</a>
+            </div>
+        </div> -->
+        <nav class="navbar navbar-toggleable-lg navbar-light bg-faded p-0 justify-content-between">
+            <span class="header-logo px-2">Smartcost</span>
+            <div class="navbar-text"><a href="project-management.html">项目管理</a><i class="fa fa-angle-right fa-fw"></i>文件夹<i class="fa fa-angle-right fa-fw"></i>建设项目<i class="fa fa-angle-right fa-fw"></i>单项工程<i class="fa fa-angle-right fa-fw"></i>单位工程</div>
+            <div class="float-lg-right navbar-text pt-0">
+                <div class="dropdown d-inline-block">
+                    <button class="btn btn-link btn-sm dropdown-toggle" type="button" data-toggle="dropdown">陈特</button>
+                    <div class="dropdown-menu dropdown-menu-right">
+                        <a class="dropdown-item" href="user-info.html" target="_blank">账号资料</a>
+                        <a class="dropdown-item" href="user-buy.html" target="_blank">产品购买</a>
+                        <a class="dropdown-item" href="user-set.html" target="_blank">偏好设置</a>
+                    </div>
+                </div>
+                <span class="btn btn-link btn-sm new-msg">
+                  <i class="fa fa-envelope-o" aria-hidden="true"></i>&nbsp;2
+                </span>
+                <button class="btn btn-link btn-sm">注销</button>
+            </div>
+        </nav>
+        <nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0">
+            <ul class="nav navbar-nav px-1">
+                <li class="nav-item dropdown">
+                    <a class="nav-link dropdown-toggle" href="http://example.com" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">文件</a>
+                    <div class="dropdown-menu" aria-labelledby="supportedContentDropdown">
+                        <a class="dropdown-item" href="#">Action</a>
+                        <a class="dropdown-item" href="#">Another action</a>
+                        <a class="dropdown-item" href="#">Something else here</a>
+                    </div>
+                </li>
+                <li class="nav-item dropdown">
+                    <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">编辑</a>
+                    <div class="dropdown-menu">
+                        <a class="dropdown-item" href="#">Action</a>
+                        <a class="dropdown-item" href="#">Another action</a>
+                        <a class="dropdown-item" href="#">Something else here</a>
+                    </div>
+                </li>
+                <li class="nav-item dropdown">
+                    <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">工具</a>
+                    <div class="dropdown-menu">
+                        <a class="dropdown-item" href="#">Action</a>
+                        <a class="dropdown-item" href="#">Another action</a>
+                        <a class="dropdown-item" href="#">Something else here</a>
+                    </div>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="#" aria-haspopup="true" aria-expanded="false">帮助</a>
+                </li>
+            </ul>
+            <form class="form-inline">
+                <input class="form-control form-control-sm mr-1" type="text" placeholder="告诉我你想做什么">
+            </form>
+        </nav>
+    </div>
+    <div class="main">
+        <div class="main-nav">
+            <ul class="nav flex-column">
+                <li><a href="zaojiashu.html">造价书</a></li>
+                <li><a href="gongliaoji.html" class="active">工料机</a></li>
+                <li><a href="baobiao.html">报表</a></li>
+            </ul>
+        </div>
+        <div class="content">
+            <div class="toolsbar px-1">
+                <div class="tools-btn btn-group align-top">
+                    <a href="" class="btn btn-sm"><i class="fa fa-arrow-down" aria-hidden="true"></i>下移</a>
+                    <a href="" class="btn btn-sm"><i class="fa fa-arrow-up" aria-hidden="true"></i>上移</a>
+                    <a href="" class="btn btn-sm"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
+                    <a href="" class="btn btn-sm"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
+                    <a href="" class="btn btn-sm"><i class="fa fa-undo" aria-hidden="true"></i></a>
+                </div>
+            </div>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="main-content col-lg-12 p-0">
+                        <div class="fluid-content">
+                            <div class="warp-p2">
+                                <table class="table table-sm table-bordered m-0">
+                                    <thead>
+                                        <tr>
+                                            <th>编码</th>
+                                            <th>名称</th>
+                                            <th>规格型号</th>
+                                            <th>单位</th>
+                                            <th>类型</th>
+                                            <th>人工工种</th>
+                                            <th>调整系数</th>
+                                            <th>总消耗量</th>
+                                            <th>基价单价</th>
+                                            <th>调整基价</th>
+                                            <th>市场单价</th>
+                                            <th>市场价合计</th>
+                                            <th>是否暂估</th>
+                                            <th>供货方式</th>
+                                            <th>甲供数量</th>
+                                            <th>出厂价</th>
+                                            <th>交货方式</th>
+                                            <th>... </th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <tr>
+                                            <td>00010201</td>
+                                            <td>土石方综合工日</td>
+                                            <td> </td>
+                                            <td>工日</td>
+                                            <td>人</td>
+                                            <td>土石方人工</td>
+                                            <td> </td>
+                                            <td>100.232</td>
+                                            <td>38</td>
+                                            <td> </td>
+                                            <td>38</td>
+                                            <td>市场价合计</td>
+                                            <td>是否暂估</td>
+                                            <td>供货方式</td>
+                                            <td>甲供数量</td>
+                                            <td>出厂价</td>
+                                            <td>交货方式</td>
+                                            <td>... </td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- JS. -->
+    <script src="js/jquery/jquery.min.js"></script>
+    <script src="js/tether/tether.min.js"></script>
+    <script src="js/bootstrap/bootstrap.min.js"></script>
+    <script src="js/global.js"></script>
+</body>
+<script type="text/javascript">
+    autoFlashHeight();
+</script>
+
+</html>

BIN
src/img/baobiao.png


File diff suppressed because it is too large
+ 1913 - 0
src/js/ztree/jquery.ztree.core.js


+ 628 - 0
src/js/ztree/jquery.ztree.excheck.js

@@ -0,0 +1,628 @@
+/*
+ * JQuery zTree excheck v3.5.28
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * email: hunter.z@263.net
+ * Date: 2017-01-20
+ */
+(function($){
+	//default consts of excheck
+	var _consts = {
+		event: {
+			CHECK: "ztree_check"
+		},
+		id: {
+			CHECK: "_check"
+		},
+		checkbox: {
+			STYLE: "checkbox",
+			DEFAULT: "chk",
+			DISABLED: "disable",
+			FALSE: "false",
+			TRUE: "true",
+			FULL: "full",
+			PART: "part",
+			FOCUS: "focus"
+		},
+		radio: {
+			STYLE: "radio",
+			TYPE_ALL: "all",
+			TYPE_LEVEL: "level"
+		}
+	},
+	//default setting of excheck
+	_setting = {
+		check: {
+			enable: false,
+			autoCheckTrigger: false,
+			chkStyle: _consts.checkbox.STYLE,
+			nocheckInherit: false,
+			chkDisabledInherit: false,
+			radioType: _consts.radio.TYPE_LEVEL,
+			chkboxType: {
+				"Y": "ps",
+				"N": "ps"
+			}
+		},
+		data: {
+			key: {
+				checked: "checked"
+			}
+		},
+		callback: {
+			beforeCheck:null,
+			onCheck:null
+		}
+	},
+	//default root of excheck
+	_initRoot = function (setting) {
+		var r = data.getRoot(setting);
+		r.radioCheckedList = [];
+	},
+	//default cache of excheck
+	_initCache = function(treeId) {},
+	//default bind event of excheck
+	_bindEvent = function(setting) {
+		var o = setting.treeObj,
+		c = consts.event;
+		o.bind(c.CHECK, function (event, srcEvent, treeId, node) {
+			event.srcEvent = srcEvent;
+			tools.apply(setting.callback.onCheck, [event, treeId, node]);
+		});
+	},
+	_unbindEvent = function(setting) {
+		var o = setting.treeObj,
+		c = consts.event;
+		o.unbind(c.CHECK);
+	},
+	//default event proxy of excheck
+	_eventProxy = function(e) {
+		var target = e.target,
+		setting = data.getSetting(e.data.treeId),
+		tId = "", node = null,
+		nodeEventType = "", treeEventType = "",
+		nodeEventCallback = null, treeEventCallback = null;
+
+		if (tools.eqs(e.type, "mouseover")) {
+			if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
+				tId = tools.getNodeMainDom(target).id;
+				nodeEventType = "mouseoverCheck";
+			}
+		} else if (tools.eqs(e.type, "mouseout")) {
+			if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
+				tId = tools.getNodeMainDom(target).id;
+				nodeEventType = "mouseoutCheck";
+			}
+		} else if (tools.eqs(e.type, "click")) {
+			if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
+				tId = tools.getNodeMainDom(target).id;
+				nodeEventType = "checkNode";
+			}
+		}
+		if (tId.length>0) {
+			node = data.getNodeCache(setting, tId);
+			switch (nodeEventType) {
+				case "checkNode" :
+					nodeEventCallback = _handler.onCheckNode;
+					break;
+				case "mouseoverCheck" :
+					nodeEventCallback = _handler.onMouseoverCheck;
+					break;
+				case "mouseoutCheck" :
+					nodeEventCallback = _handler.onMouseoutCheck;
+					break;
+			}
+		}
+		var proxyResult = {
+			stop: nodeEventType === "checkNode",
+			node: node,
+			nodeEventType: nodeEventType,
+			nodeEventCallback: nodeEventCallback,
+			treeEventType: treeEventType,
+			treeEventCallback: treeEventCallback
+		};
+		return proxyResult
+	},
+	//default init node of excheck
+	_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+		if (!n) return;
+		var checkedKey = setting.data.key.checked;
+		if (typeof n[checkedKey] == "string") n[checkedKey] = tools.eqs(n[checkedKey], "true");
+		n[checkedKey] = !!n[checkedKey];
+		n.checkedOld = n[checkedKey];
+		if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");
+		n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
+		if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");
+		n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);
+		if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
+		n.halfCheck = !!n.halfCheck;
+		n.check_Child_State = -1;
+		n.check_Focus = false;
+		n.getCheckStatus = function() {return data.getCheckStatus(setting, n);};
+
+		if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) {
+			var r = data.getRoot(setting);
+			r.radioCheckedList.push(n);
+		}
+	},
+	//add dom for check
+	_beforeA = function(setting, node, html) {
+		var checkedKey = setting.data.key.checked;
+		if (setting.check.enable) {
+			data.makeChkFlag(setting, node);
+			html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true?" style='display:none;'":""),"></span>");
+		}
+	},
+	//update zTreeObj, add method of check
+	_zTreeTools = function(setting, zTreeTools) {
+		zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {
+			var checkedKey = this.setting.data.key.checked;
+			if (node.chkDisabled === true) return;
+			if (checked !== true && checked !== false) {
+				checked = !node[checkedKey];
+			}
+			callbackFlag = !!callbackFlag;
+
+			if (node[checkedKey] === checked && !checkTypeFlag) {
+				return;
+			} else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
+				return;
+			}
+			if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
+				node[checkedKey] = checked;
+				var checkObj = $$(node, consts.id.CHECK, this.setting);
+				if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+				view.setChkClass(this.setting, checkObj, node);
+				view.repairParentChkClassWithSelf(this.setting, node);
+				if (callbackFlag) {
+					this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);
+				}
+			}
+		}
+
+		zTreeTools.checkAllNodes = function(checked) {
+			view.repairAllChk(this.setting, !!checked);
+		}
+
+		zTreeTools.getCheckedNodes = function(checked) {
+			var childKey = this.setting.data.key.children;
+			checked = (checked !== false);
+			return data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked);
+		}
+
+		zTreeTools.getChangeCheckedNodes = function() {
+			var childKey = this.setting.data.key.children;
+			return data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]);
+		}
+
+		zTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) {
+			disabled = !!disabled;
+			inheritParent = !!inheritParent;
+			inheritChildren = !!inheritChildren;
+			view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);
+			view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);
+		}
+
+		var _updateNode = zTreeTools.updateNode;
+		zTreeTools.updateNode = function(node, checkTypeFlag) {
+			if (_updateNode) _updateNode.apply(zTreeTools, arguments);
+			if (!node || !this.setting.check.enable) return;
+			var nObj = $$(node, this.setting);
+			if (nObj.get(0) && tools.uCanDo(this.setting)) {
+				var checkObj = $$(node, consts.id.CHECK, this.setting);
+				if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+				view.setChkClass(this.setting, checkObj, node);
+				view.repairParentChkClassWithSelf(this.setting, node);
+			}
+		}
+	},
+	//method of operate data
+	_data = {
+		getRadioCheckedList: function(setting) {
+			var checkedList = data.getRoot(setting).radioCheckedList;
+			for (var i=0, j=checkedList.length; i<j; i++) {
+				if(!data.getNodeCache(setting, checkedList[i].tId)) {
+					checkedList.splice(i, 1);
+					i--; j--;
+				}
+			}
+			return checkedList;
+		},
+		getCheckStatus: function(setting, node) {
+			if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;
+			var checkedKey = setting.data.key.checked,
+			r = {
+				checked: node[checkedKey],
+				half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
+			};
+			return r;
+		},
+		getTreeCheckedNodes: function(setting, nodes, checked, results) {
+			if (!nodes) return [];
+			var childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked,
+			onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
+			results = !results ? [] : results;
+			for (var i = 0, l = nodes.length; i < l; i++) {
+				if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) {
+					results.push(nodes[i]);
+					if(onlyOne) {
+						break;
+					}
+				}
+				data.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);
+				if(onlyOne && results.length > 0) {
+					break;
+				}
+			}
+			return results;
+		},
+		getTreeChangeCheckedNodes: function(setting, nodes, results) {
+			if (!nodes) return [];
+			var childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked;
+			results = !results ? [] : results;
+			for (var i = 0, l = nodes.length; i < l; i++) {
+				if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {
+					results.push(nodes[i]);
+				}
+				data.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);
+			}
+			return results;
+		},
+		makeChkFlag: function(setting, node) {
+			if (!node) return;
+			var childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked,
+			chkFlag = -1;
+			if (node[childKey]) {
+				for (var i = 0, l = node[childKey].length; i < l; i++) {
+					var cNode = node[childKey][i];
+					var tmp = -1;
+					if (setting.check.chkStyle == consts.radio.STYLE) {
+						if (cNode.nocheck === true || cNode.chkDisabled === true) {
+							tmp = cNode.check_Child_State;
+						} else if (cNode.halfCheck === true) {
+							tmp = 2;
+						} else if (cNode[checkedKey]) {
+							tmp = 2;
+						} else {
+							tmp = cNode.check_Child_State > 0 ? 2:0;
+						}
+						if (tmp == 2) {
+							chkFlag = 2; break;
+						} else if (tmp == 0){
+							chkFlag = 0;
+						}
+					} else if (setting.check.chkStyle == consts.checkbox.STYLE) {
+						if (cNode.nocheck === true || cNode.chkDisabled === true) {
+							tmp = cNode.check_Child_State;
+						} else if (cNode.halfCheck === true) {
+							tmp = 1;
+						} else if (cNode[checkedKey] ) {
+							tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
+						} else {
+							tmp = (cNode.check_Child_State > 0) ? 1 : 0;
+						}
+						if (tmp === 1) {
+							chkFlag = 1; break;
+						} else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {
+							chkFlag = 1; break;
+						} else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
+							chkFlag = 1; break;
+						} else if (tmp > -1) {
+							chkFlag = tmp;
+						}
+					}
+				}
+			}
+			node.check_Child_State = chkFlag;
+		}
+	},
+	//method of event proxy
+	_event = {
+
+	},
+	//method of event handler
+	_handler = {
+		onCheckNode: function (event, node) {
+			if (node.chkDisabled === true) return false;
+			var setting = data.getSetting(event.data.treeId),
+			checkedKey = setting.data.key.checked;
+			if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
+			node[checkedKey] = !node[checkedKey];
+			view.checkNodeRelation(setting, node);
+			var checkObj = $$(node, consts.id.CHECK, setting);
+			view.setChkClass(setting, checkObj, node);
+			view.repairParentChkClassWithSelf(setting, node);
+			setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);
+			return true;
+		},
+		onMouseoverCheck: function(event, node) {
+			if (node.chkDisabled === true) return false;
+			var setting = data.getSetting(event.data.treeId),
+			checkObj = $$(node, consts.id.CHECK, setting);
+			node.check_Focus = true;
+			view.setChkClass(setting, checkObj, node);
+			return true;
+		},
+		onMouseoutCheck: function(event, node) {
+			if (node.chkDisabled === true) return false;
+			var setting = data.getSetting(event.data.treeId),
+			checkObj = $$(node, consts.id.CHECK, setting);
+			node.check_Focus = false;
+			view.setChkClass(setting, checkObj, node);
+			return true;
+		}
+	},
+	//method of tools for zTree
+	_tools = {
+
+	},
+	//method of operate ztree dom
+	_view = {
+		checkNodeRelation: function(setting, node) {
+			var pNode, i, l,
+			childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked,
+			r = consts.radio;
+			if (setting.check.chkStyle == r.STYLE) {
+				var checkedList = data.getRadioCheckedList(setting);
+				if (node[checkedKey]) {
+					if (setting.check.radioType == r.TYPE_ALL) {
+						for (i = checkedList.length-1; i >= 0; i--) {
+							pNode = checkedList[i];
+							if (pNode[checkedKey] && pNode != node) {
+								pNode[checkedKey] = false;
+								checkedList.splice(i, 1);
+
+								view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+								if (pNode.parentTId != node.parentTId) {
+									view.repairParentChkClassWithSelf(setting, pNode);
+								}
+							}
+						}
+						checkedList.push(node);
+					} else {
+						var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
+						for (i = 0, l = parentNode[childKey].length; i < l; i++) {
+							pNode = parentNode[childKey][i];
+							if (pNode[checkedKey] && pNode != node) {
+								pNode[checkedKey] = false;
+								view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+							}
+						}
+					}
+				} else if (setting.check.radioType == r.TYPE_ALL) {
+					for (i = 0, l = checkedList.length; i < l; i++) {
+						if (node == checkedList[i]) {
+							checkedList.splice(i, 1);
+							break;
+						}
+					}
+				}
+
+			} else {
+				if (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
+					view.setSonNodeCheckBox(setting, node, true);
+				}
+				if (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
+					view.setSonNodeCheckBox(setting, node, false);
+				}
+				if (node[checkedKey] && setting.check.chkboxType.Y.indexOf("p") > -1) {
+					view.setParentNodeCheckBox(setting, node, true);
+				}
+				if (!node[checkedKey] && setting.check.chkboxType.N.indexOf("p") > -1) {
+					view.setParentNodeCheckBox(setting, node, false);
+				}
+			}
+		},
+		makeChkClass: function(setting, node) {
+			var checkedKey = setting.data.key.checked,
+			c = consts.checkbox, r = consts.radio,
+			fullStyle = "";
+			if (node.chkDisabled === true) {
+				fullStyle = c.DISABLED;
+			} else if (node.halfCheck) {
+				fullStyle = c.PART;
+			} else if (setting.check.chkStyle == r.STYLE) {
+				fullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;
+			} else {
+				fullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);
+			}
+			var chkName = setting.check.chkStyle + "_" + (node[checkedKey] ? c.TRUE : c.FALSE) + "_" + fullStyle;
+			chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
+			return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;
+		},
+		repairAllChk: function(setting, checked) {
+			if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
+				var checkedKey = setting.data.key.checked,
+				childKey = setting.data.key.children,
+				root = data.getRoot(setting);
+				for (var i = 0, l = root[childKey].length; i<l ; i++) {
+					var node = root[childKey][i];
+					if (node.nocheck !== true && node.chkDisabled !== true) {
+						node[checkedKey] = checked;
+					}
+					view.setSonNodeCheckBox(setting, node, checked);
+				}
+			}
+		},
+		repairChkClass: function(setting, node) {
+			if (!node) return;
+			data.makeChkFlag(setting, node);
+			if (node.nocheck !== true) {
+				var checkObj = $$(node, consts.id.CHECK, setting);
+				view.setChkClass(setting, checkObj, node);
+			}
+		},
+		repairParentChkClass: function(setting, node) {
+			if (!node || !node.parentTId) return;
+			var pNode = node.getParentNode();
+			view.repairChkClass(setting, pNode);
+			view.repairParentChkClass(setting, pNode);
+		},
+		repairParentChkClassWithSelf: function(setting, node) {
+			if (!node) return;
+			var childKey = setting.data.key.children;
+			if (node[childKey] && node[childKey].length > 0) {
+				view.repairParentChkClass(setting, node[childKey][0]);
+			} else {
+				view.repairParentChkClass(setting, node);
+			}
+		},
+		repairSonChkDisabled: function(setting, node, chkDisabled, inherit) {
+			if (!node) return;
+			var childKey = setting.data.key.children;
+			if (node.chkDisabled != chkDisabled) {
+				node.chkDisabled = chkDisabled;
+			}
+			view.repairChkClass(setting, node);
+			if (node[childKey] && inherit) {
+				for (var i = 0, l = node[childKey].length; i < l; i++) {
+					var sNode = node[childKey][i];
+					view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);
+				}
+			}
+		},
+		repairParentChkDisabled: function(setting, node, chkDisabled, inherit) {
+			if (!node) return;
+			if (node.chkDisabled != chkDisabled && inherit) {
+				node.chkDisabled = chkDisabled;
+			}
+			view.repairChkClass(setting, node);
+			view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);
+		},
+		setChkClass: function(setting, obj, node) {
+			if (!obj) return;
+			if (node.nocheck === true) {
+				obj.hide();
+			} else {
+				obj.show();
+			}
+            obj.attr('class', view.makeChkClass(setting, node));
+		},
+		setParentNodeCheckBox: function(setting, node, value, srcNode) {
+			var childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked,
+			checkObj = $$(node, consts.id.CHECK, setting);
+			if (!srcNode) srcNode = node;
+			data.makeChkFlag(setting, node);
+			if (node.nocheck !== true && node.chkDisabled !== true) {
+				node[checkedKey] = value;
+				view.setChkClass(setting, checkObj, node);
+				if (setting.check.autoCheckTrigger && node != srcNode) {
+					setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+				}
+			}
+			if (node.parentTId) {
+				var pSign = true;
+				if (!value) {
+					var pNodes = node.getParentNode()[childKey];
+					for (var i = 0, l = pNodes.length; i < l; i++) {
+						if ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey])
+						|| ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) {
+							pSign = false;
+							break;
+						}
+					}
+				}
+				if (pSign) {
+					view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
+				}
+			}
+		},
+		setSonNodeCheckBox: function(setting, node, value, srcNode) {
+			if (!node) return;
+			var childKey = setting.data.key.children,
+			checkedKey = setting.data.key.checked,
+			checkObj = $$(node, consts.id.CHECK, setting);
+			if (!srcNode) srcNode = node;
+
+			var hasDisable = false;
+			if (node[childKey]) {
+				for (var i = 0, l = node[childKey].length; i < l; i++) {
+					var sNode = node[childKey][i];
+					view.setSonNodeCheckBox(setting, sNode, value, srcNode);
+					if (sNode.chkDisabled === true) hasDisable = true;
+				}
+			}
+
+			if (node != data.getRoot(setting) && node.chkDisabled !== true) {
+				if (hasDisable && node.nocheck !== true) {
+					data.makeChkFlag(setting, node);
+				}
+				if (node.nocheck !== true && node.chkDisabled !== true) {
+					node[checkedKey] = value;
+					if (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;
+				} else {
+					node.check_Child_State = -1;
+				}
+				view.setChkClass(setting, checkObj, node);
+				if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {
+					setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+				}
+			}
+
+		}
+	},
+
+	_z = {
+		tools: _tools,
+		view: _view,
+		event: _event,
+		data: _data
+	};
+	$.extend(true, $.fn.zTree.consts, _consts);
+	$.extend(true, $.fn.zTree._z, _z);
+
+	var zt = $.fn.zTree,
+	tools = zt._z.tools,
+	consts = zt.consts,
+	view = zt._z.view,
+	data = zt._z.data,
+	event = zt._z.event,
+	$$ = tools.$;
+
+	data.exSetting(_setting);
+	data.addInitBind(_bindEvent);
+	data.addInitUnBind(_unbindEvent);
+	data.addInitCache(_initCache);
+	data.addInitNode(_initNode);
+	data.addInitProxy(_eventProxy, true);
+	data.addInitRoot(_initRoot);
+	data.addBeforeA(_beforeA);
+	data.addZTreeTools(_zTreeTools);
+
+	var _createNodes = view.createNodes;
+	view.createNodes = function(setting, level, nodes, parentNode, index) {
+		if (_createNodes) _createNodes.apply(view, arguments);
+		if (!nodes) return;
+		view.repairParentChkClassWithSelf(setting, parentNode);
+	}
+	var _removeNode = view.removeNode;
+	view.removeNode = function(setting, node) {
+		var parentNode = node.getParentNode();
+		if (_removeNode) _removeNode.apply(view, arguments);
+		if (!node || !parentNode) return;
+		view.repairChkClass(setting, parentNode);
+		view.repairParentChkClass(setting, parentNode);
+	}
+
+	var _appendNodes = view.appendNodes;
+	view.appendNodes = function(setting, level, nodes, parentNode, index, initFlag, openFlag) {
+		var html = "";
+		if (_appendNodes) {
+			html = _appendNodes.apply(view, arguments);
+		}
+		if (parentNode) {
+			data.makeChkFlag(setting, parentNode);
+		}
+		return html;
+	}
+})(jQuery);

+ 63 - 0
src/scripts/excelSpreadHelper.js

@@ -0,0 +1,63 @@
+/**
+ * Created by Tony on 2017/3/2.
+ */
+var excelSpreadHelper = {
+    buildBills : function(data, amount, dom_id, cfg) {
+        var me = this, spread = new GC.Spread.Sheets.Workbook($('#' + dom_id)[0], { sheetCount: 1 });
+        spread.options.tabStripVisible = false;
+        spread.options.showHorizontalScrollbar = false;
+        //spread.options.showVerticalScrollbar = false;
+        var spreadNS = GC.Spread.Sheets;
+        var sheet = spread.getSheet(0);
+        currentSheetObj = sheet;
+        sheet.suspendPaint();
+        sheet.suspendEvent();
+        //Set rowHeader count and columnHeader count.
+        sheet.setRowCount(2, spreadNS.SheetArea.colHeader);
+        sheet.setColumnCount(12, spreadNS.SheetArea.viewport);
+        sheet.options.colHeaderAutoTextIndex = 1;
+        sheet.options.colHeaderAutoText = spreadNS.HeaderAutoText.numbers;
+        sheet.showRowOutline(false);
+        //setup column header
+        me.setupColHeader(sheet, cfg);
+        //setup cells
+        //setupAllCells(sheet, data, amount);
+        //decorate
+        //decorateCells(sheet);
+
+        sheet.resumeEvent();
+        sheet.resumePaint();
+    },
+    setupColHeader: function setupColHeader(sheet, cfg) {
+        var me = this, ch = GC.Spread.Sheets.SheetArea.colHeader;
+        function private_setHeader(col, rowCount, colCount, lbl, width) {
+            sheet.addSpan(0, col, rowCount, colCount, ch);
+            sheet.setValue(0, col, lbl, ch);
+            sheet.setColumnWidth(col, width);
+        };
+
+        if (cfg) {
+            //
+        } else {
+            private_setHeader(0, 2, 1, "序号", 50);
+            private_setHeader(1, 2, 1, "项目编码", 100);
+            private_setHeader(2, 2, 1, "类别", 30);
+            private_setHeader(3, 2, 1, "项目名称", 200);
+            private_setHeader(4, 2, 1, "计量单位", 50);
+            private_setHeader(5, 2, 1, "项目特征", 180);
+
+            //var instance = new GC.Spread.Sheets.CellRange(sheet, row, col, rowCount, colCount, sheetArea);
+            //var returnValue; // Type: any
+            //returnValue = instance.wordWrap(value);
+
+            //
+            //sheet.addSpan(0, 5, 1, 2, ch);
+            //sheet.setValue(0, 5, "设计数量", ch);
+            //sheet.setValue(1, 5, "数量1", ch);
+            //sheet.setValue(1, 6, "数量2", ch);
+            //sheet.setColumnWidth(5, 100);
+            //sheet.setColumnWidth(6, 100);
+            //
+        }
+    }
+}

+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.ar-AE.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: ar-AE (Arabic (U.A.E.))
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'ar-AE',
+            displayName: 'Arabic (U.A.E.)',
+            numberFormat: {
+                '.': '.',
+                ',': ',',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: 'د.إ.‏', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 6,
+                days: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+                daysAbbr: ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+                months: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليه', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
+                monthsAbbr: ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليه', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
+                am: ['ص', 'ص'],
+                pm: ['م', 'م'],
+                eras: ['م'],
+                patterns: {
+                    d: 'dd/MM/yyyy', D: 'dd MMMM, yyyy',
+                    f: 'dd MMMM, yyyy hh:mm tt', F: 'dd MMMM, yyyy hh:mm:ss tt',
+                    t: 'hh:mm tt', T: 'hh:mm:ss tt',
+                    m: 'dd MMMM', M: 'dd MMMM',
+                    y: 'MMMM, yyyy', Y: 'MMMM, yyyy',
+                    g: 'dd/MM/yyyy hh:mm tt', G: 'dd/MM/yyyy hh:mm:ss tt',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: 'العناصر المحددة  {count:n0}'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '(العناصر {count:n0})<b>{value}</b> :{name}'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 تصاعديًا',
+            descending: '\u2193 تنازليًا',
+            apply: 'تطبيق',
+            clear: 'مسح',
+            conditions: 'تصنيف حسب الحالة',
+            values: 'تصنيف حسب القيمة',
+            // value filter
+            search: 'بحث',
+            selectAll: 'تحديد الكل',
+            null: '(لا شيء)',
+            // condition filter
+            header: 'عرض العناصر حيث توجد القيمة',
+            and: 'و',
+            or: 'أو',
+            stringOperators: [
+                { name: '(لم يتم التعيين)', op: null },
+                { name: 'تساوي', op: 0 },
+                { name: 'لا تساوي', op: 1 },
+                { name: 'يبدأ بـ', op: 6 },
+                { name: 'ينتهي بـ', op: 7 },
+                { name: 'يحتوي على', op: 8 },
+                { name: 'لا يحتوى على', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(لم يتم التعيين)', op: null },
+                { name: 'تساوي', op: 0 },
+                { name: 'لا تساوي', op: 1 },
+                { name: 'أكبر من', op: 2 },
+                { name: 'أكبر من أو يساوي', op: 3 },
+                { name: 'أقل من', op: 4 },
+                { name: 'أقل من أو يساوي', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(لم يتم التعيين)', op: null },
+                { name: 'تساوي', op: 0 },
+                { name: 'قبل', op: 4 },
+                { name: 'بعد', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(لم يتم التعيين)', op: null },
+                { name: 'تساوي', op: 0 },
+                { name: 'لا تساوي', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'إعدادات الحقل:',
+                header: 'الرأس:',
+                summary: 'موجز:',
+                showAs: 'إظهار ك:',
+                weighBy: 'تزن بها:',
+                sort: 'الفرز:',
+                filter: 'عامل التصفية:',
+                format: 'التنسيق:',
+                sample: 'العينة:',
+                edit: 'تحرير…',
+                clear: 'واضحة',
+                ok: 'موافق',
+                cancel: 'إلغاء الأمر',
+                none: '(بلا)',
+                sorts: {
+                    asc: 'تصاعديًا',
+                    desc: 'تنازليًا'
+                },
+                aggs: {
+                    sum: 'مجموع',
+                    cnt: 'العد',
+                    avg: 'في المتوسط',
+                    max: 'ماكس',
+                    min: 'دقيقة',
+                    rng: 'النطاق',
+                    std: 'الانحراف المعياري',
+                    var: 'فأر',
+                    stdp: 'ستديفبوب',
+                    varp: 'فاربوب'
+                },
+                calcs: {
+                    noCalc: 'لا يوجد حساب',
+                    dRow: 'الفرق من الصف السابق',
+                    dRowPct: '% الفرق من الصف السابق',
+                    dCol: 'الفرق من العمود السابق',
+                    dColPct: '% الفرق من العمود السابق',
+                    dPctGrand: '% من المجموع الكلي',
+                    dPctRow: '% من مجموع الصف',
+                    dPctCol: '% من إجمالي العمود',
+                    dRunTot: 'إجمالي قيد التشغيل',
+                    dRunTotPct: '% إجمالي قيد التشغيل'
+                },
+                formats: {
+                    n0: 'عدد صحيح (n0)',
+                    n2: 'عدد عشري (n2)',
+                    c: '(c) تحويل العملات',
+                    p0: 'النسبة المئوية (p0)',
+                    p2: 'النسبة المئوية (p2)',
+                    n2c: 'آلاف (,n2(',
+                    n2cc: 'الملايين (,,n2)',
+                    n2ccc: 'البلايين (2,,,n)',
+                    d: '(d) تاريخ',
+                    MMMMddyyyy: 'يوم شهر "سنة" (MMMM dd, yyyy)',
+                    dMyy: 'يوم شهر سنة (d/M/yy)',
+                    ddMyy: 'يوم شهر سنة (dd/M/yy)',
+                    dMyyyy: 'يوم شهر سنة (dd/M/yyyy)',
+                    MMMyyyy: 'الشهر السنة (MMM yyyy)',
+                    MMMMyyyy: 'الشهر السنة (MMMM yyyy)',
+                    yyyyQq: 'ربع السنة (q"Q"yyyy)',
+                    FYEEEEQU: 'ربع السنة المالية (EEEE "Q"U"FY")'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'المجموع الكلي',
+                subTotal: 'المجموع الفرعي'
+            },
+            PivotPanel: {
+                fields: 'اختر الحقول المراد إضافتها إلى التقرير:',
+                drag: 'اسحب الحقول بين المجالات الواردة أدناه:',
+                filters: 'عوامل التصفية',
+                cols: 'الأعمدة',
+                rows: 'الصفوف',
+                vals: 'القيم',
+                defer: 'تأجيل التحديثات',
+                update: 'التحديث'
+            },
+            _ListContextMenu: {
+                up: 'تحريك لأعلى',
+                down: 'تحريك لأسفل',
+                first: 'الانتقال إلى بداية',
+                last: 'الانتقال إلى نهاية',
+                filter: 'الانتقال إلى تقرير التصفية',
+                rows: 'الانتقال إلى تسميات الصفوف',
+                cols: 'الانتقال إلى تسميات الأعمدة',
+                vals: 'الانتقال إلى القيم',
+                remove: 'إزالة حقل',
+                edit: 'إعدادات الحقل…',
+                detail: 'إظهار التفاصيل…'
+            },
+            PivotChart: {
+                by: 'قبل',
+                and: 'و'
+            },
+            DetailDialog: {
+                header: 'عرض التفاصيل:',
+                ok: 'موافق',
+                items: 'العناصر {cnt:n0}',
+                item: 'البند {cnt}',
+                row: 'الصف',
+                col: 'العمود'
+            }
+        },
+        Viewer: {
+            cancel: 'إلغاء الأمر',
+            ok: 'موافق',
+            bottom: 'أسفل:',
+            top: 'أعلى:',
+            right: 'الحق:',
+            left: 'اليسار:',
+            margins: 'هوامش (بوصة)',
+            orientation: 'الاتجاه:',
+            paperKind: 'نوع الورق:',
+            pageSetup: 'إعداد الصفحة',
+            landscape: 'المناظر الطبيعية',
+            portrait: 'صورة',
+            pageNumber: 'رقم الصفحة',
+            zoomFactor: 'عامل التكبير/التصغير',
+            paginated: 'تخطيط الطباعة',
+            print: 'طباعة',
+            search: 'بحث',
+            matchCase: 'مطابقة حالة الأحرف',
+            wholeWord: 'مطابقة الكلمة بأكملها فقط',
+            searchResults: 'نتائج البحث',
+            previousPage: 'الصفحة السابقة',
+            nextPage: 'الصفحة التالية',
+            firstPage: 'الصفحة الأولى',
+            lastPage: 'الصفحة الأخيرة',
+            backwardHistory: 'إلى الخلف',
+            forwardHistory: 'إلى الأمام',
+            pageCount: 'عدد الصفحات',
+            selectTool: 'حدد أداة',
+            moveTool: 'أداة التحريك',
+            continuousMode: 'استمرار عرض الصفحة',
+            singleMode: 'عرض صفحة واحدة',
+            wholePage: 'احتواء صفحة كاملة',
+            pageWidth: 'تلائم عرض الصفحة',
+            zoomOut: 'التصغير',
+            zoomIn: 'تكبير',
+            exports: 'تصدير',
+            fullScreen: 'كامل الشاشة',
+            exitFullScreen: 'إنهاء وضع ملء الشاشة',
+            thumbnails: 'مصغرات الصفحة',
+            outlines: 'خريطة المستند',
+            loading: 'تحميل…',
+            pdfExportName: 'أدوبي قوات الدفاع الشعبي',
+            docxExportName: 'Word XML المفتوحة',
+            xlsxExportName: 'تنسيق xml المفتوح Excel',
+            docExportName: 'مايكروسوفت وورد',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'أرشيف ويب (MHTML)',
+            htmlExportName: 'مستند HTML',
+            rtfExportName: 'المستند RTF',
+            metafileExportName: 'ضغط ملفات التعريف',
+            csvExportName: 'CSV',
+            tiffExportName: 'صور tiff',
+            bmpExportName: 'صور BMP',
+            emfExportName: 'ملف تعريف محسن',
+            gifExportName: 'صور GIF',
+            jpgExportName: 'صور JPEG',
+            jpegExportName: 'صور JPEG',
+            pngExportName: 'صور PNG',
+            parameters: 'معلمات',
+            requiringParameters: 'الرجاء إدخال المعلمات.',
+            nullParameterError: 'لا يمكن أن تكون القيمة فارغة.',
+            invalidParameterError: 'صالح الإدخال.',
+            parameterNoneItemsSelected: '(بلا)',
+            parameterAllItemsSelected: '(الكل)',
+            parameterSelectAllItemText: '(تحديد الكل)',
+            selectParameterValue: '(حدد قيمة)',
+            apply: 'تطبيق',
+            errorOccured: 'لقد حدث خطأ.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.ar-AE.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.ar-AE.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.bg.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: bg (Bulgarian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'bg',
+            displayName: 'Bulgarian',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: 'лв.', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота'],
+                daysAbbr: ['нед', 'пон', 'вт', 'ср', 'четв', 'пет', 'съб'],
+                months: ['януари', 'февруари', 'март', 'април', 'май', 'юни', 'юли', 'август', 'септември', 'октомври', 'ноември', 'декември'],
+                monthsAbbr: ['яну', 'фев', 'мар', 'апр', 'май', 'юни', 'юли', 'авг', 'сеп', 'окт', 'ное', 'дек'],
+                am: ['', ''],
+                pm: ['', ''],
+                eras: ['след новата ера'],
+                patterns: {
+                    d: 'd.M.yyyy "г."', D: 'dd MMMM yyyy "г."',
+                    f: 'dd MMMM yyyy "г." H:mm', F: 'dd MMMM yyyy "г." H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy "г."', Y: 'MMMM yyyy "г."',
+                    g: 'd.M.yyyy "г." H:mm', G: 'd.M.yyyy "г." H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} позиции избрани'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} елементи)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Възходящо',
+            descending: '\u2193 Низходящо',
+            apply: 'Приложи',
+            clear: 'Изчисти',
+            conditions: 'Филтриране по състояние',
+            values: 'Филтриране по стойност',
+            // value filter
+            search: 'Търсене',
+            selectAll: 'Избери всички',
+            null: '(нищо)',
+            // condition filter
+            header: 'Показване на елементи със стойност',
+            and: 'и',
+            or: 'Или',
+            stringOperators: [
+                { name: '(не е зададено)', op: null },
+                { name: 'Е равно на', op: 0 },
+                { name: 'Не е равно на', op: 1 },
+                { name: 'Започва с', op: 6 },
+                { name: 'Завършва с', op: 7 },
+                { name: 'Съдържа', op: 8 },
+                { name: 'Не съдържа', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(не е зададено)', op: null },
+                { name: 'Е равно на', op: 0 },
+                { name: 'Не е равно на', op: 1 },
+                { name: 'Е по-голямо от', op: 2 },
+                { name: 'Е по-голямо или равно на', op: 3 },
+                { name: 'Е по-малко от', op: 4 },
+                { name: 'Е по-малко или равно на', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(не е зададено)', op: null },
+                { name: 'Е равно на', op: 0 },
+                { name: 'е преди', op: 4 },
+                { name: 'е след', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(не е зададено)', op: null },
+                { name: 'Е равно на', op: 0 },
+                { name: 'Не е равно на', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Настройки на поле:',
+                header: 'Горен титул:',
+                summary: 'Резюме:',
+                showAs: 'Покажи като:',
+                weighBy: 'Претегля се от:',
+                sort: 'Сортиране:',
+                filter: 'Филтър:',
+                format: 'Формат:',
+                sample: 'Проба:',
+                edit: 'Редактиране…',
+                clear: 'Изчисти',
+                ok: 'OK',
+                cancel: 'Отказ',
+                none: '(няма)',
+                sorts: {
+                    asc: 'Възходящо',
+                    desc: 'Низходящо'
+                },
+                aggs: {
+                    sum: 'Сума',
+                    cnt: 'Брой',
+                    avg: 'Средно',
+                    max: 'Макс.',
+                    min: 'Мин.',
+                    rng: 'Диапазон',
+                    std: 'Отклонение',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Без пресмятане',
+                    dRow: 'Разликата от предишния ред',
+                    dRowPct: '% Разлика от предишния ред',
+                    dCol: 'Разлика от предишната колона',
+                    dColPct: '% Разлика от предишната колона',
+                    dPctGrand: '% от общата сума',
+                    dPctRow: '% от общия ред',
+                    dPctCol: '% от колона общо',
+                    dRunTot: 'Текущи общо',
+                    dRunTotPct: '% тичане общо'
+                },
+                formats: {
+                    n0: 'Цяло число (n0)',
+                    n2: 'Поплавък (n2)',
+                    c: 'Валута (c)',
+                    p0: 'Процент (Р0)',
+                    p2: 'Процент (Р2)',
+                    n2c: 'Хиляди (n2,)',
+                    n2cc: 'Милиони (n2,,)',
+                    n2ccc: 'Милиарди (n2,,,)',
+                    d: 'Дата (d)',
+                    MMMMddyyyy: 'Месец година дни (ММММ dd, yyyy)',
+                    dMyy: 'Ден месец година (d/M/yy)',
+                    ddMyy: 'Ден месец година (dd/М/yy)',
+                    dMyyyy: 'Ден месец година (dd/М/yyyy)',
+                    MMMyyyy: 'Месец година (МММ yyy)',
+                    MMMMyyyy: 'Месец година (ММММ yyyy)',
+                    yyyyQq: 'Тримесечие на година (yyyy "Q"q)',
+                    FYEEEEQU: 'Тримесечие на финансова година ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Обща сума',
+                subTotal: 'Междинна сума'
+            },
+            PivotPanel: {
+                fields: 'Изберете полета за добавяне към отчета:',
+                drag: 'Плъзнете полетата между площите по-долу:',
+                filters: 'Филтри',
+                cols: 'Колони',
+                rows: 'Редове',
+                vals: 'Стойности',
+                defer: 'Отложи актуализации',
+                update: 'Актуализация'
+            },
+            _ListContextMenu: {
+                up: 'Премести нагоре',
+                down: 'Премести надолу',
+                first: 'Премести в началото',
+                last: 'Преминаване в края',
+                filter: 'Премести в съобщението за филтър',
+                rows: 'Премести в етикетите на редовете',
+                cols: 'Премести в етикетите на колоните',
+                vals: 'Премести в стойностите',
+                remove: 'Премахни полето',
+                edit: 'Настройки за поле…',
+                detail: 'Покажи подробности…'
+            },
+            PivotChart: {
+                by: 'от',
+                and: 'and'
+            },
+            DetailDialog: {
+                header: 'Изглед на детайл:',
+                ok: 'OK',
+                items: '{cnt:n0} елементи',
+                item: '{cnt} елемент',
+                row: 'Ред',
+                col: 'Колона'
+            }
+        },
+        Viewer: {
+            cancel: 'Отказ',
+            ok: 'OK',
+            bottom: 'Отдолу:',
+            top: 'Връх:',
+            right: 'Дясно:',
+            left: 'Ляво:',
+            margins: 'Полета (инчове)',
+            orientation: 'Посока:',
+            paperKind: 'Вид хартия:',
+            pageSetup: 'Настройка на страница',
+            landscape: 'Пейзажно',
+            portrait: 'Портретно',
+            pageNumber: 'Номер на страница',
+            zoomFactor: 'Коефициент на мащабиране',
+            paginated: 'Оформление за печат',
+            print: 'Печат',
+            search: 'Търсене',
+            matchCase: 'Със същия регистър',
+            wholeWord: 'Съвпадение цяла дума',
+            searchResults: 'Резултати от търсенето',
+            previousPage: 'Предишна страница',
+            nextPage: 'Следваща страница',
+            firstPage: 'Първа страница',
+            lastPage: 'Последна страница',
+            backwardHistory: 'обратно',
+            forwardHistory: 'Напред',
+            pageCount: 'Брой страници',
+            selectTool: 'Изберете инструмент',
+            moveTool: 'Move Tool',
+            continuousMode: 'Непрекъснат изглед на страница',
+            singleMode: 'Единствен изглед на страница',
+            wholePage: 'Годни цялата страница',
+            pageWidth: 'Ширината на страницата',
+            zoomOut: 'Намали',
+            zoomIn: 'Увеличи',
+            exports: 'Експортиране',
+            fullScreen: 'Цял екран',
+            exitFullScreen: 'Изход от цял екран',
+            thumbnails: 'Страница миниатюри',
+            outlines: 'Карта на документа',
+            loading: 'Зареждане…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Отваряне на XML дума',
+            xlsxExportName: 'Отваряне на XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Уеб Архив (MHTML)',
+            htmlExportName: 'HTML документ',
+            rtfExportName: 'RTF документ',
+            metafileExportName: 'Компресиран метафайлове',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF изображения',
+            bmpExportName: 'BMP изображения',
+            emfExportName: 'Разширен метафайл',
+            gifExportName: 'GIF изображения',
+            jpgExportName: 'JPEG изображения',
+            jpegExportName: 'JPEG изображения',
+            pngExportName: 'PNG изображения',
+            parameters: 'Параметри',
+            requiringParameters: 'Моля, въведете параметри.',
+            nullParameterError: 'Стойността не може да бъде нула.',
+            invalidParameterError: 'Невалиден вход.',
+            parameterNoneItemsSelected: '(няма)',
+            parameterAllItemsSelected: '(всички)',
+            parameterSelectAllItemText: '(Избери всички)',
+            selectParameterValue: '(изберете стойност)',
+            apply: 'Приложи',
+            errorOccured: 'Възникна грешка.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.bg.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.bg.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.ca.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: ca (Catalan)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'ca',
+            displayName: 'Catalan',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 1,
+                days: ['diumenge', 'dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte'],
+                daysAbbr: ['dg.', 'dl.', 'dt.', 'dc.', 'dj.', 'dv.', 'ds.'],
+                months: ['gener', 'febrer', 'març', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre'],
+                monthsAbbr: ['gen.', 'febr.', 'març', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'],
+                am: ['a. m.', 'a'],
+                pm: ['p. m.', 'p'],
+                eras: ['dC'],
+                patterns: {
+                    d: 'd/M/yyyy', D: 'dddd, d MMMM" de "yyyy',
+                    f: 'dddd, d MMMM" de "yyyy H:mm', F: 'dddd, d MMMM" de "yyyy H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM" de "yyyy', Y: 'MMMM" de "yyyy',
+                    g: 'dd/MM/yyyy H:mm', G: 'dd/MM/yyyy H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} articles seleccionats'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} elements)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Ascendent',
+            descending: '\u2193 Descendent',
+            apply: 'Aplica',
+            clear: 'Esborra',
+            conditions: 'Filtra per condició',
+            values: 'Filtra per valor',
+            // value filter
+            search: 'Cerca',
+            selectAll: 'Selecciona-ho tot',
+            null: '(res)',
+            // condition filter
+            header: 'Mostra elements amb el valor',
+            and: 'I',
+            or: 'O',
+            stringOperators: [
+                { name: '(sense definir)', op: null },
+                { name: 'És igual a', op: 0 },
+                { name: 'No és igual a', op: 1 },
+                { name: 'Comença amb', op: 6 },
+                { name: 'Acaba amb', op: 7 },
+                { name: 'Conté', op: 8 },
+                { name: 'No conté', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(sense definir)', op: null },
+                { name: 'És igual a', op: 0 },
+                { name: 'No és igual a', op: 1 },
+                { name: 'És més gran que', op: 2 },
+                { name: 'És més gran o igual que', op: 3 },
+                { name: 'És més petit que', op: 4 },
+                { name: 'És més petit o igual que', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(sense definir)', op: null },
+                { name: 'És igual a', op: 0 },
+                { name: 'És anterior a', op: 4 },
+                { name: 'És posterior a', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(sense definir)', op: null },
+                { name: 'És igual a', op: 0 },
+                { name: 'No és igual a', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Configuració del camp:',
+                header: 'Capçal.:',
+                summary: 'Resum:',
+                showAs: 'Mostra com:',
+                weighBy: 'Per un pes:',
+                sort: 'Tipus:',
+                filter: 'Filtre:',
+                format: 'Format de:',
+                sample: 'Exemple:',
+                edit: 'Edita…',
+                clear: 'Esborra',
+                ok: 'OK',
+                cancel: 'Cancel·la',
+                none: '(cap)',
+                sorts: {
+                    asc: 'Ascendent',
+                    desc: 'Descendent'
+                },
+                aggs: {
+                    sum: 'Suma',
+                    cnt: 'Recompte',
+                    avg: 'Mitjana',
+                    max: 'Màxim',
+                    min: 'min.',
+                    rng: 'Range',
+                    std: 'DesvEst',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Cap càlcul',
+                    dRow: 'Diferència de la fila anterior',
+                    dRowPct: '% Diferència des de la fila anterior',
+                    dCol: 'Diferència de la columna anterior',
+                    dColPct: '% Diferència de la columna anterior',
+                    dPctGrand: '% del total de gran',
+                    dPctRow: '% del total de fila',
+                    dPctCol: '% del total de columna',
+                    dRunTot: 'Corrent total',
+                    dRunTotPct: 'corrent total %'
+                },
+                formats: {
+                    n0: 'Enter (n0)',
+                    n2: 'Decimal (n2)',
+                    c: 'Moneda (c)',
+                    p0: 'Percentatge (p0)',
+                    p2: 'Percentatge (p2)',
+                    n2c: 'Milers (n2)',
+                    n2cc: 'Milions (n2,,)',
+                    n2ccc: 'Milers de milions (n2,,,)',
+                    d: 'Data (d)',
+                    MMMMddyyyy: 'Dia mes any (MMMM dd, yyyy)',
+                    dMyy: 'Dia mes any (d/M/yy)',
+                    ddMyy: 'Dia mes any (dd/M/yy)',
+                    dMyyyy: 'Dia mes any (dd/M/yyyy)',
+                    MMMyyyy: 'Mes any (MMM de yyyy)',
+                    MMMMyyyy: 'Mes any (MMMM yyyy)',
+                    yyyyQq: 'Quart any (yyyy "Q"q)',
+                    FYEEEEQU: 'Quart exercici fiscal ("FY"EEEE "Q"U )'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Total general',
+                subTotal: 'Subtotal'
+            },
+            PivotPanel: {
+                fields: 'Trieu els camps que afegiu a informe:',
+                drag: 'Arrossega els camps entre les àrees de sota:',
+                filters: 'Filtres',
+                cols: 'Columnas',
+                rows: 'Files',
+                vals: 'Valors',
+                defer: 'Ajornar les actualitzacions',
+                update: 'Actualitza'
+            },
+            _ListContextMenu: {
+                up: 'Amunt',
+                down: 'Avall',
+                first: 'Al començament',
+                last: 'Passar a la final',
+                filter: 'Desplaça-ho al filtre de l\'informe',
+                rows: 'Desplaça-ho a les etiquetes de fila',
+                cols: 'Desplaça-ho a les etiquetes de columna',
+                vals: 'Desplaça-ho als valors',
+                remove: 'Suprimeix el camp',
+                edit: 'Configuració del camp…',
+                detail: 'Mostra els detalls…'
+            },
+            PivotChart: {
+                by: 'per',
+                and: 'i el'
+            },
+            DetailDialog: {
+                header: 'Vista de detall:',
+                ok: 'OK',
+                items: 'elements {cnt:n0}',
+                item: 'element {cnt}',
+                row: 'Fila',
+                col: 'Columna'
+            }
+        },
+        Viewer: {
+            cancel: 'Cancel·la',
+            ok: 'OK',
+            bottom: 'Part inferior:',
+            top: 'Part superior:',
+            right: 'Dret:',
+            left: 'Esquerre:',
+            margins: 'Marges (polzades)',
+            orientation: 'Orientació:',
+            paperKind: 'Tipus de document:',
+            pageSetup: 'Format de pàgina',
+            landscape: 'Horitzontal',
+            portrait: 'Vertical',
+            pageNumber: 'Número de pàgina',
+            zoomFactor: 'Factor d\'augment',
+            paginated: 'Disposició de la impressió',
+            print: 'Imprimeix',
+            search: 'Cerca',
+            matchCase: 'Distingeix entre majúscules i minúscules',
+            wholeWord: 'Només paraules senceres',
+            searchResults: 'Resultats de la cerca',
+            previousPage: 'Pàgina anterior',
+            nextPage: 'Pàgina següent',
+            firstPage: 'Primera pàgina',
+            lastPage: 'Última pàgina',
+            backwardHistory: 'Enrere',
+            forwardHistory: 'Endavant',
+            pageCount: 'Recompte de pàgines',
+            selectTool: 'Seleccioneu l\'eina',
+            moveTool: 'Eina de moviment',
+            continuousMode: 'Veure pàgina contínua',
+            singleMode: 'Vista de pàgina senzilla',
+            wholePage: 'Forma de pàgina sencera',
+            pageWidth: 'Ajustar l\'amplada de la pàgina',
+            zoomOut: 'Redueix',
+            zoomIn: 'Amplia',
+            exports: 'Exporta',
+            fullScreen: 'Pantalla sencera',
+            exitFullScreen: 'Surt de la pantalla sencera',
+            thumbnails: 'Miniatures de pàgina',
+            outlines: 'Mapa de documents',
+            loading: 'Carregant…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Paraula XML obert',
+            xlsxExportName: 'XML obert excel·lir',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'L\'arxiu web (MHTML)',
+            htmlExportName: 'HTML document',
+            rtfExportName: 'RTF document',
+            metafileExportName: 'Metafiles comprimit',
+            csvExportName: 'CSV',
+            tiffExportName: 'Imatges TIFF',
+            bmpExportName: 'Imatges BMP',
+            emfExportName: 'Metafitxer millorat',
+            gifExportName: 'Imatges GIF',
+            jpgExportName: 'Imatges de JPEG',
+            jpegExportName: 'Imatges de JPEG',
+            pngExportName: 'Imatges de PNG',
+            parameters: 'Paràmetres',
+            requiringParameters: 'Si us plau, d\'entrada paràmetres.',
+            nullParameterError: 'El valor no pot ser nul.',
+            invalidParameterError: 'Entrada no vàlida.',
+            parameterNoneItemsSelected: '(cap)',
+            parameterAllItemsSelected: '(tots)',
+            parameterSelectAllItemText: '(Seleccioneu-ho tot)',
+            selectParameterValue: '(Seleccioneu el valor)',
+            apply: 'Aplica',
+            errorOccured: 'S\'ha produït un error.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.ca.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.ca.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.cs.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: cs (Czech)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'cs',
+            displayName: 'Czech',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: 'Kč', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],
+                daysAbbr: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
+                months: ['leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec'],
+                monthsAbbr: ['led', 'úno', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro'],
+                am: ['dop.', 'd'],
+                pm: ['odp.', 'o'],
+                eras: ['n. l.'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'dddd d. MMMM yyyy',
+                    f: 'dddd d. MMMM yyyy H:mm', F: 'dddd d. MMMM yyyy H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd.MM.yyyy H:mm', G: 'dd.MM.yyyy H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} položek vybraného'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} položky)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Vzestupně',
+            descending: '\u2193 Sestupně',
+            apply: 'Použít',
+            clear: 'Vymazat',
+            conditions: 'Filtrovat podle podmínky',
+            values: 'Filtrovat podle hodnoty',
+            // value filter
+            search: 'Hledat',
+            selectAll: 'Vybrat vše',
+            null: '(nic)',
+            // condition filter
+            header: 'Zobrazit položky s hodnotou',
+            and: 'A',
+            or: 'NEBO',
+            stringOperators: [
+                { name: '(nenastaveno)', op: null },
+                { name: 'Rovná se', op: 0 },
+                { name: 'Nerovná se', op: 1 },
+                { name: 'Začíná na', op: 6 },
+                { name: 'Končí na', op: 7 },
+                { name: 'Obsahuje', op: 8 },
+                { name: 'Neobsahuje', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nenastaveno)', op: null },
+                { name: 'Rovná se', op: 0 },
+                { name: 'Nerovná se', op: 1 },
+                { name: 'Je větší než', op: 2 },
+                { name: 'Je větší než nebo se rovná', op: 3 },
+                { name: 'Je menší než', op: 4 },
+                { name: 'Je menší než nebo se rovná', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nenastaveno)', op: null },
+                { name: 'Rovná se', op: 0 },
+                { name: 'Je před', op: 4 },
+                { name: 'Je po', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nenastaveno)', op: null },
+                { name: 'Rovná se', op: 0 },
+                { name: 'Nerovná se', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Nastavení pole:',
+                header: 'Záhlaví:',
+                summary: 'Shrnutí:',
+                showAs: 'Zobrazit jako:',
+                weighBy: 'Hmotnost od:',
+                sort: 'Řazení:',
+                filter: 'Filtr:',
+                format: 'Formát:',
+                sample: 'Příklad:',
+                edit: 'Upravit…',
+                clear: 'Vymazat',
+                ok: 'OK',
+                cancel: 'Storno',
+                none: '(nikdy)',
+                sorts: {
+                    asc: 'Vzestupně',
+                    desc: 'Sestupně'
+                },
+                aggs: {
+                    sum: 'Součet',
+                    cnt: 'Počet',
+                    avg: 'Průměr',
+                    max: 'Maximum',
+                    min: 'Minimum',
+                    rng: 'Oblast',
+                    std: 'Směrodatná odchylka',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Bez výpočtu',
+                    dRow: 'Rozdíl od předchozího řádku',
+                    dRowPct: '% Rozdíl z předchozího řádku',
+                    dCol: 'Rozdíl od předchozího sloupce',
+                    dColPct: '% Rozdíl z předchozího sloupce',
+                    dPctGrand: '% z celkového součtu',
+                    dPctRow: '% řádku celkem',
+                    dPctCol: '% sloupce celkem',
+                    dRunTot: 'Průběžný součet',
+                    dRunTotPct: '% celkové'
+                },
+                formats: {
+                    n0: 'Celé číslo (n0)',
+                    n2: 'Desetinný (n2)',
+                    c: 'Měna (c)',
+                    p0: 'Procento (p0)',
+                    p2: 'Procento (p2)',
+                    n2c: 'Tisíc (n2,)',
+                    n2cc: 'Miliony (n2,,)',
+                    n2ccc: 'Miliardy (n2,,,)',
+                    d: 'Datum (d)',
+                    MMMMddyyyy: 'Měsíc den rok (MMMM dd, yyyy)',
+                    dMyy: 'Den měsíc rok (d/M/RR)',
+                    ddMyy: 'Den měsíc rok (M/dd/rr)',
+                    dMyyyy: 'Den měsíc rok (dd/M/rrrr)',
+                    MMMyyyy: 'Měsíc rok (MMM yyyy)',
+                    MMMMyyyy: 'Měsíc rok (MMMM yyyy)',
+                    yyyyQq: 'Čtvrtletí rok (yyyy "Q"q)',
+                    FYEEEEQU: 'Čtvrtletí fiskálního roku ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Celkový součet',
+                subTotal: 'Mezisoučet'
+            },
+            PivotPanel: {
+                fields: 'Zvolte pole, které chcete přidat do sestavy:',
+                drag: 'Přetáhněte pole do jedné z následujících oblastí:',
+                filters: 'Filtry',
+                cols: 'Sloupce',
+                rows: 'Řádky',
+                vals: 'Hodnoty',
+                defer: 'Odložení aktualizací',
+                update: 'Aktualizovat'
+            },
+            _ListContextMenu: {
+                up: 'Přesunout nahoru',
+                down: 'Dolů',
+                first: 'Přesunout na začátek',
+                last: 'Přesunout na konec',
+                filter: 'Přejít k filtru sestavy',
+                rows: 'Přesunout k popiskům řádků',
+                cols: 'Přesunout k popiskům sloupců',
+                vals: 'Přejít k hodnotám',
+                remove: 'Odebrat pole',
+                edit: 'Nastavení pole…',
+                detail: 'Zobrazit Detail…'
+            },
+            PivotChart: {
+                by: 'podle',
+                and: 'and'
+            },
+            DetailDialog: {
+                header: 'Detailní pohled:',
+                ok: 'OK',
+                items: '{cnt:n0} položek',
+                item: 'položka {cnt}',
+                row: 'Řádek',
+                col: 'Sloupec'
+            }
+        },
+        Viewer: {
+            cancel: 'Storno',
+            ok: 'OK',
+            bottom: 'Dolní:',
+            top: 'Nahoře:',
+            right: 'Vpravo:',
+            left: 'Vlevo:',
+            margins: 'Okraje (palce)',
+            orientation: 'Orientace:',
+            paperKind: 'Druh papíru:',
+            pageSetup: 'Nastavení stránky',
+            landscape: 'Na šířku',
+            portrait: 'Na výšku',
+            pageNumber: 'Číslo stránky',
+            zoomFactor: 'Faktor zvětšení',
+            paginated: 'Rozložení při tisku',
+            print: 'Tisk',
+            search: 'Hledat',
+            matchCase: 'Rozlišovat malá a velká písmena',
+            wholeWord: 'Pouze celá slova',
+            searchResults: 'Výsledky hledání',
+            previousPage: 'Předchozí stránka',
+            nextPage: 'Další stránka',
+            firstPage: 'První stránka',
+            lastPage: 'Poslední stránka',
+            backwardHistory: 'Zpět',
+            forwardHistory: 'Vpřed',
+            pageCount: 'Počet stránek',
+            selectTool: 'Vyberte nástroj',
+            moveTool: 'Nástroj pro přesun',
+            continuousMode: 'Souvislé zobrazení celé stránky',
+            singleMode: 'Zobrazení Jedna stránka',
+            wholePage: 'Přizpůsobit celé stránky',
+            pageWidth: 'Přizpůsobit šířce stránky',
+            zoomOut: 'Oddálit',
+            zoomIn: 'Přiblížit',
+            exports: 'Exportovat',
+            fullScreen: 'Celá obrazovka',
+            exitFullScreen: 'Ukončit režim celé obrazovky',
+            thumbnails: 'Miniatury stránek',
+            outlines: 'Rozložení dokumentu',
+            loading: 'Načítání…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Webový archiv (MHTML)',
+            htmlExportName: 'Dokument HTML',
+            rtfExportName: 'Dokument RTF',
+            metafileExportName: 'Komprimované soubory',
+            csvExportName: 'CSV',
+            tiffExportName: 'Obrázky TIFF',
+            bmpExportName: 'Obrázky BMP',
+            emfExportName: 'Rozšířený metasoubor',
+            gifExportName: 'GIF obrázky',
+            jpgExportName: 'Obrázky ve formátu JPEG',
+            jpegExportName: 'Obrázky ve formátu JPEG',
+            pngExportName: 'PNG obrázky',
+            parameters: 'Parameters',
+            requiringParameters: 'Prosím vstupní parametry.',
+            nullParameterError: 'Hodnota nemůže být null.',
+            invalidParameterError: 'Neplatný vstup.',
+            parameterNoneItemsSelected: '(nikdy)',
+            parameterAllItemsSelected: '(vše)',
+            parameterSelectAllItemText: '(Vybrat vše)',
+            selectParameterValue: '(vyberte hodnotu)',
+            apply: 'Použít',
+            errorOccured: 'Došlo k chybě.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.cs.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.cs.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.da.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: da (Danish)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'da',
+            displayName: 'Danish',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: 'kr.', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 1,
+                days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
+                daysAbbr: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
+                months: ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'],
+                monthsAbbr: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+                am: ['', ''],
+                pm: ['', ''],
+                eras: ['A.D.'],
+                patterns: {
+                    d: 'dd-MM-yyyy', D: 'd. MMMM yyyy',
+                    f: 'd. MMMM yyyy HH:mm', F: 'd. MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd-MM-yyyy HH:mm', G: 'dd-MM-yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} varer valgt'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} emner)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Stigende',
+            descending: '\u2193 Faldende',
+            apply: 'Anvend',
+            clear: 'Ryd',
+            conditions: 'Filtrer efter betingelse',
+            values: 'Filtrer efter værdi',
+            // value filter
+            search: 'Søg',
+            selectAll: 'Markér alt',
+            null: '(intet)',
+            // condition filter
+            header: 'Vis emner med værdien',
+            and: 'Og',
+            or: 'Eller',
+            stringOperators: [
+                { name: '(ikke indstillet)', op: null },
+                { name: 'Lig med', op: 0 },
+                { name: 'Ikke lig med', op: 1 },
+                { name: 'Begynder med', op: 6 },
+                { name: 'Slutter med', op: 7 },
+                { name: 'Indeholder', op: 8 },
+                { name: 'Indeholder ikke', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(ikke indstillet)', op: null },
+                { name: 'Lig med', op: 0 },
+                { name: 'Ikke lig med', op: 1 },
+                { name: 'Større end', op: 2 },
+                { name: 'Større end eller lig med', op: 3 },
+                { name: 'Mindre end', op: 4 },
+                { name: 'Mindre end eller lig med', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(ikke indstillet)', op: null },
+                { name: 'Lig med', op: 0 },
+                { name: 'Før', op: 4 },
+                { name: 'Efter', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(ikke indstillet)', op: null },
+                { name: 'Lig med', op: 0 },
+                { name: 'Ikke lig med', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Indstillinger for feltet:',
+                header: 'Overskrift:',
+                summary: 'Resumé:',
+                showAs: 'Vis som:',
+                weighBy: 'Vejes af:',
+                sort: 'Sorter:',
+                filter: 'Filter:',
+                format: 'Format:',
+                sample: 'Prøve:',
+                edit: 'Rediger…',
+                clear: 'Ryd',
+                ok: 'OK',
+                cancel: 'Annuller',
+                none: '(ingen)',
+                sorts: {
+                    asc: 'Stigende',
+                    desc: 'Faldende'
+                },
+                aggs: {
+                    sum: 'Sum',
+                    cnt: 'Antal',
+                    avg: 'Gennemsnit',
+                    max: 'Maks.',
+                    min: 'Min',
+                    rng: 'Område',
+                    std: 'Stdafv',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Ingen beregning',
+                    dRow: 'Forskellen fra forrige række',
+                    dRowPct: '% Forskel fra forrige række',
+                    dCol: 'Forskellen fra forrige kolonne',
+                    dColPct: '% Forskel fra forrige kolonne',
+                    dPctGrand: '% af hovedtotal',
+                    dPctRow: '% af rækken total',
+                    dPctCol: '% af kolonnen total',
+                    dRunTot: 'Løbende total',
+                    dRunTotPct: '% løbende samlede'
+                },
+                formats: {
+                    n0: 'Heltal (n0)',
+                    n2: 'Decimal (n2)',
+                    c: 'Valuta (c)',
+                    p0: 'Procentdel (p0)',
+                    p2: 'Procentdel (p2)',
+                    n2c: 'Tusinder (n2,)',
+                    n2cc: 'Millioner (n2,,)',
+                    n2ccc: 'Milliarder (n2,,,)',
+                    d: 'Dato (d)',
+                    MMMMddyyyy: 'Måned dag år (MMMM dd, yyyy)',
+                    dMyy: 'Dag måned år (d/M/yy)',
+                    ddMyy: 'Dag måned år (dd/M/yy)',
+                    dMyyyy: 'Dag måned år (dd/M/yyyy)',
+                    MMMyyyy: 'Måned år (MMM yyyy)',
+                    MMMMyyyy: 'Måned år (MMMM yyyy)',
+                    yyyyQq: 'År kvartal (yyyy"Q" q)',
+                    FYEEEEQU: 'Regnskabsår kvartal ("FY" EEEE "Q" U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Hovedtotal',
+                subTotal: 'Subtotal'
+            },
+            PivotPanel: {
+                fields: 'Vælg felter for at føje til rapport:',
+                drag: 'Træk felter mellem områder nedenfor:',
+                filters: 'Filtre',
+                cols: 'Kolonner',
+                rows: 'Rækker',
+                vals: 'Værdier',
+                defer: 'Udsætte opdateringer',
+                update: 'Opdater'
+            },
+            _ListContextMenu: {
+                up: 'Flyt op',
+                down: 'Flyt ned',
+                first: 'Flyt til start',
+                last: 'Flytte til slutningen',
+                filter: 'Flyt til rapportfilter',
+                rows: 'Flyt til rækkenavne',
+                cols: 'Flyt til kolonnenavne',
+                vals: 'Flyt til værdier',
+                remove: 'Fjern felt',
+                edit: 'Feltindstillinger…',
+                detail: 'Vis detalje…'
+            },
+            PivotChart: {
+                by: 'efter',
+                and: 'og'
+            },
+            DetailDialog: {
+                header: 'Detaljevisning:',
+                ok: 'OK',
+                items: '{cnt:n0} elementer',
+                item: '{cnt} vare',
+                row: 'Række',
+                col: 'Kolonne'
+            }
+        },
+        Viewer: {
+            cancel: 'Annuller',
+            ok: 'OK',
+            bottom: 'Bund:',
+            top: 'Top:',
+            right: 'Højre:',
+            left: 'Venstre:',
+            margins: 'Margener (tommer)',
+            orientation: 'Orientering:',
+            paperKind: 'Papir form:',
+            pageSetup: 'Sideopsætning',
+            landscape: 'Liggende',
+            portrait: 'Stående',
+            pageNumber: 'Sidetal',
+            zoomFactor: 'Zoomfaktor',
+            paginated: 'Udskriftslayout',
+            print: 'Udskriv',
+            search: 'Søg',
+            matchCase: 'Forskel på store og små bogstaver',
+            wholeWord: 'Søg kun efter hele ord',
+            searchResults: 'Søgeresultater',
+            previousPage: 'Forrige side',
+            nextPage: 'Næste side',
+            firstPage: 'Første side',
+            lastPage: 'Sidste side',
+            backwardHistory: 'Tilbage',
+            forwardHistory: 'Fremad',
+            pageCount: 'Antal sider',
+            selectTool: 'Vælg værktøj',
+            moveTool: 'Flytte-værktøj',
+            continuousMode: 'Kontinuerlig sidevisning',
+            singleMode: 'Enkelt sidevisning',
+            wholePage: 'Fit hele siden',
+            pageWidth: 'Passe til sidebredden',
+            zoomOut: 'Zoom',
+            zoomIn: 'Zoom ind',
+            exports: 'Eksportér',
+            fullScreen: 'Fuld skærm',
+            exitFullScreen: 'Afslut fuld skærm',
+            thumbnails: 'Sideminiaturebilleder',
+            outlines: 'dokumentoversigt',
+            loading: 'Indlæser…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML-Word',
+            xlsxExportName: 'Open XML-Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Webarkiv (MHTML)',
+            htmlExportName: 'HTML-dokument',
+            rtfExportName: 'RTF-dokument',
+            metafileExportName: 'Komprimeret metafiler',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-billeder',
+            bmpExportName: 'BMP-billeder',
+            emfExportName: 'Udvidet metafil',
+            gifExportName: 'GIF-billeder',
+            jpgExportName: 'JPEG-billeder',
+            jpegExportName: 'JPEG-billeder',
+            pngExportName: 'PNG-billeder',
+            parameters: 'parameters',
+            requiringParameters: 'Venligst input parametre.',
+            nullParameterError: 'En værdi må ikke være null.',
+            invalidParameterError: 'Inputtet er ugyldigt.',
+            parameterNoneItemsSelected: '(ingen)',
+            parameterAllItemsSelected: '(alle)',
+            parameterSelectAllItemText: '(Markér alle)',
+            selectParameterValue: '(Vælg værdi)',
+            apply: 'Anvend',
+            errorOccured: 'Der opstod en fejl.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.da.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.da.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.el.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: el (Greek)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'el',
+            displayName: 'Greek',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 1,
+                days: ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο'],
+                daysAbbr: ['Κυρ', 'Δευ', 'Τρι', 'Τετ', 'Πεμ', 'Παρ', 'Σαβ'],
+                months: ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'],
+                monthsAbbr: ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'],
+                am: ['πμ', 'π'],
+                pm: ['μμ', 'μ'],
+                eras: ['μ.Χ.'],
+                patterns: {
+                    d: 'd/M/yyyy', D: 'dddd, d MMMM yyyy',
+                    f: 'dddd, d MMMM yyyy h:mm tt', F: 'dddd, d MMMM yyyy h:mm:ss tt',
+                    t: 'h:mm tt', T: 'h:mm:ss tt',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'd/M/yyyy h:mm tt', G: 'd/M/yyyy h:mm:ss tt',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} αντικείμενα που επιλέγονται'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} στοιχεία)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Με αύξουσα σειρά',
+            descending: '\u2193 Με φθίνουσα σειρά',
+            apply: 'Εφαρμογή',
+            clear: 'Εκκαθάριση',
+            conditions: 'Φιλτράρισμα ανά κατάσταση',
+            values: 'Φιλτράρισμα ανά τιμή',
+            // value filter
+            search: 'Αναζήτηση',
+            selectAll: 'Επιλογή όλων',
+            null: '(τίποτα)',
+            // condition filter
+            header: 'Εμφάνιση στοιχείων όπου η τιμή',
+            and: 'Και',
+            or: 'ή',
+            stringOperators: [
+                { name: '(δεν έχει οριστεί)', op: null },
+                { name: 'Ισούται με', op: 0 },
+                { name: 'Δεν ισούται με', op: 1 },
+                { name: 'Αρχίζει με', op: 6 },
+                { name: 'Τελειώνει με', op: 7 },
+                { name: 'Περιέχει', op: 8 },
+                { name: 'Δεν περιέχει', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(δεν έχει οριστεί)', op: null },
+                { name: 'Ισούται με', op: 0 },
+                { name: 'Δεν ισούται με', op: 1 },
+                { name: 'Είναι μεγαλύτερη από', op: 2 },
+                { name: 'Είναι μεγαλύτερη από ή ίση με', op: 3 },
+                { name: 'Είναι μικρότερη από', op: 4 },
+                { name: 'Είναι μικρότερη από ή ίση με', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(δεν έχει οριστεί)', op: null },
+                { name: 'Ισούται με', op: 0 },
+                { name: 'Είναι Πριν', op: 4 },
+                { name: 'Είναι Μετά', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(δεν έχει οριστεί)', op: null },
+                { name: 'Ισούται με', op: 0 },
+                { name: 'Δεν ισούται με', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Ρυθμίσεις πεδίου:',
+                header: 'Κεφαλ.:',
+                summary: 'Περίληψη:',
+                showAs: 'Εμφάνιση ως:',
+                weighBy: 'Ζυγίζουν από:',
+                sort: 'Ταξινόμηση:',
+                filter: 'Φιλτράρισμα:',
+                format: 'Μορφή:',
+                sample: 'Δείγμα:',
+                edit: 'Επεξεργαστείτε…',
+                clear: 'Απαλοιφή',
+                ok: 'ΟΚ',
+                cancel: 'Άκυρο',
+                none: '(καμία)',
+                sorts: {
+                    asc: 'Αύξουσα',
+                    desc: 'Φθίνουσα'
+                },
+                aggs: {
+                    sum: 'Άθροισμα',
+                    cnt: 'Πλήθος',
+                    avg: 'Μέσος όρος',
+                    max: 'Μέγιστη',
+                    min: 'Ελάχιστο',
+                    rng: 'Περιοχή',
+                    std: 'Τυπική απόκλιση',
+                    var: 'Διακύμανσης',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Χωρίς υπολογισμό',
+                    dRow: 'Διαφορά από την προηγούμενη γραμμή',
+                    dRowPct: '% Διαφορά από προηγούμενη γραμμή',
+                    dCol: 'Διαφορά από την προηγούμενη στήλη',
+                    dColPct: '% Διαφορά από την προηγούμενη στήλη',
+                    dPctGrand: '% του γενικού αθροίσματος',
+                    dPctRow: '% της γραμμής συνολικού',
+                    dPctCol: '% σύνολο της στήλης',
+                    dRunTot: 'Τρέχον σύνολο',
+                    dRunTotPct: 'λειτουργία της συνολικής'
+                },
+                formats: {
+                    n0: 'Ακέραιος (n0)',
+                    n2: 'Αριθμός (n2)',
+                    c: 'Νόμισμα (c)',
+                    p0: 'Ποσοστό (p0)',
+                    p2: 'Ποσοστό (p2)',
+                    n2c: 'Χιλιάδες (n2,)',
+                    n2cc: 'Εκατομμύρια (n2,,)',
+                    n2ccc: 'Δισεκατομμύρια (n2,,,)',
+                    d: '(Δ) ημερομηνία',
+                    MMMMddyyyy: 'Ημέρα μήνας έτος (ΜΜΜΜ dd, yyyy)',
+                    dMyy: 'Ημέρα μήνας έτος (d/M/yy)',
+                    ddMyy: 'Ημέρα μήνας έτος (M/dd/yy)',
+                    dMyyyy: 'Ημέρα μήνας έτος (dd/Μ/yyyy)',
+                    MMMyyyy: 'Μήνας έτος (ΜΜΜ yyyy)',
+                    MMMMyyyy: 'Μήνας έτος (ΜΜΜΜ yyyy)',
+                    yyyyQq: 'Τέταρτο έτος (yyyy "Q"q)',
+                    FYEEEEQU: 'Τρίμηνο του οικονομικού έτους ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Τελικό σύνολο',
+                subTotal: 'Μερικό άθροισμα'
+            },
+            PivotPanel: {
+                fields: 'Επιλέξτε τα πεδία για να προσθέσω στην έκθεση:',
+                drag: 'Σύρετε τα πεδία μεταξύ των παρακάτω περιοχών:',
+                filters: 'Φίλτρα',
+                cols: 'Στήλες',
+                rows: 'σειρές',
+                vals: 'Τιμές',
+                defer: 'Αναβάλει ενημερώσεις',
+                update: 'Ενημέρωση'
+            },
+            _ListContextMenu: {
+                up: 'Μετακίνηση επάνω',
+                down: 'Μετακίνηση κάτω',
+                first: 'Μετακίνηση στην αρχή',
+                last: 'Μετακίνηση στο τέλος',
+                filter: 'Μετακίνηση στο φίλτρο αναφοράς',
+                rows: 'Μετακίνηση στις ετικέτες γραμμών',
+                cols: 'Μετακίνηση στις ετικέτες στηλών',
+                vals: 'Μετακίνηση στις τιμές',
+                remove: 'Κατάργηση πεδίου',
+                edit: 'Ρυθμίσεις πεδίου…',
+                detail: 'Εμφάνιση λεπτομερειών…'
+            },
+            PivotChart: {
+                by: 'κατά',
+                and: 'των Windows 10 και τη'
+            },
+            DetailDialog: {
+                header: 'Προβολή λεπτομερειών:',
+                ok: 'ΟΚ',
+                items: 'στοιχεία {cnt:n0}',
+                item: 'το στοιχείο {cnt}',
+                row: 'Γραμμή',
+                col: 'Στήλη'
+            }
+        },
+        Viewer: {
+            cancel: 'Άκυρο',
+            ok: 'ΟΚ',
+            bottom: 'Κάτω:',
+            top: 'Top:',
+            right: 'Δεξί:',
+            left: 'Αριστ.:',
+            margins: 'Περιθώρια (ίντσες)',
+            orientation: 'Προσανατολισμός:',
+            paperKind: 'Το είδος χαρτιού:',
+            pageSetup: 'Διαμόρφωση σελίδας',
+            landscape: 'Οριζόντιος',
+            portrait: 'Κατακόρυφος',
+            pageNumber: 'Αριθμός σελίδας',
+            zoomFactor: 'Παράγοντας κλίμακας',
+            paginated: 'Διάταξη εκτύπωσης',
+            print: 'Εκτύπωση',
+            search: 'Αναζήτηση',
+            matchCase: 'Ταίριασμα πεζών/κεφαλαίων',
+            wholeWord: 'Μόνο ολόκληρες λέξεις',
+            searchResults: 'Αποτελέσματα αναζήτησης',
+            previousPage: 'Προηγούμενη σελίδα',
+            nextPage: 'Επόμενη σελίδα',
+            firstPage: 'Πρώτη σελίδα',
+            lastPage: 'Τελευταία σελίδα',
+            backwardHistory: 'Πίσω',
+            forwardHistory: 'Εμπρός',
+            pageCount: 'Πλήθος σελίδων',
+            selectTool: 'Επιλέξτε το εργαλείο',
+            moveTool: 'Εργαλείο μετακίνησης',
+            continuousMode: 'Συνεχής Προβολή σελίδας',
+            singleMode: 'Ενιαία σελίδα Προβολή',
+            wholePage: 'Ολόκληρη σελίδα Fit',
+            pageWidth: 'Ταιριάζουν με το πλάτος της σελίδας',
+            zoomOut: 'Σμίκρυνση',
+            zoomIn: 'Μεγέθυνση',
+            exports: 'Εξαγωγή',
+            fullScreen: 'Πλήρης οθόνη',
+            exitFullScreen: 'Έξοδος από πλήρη οθόνη',
+            thumbnails: 'Μικρογραφίες σελίδων',
+            outlines: 'Χάρτης εγγράφου',
+            loading: 'Φόρτωση…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML του Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Αρχειοθέτηση Web (MHTML)',
+            htmlExportName: 'Έγγραφο HTML',
+            rtfExportName: 'Έγγραφο RTF',
+            metafileExportName: 'Μετα-συμπιεσμένα αρχεία',
+            csvExportName: 'CSV',
+            tiffExportName: 'Εικόνες του TIFF',
+            bmpExportName: 'Εικόνες BMP',
+            emfExportName: 'Εμπλουτισμένο μετα-αρχείο',
+            gifExportName: 'Εικόνες GIF',
+            jpgExportName: 'Εικόνες JPEG',
+            jpegExportName: 'Εικόνες JPEG',
+            pngExportName: 'Εικόνες PNG',
+            parameters: 'parameters',
+            requiringParameters: 'Παρακαλώ παράμετροι εισόδου.',
+            nullParameterError: 'Η τιμή δεν πρέπει να είναι null.',
+            invalidParameterError: 'Η εισαγωγή δεν είναι έγκυρη.',
+            parameterNoneItemsSelected: '(καμία)',
+            parameterAllItemsSelected: '(όλα)',
+            parameterSelectAllItemText: '(Επιλογή όλων)',
+            selectParameterValue: '(επιλέξτε τιμή)',
+            apply: 'Εφαρμογή',
+            errorOccured: 'Παρουσιάστηκε σφάλμα.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.el.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.el.min.js


+ 280 - 0
src/wijmo/controls/cultures/wijmo.culture.en-CA.js

@@ -0,0 +1,280 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: en-CA (English (Canada))
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'en-CA',
+            displayName: 'English (Canada)',
+            numberFormat: {
+                '.': '.',
+                ',': ',',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: '$', pattern: ['-$n', '$n'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 0,
+                days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+                daysAbbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+                months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
+                monthsAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['A.D.'],
+                patterns: {
+                    d: 'yyyy-MM-dd', D: 'MMMM d, yyyy',
+                    f: 'MMMM d, yyyy h:mm tt', F: 'MMMM d, yyyy h:mm:ss tt',
+                    t: 'h:mm tt', T: 'h:mm:ss tt',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM, yyyy', Y: 'MMMM, yyyy',
+                    g: 'yyyy-MM-dd h:mm tt', G: 'yyyy-MM-dd h:mm:ss tt',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+                fiscalYearOffsets: [3, 0]
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} items selected'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} items)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Ascending',
+            descending: '\u2193 Descending',
+            apply: 'Apply',
+            clear: 'Clear',
+            conditions: 'Filter by Condition',
+            values: 'Filter by Value',
+            // value filter
+            search: 'Search',
+            selectAll: 'Select all',
+            null: '(nothing)',
+            // condition filter
+            header: 'Show items where the value',
+            and: 'And',
+            or: 'Or',
+            stringOperators: [
+                { name: '(not set)', op: null },
+                { name: 'Equals', op: 0 },
+                { name: 'Does not equal', op: 1 },
+                { name: 'Begins with', op: 6 },
+                { name: 'Ends with', op: 7 },
+                { name: 'Contains', op: 8 },
+                { name: 'Does not contain', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(not set)', op: null },
+                { name: 'Equals', op: 0 },
+                { name: 'Does not equal', op: 1 },
+                { name: 'Is greater than', op: 2 },
+                { name: 'Is greater than or equal to', op: 3 },
+                { name: 'Is less than', op: 4 },
+                { name: 'Is less than or equal to', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(not set)', op: null },
+                { name: 'Equals', op: 0 },
+                { name: 'Is Before', op: 4 },
+                { name: 'Is After', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(not set)', op: null },
+                { name: 'Equals', op: 0 },
+                { name: 'Does not equal', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Field settings:',
+                header: 'Header:',
+                summary: 'Summary:',
+                showAs: 'Show As:',
+                weighBy: 'Weigh by:',
+                sort: 'Sort:',
+                filter: 'Filter:',
+                format: 'Format:',
+                sample: 'Sample:',
+                edit: 'Edit…',
+                clear: 'Clear',
+                ok: 'OK',
+                cancel: 'Cancel',
+                none: '(none)',
+                sorts: {
+                    asc: 'Ascending',
+                    desc: 'Descending'
+                },
+                aggs: {
+                    sum: 'Sum',
+                    cnt: 'Count',
+                    avg: 'Average',
+                    max: 'Max',
+                    min: 'Min',
+                    rng: 'Range',
+                    std: 'StdDev',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'No Calculation',
+                    dRow: 'Difference from previous row',
+                    dRowPct: '% Difference from previous row',
+                    dCol: 'Difference from previous column',
+                    dColPct: '% Difference from previous column',
+                    dPctGrand: '% of grand total',
+                    dPctRow: '% of row total',
+                    dPctCol: '% of column total',
+                    dRunTot: 'Running total',
+                    dRunTotPct: '% running total'
+                },
+                formats: {
+                    n0: 'Integer (n0)',
+                    n2: 'Float (n2)',
+                    c: 'Currency (c)',
+                    p0: 'Percentage (p0)',
+                    p2: 'Percentage (p2)',
+                    n2c: 'Thousands (n2,)',
+                    n2cc: 'Millions (n2,,)',
+                    n2ccc: 'Billions (n2,,,)',
+                    d: 'Date (d)',
+                    MMMMddyyyy: 'Month Day Year (MMMM dd, yyyy)',
+                    dMyy: 'Day Month Year (d/M/yy)',
+                    ddMyy: 'Day Month Year (dd/M/yy)',
+                    dMyyyy: 'Day Month Year (dd/M/yyyy)',
+                    MMMyyyy: 'Month Year (MMM yyyy)',
+                    MMMMyyyy: 'Month Year (MMMM yyyy)',
+                    yyyyQq: 'Year Quarter (yyyy "Q"q)',
+                    FYEEEEQU: 'Fiscal Year Quarter ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Grand Total',
+                subTotal: 'Subtotal'
+            },
+            PivotPanel: {
+                fields: 'Choose fields to add to report:',
+                drag: 'Drag fields between areas below:',
+                filters: 'Filters',
+                cols: 'Columns',
+                rows: 'Rows',
+                vals: 'Values',
+                defer: 'Defer Updates',
+                update: 'Update'
+            },
+            _ListContextMenu: {
+                up: 'Move up',
+                down: 'Move down',
+                first: 'Move to Beginning',
+                last: 'Move to End',
+                filter: 'Move to Report Filter',
+                rows: 'Move to Row Labels',
+                cols: 'Move to Column Labels',
+                vals: 'Move to Values',
+                remove: 'Remove Field',
+                edit: 'Field Settings…',
+                detail: 'Show Detail…'
+            },
+            PivotChart: {
+                by: 'by',
+                and: 'and'
+            },
+            DetailDialog: {
+                header: 'Detail View:',
+                ok: 'OK',
+                items: '{cnt:n0} items',
+                item: '{cnt} item',
+                row: 'Row',
+                col: 'Column'
+            }
+        },
+        Viewer: {
+            cancel: 'Cancel',
+            ok: 'OK',
+            bottom: 'Bottom:',
+            top: 'Top:',
+            right: 'Right:',
+            left: 'Left:',
+            margins: 'Margins (inches)',
+            orientation: 'Orientation:',
+            paperKind: 'Paper Kind:',
+            pageSetup: 'Page Setup',
+            landscape: 'Landscape',
+            portrait: 'Portrait',
+            pageNumber: 'Page number',
+            zoomFactor: 'Zoom Factor',
+            paginated: 'Print Layout',
+            print: 'Print',
+            search: 'Search',
+            matchCase: 'Match case',
+            wholeWord: 'Match whole word only',
+            searchResults: 'Search Results',
+            previousPage: 'Previous Page',
+            nextPage: 'Next page',
+            firstPage: 'First page',
+            lastPage: 'Last page',
+            backwardHistory: 'Backward',
+            forwardHistory: 'Forward',
+            pageCount: 'Page Count',
+            selectTool: 'Select Tool',
+            moveTool: 'Move Tool',
+            continuousMode: 'Continuous Page View',
+            singleMode: 'Single Page View',
+            wholePage: 'Fit Whole Page',
+            pageWidth: 'Fit Page Width',
+            zoomOut: 'Zoom out',
+            zoomIn: 'Zoom in',
+            exports: 'Export',
+            fullScreen: 'Full Screen',
+            exitFullScreen: 'Exit Full Screen',
+            thumbnails: 'Page Thumbnails',
+            outlines: 'Document Map',
+            loading: 'Loading…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web archive (MHTML)',
+            htmlExportName: 'HTML document',
+            rtfExportName: 'RTF document',
+            metafileExportName: 'Compressed metafiles',
+            csvExportName: 'CSV',
+            tiffExportName: 'Tiff images',
+            bmpExportName: 'BMP images',
+            emfExportName: 'Enhanced metafile',
+            gifExportName: 'GIF images',
+            jpgExportName: 'JPEG images',
+            jpegExportName: 'JPEG images',
+            pngExportName: 'PNG images',
+            parameters: 'Parameters',
+            requiringParameters: 'Please input parameters.',
+            nullParameterError: 'Value cannot be null.',
+            invalidParameterError: 'Invalid input.',
+            parameterNoneItemsSelected: '(none)',
+            parameterAllItemsSelected: '(all)',
+            parameterSelectAllItemText: '(Select all)',
+            selectParameterValue: '(select value)',
+            apply: 'Apply',
+            errorOccured: 'An error has occured.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.en-CA.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.en-CA.min.js


+ 280 - 0
src/wijmo/controls/cultures/wijmo.culture.et.js

@@ -0,0 +1,280 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: et (Estonian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'et',
+            displayName: 'Estonian',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev'],
+                daysAbbr: ['P', 'E', 'T', 'K', 'N', 'R', 'L'],
+                months: ['jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'],
+                monthsAbbr: ['jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['pKr'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'dddd, d. MMMM yyyy',
+                    f: 'dddd, d. MMMM yyyy H:mm', F: 'dddd, d. MMMM yyyy H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd.MM.yyyy H:mm', G: 'dd.MM.yyyy H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+                fiscalYearOffsets: [-3, -3]
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} üksust'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}:  <b> {value} </b>  ({count:n0} kirjed)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Tõusev järjestus',
+            descending: '\u2193 Laskuv järjestus',
+            apply: 'Rakenda',
+            clear: 'Tühjenda',
+            conditions: 'Filtreeri tingimus',
+            values: 'Filtreeri hinna järgi',
+            // value filter
+            search: 'Otsi',
+            selectAll: 'Vali kõik',
+            null: '(midagi)',
+            // condition filter
+            header: 'Kuva üksused, kus väärtus',
+            and: 'ja',
+            or: 'Või',
+            stringOperators: [
+                { name: '(määramata)', op: null },
+                { name: 'Võrdub', op: 0 },
+                { name: 'Ei võrdu', op: 1 },
+                { name: 'Algab', op: 6 },
+                { name: 'Lõpeb väärtusega', op: 7 },
+                { name: 'Sisaldab', op: 8 },
+                { name: 'Ei sisalda', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(määramata)', op: null },
+                { name: 'Võrdub', op: 0 },
+                { name: 'Ei võrdu', op: 1 },
+                { name: 'On suurem kui', op: 2 },
+                { name: 'On suurem või võrdne', op: 3 },
+                { name: 'On väiksem kui', op: 4 },
+                { name: 'On väiksem või võrdne', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(määramata)', op: null },
+                { name: 'Võrdub', op: 0 },
+                { name: 'on enne', op: 4 },
+                { name: 'on pärast', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(määramata)', op: null },
+                { name: 'Võrdub', op: 0 },
+                { name: 'Ei võrdu', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Sätted:',
+                header: 'Päis:',
+                summary: 'Kokkuvõte:',
+                showAs: 'Kuva kui:',
+                weighBy: 'Kaalutakse poolt:',
+                sort: 'Sorteeri:',
+                filter: 'Filter:',
+                format: 'Formaat:',
+                sample: 'Proovi:',
+                edit: 'Redigeerimine…',
+                clear: 'Tühjenda',
+                ok: 'OK',
+                cancel: 'Loobu',
+                none: '(pole)',
+                sorts: {
+                    asc: 'Tõusev järjestus',
+                    desc: 'Laskuv järjestus'
+                },
+                aggs: {
+                    sum: 'Summa',
+                    cnt: 'Arv',
+                    avg: 'Keskmine',
+                    max: 'MAX',
+                    min: 'MIN',
+                    rng: 'Vahemik',
+                    std: 'Standardhälve',
+                    var: 'VAR',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Arvutuseta',
+                    dRow: 'Erinevus eelmise rea',
+                    dRowPct: '% Erinevus eelmise rea',
+                    dCol: 'Erinevus eelmise veeru',
+                    dColPct: 'Erinevus eelmise veeru %',
+                    dPctGrand: '% kogusummast',
+                    dPctRow: '% reast kokku',
+                    dPctCol: '% veerg kokku',
+                    dRunTot: 'Jooksev kogusumma',
+                    dRunTotPct: '% töötab kokku'
+                },
+                formats: {
+                    n0: 'Täisarv (n0)',
+                    n2: 'Float (n2)',
+                    c: 'Valuuta (c)',
+                    p0: 'Protsent (p0)',
+                    p2: 'Protsent (p2)',
+                    n2c: 'Tuhat (n2)',
+                    n2cc: 'Miljoneid (n2)',
+                    n2ccc: 'Miljardid (n2,,,)',
+                    d: 'Kuupäev (d)',
+                    MMMMddyyyy: 'Kuu aasta päev (MMMM dd, aasta)',
+                    dMyy: 'Päev kuu aasta (d/M/AA)',
+                    ddMyy: 'Päev kuu aasta (PP/M/AA)',
+                    dMyyyy: 'Päev kuu aasta (PP/M/aaaa)',
+                    MMMyyyy: 'Kuu aasta (MMM yyyy)',
+                    MMMMyyyy: 'Kuu aasta (MMMM aasta)',
+                    yyyyQq: 'Aasta kvartalis (aaaa "Q" q)',
+                    FYEEEEQU: 'Finantsaasta kvartal ("Lt" EEEE "Q" U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Üldsumma',
+                subTotal: 'Vahesumma'
+            },
+            PivotPanel: {
+                fields: 'Valige aruandesse lisatavad väljad:',
+                drag: 'Lohistage välju järgmistel aladel:',
+                filters: 'Filtrid',
+                cols: 'Veerud',
+                rows: 'Read',
+                vals: 'väärtust',
+                defer: 'Lükata uuendused',
+                update: 'Värskenda'
+            },
+            _ListContextMenu: {
+                up: 'Nihuta üles',
+                down: 'Nihuta alla',
+                first: 'Nihuta algusse',
+                last: 'Nihuta lõppu',
+                filter: 'Teisalda aruandefiltrisse',
+                rows: 'Teisalda reasiltide hulka',
+                cols: 'Teisalda veerusiltide hulka',
+                vals: 'Teisalda väärtuste hulka',
+                remove: 'Eemalda väli',
+                edit: 'Väljasätted…',
+                detail: 'Detailsed…'
+            },
+            PivotChart: {
+                by: '–',
+                and: 'kuni'
+            },
+            DetailDialog: {
+                header: 'Detailne vaade:',
+                ok: 'OK',
+                items: '{cnt:n0} üksused',
+                item: '{cnt} üksust',
+                row: 'Rida',
+                col: 'Veerg'
+            }
+        },
+        Viewer: {
+            cancel: 'Loobu',
+            ok: 'OK',
+            bottom: 'Alumine:',
+            top: 'Ülemine:',
+            right: 'Paremalt:',
+            left: 'Vasakult:',
+            margins: 'Veerised (tollid)',
+            orientation: 'Suund:',
+            paperKind: 'Raamatu liik:',
+            pageSetup: 'Lehekülje häälestus',
+            landscape: 'Horisontaalpaigutus',
+            portrait: 'Vertikaalpaigutus',
+            pageNumber: 'Leheküljenumber',
+            zoomFactor: 'Suurenduskordaja',
+            paginated: 'Küljendivaade',
+            print: 'Printimine',
+            search: 'Otsi',
+            matchCase: 'Erista suurtähti',
+            wholeWord: 'Otsi ainult terveid sõnu',
+            searchResults: 'Otsingutulemid',
+            previousPage: 'Eelmine leht',
+            nextPage: 'Järgmine leht',
+            firstPage: 'Esimene leht',
+            lastPage: 'Viimane leht',
+            backwardHistory: 'Tagasi',
+            forwardHistory: 'Edasi',
+            pageCount: 'Lehtede arv',
+            selectTool: 'Valige tööriist',
+            moveTool: 'Move tööriista',
+            continuousMode: 'Pidev lehekülje kaupa',
+            singleMode: 'Ühe lehekülje kaupa',
+            wholePage: 'Mahuta kogu lehele',
+            pageWidth: 'Lehe laiuse järgi',
+            zoomOut: 'Vähenda',
+            zoomIn: 'Suurenda',
+            exports: 'Ekspordi',
+            fullScreen: 'Täisekraan',
+            exitFullScreen: 'Välju täisekraani režiimist',
+            thumbnails: 'Lehekülje pisipildid',
+            outlines: 'Dokumendiplaan',
+            loading: 'Laadimine…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML-i sõna',
+            xlsxExportName: 'Exceli avatud XML',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Veebiarhiiv (MHTML)',
+            htmlExportName: 'HTML-dokument',
+            rtfExportName: 'RTF-dokument',
+            metafileExportName: 'Tihendatud metafailid',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-pilte',
+            bmpExportName: 'BMP pildid',
+            emfExportName: 'Laiendatud metafail',
+            gifExportName: 'Pildid',
+            jpgExportName: 'JPEG-pilte',
+            jpegExportName: 'JPEG-pilte',
+            pngExportName: 'PNG pilt',
+            parameters: 'Parameetrid',
+            requiringParameters: 'Sisestage parameetrid.',
+            nullParameterError: 'Väärtus ei tohi olla nullväärtusega.',
+            invalidParameterError: 'Sisestatud väärtused ei sobi.',
+            parameterNoneItemsSelected: '(pole)',
+            parameterAllItemsSelected: '(kõik)',
+            parameterSelectAllItemText: '(Vali kõik)',
+            selectParameterValue: '(valige väärtus)',
+            apply: 'Rakenda',
+            errorOccured: 'Ilmnes tõrge.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.et.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.et.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.eu.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: eu (Basque)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'eu',
+            displayName: 'Basque',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-% n', '% n'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 1,
+                days: ['igandea', 'astelehena', 'asteartea', 'asteazkena', 'osteguna', 'ostirala', 'larunbata'],
+                daysAbbr: ['ig.', 'al.', 'ar.', 'az.', 'og.', 'or.', 'lr.'],
+                months: ['Urtarrila', 'Otsaila', 'Martxoa', 'Apirila', 'Maiatza', 'Ekaina', 'Uztaila', 'Abuztua', 'Iraila', 'Urria', 'Azaroa', 'Abendua'],
+                monthsAbbr: ['Urt.', 'Ots.', 'Mar.', 'Api.', 'Mai.', 'Eka.', 'Uzt.', 'Abu.', 'Ira.', 'Urr.', 'Aza.', 'Abe.'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['K.o.'],
+                patterns: {
+                    d: 'yyyy/MM/dd', D: 'dddd, yyyy"(e)ko" MMMM"ren" d"a"',
+                    f: 'dddd, yyyy"(e)ko" MMMM"ren" d"a" H:mm', F: 'dddd, yyyy"(e)ko" MMMM"ren" d"a" H:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'MMMM"ren" d"a"', M: 'MMMM"ren" d"a"',
+                    y: 'yyyy"(e)ko" MMMM', Y: 'yyyy"(e)ko" MMMM',
+                    g: 'yyyy/MM/dd HH:mm', G: 'yyyy/MM/dd HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} elementurik hautatu'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} gaiak)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Goranzkoa',
+            descending: '\u2193 Beheranzkoa',
+            apply: 'Aplikatu',
+            clear: 'Garbitu',
+            conditions: 'Iragazi egoeraren arabera',
+            values: 'Iragazi balioaren arabera',
+            // value filter
+            search: 'Bilatu',
+            selectAll: 'Hautatu denak',
+            null: '(ezer ez)',
+            // condition filter
+            header: 'Erakutsi gaiak balioaren lekuan',
+            and: 'eta',
+            or: 'Edo',
+            stringOperators: [
+                { name: '(ezarri gabe)', op: null },
+                { name: 'Berdina', op: 0 },
+                { name: 'Ezberdina', op: 1 },
+                { name: 'Honela hasten da', op: 6 },
+                { name: 'Honela bukatzen da', op: 7 },
+                { name: 'Barne dauka', op: 8 },
+                { name: 'Ez dauka barne', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(ezarri gabe)', op: null },
+                { name: 'Berdina', op: 0 },
+                { name: 'Ezberdina', op: 1 },
+                { name: 'Handiagoa da', op: 2 },
+                { name: 'Handiagoa edo berdina da', op: 3 },
+                { name: 'Txikiagoa da', op: 4 },
+                { name: 'Txikiagoa edo berdina da', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(ezarri gabe)', op: null },
+                { name: 'Berdina', op: 0 },
+                { name: 'Honen aurretik', op: 4 },
+                { name: 'Honen ondoren', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(ezarri gabe)', op: null },
+                { name: 'Berdina', op: 0 },
+                { name: 'Ezberdina', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Eremu-ezarpenak:',
+                header: 'Goiburua:',
+                summary: 'Laburpena:',
+                showAs: 'Erakutsi honela:',
+                weighBy: 'Pisatzen arabera:',
+                sort: 'Ordenatu:',
+                filter: 'Iragazkia:',
+                format: 'Formatua:',
+                sample: 'Adibidea:',
+                edit: 'Editatu…',
+                clear: 'Garbitu',
+                ok: 'Ados',
+                cancel: 'Utzi',
+                none: '(bat ere ez)',
+                sorts: {
+                    asc: 'Gorantz',
+                    desc: 'Beherantz'
+                },
+                aggs: {
+                    sum: 'Batura',
+                    cnt: 'Kopurua',
+                    avg: 'Batez bestekoa',
+                    max: 'Max.',
+                    min: 'Min',
+                    rng: 'Barrutia',
+                    std: 'DesbEst',
+                    var: 'Bar',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Kalkulurik ez',
+                    dRow: 'Aurreko lerroa aldea',
+                    dRowPct: '% Difference from previous row',
+                    dCol: 'Aurreko zutabean aldea',
+                    dColPct: '% Difference from previous column',
+                    dPctGrand: '% of grand total',
+                    dPctRow: '% of row total',
+                    dPctCol: '% of column total',
+                    dRunTot: 'Pilatutako guztira',
+                    dRunTotPct: '% running total'
+                },
+                formats: {
+                    n0: 'Zenbaki oso (n0)',
+                    n2: 'Hamartar (n2)',
+                    c: 'Moneta (c)',
+                    p0: 'Ehunekoa (p0)',
+                    p2: 'Ehunekoa (p2)',
+                    n2c: 'Milaka (n2,)',
+                    n2cc: 'Milioika (n2,,)',
+                    n2ccc: 'Milioiak (n2,,,)',
+                    d: 'Data (d)',
+                    MMMMddyyyy: 'Hilabetea Eguna Urtea (MMMM dd, yyyy)',
+                    dMyy: 'Eguna Hilabetea Urtea (d/M/yy)',
+                    ddMyy: 'Eguna Hilabetea Urtea (dd/M/yy)',
+                    dMyyyy: 'Eguna Hilabetea Urtea (dd/M/yyyy)',
+                    MMMyyyy: 'Hilabetea Urtea (MMM yyyy)',
+                    MMMMyyyy: 'Hilabetea Urtea (MMMM yyyy)',
+                    yyyyQq: 'Urtea Quarter (yyyy "Q"q)',
+                    FYEEEEQU: 'Zerga Urtea Quarter ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Total orokorra',
+                subTotal: 'Azpitotala'
+            },
+            PivotPanel: {
+                fields: 'Aukeratu eremuak txostenari gehitzeko:',
+                drag: 'Arrastatu beheko areen arteko eremuak:',
+                filters: 'Iragazkiak',
+                cols: 'Zutabeetan',
+                rows: 'Errenkadak',
+                vals: 'Balioak',
+                defer: 'Atzeratu Eguneraketak',
+                update: 'Eguneratu'
+            },
+            _ListContextMenu: {
+                up: 'Eraman gora',
+                down: 'Eraman behera',
+                first: 'Eraman hasierara',
+                last: '&Eraman amaierara',
+                filter: 'Eraman txosten-iragazkira',
+                rows: 'Eraman errenkada-etiketetara',
+                cols: 'Eraman zutabe-etiketetara',
+                vals: 'Eraman balioetara',
+                remove: 'Kendu eremua',
+                edit: 'Eremu-ezarpenak…',
+                detail: 'Erakutsi xehetasuna…'
+            },
+            PivotChart: {
+                by: 'by',
+                and: 'eta'
+            },
+            DetailDialog: {
+                header: 'Xehetasunen ikuspegia:',
+                ok: 'Ados',
+                items: '{cnt:n0} items',
+                item: '{cnt} item',
+                row: 'Errenkada',
+                col: 'Zutabea'
+            }
+        },
+        Viewer: {
+            cancel: 'Utzi',
+            ok: 'Ados',
+            bottom: 'Behetik:',
+            top: 'Goitik:',
+            right: 'Eskuinetik:',
+            left: 'Ezkerrean:',
+            margins: 'Marjinak (hazbeteak)',
+            orientation: 'Orientazioa:',
+            paperKind: 'Paper Mota:',
+            pageSetup: 'Prestatu orrialdea',
+            landscape: 'Horizontala',
+            portrait: 'Bertikala',
+            pageNumber: 'Orri zenbakia',
+            zoomFactor: 'Zoom faktorea',
+            paginated: 'Orrialde-diseinua',
+            print: 'Inprimatu',
+            search: 'Bilatu',
+            matchCase: 'Maiuskulak/Minuskulak',
+            wholeWord: 'Esaldi osoa bakarrik',
+            searchResults: 'Bilaketaren emaitzak',
+            previousPage: 'Aurreko orria',
+            nextPage: 'Hurrengo orria',
+            firstPage: 'Lehen orria',
+            lastPage: 'Azken orria',
+            backwardHistory: 'Atzerantz',
+            forwardHistory: 'Aurrera',
+            pageCount: 'Orrialde kopurua',
+            selectTool: 'Hautatu Tresna',
+            moveTool: 'Move Tool',
+            continuousMode: 'Etengabeko orria ikuspegia',
+            singleMode: 'Bakar Orria Ikuspegia',
+            wholePage: 'Fit Page Osoa',
+            pageWidth: 'Hurrengo Orria',
+            zoomOut: 'Txikiagotu',
+            zoomIn: 'Handiagotu',
+            exports: 'Esportatu',
+            fullScreen: 'Pantaila osoa',
+            exitFullScreen: 'Irten pantaila osotik',
+            thumbnails: 'Page Thumbnails',
+            outlines: 'Dokumentu-mapa',
+            loading: 'Kargatzen…',
+            pdfExportName: 'Adobe-ren PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web archive (MHTML)',
+            htmlExportName: 'HTML dokumentu',
+            rtfExportName: 'RTF dokumentu',
+            metafileExportName: 'Compressed metafiles',
+            csvExportName: 'CSV',
+            tiffExportName: 'Tiff irudiak',
+            bmpExportName: 'BMP irudiak',
+            emfExportName: 'Enhanced metafile',
+            gifExportName: 'GIF irudiak',
+            jpgExportName: 'JPG irudiak',
+            jpegExportName: 'JPEG irudiak',
+            pngExportName: 'PNG irudien',
+            parameters: 'Parametroak',
+            requiringParameters: 'Sartu parametroak.',
+            nullParameterError: 'Balioa ezin da null izan.',
+            invalidParameterError: 'Sarrera baliogabea.',
+            parameterNoneItemsSelected: '(bat ere ez)',
+            parameterAllItemsSelected: '(guztiak)',
+            parameterSelectAllItemText: '(Hautatu dena)',
+            selectParameterValue: '(select value)',
+            apply: 'Aplikatu',
+            errorOccured: 'Errorea gertatu da.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.eu.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.eu.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.fi.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: fi (Finnish)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'fi',
+            displayName: 'Finnish',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'],
+                daysAbbr: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],
+                months: ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu'],
+                monthsAbbr: ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu'],
+                am: ['ap.', 'a'],
+                pm: ['ip.', 'i'],
+                eras: ['jKr.'],
+                patterns: {
+                    d: 'd.M.yyyy', D: 'd. MMMM yyyy',
+                    f: 'd. MMMM yyyy H:mm', F: 'd. MMMM yyyy H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd"." MMMM', M: 'd"." MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'd.M.yyyy H:mm', G: 'd.M.yyyy H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} kohdetta valittu'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} tuotteet)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Nouseva',
+            descending: '\u2193 Laskeva',
+            apply: 'Käytä',
+            clear: 'Tyhjennä',
+            conditions: 'Suodata kunnon mukaan',
+            values: 'Suodata arvon mukaan',
+            // value filter
+            search: 'Haku',
+            selectAll: 'Valitse kaikki',
+            null: '(ei mitään)',
+            // condition filter
+            header: 'Näytä kohteet, joissa arvo',
+            and: 'Ja',
+            or: 'Tai',
+            stringOperators: [
+                { name: '(ei asetettu)', op: null },
+                { name: 'On yhtä kuin', op: 0 },
+                { name: 'On eri suuri kuin', op: 1 },
+                { name: 'Alkaa merkillä', op: 6 },
+                { name: 'Päättyy merkkiin', op: 7 },
+                { name: 'Sisältää', op: 8 },
+                { name: 'Ei sisällä', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(ei asetettu)', op: null },
+                { name: 'On yhtä kuin', op: 0 },
+                { name: 'On eri suuri kuin', op: 1 },
+                { name: 'On suurempi kuin', op: 2 },
+                { name: 'On suurempi tai yhtä suuri kuin', op: 3 },
+                { name: 'On pienempi kuin', op: 4 },
+                { name: 'On pienempi tai yhtä suuri kuin', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(ei asetettu)', op: null },
+                { name: 'On yhtä kuin', op: 0 },
+                { name: 'on ennen', op: 4 },
+                { name: 'on jälkeen', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(ei asetettu)', op: null },
+                { name: 'On yhtä kuin', op: 0 },
+                { name: 'On eri suuri kuin', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Asetukset:',
+                header: 'Otsikkolähde:',
+                summary: 'Yhteenveto:',
+                showAs: 'Näytä muodossa:',
+                weighBy: 'Painavat:',
+                sort: 'Lajittelu:',
+                filter: 'Suodatus:',
+                format: 'Muotoilu:',
+                sample: 'Näyte:',
+                edit: 'Muokkaa…',
+                clear: 'Tyhjennä',
+                ok: 'OK',
+                cancel: 'Peruuta',
+                none: '(ei mitään)',
+                sorts: {
+                    asc: 'Nouseva',
+                    desc: 'Laskeva'
+                },
+                aggs: {
+                    sum: 'Summa',
+                    cnt: 'Määrä',
+                    avg: 'Keskiarvo',
+                    max: 'Maks.',
+                    min: 'Min',
+                    rng: 'Alue',
+                    std: 'Keskihajonta',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Ei laskentaa',
+                    dRow: 'Ero edellisen krs',
+                    dRowPct: '% Ero edellisen krs',
+                    dCol: 'Eroa edelliseen sarakkeeseen',
+                    dColPct: '% Ero edelliseen sarakkeeseen',
+                    dPctGrand: 'prosenttia kokonaissummasta',
+                    dPctRow: 'prosenttia rivin kokonaissumman',
+                    dPctCol: 'prosenttia sarakkeesta yhteensä',
+                    dRunTot: 'Juokseva summa',
+                    dRunTotPct: '% summa'
+                },
+                formats: {
+                    n0: 'Kokonaisluku (n0)',
+                    n2: 'Desimaalin (n2)',
+                    c: 'Valuutta (c)',
+                    p0: 'Prosenttiosuus (p0)',
+                    p2: 'Prosenttiosuus (p2)',
+                    n2c: 'Tuhansia (n2,)',
+                    n2cc: 'Miljoonia (n2,,)',
+                    n2ccc: 'Miljardeja (n2,,,)',
+                    d: 'Päivämäärä (d)',
+                    MMMMddyyyy: 'Kuukausi päivä vuosi (MMMM dd, yyyy)',
+                    dMyy: 'Päivä kuukausi vuosi (d/M/yy)',
+                    ddMyy: 'Päivä kuukausi vuosi (dd/M/yy)',
+                    dMyyyy: 'Päivä kuukausi vuosi (dd/M/yyyy)',
+                    MMMyyyy: 'Kuukausi vuosi (MMM yyyy)',
+                    MMMMyyyy: 'Kuukausi vuosi (MMMM yyyy)',
+                    yyyyQq: 'Vuoden neljänneksellä (yyyy "Q"q)',
+                    FYEEEEQU: 'Tilikauden neljännes ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Kokonaissumma',
+                subTotal: 'Välisumma'
+            },
+            PivotPanel: {
+                fields: 'Valitse raporttiin lisättävät kentät:',
+                drag: 'Vedä kenttiä alla olevien alueiden välillä:',
+                filters: 'Suodattimet',
+                cols: 'Sarakkeet',
+                rows: 'Rivit',
+                vals: 'arvoa',
+                defer: 'Lykätä päivitykset',
+                update: 'Päivitä'
+            },
+            _ListContextMenu: {
+                up: 'Siirrä ylös',
+                down: 'Siirrä alas',
+                first: 'Siirrä alkuun',
+                last: 'Siirrä loppuun',
+                filter: 'Siirrä raporttisuodattimeen',
+                rows: 'Siirrä riviotsikoihin',
+                cols: 'Siirrä sarakeotsikoihin',
+                vals: 'Siirrä arvoihin',
+                remove: 'Poista kenttä',
+                edit: 'Kentän asetukset…',
+                detail: 'Näytä tiedot…'
+            },
+            PivotChart: {
+                by: 'by',
+                and: '–'
+            },
+            DetailDialog: {
+                header: 'Yksityiskohtaisessa näkymässä:',
+                ok: 'OK',
+                items: '{cnt:n0}-kohteet',
+                item: '{cnt} kohdetta',
+                row: 'Rivi',
+                col: 'Sarake'
+            }
+        },
+        Viewer: {
+            cancel: 'Peruuta',
+            ok: 'OK',
+            bottom: 'Alhaalla:',
+            top: 'Ylhäällä:',
+            right: 'Oikealla:',
+            left: 'Vasemmalla:',
+            margins: 'Reunukset (tuumina)',
+            orientation: 'Suunta:',
+            paperKind: 'Paperin tyyppi:',
+            pageSetup: 'Sivun asetukset',
+            landscape: 'Vaaka',
+            portrait: 'Pysty',
+            pageNumber: 'Sivunumero',
+            zoomFactor: 'Zoomauskerroin',
+            paginated: 'Tulostusasettelu',
+            print: 'Tulostaminen',
+            search: 'Haku',
+            matchCase: 'Sama kirjainkoko',
+            wholeWord: 'Koko sana',
+            searchResults: 'Hakutulokset',
+            previousPage: 'Edellinen sivu',
+            nextPage: 'Seuraava sivu',
+            firstPage: 'Ensimmäinen sivu',
+            lastPage: 'Viimeinen sivu',
+            backwardHistory: 'Taaksepäin',
+            forwardHistory: 'Seuraava',
+            pageCount: 'Sivumäärä',
+            selectTool: 'Valitse työkalu',
+            moveTool: 'Siirtotyökalu',
+            continuousMode: 'Jatkuva sivunäkymässä',
+            singleMode: 'Yhden sivun näkymä',
+            wholePage: 'Sovita koko sivu',
+            pageWidth: 'Sovita sivun leveys',
+            zoomOut: 'Loitonna',
+            zoomIn: 'Lähennä',
+            exports: 'Vie',
+            fullScreen: 'Koko näyttö',
+            exitFullScreen: 'Poistu koko näytön tilasta',
+            thumbnails: 'Sivujen pikkukuvia',
+            outlines: 'asiakirjan rakenneruutu',
+            loading: 'Ladataan…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML sana',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web-arkisto (MHTML)',
+            htmlExportName: 'HTML-asiakirja',
+            rtfExportName: 'RTF-asiakirja',
+            metafileExportName: 'Pakattu metatiedostojen',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-kuvien',
+            bmpExportName: 'BMP kuvia',
+            emfExportName: 'Laajennettu metatiedosto',
+            gifExportName: 'GIF-kuvia',
+            jpgExportName: 'JPEG-kuvat',
+            jpegExportName: 'JPEG-kuvat',
+            pngExportName: 'PNG-kuvia',
+            parameters: 'parameters',
+            requiringParameters: 'Anna parametrit.',
+            nullParameterError: 'Arvo ei voi olla null.',
+            invalidParameterError: 'Virheellinen syöte.',
+            parameterNoneItemsSelected: '(ei mitään)',
+            parameterAllItemsSelected: '(kaikki)',
+            parameterSelectAllItemText: '(Valitse kaikki)',
+            selectParameterValue: '(Valitse arvo)',
+            apply: 'Käytä',
+            errorOccured: 'Järjestelmässä on ilmennyt virhe.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.fi.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.fi.min.js


+ 280 - 0
src/wijmo/controls/cultures/wijmo.culture.fr-CA.js

@@ -0,0 +1,280 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: fr-CA (French (Canada))
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'fr-CA',
+            displayName: 'French (Canada)',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: '$', pattern: ['(n $)', 'n $'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 0,
+                days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
+                daysAbbr: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
+                months: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
+                monthsAbbr: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
+                am: ['', ''],
+                pm: ['', ''],
+                eras: ['ap. J.-C.'],
+                patterns: {
+                    d: 'yyyy-MM-dd', D: 'd MMMM yyyy',
+                    f: 'd MMMM yyyy HH:mm', F: 'd MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM, yyyy', Y: 'MMMM, yyyy',
+                    g: 'yyyy-MM-dd HH:mm', G: 'yyyy-MM-dd HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+                fiscalYearOffsets: [3, 3]
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} articles sélectionnés'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name} : <b>{value}</b> ({count:n0} articles)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Croissant',
+            descending: '\u2193 Décroissant',
+            apply: 'Appliquer',
+            clear: 'Effacer',
+            conditions: 'Filtrer par État',
+            values: 'Filtrer par valeur',
+            // value filter
+            search: 'Rechercher',
+            selectAll: 'Sélectionner tous les éléments',
+            null: '(rien)',
+            // condition filter
+            header: 'Afficher les articles où la valeur',
+            and: 'Et',
+            or: 'Ou',
+            stringOperators: [
+                { name: '(non défini)', op: null },
+                { name: 'Est égal à', op: 0 },
+                { name: 'N\’est pas égal à', op: 1 },
+                { name: 'Commence par', op: 6 },
+                { name: 'Se termine par', op: 7 },
+                { name: 'Contient', op: 8 },
+                { name: 'Ne contient pas', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(non défini)', op: null },
+                { name: 'Est égal à', op: 0 },
+                { name: 'N\’est pas égal à', op: 1 },
+                { name: 'Est supérieure à', op: 2 },
+                { name: 'Est supérieur ou égal à', op: 3 },
+                { name: 'Est inférieure à', op: 4 },
+                { name: 'Est inférieur ou égal à', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(non défini)', op: null },
+                { name: 'Est égal à', op: 0 },
+                { name: 'Est avant', op: 4 },
+                { name: 'Est après', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(non défini)', op: null },
+                { name: 'Est égal à', op: 0 },
+                { name: 'N\’est pas égal à', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Paramètres de champ:',
+                header: 'En-tête:',
+                summary: 'Résumé:',
+                showAs: 'Afficher comme:',
+                weighBy: 'Poids de:',
+                sort: 'Tri par:',
+                filter: 'Filtre:',
+                format: 'Format:',
+                sample: 'Échantillon:',
+                edit: 'Modifier…',
+                clear: 'Effacer',
+                ok: 'OK',
+                cancel: 'Annuler',
+                none: '(aucun)',
+                sorts: {
+                    asc: 'Croissant',
+                    desc: 'Décroissant'
+                },
+                aggs: {
+                    sum: 'Somme',
+                    cnt: 'Nombre',
+                    avg: 'Moyenne',
+                    max: 'Max.',
+                    min: 'Min.',
+                    rng: 'Plage',
+                    std: 'StdDev',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Aucun calcul',
+                    dRow: 'Différence du rang précédent',
+                    dRowPct: '% différence du rang précédent',
+                    dCol: 'Différence de la colonne précédente',
+                    dColPct: '% différence de la colonne précédente',
+                    dPctGrand: '% du total général',
+                    dPctRow: '% du total de ligne',
+                    dPctCol: '% de colonne total',
+                    dRunTot: 'Total cumulé',
+                    dRunTotPct: '% total cumulé'
+                },
+                formats: {
+                    n0: 'Entier (n0)',
+                    n2: 'Décimal (n2)',
+                    c: 'Monnaie (c)',
+                    p0: 'Pourcentage (p0)',
+                    p2: 'Pourcentage (p2)',
+                    n2c: 'Des milliers (n2,)',
+                    n2cc: 'Des millions (n2,,)',
+                    n2ccc: 'Des milliards (n2,,,)',
+                    d: 'Date (d)',
+                    MMMMddyyyy: 'Mois jour année (MMMM dd, yyyy)',
+                    dMyy: 'Jour mois année (d/M/yy)',
+                    ddMyy: 'Jour mois année (dd/M/yy)',
+                    dMyyyy: 'Jour mois année (dd/M/yyyy)',
+                    MMMyyyy: 'Mois année (MMM yyyy)',
+                    MMMMyyyy: 'Mois année (MMMM yyyy)',
+                    yyyyQq: 'Trimestre de l’année (yyyy "Q"q)',
+                    FYEEEEQU: 'Trimestre de l’exercice ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Total général',
+                subTotal: 'Sous-total'
+            },
+            PivotPanel: {
+                fields: 'Choisissez les champs à ajouter au rapport:',
+                drag: 'Faites glisser les champs entre les zones ci-dessous:',
+                filters: 'Filtres',
+                cols: 'Colonnes',
+                rows: 'Lignes',
+                vals: 'Valeurs',
+                defer: 'Reporter les mises à jour',
+                update: 'Mettre à jour'
+            },
+            _ListContextMenu: {
+                up: 'Monter',
+                down: 'Descendre',
+                first: 'Passer au début',
+                last: 'Déplacer vers la fin',
+                filter: 'Passer au filtre de rapport',
+                rows: 'Déplacer vers les étiquettes de ligne',
+                cols: 'Déplacer vers les étiquettes de colonne',
+                vals: 'Se déplacer aux valeurs',
+                remove: 'Supprimer le champ',
+                edit: 'Paramètres de champ…',
+                detail: 'Afficher le détail…'
+            },
+            PivotChart: {
+                by: 'par',
+                and: 'et'
+            },
+            DetailDialog: {
+                header: 'Vue de détail:',
+                ok: 'OK',
+                items: 'éléments de {cnt:n0}',
+                item: 'élément de {cnt}',
+                row: 'Ligne',
+                col: 'Colonne'
+            }
+        },
+        Viewer: {
+            cancel: 'Annuler',
+            ok: 'OK',
+            bottom: 'En bas:',
+            top: 'Retour au début:',
+            right: 'A droite:',
+            left: 'A gauche:',
+            margins: 'Marges (pouces)',
+            orientation: 'Orientation:',
+            paperKind: 'Type de papier:',
+            pageSetup: 'Mise en page',
+            landscape: 'Paysage',
+            portrait: 'Portrait',
+            pageNumber: 'Numéro de page',
+            zoomFactor: 'Facteur de zoom',
+            paginated: 'Mise en page',
+            print: 'Impression',
+            search: 'Rechercher',
+            matchCase: 'Respecter la casse',
+            wholeWord: 'Mot entier',
+            searchResults: 'Résultats de la recherche',
+            previousPage: 'Page précédente',
+            nextPage: 'Page suivante',
+            firstPage: 'Première page',
+            lastPage: 'Dernière page',
+            backwardHistory: 'En arrière',
+            forwardHistory: 'Transférer',
+            pageCount: 'Nombre de pages',
+            selectTool: 'Sélectionnez l’outil',
+            moveTool: 'Outil de déplacement',
+            continuousMode: 'Affichage de la Page continue',
+            singleMode: 'Affichage de Page simple',
+            wholePage: 'Toute forme de la Page',
+            pageWidth: 'Largeur de la Page',
+            zoomOut: 'Zoom arrière',
+            zoomIn: 'Zoom avant',
+            exports: 'Exporter',
+            fullScreen: 'Plein écran',
+            exitFullScreen: 'Quitter le mode plein écran',
+            thumbnails: 'Vignettes de page',
+            outlines: 'Explorateur de documents',
+            loading: 'Chargement…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Archive Web (MHTML)',
+            htmlExportName: 'Document HTML',
+            rtfExportName: 'Document RTF',
+            metafileExportName: 'Métafichiers compressés',
+            csvExportName: 'CSV',
+            tiffExportName: 'Images TIFF',
+            bmpExportName: 'Images BMP',
+            emfExportName: 'Métafichier amélioré',
+            gifExportName: 'Images GIF',
+            jpgExportName: 'Images JPEG',
+            jpegExportName: 'Images JPEG',
+            pngExportName: 'Images PNG',
+            parameters: 'Paramètres',
+            requiringParameters: 'S’il vous plaît entrer des paramètres.',
+            nullParameterError: 'Valeur ne peut pas être null.',
+            invalidParameterError: 'Entrée non valide.',
+            parameterNoneItemsSelected: '(aucun)',
+            parameterAllItemsSelected: '(tous)',
+            parameterSelectAllItemText: '(Sélectionner tout)',
+            selectParameterValue: '(sélectionnez valeur)',
+            apply: 'Appliquer',
+            errorOccured: 'Une erreur s’est produite.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.fr-CA.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.fr-CA.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.gl.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: gl (Galician)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'gl',
+            displayName: 'Galician',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-$n', '$n'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 1,
+                days: ['domingo', 'luns', 'martes', 'mércores', 'xoves', 'venres', 'sábado'],
+                daysAbbr: ['dom', 'luns', 'mar', 'mér', 'xov', 'ven', 'sáb'],
+                months: ['Xaneiro', 'Febreiro', 'Marzo', 'Abril', 'Maio', 'Xuño', 'Xullo', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Decembro'],
+                monthsAbbr: ['Xan', 'Feb', 'Mar', 'Abr', 'Mai', 'Xuñ', 'Xul', 'Ago', 'Set', 'Out', 'Nov', 'Dec'],
+                am: ['a.m.', 'a'],
+                pm: ['p.m.', 'p'],
+                eras: ['d.C.'],
+                patterns: {
+                    d: 'dd/MM/yyyy', D: 'dddd dd MMMM yyyy',
+                    f: 'dddd dd MMMM yyyy HH:mm', F: 'dddd dd MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd/MM/yyyy HH:mm', G: 'dd/MM/yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} elementos seleccionados'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} elementos)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Ascendente',
+            descending: '\u2193 Descendente',
+            apply: 'Aplicar',
+            clear: 'Borrar',
+            conditions: 'Filtrar por condición',
+            values: 'Filtrar por valor',
+            // value filter
+            search: 'Buscar',
+            selectAll: 'Seleccionar todo',
+            null: '(nada)',
+            // condition filter
+            header: 'Mostrar elementos onde o valor',
+            and: 'e',
+            or: 'Ou',
+            stringOperators: [
+                { name: '(non establecido)', op: null },
+                { name: 'Igual a', op: 0 },
+                { name: 'Non igual a', op: 1 },
+                { name: 'Comeza por', op: 6 },
+                { name: 'Finaliza por', op: 7 },
+                { name: 'Contén', op: 8 },
+                { name: 'Non contén', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(non establecido)', op: null },
+                { name: 'Igual a', op: 0 },
+                { name: 'Non igual a', op: 1 },
+                { name: 'É maior que', op: 2 },
+                { name: 'É maior ou igual a', op: 3 },
+                { name: 'É menor que', op: 4 },
+                { name: 'É menor ou igual a', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(non establecido)', op: null },
+                { name: 'Igual a', op: 0 },
+                { name: 'É anterior a', op: 4 },
+                { name: 'É posterior a', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(non establecido)', op: null },
+                { name: 'Igual a', op: 0 },
+                { name: 'Non igual a', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Configuración do campo:',
+                header: 'Cabeceira:',
+                summary: 'Resumo:',
+                showAs: 'Mostrar como:',
+                weighBy: 'Pesar por:',
+                sort: 'Ordenar:',
+                filter: 'Filtro:',
+                format: 'Formato:',
+                sample: 'Exemplo:',
+                edit: 'Editar…',
+                clear: 'Limpar',
+                ok: 'Aceptar',
+                cancel: 'Cancelar',
+                none: '(ningunha)',
+                sorts: {
+                    asc: 'Ascendente',
+                    desc: 'Descendente'
+                },
+                aggs: {
+                    sum: 'Suma',
+                    cnt: 'Contaxe',
+                    avg: 'Media',
+                    max: 'Máx',
+                    min: 'Mín',
+                    rng: 'Intervalo',
+                    std: 'DesvEst',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Sen cálculo',
+                    dRow: 'Diferenza con respecto á liña anterior',
+                    dRowPct: 'Diferenza % con respecto á liña anterior',
+                    dCol: 'Diferenza con respecto á columna anterior',
+                    dColPct: 'Diferenza % con respecto á columna anterior',
+                    dPctGrand: '% Do total xeral',
+                    dPctRow: '% Do total da liña',
+                    dPctCol: '% Do total da columna',
+                    dRunTot: 'Total cumulativo',
+                    dRunTotPct: '% Total cumulativo'
+                },
+                formats: {
+                    n0: 'Inteiro (n0)',
+                    n2: 'Decimal (n2)',
+                    c: 'Moeda (c)',
+                    p0: 'Porcentaxe (p0)',
+                    p2: 'Porcentaxe (p2)',
+                    n2c: 'Miles (n2,)',
+                    n2cc: 'Millóns (n2,,)',
+                    n2ccc: 'Billóns (n2,,,)',
+                    d: 'Data (d)',
+                    MMMMddyyyy: 'Mes Día Ano (MMMM dd, yyyy)',
+                    dMyy: 'Día Mes Ano (d/M/yy)',
+                    ddMyy: 'Día Mes Ano (dd/M/yy)',
+                    dMyyyy: 'Día Mes Ano (dd/M/yyyy)',
+                    MMMyyyy: 'Mes Ano (MMM yyyy)',
+                    MMMMyyyy: 'Mes Ano (MMMM yyyy)',
+                    yyyyQq: 'Ano e Trimestre (yyyy "Q"q)',
+                    FYEEEEQU: 'Trimestre do ano fiscal ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Total xeral',
+                subTotal: 'SUBTOTAL'
+            },
+            PivotPanel: {
+                fields: 'Escoller campos para os engadir ao informe:',
+                drag: 'Arrastrar campos entre as áreas baixo:',
+                filters: 'Filtros',
+                cols: 'Columnas',
+                rows: 'Filas',
+                vals: 'Valores',
+                defer: 'Retrasar Actualizacións',
+                update: 'Actualizar'
+            },
+            _ListContextMenu: {
+                up: 'Mover cara a arriba',
+                down: 'Mover cara a abaixo',
+                first: 'Mover ao inicio',
+                last: 'Mover ao final',
+                filter: 'Mover a filtro',
+                rows: 'Mover a etiquetas de fila',
+                cols: 'Mover a etiquetas de columna',
+                vals: 'Mover a valores',
+                remove: 'Eliminar campo',
+                edit: 'Configuración de campos…',
+                detail: 'Mostrar detalle…'
+            },
+            PivotChart: {
+                by: 'por',
+                and: 'e'
+            },
+            DetailDialog: {
+                header: 'Visualización de detalles:',
+                ok: 'Aceptar',
+                items: '{cnt:n0} items',
+                item: '{cnt} item',
+                row: 'Fila',
+                col: 'Columna'
+            }
+        },
+        Viewer: {
+            cancel: 'Cancelar',
+            ok: 'Aceptar',
+            bottom: 'Inferior:',
+            top: 'Sup.:',
+            right: 'Dereito:',
+            left: 'Esq.:',
+            margins: 'Marxes (polgadas)',
+            orientation: 'Orientación:',
+            paperKind: 'Tipo de Papel:',
+            pageSetup: 'Configuración de páxina',
+            landscape: 'Horizontal',
+            portrait: 'Vertical',
+            pageNumber: 'Número de páxina',
+            zoomFactor: 'Factor de Zoom',
+            paginated: 'Layout de impresión',
+            print: 'Imprimir',
+            search: 'Buscar',
+            matchCase: 'Diferenciar maiúsculas de minúsculas',
+            wholeWord: 'Só palabras completas',
+            searchResults: 'Resultados da busca',
+            previousPage: 'Páxina anterior',
+            nextPage: 'Páxina seguinte',
+            firstPage: 'Primeira páxina',
+            lastPage: 'Última páxina',
+            backwardHistory: 'Cara a atrás',
+            forwardHistory: 'Adiante',
+            pageCount: 'Número de páxinas',
+            selectTool: 'Ferramenta de Selección',
+            moveTool: 'Ferramenta de movemento',
+            continuousMode: 'Vista de páxina continua',
+            singleMode: 'Visualización de páxina única',
+            wholePage: 'Axuste páxina enteira',
+            pageWidth: 'Axuste ancho da páxina',
+            zoomOut: 'Reducir',
+            zoomIn: 'Ampliar',
+            exports: 'Exportar',
+            fullScreen: 'Pantalla completa',
+            exitFullScreen: 'Saír de pantalla completa',
+            thumbnails: 'Miniaturas de páxina',
+            outlines: 'Mapa do documento',
+            loading: 'Cargando…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web archive (MHTML)',
+            htmlExportName: 'HTML document',
+            rtfExportName: 'Documento RTF',
+            metafileExportName: 'Metafiles comprimidos',
+            csvExportName: 'CSV',
+            tiffExportName: 'Imaxes TIFF',
+            bmpExportName: 'Imaxes BMP',
+            emfExportName: 'Enhanced metafile',
+            gifExportName: 'GIF images',
+            jpgExportName: 'Imaxes JPEG',
+            jpegExportName: 'imaxes JPEG',
+            pngExportName: 'imaxes PNG',
+            parameters: 'Parámetros',
+            requiringParameters: 'Forneza parámetros.',
+            nullParameterError: 'O valor non pode ser nulo.',
+            invalidParameterError: 'Entrada non válida',
+            parameterNoneItemsSelected: '(ningunha)',
+            parameterAllItemsSelected: '(todo)',
+            parameterSelectAllItemText: '(Seleccionar todo)',
+            selectParameterValue: '(seleccionar valor)',
+            apply: 'Aplicar',
+            errorOccured: 'Ocorreu un erro.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.gl.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.gl.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.he.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: he (Hebrew)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'he',
+            displayName: 'Hebrew',
+            numberFormat: {
+                '.': '.',
+                ',': ',',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '₪', pattern: ['$-n', '$ n'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': ':',
+                firstDay: 0,
+                days: ['יום ראשון', 'יום שני', 'יום שלישי', 'יום רביעי', 'יום חמישי', 'יום שישי', 'שבת'],
+                daysAbbr: ['יום א', 'יום ב', 'יום ג', 'יום ד', 'יום ה', 'יום ו', 'שבת'],
+                months: ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'],
+                monthsAbbr: ['ינו', 'פבר', 'מרץ', 'אפר', 'מאי', 'יונ', 'יול', 'אוג', 'ספט', 'אוק', 'נוב', 'דצמ'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['לספירה'],
+                patterns: {
+                    d: 'dd/MM/yyyy', D: 'dddd dd MMMM yyyy',
+                    f: 'dddd dd MMMM yyyy HH:mm', F: 'dddd dd MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'dd MMMM', M: 'dd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd/MM/yyyy HH:mm', G: 'dd/MM/yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: 'פריטים שנבחרו  {count:n0}'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '(פריטים {count:n0}) <b>{value}</b> :{name}'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 ‏‏סדר עולה',
+            descending: '\u2193 ‏‏סדר יורד',
+            apply: 'החל',
+            clear: 'נקה',
+            conditions: 'סנן לפי תנאי',
+            values: 'סנן לפי ערך',
+            // value filter
+            search: 'חפש',
+            selectAll: 'בחר הכל',
+            null: '(כלום)',
+            // condition filter
+            header: 'הצג פריטים כאשר הערך',
+            and: 'וכן',
+            or: 'או',
+            stringOperators: [
+                { name: '(לא מוגדר)', op: null },
+                { name: 'שווה ל-', op: 0 },
+                { name: 'לא שווה ל-', op: 1 },
+                { name: 'מתחיל ב-', op: 6 },
+                { name: 'מסתיים ב-', op: 7 },
+                { name: 'מכיל', op: 8 },
+                { name: 'לא מכיל', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(לא מוגדר)', op: null },
+                { name: 'שווה ל-', op: 0 },
+                { name: 'לא שווה ל-', op: 1 },
+                { name: 'גדול מ-', op: 2 },
+                { name: 'גדול או שווה ל-', op: 3 },
+                { name: 'קטן מ-', op: 4 },
+                { name: 'קטן או שווה ל-', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(לא מוגדר)', op: null },
+                { name: 'שווה ל-', op: 0 },
+                { name: 'לפני', op: 4 },
+                { name: 'אחרי', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(לא מוגדר)', op: null },
+                { name: 'שווה ל-', op: 0 },
+                { name: 'לא שווה ל-', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'הגדרות שדה:',
+                header: 'כותרת:',
+                summary: 'תקציר:',
+                showAs: 'להראות כמו:',
+                weighBy: 'שוקל על-ידי:',
+                sort: 'מיון:',
+                filter: 'מסנן:',
+                format: 'תבנית:',
+                sample: 'לדוגמה:',
+                edit: 'עריכה…',
+                clear: 'נקה',
+                ok: 'אישור',
+                cancel: 'ביטול',
+                none: '(ללא)',
+                sorts: {
+                    asc: '‏‏סדר עולה',
+                    desc: '‏‏סדר יורד'
+                },
+                aggs: {
+                    sum: 'סכום',
+                    cnt: '‏‏ספירה',
+                    avg: 'ממוצע',
+                    max: 'מקסימום',
+                    min: 'Min',
+                    rng: 'טווח',
+                    std: 'סטיית_תקן_נאמדת',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'ללא חישוב',
+                    dRow: 'ההבדל בין השורה הקודמת',
+                    dRowPct: '% מן השורה הקודמת',
+                    dCol: 'ההבדל מעמודה הקודם',
+                    dColPct: '% הבדל בינו לבין דף קודמות עמודה',
+                    dPctGrand: '% מן הסכום הכולל',
+                    dPctRow: '% סה כ שורה',
+                    dPctCol: '% של עמודה מוחלטת',
+                    dRunTot: 'הסכום המצטבר',
+                    dRunTotPct: '% הסכום השוטף'
+                },
+                formats: {
+                    n0: 'מספר שלם (n0)',
+                    n2: 'לצוף (n2)',
+                    c: 'מטבע (c)',
+                    p0: 'אחוז (p0)',
+                    p2: 'אחוז (p2)',
+                    n2c: 'אלפים (,n2)',
+                    n2cc: 'מיליונים (,,n2)',
+                    n2ccc: 'מיליארדים (,,,n2)',
+                    d: 'תאריך (d)',
+                    MMMMddyyyy: 'חודש יום שנה (MMMM dd, yyyy)',
+                    dMyy: 'יום חודש שנה (d/M/yy)',
+                    ddMyy: 'יום חודש שנה (M/dd/yy)',
+                    dMyyyy: 'יום חודש שנה (M/dd/yyyy)',
+                    MMMyyyy: 'חודש שנה (MMM yyyy)',
+                    MMMMyyyy: 'חודש שנה (MMMM yyyy)',
+                    yyyyQq: 'רבעון שנת (q yyyy "Q")',
+                    FYEEEEQU: 'רבעון שנת הכספים ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'סכום כולל',
+                subTotal: 'סכום ביניים'
+            },
+            PivotPanel: {
+                fields: 'בחר שדות כדי להוסיף לדוח:',
+                drag: 'גרור שדות בין האזורים שלהלן:',
+                filters: 'מסננים',
+                cols: 'טורים',
+                rows: 'שורות',
+                vals: 'ערכים',
+                defer: 'דחה את העדכונים',
+                update: 'עדכון'
+            },
+            _ListContextMenu: {
+                up: 'הזז למעלה',
+                down: 'הזז למטה',
+                first: 'העבר להתחלה',
+                last: 'העבר לסוף',
+                filter: 'העבר אל מסנן דוחות',
+                rows: 'העבר אל תוויות שורה',
+                cols: 'העבר אל תוויות עמודה',
+                vals: 'העבר אל ערכים',
+                remove: 'הסר שדה',
+                edit: 'הגדרות שדה…',
+                detail: 'הצג פירוט…'
+            },
+            PivotChart: {
+                by: 'לפי',
+                and: 'לבין'
+            },
+            DetailDialog: {
+                header: 'תצוגת הפרטים:',
+                ok: 'אישור',
+                items: '{cnt:n0} פריטים',
+                item: 'הפריט {cnt}',
+                row: 'Row',
+                col: 'Column'
+            }
+        },
+        Viewer: {
+            cancel: 'ביטול',
+            ok: 'אישור',
+            bottom: 'תחתונים:',
+            top: 'עליון:',
+            right: 'ימין:',
+            left: 'שמאל:',
+            margins: 'שוליים (אינצ\'ים)',
+            orientation: 'כיוון:',
+            paperKind: 'סוג נייר:',
+            pageSetup: 'הגדרת עמוד',
+            landscape: 'לרוחב',
+            portrait: 'לאורך',
+            pageNumber: 'מספר עמוד',
+            zoomFactor: 'זום פקטור',
+            paginated: 'פריסת הדפסה',
+            print: 'הדפסה',
+            search: 'חפש',
+            matchCase: 'התאם רישיות',
+            wholeWord: 'אתר מילים שלמות בלבד',
+            searchResults: 'תוצאות חיפוש',
+            previousPage: 'הדף הקודם',
+            nextPage: 'העמוד הבא',
+            firstPage: 'עמוד ראשון',
+            lastPage: 'דף אחרון',
+            backwardHistory: 'אחורה',
+            forwardHistory: 'קדימה',
+            pageCount: 'ספירת דפים',
+            selectTool: 'בחרו בכלי',
+            moveTool: 'הכלי הזזה',
+            continuousMode: 'תצוגת עמוד רציף',
+            singleMode: 'התצוגה \' עמוד בודד \'',
+            wholePage: 'התאם עמוד שלם',
+            pageWidth: 'התאם רוחב עמוד',
+            zoomOut: 'הקטן תצוגה',
+            zoomIn: 'הגדל תצוגה',
+            exports: 'ייצוא',
+            fullScreen: 'מסך מלא',
+            exitFullScreen: 'צא ממסך מלא',
+            thumbnails: 'תמונות עמוד ממוזערות',
+            outlines: 'מפת מסמך',
+            loading: 'טוען…',
+            pdfExportName: 'PDF של Adobe',
+            docxExportName: 'המילה open XML',
+            xlsxExportName: 'Excel open XML',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'ארכיון אינטרנט (MHTML)',
+            htmlExportName: 'מסמך HTML',
+            rtfExportName: 'מסמך RTF',
+            metafileExportName: 'קבצי metafile דחוס',
+            csvExportName: 'CSV',
+            tiffExportName: 'תמונות tiff',
+            bmpExportName: 'תמונות BMP',
+            emfExportName: 'קבצי metafile משופרים',
+            gifExportName: 'תמונות GIF',
+            jpgExportName: 'תמונות JPEG',
+            jpegExportName: 'תמונות JPEG',
+            pngExportName: 'תמונות PNG',
+            parameters: 'Parameters',
+            requiringParameters: 'בבקשה פרמטרים של קלט.',
+            nullParameterError: 'הערך אינו יכול להיות Null.',
+            invalidParameterError: 'לא חוקי קלט.',
+            parameterNoneItemsSelected: '(ללא)',
+            parameterAllItemsSelected: '(הכל)',
+            parameterSelectAllItemText: '(בחר הכל)',
+            selectParameterValue: '(בחר ערך)',
+            apply: 'החל',
+            errorOccured: 'אירעה שגיאה.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.he.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.he.min.js


+ 280 - 0
src/wijmo/controls/cultures/wijmo.culture.hi.js

@@ -0,0 +1,280 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: hi (Hindi)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'hi',
+            displayName: 'Hindi',
+            numberFormat: {
+                '.': '.',
+                ',': ',',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '₹', pattern: ['$ -n', '$n'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 1,
+                days: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],
+                daysAbbr: ['रवि.', 'सोम.', 'मंगल.', 'बुध.', 'गुरु.', 'शुक्र.', 'शनि.'],
+                months: ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्तूबर', 'नवम्बर', 'दिसम्बर'],
+                monthsAbbr: ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्तूबर', 'नवम्बर', 'दिसम्बर'],
+                am: ['पूर्वाह्न', 'प'],
+                pm: ['अपराह्न', 'अ'],
+                eras: ['A.D.'],
+                patterns: {
+                    d: 'dd-MM-yyyy', D: 'dd MMMM yyyy',
+                    f: 'dd MMMM yyyy HH:mm', F: 'dd MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'dd MMMM', M: 'dd MMMM',
+                    y: 'MMMM, yyyy', Y: 'MMMM, yyyy',
+                    g: 'dd-MM-yyyy HH:mm', G: 'dd-MM-yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+                fiscalYearOffsets: [3, 3]
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} आइटम चयनित'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} आइटम)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 आरोही',
+            descending: '\u2193 अवरोही',
+            apply: 'लागू करें',
+            clear: 'साफ़ करें',
+            conditions: 'शर्त के अनुसार फ़िल्टर करें',
+            values: 'मान के अनुसार फ़िल्टर करें',
+            // value filter
+            search: 'खोज',
+            selectAll: 'सभी का चयन करे',
+            null: '(कुछ नहीं)',
+            // condition filter
+            header: 'वे आइटम दिखाएँ जहाँ मान',
+            and: 'और',
+            or: 'या',
+            stringOperators: [
+                { name: '(सेट नहीं है)', op: null },
+                { name: 'बराबर है', op: 0 },
+                { name: 'बराबर नहीं है', op: 1 },
+                { name: 'इससे आरंभ होता है', op: 6 },
+                { name: 'इससे समाप्त होता है', op: 7 },
+                { name: 'जिसमें शामिल है', op: 8 },
+                { name: 'जिसमें शामिल नहीं है', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(सेट नहीं है)', op: null },
+                { name: 'बराबर है', op: 0 },
+                { name: 'बराबर नहीं है', op: 1 },
+                { name: 'इससे अधिक है', op: 2 },
+                { name: 'इससे अधिक या बराबर है', op: 3 },
+                { name: 'इससे कम है', op: 4 },
+                { name: 'इससे कम या बराबर है', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(सेट नहीं है)', op: null },
+                { name: 'बराबर है', op: 0 },
+                { name: 'इससे पहले है', op: 4 },
+                { name: 'इसके बाद है', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(सेट नहीं है)', op: null },
+                { name: 'बराबर है', op: 0 },
+                { name: 'बराबर नहीं है', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'फ़ील्ड सेटिंग्स:',
+                header: 'हैडर:',
+                summary: 'सारांश:',
+                showAs: 'के रूप में दिखाएँ:',
+                weighBy: 'द्वारा वजन:',
+                sort: 'सॉर्ट:',
+                filter: 'फ़िल्टर करें:',
+                format: 'स्वरूप:',
+                sample: 'नमूना:',
+                edit: 'संपादित करें …',
+                clear: 'साफ़ करें',
+                ok: 'ठीक',
+                cancel: 'रद्द करें',
+                none: '(कोई नहीं)',
+                sorts: {
+                    asc: 'आरोही',
+                    desc: 'अवरोही'
+                },
+                aggs: {
+                    sum: 'योग',
+                    cnt: 'गिनती',
+                    avg: 'औसत',
+                    max: 'मैक्स',
+                    min: 'मिनट',
+                    rng: 'रेंज',
+                    std: 'मानक विचलन',
+                    var: 'प्रसरण',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'कोई परिकलन नहीं',
+                    dRow: 'पिछली पंक्ति से अंतर',
+                    dRowPct: '% अंतर पिछले पंक्ति से',
+                    dCol: 'पिछले स्तंभ से अंतर',
+                    dColPct: '% अंतर पिछले स्तंभ से',
+                    dPctGrand: 'महायोग का %',
+                    dPctRow: 'कुल पंक्ति का %',
+                    dPctCol: 'स्तंभ कुल का %',
+                    dRunTot: 'चल कुल',
+                    dRunTotPct: '% कुल'
+                },
+                formats: {
+                    n0: 'पूर्णांक (n0)',
+                    n2: 'दशमलव (n2)',
+                    c: 'मुद्रा (c)',
+                    p0: 'प्रतिशत (p0)',
+                    p2: 'प्रतिशत (p2)',
+                    n2c: 'हजारों (n2,)',
+                    n2cc: 'लाखों (n2,,,)',
+                    n2ccc: 'अरबों (n2,)',
+                    d: 'दिनांक (d)',
+                    MMMMddyyyy: 'महीने के दिन के वर्ष (MMMM dd, yyyy)',
+                    dMyy: 'दिन महीने साल (d/M/yy)',
+                    ddMyy: 'दिन महीने साल (dd/M/yy)',
+                    dMyyyy: 'दिन महीने साल (dd/M/yyyy)',
+                    MMMyyyy: 'माह वर्ष (MMM yyyy)',
+                    MMMMyyyy: 'माह वर्ष (MMMM yyyy)',
+                    yyyyQq: 'वर्ष तिमाही (yyyy "Q"q)',
+                    FYEEEEQU: 'वित्तीय वर्ष तिमाही (\'FY\'EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'महायोग',
+                subTotal: 'उप-योग'
+            },
+            PivotPanel: {
+                fields: 'रिपोर्ट करने के लिए जोड़ने के लिए फ़ील्ड्स का चयन करें:',
+                drag: 'नीचे दिए गए क्षेत्रों के बीच फ़ील्ड्स खींचें:',
+                filters: 'फ़िल्टर',
+                cols: 'स्तंभ',
+                rows: 'पंक्तियाँ',
+                vals: 'मान',
+                defer: 'अद्यतन रोकें',
+                update: 'अद्यतन'
+            },
+            _ListContextMenu: {
+                up: 'ऊपर ले जाएँ',
+                down: 'नीचे ले जाएँ',
+                first: 'प्रारंभ पर ले जाएँ',
+                last: 'अंत करने के लिए ले जाएँ',
+                filter: 'रिपोर्ट फ़िल्टर तक ले जाएँ',
+                rows: 'पंक्ति लेबल्स तक ले जाएँ',
+                cols: 'स्तंभ लेबल्स तक ले जाएँ',
+                vals: 'मानों तक ले जाएँ',
+                remove: 'फ़ील्ड निकालें',
+                edit: 'फ़ील्ड सेटिंग…',
+                detail: 'विवरण दिखाएँ…'
+            },
+            PivotChart: {
+                by: 'द्वारा',
+                and: 'and'
+            },
+            DetailDialog: {
+                header: 'विस्तार से देखें:',
+                ok: 'ठीक',
+                items: '{cnt:n0} आइटम',
+                item: '{cnt} आइटम',
+                row: 'पंक्ति',
+                col: 'COLUMN'
+            }
+        },
+        Viewer: {
+            cancel: 'रद्द करें',
+            ok: 'ठीक',
+            bottom: 'नीचे:',
+            top: 'ऊपर:',
+            right: 'अधिकार:',
+            left: 'बाएँ:',
+            margins: 'हाशिए (इंच)',
+            orientation: '方向:',
+            paperKind: 'कागज प्रकार:',
+            pageSetup: 'पृष्ठ सेटअप',
+            landscape: 'लैंडस्केप',
+            portrait: 'पोर्ट्रेट',
+            pageNumber: 'पृष्ठ क्रमांक',
+            zoomFactor: 'ज़ूम के कारक',
+            paginated: 'लेआउट मुद्रित करें',
+            print: 'मुद्रण',
+            search: 'खोज',
+            matchCase: 'केस मिलाएँ',
+            wholeWord: 'केवल पूरे शब्द मिलाएँ',
+            searchResults: 'खोज परिणाम',
+            previousPage: 'पिछला पृष्ठ',
+            nextPage: 'अगला पृष्ठ',
+            firstPage: 'प्रथम पृष्ठ',
+            lastPage: 'अंतिम पृष्ठ',
+            backwardHistory: 'पश्चगामी',
+            forwardHistory: 'अग्रेषित करें',
+            pageCount: 'पृष्ठ गणना',
+            selectTool: 'उपकरण का चयन करें',
+            moveTool: 'उपकरण ले जाएँ',
+            continuousMode: 'सतत पृष्ठ दृश्य',
+            singleMode: 'एकल पृष्ठ दृश्य',
+            wholePage: 'फिट पूरे पृष्ठ',
+            pageWidth: 'पृष्ठ चौड़ाई पर फ़िट',
+            zoomOut: 'ज़ूम आउट करें',
+            zoomIn: 'ज़ूम इन करें',
+            exports: 'निर्यात करें',
+            fullScreen: 'फ़ुल स्क्रीन',
+            exitFullScreen: 'पूर्ण स्क्रीन से बाहर निकलें',
+            thumbnails: 'पृष्ठ थंबनेल',
+            outlines: 'दस्तावेज़ मैप',
+            loading: 'लोड हो रहा है…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'वेब संग्रह (MHTML)',
+            htmlExportName: 'HTML दस्तावेज़',
+            rtfExportName: 'RTF दस्तावेज़',
+            metafileExportName: 'संपीड़ित मेटाफ़ाइलें',
+            csvExportName: 'CSV',
+            tiffExportName: 'Tiff छवियाँ',
+            bmpExportName: 'BMP छवियों',
+            emfExportName: 'एनहांस्ड मेटाफ़ाइल',
+            gifExportName: 'GIF छवियाँ',
+            jpgExportName: 'JPEG छवियों',
+            jpegExportName: 'JPEG छवियों',
+            pngExportName: 'PNG छवियों',
+            parameters: 'पैरामीटर',
+            requiringParameters: 'कृपया इनपुट पैरामीटर्स।',
+            nullParameterError: 'मान नल नहीं हो सकते.',
+            invalidParameterError: 'अमान्य इनपुट।',
+            parameterNoneItemsSelected: '(कोई नहीं)',
+            parameterAllItemsSelected: '(सभी)',
+            parameterSelectAllItemText: '(सभी का चयन करें)',
+            selectParameterValue: '(मान का चयन करें)',
+            apply: 'लागू करें',
+            errorOccured: 'कोई त्रुटि हो गई है.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.hi.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.hi.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.hr.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: hr (Croatian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'hr',
+            displayName: 'Croatian',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: 'kn', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],
+                daysAbbr: ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],
+                months: ['siječanj', 'veljača', 'ožujak', 'travanj', 'svibanj', 'lipanj', 'srpanj', 'kolovoz', 'rujan', 'listopad', 'studeni', 'prosinac'],
+                monthsAbbr: ['sij', 'vlj', 'ožu', 'tra', 'svi', 'lip', 'srp', 'kol', 'ruj', 'lis', 'stu', 'pro'],
+                am: ['', ''],
+                pm: ['', ''],
+                eras: ['n.e.'],
+                patterns: {
+                    d: 'd.M.yyyy.', D: 'd. MMMM yyyy.',
+                    f: 'd. MMMM yyyy. H:mm', F: 'd. MMMM yyyy. H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'MMMM, yyyy', Y: 'MMMM, yyyy',
+                    g: 'd.M.yyyy. H:mm', G: 'd.M.yyyy. H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} stavki odabrano'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} stavke)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Uzlazno',
+            descending: '\u2193 Silazno',
+            apply: 'Primijeni',
+            clear: 'Očisti',
+            conditions: 'Filtriraj prema uvjetu',
+            values: 'Filtriraj prema vrijednosti',
+            // value filter
+            search: 'Traži',
+            selectAll: 'Odaberi sve',
+            null: '(ništa)',
+            // condition filter
+            header: 'Prikaži stavke gdje je vrijednost',
+            and: 'I',
+            or: 'Ili',
+            stringOperators: [
+                { name: '(nije postavljeno)', op: null },
+                { name: 'Jednako', op: 0 },
+                { name: 'Nije jednako', op: 1 },
+                { name: 'Počinje s', op: 6 },
+                { name: 'Završava s', op: 7 },
+                { name: 'Sadrži', op: 8 },
+                { name: 'Ne sadrži', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nije postavljeno)', op: null },
+                { name: 'Jednako', op: 0 },
+                { name: 'Nije jednako', op: 1 },
+                { name: 'Veće od', op: 2 },
+                { name: 'Veće od ili jednako', op: 3 },
+                { name: 'Manje od', op: 4 },
+                { name: 'Manje od ili jednako', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nije postavljeno)', op: null },
+                { name: 'Jednako', op: 0 },
+                { name: 'Prije', op: 4 },
+                { name: 'Poslije', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nije postavljeno)', op: null },
+                { name: 'Jednako', op: 0 },
+                { name: 'Nije jednako', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Postavke polja:',
+                header: 'Zagl.:',
+                summary: 'Sažetak:',
+                showAs: 'Prikazati kao:',
+                weighBy: 'Vagati po:',
+                sort: 'Sortiranje:',
+                filter: 'Filtriraj:',
+                format: 'Oblik:',
+                sample: 'Uzorak:',
+                edit: 'Uredi…',
+                clear: 'Očisti',
+                ok: 'U redu',
+                cancel: 'Odustani',
+                none: '(nijedan)',
+                sorts: {
+                    asc: 'Uzlazno',
+                    desc: 'Silazno'
+                },
+                aggs: {
+                    sum: 'Zbroj',
+                    cnt: 'Broj',
+                    avg: 'Prosjek',
+                    max: 'Maks.',
+                    min: 'Min.',
+                    rng: 'Raspon',
+                    std: 'StdDev',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Bez izračuna',
+                    dRow: 'Razlika u odnosu na prethodni redak',
+                    dRowPct: '% Razlika u odnosu na prethodni redak',
+                    dCol: 'Razlika od prethodnog stupca',
+                    dColPct: '% Razlika u odnosu na prethodni stupac',
+                    dPctGrand: '% sveukupne vrijednosti',
+                    dPctRow: '% redak Ukupno',
+                    dPctCol: '% Stupac Ukupno',
+                    dRunTot: 'Tekući zbroj',
+                    dRunTotPct: 'Tekući zbroj %'
+                },
+                formats: {
+                    n0: 'Cijeli broj (n0)',
+                    n2: 'Decimal (n2)',
+                    c: 'Valute (c)',
+                    p0: 'Postotak (p0)',
+                    p2: 'Postotak (p2)',
+                    n2c: 'Tisuće (n2,)',
+                    n2cc: 'Milijuna (n2,,)',
+                    n2ccc: 'Milijarde (n2,,,)',
+                    d: 'Datum (d)',
+                    MMMMddyyyy: 'Mjesec dan godina (MMMM dd, yyyy)',
+                    dMyy: 'Dan mjesec godina (d/M/yy)',
+                    ddMyy: 'Dan mjesec godina (dd/M/yy)',
+                    dMyyyy: 'Dan mjesec godina (dd/M/yyyy)',
+                    MMMyyyy: 'Mjesec godine (MMM yyyy)',
+                    MMMMyyyy: 'Mjesec godine (MMMM yyyy)',
+                    yyyyQq: 'Godina kvartal (yyyy "Q"q)',
+                    FYEEEEQU: 'Tromjesečje fiskalne godine ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Sveukupni zbroj',
+                subTotal: 'Podzbroj'
+            },
+            PivotPanel: {
+                fields: 'Odaberite polja koja želite dodati u izvješće:',
+                drag: 'Vucite polja između donjih površina:',
+                filters: 'Filtri',
+                cols: 'Stupci',
+                rows: 'Reci',
+                vals: 'Vrijednosti',
+                defer: 'Odgoditi ažuriranja',
+                update: 'Ažuriraj'
+            },
+            _ListContextMenu: {
+                up: 'Premjesti gore',
+                down: 'Premjesti dolje',
+                first: 'Premjesti na početak',
+                last: 'Premjesti na kraj',
+                filter: 'Premjesti u filtar izvješća',
+                rows: 'Premjesti u natpise redaka',
+                cols: 'Premjesti u natpise stupaca',
+                vals: 'Premjesti u vrijednosti',
+                remove: 'Ukloni polje',
+                edit: 'Postavke polja…',
+                detail: 'Pokaži detalj…'
+            },
+            PivotChart: {
+                by: 'po',
+                and: 'i'
+            },
+            DetailDialog: {
+                header: 'Detalj pogled:',
+                ok: 'U redu',
+                items: '{cnt:n0} stavke',
+                item: '{cnt} stavku',
+                row: 'Redak',
+                col: 'Stupac'
+            }
+        },
+        Viewer: {
+            cancel: 'Odustani',
+            ok: 'U redu',
+            bottom: 'Donja:',
+            top: 'Gornja:',
+            right: 'Desna:',
+            left: 'Lijeva:',
+            margins: 'Margine (inči)',
+            orientation: 'Orijentacija:',
+            paperKind: 'Vrste papira:',
+            pageSetup: 'Postavljanje stranice',
+            landscape: 'Pejzaž',
+            portrait: 'Portret',
+            pageNumber: 'Broj stranice',
+            zoomFactor: 'Zumiranja faktor',
+            paginated: 'Izgled ispisa',
+            print: 'Ispis',
+            search: 'Traži',
+            matchCase: 'Razlikuj velika i mala slova',
+            wholeWord: 'Traži samo cijele riječi',
+            searchResults: 'Rezultati pretraživanja',
+            previousPage: 'Prethodna stranica',
+            nextPage: 'Sljedeća stranica',
+            firstPage: 'Prva stranica',
+            lastPage: 'Posljednja stranica',
+            backwardHistory: 'Unatrag',
+            forwardHistory: 'Proslijedi',
+            pageCount: 'Broj stranica',
+            selectTool: 'Odaberite alat',
+            moveTool: 'Pomicanje',
+            continuousMode: 'Kontinuirani prikaz stranice',
+            singleMode: 'Jedna stranica pogled',
+            wholePage: 'Stane cijela stranica',
+            pageWidth: 'Prilagodi širinu stranice',
+            zoomOut: 'Smanji',
+            zoomIn: 'Povećaj',
+            exports: 'Izvoz',
+            fullScreen: 'Cijeli zaslon',
+            exitFullScreen: 'Izlaz iz prikaza na cijelom zaslonu',
+            thumbnails: 'Sličice stranica',
+            outlines: 'Karta dokumenta',
+            loading: 'Učitavanje…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Excel Open XML',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web-arhiva (MHTML)',
+            htmlExportName: 'HTML dokument',
+            rtfExportName: 'RTF dokument',
+            metafileExportName: 'Stisnut metadatoteke',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF slika',
+            bmpExportName: 'BMP slike',
+            emfExportName: 'Poboljšana metadatoteka',
+            gifExportName: 'GIF slike',
+            jpgExportName: 'JPEG slike',
+            jpegExportName: 'JPEG slike',
+            pngExportName: 'PNG slika',
+            parameters: 'Parametri',
+            requiringParameters: 'Unesite parametre.',
+            nullParameterError: 'Vrijednost ne može biti null.',
+            invalidParameterError: 'Unos nije valjan.',
+            parameterNoneItemsSelected: '(nijedan)',
+            parameterAllItemsSelected: '(sve)',
+            parameterSelectAllItemText: '(Odaberi sve)',
+            selectParameterValue: '(odaberite vrijednost)',
+            apply: 'Primijeni',
+            errorOccured: 'Dogodila se pogreška.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.hr.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.hr.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.hu.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: hu (Hungarian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'hu',
+            displayName: 'Hungarian',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: 'Ft', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '. ',
+                ':': ':',
+                firstDay: 1,
+                days: ['vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat'],
+                daysAbbr: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+                months: ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december'],
+                monthsAbbr: ['jan.', 'febr.', 'márc.', 'ápr.', 'máj.', 'jún.', 'júl.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'],
+                am: ['de.', 'de.'],
+                pm: ['du.', 'du.'],
+                eras: ['i. sz.'],
+                patterns: {
+                    d: 'yyyy. MM. dd.', D: 'yyyy. MMMM d., dddd',
+                    f: 'yyyy. MMMM d., dddd H:mm', F: 'yyyy. MMMM d., dddd H:mm:ss',
+                    t: 'H:mm', T: 'H:mm:ss',
+                    m: 'MMMM d.', M: 'MMMM d.',
+                    y: 'yyyy. MMMM', Y: 'yyyy. MMMM',
+                    g: 'yyyy. MM. dd. H:mm', G: 'yyyy. MM. dd. H:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} kiválasztott tételek'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} elemek)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Növekvő',
+            descending: '\u2193 Csökkenő',
+            apply: 'Alkalmaz',
+            clear: 'Törlés',
+            conditions: 'Szűrés feltétel szerint',
+            values: 'Szűrés érték szerint',
+            // value filter
+            search: 'Keresés',
+            selectAll: 'Az összes kiválasztása',
+            null: '(semmi)',
+            // condition filter
+            header: 'Olyan elemek megjelenítése, ahol az érték',
+            and: 'És',
+            or: 'vagy',
+            stringOperators: [
+                { name: '(nincs megadva)', op: null },
+                { name: 'egyenlő', op: 0 },
+                { name: 'Nem egyenlő', op: 1 },
+                { name: 'Ezzel kezdődik', op: 6 },
+                { name: 'Ezzel végződik', op: 7 },
+                { name: 'Tartalmazza a következőt', op: 8 },
+                { name: 'Nem tartalmazza a következőt', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nincs megadva)', op: null },
+                { name: 'egyenlő', op: 0 },
+                { name: 'Nem egyenlő', op: 1 },
+                { name: 'Nagyobb, mint', op: 2 },
+                { name: 'Nagyobb vagy egyenlő', op: 3 },
+                { name: 'Kisebb, mint', op: 4 },
+                { name: 'Kisebb vagy egyenlő', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nincs megadva)', op: null },
+                { name: 'egyenlő', op: 0 },
+                { name: 'Korábbi', op: 4 },
+                { name: 'Későbbi', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nincs megadva)', op: null },
+                { name: 'egyenlő', op: 0 },
+                { name: 'Nem egyenlő', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Értékmező-beállítások:',
+                header: 'Táblafej:',
+                summary: 'Összegzés:',
+                showAs: 'Mutat, mint:',
+                weighBy: 'Mérjük meg a:',
+                sort: 'Rendezés:',
+                filter: 'Szűrő:',
+                format: 'Formátum:',
+                sample: 'Minta:',
+                edit: 'Szerkesztése…',
+                clear: 'Törlés',
+                ok: 'OK',
+                cancel: 'Mégse',
+                none: '(semmi)',
+                sorts: {
+                    asc: 'Növekvő',
+                    desc: 'Csökkenő'
+                },
+                aggs: {
+                    sum: 'Összeg',
+                    cnt: 'Darabszám',
+                    avg: 'Átlag',
+                    max: 'Max',
+                    min: 'Min',
+                    rng: 'Tartomány',
+                    std: 'Szórás',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Nincs számítás',
+                    dRow: 'Különbség az előző sor',
+                    dRowPct: 'Különbség az előző sor %',
+                    dCol: 'Különbség az előző oszlop',
+                    dColPct: 'Különbség az előző oszlop %',
+                    dPctGrand: 'végösszeg százaléka',
+                    dPctRow: '%-a teljes sor',
+                    dPctCol: '%-a teljes oszlop',
+                    dRunTot: 'Göngyölített összeg',
+                    dRunTotPct: '%-os teljes'
+                },
+                formats: {
+                    n0: 'Egész szám (n0)',
+                    n2: 'Decimális (n2)',
+                    c: 'Pénznem (c)',
+                    p0: 'Százalék (p0)',
+                    p2: 'Százalék (p2)',
+                    n2c: 'Több ezer (n2,)',
+                    n2cc: 'Több millió (n2,,)',
+                    n2ccc: 'Milliárd (n2,,,)',
+                    d: 'Dátum (d)',
+                    MMMMddyyyy: 'Év hónap nap (MMMM dd, yyyy)',
+                    dMyy: 'Év hónap nap (d/M/yy)',
+                    ddMyy: 'Év hónap nap (dd/M/yy)',
+                    dMyyyy: 'Év hónap nap (dd/M/yyyy)',
+                    MMMyyyy: 'Év hónap (MMM yyyy)',
+                    MMMMyyyy: 'Év hónap (MMMM yyyy)',
+                    yyyyQq: 'Évben negyed (yyyy"Q" q)',
+                    FYEEEEQU: 'Pénzügyi év negyed ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Végösszeg',
+                subTotal: 'Részösszeg'
+            },
+            PivotPanel: {
+                fields: 'Mezők felvétele a jelentés kiválasztása:',
+                drag: 'Húzza a mezőket a lenti területek közé:',
+                filters: 'Szűrők',
+                cols: 'Oszlopok',
+                rows: 'Sorok',
+                vals: 'érték lesz.',
+                defer: 'Elhalasztja a frissítések',
+                update: 'Frissítés'
+            },
+            _ListContextMenu: {
+                up: 'Feljebb',
+                down: 'Lejjebb',
+                first: 'Elejére',
+                last: 'Ugrás végére',
+                filter: 'Áthelyezés a jelentésszűrőhöz',
+                rows: 'Áthelyezés a sorcímkékhez',
+                cols: 'Áthelyezés az oszlopcímkékhez',
+                vals: 'Áthelyezés az értékekhez',
+                remove: 'Mező eltávolítása',
+                edit: 'Mezőbeállítások…',
+                detail: 'Részletek megjelenítése…'
+            },
+            PivotChart: {
+                by: 'az',
+                and: 'és'
+            },
+            DetailDialog: {
+                header: 'Részlet nézet:',
+                ok: 'OK',
+                items: '{cnt:n0} elem',
+                item: 'cikk {cnt}',
+                row: 'Sor',
+                col: 'Oszlop'
+            }
+        },
+        Viewer: {
+            cancel: 'Mégse',
+            ok: 'OK',
+            bottom: 'Alsó:',
+            top: 'Felső:',
+            right: 'Jobb:',
+            left: 'Bal:',
+            margins: 'Margók (hüvelyk)',
+            orientation: 'Tájolás:',
+            paperKind: 'Papír-fajta:',
+            pageSetup: 'Oldalbeállítás',
+            landscape: 'Fekvő',
+            portrait: 'Álló',
+            pageNumber: 'Oldalszám',
+            zoomFactor: 'Zoom tényező',
+            paginated: 'Nyomtatási elrendezés',
+            print: 'Nyomtatás',
+            search: 'Keresés',
+            matchCase: 'Kis- és nagybetűk megkülönböztetése',
+            wholeWord: 'Csak teljes szavak',
+            searchResults: 'Keresés eredménye',
+            previousPage: 'Előző oldal',
+            nextPage: 'Következő oldal',
+            firstPage: 'Első oldal',
+            lastPage: 'Utolsó oldal',
+            backwardHistory: 'Vissza',
+            forwardHistory: 'Előre',
+            pageCount: 'Oldalak száma',
+            selectTool: 'Válassza ki az eszköz',
+            moveTool: 'Lépés eszköz',
+            continuousMode: 'Folyamatos lap nézetben',
+            singleMode: 'Egyetlen lap nézetben',
+            wholePage: 'Az egész Oldalhoz igazítás',
+            pageWidth: 'Oldal szélességének megfelelően',
+            zoomOut: 'Kicsinyítés',
+            zoomIn: 'Nagyítás',
+            exports: 'Exportálás',
+            fullScreen: 'Teljes képernyő',
+            exitFullScreen: 'Kilépés a teljes képernyős módból',
+            thumbnails: 'Az oldalbélyegképek',
+            outlines: 'Dokumentumtérkép',
+            loading: 'Betöltése…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Webarchívum (MHTML)',
+            htmlExportName: 'HTML-dokumentum',
+            rtfExportName: 'RTF-dokumentum',
+            metafileExportName: 'Tömörített metafájlok',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-képek',
+            bmpExportName: 'BMP-képek',
+            emfExportName: 'Bővített metafájl',
+            gifExportName: 'GIF képek',
+            jpgExportName: 'JPEG-képek',
+            jpegExportName: 'JPEG-képek',
+            pngExportName: 'PNG képek',
+            parameters: 'Parameters',
+            requiringParameters: 'Kérjük bemeneti paramétereket.',
+            nullParameterError: 'Az érték nem lehet null.',
+            invalidParameterError: 'Hibás belépési.',
+            parameterNoneItemsSelected: '(semmi)',
+            parameterAllItemsSelected: '(összes)',
+            parameterSelectAllItemText: '(Mindegyik kiválasztása)',
+            selectParameterValue: '(válassza ki az értéket)',
+            apply: 'Alkalmaz',
+            errorOccured: 'Hiba történt.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.hu.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.hu.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.id.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: id (Indonesian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'id',
+            displayName: 'Indonesian',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 0, symbol: 'Rp', pattern: ['-$n', '$n'] }
+            },
+            calendar: {
+                '/': '/',
+                ':': '.',
+                firstDay: 0,
+                days: ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'],
+                daysAbbr: ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],
+                months: ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'],
+                monthsAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agt', 'Sep', 'Okt', 'Nov', 'Des'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['M'],
+                patterns: {
+                    d: 'dd/MM/yyyy', D: 'dddd, dd MMMM yyyy',
+                    f: 'dddd, dd MMMM yyyy HH.mm', F: 'dddd, dd MMMM yyyy HH.mm.ss',
+                    t: 'HH.mm', T: 'HH.mm.ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd/MM/yyyy HH.mm', G: 'dd/MM/yyyy HH.mm.ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} item yang dipilih'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}:  <b> {value} </b>  ({count:n0} item)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Menaik',
+            descending: '\u2193 Menurun',
+            apply: 'Terapkan',
+            clear: 'Bersihkan',
+            conditions: 'Filter berdasarkan Kondisi',
+            values: 'Filter berdasarkan Nilai',
+            // value filter
+            search: 'Cari',
+            selectAll: 'Pilih Semua',
+            null: '(tidak ada)',
+            // condition filter
+            header: 'Tampilkan item dengan nilai',
+            and: 'Dan',
+            or: 'Atau',
+            stringOperators: [
+                { name: '(tidak ditetapkan)', op: null },
+                { name: 'Sama dengan', op: 0 },
+                { name: 'Tidak sama dengan', op: 1 },
+                { name: 'Dimulai dengan', op: 6 },
+                { name: 'Diakhiri dengan', op: 7 },
+                { name: 'Berisi', op: 8 },
+                { name: 'Tidak berisi', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(tidak ditetapkan)', op: null },
+                { name: 'Sama dengan', op: 0 },
+                { name: 'Tidak sama dengan', op: 1 },
+                { name: 'Besar dari', op: 2 },
+                { name: 'Besar dari atau sama dengan', op: 3 },
+                { name: 'Kurang dari', op: 4 },
+                { name: 'Kurang dari atau sama dengan', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(tidak ditetapkan)', op: null },
+                { name: 'Sama dengan', op: 0 },
+                { name: 'sebelum', op: 4 },
+                { name: 'Setelah', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(tidak ditetapkan)', op: null },
+                { name: 'Sama dengan', op: 0 },
+                { name: 'Tidak sama dengan', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Pengaturan bidang:',
+                header: 'Header:',
+                summary: 'Ringkasan:',
+                showAs: 'Tampilkan sebagai:',
+                weighBy: 'Menimbang oleh:',
+                sort: 'Urutkan:',
+                filter: 'Filter:',
+                format: 'Format:',
+                sample: 'Contoh:',
+                edit: 'Mengedit…',
+                clear: 'Bersihkan',
+                ok: 'OK',
+                cancel: 'Batal',
+                none: '(tidak ada)',
+                sorts: {
+                    asc: 'Naik',
+                    desc: 'Turun'
+                },
+                aggs: {
+                    sum: 'Jumlah',
+                    cnt: 'Hitung',
+                    avg: 'Rata-Rata',
+                    max: 'Maks',
+                    min: 'Min',
+                    rng: 'Rentang',
+                    std: 'StdDev',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Tidak ada Perhitungan',
+                    dRow: 'Perbedaan dari baris sebelumnya',
+                    dRowPct: '% Perbedaan dari baris sebelumnya',
+                    dCol: 'Perbedaan dari kolom sebelumnya',
+                    dColPct: '% Perbedaan dari kolom sebelumnya',
+                    dPctGrand: '% dari grand total',
+                    dPctRow: '% dari total baris',
+                    dPctCol: '% dari total kolom',
+                    dRunTot: 'Menjalankan total',
+                    dRunTotPct: 'menjalankan total %'
+                },
+                formats: {
+                    n0: 'Bulat (n0)',
+                    n2: 'Desimal (n2)',
+                    c: 'Mata uang (c)',
+                    p0: 'Persentase (p0)',
+                    p2: 'Persentase (p2)',
+                    n2c: 'Ribuan (n2,)',
+                    n2cc: 'Jutaan (n2,,)',
+                    n2ccc: 'Miliaran (n2,,,)',
+                    d: 'Tanggal (d)',
+                    MMMMddyyyy: 'Bulan hari tahun (MMMM dd, yyyy)',
+                    dMyy: 'Hari bulan tahun (d/M/yy)',
+                    ddMyy: 'Hari bulan tahun (dd/M/yy)',
+                    dMyyyy: 'Hari bulan tahun (dd/M/yyyy)',
+                    MMMyyyy: 'Bulan tahun (MMM yyyy)',
+                    MMMMyyyy: 'Bulan tahun (MMMM yyyy)',
+                    yyyyQq: 'Kuartal tahun (yyyy "Q"q)',
+                    FYEEEEQU: 'Kuartal fiskal tahun ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Total Keseluruhan',
+                subTotal: 'Subtotal'
+            },
+            PivotPanel: {
+                fields: 'Memilih bidang untuk menambahkan ke laporan:',
+                drag: 'Seret bidang antara area di bawah:',
+                filters: 'Filter',
+                cols: 'Kolom',
+                rows: 'Baris',
+                vals: 'Nilai',
+                defer: 'Menunda update',
+                update: 'Perbarui'
+            },
+            _ListContextMenu: {
+                up: 'Pindah ke Atas',
+                down: 'Pindah ke Bawah',
+                first: 'Pindahkan ke Awal',
+                last: 'Pindah ke Akhir',
+                filter: 'Pindahkan ke Filter Laporan',
+                rows: 'Pindahkan ke Label Baris',
+                cols: 'Pindahkan ke Label Kolom',
+                vals: 'Pindahkan ke Nilai',
+                remove: 'Hapus Bidang',
+                edit: 'Setelan Bidang…',
+                detail: 'Tampilkan Detail…'
+            },
+            PivotChart: {
+                by: 'oleh',
+                and: 'dan'
+            },
+            DetailDialog: {
+                header: 'Tampilan detail:',
+                ok: 'OK',
+                items: '{cnt:n0} item',
+                item: '{cnt} item',
+                row: 'Baris',
+                col: 'Kolom'
+            }
+        },
+        Viewer: {
+            cancel: 'Batal',
+            ok: 'OK',
+            bottom: 'Bawah:',
+            top: 'Paling atas:',
+            right: 'Kanan:',
+            left: 'Kiri:',
+            margins: 'Margin (inci)',
+            orientation: 'Orientasi:',
+            paperKind: 'Jenis kertas:',
+            pageSetup: 'Penyetelan Halaman',
+            landscape: 'Lanskap',
+            portrait: 'Potret',
+            pageNumber: 'Nomor Halaman',
+            zoomFactor: 'Faktor zoom',
+            paginated: 'Tata letak cetak',
+            print: 'Cetak',
+            search: 'Cari',
+            matchCase: 'Cocokkan huruf besar/kecil',
+            wholeWord: 'Cocok keseluruhan kata',
+            searchResults: 'Hasil Pencarian',
+            previousPage: 'Halaman Sebelumnya',
+            nextPage: 'Halaman Berikutnya',
+            firstPage: 'Halaman Pertama',
+            lastPage: 'Halaman Terakhir',
+            backwardHistory: 'Mundur',
+            forwardHistory: 'Teruskan',
+            pageCount: 'Hitung Halaman',
+            selectTool: 'Pilih Alat',
+            moveTool: 'Memindahkan alat',
+            continuousMode: 'Terus-menerus tampilan halaman',
+            singleMode: 'Tampilan Halaman tunggal',
+            wholePage: 'Cocok seluruh halaman',
+            pageWidth: 'Sesuai lebar halaman',
+            zoomOut: 'Perkecil',
+            zoomIn: 'Perbesar',
+            exports: 'Ekspor',
+            fullScreen: 'Layar penuh',
+            exitFullScreen: 'Keluar dari layar penuh',
+            thumbnails: 'Halaman thumbnail',
+            outlines: 'Peta Dokumen',
+            loading: 'Memuat…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web Arsip (MHTML)',
+            htmlExportName: 'Dokumen HTML',
+            rtfExportName: 'RTF dokumen',
+            metafileExportName: 'Terkompresi metafiles',
+            csvExportName: 'CSV',
+            tiffExportName: 'Gambar TIFF',
+            bmpExportName: 'Gambar BMP',
+            emfExportName: 'Enhanced metafile',
+            gifExportName: 'Gambar GIF',
+            jpgExportName: 'Gambar JPEG',
+            jpegExportName: 'Gambar JPEG',
+            pngExportName: 'Gambar PNG',
+            parameters: 'Parameter',
+            requiringParameters: 'Silahkan masukan parameter.',
+            nullParameterError: 'Nilai tidak boleh null.',
+            invalidParameterError: 'Valid masukan.',
+            parameterNoneItemsSelected: '(tidak ada)',
+            parameterAllItemsSelected: '(semua)',
+            parameterSelectAllItemText: '(Pilih Semua)',
+            selectParameterValue: '(pilih nilai)',
+            apply: 'Terapkan',
+            errorOccured: 'Sebuah kesalahan telah terjadi.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.id.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.id.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.kk.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: kk (Kazakh)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'kk',
+            displayName: 'Kazakh',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '₸', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['жексенбі', 'дүйсенбі', 'сейсенбі', 'сәрсенбі', 'бейсенбі', 'жұма', 'сенбі'],
+                daysAbbr: ['Жс', 'Дс', 'Сс', 'Ср', 'Бс', 'Жм', 'Сб'],
+                months: ['Қаңтар', 'Ақпан', 'Наурыз', 'Сәуір', 'Мамыр', 'Маусым', 'Шілде', 'Тамыз', 'Қыркүйек', 'Қазан', 'Қараша', 'Желтоқсан'],
+                monthsAbbr: ['Қаң.', 'Ақп.', 'Нау.', 'Сәу.', 'Мам.', 'Мау.', 'Шіл.', 'Там.', 'Қыр.', 'Қаз.', 'Қар.', 'Жел.'],
+                am: ['таңғы', 'т'],
+                pm: ['түскі/кешкі', 'т'],
+                eras: ['б.з.'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'yyyy "ж". d MMMM, dddd',
+                    f: 'yyyy "ж". d MMMM, dddd HH:mm', F: 'yyyy "ж". d MMMM, dddd HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'yyyy "ж". MMMM', Y: 'yyyy "ж". MMMM',
+                    g: 'dd.MM.yyyy HH:mm', G: 'dd.MM.yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} элементтер таңдалған'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} элемент)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Артуы бойынша',
+            descending: '\u2193 Кемуі бойынша',
+            apply: 'Қолдану',
+            clear: 'Тазалау',
+            conditions: 'Шарты бойынша сүзу',
+            values: 'Мәні бойынша сүзу',
+            // value filter
+            search: 'Іздеу',
+            selectAll: 'Бәрін бөлектеу',
+            null: '(жоқ)',
+            // condition filter
+            header: 'Мәні мынадай элементтерді көрсету',
+            and: 'Және',
+            or: 'Немесе',
+            stringOperators: [
+                { name: '(орнатылмаған)', op: null },
+                { name: 'Тең', op: 0 },
+                { name: 'Тең емес', op: 1 },
+                { name: 'Басталады', op: 6 },
+                { name: 'Аяқталады', op: 7 },
+                { name: 'Құрамында бар', op: 8 },
+                { name: 'Құрамында жоқ', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(орнатылмаған)', op: null },
+                { name: 'Тең', op: 0 },
+                { name: 'Тең емес', op: 1 },
+                { name: 'Үлкендеу', op: 2 },
+                { name: 'Үлкендеу немесе тең', op: 3 },
+                { name: 'Аздау', op: 4 },
+                { name: 'Аздау немесе тең', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(орнатылмаған)', op: null },
+                { name: 'Тең', op: 0 },
+                { name: 'Бұрын', op: 4 },
+                { name: 'кейін', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(орнатылмаған)', op: null },
+                { name: 'Тең', op: 0 },
+                { name: 'Тең емес', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Өріс параметрлері:',
+                header: 'Үст. дерек-е:',
+                summary: 'Тұжырым:',
+                showAs: 'Көрсету:',
+                weighBy: 'арқылы салмағы:',
+                sort: 'Сұрыптау:',
+                filter: 'Сүзгі:',
+                format: 'Пішімі:',
+                sample: 'Үлгі:',
+                edit: 'Өңдеу…',
+                clear: 'Тазарту',
+                ok: 'OK',
+                cancel: 'болдырмау',
+                none: '(жоқ)',
+                sorts: {
+                    asc: 'Артуы бойынша',
+                    desc: 'Кемуі бойынша'
+                },
+                aggs: {
+                    sum: 'Қосынды',
+                    cnt: 'Саны',
+                    avg: 'Орташа',
+                    max: 'Ең көп',
+                    min: 'Ең аз',
+                    rng: 'Ауқым',
+                    std: 'Стандартты ауытқу',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Есептеу жоқ',
+                    dRow: 'Алдыңғы жолға айырмашылығы',
+                    dRowPct: '% Алдыңғы жолға айырмашылығы',
+                    dCol: 'алдыңғы бағанының айырмасы',
+                    dColPct: 'алдыңғы бағанының айырмасы%',
+                    dPctGrand: 'Гранд барлығы%',
+                    dPctRow: 'жол барлығы%',
+                    dPctCol: 'баған барлығы%',
+                    dRunTot: 'Жинақталған жалпы',
+                    dRunTotPct: 'Жинақталған жалпы%'
+                },
+                formats: {
+                    n0: 'бүтін (n0)',
+                    n2: 'ондық (n2)',
+                    c: 'валюта (c)',
+                    p0: 'пайыз (p0)',
+                    p2: 'пайыз (p2)',
+                    n2c: 'мыңдаған (n2,)',
+                    n2cc: 'миллиондаған (n2,,)',
+                    n2ccc: 'миллиардтаған (n2,,,)',
+                    d: 'дата (d)',
+                    MMMMddyyyy: 'Ай Күн Жыл (MMMM dd, yyyy)',
+                    dMyy: 'Күні айы жыл (d/M/yy)',
+                    ddMyy: 'Күні айы жыл (dd/M/yy)',
+                    dMyyyy: 'Күні айы жыл (dd/M/yyyy)',
+                    MMMyyyy: 'Ай жылы (MMM yyyy)',
+                    MMMMyyyy: 'Ай жылы (MMMM yyyy)',
+                    yyyyQq: 'жыл тоқсан (yyyy "Q"q)',
+                    FYEEEEQU: 'Қаржы жылы тоқсан ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Жалпы жиын',
+                subTotal: 'Аралық жиын'
+            },
+            PivotPanel: {
+                fields: 'Есепке қосу үшін өрісті таңдаңыз:',
+                drag: 'Төменде көрсетілген аумақтардың арасымен өрістерді апарыңыз:',
+                filters: 'Сүзгілер',
+                cols: 'бағандар',
+                rows: 'Жолдар',
+                vals: 'Мәндер',
+                defer: 'тапсырдыңыз жаңартулар',
+                update: 'Жаңарту'
+            },
+            _ListContextMenu: {
+                up: 'Жоғары жылжыту',
+                down: 'Төменге',
+                first: 'Басына жылжыту',
+                last: 'Соңына жылжыту',
+                filter: 'Есеп сүзгісіне жылжыту',
+                rows: 'Жол белгілеріне жылжыту',
+                cols: 'Баған белгілеріне жылжыту',
+                vals: 'Мәндерге жылжыту',
+                remove: 'Өрісті жою',
+                edit: 'Өріс параметрлері…',
+                detail: 'Егжей-тегжейлі көрсету…'
+            },
+            PivotChart: {
+                by: 'арқылы',
+                and: 'және'
+            },
+            DetailDialog: {
+                header: 'Нақты көрініс:',
+                ok: 'OK',
+                items: '{cnt:n0} items',
+                item: '{cnt} item',
+                row: 'Жол',
+                col: 'БАҒАН'
+            }
+        },
+        Viewer: {
+            cancel: 'болдырмау',
+            ok: 'OK',
+            bottom: 'Төменгі:',
+            top: 'Жоғарғы:',
+            right: 'Оң жақ:',
+            left: 'Сол жақ:',
+            margins: 'Шеттер (дюймдер)',
+            orientation: 'Бағдар:',
+            paperKind: 'Paper Kind:',
+            pageSetup: 'Бет параметрлері',
+            landscape: 'Альбомдық',
+            portrait: 'Кітаптық',
+            pageNumber: 'Бет нөмірі',
+            zoomFactor: 'Zoom фактор',
+            paginated: 'Орналасуды басып шығару',
+            print: 'басып шығару',
+            search: 'Іздеу',
+            matchCase: 'Регистрді ескеріп',
+            wholeWord: 'Толық сөзді ғана сәйкестендіру',
+            searchResults: 'Іздеу нәтижелері',
+            previousPage: 'Бұрынғы бет',
+            nextPage: 'Келесі бет',
+            firstPage: 'Бірінші бет',
+            lastPage: 'Соңғы бет',
+            backwardHistory: 'Артқа',
+            forwardHistory: 'Алға',
+            pageCount: 'Беттер саны',
+            selectTool: 'таңдау құралы',
+            moveTool: 'Move Tool',
+            continuousMode: 'Continuous Page View',
+            singleMode: 'Бір бетте көрінісі',
+            wholePage: 'Тұтас Page қиыстыру',
+            pageWidth: 'Fit Page Width',
+            zoomOut: 'Кішілеу',
+            zoomIn: 'Ірілеу',
+            exports: 'Экспорттау',
+            fullScreen: 'Толық экранды',
+            exitFullScreen: 'Толық экраннан шығу',
+            thumbnails: 'бет нобайлары',
+            outlines: 'құжат құрылымы',
+            loading: 'Қотарылуда…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web archive (MHTML)',
+            htmlExportName: 'HTML document',
+            rtfExportName: 'RTF құжат',
+            metafileExportName: 'Compressed metafiles',
+            csvExportName: 'CSV',
+            tiffExportName: 'Tiff Суреттер',
+            bmpExportName: 'BMP images',
+            emfExportName: 'Enhanced metafile',
+            gifExportName: 'GIF images',
+            jpgExportName: 'JPEG images',
+            jpegExportName: 'JPEG images',
+            pngExportName: 'PNG Суреттер',
+            parameters: 'Параметрлер',
+            requiringParameters: 'Кіріс параметрлері.',
+            nullParameterError: 'Мән бос бола алмайды.',
+            invalidParameterError: 'Дұрыс емес енгізу',
+            parameterNoneItemsSelected: '(жоқ)',
+            parameterAllItemsSelected: '(бәрі)',
+            parameterSelectAllItemText: '(Бәрін бөлектеу)',
+            selectParameterValue: '(Мәнді таңдау)',
+            apply: 'Қолдану',
+            errorOccured: 'Қате туындады.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.kk.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.kk.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.lt.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: lt (Lithuanian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'lt',
+            displayName: 'Lithuanian',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 1,
+                days: ['sekmadienis', 'pirmadienis', 'antradienis', 'trečiadienis', 'ketvirtadienis', 'penktadienis', 'šeštadienis'],
+                daysAbbr: ['sk', 'pr', 'an', 'tr', 'kt', 'pn', 'št'],
+                months: ['sausis', 'vasaris', 'kovas', 'balandis', 'gegužė', 'birželis', 'liepa', 'rugpjūtis', 'rugsėjis', 'spalis', 'lapkritis', 'gruodis'],
+                monthsAbbr: ['saus.', 'vas.', 'kov.', 'bal.', 'geg.', 'birž.', 'liep.', 'rugp.', 'rugs.', 'spal.', 'lapkr.', 'gruod.'],
+                am: ['priešpiet', 'priešpiet'],
+                pm: ['popiet', 'popiet'],
+                eras: ['po Kr.'],
+                patterns: {
+                    d: 'yyyy-MM-dd', D: 'yyyy "m". MMMM d "d"., dddd',
+                    f: 'yyyy "m". MMMM d "d"., dddd HH:mm', F: 'yyyy "m". MMMM d "d"., dddd HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'MMMM d "d".', M: 'MMMM d "d".',
+                    y: 'yyyy "m". MMMM', Y: 'yyyy "m". MMMM',
+                    g: 'yyyy-MM-dd HH:mm', G: 'yyyy-MM-dd HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} vnt pasirinktas'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} elementai)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Didėjimo tvarka',
+            descending: '\u2193 Mažėjimo tvarka',
+            apply: 'Taikyti',
+            clear: 'Valyti',
+            conditions: 'Filtruoti pagal sąlygą',
+            values: 'Filtruoti pagal reikšmę',
+            // value filter
+            search: 'Ieškoti',
+            selectAll: 'Pasirinkti viską',
+            null: '(nieko)',
+            // condition filter
+            header: 'Rodyti elementus, kur reikšmė',
+            and: 'Ir',
+            or: 'Arba',
+            stringOperators: [
+                { name: '(nenustatyta)', op: null },
+                { name: 'Lygu', op: 0 },
+                { name: 'Nelygu', op: 1 },
+                { name: 'Prasideda', op: 6 },
+                { name: 'Pasibaigia', op: 7 },
+                { name: 'Apima', op: 8 },
+                { name: 'Neapima', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nenustatyta)', op: null },
+                { name: 'Lygu', op: 0 },
+                { name: 'Nelygu', op: 1 },
+                { name: 'Didesnis nei', op: 2 },
+                { name: 'Didesnis arba lygus', op: 3 },
+                { name: 'Mažesnis nei', op: 4 },
+                { name: 'Mažesnis arba lygus', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nenustatyta)', op: null },
+                { name: 'Lygu', op: 0 },
+                { name: 'yra prieš', op: 4 },
+                { name: 'yra po', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nenustatyta)', op: null },
+                { name: 'Lygu', op: 0 },
+                { name: 'Nelygu', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Lauko parametrai:',
+                header: 'Antraštė:',
+                summary: 'Santrauka:',
+                showAs: 'Rodyti kaip:',
+                weighBy: 'Pasveriama iš:',
+                sort: 'Rūšiuoti:',
+                filter: 'Filtruoti:',
+                format: 'Formatas:',
+                sample: 'Imties dydis:',
+                edit: 'Redaguoti…',
+                clear: 'Valyti',
+                ok: 'Gerai',
+                cancel: 'Atšaukti',
+                none: '(nereikia)',
+                sorts: {
+                    asc: 'Didėjimo tvarka',
+                    desc: 'Mažėjimo tvarka'
+                },
+                aggs: {
+                    sum: 'Suma',
+                    cnt: 'Skaičiuoti',
+                    avg: 'Vidurkis',
+                    max: 'Maks',
+                    min: 'Min',
+                    rng: 'Diapazonas',
+                    std: 'Standartinis nuokrypis nuo vidurkio',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Neskaičiuojama',
+                    dRow: 'Skirtumas nuo ankstesnės eilės',
+                    dRowPct: '% Skirtumas nuo ankstesnės eilės',
+                    dCol: 'Skirtumas nuo ankstesnio stulpelio',
+                    dColPct: 'Skirtumas nuo ankstesnio stulpelio %',
+                    dPctGrand: '% iš viso',
+                    dPctRow: 'eilės iš viso proc.',
+                    dPctCol: 'stulpelio suma %',
+                    dRunTot: 'Veikia iš viso',
+                    dRunTotPct: 'veikia iš viso %'
+                },
+                formats: {
+                    n0: 'Sveikasis skaičius (n0)',
+                    n2: 'Dešimtainis (n2)',
+                    c: '(C) valiuta',
+                    p0: 'Procentas (p0)',
+                    p2: 'Procentas (p2)',
+                    n2c: 'Tūkstančiai (n2,)',
+                    n2cc: 'Milijonai (n2,,)',
+                    n2ccc: 'Milijardus (n2,,,)',
+                    d: '(D) data',
+                    MMMMddyyyy: 'Metai mėnuo diena (MMMM dd, yyyy)',
+                    dMyy: 'Diena mėnuo metai (d/M/yy)',
+                    ddMyy: 'Diena mėnuo metai (dd/M/yy)',
+                    dMyyyy: 'Diena mėnuo metai (dd/M/yyyy)',
+                    MMMyyyy: 'Mėnuo metai (MMM yyyy)',
+                    MMMMyyyy: 'Mėnuo metai (MMMM yyyy)',
+                    yyyyQq: 'Metų ketvirtį (yyyy "Q"q)',
+                    FYEEEEQU: 'Fiskalinių metų ketvirtis ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Bendroji suma',
+                subTotal: 'Tarpinė suma'
+            },
+            PivotPanel: {
+                fields: 'Pasirinkite laukus pridėti ataskaitoje:',
+                drag: 'Vilkti laukus tarp toliau esančių sričių:',
+                filters: 'Filtrai',
+                cols: 'Stulpeliai',
+                rows: 'eilutės',
+                vals: 'Vertės',
+                defer: 'Atidėti naujinimus',
+                update: 'Naujinti'
+            },
+            _ListContextMenu: {
+                up: 'Perkelti aukštyn',
+                down: 'Perkelti žemyn',
+                first: 'Perkelti į pradžią',
+                last: 'Pereiti prie pabaigos',
+                filter: 'Perkelti į ataskaitos filtrą',
+                rows: 'Perkelti į eilutės etiketes',
+                cols: 'Perkelti į stulpelių etiketes',
+                vals: 'Perkelti į reikšmes',
+                remove: 'Pašalinti lauką',
+                edit: 'Lauko parametrai…',
+                detail: 'Detalios…'
+            },
+            PivotChart: {
+                by: 'pagal',
+                and: 'iki'
+            },
+            DetailDialog: {
+                header: 'Išsamios informacijos rodinys:',
+                ok: 'Gerai',
+                items: '{cnt:n0} elementus',
+                item: '{cnt} elementas',
+                row: 'Eilutė',
+                col: 'Stulpelis'
+            }
+        },
+        Viewer: {
+            cancel: 'Atšaukti',
+            ok: 'Gerai',
+            bottom: 'Apačioje:',
+            top: 'Viršus:',
+            right: 'Teisę:',
+            left: 'Kairėje:',
+            margins: 'Paraštės (coliais)',
+            orientation: 'Orientacija:',
+            paperKind: 'Popieriaus rūšis:',
+            pageSetup: 'Puslapio parametrai',
+            landscape: 'Gulsčias',
+            portrait: 'Stačias',
+            pageNumber: 'Puslapio numeris',
+            zoomFactor: 'Padidinimo koeficientas',
+            paginated: 'Spaudinio maketas',
+            print: 'Spausdinimas',
+            search: 'Ieškoti',
+            matchCase: 'Skirti ABC nuo abc',
+            wholeWord: 'Atsižvelgti tik į visą žodį',
+            searchResults: 'Ieškos rezultatai',
+            previousPage: 'Ankstesnis puslapis',
+            nextPage: 'Paskesnis puslapis',
+            firstPage: 'Pirmasis puslapis',
+            lastPage: 'Paskutinis puslapis',
+            backwardHistory: 'Nuo pabaigos datos',
+            forwardHistory: 'Persiųsti',
+            pageCount: 'Puslapių skaičius',
+            selectTool: 'Pasirinkite įrankį',
+            moveTool: 'Perkelti įrankis',
+            continuousMode: 'Nepertraukiamas puslapio rodinys',
+            singleMode: 'Vieno puslapio rodinį',
+            wholePage: 'Talpinti visą puslapį',
+            pageWidth: 'Tinka puslapio Plotis',
+            zoomOut: 'Mažinti mastelį',
+            zoomIn: 'Didinti mastelį',
+            exports: 'Eksportuoti',
+            fullScreen: 'Visas ekranas',
+            exitFullScreen: 'Išeiti iš viso ekrano režimo',
+            thumbnails: 'Puslapių miniatiūros',
+            outlines: 'Dokumento struktūra',
+            loading: 'Įkeliama…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Žiniatinklio archyvas (MHTML)',
+            htmlExportName: 'HTML dokumento',
+            rtfExportName: 'RTF dokumentas',
+            metafileExportName: 'Suspaustas metafailai',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF vaizdus',
+            bmpExportName: 'BMP formate',
+            emfExportName: 'Išplėstinio metafailo',
+            gifExportName: 'GIF vaizdai',
+            jpgExportName: 'JPEG vaizdus',
+            jpegExportName: 'JPEG vaizdus',
+            pngExportName: 'PNG atvaizdai',
+            parameters: 'Parametrus',
+            requiringParameters: 'Prašome įvesti parametrus.',
+            nullParameterError: 'Ypatybė negali būti neapibrėžta.',
+            invalidParameterError: 'Neleistina įvestis.',
+            parameterNoneItemsSelected: '(nereikia)',
+            parameterAllItemsSelected: '(visi)',
+            parameterSelectAllItemText: '(Pažymėti viską)',
+            selectParameterValue: '(pasirinkite vertę)',
+            apply: 'Taikyti',
+            errorOccured: 'Įvyko klaida.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.lt.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.lt.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.lv.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: lv (Latvian)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'lv',
+            displayName: 'Latvian',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['svētdiena', 'pirmdiena', 'otrdiena', 'trešdiena', 'ceturtdiena', 'piektdiena', 'sestdiena'],
+                daysAbbr: ['Sv', 'Pr', 'Ot', 'Tr', 'Ce', 'Pk', 'Se'],
+                months: ['Janvāris', 'Februāris', 'Marts', 'Aprīlis', 'Maijs', 'Jūnijs', 'Jūlijs', 'Augusts', 'Septembris', 'Oktobris', 'Novembris', 'Decembris'],
+                monthsAbbr: ['Janv.', 'Febr.', 'Marts', 'Apr.', 'Maijs', 'Jūn.', 'Jūl.', 'Aug.', 'Sept.', 'Okt.', 'Nov.', 'Dec.'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['m.ē.'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'dddd, yyyy. "gada" d. MMMM',
+                    f: 'dddd, yyyy. "gada" d. MMMM HH:mm', F: 'dddd, yyyy. "gada" d. MMMM HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'yyyy. "g". MMMM', Y: 'yyyy. "g". MMMM',
+                    g: 'dd.MM.yyyy HH:mm', G: 'dd.MM.yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} priekšmeti izvēlēts'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} vienumi)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Augošā secībā',
+            descending: '\u2193 Dilstošā secībā',
+            apply: 'Lietot',
+            clear: 'Notīrīt',
+            conditions: 'Filtrēt pēc stāvokļa',
+            values: 'Filtrēt pēc vērtības',
+            // value filter
+            search: 'Meklēt',
+            selectAll: 'Atlasīt visu',
+            null: '(nekas)',
+            // condition filter
+            header: 'Rādīt vienumus, kur vērtība',
+            and: 'Un',
+            or: 'Vai',
+            stringOperators: [
+                { name: '(nav iestatīta)', op: null },
+                { name: 'ir vienāda ar', op: 0 },
+                { name: 'nav vienāda ar', op: 1 },
+                { name: 'sākas ar', op: 6 },
+                { name: 'beidzas ar', op: 7 },
+                { name: 'satur', op: 8 },
+                { name: 'nesatur', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nav iestatīta)', op: null },
+                { name: 'ir vienāda ar', op: 0 },
+                { name: 'nav vienāda ar', op: 1 },
+                { name: 'ir lielāka nekā', op: 2 },
+                { name: 'ir lielāka nekā vai vienāda ar', op: 3 },
+                { name: 'ir mazāka nekā', op: 4 },
+                { name: 'ir mazāka nekā vai vienāda ar', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nav iestatīta)', op: null },
+                { name: 'ir vienāda ar', op: 0 },
+                { name: 'ir pirms', op: 4 },
+                { name: 'ir pēc', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nav iestatīta)', op: null },
+                { name: 'ir vienāda ar', op: 0 },
+                { name: 'nav vienāda ar', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Lauka iestatījumi:',
+                header: 'Galvene:',
+                summary: 'Kopsavilkums:',
+                showAs: 'Rādīt kā:',
+                weighBy: 'Nosver ar:',
+                sort: 'Kārtot:',
+                filter: 'Filtrs:',
+                format: 'Formāts:',
+                sample: 'Paraugs:',
+                edit: 'Labot…',
+                clear: 'Notīrīt',
+                ok: 'Labi',
+                cancel: 'Atcelt',
+                none: '(neviens)',
+                sorts: {
+                    asc: 'Augošā secībā',
+                    desc: 'Dilstošā secībā'
+                },
+                aggs: {
+                    sum: 'Summa',
+                    cnt: 'Skaits',
+                    avg: 'Vidējais',
+                    max: 'Maks',
+                    min: 'Min',
+                    rng: 'Diapazons',
+                    std: 'Standartnovirze',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Bez aprēķina',
+                    dRow: 'Atšķirība no iepriekšējā rindā',
+                    dRowPct: 'Atšķirība no iepriekšējās rindas %',
+                    dCol: 'Atšķirība no iepriekšējā kolonnā',
+                    dColPct: 'Atšķirība no iepriekšējā kolonnā %',
+                    dPctGrand: '% no kopsummas',
+                    dPctRow: '% no kopsummas rindu',
+                    dPctCol: 'kolonnas kopsumma %',
+                    dRunTot: 'Pašreizējās kopsummas',
+                    dRunTotPct: 'pašreizējās kopsummas %'
+                },
+                formats: {
+                    n0: 'Vesels skaitlis (n0)',
+                    n2: 'Numurs (n2)',
+                    c: 'Valūtas (c)',
+                    p0: 'Procents (p0)',
+                    p2: 'Procents (p2)',
+                    n2c: 'Tūkstoši (n2,)',
+                    n2cc: 'Miljoniem (n2,,)',
+                    n2ccc: 'Miljardiem (n2,,,)',
+                    d: 'Datums (d)',
+                    MMMMddyyyy: 'Mēneša dienu gadā (MMMM dd, yyyy)',
+                    dMyy: 'Diena mēnesis gads (d/M/yy)',
+                    ddMyy: 'Diena mēnesis gads (dd/M/yy)',
+                    dMyyyy: 'Diena mēnesis gads (dd/M/yyyy)',
+                    MMMyyyy: 'Mēnesis, gads (MMM yyyy)',
+                    MMMMyyyy: 'Mēnesis, gads (MMMM yyyy)',
+                    yyyyQq: 'Gada ceturksni (yyyy "Q"q)',
+                    FYEEEEQU: 'Finanšu gada ceturksni ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Gala summa',
+                subTotal: 'Starpsumma'
+            },
+            PivotPanel: {
+                fields: 'Izvēlieties laukus, lai pievienotu atskaitei:',
+                drag: 'Velciet laukus no viena tālāk norādītā apgabala uz citu:',
+                filters: 'Filtri',
+                cols: 'Kolonnas',
+                rows: 'Rindas',
+                vals: 'Vērtības',
+                defer: 'Atlikt atjauninājumus',
+                update: 'Atjaunināt'
+            },
+            _ListContextMenu: {
+                up: 'Pārvietot augšup',
+                down: 'Pārvietot lejup',
+                first: 'Pārvietot uz sākumu',
+                last: 'Pārvietot uz beigām',
+                filter: 'Pārvietot uz atskaišu filtru',
+                rows: 'Pārvietot uz rindu etiķetēm',
+                cols: 'Pārvietot uz kolonnu etiķetēm',
+                vals: 'Pārvietot uz vērtībām',
+                remove: 'Noņemt lauku',
+                edit: 'Lauka iestatījumi…',
+                detail: 'Parādīt detaļas…'
+            },
+            PivotChart: {
+                by: 'pēc',
+                and: '–'
+            },
+            DetailDialog: {
+                header: 'Detalizētajā skatā:',
+                ok: 'Labi',
+                items: '{cnt:n0} vienumi',
+                item: 'vienuma {cnt}',
+                row: 'Rinda',
+                col: 'Kolonna'
+            }
+        },
+        Viewer: {
+            cancel: 'Atcelt',
+            ok: 'Labi',
+            bottom: 'Apakšējā:',
+            top: 'Augšmala:',
+            right: 'Labā:',
+            left: 'No kreisās:',
+            margins: 'Piemales (collās)',
+            orientation: 'Orientācija:',
+            paperKind: 'Papīra veida:',
+            pageSetup: 'Lappuses iestatīšana',
+            landscape: 'Ainava',
+            portrait: 'Portrets',
+            pageNumber: 'Lappuses numurs',
+            zoomFactor: 'Palielinājums',
+            paginated: 'Drukas izkārtojums',
+            print: 'Drukāšana',
+            search: 'Meklēt',
+            matchCase: 'Sērkociņu kārbiņu',
+            wholeWord: 'Salīdzināt tikai pilnu vārdu',
+            searchResults: 'Meklēšanas rezultāti',
+            previousPage: 'Iepriekšējā lapa',
+            nextPage: 'Nākamā lapa',
+            firstPage: 'Pirmā lapa',
+            lastPage: 'Pēdējā lapa',
+            backwardHistory: 'Atmuguriski',
+            forwardHistory: 'Uz priekšu',
+            pageCount: 'Lapu skaits',
+            selectTool: 'Atlases rīks',
+            moveTool: 'Pārvietošanas rīks',
+            continuousMode: 'Nepārtrauktu lapu skats',
+            singleMode: 'Vienas lappuses skatu',
+            wholePage: 'Ietilpināt visu lappusi',
+            pageWidth: 'Atbilstoši lappuses platumam',
+            zoomOut: 'Tālināt',
+            zoomIn: 'Tuvināt',
+            exports: 'Eksportēt',
+            fullScreen: 'Pilnekrāna režīms',
+            exitFullScreen: 'Iziet no pilnekrāna režīma',
+            thumbnails: 'Lappušu sīktēlus',
+            outlines: 'Dokumenta karte',
+            loading: 'Notiek ielāde…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Web arhīvs (MHTML)',
+            htmlExportName: 'HTML dokuments',
+            rtfExportName: 'RTF dokuments',
+            metafileExportName: 'Saspiestu metafaili',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF attēliem',
+            bmpExportName: 'BMP attēlus',
+            emfExportName: 'Paplašināta metafaila',
+            gifExportName: 'GIF attēlus',
+            jpgExportName: 'JPEG FORMĀTA attēli',
+            jpegExportName: 'JPEG FORMĀTA attēli',
+            pngExportName: 'PNG attēlu',
+            parameters: 'Parametri',
+            requiringParameters: 'Lūdzu, vai ievades parametriem.',
+            nullParameterError: 'Vērtība nevar būt nulle.',
+            invalidParameterError: 'Nederīga ievade.',
+            parameterNoneItemsSelected: '(neviens)',
+            parameterAllItemsSelected: '(visi)',
+            parameterSelectAllItemText: '(Atlasīt visu)',
+            selectParameterValue: '(atlasiet vērtību)',
+            apply: 'Lietot',
+            errorOccured: 'Radās kļūda.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.lv.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.lv.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.nl.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: nl (Dutch)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'nl',
+            displayName: 'Dutch',
+            numberFormat: {
+                '.': ',',
+                ',': '.',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: '€', pattern: ['$ -n', '$ n'] }
+            },
+            calendar: {
+                '/': '-',
+                ':': ':',
+                firstDay: 1,
+                days: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+                daysAbbr: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+                months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+                monthsAbbr: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+                am: ['', ''],
+                pm: ['', ''],
+                eras: ['n.Chr.'],
+                patterns: {
+                    d: 'd-M-yyyy', D: 'dddd d MMMM yyyy',
+                    f: 'dddd d MMMM yyyy HH:mm', F: 'dddd d MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'd-M-yyyy HH:mm', G: 'd-M-yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} geselecteerde artikelen'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} items)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Oplopend',
+            descending: '\u2193 Aflopend',
+            apply: 'Toepassen',
+            clear: 'Wissen',
+            conditions: 'Filteren op voorwaarde',
+            values: 'Filteren op waarde',
+            // value filter
+            search: 'Zoeken',
+            selectAll: 'Alles selecteren',
+            null: '(niets)',
+            // condition filter
+            header: 'Toon objecten waar de waarde',
+            and: 'En',
+            or: 'Of',
+            stringOperators: [
+                { name: '(niet ingesteld)', op: null },
+                { name: 'Gelijk aan', op: 0 },
+                { name: 'Niet gelijk aan', op: 1 },
+                { name: 'Begint met', op: 6 },
+                { name: 'Eindigt op', op: 7 },
+                { name: 'Bevat', op: 8 },
+                { name: 'Bevat niet', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(niet ingesteld)', op: null },
+                { name: 'Gelijk aan', op: 0 },
+                { name: 'Niet gelijk aan', op: 1 },
+                { name: 'Is groter dan', op: 2 },
+                { name: 'Is groter dan of gelijk aan', op: 3 },
+                { name: 'Is kleiner dan', op: 4 },
+                { name: 'Is kleiner dan of gelijk aan', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(niet ingesteld)', op: null },
+                { name: 'Gelijk aan', op: 0 },
+                { name: 'is voor', op: 4 },
+                { name: 'is na', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(niet ingesteld)', op: null },
+                { name: 'Gelijk aan', op: 0 },
+                { name: 'Niet gelijk aan', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Veldinstellingen:',
+                header: 'Veldnamenbestand:',
+                summary: 'Samenvatting:',
+                showAs: 'Toon als:',
+                weighBy: 'Wegen door:',
+                sort: 'Sorteervolgorde:',
+                filter: 'Filter:',
+                format: 'Opmaak:',
+                sample: 'Voorbeeld:',
+                edit: 'Bewerken…',
+                clear: 'Wissen',
+                ok: 'OK',
+                cancel: 'Annuleren',
+                none: '(geen)',
+                sorts: {
+                    asc: 'Oplopend',
+                    desc: 'Aflopend'
+                },
+                aggs: {
+                    sum: 'Som',
+                    cnt: 'Aantal',
+                    avg: 'Gemiddelde',
+                    max: 'Max',
+                    min: 'Min',
+                    rng: 'Bereik',
+                    std: 'Stdev',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Geen berekening',
+                    dRow: 'Verschil met vorige rij',
+                    dRowPct: '% Verschil met de vorige rij',
+                    dCol: 'Verschil met vorige kolom',
+                    dColPct: '% Verschil met de vorige kolom',
+                    dPctGrand: '% van totaal',
+                    dPctRow: '% van totale rij',
+                    dPctCol: '% van kolom totale',
+                    dRunTot: 'Lopend totaal',
+                    dRunTotPct: '% lopend totaal'
+                },
+                formats: {
+                    n0: 'Geheel getal (n0)',
+                    n2: 'Float (n2)',
+                    c: 'Munt (c)',
+                    p0: 'Percentage (p0)',
+                    p2: 'Percentage (p2)',
+                    n2c: 'Duizenden (n2)',
+                    n2cc: 'Miljoenen (n2,,)',
+                    n2ccc: 'Miljarden (n2,,,)',
+                    d: 'Datum (d)',
+                    MMMMddyyyy: 'Jaar van de dagen van de maand (dd MMMM, jjjj)',
+                    dMyy: 'Dag maand jaar (d/M/JJ)',
+                    ddMyy: 'Dag maand jaar (dd/M/JJ)',
+                    dMyyyy: 'Dag maand jaar (dd/M/jjjj)',
+                    MMMyyyy: 'Maand jaar (MMM jjjj)',
+                    MMMMyyyy: 'Maand jaar (MMMM jjjj)',
+                    yyyyQq: 'Kwartaal van het jaar (jjjj "Q" q)',
+                    FYEEEEQU: 'Kwartaal van het fiscale jaar (EEEE "Q" U "FY")'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Eindtotaal',
+                subTotal: 'Subtotaal'
+            },
+            PivotPanel: {
+                fields: 'Kies de velden toe te voegen aan verslag:',
+                drag: 'Velden slepen tussen onderstaande gebieden:',
+                filters: 'Filters',
+                cols: 'Kolommen',
+                rows: 'Rijen',
+                vals: 'Waarden',
+                defer: 'Uitstellen van Updates',
+                update: 'Bijwerken'
+            },
+            _ListContextMenu: {
+                up: 'Omhoog',
+                down: 'Omlaag',
+                first: 'Naar begin verplaatsen',
+                last: 'Naar einde verplaatsen',
+                filter: 'Naar rapportfilter verplaatsen',
+                rows: 'Naar rijlabels verplaatsen',
+                cols: 'Naar kolomlabels verplaatsen',
+                vals: 'Naar waarden verplaatsen',
+                remove: 'Veld verwijderen',
+                edit: 'Veldinstellingen…',
+                detail: 'Details weergeven…'
+            },
+            PivotChart: {
+                by: 'op',
+                and: 'en'
+            },
+            DetailDialog: {
+                header: 'Detail bekijken:',
+                ok: 'OK',
+                items: '{cnt:n0} items',
+                item: '{cnt} object',
+                row: 'Rij',
+                col: 'Kolom'
+            }
+        },
+        Viewer: {
+            cancel: 'Annuleren',
+            ok: 'OK',
+            bottom: 'Bodem:',
+            top: 'Vanaf bovenkant:',
+            right: 'Rechts:',
+            left: 'Links:',
+            margins: 'Marges (inches)',
+            orientation: 'Schermstand:',
+            paperKind: 'Papier soort:',
+            pageSetup: 'Pagina-instelling',
+            landscape: 'Liggend',
+            portrait: 'Staand',
+            pageNumber: 'Paginanummer',
+            zoomFactor: 'Zoomfactor',
+            paginated: 'Afdrukweergave',
+            print: 'Afdrukken',
+            search: 'Zoeken',
+            matchCase: 'Identieke hoofdletters/kleine letters',
+            wholeWord: 'Alleen zoeken naar heel woord',
+            searchResults: 'Zoekresultaten',
+            previousPage: 'Vorige pagina',
+            nextPage: 'Volgende pagina',
+            firstPage: 'Eerste pagina',
+            lastPage: 'Laatste pagina',
+            backwardHistory: 'Terug',
+            forwardHistory: 'Vooruit',
+            pageCount: 'Aantal pagina\'s',
+            selectTool: 'Selecteer gereedschap',
+            moveTool: 'Verplaatsgereedschap',
+            continuousMode: 'Continu weergave van de pagina',
+            singleMode: 'Eén pagina weergeven',
+            wholePage: 'Fit hele pagina',
+            pageWidth: 'Binnen paginabreedte past',
+            zoomOut: 'Uitzoomen',
+            zoomIn: 'Inzoomen',
+            exports: 'Exporteren',
+            fullScreen: 'Volledig scherm',
+            exitFullScreen: 'Volledig scherm afsluiten',
+            thumbnails: 'Paginaminiaturen',
+            outlines: 'Documentstructuur',
+            loading: 'Bezig met laden…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Open XML-Word',
+            xlsxExportName: 'Open XML-Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Webarchiefbestand (MHTML)',
+            htmlExportName: 'HTML-document',
+            rtfExportName: 'RTF-document',
+            metafileExportName: 'Gecomprimeerde metabestanden',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-afbeeldingen',
+            bmpExportName: 'BMP-afbeeldingen',
+            emfExportName: 'Enhanced metabestand',
+            gifExportName: 'GIF-afbeeldingen',
+            jpgExportName: 'JPEG-afbeeldingen',
+            jpegExportName: 'JPEG-afbeeldingen',
+            pngExportName: 'PNG-afbeeldingen',
+            parameters: 'Parameters',
+            requiringParameters: 'Voer parameters.',
+            nullParameterError: 'Waarde kan niet null zijn.',
+            invalidParameterError: 'Ongeldige invoer.',
+            parameterNoneItemsSelected: '(geen)',
+            parameterAllItemsSelected: '(alle)',
+            parameterSelectAllItemText: '(Selecteer alles)',
+            selectParameterValue: '(waarde selecteren)',
+            apply: 'Toepassen',
+            errorOccured: 'Er is een fout opgetreden.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.nl.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.nl.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.no.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: nb (Norwegian (Bokmål))
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'nb',
+            displayName: 'Norwegian (Bokmål)',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n %', 'n %'] },
+                currency: { decimals: 2, symbol: 'kr', pattern: ['-$ n', '$ n'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
+                daysAbbr: ['søn.', 'man.', 'tir.', 'ons.', 'tor.', 'fre.', 'lør.'],
+                months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],
+                monthsAbbr: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
+                am: ['a.m.', 'a'],
+                pm: ['p.m.', 'p'],
+                eras: ['e.Kr.'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'd. MMMM yyyy',
+                    f: 'd. MMMM yyyy HH:mm', F: 'd. MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd. MMMM', M: 'd. MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd.MM.yyyy HH:mm', G: 'dd.MM.yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} elementer valgt'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} artikler)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Stigende',
+            descending: '\u2193 Synkende',
+            apply: 'Bruk',
+            clear: 'Fjern',
+            conditions: 'Filtrer etter tilstand',
+            values: 'Filtrer etter verdi',
+            // value filter
+            search: 'Søk',
+            selectAll: 'Velg alle',
+            null: '(ingenting)',
+            // condition filter
+            header: 'Vis elementer der verdien',
+            and: 'Og',
+            or: 'Eller',
+            stringOperators: [
+                { name: '(ikke angitt)', op: null },
+                { name: 'Tilsvarer', op: 0 },
+                { name: 'Tilsvarer ikke', op: 1 },
+                { name: 'Begynner med', op: 6 },
+                { name: 'Slutter med', op: 7 },
+                { name: 'Inneholder', op: 8 },
+                { name: 'Inneholder ikke', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(ikke angitt)', op: null },
+                { name: 'Tilsvarer', op: 0 },
+                { name: 'Tilsvarer ikke', op: 1 },
+                { name: 'Er større enn', op: 2 },
+                { name: 'Er større enn eller lik som', op: 3 },
+                { name: 'Er mindre enn', op: 4 },
+                { name: 'Er mindre enn eller lik som', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(ikke angitt)', op: null },
+                { name: 'Tilsvarer', op: 0 },
+                { name: 'Er før', op: 4 },
+                { name: 'Er etter', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(ikke angitt)', op: null },
+                { name: 'Tilsvarer', op: 0 },
+                { name: 'Tilsvarer ikke', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Innstillinger:',
+                header: 'Hovedpost:',
+                summary: 'Sammendrag:',
+                showAs: 'Vis som:',
+                weighBy: 'Veie av:',
+                sort: 'Sorter:',
+                filter: 'Filter:',
+                format: 'Format:',
+                sample: 'Eksempel:',
+                edit: 'Rediger…',
+                clear: 'Fjern',
+                ok: 'OK',
+                cancel: 'Avbryt',
+                none: '(ingen)',
+                sorts: {
+                    asc: 'Stigende',
+                    desc: 'Synkende'
+                },
+                aggs: {
+                    sum: 'Sum',
+                    cnt: 'Antall',
+                    avg: 'Gjennomsnitt',
+                    max: 'Maks',
+                    min: 'Min',
+                    rng: 'Område',
+                    std: 'StdAvvik',
+                    var: 'Var',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Ingen beregning',
+                    dRow: 'Forskjellen fra forrige rad',
+                    dRowPct: '% Forskjell fra forrige rad',
+                    dCol: 'Forskjellen fra forrige kolonne',
+                    dColPct: '% Forskjell fra forrige kolonne',
+                    dPctGrand: '% av totalsum',
+                    dPctRow: '% av rad totalt',
+                    dPctCol: '% av kolonnen total',
+                    dRunTot: 'Løpende sum',
+                    dRunTotPct: '% løpende totale'
+                },
+                formats: {
+                    n0: 'Heltall (n0)',
+                    n2: 'Desimal (n2)',
+                    c: 'Valuta (c)',
+                    p0: 'Prosent (p0)',
+                    p2: 'Prosent (p2)',
+                    n2c: 'Tusenvis (n2,)',
+                    n2cc: 'Millioner (n2),,',
+                    n2ccc: 'Milliarder (n2,,,)',
+                    d: 'Dato (d)',
+                    MMMMddyyyy: 'Måned dag år (dd MMMM, yyyy)',
+                    dMyy: 'Dag måned år (d/M/yy)',
+                    ddMyy: 'Dag måned år (dd/M/yy)',
+                    dMyyyy: 'Dag måned år (dd/M/yyyy)',
+                    MMMyyyy: 'Måned år (MMM-yyyy)',
+                    MMMMyyyy: 'Måned år (MMMM yyyy)',
+                    yyyyQq: 'År kvartal (ÅÅÅÅ "Q" q)',
+                    FYEEEEQU: 'Kvartal i regnskapsår ("FY" EEEE "Q" U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Totalsum',
+                subTotal: 'Delsum'
+            },
+            PivotPanel: {
+                fields: 'Velg feltene du vil legge til rapporten:',
+                drag: 'Dra felt mellom områdene nedenfor:',
+                filters: 'Filtre',
+                cols: 'Kolonner',
+                rows: 'Rader',
+                vals: 'verdiene',
+                defer: 'Utsette oppdateringer',
+                update: 'Oppdater'
+            },
+            _ListContextMenu: {
+                up: 'Flytt opp',
+                down: 'Flytt ned',
+                first: 'Flytt til begynnelsen',
+                last: 'Flytt til slutten',
+                filter: 'Flytt til rapportfilter',
+                rows: 'Flytt til radetiketter',
+                cols: 'Flytt til kolonneetiketter',
+                vals: 'Flytt til verdier',
+                remove: 'Fjern felt',
+                edit: 'Feltinnstillinger…',
+                detail: 'Vise detaljer…'
+            },
+            PivotChart: {
+                by: 'Av',
+                and: 'og'
+            },
+            DetailDialog: {
+                header: 'Detaljvisning:',
+                ok: 'OK',
+                items: '{cnt:n0} elementer',
+                item: '{cnt} element',
+                row: 'Rad',
+                col: 'Kolonne'
+            }
+        },
+        Viewer: {
+            cancel: 'Avbryt',
+            ok: 'OK',
+            bottom: 'Bunn:',
+            top: 'Topp:',
+            right: 'Høyre:',
+            left: 'Venstre:',
+            margins: 'Marger (tommer)',
+            orientation: 'Sideretning:',
+            paperKind: 'Papir type:',
+            pageSetup: 'Utskriftsformat',
+            landscape: 'Liggende',
+            portrait: 'Stående',
+            pageNumber: 'Sidetall',
+            zoomFactor: 'Zoomfaktor',
+            paginated: 'Utskriftsoppsett',
+            print: 'Skrive ut',
+            search: 'Søk',
+            matchCase: 'Skill mellom store og små bokstaver',
+            wholeWord: 'Bare hele ord',
+            searchResults: 'Søkeresultater',
+            previousPage: 'Forrige side',
+            nextPage: 'Neste side',
+            firstPage: 'Første side',
+            lastPage: 'Siste side',
+            backwardHistory: 'Bakover',
+            forwardHistory: 'Videresend',
+            pageCount: 'Sideantall',
+            selectTool: 'Velg verktøyet',
+            moveTool: 'Flytteverktøyet',
+            continuousMode: 'Kontinuerlig sidevisning',
+            singleMode: 'Enkeltside Vis',
+            wholePage: 'Passe hele siden',
+            pageWidth: 'Passe sidebredde',
+            zoomOut: 'Zoome ut',
+            zoomIn: 'Zoome inn',
+            exports: 'Eksporter',
+            fullScreen: 'Full skjerm',
+            exitFullScreen: 'Avslutt full skjerm',
+            thumbnails: 'Sideminiatyrer',
+            outlines: 'Dokumentkart',
+            loading: 'Laster inn…',
+            pdfExportName: 'Adobe PDF',
+            docxExportName: 'Åpne XML-ordet',
+            xlsxExportName: 'Åpne XML-Formatet Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Webarkiv (MHTML)',
+            htmlExportName: 'HTML-dokument',
+            rtfExportName: 'RTF-dokument',
+            metafileExportName: 'Komprimert metafiler',
+            csvExportName: 'CSV',
+            tiffExportName: 'TIFF-bilder',
+            bmpExportName: 'BMP-bilder',
+            emfExportName: 'Utvidet metafil',
+            gifExportName: 'GIF-bilder',
+            jpgExportName: 'JPEG-bilder',
+            jpegExportName: 'JPEG-bilder',
+            pngExportName: 'PNG-bilder',
+            parameters: 'Parametre',
+            requiringParameters: 'Skriv inn parametrene.',
+            nullParameterError: 'Verdien kan ikke være null.',
+            invalidParameterError: 'Ugyldige inndata.',
+            parameterNoneItemsSelected: '(ingen)',
+            parameterAllItemsSelected: '(alle)',
+            parameterSelectAllItemText: '(Velg alle)',
+            selectParameterValue: '(Velg verdi)',
+            apply: 'Bruk',
+            errorOccured: 'Det har oppstått en feil.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.no.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.no.min.js


+ 279 - 0
src/wijmo/controls/cultures/wijmo.culture.pl.js

@@ -0,0 +1,279 @@
+/*
+    *
+    * Wijmo Library 5.20163.234
+    * http://wijmo.com/
+    *
+    * Copyright(c) GrapeCity, Inc.  All rights reserved.
+    *
+    * Licensed under the Wijmo Commercial License.
+    * sales@wijmo.com
+    * http://wijmo.com/products/wijmo-5/license/
+    *
+    */
+/*
+ * Wijmo culture file: pl (Polish)
+ */
+var wijmo;
+(function (wijmo) {
+    wijmo.culture = {
+        Globalize: {
+            name: 'pl',
+            displayName: 'Polish',
+            numberFormat: {
+                '.': ',',
+                ',': ' ',
+                percent: { pattern: ['-n%', 'n%'] },
+                currency: { decimals: 2, symbol: 'zł', pattern: ['-n $', 'n $'] }
+            },
+            calendar: {
+                '/': '.',
+                ':': ':',
+                firstDay: 1,
+                days: ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota'],
+                daysAbbr: ['niedz.', 'pon.', 'wt.', 'śr.', 'czw.', 'pt.', 'sob.'],
+                months: ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'],
+                monthsAbbr: ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'],
+                am: ['AM', 'A'],
+                pm: ['PM', 'P'],
+                eras: ['n.e.'],
+                patterns: {
+                    d: 'dd.MM.yyyy', D: 'dddd, d MMMM yyyy',
+                    f: 'dddd, d MMMM yyyy HH:mm', F: 'dddd, d MMMM yyyy HH:mm:ss',
+                    t: 'HH:mm', T: 'HH:mm:ss',
+                    m: 'd MMMM', M: 'd MMMM',
+                    y: 'MMMM yyyy', Y: 'MMMM yyyy',
+                    g: 'dd.MM.yyyy HH:mm', G: 'dd.MM.yyyy HH:mm:ss',
+                    s: 'yyyy"-"MM"-"dd"T"HH":"mm":"ss'
+                },
+            }
+        },
+        MultiSelect: {
+            itemsSelected: '{count:n0} pozycji wybrano'
+        },
+        FlexGrid: {
+            groupHeaderFormat: '{name}: <b>{value}</b> ({count:n0} elem.)'
+        },
+        FlexGridFilter: {
+            // filter
+            ascending: '\u2191 Rosnąco',
+            descending: '\u2193 Malejąco',
+            apply: 'Zastosuj',
+            clear: 'Wyczyść',
+            conditions: 'Filtruj według warunku',
+            values: 'Filtruj według wartości',
+            // value filter
+            search: 'Wyszukaj',
+            selectAll: 'Zaznacz wszystko',
+            null: '(nic)',
+            // condition filter
+            header: 'Pokaż elementy, których wartość',
+            and: 'I',
+            or: 'lub',
+            stringOperators: [
+                { name: '(nie ustawiono)', op: null },
+                { name: 'Równa się', op: 0 },
+                { name: 'Nie równa się', op: 1 },
+                { name: 'Zaczyna się od', op: 6 },
+                { name: 'Kończy się na', op: 7 },
+                { name: 'Zawiera', op: 8 },
+                { name: 'Nie zawiera', op: 9 }
+            ],
+            numberOperators: [
+                { name: '(nie ustawiono)', op: null },
+                { name: 'Równa się', op: 0 },
+                { name: 'Nie równa się', op: 1 },
+                { name: 'Jest większa niż', op: 2 },
+                { name: 'Jest większa niż lub równa', op: 3 },
+                { name: 'Jest mniejsza niż', op: 4 },
+                { name: 'Jest mniejsza niż lub równa', op: 5 }
+            ],
+            dateOperators: [
+                { name: '(nie ustawiono)', op: null },
+                { name: 'Równa się', op: 0 },
+                { name: 'jest przed', op: 4 },
+                { name: 'jest po', op: 3 }
+            ],
+            booleanOperators: [
+                { name: '(nie ustawiono)', op: null },
+                { name: 'Równa się', op: 0 },
+                { name: 'Nie równa się', op: 1 }
+            ]
+        },
+        olap: {
+            PivotFieldEditor: {
+                dialogHeader: 'Ustawienia pola:',
+                header: 'Nagł.:',
+                summary: 'Krótki opis:',
+                showAs: 'Pokaż jako:',
+                weighBy: 'Odważyć się przez:',
+                sort: 'Sortuj po:',
+                filter: 'Filtruj:',
+                format: 'Format:',
+                sample: 'Przykład:',
+                edit: 'Edycja…',
+                clear: 'Wyczyść',
+                ok: 'OK',
+                cancel: 'Anuluj',
+                none: '(brak)',
+                sorts: {
+                    asc: 'Rosnąco',
+                    desc: 'Malejąco'
+                },
+                aggs: {
+                    sum: 'Suma',
+                    cnt: 'Liczba',
+                    avg: 'Średni',
+                    max: 'Maksimum',
+                    min: 'Min',
+                    rng: 'Kuchenka z piekarnikiem',
+                    std: 'OdchStd',
+                    var: 'Wariancja',
+                    stdp: 'StdDevPop',
+                    varp: 'VarPop'
+                },
+                calcs: {
+                    noCalc: 'Bez obliczeń',
+                    dRow: 'Różnica z poprzedniego wiersza',
+                    dRowPct: '% Różnica poprzedniego rzędu',
+                    dCol: 'Różnica od poprzedniej kolumny',
+                    dColPct: '% Różnica od poprzedniej kolumny',
+                    dPctGrand: '% sumy',
+                    dPctRow: '% sumy wiersza',
+                    dPctCol: '% sumy kolumny',
+                    dRunTot: 'Całkowita',
+                    dRunTotPct: '% sumy'
+                },
+                formats: {
+                    n0: 'Liczba całkowita (n0)',
+                    n2: 'Dziesiętny (n2)',
+                    c: 'Waluty (c)',
+                    p0: 'Procent (p0)',
+                    p2: 'Procent (p2)',
+                    n2c: 'Tysięcy (n2,)',
+                    n2cc: 'Miliony (n2,,)',
+                    n2ccc: 'Miliardy (n2,,,)',
+                    d: 'Data (d)',
+                    MMMMddyyyy: 'Miesiąc dzień rok (MMMM dd, yyyy)',
+                    dMyy: 'Dzień miesiąc rok (d/M/yy)',
+                    ddMyy: 'Dzień miesiąc rok (dd/M/yy)',
+                    dMyyyy: 'Rok miesiąc dzień (dd/M/yyyy)',
+                    MMMyyyy: 'Miesiąc roku (MMM rrrr)',
+                    MMMMyyyy: 'Miesiąc roku (MMMM yyyy)',
+                    yyyyQq: 'Kwartale roku (yyyy "Q"q)',
+                    FYEEEEQU: 'Kwartale roku obrachunkowego ("FY"EEEE "Q"U)'
+                }
+            },
+            PivotEngine: {
+                grandTotal: 'Suma końcowa',
+                subTotal: 'Suma częściowa'
+            },
+            PivotPanel: {
+                fields: 'Wybierz pola, aby dodać do raportu:',
+                drag: 'Przeciągnij pola między obszarami poniżej:',
+                filters: 'Filtry',
+                cols: 'Kolumny',
+                rows: 'Wiersze',
+                vals: 'Wartości',
+                defer: 'Odroczyć aktualizacje',
+                update: 'Aktualizuj'
+            },
+            _ListContextMenu: {
+                up: 'Przenieś w górę',
+                down: 'Przenieś w dół',
+                first: 'Przenieś na początek',
+                last: 'Do końca',
+                filter: 'Przenieś do filtru raportu',
+                rows: 'Przenieś do etykiet wiersza',
+                cols: 'Przenieś do etykiet kolumn',
+                vals: 'Przenieś do wartości',
+                remove: 'Usuń pole',
+                edit: 'Ustawienia pól…',
+                detail: 'Pokaż szczegóły…'
+            },
+            PivotChart: {
+                by: 'według',
+                and: 'oraz'
+            },
+            DetailDialog: {
+                header: 'Widok szczegółów:',
+                ok: 'OK',
+                items: '{cnt:n0} elementów',
+                item: 'element {cnt}',
+                row: 'Wiersz',
+                col: 'Kolumna'
+            }
+        },
+        Viewer: {
+            cancel: 'Anuluj',
+            ok: 'OK',
+            bottom: 'U dołu:',
+            top: 'Górny:',
+            right: 'Prawo:',
+            left: 'Z lewej:',
+            margins: 'Marginesy (cale)',
+            orientation: 'Orientacja:',
+            paperKind: 'Rodzaju papieru:',
+            pageSetup: 'Ustawienia strony',
+            landscape: 'Pozioma',
+            portrait: 'Pionowa',
+            pageNumber: 'Numer strony',
+            zoomFactor: 'Współczynnik powiększenia',
+            paginated: 'Układ wydruku',
+            print: 'Drukuj',
+            search: 'Wyszukaj',
+            matchCase: 'Wielkość liter',
+            wholeWord: 'Uwzględnij tylko całe wyrazy',
+            searchResults: 'Wyniki wyszukiwania',
+            previousPage: 'Poprzednia strona',
+            nextPage: 'Następna strona',
+            firstPage: 'Pierwsza strona',
+            lastPage: 'Ostatnia strona',
+            backwardHistory: 'Do tyłu',
+            forwardHistory: 'Do przodu',
+            pageCount: 'Liczba stron',
+            selectTool: 'Wybierz narzędzie',
+            moveTool: 'Narzędzie Przesuwanie',
+            continuousMode: 'Ciągłe widok strony',
+            singleMode: 'Pojedyncza strona',
+            wholePage: 'Dopasowanie całej strony',
+            pageWidth: 'Dopasuj szerokość strony',
+            zoomOut: 'Pomniejsz',
+            zoomIn: 'Powiększ',
+            exports: 'Eksportuj',
+            fullScreen: 'Pełny ekran',
+            exitFullScreen: 'Zamknij tryb pełnoekranowy',
+            thumbnails: 'Miniatury stron',
+            outlines: 'Mapa dokumentu',
+            loading: 'Trwa ładowanie…',
+            pdfExportName: 'Plik PDF firmy Adobe',
+            docxExportName: 'Open XML Word',
+            xlsxExportName: 'Open XML Excel',
+            docExportName: 'Microsoft Word',
+            xlsExportName: 'Microsoft Excel',
+            mhtmlExportName: 'Archiwum sieci Web (MHTML)',
+            htmlExportName: 'Dokument HTML',
+            rtfExportName: 'Dokument RTF',
+            metafileExportName: 'Skompresowane metaplików',
+            csvExportName: 'CSV',
+            tiffExportName: 'Obrazy TIFF',
+            bmpExportName: 'Obrazów BMP',
+            emfExportName: 'Rozszerzony metaplik',
+            gifExportName: 'Obrazy GIF',
+            jpgExportName: 'Obrazy w formacie JPEG',
+            jpegExportName: 'Obrazy w formacie JPEG',
+            pngExportName: 'Obrazy PNG',
+            parameters: 'Parameters',
+            requiringParameters: 'Wprowadź parametry.',
+            nullParameterError: 'Wartość nie może być zerowa.',
+            invalidParameterError: 'Nieprawidłowe dane.',
+            parameterNoneItemsSelected: '(brak)',
+            parameterAllItemsSelected: '(wszystkie)',
+            parameterSelectAllItemText: '(Zaznacz wszystkie)',
+            selectParameterValue: '(wybierz wartość)',
+            apply: 'Zastosuj',
+            errorOccured: 'Wystąpił błąd.'
+        }
+    };
+})(wijmo || (wijmo = {}));
+;
+//# sourceMappingURL=wijmo.culture.pl.js.map

File diff suppressed because it is too large
+ 13 - 0
src/wijmo/controls/cultures/wijmo.culture.pl.min.js


+ 0 - 0
src/wijmo/controls/cultures/wijmo.culture.ro.js


Some files were not shown because too many files changed in this diff