UNPKG

ns-components-angular

Version:

Angular Wrapper Components for NSComponents

1 lines 112 kB
export declare const NSXlsxExportCode = "var nsModuleExport = function(root,name,prototype)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\tmodule.exports[name] = prototype;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\tdefine(name,[], function () {return prototype;});\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\texports[name] = prototype;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\troot[name] = prototype;\r\n\t\t}\r\n\t};var nsIsWeb = function(root)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};if(!nsIsWeb())\r\n\t\t{\r\nvar nsutilRef = require('./nsUtil.min.js');\r\nvar NSUtil = nsutilRef.NSUtil;\r\n\r\n\t\t}\r\nvar NSZip = (function()\r\n{\r\n\tvar NSZip = function(config)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar setting = {};\r\n\t \r\n\t var objFiles = {};\r\n\t var util = null;\r\n\t\t\r\n\t\tvar initialize = function()\r\n\t\t{\r\n\t\t\tif(!config)\r\n\t\t\t{\r\n\t\t\t\tconfig = {};\r\n\t\t\t}\r\n\t\t\t/*setting = {\r\n\t\t\t\tfileName: config[\"fileName\"] || \"download\",\r\n\t\t\t\tmimeType: config[\"mimeType\"] || \"application/zip\"\r\n\t\t\t};\r\n\t\t\tif (setting.fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tsetting.fileName = setting.fileName + \".zip\";\r\n\t }*/\r\n\t\t\tutil = new ZipUtil();\r\n\t\t};\r\n\t\t\r\n\t\tvar getFile = function(type,mimeType)\r\n\t\t{\r\n\t\t\tvar objRet = null;\r\n\t\t\ttype = type ? type : \"blob\";\r\n\t\t\tswitch(type) \r\n\t\t\t{\r\n\t\t\t\tcase \"blob\":\r\n\t\t\t\t\tobjRet = getBlob(mimeType);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn objRet;\r\n\t\t};\r\n\t\t\r\n\t\tvar addFolders = function(arrPath)\r\n\t\t{\r\n\t\t\tvar arrReturn = null;\r\n\t\t\tif(arrPath && arrPath.length > 0)\r\n\t\t\t{\r\n\t\t\t\tarrReturn = [];\r\n\t\t\t\tfor(var index = 0;index < arrPath.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrReturn.push(addFolder(arrPath[index]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn arrReturn;\r\n\t\t};\r\n\t\t\r\n\t\tvar addFolder = function(path)\r\n\t\t{\r\n\t\t\treturn createFolder(path);\r\n\t\t};\r\n\t\t\r\n\t\tvar addFile = function(path,content,prop)\r\n\t\t{\r\n\t\t\treturn createFile(path,content,prop,false);\r\n\t\t};\r\n\t\t\r\n\t\tvar createFolder = function(path)\r\n\t\t{\r\n\t\t\tpath = util.addSlashAtEnd(path);\r\n\t\t\tif(objFiles[path])\r\n\t\t\t{\r\n\t\t\t\treturn objFiles[path].zipFile;\r\n\t\t\t}\r\n\t\t\treturn createFile(path,null,null,true);\r\n\t\t};\r\n\t\t\r\n\t\tvar createFile = function(path,content,prop,isDir)\r\n\t\t{\r\n\t\t\tprop = prop ? prop : {};\r\n\t\t\tvar item = {path: path,content: content,origContent: content};\r\n\t\t\titem.created = new Date();\r\n\t\t\titem.dataType = util.getDataType(content);\r\n\t\t\titem.isDir = isDir ? true : false;\r\n\t\t\tvar parent = util.getParentFolder(path);\r\n\t\t\tif(parent)\r\n\t\t\t{\r\n\t\t\t\tcreateFolder(parent);\r\n\t\t\t}\r\n\t\t\titem.isBase64 = (item.type == \"base64\");\r\n\t\t\titem.isBinary = (item.type == \"binary\");\r\n\t\t\tvar isUnicodeString = (item.dataType === \"string\") && item.isBase64 && item.isBinary;\r\n\t\t\tif (item.type != \"binary\") \r\n\t\t\t{\r\n\t\t\t\titem.isBinary = !isUnicodeString;\r\n\t\t }\r\n\t\t\tif(item.isDir || !path || !path.length)\r\n\t\t\t{\r\n\t\t\t\titem.dataType = \"string\";\r\n\t\t\t\titem.isBase64 = false;\r\n\t\t\t\titem.isBinary = true;\r\n\t\t\t\titem.content = \"\";\r\n\t\t\t}\r\n\t\t\titem.content = getContent(item);\r\n\t\t\tvar zipFile = new ZipFile(util,item,self);\r\n\t\t\tobjFiles[path] = {item: item,zipFile: zipFile};\r\n\t\t\t\r\n\t\t\treturn zipFile;\r\n\t\t};\r\n\t\t\r\n\t\tvar getContent = function(item)\r\n\t\t{\r\n\t\t\tvar refine = function(data)\r\n\t\t\t{\r\n\t\t\t\tvar dataType = item.dataType;\r\n\t\t\t\tif(dataType)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(dataType === \"string\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(item.isBase64)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdata = util.base64Decode(data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(item.isBinary)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t/*var arrData = new Uint8Array(data.length);\r\n\t\t\t\t\t\t\tdata = util.fillArrayWithString(data,arrData);*/\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (dataType === \"arraybuffer\") \r\n\t\t\t\t\t{\r\n\t\t\t data = new Uint8Array(item);\r\n\t\t\t }\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tconsole.warn(\"DataType cannot be detected for file \" + item.path);\r\n\t\t\t\t}\r\n\t\t\t\treturn data;\r\n\t\t\t};\r\n\t\t\tvar content = item.content;\r\n\t\t\tvar isBlob = (content instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(content)) !== -1);\r\n\t if(isBlob && typeof FileReader !== \"undefined\") \r\n\t {\r\n\t \treturn new Promise(function (resolve, reject) \r\n\t \t{\r\n\t var reader = new FileReader();\r\n\t reader.onload = function(event) \r\n\t {\r\n\t \titem.content = refine(event.target.result);\r\n\t \tresolve(event.target.result);\r\n\t };\r\n\t reader.onerror = function(event) \r\n\t {\r\n\t \tconsole.error(event.target.error);\r\n\t reject(event.target.error);\r\n\t };\r\n\t reader.readAsArrayBuffer(content);\r\n\t \t});\r\n\t }\r\n\t return refine(content);\r\n\t\t};\r\n\t\t\r\n\t\tvar clear = function()\r\n\t\t{\r\n\t\t objFiles = {};\r\n\t\t};\r\n\t\t\r\n\t\tvar getBlob = function(mimeType)\r\n\t\t{\r\n\t\t\tmimeType = mimeType ? mimeType : \"application/zip\";\r\n\t\t\tvar textOutput = buildFileStream();\r\n\t\t\tvar uInt8Output = util.buildUint8Array(textOutput);\r\n\t\t\tclear();\r\n\t\t\treturn new Blob([uInt8Output], { type: setting.mimeType });\r\n\t\t};\r\n\t\t\r\n\t\tvar buildFileStream = function(initContent)\r\n\t\t{\r\n\t\t\tinitContent = initContent ? initContent : \"\";\r\n\t\t\tvar len = Object.keys(objFiles).length;\r\n\t\t\tvar middleContent = \"\";\r\n\t\t\tvar lL = 0;\r\n\t var cL = 0;\r\n\t for(var path in objFiles)\r\n\t\t\t{\r\n\t \tvar file = objFiles[path].item;\r\n\t\t\t\tvar objHeader = getHeader(file, lL);\r\n\t\t\t\tvar fileHeader = objHeader.fileHeader;\r\n\t\t\t\tvar folderHeader = objHeader.folderHeader;\r\n\t\t\t\tvar content = objHeader.content;\r\n\t\t\t\tlL += fileHeader.length + content.length;\r\n\t cL += folderHeader.length;\r\n\t initContent += fileHeader + content;\r\n\t middleContent += folderHeader;\r\n\t\t\t}\r\n\t\t\tvar endContent = buildFolderEnd(len, cL, lL);\r\n\t return initContent + middleContent + endContent;\r\n\t\t};\r\n\t\t\r\n\t\tvar getHeader = function(file,offset)\r\n\t\t{\r\n\t\t\tvar content = util.utf8_encode(file.content);\r\n\t\t\tvar path = file.path;\r\n\t\t\tvar created = file.created;\r\n\t\t\tvar utfPath = util.utf8_encode(path);\r\n\t\t\tvar isUTF8 = (utfPath !== path);\r\n\t\t\tvar time = util.convertTime(created);\r\n\t\t var dt = util.convertDate(created);\r\n\t\t var extraFields = \"\";\r\n\t\t if (isUTF8) \r\n\t\t {\r\n\t var uExtraFieldPath = util.decToHex(1, 1) + util.decToHex(util.getFromCrc32Table(utfPath), 4) + utfPath;\r\n\t extraFields = \"\\x75\\x70\" + util.decToHex(uExtraFieldPath.length, 2) + uExtraFieldPath;\r\n\t }\r\n\t\t var header = '\\x0A\\x00' +\r\n\t (isUTF8 ? '\\x00\\x08' : '\\x00\\x00') + // general purpose bit flag\r\n\t '\\x00\\x00' +\r\n\t util.decToHex(time, 2) + // last modified time\r\n\t util.decToHex(dt, 2) + // last modified date\r\n\t util.decToHex(content ? util.getFromCrc32Table(content) : 0, 4) +\r\n\t util.decToHex(content ? content.length : 0, 4) + // compressed size\r\n\t util.decToHex(content ? content.length : 0, 4) + // uncompressed size\r\n\t util.decToHex(utfPath.length, 2) + // file name length\r\n\t util.decToHex(extraFields.length, 2); // extra field length\r\n\t \r\n\t\t var fileHeader = 'PK\\x03\\x04' + header + utfPath + extraFields;\r\n\t var folderHeader = 'PK\\x01\\x02' + // central header\r\n\t '\\x14\\x00' +\r\n\t header + // file header\r\n\t '\\x00\\x00' +\r\n\t '\\x00\\x00' +\r\n\t '\\x00\\x00' +\r\n\t (content ? '\\x00\\x00\\x00\\x00' : '\\x10\\x00\\x00\\x00') + // external file attributes\r\n\t util.decToHex(offset, 4) + // relative offset of local header\r\n\t utfPath + // file name\r\n\t extraFields; // extra field\r\n\t return { fileHeader: fileHeader, folderHeader: folderHeader, content: content || '' };\r\n\t\t};\r\n\t\t\r\n\t\tvar buildFolderEnd = function(totalEntries,size,startOffset)\r\n\t\t{\r\n\t\t\tvar retValue = \"PK\\x05\\x06\" + \"\\x00\\x00\" + \"\\x00\\x00\";\r\n\t\t\tretValue += util.decToHex(totalEntries, 2);\r\n\t\t\tretValue += util.decToHex(totalEntries, 2);\r\n\t\t\tretValue += util.decToHex(size, 4);\r\n\t\t\tretValue += util.decToHex(startOffset, 4);\r\n\t\t\tretValue += \"\\x00\\x00\";\r\n\t\t\treturn retValue;\r\n\t\t};\r\n\t\t\r\n\t var downloadFile = function(fileName,mimeType,type,content)\r\n\t {\r\n\t \tfileName = fileName ? fileName : \"download\";\r\n\t \tif (fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tfileName = fileName + \".zip\";\r\n\t }\r\n\t \tcontent = content ? content : getFile(type,mimeType);\r\n\t \tutil.downloadFile(fileName,content);\r\n\t };\r\n\t \r\n\t var ZipFile = function(util,item,objRoot)\r\n\t {\r\n\t \tvar self = this;\r\n\t \t\r\n\t \tvar addFolder = function(path)\r\n\t \t{\r\n\t \t\treturn objRoot.addFolder(getPath(path));\r\n\t \t};\r\n\t \t\r\n\t \tvar addFile = function(path,content)\r\n\t \t{\r\n\t \t\treturn objRoot.addFile(getPath(path),content);\r\n\t \t};\r\n\t \t\r\n\t \tvar getPath = function(path)\r\n\t \t{\r\n\t \t\treturn item.path + path;\r\n\t \t};\r\n\t \t\r\n\t \tif(item.isDir)\r\n\t \t{\r\n\t \t\tself.addFolder = addFolder;\r\n\t \t\tself.addFile = addFile;\r\n\t \t}\r\n\t };\r\n\t \r\n\t var ZipUtil = function()\r\n\t {\r\n\t \tvar self = this;\r\n\t \tvar crcTable = [];\r\n\t \tvar base64Key = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\t \t\r\n\t \tvar initialize = function()\r\n\t \t{\r\n\t \t\tcrcTable = makeCRCTable();\r\n\t \t};\r\n\t \t\r\n\t \t//https://stackoverflow.com/questions/18638900/javascript-crc32\r\n\t \tvar makeCRCTable = function()\r\n\t \t{\r\n\t \t var c;\r\n\t \t var crcTable = [];\r\n\t \t for(var n =0; n < 256; n++)\r\n\t \t {\r\n\t \t c = n;\r\n\t \t for(var k =0; k < 8; k++)\r\n\t \t {\r\n\t \t c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\r\n\t \t }\r\n\t \t crcTable[n] = c;\r\n\t \t }\r\n\t \t return crcTable;\r\n\t \t};\r\n\t \t\r\n\t \tvar getFromCrc32Table = function(content, crc)\r\n\t {\r\n\t \t\tif(typeof content === \"undefined\" || !content.length) \r\n\t \t\t{\r\n\t \t return 0;\r\n\t \t }\r\n\t \t\tif(!crc)\r\n\t \t{\r\n\t \t\tcrc = 0;\r\n\t \t}\r\n\t \tcrc ^= (-1);\r\n\t \t\tvar dataType = util.getDataType(content);\r\n\t \t\tif(dataType === \"string\")\r\n\t \t\t{\r\n\t\t var ch = 0;\r\n\t\t var k = 0;\r\n\t\t var l = 0;\r\n\t\t var len = content.length;\r\n\t\t for (var count = 0;count < len;count++) \r\n\t\t {\r\n\t\t \tch = content.charCodeAt(count);\r\n\t\t k = (crc ^ ch) & 0xFF;\r\n\t\t l = crcTable[k];\r\n\t\t crc = (crc >>> 8) ^ l;\r\n\t\t }\r\n\t \t\t}\r\n\t \t\telse\r\n\t \t\t{\r\n\t \t\t\tvar ch = 0;\r\n\t\t var k = 0;\r\n\t\t var l = 0;\r\n\t \t\t\tvar len = content.length;\r\n\t \t\t\tfor (var count = 0;count < len;count++) \r\n\t\t {\r\n\t \t\t\t\tch = content[count];\r\n\t \t\t\t\tk = (crc ^ ch) & 0xFF;\r\n\t \t\t\t\tl = crcTable[k];\r\n\t \t\t\t\tcrc = (crc >>> 8) ^ l;\r\n\t\t }\r\n\t \t\t}\r\n\t \t\treturn crc ^ (-1);\r\n\t };\r\n\t \r\n\t var buildUint8Array = function(content)\r\n\t {\r\n\t \tvar retValue = new Uint8Array(content.length);\r\n\t for (var count = 0; count < content.length; count++) \r\n\t {\r\n\t \tretValue[count] = content.charCodeAt(count);\r\n\t }\r\n\t return retValue;\r\n\t };\r\n\t \r\n\t //http://www.navioo.com/javascript/tutorials/Javascript_utf8_encode_1529.html\r\n\t // Encodes an ISO-8859-1 string to UTF-8 \r\n\t var utf8_encode = function(str) \r\n\t \t{\r\n\t \tvar retValue = \"\";\r\n\t \t\tvar str = str.replace(/\\r\\n/g, \"\\n\");\r\n\t \t\tvar len = str.length;\r\n\t \t\tvar start = 0;\r\n\t \t\tvar end = 0;\r\n\t \t\tvar enc = null;\r\n\t \t\tvar ch = null;\r\n\t \t\tfor(var count = 0;count < len;count++)\r\n\t \t\t{\r\n\t \t\t\tch = str.charCodeAt(count);\r\n\t \t\t\tenc = null;\r\n\t \t\t\tif(ch < 128)\r\n\t \t\t\t{\r\n\t \t\t\t\tend++;\r\n\t \t\t\t}\r\n\t \t\t\telse if(ch > 127 && ch < 2048)\r\n\t \t\t\t{\r\n\t \t\t\t\tenc = String.fromCharCode(ch >> 6 | 192);\r\n\t \t\t\t\tenc += String.fromCharCode((ch & 63) | 128);\r\n\t \t\t\t}\r\n\t \t\t\telse\r\n\t \t\t\t{\r\n\t \t\t\t\tenc = String.fromCharCode((ch >> 12) | 224);\r\n\t \t\t\t\tenc += String.fromCharCode(((ch >> 6) & 63) | 128);\r\n\t \t\t\t\tenc += String.fromCharCode((ch & 63) | 128);\r\n\t \t\t\t}\r\n\t \t\t\tif (enc != null) \r\n\t \t\t\t{ \r\n \t\t if (end > start) \r\n \t\t { \r\n \t\t \tretValue += str.substring(start, end); \r\n \t\t } \r\n \t\t retValue += enc; \r\n \t\t start = end = count + 1; \r\n \t\t } \r\n\t \t\t}\r\n\t \t\tif (end > start) \r\n\t \t\t{ \r\n\t \t\t\tretValue += str.substring(start,str.length); \r\n\t \t } \r\n\t \t\treturn retValue;\r\n\t };\r\n\t \r\n\t //http://www.navioo.com/javascript/tutorials/Javascript_utf8_decode_1528.html\r\n\t // Converts a UTF-8 encoded string to ISO-8859-1 \r\n\t var utf8_decode = function(str) \r\n\t \t{\r\n\t \tvar arrReturn = [];\r\n\t \tvar count = 0;\r\n\t \tvar retCount = 0;\r\n\t \tvar char1 = 0;\r\n\t \tvar char2 = 0;\r\n\t \tvar char3 = 0; \r\n\t str += \"\"; \r\n\t while (count < str.length) \r\n\t { \r\n\t char1 = str.charCodeAt(count); \r\n\t if (char1 < 128) \r\n\t { \r\n\t arrReturn[retCount++] = String.fromCharCode(char1); \r\n\t count++; \r\n\t } \r\n\t else if ((char1 > 191) && (char1 < 224)) \r\n\t { \r\n\t char2 = str.charCodeAt(count+1); \r\n\t arrReturn[retCount++] = String.fromCharCode(((char1 & 31) << 6) | (char2 & 63)); \r\n\t count += 2; \r\n\t } \r\n\t else \r\n\t { \r\n\t char2 = str.charCodeAt(count+1); \r\n\t char3 = str.charCodeAt(count+2); \r\n\t arrReturn[retCount++] = String.fromCharCode(((char1 & 15) << 12) | ((char2 & 63) << 6) | (char3 & 63)); \r\n\t count += 3; \r\n\t } \r\n\t } \r\n\t return arrReturn.join(''); \r\n\t \t};\r\n\t \r\n\t var decToHex = function(number, bytes) \r\n\t {\r\n\t \tvar retValue = \"\";\r\n\t \tfor(var count = 0;count < bytes;count++)\r\n\t \t\t{\r\n\t \t\tretValue += String.fromCharCode(number & 0xFF);\r\n\t \t\tnumber = number >>> 8;\r\n\t \t\t}\r\n\t \treturn retValue;\r\n\t };\r\n\t \r\n\t var fillArrayWithString = function(str,arrData) \r\n\t {\r\n\t \tfor (var count = 0;count < str.length;count++) \r\n\t \t{\r\n\t \t\tarrData[count] = str.charCodeAt(count) & 0xFF;\r\n\t }\r\n\t return arrData;\r\n\t };\r\n\t \r\n\t var convertTime = function(date)\r\n\t {\r\n\t \t var hour = date.getUTCHours();\r\n\t \t hour = hour << 6;\r\n\t \t hour = hour | date.getUTCMinutes();\r\n\t \t hour = hour << 5;\r\n\t \t hour = hour | date.getUTCSeconds() / 2;\r\n\t \t return hour;\r\n\t };\r\n\t \r\n\t var convertDate = function(date)\r\n\t {\r\n\t \tvar retDate = date.getUTCFullYear() - 1980;\r\n\t \tretDate = retDate << 4;\r\n\t \tretDate = retDate | (date.getUTCMonth() + 1);\r\n\t \tretDate = retDate << 5;\r\n\t \tretDate = retDate | date.getUTCDate();\r\n\t \treturn retDate;\r\n\t };\r\n\t \r\n\t var addSlashAtEnd = function(path) \r\n\t \t{\r\n\t \t if (path.slice(-1) !== \"/\") \r\n\t \t {\r\n\t \t path += \"/\";\r\n\t \t }\r\n\t \t return path;\r\n\t \t};\r\n\t \t\r\n\t \tvar getParentFolder = function(path) \r\n\t \t{\r\n\t \t if (path.slice(-1) === '/') \r\n\t \t {\r\n\t \t path = path.substring(0, path.length - 1);\r\n\t \t }\r\n\t \t var lastSlash = path.lastIndexOf('/');\r\n\t \t return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\r\n\t \t};\r\n\t \t\r\n\t \tvar getDataType = function(data) \r\n\t \t{\r\n\t \t if (typeof data === \"string\") \r\n\t \t {\r\n\t \t return \"string\";\r\n\t \t }\r\n\t \t if (Object.prototype.toString.call(data) === \"[object Array]\") \r\n\t \t {\r\n\t \t return \"array\";\r\n\t \t }\r\n\t \t if (typeof Buffer !== \"undefined\" && data instanceof Buffer) \r\n\t \t {\r\n\t \t return \"nodebuffer\";\r\n\t \t }\r\n\t \t if (data instanceof Uint8Array) \r\n\t \t {\r\n\t \t return \"uint8array\";\r\n\t \t }\r\n\t \t if (data instanceof ArrayBuffer) \r\n\t \t {\r\n\t \t return \"arraybuffer\";\r\n\t \t }\r\n\t \t};\r\n\t \t\r\n\t \tvar base64Decode = function(data) \r\n\t \t{\r\n\t \t\tvar chr1, chr2, chr3;\r\n\t \t var enc1, enc2, enc3, enc4;\r\n\t \t var i = 0, resultIndex = 0;\r\n\t \t \r\n\t \t if(data.indexOf('base64,') > -1)\r\n\t \t {\r\n\t \t \tvar index = data.indexOf('base64,') + 'base64,'.length;\r\n\t\t \t data = data.substring(index);\r\n\t \t }\r\n\t \t data = data.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\t \t var totalLength = data.length * 3 / 4;\r\n\t \t if(data.charAt(data.length - 1) === base64Key.charAt(64)) \r\n\t \t {\r\n\t \t totalLength--;\r\n\t \t }\r\n\t \t if(data.charAt(data.length - 2) === base64Key.charAt(64)) \r\n\t \t {\r\n\t \t totalLength--;\r\n\t \t }\r\n\t \t //totalLength is base64 expected length\r\n\t \t if (totalLength % 1 !== 0) \r\n\t \t {\r\n\t \t throw new Error(\"Invalid base64 data\");\r\n\t \t }\r\n\t \t var retValue = new Uint8Array(totalLength|0);\r\n\t \t while (i < data.length) \r\n\t \t {\r\n\t \t enc1 = base64Key.indexOf(data.charAt(i++));\r\n\t \t enc2 = base64Key.indexOf(data.charAt(i++));\r\n\t \t enc3 = base64Key.indexOf(data.charAt(i++));\r\n\t \t enc4 = base64Key.indexOf(data.charAt(i++));\r\n\r\n\t \t chr1 = (enc1 << 2) | (enc2 >> 4);\r\n\t \t chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n\t \t chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n\t \t retValue[resultIndex++] = chr1;\r\n\r\n\t \t if (enc3 !== 64) \r\n\t \t {\r\n\t \t retValue[resultIndex++] = chr2;\r\n\t \t }\r\n\t \t if (enc4 !== 64) \r\n\t \t {\r\n\t \t retValue[resultIndex++] = chr3;\r\n\t \t }\r\n\t \t }\r\n\r\n\t \t return retValue;\r\n\t \t};\r\n\t \t\r\n\t \tvar downloadFile = function(fileName,content)\r\n\t {\r\n\t \tif (\"msSaveOrOpenBlob\" in window.navigator) \r\n\t \t{\r\n\t window.navigator.msSaveOrOpenBlob(content, fileName);\r\n\t }\r\n\t else \r\n\t {\r\n\t var element = document.createElement(\"a\");\r\n\t var url = window.URL.createObjectURL(content);\r\n\t element.setAttribute(\"href\", url);\r\n\t element.setAttribute(\"download\", fileName);\r\n\t element.style.display = \"none\";\r\n\t document.body.appendChild(element);\r\n\t element.click();\r\n\t window.URL.revokeObjectURL(url);\r\n\t document.body.removeChild(element);\r\n\t }\r\n\t };\r\n\t \r\n\t initialize();\r\n\t \r\n\t self.getFromCrc32Table = getFromCrc32Table;\r\n\t self.buildUint8Array = buildUint8Array;\r\n\t self.utf8_encode = utf8_encode;\r\n\t self.utf8_decode = utf8_decode;\r\n\t self.decToHex = decToHex;\r\n\t self.fillArrayWithString = fillArrayWithString;\r\n\t self.convertTime = convertTime;\r\n\t self.convertDate = convertDate;\r\n\t self.addSlashAtEnd = addSlashAtEnd;\r\n\t self.getParentFolder = getParentFolder;\r\n\t self.getDataType = getDataType;\r\n\t self.base64Decode = base64Decode;\r\n\t self.downloadFile = downloadFile;\r\n\t };\r\n\t \r\n\t\tinitialize();\r\n\t\t\r\n\t\tself.addFolder = addFolder;\r\n\t\tself.addFolders = addFolders;\r\n\t\tself.addFile = addFile;\r\n\t\tself.getBlob = getBlob;\r\n\t\tself.getFile = getFile;\r\n\t\tself.downloadFile = downloadFile;\r\n\t};\r\n\t\r\n\treturn NSZip;\r\n})();\r\nnsModuleExport(this,\"NSZip\",NSZip);var NSXlsxExport = (function()\r\n{\r\n\tvar NSXlsxExport = function(config)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar xlsxUtil = null;\r\n\t\tvar workbook = null;\r\n\t\tvar styles = null;\r\n\t\tvar setting = {};\r\n\t\tvar sharedString = null;\r\n\t\t\r\n\t\tvar initialize = function()\r\n\t\t{\r\n\t\t\tif(!config)\r\n\t\t\t{\r\n\t\t\t\tconfig = {};\r\n\t\t\t}\r\n\t\t\txlsxUtil = new XlsxUtil();\r\n\t\t\tsetting = {\r\n\t\t\t\tfileName: config[\"fileName\"] || \"download\",\r\n\t\t\t\tsheets: config[\"sheets\"],\r\n\t\t\t\tmaxCharWidth: config[\"maxCharWidth\"]\r\n\t\t\t};\r\n\t\t\tif(!setting.sheets || setting.sheets.length == 0)\r\n\t\t\t{\r\n\t\t\t\txlsxUtil.throwNSError(\"sheets is not defined in config\");\r\n\t\t\t}\r\n\t\t\tif(setting.fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tsetting.fileName = setting.fileName + \".xlsx\";\r\n\t }\r\n\t\t\tstyles = new XlsxStyle(xlsxUtil);\r\n\t\t\tsharedString = new XlsxSharedStrings(xlsxUtil);\r\n\t\t\tworkbook = new XlsxWorkbook(xlsxUtil,styles,sharedString,setting.sheets,setting);\r\n\t\t};\r\n\t\t\r\n\t\tvar process = function()\r\n\t\t{\r\n\t\t\tvar mimeType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\t\t\tvar zip = new NSZip();\r\n\t\t\tvar xl = zip.addFolder(\"xl\");\r\n\t\t\tsave(zip,xl);\r\n\t\t\tzip.downloadFile(setting.fileName,mimeType);\r\n\t\t};\r\n\t\t\r\n\t\tvar save = function(zip,xl)\r\n\t\t{\r\n\t\t\tvar strWorkbook = workbook.process();\r\n\t\t\tsaveSheets(zip,xl);\r\n\t\t\tsaveStyles(zip,xl);\r\n\t\t\tsaveSharedStrings(zip,xl);\r\n\t\t\tzip.addFile('[Content_Types].xml', getContentTypesXml());\r\n\t\t\tzip.addFile('_rels/.rels', getRels());\r\n\t\t\txl.addFile('workbook.xml', strWorkbook);\r\n\t\t\txl.addFile('_rels/workbook.xml.rels', getWorkbookXMLRels());\r\n\t\t};\r\n\t\t\r\n\t\tvar saveSheets = function(zip,xl)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < setting.sheets.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar sheet = workbook.getSheet(count);\r\n\t\t\t\txl.addFile(sheet.getPath(),sheet.getSheetData());\r\n\t\t\t\txlsxUtil.addSheetProp(\"relationship\",sheet.getRelationship());\r\n\t\t\t\txlsxUtil.addSheetProp(\"override\",sheet.getOverride());\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tvar getWorkbookXMLRels = function()\r\n\t\t{\r\n\t\t\tvar relationShip = {style:{type:xlsxUtil.schemas.stylesheet,target:'styles.xml'},\r\n\t\t\t\t\t\t\t\tsharedStrings:{type:xlsxUtil.schemas.sharedStrings,target:'sharedStrings.xml'}\r\n\t\t\t\t\t\t\t };\r\n\t\t\tvar arrChild = [];\r\n\t\t\tvar index = setting.sheets.length;\r\n\t\t\tfor(var key in relationShip)\r\n\t\t\t{\r\n\t\t\t\tvar item = relationShip[key];\r\n\t\t\t\tarrChild.push(xlsxUtil.getXML({\r\n\t\t\t\t\t\tname: 'Relationship',\r\n\t\t\t\t\t\tattributes: {'Id':'rId' + (++index),'Type': item.type,'Target': item.target}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tarrChild.push(xlsxUtil.getSheetProp(\"relationship\"));\r\n\t\t\t\r\n\t\t\treturn xlsxUtil.getXML({\r\n\t\t\t\tname: 'Relationships',\r\n\t\t\t\tns: 'relationshipPackage',\r\n\t\t\t\tchildren: arrChild\r\n\t\t\t});\r\n\t\t};\r\n\t\t\r\n\t\tvar saveStyles = function(zip,xl)\r\n\t\t{\r\n\t\t\txl.addFile('styles.xml', styles.getTag());\r\n\t\t};\r\n\t\t\r\n\t\tvar saveSharedStrings = function(zip,xl)\r\n\t\t{\r\n\t\t\tif (sharedString.hasString() > 0) \r\n\t\t\t{\r\n\t\t\t\txl.addFile('sharedStrings.xml', sharedString.getTag());\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tvar getRels = function()\r\n\t\t{\r\n\t\t\tvar rels = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n ' +\r\n\t\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\\n ' +\r\n\t\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\\n ' +\r\n\t\t\t'</Relationships>';\r\n\t\t\t\r\n\t\t\treturn rels;\r\n\t\t};\r\n\t\t\r\n\t\tvar getContentTypesXml = function()\r\n\t\t{\r\n\t\t\tvar override = {workbook:{partName:'/xl/workbook.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'},\r\n\t\t\t\t\t\t\t\tstyles:{partName:'/xl/styles.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml'}\r\n\t\t\t\t \t\t\t };\r\n\t\t\tif (sharedString.hasString() > 0) \r\n\t\t\t{\r\n\t\t\t\toverride[\"sharedStrings\"] = {partName:'/xl/sharedStrings.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'}\r\n\t\t\t}\r\n\t\t\tvar arrChild = [];\r\n\t\t\tarrChild.push('<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>');\r\n\t\t\tarrChild.push('<Default Extension=\"xml\" ContentType=\"application/xml\"/>');\r\n\t\t\tfor(var key in override)\r\n\t\t\t{\r\n\t\t\t\tvar item = override[key];\r\n\t\t\t\tarrChild.push(xlsxUtil.getXML({\r\n\t\t\t\t\t\tname: 'Override',\r\n\t\t\t\t\t\tattributes: {'PartName': item.partName,'ContentType': item.contentType}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tarrChild.push(xlsxUtil.getSheetProp(\"override\"));\r\n\t\t\t\r\n\t\t\treturn xlsxUtil.getXML({\r\n\t\t\t\tname: 'Types',\r\n\t\t\t\tns: 'contentTypes',\r\n\t\t\t\tchildren: arrChild\r\n\t\t\t});\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxStyle = function(util)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar objTypes = {numberFormats:{def: StyleNumberFormat},\r\n\t\t\t\t\t\t\tfonts:{def: StyleFonts},\r\n\t\t\t\t\t\t\tfills:{def: StyleFills},\r\n\t\t\t\t\t\t\tborders:{def: StyleBorder},\r\n\t\t\t\t\t\t\tcells:{def: StyleCells}};\r\n\t\t\tvar defaultTableStyle = '';\r\n\t\t\tvar mergeCache = {};\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tfor(var key in objTypes)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjTypes[key][\"ins\"] = new objTypes[key][\"def\"](util,self);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFormat = function(style,name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].add(style,name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getStyle = function(name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].getStyle(name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getStyleID = function(name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].getStyleID(name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFillOutFormat = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tif (getStyle(objStyle).fillOut) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn objStyle;\r\n\t\t\t\t}\r\n\t\t\t\tvar style = objTypes[\"cells\"][\"ins\"].cutVisible(objTypes[\"cells\"][\"ins\"].fullGet(objStyle));\r\n\t\t\t\tif(!util.isObjectEmpty(style))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn addFormat(style);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar merge = function(format)\r\n\t\t\t{\r\n\t\t\t\tvar formats = [];\r\n\t\t\t\tfor(var count = 0;count < arguments.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(arguments[count])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformats.push(arguments[count]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (formats.length === 0) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} \r\n\t\t\t\telse if (formats.length === 1) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn addFormat(formats[0]);\r\n\t\t\t\t}\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\t//https://www.w3schools.com/jsref/jsref_reduce.asp\r\n\t\t\t\t\tvar id = formats.reduce(function (total, currentValue,currentIndex, arr) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn total + JSON.stringify(currentValue);\r\n\t\t\t\t\t\t\t}, '');\r\n\t\t\t\t\tvar merged = mergeCache[id];\r\n\t\t\t\t\tif (!merged) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar cells = objTypes[\"cells\"][\"ins\"];\r\n\t\t\t\t\t\tvar newFormat = {};\r\n\t\t\t\t\t\tfor(var index = 0;index < formats.length;index++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar format = formats[index];\r\n\t\t\t\t\t\t\tnewFormat = cells.merge(newFormat,cells.fullGet(format));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmerged = cells.add(newFormat,null,{ merge: true});\r\n\t\t\t\t\t\tmergeCache[id] = merged;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn merged;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFontFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fonts\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addBorderFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"borders\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addPatternFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fills\"][\"ins\"].add(format, name, {fillType:'pattern'});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addGradientFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fills\"][\"ins\"].add(format, name, {fillType:'gradient'});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addNumberFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addTableFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addTableElementFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setDefaultTableStyle = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar arrChildren = [];\r\n\t\t\t\tfor(var key in objTypes)\r\n\t\t\t\t{\r\n\t\t\t\t\t//console.log(key + \" :: \" + objTypes[key][\"ins\"].getFinalTag());\r\n\t\t\t\t\tarrChildren.push(objTypes[key][\"ins\"].getFinalTag());\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'styleSheet',\r\n\t\t\t\t\tns: 'spreadsheetml',\r\n\t\t\t\t\tchildren: arrChildren\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tself.addFormat = addFormat;\r\n\t\t\tself.getStyle = getStyle;\r\n\t\t\tself.getStyleID = getStyleID;\r\n\t\t\tself.addFillOutFormat = addFillOutFormat;\r\n\t\t\tself.merge = merge;\r\n\t\t\tself.addFontFormat = addFontFormat;\r\n\t\t\tself.addBorderFormat = addBorderFormat;\r\n\t\t\tself.addPatternFormat = addPatternFormat;\r\n\t\t\tself.addGradientFormat = addGradientFormat;\r\n\t\t\tself.addNumberFormat = addNumberFormat;\r\n\t\t\tself.addTableFormat = addTableFormat;\r\n\t\t\tself.addTableElementFormat = addTableElementFormat;\r\n\t\t\tself.setDefaultTableStyle = setDefaultTableStyle;\r\n\t\t\tself.getTag = getTag;\r\n\t\t\t\r\n\t\t\tself.objTypes = objTypes;\r\n\t\t\t\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleCells = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"format\";\r\n\t\t\tstyle.saveName = \"cellXfs\";\r\n\t\t\tvar alignment = new XlsxAlignment(util);\r\n\t\t\tvar protection = new XlsxProtection(util);\r\n\t\t\t\r\n\t\t\tvar ALLOWED_PARTS = ['format', 'fill', 'border', 'font'];\r\n\t\t\tvar XLS_NAMES = ['numFmtId', 'fillId', 'borderId', 'fontId'];\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tfor(var key in util.numberPredifined)\r\n\t\t\t\t{\r\n\t\t\t\t\tstyle.predefined[key] = {format: key};\r\n\t\t\t\t}\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t\tstyle.saveEmpty = false;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle,prop)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\t\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].add(objStyle.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].add(objStyle.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.pattern) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.pattern, null, { fillType: 'pattern' });\r\n\t\t\t\t}\r\n\t\t\t\telse if (objStyle.gradient) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.gradient, null, { fillType: 'gradient' });\r\n\t\t\t\t} \r\n\t\t\t\telse if (prop && prop.merge && objStyle.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.fill, null, prop);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].add(objStyle.border);\r\n\t\t\t\t}\r\n\t\t\t\tvar alignmentValue = prop && prop.merge ? alignment.getStyleObj(objStyle.alignment) : alignment.getStyleObj(objStyle);\r\n\t\t\t\tif (alignmentValue) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = alignmentValue;\r\n\t\t\t\t}\r\n\t\t\t\tvar protectionValue = prop && prop.merge ? protection.getStyleObj(objStyle.protection) : protection.getStyleObj(objStyle);\r\n\t\t\t\tif (protectionValue) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = protectionValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fillOut) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fillOut = objStyle.fillOut;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.fullGet = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tif (style.getStyleID(objStyle)) \r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = style.getStyle(objStyle);\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = style.getStyleObj(objStyle);\r\n\t\t\t\t}\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].getStyle(objStyle.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].getStyle(objStyle.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].getStyle(objStyle.fill);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].getStyle(objStyle.border);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = objStyle.alignment;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = objStyle.protection;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.cutVisible = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = objStyle.format;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = objStyle.font;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = objStyle.alignment;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = objStyle.protection;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.merge = function(formatTo,formatFrom) \r\n\t\t\t{\r\n\t\t\t\tif (formatTo.format || formatFrom.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].merge(formatTo.format, formatFrom.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.font || formatFrom.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].merge(formatTo.font, formatFrom.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.fill || formatFrom.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].merge(formatTo.fill, formatFrom.fill);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.border || formatFrom.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].merge(formatTo.border, formatFrom.border);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.alignment || formatFrom.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.alignment = alignment.merge(formatTo.alignment, formatFrom.alignment);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.protection || formatFrom.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.protection = protection.merge(formatTo.protection, formatFrom.protection);\r\n\t\t\t\t}\r\n\t\t\t\treturn formatTo;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar attributes = {};\r\n\t\t\t\tvar children = [];\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(alignment.getTag(objStyle.alignment));\r\n\t\t\t\t\tattributes['applyAlignment'] = true;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(protection.getTag(objStyle.protection));\r\n\t\t\t\t\tattributes['applyProtection'] = true;\r\n\t\t\t\t}\r\n\t\t\t\tfor(var key in objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(ALLOWED_PARTS.indexOf(key) > -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar value = objStyle[key];\r\n\t\t\t\t\t\tvar xlsName = XLS_NAMES[ALLOWED_PARTS.indexOf(key)];\r\n\t\t\t\t\t\tif (key === 'format') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyNumberFormat'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'fill') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"fills\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyFill'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'border') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"borders\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyBorder'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'font') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"fonts\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyFont'] = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'xf',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleBorder = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"border\";\r\n\t\t\tstyle.saveName = \"borders\";\r\n\t\t\tvar mainBorders = ['left', 'right', 'top', 'bottom'];\r\n\t\t\tvar borders = ['left', 'right', 'top', 'bottom', 'diagonal'];\r\n\t\t\tvar borderStyle = {\r\n\t\t\t\t\tdashDot: 'dashDot',\r\n\t\t\t\t\tdashDotDot: 'dashDotDot',\r\n\t\t\t\t\tdashed: 'dashed',\r\n\t\t\t\t\tdotted: 'dotted',\r\n\t\t\t\t\tdouble: 'double',\r\n\t\t\t\t\thair: 'hair',\r\n\t\t\t\t\tmedium: 'medium',\r\n\t\t\t\t\tmediumDashDot: 'mediumDashDot',\r\n\t\t\t\t\tmediumDashDotDot: 'mediumDashDotDot',\r\n\t\t\t\t\tmediumDashed: 'mediumDashed',\r\n\t\t\t\t\tnone: 'none',\r\n\t\t\t\t\tslantDashDot: 'slantDashDot',\r\n\t\t\t\t\tthick: 'thick',\r\n\t\t\t\t\tthin: 'thin'\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif(!objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = {};\r\n\t\t\t\t}\r\n\t\t\t\tif(objStyle[\"style\"] || objStyle[\"color\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!objStyle[\"style\"] || borderStyle[objStyle[\"style\"]]) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(var index = 0;index < mainBorders.length;index++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[mainBorders[index]] = {style: objStyle.style,color: objStyle.color};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar name = borders[index];\r\n\t\t\t\t\t\tvar border = objStyle[name];\r\n\t\t\t\t\t\tif (border && (!objStyle.style || borderStyle[border.style])) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[name] = {style: border.style,color: border.color };\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[name] = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar tagChildren = [];\r\n\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar childTag = borders[index];\r\n\t\t\t\t\tvar border = objStyle[childTag];\r\n\t\t\t\t\tvar attributes = null;\r\n\t\t\t\t\tvar children = null;\r\n\r\n\t\t\t\t\tif (border) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (border.style) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes = {'style': border.style};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (border.color) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tchildren = [util.getColorTag(border.color)];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttagChildren.push(util.getXML({\r\n\t\t\t\t\t\tname: childTag,\r\n\t\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\t\tchildren: children\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'border',\r\n\t\t\t\t\tchildren: tagChildren\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.merge = function(formatTo,formatFrom)\r\n\t\t\t{\r\n\t\t\t\tformatTo = (!util.isUndefinedOrNull(formatTo)) ? formatTo : style.getStyleObj({});\r\n\t\t\t\tif (formatFrom) \r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar childTag = borders[index];\r\n\t\t\t\t\t\tvar borderFrom = formatFrom[childTag];\r\n\t\t\t\t\t\tif (borderFrom && borderFrom.style) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tformatTo[childTag].style = borderFrom.style;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (borderFrom && borderFrom.color) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tformatTo[childTag].color = borderFrom.color;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn formatTo;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tstyle.borderStyle = borderStyle;\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleFills = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"fill\";\r\n\t\t\tstyle.saveName = \"fills\";\r\n\t\t\t\r\n\t\t\tvar PATTERN_TYPES = ['none', 'solid', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis'];\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({ type: 'none' }, { fillType: 'pattern' }) }, { format: style.getStyleObj({ type: 'gray125' }, { fillType: 'pattern' }) });\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle,prop)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tretValue[\"fillType\"] = prop.merge ? objStyle.fillType : prop.fillType;\r\n\t\t\t\tif(retValue[\"fillType\"] === \"pattern\")\r\n\t\t\t\t{\r\n\t\t\t\t\tvar fgColor = (prop.merge ? objStyle.fgColor : objStyle.color) || 'FFFFFFFF';\r\n\t\t\t\t\tvar bgColor = (prop.merge ? objStyle.bgColor : objStyle.backColor) || 'FFFFFFFF';\r\n\t\t\t\t\tvar patternType = prop.merge ? objStyle.patternType : objStyle.type;\r\n\t\t\t\t\t\r\n\t\t\t\t\tretValue[\"patternType\"] = util.hasInArray(PATTERN_TYPES, patternType) ? patternType : 'solid';\r\n\t\t\t\t\tif (prop.isTable && retValue.patternType === 'solid') \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue[\"fgColor\"] = bgColor;\r\n\t\t\t\t\t\tretValue[\"bgColor\"] = fgColor;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue[\"fgColor\"] = fgColor;\r\n\t\t\t\t\t\tretValue[\"bgColor\"] = bgColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tif (!util.isUndefinedOrNull(objStyle['left']))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.left = objStyle.left || 0;\r\n\t\t\t\t\t\tretValue.right = objStyle.right || 0;\r\n\t\t\t\t\t\tretValue.top = objStyle.top || 0;\r\n\t\t\t\t\t\tretValue.bottom = objStyle.bottom || 0;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.degree = objStyle.degree || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tretValue.start = objStyle.start || 'FFFFFFFF';\r\n\t\t\t\t\tretValue.end = objStyle.end || 'FFFFFFFF';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar children = (objStyle.fillType === 'pattern') ? [getPatternTag(objStyle)] : [getGradientTag(objStyle)];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'fill',\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getPatternTag = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar attributes = {'patternType': objStyle.patternType};\r\n\t\t\t\tvar children = [util.getXML({\r\n\t\t\t\t\tname: 'fgColor',\r\n\t\t\t\t\tattributes: {'rgb': util.getCanonColor(objStyle.fgColor)}\r\n\t\t\t\t}), util.getXML({\r\n\t\t\t\t\tname: 'bgColor',\r\n\t\t\t\t\tattributes: {'rgb': util.getCanonColor(objStyle.bgColor)}\r\n\t\t\t\t})];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'patternFill',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getGradientTag = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar attributes = {};\r\n\r\n\t\t\t\tif (objStyle.degree) \r\n\t\t\t\t{\r\n\t\t\t\t\tattributes['degree'] = objStyle.degree;\r\n\t\t\t\t} \r\n\t\t\t\telse if (objStyle.left) \r\n\t\t\t\t{\r\n\t\t\t\t\tattributes['type'] = 'path';\r\n\t\t\t\t\tattributes['left'] = objStyle.left;\r\n\t\t\t\t\tattributes['right'] = objStyle.right;\r\n\t\t\t\t\tattributes['top'] = objStyle.top;\r\n\t\t\t\t\tattributes['bottom'] = objStyle.bottom;\r\n\t\t\t\t}\r\n\t\t\t\tvar children = [util.getXML({\r\n\t\t\t\t\tname: 'stop',\r\n\t\t\t\t\tattributes: {'position': 0},\r\n\t\t\t\t\tchildren: [util.getColorTag(objStyle.start)]\r\n\t\t\t\t}), util.getXML({\r\n\t\t\t\t\tname: 'stop',\r\n\t\t\t\t\tattributes: {'position': 1},\r\n\t\t\t\t\tchildren: [util.getColorTag(objStyle.end)]\r\n\t\t\t\t})];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'gradientFill',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleFonts = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"font\";\r\n\t\t\tstyle.saveName = \"fonts\";\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar r