ns-components-angular
Version:
Angular Wrapper Components for NSComponents
1 lines • 185 kB
TypeScript
export declare const NSDocxExportCode = "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 nsExtendPrototype = (function()\r\n{\r\n\tvar nsExtendPrototype = function(source,destination) \r\n\t{\r\n\t\tif(source && destination)\r\n\t\t{\r\n\t\t\tdestination.prototype = Object.create(source.prototype);\r\n\t\t\tdestination.prototype.constructor = destination;\r\n\t\t\tdestination.prototype.base = source.prototype;\r\n\t\t\treturn source.prototype;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\treturn nsExtendPrototype;\r\n})();\r\n\r\nvar NSDocxExport = (function()\r\n{\r\n\tvar NSDocxExport = function(config)\r\n\t{\r\n\t\tthis.__config = config;\r\n\t\tthis.util = null;\r\n\t\tthis.__exportUtil = null;\r\n\t\tthis.__setting = {};\r\n\t\tthis.__objOrientation = {};\r\n\t\tthis.__arrDefault = [];\r\n\t\tthis.__arrOverride = [];\r\n\t\tthis.__arrRelationship = [];\r\n\t\tthis.__relationshipID = 0;\r\n\t\tthis.__extraFiles = {};\r\n\t\tthis.__arrChildren = [];\r\n\t\tthis.__pageSection = null;\r\n\t\tthis.__styles = null;\r\n\t\tthis.__enableChunk = true;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.process = function()\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar objPromise = new Promise(function(resolve,reject)\r\n\t\t{\r\n\t\t\tvar mimeType = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\r\n\t\t\tvar zip = new NSZip();\r\n\t\t\tself.__save(zip).then(function(){\r\n\t\t\t\tzip.downloadFile(self.__setting.fileName,mimeType);\r\n\t\t\t\tresolve(true);\r\n\t\t\t}).catch(function(error){\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn objPromise;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.addSection = function()\r\n\t{\r\n\t\tthis.__enableChunk = false;\r\n\t\tvar section = new Section(this);\r\n\t this.__arrChildren.push(section)\r\n\t return section;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.addParagraph = function(option)\r\n\t{\r\n\t\tthis.__enableChunk = false;\r\n\t\tvar paragraph = new Paragraph(this,option);\r\n\t this.__arrChildren.push(paragraph)\r\n\t return paragraph;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.addTable = function(option)\r\n\t{\r\n\t\tthis.__enableChunk = false;\r\n\t\tvar table = new Table(this,option);\r\n\t this.__arrChildren.push(table)\r\n\t return table;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.addHeader = function(type)\r\n\t{\r\n\t\t//this.__enableChunk = false;\r\n\t\tvar header = this.__pageSection.addHeader(type);\r\n\t return header;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.addFooter = function(type)\r\n\t{\r\n\t\t//this.__enableChunk = false;\r\n\t\tvar footer = this.__pageSection.addFooter(type);\r\n\t return footer;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.styles = function(value)\r\n\t{\r\n\t\tif(value && value instanceof Styles)\r\n\t\t{\r\n\t\t\tthis.__styles = value;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t!this.__styles && (this.__styles = new Styles(this,value));\r\n\t\t}\r\n\t\treturn this.__styles;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.getPageSection = function()\r\n\t{\r\n\t\treturn this.__pageSection;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__initialize = function()\r\n\t{\r\n\t\tif(!this.__config)\r\n\t\t{\r\n\t\t\tthis.__config = {};\r\n\t\t}\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.__exportUtil = new ExportUtil(this.util);\r\n\t\tthis.__setting = {\r\n\t\t\tfileName: this.__config[\"fileName\"] || \"download\",\r\n\t\t\thtmlSetting: this.__config[\"htmlSetting\"],\r\n\t\t\tprintSetting: this.__config[\"printSetting\"],\r\n\t\t\tstyles: this.__config[\"styles\"],\r\n\t\t};\r\n\t\tthis.__setHtmlSetting();\r\n\t\tthis.__setPrintSetting();\r\n\t\tthis.__initMargins();\r\n\t\tthis.__initOrientation();\r\n\t\tthis.__pageSection = new Section(this);\r\n\t\tif(this.__setting.fileName.indexOf(\".\") === -1) \r\n\t\t{\r\n\t\t\tthis.__setting.fileName = this.__setting.fileName + \".docx\";\r\n }\r\n\t\tvar arrStyles = this.__getDefaultStyle();\r\n\t\tvar styles = this.__setting.styles || {};\r\n\t\tif(styles.styles && styles.styles.length)\r\n\t\t{\r\n\t\t\tarrStyles = arrStyles.concat(styles.styles);\r\n\t\t}\r\n\t\tstyles.styles = arrStyles;\r\n\t\tthis.styles(styles);\r\n\t};\r\n\t\r\n\t//by default TableNormal and TableGrid are available for table\r\n\tNSDocxExport.prototype.__getDefaultStyle = function()\r\n\t{\r\n\t\tvar arrDefault = [];\r\n\t\tvar tblNormal = {\r\n\t id: \"TableNormal\",\r\n\t type: \"table\",\r\n\t name: \"Normal Table\",\r\n\t basedOn: \"Normal\",\r\n\t uiPriority: \"99\",\r\n\t semiHidden: true,\r\n\t unhideWhenUsed: true,\r\n\t quickFormat: true,\r\n\t table: {\r\n\t \tcellMargin: { top: {width: 0,type: \"dxa\"}, \r\n\t \t\t\t\t left: {width: 108,type: \"dxa\"},\r\n\t \t\t\t\t bottom: {width: 0,type: \"dxa\"}, \r\n\t \t\t\t\t right: {width: 108,type: \"dxa\"}, \r\n\t \t\t\t\t},\r\n\t },\r\n\t };\r\n\t\tarrDefault.push(tblNormal);\r\n\t\tvar tblGrid = {\r\n\t id: \"TableGrid\",\r\n\t type: \"table\",\r\n\t name: \"Table Grid\",\r\n\t basedOn: \"TableNormal\",\r\n\t uiPriority: \"59\",\r\n\t paragraph:{spacing: { after: 0 },},\r\n\t table: {\r\n\t \tborders: {top: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t left: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t bottom: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t right: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t insideH: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t insideV: {color: \"auto\",space: 0,size: 4,value: \"single\"},\r\n\t \t\t\t },\r\n\t \tcellMargin: { top: {width: 0,type: \"dxa\"}, \r\n\t \t\t\t\t left: {width: 108,type: \"dxa\"},\r\n\t \t\t\t\t bottom: {width: 0,type: \"dxa\"}, \r\n\t \t\t\t\t right: {width: 108,type: \"dxa\"}, \r\n\t \t\t\t\t},\r\n\t },\r\n\t };\r\n\t\tarrDefault.push(tblGrid);\r\n\t\treturn arrDefault;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__setPrintSetting = function()\r\n\t{\r\n\t\tvar printSetting = this.__setting.printSetting || {};\r\n\t\tthis.__setting.printSetting = {\r\n\t\t\t\torientation: printSetting[\"orientation\"] || \"portrait\",\r\n\t\t\t\tmargins: printSetting[\"margins\"]\r\n\t\t};\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__initOrientation = function()\r\n\t{\r\n\t\tthis.__objOrientation = {landscape:{width: 16838,height: 11906,orientation: \"landscape\"},\r\n\t\t\t\t\t\t portrait:{width: 11906,height: 16838,orientation: \"portrait\"},\r\n\t\t\t\t\t\t };\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__initMargins = function()\r\n\t{\r\n\t\t/*var margins = this.__setting.printSetting.margins;\r\n\t\tif(margins)\r\n\t\t{\r\n\t\t\tthis.__setting.printSetting.margins = {\r\n\t\t\t\t\t top: this.util.isUndefinedOrNull(margins[\"top\"]) ? null : parseInt(margins[\"top\"]),\r\n\t\t\t\t right: this.util.isUndefinedOrNull(margins[\"right\"]) ? null : parseInt(margins[\"right\"]),\r\n\t\t\t\t bottom: this.util.isUndefinedOrNull(margins[\"bottom\"]) ? null : parseInt(margins[\"bottom\"]),\r\n\t\t\t\t left: this.util.isUndefinedOrNull(margins[\"left\"]) ? null : parseInt(margins[\"left\"]),\r\n\t\t\t\t header: this.util.isUndefinedOrNull(margins[\"header\"]) ? null : parseInt(margins[\"header\"]),\r\n\t\t\t\t footer: this.util.isUndefinedOrNull(margins[\"footer\"]) ? null : parseInt(margins[\"footer\"]),\r\n\t\t\t\t gutter: this.util.isUndefinedOrNull(margins[\"gutter\"]) ? null: parseInt(margins[\"gutter\"]),\t\r\n\t\t\t};\r\n\t\t}*/\r\n\t\tvar margins = this.__setting.printSetting.margins || {};\r\n\t\tthis.__setting.printSetting.margins = {\r\n\t\t\t top: this.util.isUndefinedOrNull(margins[\"top\"]) ? 1440 : parseInt(margins[\"top\"]),\r\n\t\t right: this.util.isUndefinedOrNull(margins[\"right\"]) ? 1440 : parseInt(margins[\"right\"]),\r\n\t\t bottom: this.util.isUndefinedOrNull(margins[\"bottom\"]) ? 1440 : parseInt(margins[\"bottom\"]),\r\n\t\t left: this.util.isUndefinedOrNull(margins[\"left\"]) ? 1440 : parseInt(margins[\"left\"]),\r\n\t\t header: this.util.isUndefinedOrNull(margins[\"header\"]) ? 708 : parseInt(margins[\"header\"]),\r\n\t\t footer: this.util.isUndefinedOrNull(margins[\"footer\"]) ? 708 : parseInt(margins[\"footer\"]),\r\n\t\t gutter: this.util.isUndefinedOrNull(margins[\"gutter\"]) ? 0: parseInt(margins[\"gutter\"]),\t\r\n\t\t};\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__save = function(zip)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar resolveOtherFiles = function()\r\n\t\t{\r\n\t\t\tword.addFile(\"document.xml\",self.__getDocumentFile());\r\n\t\t\tif(self.__styles)\r\n\t\t\t{\r\n\t\t\t\tvar styleXml = self.__styles.toXml();\r\n\t\t\t\tif(styleXml)\r\n\t\t\t\t{\r\n\t\t\t\t\tself.__addFile(null,\"styles.xml\",\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\")\r\n\t\t\t\t\tconsole.log(styleXml);\r\n\t\t\t\t\tword.addFile(\"styles.xml\",styleXml);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tword.addFile(\"numbering.xml\",);\r\n\t\t\tvar wordRels = word.addFolder(\"_rels\");\r\n\t\t\twordRels.addFile(\"document.xml.rels\",self.__getWordRels());\r\n\t\t\tzip.addFile(\"_rels/.rels\", self.__getRels());\r\n\t\t\tzip.addFile(\"[Content_Types].xml\", self.__getContentTypesXml());\r\n\t\t\tself.__addExtraFiles.call(self,zip,word);\r\n\t\t};\r\n\t\tvar objPromise = null;\r\n\t\tvar word = zip.addFolder(\"word\");\r\n\t\tif(this.__isChunk())\r\n\t\t{\r\n\t\t\tobjPromise = new Promise(function(resolve,reject)\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tself.__getHtmlContent(word).then(function(data){\r\n\t\t\t\t\tif(data)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tself.__addFile(null,\"afchunk.mht\",\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\",\"message/rfc822\")\r\n\t\t\t\t\t\t//self.__arrOverride.push({partName:\"/word/afchunk.mht\",contentType:\"message/rfc822\"});\r\n\t\t\t\t\t\t//self.__arrRelationship.push({id:\"htmlChunk\",type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\",target:\"/word/afchunk.mht\"});\r\n\t\t\t\t\t\tword.addFile(\"afchunk.mht\",data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresolveOtherFiles();\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\r\n\t\t\tobjPromise = new Promise(function(resolve,reject)\r\n\t\t\t{\r\n\t\t\t\tresolveOtherFiles();\r\n\t\t\t\tresolve(true);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn objPromise;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__getContentTypesXml = function()\r\n\t{\r\n\t\tvar isChunk = this.__isChunk();\r\n\t\tvar objDefault = {rels:{extension:\"rels\",contentType:\"application/vnd.openxmlformats-package.relationships+xml\",isDefault:true},\r\n\t\t\t\t\t\t xml:{extension:\"xml\",contentType:\"application/xml\",isDefault:true},\r\n\t\t\t\t\t\t png:{extension:\"png\",contentType:\"image/png\",isDefault:!isChunk},\r\n\t\t\t\t\t\t jpeg:{extension:\"jpeg\",contentType:\"image/jpeg\",isDefault:!isChunk},\r\n\t\t\t\t\t\t jpg:{extension:\"jpg\",contentType:\"image/jpeg\",isDefault:!isChunk},\r\n\t\t\t\t\t\t bmp:{extension:\"bmp\",contentType:\"image/bmp\",isDefault:!isChunk},\r\n\t\t\t\t\t\t gif:{extension:\"gif\",contentType:\"image/gif\",isDefault:!isChunk}\r\n\t\t};\r\n\t\tvar objOverride = {document:{partName:\"/word/document.xml\",contentType:\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"},\r\n\t\t\t\t\t\t };\r\n\t\t\r\n\t\tvar arrChild = [];\r\n\t\tvar item = null;\r\n\t\tvar key = null;\r\n\t\tvar count = 0;\r\n\t\tfor(key in objDefault)\r\n\t\t{\r\n\t\t\titem = objDefault[key];\r\n\t\t\tif(item.isDefault)\r\n\t\t\t{\r\n\t\t\t\tarrChild.push(this.__exportUtil.getXML({\r\n\t\t\t\t\tname: \"Default\",\r\n\t\t\t\t\tattributes: {\"Extension\": item.extension,\"ContentType\": item.contentType}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(count = 0;count < this.__arrDefault.length;count++)\r\n\t\t{\r\n\t\t\titem = objDefault[this.__arrDefault[count]];\r\n\t\t\tif(item && !item.isDefault)\r\n\t\t\t{\r\n\t\t\t\tarrChild.push(this.__exportUtil.getXML({\r\n\t\t\t\t\tname: \"Default\",\r\n\t\t\t\t\tattributes: {\"Extension\": item.extension,\"ContentType\": item.contentType}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(key in objOverride)\r\n\t\t{\r\n\t\t\titem = objOverride[key];\r\n\t\t\tarrChild.push(this.__exportUtil.getXML({\r\n\t\t\t\tname: \"Override\",\r\n\t\t\t\tattributes: {\"PartName\": item.partName,\"ContentType\": item.contentType}\r\n\t\t\t}));\r\n\t\t}\r\n\t\tfor(count = 0;count < this.__arrOverride.length;count++)\r\n\t\t{\r\n\t\t\titem = this.__arrOverride[count];\r\n\t\t\tif(item && !item.isDefault)\r\n\t\t\t{\r\n\t\t\t\tarrChild.push(this.__exportUtil.getXML({\r\n\t\t\t\t\tname: \"Override\",\r\n\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}\r\n\t\treturn this.__exportUtil.getXML({\r\n\t\t\tname: \"Types\",\r\n\t\t\tns: \"contentTypes\",\r\n\t\t\tchildren: arrChild\r\n\t\t});\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__getRels = function()\r\n\t{\r\n\t\tvar rels = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n ' +\r\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\\n ' +\r\n\t\t'<Relationship Id=\"Id1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"/word/document.xml\"/>\\n ' +\r\n\t\t'</Relationships>';\r\n\t\t\r\n\t\treturn rels;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__getDocumentFile = function()\r\n\t{\r\n\t\tvar printSetting = this.__setting.printSetting;\r\n\t\tvar orientation = printSetting.orientation;\r\n\t\tif(orientation)\r\n\t\t{\r\n\t\t\tvar itemOrient = this.__objOrientation[orientation.toLowerCase()];\r\n\t\t\tif(itemOrient)\r\n\t\t\t{\r\n\t\t\t\tvar pageSize = this.__pageSection.pgSz();\r\n\t\t\t\tpageSize.width(itemOrient.width);\r\n\t\t\t\tpageSize.height(itemOrient.height);\r\n\t\t\t\tpageSize.orientation(itemOrient.orientation);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSDocxExport\",\"Orientation entered is not valid\");\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar margins = this.__setting.printSetting.margins;\r\n\t\tif(margins)\r\n\t\t{\r\n\t\t\tvar pageMargins = this.__pageSection.pgMar();\r\n\t\t\tpageMargins.top(margins.top);\r\n\t\t\tpageMargins.right(margins.right);\r\n\t\t\tpageMargins.bottom(margins.bottom);\r\n\t\t\tpageMargins.left(margins.left);\r\n\t\t\tpageMargins.header(margins.header);\r\n\t\t\tpageMargins.footer(margins.footer);\r\n\t\t\tpageMargins.gutter(margins.gutter);\r\n\t\t}\r\n\t\t\t\t\r\n\t\tvar objDocAttr = {\"xmlns:w\":\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\",\r\n\t\t\t\t \t\t \"xmlns:m\":\"http://schemas.openxmlformats.org/officeDocument/2006/math\",\r\n\t\t\t\t\t\t \"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\r\n\t\t\t\t\t\t \"xmlns:wp\":\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\",\r\n\t\t\t\t\t\t \"xmlns:a\":\"http://schemas.openxmlformats.org/drawingml/2006/main\",\r\n\t\t\t\t\t\t \"xmlns:ns6\":\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\",\r\n\t\t\t\t\t\t \"xmlns:c\":\"http://schemas.openxmlformats.org/drawingml/2006/chart\",\r\n\t\t\t\t\t\t \"xmlns:ns8\":\"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing\",\r\n\t\t\t\t\t\t \"xmlns:dgm\":\"http://schemas.openxmlformats.org/drawingml/2006/diagram\",\r\n\t\t\t\t\t\t \"xmlns:pic\":\"http://schemas.openxmlformats.org/drawingml/2006/picture\",\r\n\t\t\t\t\t\t \"xmlns:ns11\":\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\",\r\n\t\t\t\t\t\t \"xmlns:dsp\":\"http://schemas.microsoft.com/office/drawing/2008/diagram\",\r\n\t\t\t\t\t\t \"xmlns:ns13\":\"urn:schemas-microsoft-com:office:excel\",\r\n\t\t\t\t\t\t \"xmlns:o\":\"urn:schemas-microsoft-com:office:office\",\r\n\t\t\t\t\t\t \"xmlns:v\":\"urn:schemas-microsoft-com:vml\",\r\n\t\t\t\t\t\t \"xmlns:w10\":\"urn:schemas-microsoft-com:office:word\",\r\n\t\t\t\t\t\t \"xmlns:ns17\":\"urn:schemas-microsoft-com:office:powerpoint\",\r\n\t\t\t\t\t\t \"xmlns:odx\":\"http://opendope.org/xpaths\",\r\n\t\t\t\t\t\t \"xmlns:odc\":\"http://opendope.org/conditions\",\r\n\t\t\t\t\t\t \"xmlns:odq\":\"http://opendope.org/questions\",\r\n\t\t\t\t\t\t \"xmlns:odi\":\"http://opendope.org/components\",\r\n\t\t\t\t\t\t \"xmlns:odgm\":\"http://opendope.org/SmartArt/DataHierarchy\",\r\n\t\t\t\t\t\t \"xmlns:ns24\":\"http://schemas.openxmlformats.org/officeDocument/2006/bibliography\",\r\n\t\t\t\t\t\t \"xmlns:ns25\":\"http://schemas.openxmlformats.org/drawingml/2006/compatibility\",\r\n\t\t\t\t\t\t \"xmlns:ns26\":\"http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas\"\r\n\t\t};\r\n\t\tvar arrBody = [];\r\n\t\tif(this.__isChunk())\r\n\t\t{\r\n\t\t\tvar id = null;\r\n\t\t\tfor(var count = 0;count < this.__arrRelationship.length;count++)\r\n\t\t\t{\r\n\t\t\t\tif(this.__arrRelationship[count].target == \"afchunk.mht\")\r\n\t\t\t\t{\r\n\t\t\t\t\tid = this.__arrRelationship[count].id;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(id)\r\n\t\t\t{\r\n\t\t\t\tarrBody.push(\"<w:altChunk r:id=\\\"\" + id + \"\\\" />\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar arrChildren = this.__getWordChildren();\r\n\t\t\tarrBody = arrBody.concat(arrChildren);\r\n\t\t}\r\n\t\tarrBody.push(this.__pageSection.toXml());\r\n\t\tvar body = this.__exportUtil.getXML({\r\n\t\t\tname: 'w:body',\r\n\t\t\tchildren: arrBody\r\n\t\t});\r\n\t\tconsole.log(body);\r\n\t\treturn this.__exportUtil.getXML({\r\n\t\t\tname: 'w:document',\r\n\t\t\taddXmlPrefix: true,\r\n\t\t\tattributes: objDocAttr,\r\n\t\t\tchildren: [body]\r\n\t\t});\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__getWordRels = function()\r\n\t{\r\n\t\tvar item = null;\r\n\t\tvar arrChild = [];\r\n\t\tfor(var count = 0;count < this.__arrRelationship.length;count++)\r\n\t\t{\r\n\t\t\titem = this.__arrRelationship[count];\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tarrChild.push(this.__exportUtil.getXML({\r\n\t\t\t\t\tname: 'Relationship',\r\n\t\t\t\t\tattributes: {'Id': item.id,'Type': item.type,'Target': item.target}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar relationships = this.__exportUtil.getXML({\r\n\t\t\tname: 'Relationships',\r\n\t\t\taddXmlPrefix: true,\r\n\t\t\tattributes: {xmlns:\"http://schemas.openxmlformats.org/package/2006/relationships\"},\r\n\t\t\tchildren: arrChild\r\n\t\t});\r\n\t\treturn relationships;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__addExtraFiles = function(zip,word)\r\n\t{\r\n\t\tif(this.__extraFiles && Object.keys(this.__extraFiles).length)\r\n\t\t{\r\n\t\t\tvar arrFile = [];\r\n\t\t\tvar item = null;\r\n\t\t\tvar xml = null;\r\n\t\t\tvar file = null;\r\n\t\t\tfor(var key in this.__extraFiles)\r\n\t\t\t{\r\n\t\t\t\tarrFile = this.__extraFiles[key];\r\n\t\t\t\tif(arrFile && arrFile.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var count = 0;count < arrFile.length;count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem = arrFile[count];\r\n\t\t\t\t\t\tif(item)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfile = item.file;\r\n\t\t\t\t\t\t\tif(file)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(this.util.isString(file))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\txml = file;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\txml = file.toXml();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif(xml)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tconsole.log(xml);\r\n\t\t\t\t\t\t\t\t\tzip.addFile(item.path + item.fileName, xml);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\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}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__addFile = function(file,fileType,relationType,overrideType)\r\n\t{\r\n\t\tvar fileName = fileType;\r\n\t\tvar rId = null;\r\n\t\tif(file)\r\n\t\t{\r\n\t\t\tfileName = this.__addExtraFile(fileType,file)\r\n\t\t}\r\n\t\tif(fileName)\r\n\t\t{\r\n\t\t\trId = this.__addRelationship(file,relationType,fileName);\r\n\t\t\tthis.__addOverride(overrideType,\"/word/\" + fileName);\r\n\t\t\treturn {fileName: fileName,id: rId};\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__addExtraFile = function(fileType,file,path,ext)\r\n\t{\r\n\t\tif(fileType && file)\r\n\t\t{\r\n\t\t\tfileType = fileType.toLowerCase();\r\n\t\t\tif(!this.__extraFiles[fileType])\r\n\t\t\t{\r\n\t\t\t\tthis.__extraFiles[fileType] = [];\r\n\t\t\t}\r\n\t\t\text = ext || \"xml\";\r\n\t\t\tpath = path || \"word/\"\r\n\t\t\tvar fileName = fileType + (this.__extraFiles[fileType].length + 1) + \".\" + ext;\r\n\t\t\tthis.__extraFiles[fileType].push({file: file,fileName: fileName,path: path});\r\n\t\t\treturn fileName;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__addRelationship = function(file,type,target)\r\n\t{\r\n\t\tif(type && target)\r\n\t\t{\r\n\t\t\tvar id = \"rId\" + (++this.__relationshipID);\r\n\t\t\tthis.__arrRelationship.push({id:id,type:type,target:target});\r\n\t\t\treturn id;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__addOverride = function(contentType,partName)\r\n\t{\r\n\t\tif(contentType && partName)\r\n\t\t{\r\n\t\t\tthis.__arrOverride.push({contentType:contentType,partName:partName});\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__isChunk = function()\r\n\t{\r\n\t\t//return !(this.__arrChildren && this.__arrChildren.length)\r\n\t\treturn this.__enableChunk;\r\n\t};\r\n\t\r\n\t/* word related functions */\r\n\tNSDocxExport.prototype.__getWordChildren = function()\r\n\t{\r\n\t\tvar arrChildren = [];\r\n\t\tvar item = null;\r\n\t\tvar xml = null;\r\n\t\tvar length = this.__arrChildren.length;\r\n\t\tfor(var count = 0;count < length;count++)\r\n\t\t{\r\n\t\t\titem = this.__arrChildren[count];\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tif(this.util.isString(item))\r\n\t\t\t\t{\r\n\t\t\t\t\tarrChildren.push(item);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\txml = item.toXml();\r\n\t\t\t\t\tif(xml)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarrChildren.push(xml);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn arrChildren;\r\n\t};\r\n\t\r\n\t/* end of word related functions */\r\n\t\r\n\t/* html related functions */\r\n\t\r\n\tNSDocxExport.prototype.__setHtmlSetting = function()\r\n\t{\r\n\t\tvar htmlSetting = this.__setting.htmlSetting || {};\r\n\t\tthis.__setting.htmlSetting = {\r\n\t\t\t\telement: htmlSetting[\"element\"],\r\n\t\t\t\thtml: htmlSetting[\"html\"],\r\n\t\t\t\thtmlStyle: htmlSetting[\"htmlStyle\"],\r\n\t\t\t\tpageBreakTag: htmlSetting[\"pageBreakTag\"],\r\n\t\t\t\tenablePageNumber: Boolean.parse(htmlSetting[\"enablePageNumber\"]),\r\n\t\t\t\tloopNodesCallback: htmlSetting[\"loopNodesCallback\"]// should be discouraged as it can be costly operation for large docs \r\n\t\t};\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__getHtmlContent = function(wordFolder)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar objPromise = new Promise(function(resolve,reject)\r\n\t\t{\r\n\t\t\tvar htmlSetting = self.__setting.htmlSetting;\r\n\t\t\tif(htmlSetting.element || htmlSetting.html)\r\n\t\t\t{\r\n\t\t\t\tvar html = htmlSetting.html;\r\n\t\t\t\tif(!html)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar element = self.util.getElement(htmlSetting.element);\r\n\t\t\t\t\tif(element)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\thtml = element.innerHTML;\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\tself.util.throwNSError(\"NSDocxExport\",\"Element does not exists as defined in config\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(html)\r\n\t\t\t\t{\r\n\t\t\t\t\tself.__parseImages(html).then(function(objData){\r\n\t\t\t\t\t\tif(objData)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\thtml = objData.html;\r\n\t\t\t\t\t\t\tvar arrImages = objData.arrImages;\r\n\t\t\t\t\t\t\tvar styles = htmlSetting.htmlStyle || \"\";\r\n\t\t\t\t\t\t\tvar startHtml = \"\";\r\n\t\t\t\t\t\t\tvar endHtml = \"\";\r\n\t\t\t\t\t\t\tvar extraCSS = \"\";\r\n\t\t\t\t\t\t\tif(htmlSetting.enablePageNumber)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tstartHtml = \"<div class=\\\"Section1\\\">\";\r\n\t\t\t\t\t\t\t\tendHtml = \"<table id=\\\"hrdftrtbl\\\" border=\\\"1\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"> <tr> <td> <div style=\\\"mso-element:footer\\\" id=\\\"f1\\\"> <p class=\\\"MsoFooter\\\"> <table width=\\\"100%\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"> <tr> <td align=\\\"center\\\" class=\\\"footer\\\"> <g:message code=\\\"offer.letter.page.label\\\"/> <span style=\\\"mso-field-code: PAGE \\\"></span> of <span style=\\\"mso-field-code: NUMPAGES \\\"></span> </td> </tr> </table> </p> </div> </td> </tr> </table> </div>\";\r\n\t\t\t\t\t\t\t\textraCSS = \"p.MsoHeader, li.MsoHeader, div.MsoHeader{ margin:0in; margin-top:.0001pt; mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; } p.MsoFooter, li.MsoFooter, div.MsoFooter{ margin:0in 0in 1in 0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; } .footer { font-size: 9pt; } @page Section1{ size:8.5in 11.0in; margin:0.5in 0.5in 0.5in 0.5in; mso-header-margin:0.5in; mso-header:h1; mso-footer:f1; mso-footer-margin:0.5in; mso-paper-source:0; } div.Section1{ page:Section1; } table#hrdftrtbl{ margin:0in 0in 0in 9in; }\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\thtml = startHtml + html + endHtml;\r\n\t\t\t\t\t\t\tif(htmlSetting[\"pageBreakTag\"])\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\thtml = html.replaceAll(htmlSetting[\"pageBreakTag\"],\"<br clear=all style='mso-special-character:line-break;page-break-before:always'>\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tstyles = styles + extraCSS;\r\n\t\t\t\t\t\t\thtml = self.__getDocHtml(html,arrImages,styles);\r\n\t\t\t\t\t\t\tvar strData = self.__convertHtmlToMht(html);\r\n\t\t\t\t\t\t\tresolve(strData);\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\tresolve(null);\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\tresolve(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tself.util.debug(\"NSDocxExport\",\"Element and HTML are not defined in config\");\r\n\t\t\t\tresolve(null);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn objPromise;\r\n\t};\r\n\t\r\n\tNSDocxExport.prototype.__parseImages = function(html)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar replacerCallback = function(match,contentType,contentEncoding,encodedContent) \r\n\t\t{\r\n\t\t var index = arrImages.length;\r\n\t\t var extension = contentType.split('/')[1];\r\n\t\t var contentLocation = \"file:///C:/fake/image\" + index + \".\" + extension;\r\n\t\t arrImages.push(getImageString(content