diff --git a/cell/api.js b/cell/api.js index a551af1e19..c9fe02b0f8 100644 --- a/cell/api.js +++ b/cell/api.js @@ -652,15 +652,26 @@ var editor; if (opt_isPassword) { t.handlers.trigger("asc_onAdvancedOptions", new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.DRM), this.advancedOptionsAction); } else if (data) { - AscCommon.loadFileContent(data, function(httpRequest) { - if (null === httpRequest) { - t.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); - return; - } - var cp = JSON.parse(httpRequest.responseText); - cp['encodings'] = AscCommon.getEncodingParams(); - t.handlers.trigger("asc_onAdvancedOptions", new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV, cp), t.advancedOptionsAction); - }); + // ToDo разделитель пока только "," http://bugzilla.onlyoffice.com/show_bug.cgi?id=31009 + var cp = { + 'codepage': AscCommon.c_oAscCodePageUtf8, "delimiter": AscCommon.c_oAscCsvDelimiter.Comma, + 'encodings': AscCommon.getEncodingParams() + }; + var options; + if (typeof Blob !== 'undefined' && typeof FileReader !== 'undefined') { + AscCommon.getJSZipUtils().getBinaryContent(data, function(err, data) { + if (err) { + t.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); + } else { + cp['data'] = data; + options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV, cp); + t.handlers.trigger("asc_onAdvancedOptions", options, t.advancedOptionsAction); + } + }); + } else { + options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.CSV, cp); + t.handlers.trigger("asc_onAdvancedOptions", options, t.advancedOptionsAction); + } } else { t.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); } @@ -3580,6 +3591,7 @@ var editor; prot["asc_setAdvancedOptions"] = prot.asc_setAdvancedOptions; prot["asc_setPageOptions"] = prot.asc_setPageOptions; prot["asc_getPageOptions"] = prot.asc_getPageOptions; + prot["asc_decodeBuffer"] = prot.asc_decodeBuffer; prot["asc_registerCallback"] = prot.asc_registerCallback; prot["asc_unregisterCallback"] = prot.asc_unregisterCallback; diff --git a/common/AdvancedOptions.js b/common/AdvancedOptions.js index dead696afd..083dca1949 100644 --- a/common/AdvancedOptions.js +++ b/common/AdvancedOptions.js @@ -72,10 +72,12 @@ } return arr; }(); - this.recommendedSettings = new asc_CCSVAdvancedOptions (opt["codepage"], /*opt["delimiter"]*/AscCommon.c_oAscCsvDelimiter.Comma); // ToDo разделитель пока только "," http://bugzilla.onlyoffice.com/show_bug.cgi?id=31009 + this.recommendedSettings = new asc_CCSVAdvancedOptions (opt["codepage"], opt["delimiter"]); + this.data = opt["data"]; } asc_CCSVOptions.prototype.asc_getCodePages = function(){ return this.codePages;}; asc_CCSVOptions.prototype.asc_getRecommendedSettings = function () { return this.recommendedSettings; }; + asc_CCSVOptions.prototype.asc_getData = function () { return this.data; }; /** @constructor */ function asc_CTXTOptions(opt){ @@ -89,9 +91,11 @@ return arr; }(); this.recommendedSettings = new asc_CTXTAdvancedOptions (opt["codepage"]); + this.data = opt["data"]; } asc_CTXTOptions.prototype.asc_getCodePages = function(){ return this.codePages;}; asc_CTXTOptions.prototype.asc_getRecommendedSettings = function () { return this.recommendedSettings; }; + asc_CTXTOptions.prototype.asc_getData = function () { return this.data; }; /** @constructor */ function asc_CCSVAdvancedOptions(codepage, delimiter, delimiterChar){ @@ -177,10 +181,12 @@ prot = asc_CCSVOptions.prototype; prot["asc_getCodePages"] = prot.asc_getCodePages; prot["asc_getRecommendedSettings"] = prot.asc_getRecommendedSettings; + prot["asc_getData"] = prot.asc_getData; prot = asc_CTXTOptions.prototype; prot["asc_getCodePages"] = prot.asc_getCodePages; prot["asc_getRecommendedSettings"] = prot.asc_getRecommendedSettings; + prot["asc_getData"] = prot.asc_getData; window["Asc"].asc_CCSVAdvancedOptions = window["Asc"]["asc_CCSVAdvancedOptions"] = asc_CCSVAdvancedOptions; prot = asc_CCSVAdvancedOptions.prototype; diff --git a/common/apiBase.js b/common/apiBase.js index c63c18d9f1..6fd23ad109 100644 --- a/common/apiBase.js +++ b/common/apiBase.js @@ -1856,6 +1856,57 @@ return this.macros.GetData(); }; + function parseCSV(text, options) { + var delimiterChar; + if (options.asc_getDelimiterChar()) { + delimiterChar = options.asc_getDelimiterChar(); + } else { + switch (options.asc_getDelimiter()) { + case AscCommon.c_oAscCsvDelimiter.None: + delimiterChar = undefined; + break; + case AscCommon.c_oAscCsvDelimiter.Tab: + delimiterChar = "\t"; + break; + case AscCommon.c_oAscCsvDelimiter.Semicolon: + delimiterChar = ";"; + break; + case AscCommon.c_oAscCsvDelimiter.Colon: + delimiterChar = ":"; + break; + case AscCommon.c_oAscCsvDelimiter.Comma: + delimiterChar = ","; + break; + case AscCommon.c_oAscCsvDelimiter.Space: + delimiterChar = " "; + break; + } + } + var matrix = []; + var rows = text.match(/[^\r\n]+/g); + for (var i = 0; i < rows.length; ++i) { + var row = rows[i]; + //todo quotes + matrix.push(row.split(delimiterChar)); + } + return matrix; + } + + baseEditorsApi.prototype.asc_decodeBuffer = function(buffer, options, callback) { + var reader = new FileReader(); + //todo onerror + reader.onload = reader.onerror = function(e) { + var text = e.target.result ? e.target.result : ""; + if (options instanceof Asc.asc_CCSVAdvancedOptions) { + callback(parseCSV(text, options)); + } else { + callback(text); + } + }; + + reader.readAsText(new Blob([buffer]), AscCommon.c_oAscEncodings[options.asc_getCodePage()][2]); + }; + //----------------------------------------------------------export---------------------------------------------------- window['AscCommon'] = window['AscCommon'] || {}; window['AscCommon'].baseEditorsApi = baseEditorsApi; diff --git a/word/api.js b/word/api.js index 41d2be7910..1862554d22 100644 --- a/word/api.js +++ b/word/api.js @@ -6920,14 +6920,30 @@ background-repeat: no-repeat;\ asc_docs_api.prototype._onNeedParams = function(data, opt_isPassword) { + var t = this; var options; if (opt_isPassword) { options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.DRM); - } else { + t.sendEvent("asc_onAdvancedOptions", options, t.advancedOptionsAction); + } else if(data) { var cp = {'codepage': AscCommon.c_oAscCodePageUtf8, 'encodings': AscCommon.getEncodingParams()}; - options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.TXT, cp); + if (typeof Blob !== 'undefined' && typeof FileReader !== 'undefined') { + AscCommon.getJSZipUtils().getBinaryContent(data, function(err, data) { + if (err) { + t.sendEvent("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); + } else { + cp['data'] = data; + options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.TXT, cp); + t.sendEvent("asc_onAdvancedOptions", options, t.advancedOptionsAction); + } + }); + } else { + options = new AscCommon.asc_CAdvancedOptions(c_oAscAdvancedOptionsID.TXT, cp); + t.sendEvent("asc_onAdvancedOptions", options, t.advancedOptionsAction); + } + } else { + t.sendEvent("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical); } - this.sendEvent("asc_onAdvancedOptions", options, this.advancedOptionsAction); }; asc_docs_api.prototype._onOpenCommand = function(data) { @@ -8824,6 +8840,7 @@ background-repeat: no-repeat;\ asc_docs_api.prototype['AddURL'] = asc_docs_api.prototype.AddURL; asc_docs_api.prototype['Help'] = asc_docs_api.prototype.Help; asc_docs_api.prototype['asc_setAdvancedOptions'] = asc_docs_api.prototype.asc_setAdvancedOptions; + asc_docs_api.prototype['asc_decodeBuffer'] = asc_docs_api.prototype.asc_decodeBuffer; asc_docs_api.prototype['SetFontRenderingMode'] = asc_docs_api.prototype.SetFontRenderingMode; asc_docs_api.prototype['startGetDocInfo'] = asc_docs_api.prototype.startGetDocInfo; asc_docs_api.prototype['stopGetDocInfo'] = asc_docs_api.prototype.stopGetDocInfo;