4795 lines
232 KiB
JavaScript
4795 lines
232 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
"use strict";
|
|
(function ($, window, undefined) {
|
|
var doc = window.document;
|
|
var isTruePaste = false;
|
|
var activateLocalStorage = false;
|
|
var isOnlyLocalBufferSafari = false;
|
|
var copyPasteUseBinary = true;
|
|
var copyPasteFromWordUseBinary = true;
|
|
var Base64 = {
|
|
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
|
encode: function (input) {
|
|
var output = "";
|
|
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
input = Base64._utf8_encode(input);
|
|
while (i < input.length) {
|
|
chr1 = input.charCodeAt(i++);
|
|
chr2 = input.charCodeAt(i++);
|
|
chr3 = input.charCodeAt(i++);
|
|
enc1 = chr1 >> 2;
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
enc4 = chr3 & 63;
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
} else {
|
|
if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
}
|
|
output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
|
}
|
|
return output;
|
|
},
|
|
decode: function (input) {
|
|
var output = "";
|
|
var chr1, chr2, chr3;
|
|
var enc1, enc2, enc3, enc4;
|
|
var i = 0;
|
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
while (i < input.length) {
|
|
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
|
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
output = output + String.fromCharCode(chr1);
|
|
if (enc3 != 64) {
|
|
output = output + String.fromCharCode(chr2);
|
|
}
|
|
if (enc4 != 64) {
|
|
output = output + String.fromCharCode(chr3);
|
|
}
|
|
}
|
|
output = Base64._utf8_decode(output);
|
|
return output;
|
|
},
|
|
_utf8_encode: function (string) {
|
|
string = string.replace(/\r\n/g, "\n");
|
|
var utftext = "";
|
|
for (var n = 0; n < string.length; n++) {
|
|
var c = string.charCodeAt(n);
|
|
if (c < 128) {
|
|
utftext += String.fromCharCode(c);
|
|
} else {
|
|
if ((c > 127) && (c < 2048)) {
|
|
utftext += String.fromCharCode((c >> 6) | 192);
|
|
utftext += String.fromCharCode((c & 63) | 128);
|
|
} else {
|
|
utftext += String.fromCharCode((c >> 12) | 224);
|
|
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
|
utftext += String.fromCharCode((c & 63) | 128);
|
|
}
|
|
}
|
|
}
|
|
return utftext;
|
|
},
|
|
_utf8_decode: function (utftext) {
|
|
var string = "";
|
|
var i = 0;
|
|
var c1, c2, c3;
|
|
while (i < utftext.length) {
|
|
c1 = utftext.charCodeAt(i);
|
|
if (c1 < 128) {
|
|
string += String.fromCharCode(c1);
|
|
i++;
|
|
} else {
|
|
if ((c1 > 191) && (c1 < 224)) {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
string += String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
|
|
i += 2;
|
|
} else {
|
|
c2 = utftext.charCodeAt(i + 1);
|
|
c3 = utftext.charCodeAt(i + 2);
|
|
string += String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
|
i += 3;
|
|
}
|
|
}
|
|
}
|
|
return string;
|
|
}
|
|
};
|
|
function number2color(n) {
|
|
if (typeof(n) == "string" && n.indexOf("rgb") > -1) {
|
|
return n;
|
|
}
|
|
return "rgb(" + (n >> 16 & 255) + "," + (n >> 8 & 255) + "," + (n & 255) + ")";
|
|
}
|
|
function Clipboard() {
|
|
this.element = undefined;
|
|
this.ppix = 96;
|
|
this.ppiy = 96;
|
|
this.Api = null;
|
|
this.fullUrl;
|
|
this.activeRange = null;
|
|
this.lStorage = {};
|
|
this.fontsNew = {};
|
|
return this;
|
|
}
|
|
Clipboard.prototype = {
|
|
constructor: Clipboard,
|
|
init: function () {
|
|
var t = this;
|
|
var found = true;
|
|
if (!t.element) {
|
|
t.element = doc.getElementById(COPY_ELEMENT_ID2);
|
|
if (!t.element) {
|
|
found = false;
|
|
t.element = doc.createElement("DIV");
|
|
}
|
|
}
|
|
t.element.id = COPY_ELEMENT_ID2;
|
|
t.element.setAttribute("class", COPYPASTE_ELEMENT_CLASS);
|
|
t.element.style.position = "absolute";
|
|
t.element.style.top = "-100px";
|
|
t.element.style.left = "0px";
|
|
if (window.USER_AGENT_MACOS) {
|
|
t.element.style.width = "100px";
|
|
} else {
|
|
t.element.style.width = "10000px";
|
|
}
|
|
t.element.style.height = "100px";
|
|
t.element.style.overflow = "hidden";
|
|
t.element.style.zIndex = -1000;
|
|
t.element.style.display = ELEMENT_DISPAY_STYLE2;
|
|
t.element.setAttribute("contentEditable", true);
|
|
if (!found) {
|
|
doc.body.appendChild(t.element);
|
|
}
|
|
if (!AscBrowser.isMobileVersion) {
|
|
var foundText = true;
|
|
if (!t.elementText) {
|
|
t.elementText = doc.getElementById(kElementTextId);
|
|
if (!t.elementText) {
|
|
foundText = false;
|
|
t.elementText = doc.createElement("textarea");
|
|
}
|
|
}
|
|
t.elementText.id = kElementTextId;
|
|
t.elementText.style.position = "absolute";
|
|
if (window.USER_AGENT_MACOS) {
|
|
t.element.style.width = "100px";
|
|
} else {
|
|
t.element.style.width = "10000px";
|
|
}
|
|
t.elementText.style.height = "100px";
|
|
t.elementText.style.left = "0px";
|
|
t.elementText.style.top = "-100px";
|
|
t.elementText.style.overflow = "hidden";
|
|
t.elementText.style.zIndex = -1000;
|
|
t.elementText.style.display = ELEMENT_DISPAY_STYLE2;
|
|
t.elementText.setAttribute("contentEditable", true);
|
|
if (!foundText) {
|
|
doc.body.appendChild(t.elementText);
|
|
}
|
|
}
|
|
var div = doc.createElement("DIV");
|
|
div.setAttribute("style", "position:absolute; visibility:hidden; padding:0; height:1in; width:1in;");
|
|
doc.body.appendChild(div);
|
|
this.ppix = div.clientWidth;
|
|
this.ppiy = div.clientHeight;
|
|
doc.body.removeChild(div);
|
|
},
|
|
destroy: function () {
|
|
var p;
|
|
if (this.element) {
|
|
p = this.element.parentNode;
|
|
if (p) {
|
|
p.removeChild(this.element);
|
|
}
|
|
this.element = undefined;
|
|
}
|
|
},
|
|
copyRange: function (range, worksheet, isCut) {
|
|
var t = this;
|
|
t._cleanElement();
|
|
var objectRender = worksheet.objectRender;
|
|
var isIntoShape = objectRender.controller.getTargetDocContent();
|
|
var text = t._makeTableNode(range, worksheet, isCut, isIntoShape);
|
|
if (text == false) {
|
|
return;
|
|
}
|
|
if (window.USER_AGENT_SAFARI_MACOS && !worksheet.isCellEditMode) {
|
|
this._startCopyOrPaste();
|
|
this.element.appendChild(text);
|
|
History.TurnOff();
|
|
var sBase64 = this._getBinaryForCopy(worksheet);
|
|
if (isIntoShape) {
|
|
sBase64 = null;
|
|
}
|
|
if (sBase64) {
|
|
if (this.element.children && this.element.children.length == 1 && (window.USER_AGENT_WEBKIT || window.USER_AGENT_SAFARI_MACOS)) {
|
|
$(this.element.children[0]).css("font-weight", "normal");
|
|
$(this.element.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.element.children[0]) {
|
|
$(this.element.children[0]).addClass("xslData;" + sBase64);
|
|
}
|
|
this.lStorage = sBase64;
|
|
}
|
|
History.TurnOn();
|
|
this._endCopyOrPaste();
|
|
return sBase64;
|
|
} else {
|
|
this._startCopyOrPaste();
|
|
if ($(text).find("td")[0] && $(text).find("td")[0].innerText == "" && AscBrowser.isOpera) {
|
|
$(text).find("td")[0].innerHTML = " ";
|
|
}
|
|
t.element.appendChild(text);
|
|
if (!copyPasteUseBinary) {
|
|
t.copyText = t._getTextFromTable(t.element.children[0]);
|
|
var randomVal = Math.floor(Math.random() * 10000000);
|
|
t.copyText.pasteFragment = "pasteFragment_" + randomVal;
|
|
if (text) {
|
|
$(text).addClass("pasteFragment_" + randomVal);
|
|
}
|
|
}
|
|
if ($(text).find("img")[0] && AscBrowser.isOpera) {
|
|
$(text)[0].innerHTML = "<tr><td> </td></tr>";
|
|
if (t.copyText.isImage) {
|
|
t.copyText.text = " ";
|
|
}
|
|
}
|
|
History.TurnOff();
|
|
if (copyPasteUseBinary) {
|
|
if (isIntoShape) {
|
|
this.lStorage = {};
|
|
this.lStorage.htmlInShape = text;
|
|
} else {
|
|
var sBase64 = this._getBinaryForCopy(worksheet);
|
|
if (this.element.children && this.element.children.length == 1 && (window.USER_AGENT_WEBKIT || window.USER_AGENT_SAFARI_MACOS)) {
|
|
$(this.element.children[0]).css("font-weight", "normal");
|
|
$(this.element.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.element.children[0]) {
|
|
$(this.element.children[0]).addClass("xslData;" + sBase64);
|
|
}
|
|
this.lStorage = sBase64;
|
|
}
|
|
}
|
|
History.TurnOn();
|
|
if (AscBrowser.isMozilla) {
|
|
t._selectElement(t._getStylesSelect);
|
|
} else {
|
|
t._selectElement();
|
|
}
|
|
this._endCopyOrPaste();
|
|
}
|
|
},
|
|
_getBinaryForCopy: function (worksheet) {
|
|
var fullUrl = this._getUseFullUrl();
|
|
window.global_pptx_content_writer.Start_UseFullUrl(fullUrl);
|
|
var cloneActiveRange = worksheet.activeRange.clone();
|
|
var temp;
|
|
if (cloneActiveRange.c1 > cloneActiveRange.c2) {
|
|
temp = cloneActiveRange.c1;
|
|
cloneActiveRange.c1 = cloneActiveRange.c2;
|
|
cloneActiveRange.c2 = temp;
|
|
}
|
|
if (cloneActiveRange.r1 > cloneActiveRange.r2) {
|
|
temp = cloneActiveRange.r1;
|
|
cloneActiveRange.r1 = cloneActiveRange.r2;
|
|
cloneActiveRange.r2 = temp;
|
|
}
|
|
var oBinaryFileWriter = new Asc.BinaryFileWriter(worksheet.model.workbook, cloneActiveRange);
|
|
var sBase64 = oBinaryFileWriter.Write();
|
|
window.global_pptx_content_writer.End_UseFullUrl();
|
|
return sBase64;
|
|
},
|
|
copyRangeButton: function (range, worksheet, isCut) {
|
|
if (AscBrowser.isIE) {
|
|
this._cleanElement();
|
|
var text = this._makeTableNode(range, worksheet);
|
|
if (text == false) {
|
|
return true;
|
|
}
|
|
this.element.appendChild(text);
|
|
if (copyPasteUseBinary) {
|
|
if (isIntoShape) {
|
|
this.lStorage = {};
|
|
this.lStorage.htmlInShape = text;
|
|
} else {
|
|
var fullUrl = this._getUseFullUrl();
|
|
window.global_pptx_content_writer.Start_UseFullUrl(fullUrl);
|
|
var oBinaryFileWriter = new Asc.BinaryFileWriter(worksheet.model.workbook, worksheet.activeRange);
|
|
var sBase64 = oBinaryFileWriter.Write();
|
|
if (this.element.children && this.element.children.length == 1 && window.USER_AGENT_WEBKIT && (true !== window.USER_AGENT_SAFARI_MACOS)) {
|
|
$(this.element.children[0]).css("font-weight", "normal");
|
|
$(this.element.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.element.children[0]) {
|
|
$(this.element.children[0]).addClass("xslData;" + sBase64);
|
|
}
|
|
this.lStorage = sBase64;
|
|
window.global_pptx_content_writer.End_UseFullUrl();
|
|
}
|
|
}
|
|
var t = this,
|
|
selection, rangeToSelect, overflowBody;
|
|
overflowBody = document.body.style.overflow;
|
|
document.body.style.overflow = "hidden";
|
|
if (window.getSelection) {
|
|
selection = window.getSelection();
|
|
rangeToSelect = doc.createRange();
|
|
if (AscBrowser.isGecko) {
|
|
t.element.appendChild(doc.createTextNode("\xa0"));
|
|
t.element.insertBefore(doc.createTextNode("\xa0"), t.element.firstChild);
|
|
rangeToSelect.setStartAfter(t.element.firstChild);
|
|
rangeToSelect.setEndBefore(t.element.lastChild);
|
|
} else {
|
|
rangeToSelect.selectNodeContents(t.element);
|
|
}
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
} else {
|
|
if (doc.body.createTextRange) {
|
|
rangeToSelect = doc.body.createTextRange();
|
|
rangeToSelect.moveToElementText(t.element);
|
|
rangeToSelect.select();
|
|
}
|
|
}
|
|
document.execCommand("copy");
|
|
window.setTimeout(function () {
|
|
document.body.style.overflow = overflowBody;
|
|
t.element.style.display = "none";
|
|
doc.body.style.MozUserSelect = "none";
|
|
doc.body.style["-khtml-user-select"] = "none";
|
|
doc.body.style["-o-user-select"] = "none";
|
|
doc.body.style["user-select"] = "none";
|
|
doc.body.style["-webkit-user-select"] = "none";
|
|
},
|
|
0);
|
|
return true;
|
|
} else {
|
|
if (copyPasteUseBinary) {
|
|
var t = this;
|
|
var objectRender = worksheet.objectRender;
|
|
var isIntoShape = objectRender.controller.getTargetDocContent();
|
|
var text = t._makeTableNode(range, worksheet, isCut, isIntoShape);
|
|
if (text == false) {
|
|
return true;
|
|
}
|
|
if (isIntoShape) {
|
|
this.lStorage = {};
|
|
this.lStorage.htmlInShape = text;
|
|
} else {
|
|
var fullUrl = this._getUseFullUrl();
|
|
window.global_pptx_content_writer.Start_UseFullUrl(fullUrl);
|
|
var oBinaryFileWriter = new Asc.BinaryFileWriter(worksheet.model.workbook, worksheet.activeRange);
|
|
var sBase64 = oBinaryFileWriter.Write();
|
|
this.lStorage = sBase64;
|
|
window.global_pptx_content_writer.End_UseFullUrl();
|
|
}
|
|
while (this.element.hasChildNodes()) {
|
|
this.element.removeChild(this.element.lastChild);
|
|
}
|
|
if (text !== false) {
|
|
this.element.appendChild(text);
|
|
}
|
|
if (this.element.children[0] && sBase64) {
|
|
$(this.element.children[0]).addClass("xslData;" + sBase64);
|
|
}
|
|
return true;
|
|
} else {
|
|
if (activateLocalStorage) {
|
|
var t = this;
|
|
var table = t._makeTableNode(range, worksheet, isCut);
|
|
if (table !== false) {
|
|
t.copyText = t._getTextFromTable(table);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
pasteRange: function (worksheet) {
|
|
var t = this;
|
|
if (AscBrowser.isMozilla) {
|
|
t._editorPaste(worksheet, t._getStylesSelect);
|
|
} else {
|
|
t._editorPaste(worksheet);
|
|
}
|
|
},
|
|
pasteRangeButton: function (worksheet) {
|
|
if (AscBrowser.isIE) {
|
|
var t = this;
|
|
document.body.style.MozUserSelect = "text";
|
|
delete document.body.style["-khtml-user-select"];
|
|
delete document.body.style["-o-user-select"];
|
|
delete document.body.style["user-select"];
|
|
document.body.style["-webkit-user-select"] = "text";
|
|
var pastebin = t._editorPasteGetElem(worksheet, true);
|
|
pastebin.style.display = "block";
|
|
pastebin.focus();
|
|
var selection = window.getSelection();
|
|
var rangeToSelect = document.createRange();
|
|
rangeToSelect.selectNodeContents(pastebin);
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
document.execCommand("paste");
|
|
pastebin.blur();
|
|
pastebin.style.display = "none";
|
|
document.body.style.MozUserSelect = "none";
|
|
document.body.style["-khtml-user-select"] = "none";
|
|
document.body.style["-o-user-select"] = "none";
|
|
document.body.style["user-select"] = "none";
|
|
document.body.style["-webkit-user-select"] = "none";
|
|
t._editorPasteExec(worksheet, pastebin);
|
|
return true;
|
|
} else {
|
|
if (activateLocalStorage || copyPasteUseBinary) {
|
|
var t = this;
|
|
var onlyFromLocalStorage = true;
|
|
t._editorPasteExec(worksheet, t.lStorage, false, onlyFromLocalStorage);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
copyCellValue: function (value) {
|
|
var t = this;
|
|
t._startCopyOrPaste();
|
|
if (activateLocalStorage || copyPasteUseBinary) {
|
|
t._addValueToLocalStrg(value);
|
|
}
|
|
var nodes = t._makeNodesFromCellValue(value);
|
|
var outer;
|
|
if (AscBrowser.isWebkit && nodes.length === 1) {
|
|
outer = doc.createElement("B");
|
|
outer.style.fontWeight = "normal";
|
|
outer.appendChild(nodes[0]);
|
|
nodes[0] = outer;
|
|
}
|
|
t._cleanElement();
|
|
nodes.forEach(function (node) {
|
|
t.element.appendChild(node);
|
|
});
|
|
if (AscBrowser.isMozilla) {
|
|
t._selectElement(t._getStylesSelect, true);
|
|
} else {
|
|
t._selectElement();
|
|
}
|
|
this._endCopyOrPaste();
|
|
},
|
|
copyCellValueButton: function (value) {
|
|
if (AscBrowser.isIE) {
|
|
var t = this;
|
|
var nodes = t._makeNodesFromCellValue(value);
|
|
var outer;
|
|
if (AscBrowser.isWebkit && nodes.length === 1) {
|
|
outer = doc.createElement("B");
|
|
outer.style.fontWeight = "normal";
|
|
outer.appendChild(nodes[0]);
|
|
nodes[0] = outer;
|
|
}
|
|
while (this.element.hasChildNodes()) {
|
|
this.element.removeChild(this.element.lastChild);
|
|
}
|
|
nodes.forEach(function (node) {
|
|
t.element.appendChild(node);
|
|
});
|
|
var t = this,
|
|
selection, rangeToSelect;
|
|
if (window.getSelection) {
|
|
selection = window.getSelection();
|
|
rangeToSelect = doc.createRange();
|
|
if (AscBrowser.isGecko) {
|
|
t.element.appendChild(doc.createTextNode("\xa0"));
|
|
t.element.insertBefore(doc.createTextNode("\xa0"), t.element.firstChild);
|
|
rangeToSelect.setStartAfter(t.element.firstChild);
|
|
rangeToSelect.setEndBefore(t.element.lastChild);
|
|
} else {
|
|
rangeToSelect.selectNodeContents(t.element);
|
|
}
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
} else {
|
|
if (doc.body.createTextRange) {
|
|
rangeToSelect = doc.body.createTextRange();
|
|
rangeToSelect.moveToElementText(t.element);
|
|
rangeToSelect.select();
|
|
}
|
|
}
|
|
document.execCommand("copy");
|
|
window.setTimeout(function () {
|
|
t.element.style.display = "none";
|
|
doc.body.style.MozUserSelect = "none";
|
|
doc.body.style["-khtml-user-select"] = "none";
|
|
doc.body.style["-o-user-select"] = "none";
|
|
doc.body.style["user-select"] = "none";
|
|
doc.body.style["-webkit-user-select"] = "none";
|
|
},
|
|
0);
|
|
return true;
|
|
} else {
|
|
if (activateLocalStorage || copyPasteUseBinary) {
|
|
var t = this;
|
|
t._addValueToLocalStrg(value);
|
|
var nodes = t._makeNodesFromCellValue(value);
|
|
while (t.element.hasChildNodes()) {
|
|
t.element.removeChild(t.element.lastChild);
|
|
}
|
|
nodes.forEach(function (node) {
|
|
t.element.appendChild(node);
|
|
});
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
pasteAsText: function (callback) {
|
|
var t = this;
|
|
t.elementText.style.display = "block";
|
|
t._startCopyOrPaste();
|
|
t.elementText.value = "\xa0";
|
|
t.elementText.focus();
|
|
t.elementText.select();
|
|
delete doc.body.style["-khtml-user-select"];
|
|
delete doc.body.style["-o-user-select"];
|
|
delete doc.body.style["user-select"];
|
|
doc.body.style["-webkit-user-select"] = "text";
|
|
doc.body.style.MozUserSelect = "text";
|
|
var _interval_time = 0;
|
|
if (AscBrowser.isMozilla) {
|
|
_interval_time = 10;
|
|
} else {
|
|
if (window.USER_AGENT_MACOS && window.USER_AGENT_WEBKIT) {
|
|
_interval_time = 200;
|
|
}
|
|
}
|
|
window.setTimeout(function () {
|
|
t.element.style.display = ELEMENT_DISPAY_STYLE2;
|
|
doc.body.style.MozUserSelect = "none";
|
|
doc.body.style["-khtml-user-select"] = "none";
|
|
doc.body.style["-o-user-select"] = "none";
|
|
doc.body.style["user-select"] = "none";
|
|
doc.body.style["-webkit-user-select"] = "none";
|
|
t.elementText.style.display = ELEMENT_DISPAY_STYLE2;
|
|
var textInsert = t.elementText.value;
|
|
if (isOnlyLocalBufferSafari && navigator.userAgent.toLowerCase().indexOf("safari") > -1 && navigator.userAgent.toLowerCase().indexOf("mac") && t.lStorageText) {
|
|
textInsert = t.lStorageText;
|
|
}
|
|
if (callback) {
|
|
callback(textInsert, []);
|
|
}
|
|
if (AscBrowser.isMozilla) {
|
|
t._getStylesSelect();
|
|
}
|
|
t._endCopyOrPaste();
|
|
},
|
|
_interval_time);
|
|
},
|
|
pasteAsTextButton: function (callback) {
|
|
var t = this;
|
|
if (AscBrowser.isIE) {
|
|
t.elementText.style.display = "block";
|
|
t.elementText.value = "\xa0";
|
|
t.elementText.focus();
|
|
t.elementText.select();
|
|
delete doc.body.style["-khtml-user-select"];
|
|
delete doc.body.style["-o-user-select"];
|
|
delete doc.body.style["user-select"];
|
|
doc.body.style["-webkit-user-select"] = "text";
|
|
doc.body.style.MozUserSelect = "text";
|
|
document.execCommand("paste");
|
|
window.setTimeout(function () {
|
|
t.element.style.display = "none";
|
|
doc.body.style.MozUserSelect = "none";
|
|
doc.body.style["-khtml-user-select"] = "none";
|
|
doc.body.style["-o-user-select"] = "none";
|
|
doc.body.style["user-select"] = "none";
|
|
doc.body.style["-webkit-user-select"] = "none";
|
|
t.elementText.style.display = "none";
|
|
callback(t.elementText.value, []);
|
|
},
|
|
0);
|
|
return true;
|
|
} else {
|
|
if (activateLocalStorage || copyPasteUseBinary) {
|
|
if (t.lStorageText) {
|
|
callback(t.lStorageText, []);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
bIsEmptyClipboard: function (isCellEditMode) {
|
|
var result = false;
|
|
if (isCellEditMode && (!t.lStorageText || t.lStorageText == null || t.lStorageText == "")) {
|
|
result = true;
|
|
} else {
|
|
if (!isCellEditMode && !t.lStorage) {
|
|
result = true;
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
_cleanElement: function () {
|
|
if (!window.USER_AGENT_SAFARI_MACOS) {
|
|
this.element.style.left = "0px";
|
|
this.element.style.top = "-100px";
|
|
}
|
|
this.element.style.display = "block";
|
|
while (this.element.hasChildNodes()) {
|
|
this.element.removeChild(this.element.lastChild);
|
|
}
|
|
delete doc.body.style["-khtml-user-select"];
|
|
delete doc.body.style["-o-user-select"];
|
|
delete doc.body.style["user-select"];
|
|
doc.body.style["-webkit-user-select"] = "text";
|
|
doc.body.style.MozUserSelect = "text";
|
|
this.element.style.MozUserSelect = "all";
|
|
},
|
|
_getUseFullUrl: function (recalculate) {
|
|
if (this.fullUrl == undefined || recalculate === true) {
|
|
var api = window["Asc"]["editor"];
|
|
var sProtocol = window.location.protocol;
|
|
var documentOrigin;
|
|
var sHost = window.location.host;
|
|
documentOrigin = "";
|
|
if (sProtocol && "" != sProtocol) {
|
|
documentOrigin = sProtocol + "//" + sHost;
|
|
} else {
|
|
documentOrigin = sHost;
|
|
}
|
|
this.fullUrl = documentOrigin + g_sResourceServiceLocalUrl + api.documentId + "/";
|
|
}
|
|
return this.fullUrl;
|
|
},
|
|
_getStylesSelect: function (worksheet) {
|
|
document.body.style.MozUserSelect = "";
|
|
delete document.body.style["-khtml-user-select"];
|
|
delete document.body.style["-o-user-select"];
|
|
delete document.body.style["user-select"];
|
|
document.body.style["-webkit-user-select"] = "text";
|
|
},
|
|
_editorPaste: function (worksheet, callback) {
|
|
if (window.USER_AGENT_SAFARI_MACOS) {
|
|
return;
|
|
}
|
|
this._startCopyOrPaste();
|
|
var t = this;
|
|
window.GlobalPasteFlagCounter = 1;
|
|
isTruePaste = false;
|
|
var is_chrome = AscBrowser.isChrome;
|
|
document.body.style.MozUserSelect = "text";
|
|
delete document.body.style["-khtml-user-select"];
|
|
delete document.body.style["-o-user-select"];
|
|
delete document.body.style["user-select"];
|
|
document.body.style["-webkit-user-select"] = "text";
|
|
var overflowBody = document.body.style.overflow;
|
|
document.body.style.overflow = "hidden";
|
|
var Text;
|
|
var pastebin = t._editorPasteGetElem(worksheet, true);
|
|
pastebin.style.display = "block";
|
|
pastebin.focus();
|
|
pastebin.appendChild(document.createTextNode("\xa0"));
|
|
if (window.getSelection) {
|
|
var selection = document.defaultView.getSelection();
|
|
selection.removeAllRanges();
|
|
var rangeToSelect = document.createRange();
|
|
rangeToSelect.selectNodeContents(pastebin);
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
} else {
|
|
if (document.body.createTextRange) {
|
|
var rangeToSelect = document.body.createTextRange();
|
|
rangeToSelect.moveToElementText(pastebin);
|
|
rangeToSelect.select();
|
|
}
|
|
}
|
|
var func_timeout = function () {
|
|
if (PASTE_EMPTY_USE && !isTruePaste) {
|
|
if (pastebin.innerHTML == " ") {
|
|
PASTE_EMPTY_COUNTER++;
|
|
if (PASTE_EMPTY_COUNTER < PASTE_EMPTY_COUNTER_MAX) {
|
|
window.setTimeout(func_timeout, 100);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (window.USER_AGENT_SAFARI_MACOS) {
|
|
if (window.GlobalPasteFlagCounter != 2 && !window.GlobalPasteFlag) {
|
|
window.setTimeout(func_timeout, 10);
|
|
return;
|
|
}
|
|
}
|
|
document.body.style.MozUserSelect = "none";
|
|
document.body.style["-khtml-user-select"] = "none";
|
|
document.body.style["-o-user-select"] = "none";
|
|
document.body.style["user-select"] = "none";
|
|
document.body.style["-webkit-user-select"] = "none";
|
|
document.body.style.overflow = overflowBody;
|
|
if (!isTruePaste) {
|
|
t._editorPasteExec(worksheet, pastebin);
|
|
}
|
|
t._endCopyOrPaste();
|
|
pastebin.style.display = ELEMENT_DISPAY_STYLE2;
|
|
if (AscBrowser.isIE) {
|
|
pastebin.style.display = ELEMENT_DISPAY_STYLE2;
|
|
}
|
|
if (callback && callback.call) {
|
|
callback();
|
|
}
|
|
};
|
|
var _interval_time = window.USER_AGENT_MACOS ? 200 : 100;
|
|
PASTE_EMPTY_COUNTER = 0;
|
|
window.setTimeout(func_timeout, _interval_time);
|
|
},
|
|
_editorPasteGetElem: function (worksheet, bClean) {
|
|
var t = this;
|
|
var pastebin = document.getElementById(PASTE_ELEMENT_ID2);
|
|
if (!pastebin) {
|
|
pastebin = document.createElement("div");
|
|
pastebin.setAttribute("id", PASTE_ELEMENT_ID2);
|
|
pastebin.setAttribute("class", COPYPASTE_ELEMENT_CLASS);
|
|
pastebin.style.position = "absolute";
|
|
pastebin.style.top = "100px";
|
|
pastebin.style.left = "0px";
|
|
if (window.USER_AGENT_MACOS) {
|
|
t.element.style.width = "100px";
|
|
} else {
|
|
t.element.style.width = "10000px";
|
|
}
|
|
pastebin.style.height = "100px";
|
|
pastebin.style.overflow = "hidden";
|
|
pastebin.style.zIndex = -1000;
|
|
pastebin.style.lineHeight = "1px";
|
|
pastebin.setAttribute("contentEditable", true);
|
|
pastebin.onpaste = function (e) {
|
|
if (!window.GlobalPasteFlag) {
|
|
return;
|
|
}
|
|
t._bodyPaste(worksheet, e);
|
|
pastebin.onpaste = null;
|
|
};
|
|
document.body.appendChild(pastebin);
|
|
} else {
|
|
if (bClean) {
|
|
var aChildNodes = pastebin.childNodes;
|
|
for (var length = aChildNodes.length, i = length - 1; i >= 0; i--) {
|
|
pastebin.removeChild(aChildNodes[i]);
|
|
}
|
|
pastebin.onpaste = function (e) {
|
|
if (!window.GlobalPasteFlag) {
|
|
return;
|
|
}
|
|
t._bodyPaste(worksheet, e);
|
|
pastebin.onpaste = null;
|
|
};
|
|
}
|
|
}
|
|
return pastebin;
|
|
},
|
|
_getTableFromText: function (sText) {
|
|
var t = this;
|
|
var sHtml = "<html><body><table>";
|
|
var sCurPar = "";
|
|
var sCurChar = "";
|
|
for (var i = 0, length = sText.length; i < length; i++) {
|
|
var Char = sText.charAt(i);
|
|
var Code = sText.charCodeAt(i);
|
|
var Item = null;
|
|
if ("\n" === Char) {
|
|
if ("" == sCurChar && sCurPar == "") {
|
|
sHtml += "<tr><td style='font-family:Calibri'> </td></tr>";
|
|
} else {
|
|
if (sCurPar == "") {
|
|
sHtml += "<tr><td><span style='font-family:Calibri;font-size:11pt;white-space:nowrap'>" + sCurChar + "</span></td></tr>";
|
|
sCurChar = "";
|
|
} else {
|
|
if (sCurPar != "") {
|
|
if (sCurChar == "") {
|
|
sCurPar += "<td style='font-family:Calibri'> </td>";
|
|
} else {
|
|
sCurPar += "<td><span style='font-family:Calibri;font-size:11pt;white-space:nowrap'>" + sCurChar + "</span></td>";
|
|
}
|
|
sHtml += "<tr>" + sCurPar + "</tr>";
|
|
sCurChar = "";
|
|
sCurPar = "";
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (13 === Code) {
|
|
continue;
|
|
} else {
|
|
if (32 == Code || 160 == Code) {
|
|
sCurChar += " ";
|
|
} else {
|
|
if (9 === Code) {
|
|
sCurPar += "<td><span style='font-family:Calibri;font-size:11pt;white-space:nowrap'>" + sCurChar + "</span></td>";
|
|
if (i == length - 1) {
|
|
sHtml += "<tr>" + sCurPar + "</tr>";
|
|
}
|
|
sCurChar = "";
|
|
} else {
|
|
sCurChar += t._copyPasteCorrectString(Char);
|
|
if (i == length - 1) {
|
|
sCurPar += "<td><span style='font-family:Calibri;font-size:11pt;white-space:nowrap'>" + sCurChar + "</span></td>";
|
|
sHtml += "<tr>" + sCurPar + "</tr>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sHtml += "</table></body></html>";
|
|
return sHtml;
|
|
},
|
|
_getTextFromTable: function (table) {
|
|
var images = $(table).find("img");
|
|
if (images.length != 0 && images.length == $(table).children().length) {
|
|
var stringImg = {};
|
|
stringImg.isImage = true;
|
|
stringImg.text = "";
|
|
for (var i = 0; i < images.length; i++) {
|
|
stringImg.text += images[i].name + ";";
|
|
}
|
|
return stringImg;
|
|
}
|
|
if (table.children && table.children[0] && table.children[0].nodeName.toLowerCase() == "br") {
|
|
$(table.children[0]).remove();
|
|
}
|
|
if ((table.children[0] && table.children[0].tagName.toLowerCase() == "table" && table.children.length == 1)) {
|
|
table = table.children[0];
|
|
}
|
|
var textNode = {};
|
|
if (table.tagName.toLowerCase() != "table") {
|
|
textNode.text = $(table).text();
|
|
} else {
|
|
textNode.text = $(table).text();
|
|
if (table.rows) {
|
|
textNode.rows = table.rows.length;
|
|
} else {
|
|
textNode.rows = 0;
|
|
}
|
|
if (table.rows[0] && table.rows[0].cells) {
|
|
textNode.cols = table.rows[0].cells.length + table.rows[0].cells[0].colSpan - 1;
|
|
}
|
|
}
|
|
return textNode;
|
|
},
|
|
_bodyPaste: function (worksheet, e) {
|
|
var t = this;
|
|
if (e && e.clipboardData && e.clipboardData.getData) {
|
|
var bExist = false;
|
|
var is_chrome = AscBrowser.isChrome;
|
|
var sHtml = null;
|
|
var isText = false;
|
|
var fTest = function (types, sPattern) {
|
|
if (!types) {
|
|
return false;
|
|
}
|
|
for (var i = 0, length = types.length; i < length; ++i) {
|
|
if (sPattern == types[i]) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
if (fTest(e.clipboardData.types, "text/html")) {
|
|
var sHtml = e.clipboardData.getData("text/html");
|
|
var nIndex = sHtml.lastIndexOf("</html>");
|
|
if (-1 != nIndex) {
|
|
sHtml = sHtml.substring(0, nIndex + "</html>".length);
|
|
}
|
|
} else {
|
|
if (fTest(e.clipboardData.types, "text/plain")) {
|
|
bExist = true;
|
|
var sText = e.clipboardData.getData("text/plain");
|
|
sHtml = t._getTableFromText(sText);
|
|
isText = true;
|
|
}
|
|
}
|
|
if (null != sHtml) {
|
|
t._addHtmlToIframe(worksheet, sHtml, isText, e);
|
|
} else {
|
|
var items = e.clipboardData.items;
|
|
if (null != items) {
|
|
for (var i = 0; i < items.length; ++i) {
|
|
if (items[i].kind == "file" && items[i].type.indexOf("image/") !== -1) {
|
|
var blob = items[i].getAsFile();
|
|
var reader = new FileReader();
|
|
reader.onload = function (evt) {
|
|
t._addHtmlToIframe(worksheet, '<html><body><img src="' + evt.target.result + '"/></body></html>', isText, evt);
|
|
};
|
|
reader.readAsDataURL(blob);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_addHtmlToIframe: function (worksheet, sHtml, isText, e) {
|
|
var t = this;
|
|
var bExist = false;
|
|
var ifr = document.getElementById("pasteFrame");
|
|
if (!ifr) {
|
|
ifr = document.createElement("iframe");
|
|
ifr.name = "pasteFrame";
|
|
ifr.id = "pasteFrame";
|
|
ifr.style.position = "absolute";
|
|
ifr.style.top = "-100px";
|
|
ifr.style.left = "0px";
|
|
if (window.USER_AGENT_MACOS) {
|
|
ifr.style.width = "100px";
|
|
} else {
|
|
ifr.style.width = "10000px";
|
|
}
|
|
ifr.style.height = "100px";
|
|
ifr.style.overflow = "hidden";
|
|
ifr.style.zIndex = -1000;
|
|
document.body.appendChild(ifr);
|
|
}
|
|
this._startCopyOrPaste();
|
|
ifr.style.display = "block";
|
|
var frameWindow = window.frames["pasteFrame"];
|
|
if (frameWindow) {
|
|
frameWindow.document.open();
|
|
frameWindow.document.write(sHtml);
|
|
frameWindow.document.close();
|
|
var bodyFrame = frameWindow.document.body;
|
|
if (bodyFrame && bodyFrame != null) {
|
|
t._editorPasteExec(worksheet, frameWindow.document.body, isText);
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
bExist = true;
|
|
}
|
|
ifr.style.display = ELEMENT_DISPAY_STYLE2;
|
|
}
|
|
if (bExist) {
|
|
isTruePaste = true;
|
|
if (e.preventDefault) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
}
|
|
this._endCopyOrPaste();
|
|
return false;
|
|
}
|
|
},
|
|
_copyPasteCorrectString: function (str) {
|
|
var res = str;
|
|
res = res.replace(/&/g, "&");
|
|
res = res.replace(/</g, "<");
|
|
res = res.replace(/>/g, ">");
|
|
res = res.replace(/'/g, "'");
|
|
res = res.replace(/"/g, """);
|
|
return res;
|
|
},
|
|
_setStylesTextPaste: function (spanObject) {
|
|
var jqSpanObject = $(spanObject),
|
|
fontSize;
|
|
var oNewItem = {};
|
|
oNewItem.text = jqSpanObject.text().replace(/(\r|\t|\n|)/g, "");
|
|
oNewItem.format = {};
|
|
oNewItem.format.fn = g_fontApplication.GetFontNameDictionary(spanObject.style.fontFamily, true);
|
|
if (oNewItem.format.fn == null || oNewItem.format.fn == "") {
|
|
oNewItem.format.fn = "Calibri";
|
|
}
|
|
if (jqSpanObject.css("vertical-align") == "sub" || jqSpanObject.css("vertical-align") == "super") {
|
|
fontSize = $(spanObject.parentNode).css("font-size");
|
|
if (fontSize.indexOf("pt") > -1) {
|
|
oNewItem.format.fs = parseInt(fontSize);
|
|
} else {
|
|
oNewItem.format.fs = parseInt((3 / 4) * Math.round(parseFloat(fontSize)));
|
|
}
|
|
} else {
|
|
if (spanObject.style.fontSize.indexOf("pt") > -1) {
|
|
oNewItem.format.fs = parseInt(spanObject.style.fontSize);
|
|
} else {
|
|
oNewItem.format.fs = parseInt((3 / 4) * Math.round(parseFloat(spanObject.style.fontSize)));
|
|
}
|
|
}
|
|
if (isNaN(oNewItem.format.fs)) {
|
|
oNewItem.format.fs = 11;
|
|
}
|
|
oNewItem.format.b = (jqSpanObject.css("font-weight") == "bold");
|
|
oNewItem.format.i = (jqSpanObject.css("font-style") == "italic");
|
|
oNewItem.format.u = (jqSpanObject.css("text-decoration") == "underline") ? Asc.EUnderline.underlineSingle : Asc.EUnderline.underlineNone;
|
|
oNewItem.format.s = (jqSpanObject.css("text-decoration") == "line-through");
|
|
if (jqSpanObject.css("vertical-align") != null) {
|
|
oNewItem.format.va = jqSpanObject.css("vertical-align");
|
|
}
|
|
if (jqSpanObject.css("vertical-align") == "baseline") {
|
|
oNewItem.format.va = "";
|
|
}
|
|
oNewItem.format.c = new RgbColor(this._getBinaryColor(jqSpanObject.css("color")));
|
|
if (oNewItem.format.c == "") {
|
|
oNewItem.format.c = null;
|
|
}
|
|
if (jqSpanObject.css("vertical-align") != null) {
|
|
oNewItem.format.va = jqSpanObject.css("vertical-align") === "sub" ? "subscript" : jqSpanObject.css("vertical-align") === "super" ? "superscript" : "baseline";
|
|
}
|
|
return oNewItem;
|
|
},
|
|
_getDefaultCell: function () {
|
|
var res = [];
|
|
res.push({
|
|
format: {
|
|
fn: "Arial",
|
|
fs: "11",
|
|
b: false,
|
|
i: false,
|
|
u: false,
|
|
s: false,
|
|
va: "none"
|
|
},
|
|
text: ""
|
|
});
|
|
return res;
|
|
},
|
|
_getBorderStyleName: function (borderStyle, borderWidth) {
|
|
var res = null;
|
|
var nBorderWidth = parseFloat(borderWidth);
|
|
if (isNaN(nBorderWidth)) {
|
|
return res;
|
|
}
|
|
if (typeof borderWidth == "string" && -1 !== borderWidth.indexOf("pt")) {
|
|
nBorderWidth = nBorderWidth * 96 / 72;
|
|
}
|
|
switch (borderStyle) {
|
|
case "solid":
|
|
if (0 < nBorderWidth && nBorderWidth <= 1) {
|
|
res = c_oAscBorderStyles.Thin;
|
|
} else {
|
|
if (1 < nBorderWidth && nBorderWidth <= 2) {
|
|
res = c_oAscBorderStyles.Medium;
|
|
} else {
|
|
if (2 < nBorderWidth && nBorderWidth <= 3) {
|
|
res = c_oAscBorderStyles.Thick;
|
|
} else {
|
|
res = c_oAscBorderStyles.None;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "dashed":
|
|
if (0 < nBorderWidth && nBorderWidth <= 1) {
|
|
res = c_oAscBorderStyles.DashDot;
|
|
} else {
|
|
res = c_oAscBorderStyles.MediumDashDot;
|
|
}
|
|
break;
|
|
case "double":
|
|
res = c_oAscBorderStyles.Double;
|
|
break;
|
|
case "dotted":
|
|
res = c_oAscBorderStyles.Hair;
|
|
break;
|
|
}
|
|
return res;
|
|
},
|
|
_getArray: function (node, isText) {
|
|
var aResult = [];
|
|
var oNewItem = [];
|
|
var tmpBorderStyle, borderStyleName;
|
|
var t = this;
|
|
if (node == undefined) {
|
|
node = document.createElement("span");
|
|
}
|
|
if (node == undefined || node == null) {
|
|
oNewItem[0] = t._getDefaultCell();
|
|
this.fontsNew["Arial"] = 1;
|
|
} else {
|
|
if (node.children != undefined && node.children.length == 0) {
|
|
oNewItem[0] = t._setStylesTextPaste(node);
|
|
this.fontsNew[oNewItem[0].format.fn] = 1;
|
|
} else {
|
|
if (typeof(node) == "string" || node.children.length == 0 || node.children.length == 1 && node.children[0].nodeName == "#text") {
|
|
oNewItem = t._makeCellValuesHtml(node, isText);
|
|
} else {
|
|
oNewItem = t._makeCellValuesHtml(node.childNodes, isText);
|
|
}
|
|
}
|
|
}
|
|
oNewItem.borders = new Border();
|
|
tmpBorderStyle = $(node).css("border-top-style");
|
|
if ("none" !== tmpBorderStyle && null != tmpBorderStyle) {
|
|
var borderTopWidth = node.style.borderTopWidth;
|
|
if (borderTopWidth == "") {
|
|
borderTopWidth = $(node).css("border-top-width");
|
|
}
|
|
var borderTopStyle = node.style.borderTopStyle;
|
|
if (borderTopStyle == "") {
|
|
borderTopStyle = tmpBorderStyle;
|
|
}
|
|
var borderTopColor = node.style.borderTopColor;
|
|
if (borderTopColor == "") {
|
|
borderTopColor = $(node).css("border-top-color");
|
|
}
|
|
if (borderTopColor) {
|
|
borderTopColor = this._getBinaryColor(borderTopColor);
|
|
} else {
|
|
borderTopColor = 0;
|
|
}
|
|
borderStyleName = this._getBorderStyleName(borderTopStyle, borderTopWidth);
|
|
if (null !== borderStyleName) {
|
|
oNewItem.borders.t.setStyle(borderStyleName);
|
|
oNewItem.borders.t.c = new RgbColor(borderTopColor);
|
|
}
|
|
}
|
|
tmpBorderStyle = $(node).css("border-bottom-style");
|
|
if ("none" !== tmpBorderStyle && null != tmpBorderStyle) {
|
|
var borderBottomWidth = node.style.borderBottomWidth;
|
|
if (borderBottomWidth == "") {
|
|
borderBottomWidth = $(node).css("border-bottom-width");
|
|
}
|
|
var borderBottomStyle = node.style.borderBottomStyle;
|
|
if (borderBottomStyle == "") {
|
|
borderBottomStyle = tmpBorderStyle;
|
|
}
|
|
var borderBottomColor = node.style.borderBottomColor;
|
|
if (borderBottomColor == "") {
|
|
borderBottomColor = $(node).css("border-bottom-color");
|
|
}
|
|
if (borderBottomColor) {
|
|
borderBottomColor = this._getBinaryColor(borderBottomColor);
|
|
} else {
|
|
borderBottomColor = 0;
|
|
}
|
|
borderStyleName = this._getBorderStyleName(borderBottomStyle, borderBottomWidth);
|
|
if (null !== borderStyleName) {
|
|
oNewItem.borders.b.setStyle(borderStyleName);
|
|
oNewItem.borders.b.c = new RgbColor(borderBottomColor);
|
|
}
|
|
}
|
|
tmpBorderStyle = $(node).css("border-left-style");
|
|
if ("none" !== tmpBorderStyle && null != tmpBorderStyle) {
|
|
var borderLeftWidth = node.style.borderLeftWidth;
|
|
if (borderLeftWidth == "") {
|
|
borderLeftWidth = $(node).css("border-left-width");
|
|
}
|
|
var borderLeftStyle = node.style.borderLeftStyle;
|
|
if (borderLeftStyle == "") {
|
|
borderLeftStyle = tmpBorderStyle;
|
|
}
|
|
var borderLeftColor = node.style.borderLeftColor;
|
|
if (borderLeftColor == "") {
|
|
borderLeftColor = $(node).css("border-left-color");
|
|
}
|
|
if (borderLeftColor) {
|
|
borderLeftColor = this._getBinaryColor(borderLeftColor);
|
|
} else {
|
|
borderLeftColor = 0;
|
|
}
|
|
borderStyleName = this._getBorderStyleName(borderLeftStyle, borderLeftWidth);
|
|
if (null !== borderStyleName) {
|
|
oNewItem.borders.l.setStyle(borderStyleName);
|
|
oNewItem.borders.l.c = new RgbColor(borderLeftColor);
|
|
}
|
|
}
|
|
tmpBorderStyle = $(node).css("border-right-style");
|
|
if ("none" !== tmpBorderStyle && null != tmpBorderStyle) {
|
|
var borderRightWidth = node.style.borderRightWidth;
|
|
if (borderRightWidth == "") {
|
|
borderRightWidth = $(node).css("border-right-width");
|
|
}
|
|
var borderRightStyle = node.style.borderRightStyle;
|
|
if (borderRightStyle == "") {
|
|
borderRightStyle = tmpBorderStyle;
|
|
}
|
|
var borderRightColor = node.style.borderRightColor;
|
|
if (borderRightColor == "") {
|
|
borderRightColor = $(node).css("border-right-color");
|
|
}
|
|
if (borderRightColor) {
|
|
borderRightColor = this._getBinaryColor(borderRightColor);
|
|
} else {
|
|
borderRightColor = 0;
|
|
}
|
|
borderStyleName = this._getBorderStyleName(borderRightStyle, borderRightWidth);
|
|
if (null !== borderStyleName) {
|
|
oNewItem.borders.r.setStyle(borderStyleName);
|
|
oNewItem.borders.r.c = new RgbColor(borderRightColor);
|
|
}
|
|
}
|
|
if (oNewItem.wrap !== true) {
|
|
if (node.style.whiteSpace == "nowrap") {
|
|
oNewItem.wrap = false;
|
|
} else {
|
|
if (node.style.whiteSpace == "normal") {
|
|
oNewItem.wrap = true;
|
|
} else {
|
|
oNewItem.wrap = false;
|
|
}
|
|
}
|
|
}
|
|
if (node != undefined && node.colSpan != undefined) {
|
|
oNewItem.colSpan = node.colSpan;
|
|
} else {
|
|
oNewItem.colSpan = 1;
|
|
}
|
|
if (node != undefined && node.rowSpan != undefined) {
|
|
oNewItem.rowSpan = node.rowSpan;
|
|
} else {
|
|
oNewItem.rowSpan = 1;
|
|
}
|
|
if (node.style.textAlign != null && node.style.textAlign != "") {
|
|
oNewItem.a = node.style.textAlign;
|
|
} else {
|
|
if (node.children[0] && node.children[0].style.textAlign != null && node.children[0].style.textAlign != "") {
|
|
oNewItem.a = node.children[0].style.textAlign;
|
|
} else {
|
|
if (node.nodeName.toLowerCase() == "th") {
|
|
oNewItem.a = "center";
|
|
}
|
|
}
|
|
}
|
|
if ($(node).css("background-color") != "none" && $(node).css("background-color") != null) {
|
|
oNewItem.bc = new RgbColor(this._getBinaryColor($(node).css("background-color")));
|
|
}
|
|
if (node.style.verticalAlign != undefined && node.style.verticalAlign != null && node.style.verticalAlign != "" && node.style.verticalAlign != "middle") {
|
|
oNewItem.va = node.style.verticalAlign;
|
|
} else {
|
|
if (node.style.verticalAlign == "middle") {
|
|
oNewItem.va = "center";
|
|
} else {
|
|
oNewItem.va = "bottom";
|
|
}
|
|
}
|
|
if (node.getAttribute("class") != null) {
|
|
var cL = node.getAttribute("class").split(" ");
|
|
for (var i = 0; i < cL.length; i++) {
|
|
if (cL[i].indexOf("nFormat") > -1) {
|
|
var format = cL[i].split("nFormat");
|
|
oNewItem.format = format[1];
|
|
}
|
|
}
|
|
}
|
|
var findHyperLink = $(node).find("a");
|
|
if ($(node).children("a").length == 1 && oNewItem[0] != undefined) {
|
|
oNewItem.hyperLink = $(node).children("a").attr("href");
|
|
if ($(node).children("a").attr("title")) {
|
|
oNewItem.toolTip = $(node).children("a").attr("title");
|
|
} else {
|
|
oNewItem.toolTip = null;
|
|
}
|
|
} else {
|
|
if (findHyperLink && findHyperLink[0] && oNewItem[0] != undefined && findHyperLink.length == 1) {
|
|
oNewItem.hyperLink = findHyperLink.attr("href");
|
|
if (findHyperLink.attr("title")) {
|
|
oNewItem.toolTip = findHyperLink.attr("title");
|
|
} else {
|
|
oNewItem.toolTip = null;
|
|
}
|
|
} else {
|
|
if (node.nodeName.toLowerCase() == "a") {
|
|
oNewItem.hyperLink = $(node).attr("href");
|
|
if ($(node).attr("title")) {
|
|
oNewItem.toolTip = $(node).attr("title");
|
|
} else {
|
|
oNewItem.toolTip = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
aResult.push(oNewItem);
|
|
return aResult;
|
|
},
|
|
_IsBlockElem: function (name) {
|
|
if ("p" == name || "div" == name || "ul" == name || "ol" == name || "li" == name || "table" == name || "tbody" == name || "tr" == name || "td" == name || "th" == name || "h1" == name || "h2" == name || "h3" == name || "h4" == name || "h5" == name || "h6" == name || "center" == name) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
_countTags: function (node, array) {
|
|
var t = this;
|
|
if (node && 1 == node.nodeType) {
|
|
var child = node.firstChild;
|
|
while (child) {
|
|
var parent = $(child).parent();
|
|
var checkBlockParent = false;
|
|
while (parent.length != 0) {
|
|
if (t._IsBlockElem(parent[0].nodeName.toLowerCase())) {
|
|
checkBlockParent = true;
|
|
break;
|
|
}
|
|
parent = parent.parent();
|
|
}
|
|
if (t._IsBlockElem(child.nodeName.toLowerCase()) && $(child).find("p,div,ul,ol,li,table,h1,h2,h3,h4,h5,h6,center").length == 0 || child.nodeName.toLowerCase() == "table") {
|
|
array[array.length] = child;
|
|
} else {
|
|
if (!checkBlockParent && $(child).find("p,div,ul,ol,li,table,h1,h2,h3,h4,h5,h6,center").length == 0 && !t._IsBlockElem(child.nodeName.toLowerCase()) && (child.nodeName.toLowerCase() == "span" || child.nodeName.toLowerCase() == "a")) {
|
|
array[array.length] = child;
|
|
}
|
|
}
|
|
if (child.nodeName.toLowerCase() != "table") {
|
|
t._countTags(child, array);
|
|
}
|
|
child = child.nextSibling;
|
|
}
|
|
}
|
|
return array;
|
|
},
|
|
_getSignTags: function (nodes) {
|
|
var newArr = [];
|
|
var k = 0;
|
|
for (var n = 0; n < nodes.length; ++n) {
|
|
if (! (nodes[n].nodeName.toLowerCase() == "meta" || nodes[n].nodeName.toLowerCase() == "style" || nodes[n].nodeName.toLowerCase() == "#comment" || (nodes[n].nodeName.toLowerCase() == "#text" && nodes[n].textContent.replace(/(\r|\t|\n| )/g, "") == ""))) {
|
|
if ($(nodes[n]).find("p,div,ul,ol,li,table,h1,h2,h3,h4,h5,h6,center,img").length != 0 && nodes[n].nodeName.toLowerCase() != "table" && nodes[n].nodeName.toLowerCase() != "img") {
|
|
var isWrap = "";
|
|
if (nodes[n].style && nodes[n].style.whiteSpace) {
|
|
isWrap = nodes[n].style.whiteSpace;
|
|
}
|
|
Array.prototype.forEach.call(nodes[n].childNodes, function processElement(elem) {
|
|
if (elem.style && elem.style.whiteSpace && elem.nodeName.toLowerCase() == "div") {
|
|
isWrap = elem.style.whiteSpace;
|
|
}
|
|
if (($(elem).find("p,div,ul,ol,li,table,h1,h2,h3,h4,h5,h6,center,img").length == 0 && elem.textContent.replace(/(\r|\t|\n| )/g, "") != "") || elem.nodeName.toLowerCase() == "table" || elem.nodeName.toLowerCase() == "img") {
|
|
newArr[k] = elem;
|
|
if (elem.style) {
|
|
newArr[k].style.whiteSpace = isWrap;
|
|
}
|
|
k++;
|
|
}
|
|
if ($(elem).find("p,div,ul,ol,li,table,h1,h2,h3,h4,h5,h6,center,img").length != 0 && elem.nodeName.toLowerCase() != "table" && elem.nodeName.toLowerCase() != "img") {
|
|
Array.prototype.forEach.call(elem.childNodes, processElement);
|
|
}
|
|
});
|
|
} else {
|
|
newArr[k] = nodes[n];
|
|
k++;
|
|
}
|
|
}
|
|
}
|
|
return newArr;
|
|
},
|
|
_pasteFromBinary: function (worksheet, node, onlyFromLocalStorage, isIntoShape) {
|
|
var base64 = null,
|
|
base64FromWord = null,
|
|
base64FromPresentation = null,
|
|
t = this;
|
|
if (onlyFromLocalStorage) {
|
|
if (typeof t.lStorage == "object") {
|
|
if (t.lStorage.htmlInShape) {
|
|
return t.lStorage.htmlInShape;
|
|
} else {
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
return true;
|
|
}
|
|
} else {
|
|
base64 = t.lStorage;
|
|
}
|
|
} else {
|
|
var classNode;
|
|
if (node.children[0] && node.children[0].getAttribute("class") != null && (node.children[0].getAttribute("class").indexOf("xslData;") > -1 || node.children[0].getAttribute("class").indexOf("docData;") > -1 || node.children[0].getAttribute("class").indexOf("pptData;") > -1)) {
|
|
classNode = node.children[0].getAttribute("class");
|
|
} else {
|
|
if (node.children[0] && node.children[0].children[0] && node.children[0].children[0].getAttribute("class") != null && (node.children[0].children[0].getAttribute("class").indexOf("xslData;") > -1 || node.children[0].children[0].getAttribute("class").indexOf("docData;") > -1 || node.children[0].children[0].getAttribute("class").indexOf("pptData;") > -1)) {
|
|
classNode = node.children[0].children[0].getAttribute("class");
|
|
} else {
|
|
if (node.children[0] && node.children[0].children[0] && node.children[0].children[0].children[0] && node.children[0].children[0].children[0].getAttribute("class") != null && (node.children[0].children[0].children[0].getAttribute("class").indexOf("xslData;") > -1 || node.children[0].children[0].children[0].getAttribute("class").indexOf("docData;") > -1 || node.children[0].children[0].children[0].getAttribute("class").indexOf("pptData;") > -1)) {
|
|
classNode = node.children[0].children[0].children[0].getAttribute("class");
|
|
}
|
|
}
|
|
}
|
|
if (classNode != null) {
|
|
var cL = classNode.split(" ");
|
|
for (var i = 0; i < cL.length; i++) {
|
|
if (cL[i].indexOf("xslData;") > -1) {
|
|
base64 = cL[i].split("xslData;")[1];
|
|
} else {
|
|
if (cL[i].indexOf("docData;") > -1) {
|
|
base64FromWord = cL[i].split("docData;")[1];
|
|
} else {
|
|
if (cL[i].indexOf("pptData;") > -1) {
|
|
base64FromPresentation = cL[i].split("pptData;")[1];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (base64 != null) {
|
|
var oBinaryFileReader = new Asc.BinaryFileReader(null, true);
|
|
var tempWorkbook = new Workbook;
|
|
oBinaryFileReader.Read(base64, tempWorkbook);
|
|
this.activeRange = oBinaryFileReader.copyPasteObj.activeRange;
|
|
var pasteData = null;
|
|
if (tempWorkbook) {
|
|
pasteData = tempWorkbook.aWorksheets[0];
|
|
}
|
|
if (pasteData) {
|
|
if (pasteData.Drawings && pasteData.Drawings.length) {
|
|
if (! (window["Asc"]["editor"] && window["Asc"]["editor"].isChartEditor)) {
|
|
var historyIsTurnOn = History.Is_On();
|
|
if (!historyIsTurnOn) {
|
|
History.TurnOn();
|
|
}
|
|
t._insertImagesFromBinary(worksheet, pasteData, isIntoShape);
|
|
if (!historyIsTurnOn) {
|
|
History.TurnOff();
|
|
}
|
|
}
|
|
} else {
|
|
var newFonts = {};
|
|
pasteData.generateFontMap(newFonts);
|
|
worksheet._loadFonts(newFonts, function () {
|
|
worksheet.setSelectionInfo("paste", pasteData, false, "binary");
|
|
});
|
|
}
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
return true;
|
|
}
|
|
} else {
|
|
if (base64FromWord && copyPasteFromWordUseBinary) {
|
|
var pasteData = this.ReadFromBinaryWord(base64FromWord, worksheet);
|
|
var pasteFromBinaryWord = new Asc.pasteFromBinaryWord(this, worksheet);
|
|
pasteFromBinaryWord._paste(worksheet, pasteData);
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
return true;
|
|
} else {
|
|
if (base64FromPresentation) {
|
|
window.global_pptx_content_loader.Clear();
|
|
var _stream = CreateBinaryReader(base64FromPresentation, 0, base64FromPresentation.length);
|
|
var stream = new FileStream(_stream.data, _stream.size);
|
|
var p_url = stream.GetString2();
|
|
var p_width = stream.GetULong() / 100000;
|
|
var p_height = stream.GetULong() / 100000;
|
|
var fonts = [];
|
|
var first_string = stream.GetString2();
|
|
switch (first_string) {
|
|
case "Content":
|
|
return false;
|
|
var docContent = this.ReadPresentationText(stream, worksheet);
|
|
var pasteFromBinaryWord = new Asc.pasteFromBinaryWord(this, worksheet);
|
|
pasteFromBinaryWord._paste(worksheet, {
|
|
DocumentContent: docContent
|
|
});
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
return true;
|
|
case "Drawings":
|
|
var objects = this.ReadPresentationShapes(stream, worksheet);
|
|
if (!objects.arrImages.length && objects.arrShapes.length === 1) {
|
|
var drawing = objects.arrShapes[0].graphicObject;
|
|
if (typeof CGraphicFrame !== "undefined" && drawing instanceof CGraphicFrame) {
|
|
return false;
|
|
}
|
|
}
|
|
var arr_shapes = objects.arrShapes;
|
|
if (arr_shapes && arr_shapes.length) {
|
|
if (! (window["Asc"]["editor"] && window["Asc"]["editor"].isChartEditor)) {
|
|
t._insertImagesFromBinary(worksheet, {
|
|
Drawings: arr_shapes
|
|
},
|
|
isIntoShape);
|
|
}
|
|
}
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
return true;
|
|
case "SlideObjects":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
ReadPresentationShapes: function (stream, worksheet) {
|
|
var loader = new BinaryPPTYLoader();
|
|
loader.presentation = worksheet.model;
|
|
loader.Start_UseFullUrl();
|
|
loader.stream = stream;
|
|
var count = stream.GetULong();
|
|
var arr_shapes = [];
|
|
var arr_transforms = [];
|
|
var arrBase64Img = [];
|
|
var cStyle;
|
|
for (var i = 0; i < count; ++i) {
|
|
var style_index = null;
|
|
if (!loader.stream.GetBool()) {
|
|
if (loader.stream.GetBool()) {
|
|
loader.stream.Skip2(1);
|
|
cStyle = loader.ReadTableStyle();
|
|
loader.stream.GetBool();
|
|
style_index = stream.GetString2();
|
|
}
|
|
}
|
|
var drawing = loader.ReadGraphicObject();
|
|
var x = stream.GetULong() / 100000;
|
|
var y = stream.GetULong() / 100000;
|
|
var extX = stream.GetULong() / 100000;
|
|
var extY = stream.GetULong() / 100000;
|
|
var base64 = stream.GetString2();
|
|
if (count !== 1 && typeof CGraphicFrame !== "undefined" && drawing instanceof CGraphicFrame) {
|
|
drawing = DrawingObjectsController.prototype.createImage(base64, x, y, extX, extY);
|
|
}
|
|
arr_shapes[i] = worksheet.objectRender.createDrawingObject();
|
|
arr_shapes[i].graphicObject = drawing;
|
|
}
|
|
return {
|
|
arrShapes: arr_shapes,
|
|
arrImages: loader.End_UseFullUrl(),
|
|
arrTransforms: arr_transforms
|
|
};
|
|
},
|
|
ReadPresentationText: function (stream, worksheet) {
|
|
var loader = new BinaryPPTYLoader();
|
|
loader.Start_UseFullUrl();
|
|
loader.stream = stream;
|
|
loader.presentation = worksheet.model;
|
|
var count = stream.GetULong() / 100000;
|
|
var elements = [],
|
|
paragraph,
|
|
selectedElement;
|
|
for (var i = 0; i < count; ++i) {
|
|
loader.stream.Skip2(1);
|
|
paragraph = loader.ReadParagraph(worksheet.model);
|
|
elements.push(paragraph);
|
|
}
|
|
return elements;
|
|
},
|
|
_pasteInShape: function (worksheet, node, onlyFromLocalStorage, targetDocContent) {
|
|
targetDocContent.DrawingDocument.m_oLogicDocument = null;
|
|
var oPasteProcessor = new PasteProcessor({
|
|
WordControl: {
|
|
m_oLogicDocument: targetDocContent
|
|
},
|
|
FontLoader: {}
|
|
},
|
|
false, false, true, true);
|
|
oPasteProcessor.map_font_index = this.Api.FontLoader.map_font_index;
|
|
oPasteProcessor.bIsDoublePx = false;
|
|
var newFonts;
|
|
if (onlyFromLocalStorage) {
|
|
node = this.element;
|
|
}
|
|
if (targetDocContent && targetDocContent.Parent && targetDocContent.Parent.parent && targetDocContent.Parent.parent.chart) {
|
|
var changeTag = $(node).find("a");
|
|
this._changeHtmlTag(changeTag);
|
|
}
|
|
oPasteProcessor._Prepeare_recursive(node, true, true);
|
|
oPasteProcessor.aContent = [];
|
|
newFonts = this._convertFonts(oPasteProcessor.oFonts);
|
|
History.Create_NewPoint();
|
|
History.StartTransaction();
|
|
oPasteProcessor._Execute(node, {},
|
|
true, true, false);
|
|
if (!oPasteProcessor.aContent || !oPasteProcessor.aContent.length) {
|
|
History.EndTransaction();
|
|
return false;
|
|
}
|
|
var targetContent = worksheet.objectRender.controller.getTargetDocContent(true);
|
|
targetContent.Remove(1, true, true);
|
|
worksheet._loadFonts(newFonts, function () {
|
|
oPasteProcessor.InsertInPlace(targetContent, oPasteProcessor.aContent);
|
|
worksheet.objectRender.controller.startRecalculate();
|
|
worksheet.objectRender.controller.cursorMoveRight(false, false);
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
History.EndTransaction();
|
|
});
|
|
return true;
|
|
},
|
|
_changeHtmlTag: function (arr) {
|
|
var oldElem, value, style, bold, underline, italic;
|
|
for (var i = 0; i < arr.length; i++) {
|
|
oldElem = arr[i];
|
|
value = oldElem.innerText;
|
|
underline = "none";
|
|
if (oldElem.style.textDecoration && oldElem.style.textDecoration != "") {
|
|
underline = oldElem.style.textDecoration;
|
|
}
|
|
italic = "normal";
|
|
if (oldElem.style.textDecoration && oldElem.style.textDecoration != "") {
|
|
italic = oldElem.style.fontStyle;
|
|
}
|
|
bold = "normal";
|
|
if (oldElem.style.fontWeight && oldElem.style.fontWeight != "") {
|
|
bold = oldElem.style.fontWeight;
|
|
}
|
|
style = ' style = "text-decoration:' + underline + ";" + "font-style:" + italic + ";" + "font-weight:" + bold + ";" + '"';
|
|
$(oldElem).replaceWith("<span" + style + ">" + value + "</span>");
|
|
}
|
|
},
|
|
_convertFonts: function (oFonts) {
|
|
var newFonts = {};
|
|
var fontName;
|
|
for (var i in oFonts) {
|
|
fontName = oFonts[i].Name;
|
|
newFonts[fontName] = 1;
|
|
}
|
|
return newFonts;
|
|
},
|
|
_editorPasteExec: function (worksheet, node, isText, onlyFromLocalStorage) {
|
|
if (node == undefined) {
|
|
return;
|
|
}
|
|
var aResult, binaryResult, pasteFragment = node,
|
|
t = this,
|
|
localStorageResult;
|
|
if (isOnlyLocalBufferSafari && navigator.userAgent.toLowerCase().indexOf("safari") > -1 && navigator.userAgent.toLowerCase().indexOf("mac")) {
|
|
onlyFromLocalStorage = true;
|
|
}
|
|
if (onlyFromLocalStorage) {
|
|
onlyFromLocalStorage = null;
|
|
node = this.element;
|
|
pasteFragment = node;
|
|
}
|
|
var isIntoShape = worksheet.objectRender.controller.getTargetDocContent();
|
|
if (isIntoShape) {
|
|
var resultPasteInShape = this._pasteInShape(worksheet, node, onlyFromLocalStorage, isIntoShape);
|
|
if (resultPasteInShape == true) {
|
|
return;
|
|
}
|
|
}
|
|
if (copyPasteUseBinary) {
|
|
this.activeRange = worksheet.activeRange.clone(true);
|
|
binaryResult = this._pasteFromBinary(worksheet, node, onlyFromLocalStorage, isIntoShape);
|
|
if (binaryResult === true) {
|
|
return;
|
|
} else {
|
|
if (binaryResult !== false && binaryResult != undefined) {
|
|
pasteFragment = binaryResult;
|
|
node = binaryResult;
|
|
}
|
|
}
|
|
}
|
|
this.activeRange = worksheet.activeRange.clone(true);
|
|
aResult = this._parseHtml(pasteFragment, node, worksheet, isText);
|
|
if (aResult) {
|
|
this._correctImageUrl(aResult, worksheet);
|
|
}
|
|
},
|
|
_correctImageUrl: function (aResult, worksheet) {
|
|
var api = asc["editor"];
|
|
var aImagesToDownload = [];
|
|
var t = this;
|
|
var addImages = aResult.addImages ? aResult.addImages : [];
|
|
for (var k = 0; k < addImages.length; k++) {
|
|
var src = addImages[k].tag.src;
|
|
if (false == (0 == src.indexOf(api.documentUrl) || 0 == src.indexOf(api.documentUrl))) {
|
|
aImagesToDownload.push(src);
|
|
}
|
|
}
|
|
if (aImagesToDownload.length > 0) {
|
|
var rData = {
|
|
"id": api.documentId,
|
|
"c": "imgurls",
|
|
"vkey": api.documentVKey,
|
|
"data": JSON.stringify(aImagesToDownload)
|
|
};
|
|
api._asc_sendCommand(function (incomeObject) {
|
|
if (incomeObject && "imgurls" == incomeObject.type) {
|
|
var oFromTo = JSON.parse(incomeObject.data);
|
|
var nC, height, width;
|
|
for (var i = 0, length = addImages.length; i < length; ++i) {
|
|
var sTo = oFromTo[aResult.addImages[i].tag.src];
|
|
if (sTo) {
|
|
if (aResult.addImages[i]) {
|
|
height = aResult.addImages[i].tag.height;
|
|
width = aResult.addImages[i].tag.width;
|
|
aResult.addImages[i].tag = {
|
|
height: height,
|
|
width: width,
|
|
src: sTo
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
t._pasteResult(aResult, worksheet);
|
|
},
|
|
rData);
|
|
} else {
|
|
t._pasteResult(aResult, worksheet);
|
|
}
|
|
},
|
|
_pasteResult: function (aResult, worksheet) {
|
|
if (aResult && !(aResult.onlyImages && window["Asc"]["editor"] && window["Asc"]["editor"].isChartEditor)) {
|
|
worksheet.setSelectionInfo("paste", aResult, this);
|
|
}
|
|
window.GlobalPasteFlagCounter = 0;
|
|
window.GlobalPasteFlag = false;
|
|
},
|
|
_parseHtml: function (pasteFragment, node, worksheet, isText) {
|
|
var cellCountAll = [],
|
|
rowSpanPlus = 0,
|
|
tableRowCount = 0,
|
|
l = 0,
|
|
n = 0,
|
|
s = 0,
|
|
countEmptyRow = 0,
|
|
rowCount = 0,
|
|
arrTags = [],
|
|
t = this,
|
|
aResult = [];
|
|
var range = worksheet.activeRange.clone(true);
|
|
var testFragment = $.extend(true, {},
|
|
node);
|
|
var is_chrome = AscBrowser.isChrome;
|
|
$(testFragment).children("br").remove();
|
|
if (testFragment.children.length == 0) {
|
|
var allChild = node.childNodes;
|
|
var sHtml = "";
|
|
for (n = 0; n < allChild.length; ++n) {
|
|
text = allChild[n].nodeValue.replace(/(\r|\t|\n)/g, "");
|
|
if (allChild[n].nodeName.toLowerCase() == "#text" && text != "") {
|
|
sHtml += "<p><span style='font-family:Calibri;font-size:11pt;white-space:nowrap'>" + text + "</span></p>";
|
|
}
|
|
}
|
|
if (sHtml == "") {
|
|
return;
|
|
}
|
|
pasteFragment.innerHTML = sHtml;
|
|
if (!is_chrome) {
|
|
isText = true;
|
|
}
|
|
}
|
|
var mainChildrens = t._getSignTags(pasteFragment.childNodes);
|
|
var countChild = mainChildrens.length;
|
|
var arrMax = [],
|
|
findTable;
|
|
for (n = 0; n < $(pasteFragment).find("table").length; ++n) {
|
|
findTable = $($(pasteFragment).find("table")[n]).find("tr");
|
|
if (findTable && findTable[0]) {
|
|
arrMax[n] = findTable[0].children.length;
|
|
}
|
|
}
|
|
if (arrMax.length != 0) {
|
|
var max = Math.max.apply(Math, arrMax);
|
|
if (max != 0) {
|
|
range.c2 = range.c2 + max - 1;
|
|
}
|
|
}
|
|
this.fontsNew = {};
|
|
if (null != $(pasteFragment).find("table") && 1 == countChild && pasteFragment.children[0] != undefined && pasteFragment.children[0].children[0] != undefined && pasteFragment.children[0].children[0].nodeName.toLowerCase() == "table") {
|
|
pasteFragment = pasteFragment.children[0];
|
|
}
|
|
var countTrueTags = t._countTags(mainChildrens, arrTags);
|
|
if (countTrueTags.length != 0 && node.length != countTrueTags.length && node.children[0] != countTrueTags[0]) {
|
|
var p = document.createElement("p");
|
|
$(p).append(countTrueTags);
|
|
pasteFragment = p;
|
|
countChild = p.childNodes.length;
|
|
mainChildrens = pasteFragment.childNodes;
|
|
}
|
|
if (!mainChildrens) {
|
|
countChild = pasteFragment.children.length;
|
|
mainChildrens = pasteFragment.children;
|
|
}
|
|
if (mainChildrens && mainChildrens.length == 1 && mainChildrens[0].nodeName.toLowerCase() == "b") {
|
|
mainChildrens = mainChildrens[0].children;
|
|
}
|
|
var onlyImages = null;
|
|
var addImages = null;
|
|
var imCount = 0;
|
|
for (var r = range.r1; r - range.r1 < countChild; ++r) {
|
|
var firstRow = mainChildrens[r - range.r1 - countEmptyRow];
|
|
if (firstRow.nodeName.toLowerCase() == "br") {
|
|
r++;
|
|
}
|
|
aResult[r + tableRowCount] = [];
|
|
var tag = mainChildrens[r - range.r1 - countEmptyRow];
|
|
if (pasteFragment.children.length == 1 && pasteFragment.children[0].nodeName.toLowerCase() == "table") {
|
|
aResult.isOneTable = true;
|
|
}
|
|
for (var c = range.c1; c <= range.c2; ++c) {
|
|
if ((tag.nodeName.toLowerCase() == "div" || tag.nodeName.toLowerCase() == "p" || tag.nodeName.toLowerCase() == "h" || tag.nodeName.toLowerCase().search("h") != -1) && c == range.c1 || tag.nodeName.toLowerCase() == "li") {
|
|
var prevSib = mainChildrens[r - range.r1 - countEmptyRow - 1];
|
|
if (prevSib) {
|
|
if (prevSib.nodeName.toLowerCase() == "table") {
|
|
var emtyTag = document.createElement("p");
|
|
aResult[r + tableRowCount][c] = t._getArray(emtyTag, isText);
|
|
countChild++;
|
|
r++;
|
|
countEmptyRow++;
|
|
aResult[r + tableRowCount] = [];
|
|
}
|
|
}
|
|
tag.innerHTML = tag.innerHTML.replace(/(\n)/g, "");
|
|
aResult[r + tableRowCount][c] = t._getArray(tag, isText);
|
|
c = range.c2;
|
|
cellCountAll[s] = 1;
|
|
s++;
|
|
onlyImages = false;
|
|
} else {
|
|
if (tag.nodeName.toLowerCase() == "#text") {
|
|
var prevSib = $(tag).prev();
|
|
if (prevSib.length != 0) {
|
|
if (prevSib[prevSib.length - 1].nodeName.toLowerCase() == "p" || prevSib[prevSib.length - 1].nodeName.toLowerCase() == "table") {
|
|
var emtyTag = document.createElement("p");
|
|
aResult[r + tableRowCount][c] = t._getArray(emtyTag, isText);
|
|
countChild++;
|
|
r++;
|
|
countEmptyRow++;
|
|
aResult[r + tableRowCount] = [];
|
|
}
|
|
}
|
|
var span = document.createElement("p");
|
|
$(span).append(tag);
|
|
aResult[r + tableRowCount][c] = t._getArray(span, isText);
|
|
c = range.c2;
|
|
cellCountAll[s] = 1;
|
|
s++;
|
|
onlyImages = false;
|
|
} else {
|
|
if (tag.nodeName.toLowerCase() == "span" || tag.nodeName.toLowerCase() == "a" || tag.nodeName.toLowerCase() == "form") {
|
|
aResult[r + tableRowCount][c] = t._getArray(tag, isText);
|
|
cellCountAll[s] = 1;
|
|
c = range.c2;
|
|
s++;
|
|
onlyImages = false;
|
|
} else {
|
|
if (tag.nodeName.toLowerCase() == "table") {
|
|
var tableBody = tag.getElementsByTagName("tbody")[0];
|
|
if (!tableBody) {
|
|
continue;
|
|
}
|
|
var startNum = r + tableRowCount;
|
|
var n = 0;
|
|
var arrCount = [];
|
|
var cellCount = 0;
|
|
for (var i = 0; i < tableBody.children.length; ++i) {
|
|
arrCount[i] = 0;
|
|
for (var j = 0; j < tableBody.children[i].children.length; ++j) {
|
|
arrCount[i] += tableBody.children[i].children[j].colSpan;
|
|
}
|
|
}
|
|
cellCount = Math.max.apply({},
|
|
arrCount);
|
|
for (var i = 0; i < tableBody.children.length; ++i) {
|
|
if (tableBody.children[i].children[0] != undefined && (tableBody.children[i].children.length == cellCount || tableBody.children[i].children[0].colSpan == cellCount)) {
|
|
rowCount += tableBody.children[i].children[0].rowSpan;
|
|
}
|
|
}
|
|
aResult.rowCount = tag.rows.length;
|
|
if (tag.rows[0].children[0] != undefined && rowCount > tag.rows.length) {
|
|
aResult.rowCount = rowCount;
|
|
}
|
|
var mergeArr = [];
|
|
if (tableBody.children.length == 1 && tableBody.children[0].children.length == 1 && tableBody.children[0].children[0].rowSpan != "" && tableBody.children[0].children[0].rowSpan != null) {
|
|
rowSpanPlus = tableBody.children[0].children[0].rowSpan - 1;
|
|
}
|
|
cellCountAll[s] = cellCount;
|
|
s++;
|
|
for (var tR = startNum; tR < tableBody.children.length + startNum; ++tR) {
|
|
aResult[tR] = [];
|
|
var cNew = 0;
|
|
for (var tC = range.c1; tC < range.c1 + cellCount; ++tC) {
|
|
if (0 != mergeArr.length) {
|
|
for (var k = 0; k < mergeArr.length; ++k) {
|
|
if (tC >= mergeArr[k].c1 && tC <= mergeArr[k].c2 && tR >= mergeArr[k].r1 && tR <= mergeArr[k].r2) {
|
|
break;
|
|
} else {
|
|
if (k == mergeArr.length - 1) {
|
|
var _tBody = tableBody.children[tR - startNum].children[cNew];
|
|
var findImg = $(_tBody).find("img");
|
|
if (findImg.length != 0) {
|
|
for (var imgCol = 0; imgCol < findImg.length; imgCol++) {
|
|
if (addImages == null) {
|
|
addImages = [];
|
|
}
|
|
var curCell = {
|
|
col: tC,
|
|
row: tR + imgCol
|
|
};
|
|
var tag = $(_tBody).find("img")[imgCol];
|
|
addImages[imCount] = {
|
|
curCell: curCell,
|
|
tag: tag
|
|
};
|
|
imCount++;
|
|
}
|
|
}
|
|
if (_tBody == undefined) {
|
|
_tBody = document.createElement("td");
|
|
}
|
|
aResult[tR][tC] = t._getArray(_tBody, isText);
|
|
if (undefined != _tBody && (_tBody.colSpan > 1 || _tBody.rowSpan > 1)) {
|
|
mergeArr[n++] = {
|
|
r1: tR,
|
|
r2: tR + _tBody.rowSpan - 1,
|
|
c1: tC,
|
|
c2: tC + _tBody.colSpan - 1
|
|
};
|
|
}
|
|
cNew++;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var _tBody = tableBody.children[tR - startNum].children[cNew];
|
|
var findImg = $(_tBody).find("img");
|
|
if (findImg.length != 0) {
|
|
for (var imgCol = 0; imgCol < findImg.length; imgCol++) {
|
|
if (addImages == null) {
|
|
addImages = [];
|
|
}
|
|
var curCell = {
|
|
col: tC,
|
|
row: tR + imgCol
|
|
};
|
|
var tag = $(_tBody).find("img")[imgCol];
|
|
addImages[imCount] = {
|
|
curCell: curCell,
|
|
tag: tag
|
|
};
|
|
imCount++;
|
|
}
|
|
}
|
|
aResult[tR][tC] = t._getArray(_tBody, isText);
|
|
if (undefined != _tBody && (_tBody.colSpan > 1 || _tBody.rowSpan > 1)) {
|
|
mergeArr[n++] = {
|
|
r1: tR,
|
|
r2: tR + _tBody.rowSpan - 1,
|
|
c1: tC,
|
|
c2: tC + _tBody.colSpan - 1
|
|
};
|
|
}
|
|
cNew++;
|
|
}
|
|
}
|
|
}
|
|
if (countChild == 1) {
|
|
r = tR;
|
|
} else {
|
|
tableRowCount += tableBody.children.length - 1;
|
|
}
|
|
break;
|
|
onlyImages = false;
|
|
} else {
|
|
if (tag.nodeName.toLowerCase() == "img") {
|
|
var curCell = {
|
|
col: c,
|
|
row: r + tableRowCount
|
|
};
|
|
if (addImages == null) {
|
|
addImages = [];
|
|
}
|
|
addImages[imCount] = {
|
|
curCell: curCell,
|
|
tag: tag
|
|
};
|
|
imCount++;
|
|
c = range.c2;
|
|
if (onlyImages !== false) {
|
|
onlyImages = true;
|
|
}
|
|
} else {
|
|
var textArr;
|
|
if ((mainChildrens[r - range.r1] == undefined || mainChildrens[r - range.r1].innerText == undefined || mainChildrens[r - range.r1].innerText == null) && ($(mainChildrens[r - range.r1]).text() == undefined || $(mainChildrens[r - range.r1]).text() == null)) {
|
|
textArr = [];
|
|
textArr[0] = "";
|
|
} else {
|
|
var text = tag.innerText;
|
|
if (text == undefined) {
|
|
text = $(tag).text();
|
|
}
|
|
textArr = text.split("\n");
|
|
}
|
|
for (k = 0; k < textArr.length; ++k) {
|
|
aResult[r + tableRowCount] = [];
|
|
var newP = document.createElement("p");
|
|
var newSpan = document.createElement("span");
|
|
$(newP).append(newSpan);
|
|
newSpan.innerText = textArr[k];
|
|
$(newSpan).text(textArr[k]);
|
|
aResult[r + tableRowCount][c] = t._getArray(newP, isText);
|
|
if (textArr.length != 1 && (textArr.length - 1) != k) {
|
|
r++;
|
|
}
|
|
}
|
|
c = range.c2;
|
|
cellCountAll[s] = 1;
|
|
s++;
|
|
onlyImages = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (cellCountAll.length == 0) {
|
|
aResult.cellCount = 0;
|
|
} else {
|
|
aResult.cellCount = Math.max.apply(Math, cellCountAll);
|
|
}
|
|
aResult.rowSpanSpCount = rowSpanPlus;
|
|
var api = window["Asc"]["editor"];
|
|
if (!api || (api && !api.isChartEditor)) {
|
|
aResult.addImages = addImages;
|
|
}
|
|
aResult.fontsNew = t.fontsNew;
|
|
aResult.onlyImages = onlyImages;
|
|
return aResult;
|
|
},
|
|
ReadFromBinaryWord: function (sBase64, worksheet) {
|
|
History.TurnOff();
|
|
var oTempDrawingDocument = worksheet.model.DrawingDocument;
|
|
var newCDocument = new CDocument(oTempDrawingDocument);
|
|
newCDocument.bFromDocument = true;
|
|
newCDocument.theme = this.Api.wbModel.theme;
|
|
oTempDrawingDocument.m_oLogicDocument = newCDocument;
|
|
var oOldEditor = undefined;
|
|
if ("undefined" != typeof editor) {
|
|
oOldEditor = editor;
|
|
}
|
|
editor = {
|
|
isDocumentEditor: true,
|
|
WordControl: {
|
|
m_oLogicDocument: newCDocument
|
|
}
|
|
};
|
|
window.global_pptx_content_loader.Clear();
|
|
window.global_pptx_content_loader.Start_UseFullUrl();
|
|
var openParams = {
|
|
checkFileSize: false,
|
|
charCount: 0,
|
|
parCount: 0
|
|
};
|
|
var oBinaryFileReader = new BinaryFileReader(newCDocument, openParams);
|
|
var oRes = oBinaryFileReader.ReadFromString(sBase64);
|
|
History.TurnOn();
|
|
editor = oOldEditor;
|
|
window.global_pptx_content_loader.End_UseFullUrl();
|
|
return oBinaryFileReader.oReadResult;
|
|
},
|
|
_isEqualText: function (node, table) {
|
|
var t = this;
|
|
if (undefined == t.copyText || node == undefined) {
|
|
return false;
|
|
}
|
|
if (t.copyText.isImage) {
|
|
return false;
|
|
}
|
|
if (t.copyText.text && AscBrowser.isOpera && node.text.replace(/(\r|\t|\n| |\s)/g, "") == t.copyText.text.replace(/(\r|\t|\n| |\s)/g, "")) {
|
|
return true;
|
|
}
|
|
if (AscBrowser.isIE && t.copyText.text != undefined && node.text != undefined && node.text == "" && t.copyText.isImage) {
|
|
return true;
|
|
}
|
|
if (t.copyText.text != undefined && node.text != undefined && node.text == t.copyText.text) {
|
|
if (t.copyText.isImage) {
|
|
return true;
|
|
} else {
|
|
if (node.rows && t.copyText.rows && node.rows == t.copyText.rows && node.cols && t.copyText.cols && node.cols == t.copyText.cols) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
if (table && table.children[0] && node.text.replace(/(\r|\t|\n| |\s)/g, "") == t.copyText.text.replace(/(\r|\t|\n| |\s)/g, "")) {
|
|
if (table.children[0].getAttribute("class") != null) {
|
|
var cL = table.children[0].getAttribute("class").split(" ");
|
|
for (var i = 0; i < cL.length; i++) {
|
|
if (cL[i].indexOf("pasteFragment_") > -1) {
|
|
if (cL[i] == t.copyText.pasteFragment) {
|
|
return true;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
_selectElement: function (callback, copyCellValue) {
|
|
var t = this,
|
|
selection, rangeToSelect, overflowBody, firstWidth;
|
|
overflowBody = document.body.style.overflow;
|
|
if (copyCellValue) {
|
|
firstWidth = t.element.style.width;
|
|
t.element.style.width = document.body.offsetWidth - 1 + "px";
|
|
t.element.focus();
|
|
} else {
|
|
document.body.style.overflow = "hidden";
|
|
}
|
|
this._startCopyOrPaste();
|
|
if (window.getSelection) {
|
|
selection = window.getSelection();
|
|
rangeToSelect = doc.createRange();
|
|
if (AscBrowser.isGecko) {
|
|
t.element.appendChild(doc.createTextNode("\xa0"));
|
|
t.element.insertBefore(doc.createTextNode("\xa0"), t.element.firstChild);
|
|
rangeToSelect.setStartAfter(t.element.firstChild);
|
|
rangeToSelect.setEndBefore(t.element.lastChild);
|
|
} else {
|
|
rangeToSelect.selectNodeContents(t.element);
|
|
}
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
} else {
|
|
if (doc.body.createTextRange) {
|
|
rangeToSelect = doc.body.createTextRange();
|
|
rangeToSelect.moveToElementText(t.element);
|
|
rangeToSelect.select();
|
|
}
|
|
}
|
|
var time_interval = 200;
|
|
window.setTimeout(function () {
|
|
t.element.style.display = ELEMENT_DISPAY_STYLE2;
|
|
doc.body.style.MozUserSelect = "none";
|
|
doc.body.style["-khtml-user-select"] = "none";
|
|
doc.body.style["-o-user-select"] = "none";
|
|
doc.body.style["user-select"] = "none";
|
|
doc.body.style["-webkit-user-select"] = "none";
|
|
t._endCopyOrPaste();
|
|
t.element.style.MozUserSelect = "none";
|
|
if (firstWidth) {
|
|
t.element.style.width = firstWidth;
|
|
}
|
|
document.body.style.overflow = overflowBody;
|
|
if (callback && callback.call) {
|
|
callback();
|
|
}
|
|
},
|
|
time_interval);
|
|
},
|
|
_makeNodesFromCellValue: function (val, defFN, defFS, isQPrefix, isFormat, cell) {
|
|
var i, res, span, f;
|
|
function getTextDecoration(format) {
|
|
var res = [];
|
|
if (Asc.EUnderline.underlineNone !== format.u) {
|
|
res.push("underline");
|
|
}
|
|
if (format.s) {
|
|
res.push("line-through");
|
|
}
|
|
return res.length > 0 ? res.join(",") : "";
|
|
}
|
|
var hyperlink;
|
|
if (cell) {
|
|
hyperlink = cell.getHyperlink();
|
|
}
|
|
for (res = [], i = 0; i < val.length; ++i) {
|
|
if (val[i] && val[i].format && val[i].format.skip) {
|
|
continue;
|
|
}
|
|
if (cell == undefined || (cell != undefined && (hyperlink == null || (hyperlink != null && hyperlink.getLocation() != null)))) {
|
|
span = doc.createElement("SPAN");
|
|
} else {
|
|
span = doc.createElement("A");
|
|
if (hyperlink.Hyperlink != null) {
|
|
span.href = hyperlink.Hyperlink;
|
|
} else {
|
|
if (hyperlink.getLocation() != null) {
|
|
span.href = "#" + hyperlink.getLocation();
|
|
}
|
|
}
|
|
if (hyperlink.Tooltip != null) {
|
|
span.title = hyperlink.Tooltip;
|
|
}
|
|
}
|
|
if (val[i].sFormula) {
|
|
span.textContent = val[i].text;
|
|
$(span).addClass("cellFrom_" + val[i].sId + "textFormula_" + "=" + val[i].sFormula);
|
|
} else {
|
|
span.textContent = val[i].text;
|
|
if (isQPrefix) {
|
|
$(span).addClass("qPrefix");
|
|
} else {
|
|
if (isFormat && isFormat.f && isFormat.wFormat) {
|
|
var text = "";
|
|
for (var k = 0; k < val.length; ++k) {
|
|
text += val[k].text;
|
|
}
|
|
span.textContent = text;
|
|
i = val.length - 1;
|
|
}
|
|
}
|
|
}
|
|
f = val[i].format;
|
|
if (f.c) {
|
|
if (f.c && f.c.rgb) {
|
|
span.style.color = number2color(f.c.rgb);
|
|
} else {
|
|
span.style.color = number2color(f.c);
|
|
}
|
|
}
|
|
if (f.fn !== defFN) {
|
|
span.style.fontFamily = f.fn;
|
|
}
|
|
if (f.fs !== defFS) {
|
|
span.style.fontSize = f.fs + "pt";
|
|
}
|
|
if (f.b) {
|
|
span.style.fontWeight = "bold";
|
|
}
|
|
if (f.i) {
|
|
span.style.fontStyle = "italic";
|
|
}
|
|
span.style.textDecoration = getTextDecoration(f);
|
|
span.style.verticalAlign = f.va === "subscript" ? "sub" : f.va === "superscript" ? "super" : "baseline";
|
|
span.innerHTML = span.innerHTML.replace(/\n/g, "<br>");
|
|
res.push(span);
|
|
}
|
|
return res;
|
|
},
|
|
_addValueToLocalStrg: function (value) {
|
|
var t = this;
|
|
var isNull = 0;
|
|
if (!value || !value[isNull]) {
|
|
return;
|
|
}
|
|
t.lStorage = [];
|
|
t.lStorage.fromRow = isNull;
|
|
t.lStorage.fromCol = isNull;
|
|
t.lStorageText = value[isNull].text;
|
|
var val2 = [];
|
|
val2[isNull] = {
|
|
text: value[isNull].text,
|
|
format: value[isNull].format
|
|
};
|
|
t.lStorage[isNull] = [];
|
|
t.lStorage[isNull][isNull] = {
|
|
value2: val2,
|
|
wrap: true,
|
|
format: false
|
|
};
|
|
},
|
|
_makeTableNode: function (range, worksheet, isCut, isIntoShape) {
|
|
var fn = range.worksheet.workbook.getDefaultFont();
|
|
var fs = range.worksheet.workbook.getDefaultSize();
|
|
var bbox = range.getBBox0();
|
|
var merged = [];
|
|
var t = this;
|
|
var table, tr, td, cell, j, row, col, mbbox, h, w, b;
|
|
var objectRender = worksheet.objectRender;
|
|
function skipMerged() {
|
|
var m = merged.filter(function (e) {
|
|
return row >= e.r1 && row <= e.r2 && col >= e.c1 && col <= e.c2;
|
|
});
|
|
if (m.length > 0) {
|
|
col = m[0].c2;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function makeBorder(border) {
|
|
if (!border || border.s === c_oAscBorderStyles.None) {
|
|
return "";
|
|
}
|
|
var style = "";
|
|
switch (border.s) {
|
|
case c_oAscBorderStyles.Thin:
|
|
style = "solid";
|
|
break;
|
|
case c_oAscBorderStyles.Medium:
|
|
style = "solid";
|
|
break;
|
|
case c_oAscBorderStyles.Thick:
|
|
style = "solid";
|
|
break;
|
|
case c_oAscBorderStyles.DashDot:
|
|
case c_oAscBorderStyles.DashDotDot:
|
|
case c_oAscBorderStyles.Dashed:
|
|
style = "dashed";
|
|
break;
|
|
case c_oAscBorderStyles.Double:
|
|
style = "double";
|
|
break;
|
|
case c_oAscBorderStyles.Hair:
|
|
case c_oAscBorderStyles.Dotted:
|
|
style = "dotted";
|
|
break;
|
|
case c_oAscBorderStyles.MediumDashDot:
|
|
case c_oAscBorderStyles.MediumDashDotDot:
|
|
case c_oAscBorderStyles.MediumDashed:
|
|
case c_oAscBorderStyles.SlantDashDot:
|
|
style = "dashed";
|
|
break;
|
|
}
|
|
return border.w + "px " + style + " " + number2color(border.getRgbOrNull());
|
|
}
|
|
table = doc.createElement("TABLE");
|
|
table.cellPadding = "0";
|
|
table.cellSpacing = "0";
|
|
table.style.borderCollapse = "collapse";
|
|
table.style.fontFamily = fn;
|
|
table.style.fontSize = fs + "pt";
|
|
table.style.color = "#000";
|
|
table.style.backgroundColor = "transparent";
|
|
var isSelectedImages = t._getSelectedDrawingIndex(worksheet);
|
|
var isImage = false;
|
|
var isChart = false;
|
|
if (isIntoShape) {
|
|
var CopyProcessor = new Asc.CopyProcessor();
|
|
var divContent = document.createElement("div");
|
|
CopyProcessor.CopyDocument(divContent, isIntoShape, true);
|
|
var htmlInShape = "";
|
|
if (divContent) {
|
|
htmlInShape = divContent;
|
|
}
|
|
t.lStorageText = this._getTextFromHtml(htmlInShape);
|
|
return htmlInShape;
|
|
} else {
|
|
if (isSelectedImages && isSelectedImages != -1) {
|
|
if (this.Api && this.Api.isChartEditor) {
|
|
return false;
|
|
}
|
|
objectRender.preCopy();
|
|
var nLoc = 0;
|
|
var table = document.createElement("span");
|
|
var drawings = worksheet.model.Drawings;
|
|
t.lStorage = [];
|
|
for (j = 0; j < isSelectedImages.length; ++j) {
|
|
var image = drawings[isSelectedImages[j]];
|
|
var cloneImg = objectRender.cloneDrawingObject(image);
|
|
var curImage = new Image();
|
|
var url;
|
|
if (cloneImg.graphicObject.isChart() && cloneImg.graphicObject.brush.fill.RasterImageId) {
|
|
url = cloneImg.graphicObject.brush.fill.RasterImageId;
|
|
} else {
|
|
if (cloneImg.graphicObject && (cloneImg.graphicObject.isShape() || cloneImg.graphicObject.isImage() || cloneImg.graphicObject.isGroup() || cloneImg.graphicObject.isChart())) {
|
|
var cMemory = new CMemory();
|
|
var altAttr = null;
|
|
var isImage = cloneImg.graphicObject.isImage();
|
|
var imageUrl;
|
|
if (isImage) {
|
|
imageUrl = cloneImg.graphicObject.getImageUrl();
|
|
}
|
|
if (isImage && imageUrl) {
|
|
url = getFullImageSrc(imageUrl);
|
|
} else {
|
|
url = cloneImg.graphicObject.getBase64Img();
|
|
}
|
|
curImage.alt = altAttr;
|
|
} else {
|
|
url = cloneImg.image.src;
|
|
}
|
|
}
|
|
curImage.src = url;
|
|
curImage.width = cloneImg.getWidthFromTo();
|
|
curImage.height = cloneImg.getHeightFromTo();
|
|
if (image.guid) {
|
|
curImage.name = image.guid;
|
|
}
|
|
table.appendChild(curImage);
|
|
t.lStorage[nLoc] = {};
|
|
t.lStorage[nLoc].image = curImage;
|
|
t.lStorage[nLoc].fromCol = cloneImg.from.col;
|
|
t.lStorage[nLoc].fromRow = cloneImg.from.row;
|
|
nLoc++;
|
|
isImage = true;
|
|
t._addLocalStorage(isImage, isChart, range.worksheet.getCell3(row, col), bbox, image.from.row, image.from.col, worksheet, isCut);
|
|
}
|
|
} else {
|
|
if (activateLocalStorage || copyPasteUseBinary) {
|
|
var localStText = "";
|
|
for (row = bbox.r1; row <= bbox.r2; ++row) {
|
|
if (row != bbox.r1) {
|
|
localStText += "\n";
|
|
}
|
|
for (col = bbox.c1; col <= bbox.c2; ++col) {
|
|
if (col != bbox.c1) {
|
|
localStText += " ";
|
|
}
|
|
var currentRange = range.worksheet.getCell3(row, col);
|
|
var textRange = currentRange.getValue();
|
|
if (textRange == "") {
|
|
localStText += "\t";
|
|
} else {
|
|
localStText += textRange;
|
|
}
|
|
if (!copyPasteUseBinary) {
|
|
t._addLocalStorage(false, false, currentRange, bbox, row, col, worksheet, isCut);
|
|
}
|
|
}
|
|
}
|
|
t.lStorageText = localStText;
|
|
}
|
|
for (row = bbox.r1; row <= bbox.r2; ++row) {
|
|
tr = doc.createElement("TR");
|
|
h = range.worksheet.getRowHeight(row);
|
|
if (h > 0) {
|
|
tr.style.height = h + "pt";
|
|
}
|
|
for (col = bbox.c1; col <= bbox.c2; ++col) {
|
|
if (skipMerged()) {
|
|
continue;
|
|
}
|
|
cell = range.worksheet.getCell3(row, col);
|
|
td = doc.createElement("TD");
|
|
mbbox = cell.hasMerged();
|
|
if (mbbox) {
|
|
merged.push(mbbox);
|
|
td.colSpan = mbbox.c2 - mbbox.c1 + 1;
|
|
td.rowSpan = mbbox.r2 - mbbox.r1 + 1;
|
|
for (w = 0, j = mbbox.c1; j <= mbbox.c2; ++j) {
|
|
w += worksheet.getColumnWidth(j, 1);
|
|
}
|
|
td.style.width = w + "pt";
|
|
} else {
|
|
td.style.width = worksheet.getColumnWidth(col, 1) + "pt";
|
|
}
|
|
if (!cell.getWrap()) {
|
|
td.style.whiteSpace = "nowrap";
|
|
} else {
|
|
td.style.whiteSpace = "normal";
|
|
}
|
|
if (cell.getAlignHorizontal() != "none") {
|
|
td.style.textAlign = cell.getAlignHorizontal();
|
|
}
|
|
td.style.verticalAlign = cell.getAlignVertical();
|
|
if (cell.getAlignVertical() == "center") {
|
|
td.style.verticalAlign = "middle";
|
|
}
|
|
b = cell.getBorderFull();
|
|
if (mbbox) {
|
|
var cellMergeFinish = range.worksheet.getCell3(mbbox.r2, mbbox.c2);
|
|
var borderMergeCell = cellMergeFinish.getBorderFull();
|
|
td.style.borderRight = makeBorder(borderMergeCell.r);
|
|
td.style.borderBottom = makeBorder(borderMergeCell.b);
|
|
} else {
|
|
td.style.borderRight = makeBorder(b.r);
|
|
td.style.borderBottom = makeBorder(b.b);
|
|
}
|
|
td.style.borderLeft = makeBorder(b.l);
|
|
td.style.borderTop = makeBorder(b.t);
|
|
var isFormat = {};
|
|
isFormat.f = false;
|
|
isFormat.wFormat = false;
|
|
if (cell.getNumFormat() != null && cell.getNumFormat() != undefined && cell.getNumFormat().oTextFormat.formatString != "" && cell.getNumFormat().oTextFormat.formatString != null && (cell.getType() == "n" || cell.getType() == null || cell.getType() == 0) && cell.getNumFormatStr() != "General") {
|
|
var formatStr = t._encode(cell.getNumFormatStr());
|
|
var valStr = t._encode(cell.getValueWithoutFormat());
|
|
$(td).addClass("nFormat" + formatStr + ";" + valStr);
|
|
isFormat.f = cell.getValueWithoutFormat();
|
|
isFormat.wFormat = true;
|
|
}
|
|
b = cell.getFill();
|
|
if (b != null) {
|
|
td.style.backgroundColor = number2color(b.getRgb());
|
|
}
|
|
var isQPrefix = cell.getQuotePrefix();
|
|
this._makeNodesFromCellValue(cell.getValue2(), fn, fs, isQPrefix, isFormat, cell).forEach(function (node) {
|
|
td.appendChild(node);
|
|
});
|
|
tr.appendChild(td);
|
|
}
|
|
table.appendChild(tr);
|
|
}
|
|
}
|
|
}
|
|
return table;
|
|
},
|
|
_getTextFromHtml: function (html) {
|
|
var text = "";
|
|
for (var i = 0; i < html.children.length; i++) {
|
|
if (html.children[i].nodeName.toLowerCase() == "p" && i != 0) {
|
|
text += "\n";
|
|
}
|
|
text += html.children[i].innerText;
|
|
}
|
|
return text;
|
|
},
|
|
_addLocalStorage: function (isImage, isChart, cell, activeRange, trueRow, trueCol, worksheet, isCut, htmlInShape) {
|
|
var t = this;
|
|
var numRow = activeRange.r1;
|
|
var numCol = activeRange.c1;
|
|
if (htmlInShape) {
|
|
t.lStorage = {};
|
|
t.lStorage.htmlInShape = htmlInShape;
|
|
} else {
|
|
if (isChart) {
|
|
t.lStorage = [];
|
|
t.lStorage[0] = {};
|
|
t.lStorage[0].isChart = isChart;
|
|
} else {
|
|
if (!isImage) {
|
|
var row = trueRow - numRow;
|
|
var col = trueCol - numCol;
|
|
if (row == 0 && col == 0) {
|
|
t.lStorage = [];
|
|
t.lStorage.fromRow = numRow;
|
|
t.lStorage.fromCol = numCol;
|
|
}
|
|
if (t.lStorage[row] == undefined) {
|
|
t.lStorage[row] = [];
|
|
}
|
|
var arrFragmentsTmp = cell.getValue2();
|
|
var arrFragments = [];
|
|
for (var i = 0; i < arrFragmentsTmp.length; ++i) {
|
|
arrFragments.push(arrFragmentsTmp[i].clone());
|
|
}
|
|
t.lStorage[row][col] = {
|
|
value2: arrFragments,
|
|
borders: cell.getBorderFull(),
|
|
merge: cell.hasMerged(),
|
|
format: cell.getNumFormat(),
|
|
verAlign: cell.getAlignVertical(),
|
|
horAlign: cell.getAlignHorizontal(),
|
|
wrap: cell.getWrap(),
|
|
fill: cell.getFill(),
|
|
hyperlink: cell.getHyperlink(),
|
|
valWithoutFormat: cell.getValueWithoutFormat(),
|
|
angle: cell.getAngle()
|
|
};
|
|
if (cell.getQuotePrefix() && t.lStorage[row][col] && t.lStorage[row][col].value2 && t.lStorage[row][col].value2[0]) {
|
|
t.lStorage[row][col].value2[0].text = "'" + t.lStorage[row][col].value2[0].text;
|
|
}
|
|
if (!t.lStorage.autoFilters) {
|
|
var autoFiltersObj = worksheet.autoFilters;
|
|
var findFilter = autoFiltersObj._searchFiltersInRange(activeRange, worksheet.model);
|
|
if (findFilter && !findFilter[0].TableStyleInfo) {
|
|
findFilter.splice(0, 1);
|
|
}
|
|
if (findFilter) {
|
|
var ref;
|
|
var style;
|
|
var range;
|
|
t.lStorage.autoFilters = [];
|
|
for (var i = 0; i < findFilter.length; i++) {
|
|
ref = findFilter[i].Ref;
|
|
range = {
|
|
r1: ref.r1 - activeRange.r1,
|
|
c1: ref.c1 - activeRange.c1,
|
|
r2: ref.r2 - activeRange.r1,
|
|
c2: ref.c2 - activeRange.c1
|
|
};
|
|
style = findFilter[i].TableStyleInfo ? findFilter[i].TableStyleInfo.Name : null;
|
|
t.lStorage.autoFilters[i] = {
|
|
style: style,
|
|
range: range,
|
|
autoFilter: findFilter[i].AutoFilter ? true : false
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_makeCellValuesHtml: function (node, isText) {
|
|
var t = this;
|
|
var res = [];
|
|
var maxSize = 100;
|
|
var reQuotedStr = /['"]([^'"]+)['"]/;
|
|
var reSizeStr = /\s*(\d+\.*\d*)\s*(em|ex|cm|mm|in|pt|pc|px|%)?\s*/i;
|
|
function getFontName(style) {
|
|
var fn = style.fontFamily.split(",")[0];
|
|
var m = reQuotedStr.exec(fn);
|
|
if (m) {
|
|
fn = m[1];
|
|
}
|
|
switch (fn.toLowerCase()) {
|
|
case "sans-serif":
|
|
return "Arial";
|
|
case "serif":
|
|
return "Times";
|
|
case "monospace":
|
|
return "Courier";
|
|
}
|
|
return fn;
|
|
}
|
|
function getFontSize(style) {
|
|
var fs = style.fontSize.toLowerCase();
|
|
var defaultValue = "11";
|
|
if (fs == undefined || fs == "") {
|
|
return defaultValue;
|
|
}
|
|
var m = reSizeStr.exec(fs);
|
|
var sz = m ? parseFloat(m[1]) : 0;
|
|
if (sz > maxSize) {
|
|
sz = maxSize;
|
|
}
|
|
return m[2] === "px" ? (sz / t.ppix * 72).toFixed(1) - 0 : 0;
|
|
}
|
|
Array.prototype.forEach.call(node, function processElement(elem) {
|
|
if (elem.nodeType === Node.TEXT_NODE || (elem.nodeName.toLowerCase() == "br" && $(node).children("br").length != 0 && elem.parentNode.nodeName.toLowerCase() == "span") || (elem.parentNode.getAttribute != undefined && elem.parentNode.getAttribute("class") != null && elem.parentNode.getAttribute("class") == "qPrefix") || (elem.getAttribute != undefined && elem.getAttribute("class") != null && elem.getAttribute("class") == "qPrefix")) {
|
|
if (elem.textContent.replace(/(\r|\t|\n| )/g, "") != "" || elem.textContent == " " || elem.nodeName.toLowerCase() == "br") {
|
|
var parent = elem.parentNode;
|
|
if (elem.getAttribute != undefined && elem.getAttribute("class") == "qPrefix") {
|
|
parent = elem;
|
|
}
|
|
var style = window.getComputedStyle(parent);
|
|
var fn = g_fontApplication.GetFontNameDictionary(style.fontFamily, false);
|
|
if (fn == "") {
|
|
fn = g_fontApplication.GetFontNameDictionary(parent.style.fontFamily, true);
|
|
}
|
|
var fs = Math.round(getFontSize(style));
|
|
var fb = style.fontWeight.toLowerCase();
|
|
var fi = style.fontStyle.toLowerCase();
|
|
var td = style.textDecoration.toLowerCase();
|
|
var va = style.verticalAlign.toLowerCase();
|
|
var prefix = "";
|
|
var cL = null,
|
|
cellFrom = null,
|
|
splitCL, text;
|
|
if (parent.getAttribute("class") != null) {
|
|
cL = parent.getAttribute("class").split(" ");
|
|
for (var i = 0; i < cL.length; i++) {
|
|
if (cL[i].indexOf("cellFrom_") > -1) {
|
|
splitCL = cL[i].split("textFormula_");
|
|
if (splitCL && splitCL[0] && splitCL[1]) {
|
|
cellFrom = splitCL[0].replace("cellFrom_", "");
|
|
text = splitCL[1];
|
|
} else {
|
|
cellFrom = cL[i].replace("cellFrom_", "");
|
|
}
|
|
break;
|
|
} else {
|
|
if (cL[i].indexOf("qPrefix") > -1) {
|
|
prefix = "'";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!text) {
|
|
text = elem.textContent.replace("\t", "");
|
|
}
|
|
if (elem.nodeName.toLowerCase() == "br") {
|
|
text = "\n";
|
|
}
|
|
var colorText = new RgbColor(t._getBinaryColor(style.getPropertyValue("color")));
|
|
if (isText || (isText == "" && typeof isText == "string")) {
|
|
colorText = null;
|
|
}
|
|
res.push({
|
|
format: {
|
|
fn: fn,
|
|
fs: fs,
|
|
c: colorText,
|
|
b: fb.indexOf("bold") >= 0 || parseInt(fb, 10) > 500,
|
|
i: fi.indexOf("italic") >= 0,
|
|
u: td.indexOf("underline") >= 0 ? Asc.EUnderline.underlineSingle : Asc.EUnderline.underlineNone,
|
|
s: td.indexOf("line-through") >= 0,
|
|
va: va.indexOf("sub") >= 0 ? "subscript" : va.indexOf("sup") >= 0 ? "superscript" : "none"
|
|
},
|
|
text: prefix + text,
|
|
cellFrom: cellFrom
|
|
});
|
|
if (elem.parentElement && elem.parentElement.parentElement && elem.parentElement.parentElement.parentElement && elem.parentElement.parentElement.nodeName.toLowerCase() == "p" && elem.parentElement.parentElement.parentElement.nodeName.toLowerCase() == "td") {
|
|
if (elem.parentElement.parentElement.nextSibling && elem.parentElement.parentElement.nextSibling.nodeName.toLowerCase() == "p") {
|
|
res.push({
|
|
format: {
|
|
fn: fn,
|
|
fs: fs,
|
|
c: colorText,
|
|
b: fb.indexOf("bold") >= 0 || parseInt(fb, 10) > 500,
|
|
i: fi.indexOf("italic") >= 0,
|
|
u: td.indexOf("underline") >= 0 ? Asc.EUnderline.underlineSingle : Asc.EUnderline.underlineNone,
|
|
s: td.indexOf("line-through") >= 0,
|
|
va: va.indexOf("sub") >= 0 ? "subscript" : va.indexOf("sup") >= 0 ? "superscript" : "none"
|
|
},
|
|
text: "\n",
|
|
cellFrom: cellFrom
|
|
});
|
|
}
|
|
res.wrap = true;
|
|
}
|
|
if (fn !== "") {
|
|
t.fontsNew[fn] = 1;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
if (elem.childNodes == undefined) {
|
|
Array.prototype.forEach.call(elem, processElement);
|
|
} else {
|
|
Array.prototype.forEach.call(elem.childNodes, processElement);
|
|
}
|
|
});
|
|
return res;
|
|
},
|
|
_encode: function (input) {
|
|
return Base64.encode(input).replace(/\//g, "_s").replace(/\+/g, "_p").replace(/=/g, "_e");
|
|
},
|
|
_decode: function (input) {
|
|
return Base64.decode(input.replace(/_s/g, "/").replace(/_p/g, "+").replace(/_e/g, "="));
|
|
},
|
|
_getSelectedDrawingIndex: function (worksheet) {
|
|
if (!worksheet) {
|
|
return false;
|
|
}
|
|
var images = worksheet.model.Drawings;
|
|
var n = 0;
|
|
var arrImages = [];
|
|
if (images) {
|
|
for (var i = 0; i < images.length; i++) {
|
|
if ((images[i].graphicObject && images[i].graphicObject.selected == true) || (images[i].flags.selected == true)) {
|
|
arrImages[n] = i;
|
|
n++;
|
|
}
|
|
}
|
|
}
|
|
if (n == 0) {
|
|
return -1;
|
|
} else {
|
|
return arrImages;
|
|
}
|
|
},
|
|
_insertImagesFromHTML: function (ws, data) {
|
|
var activeRange = ws.activeRange;
|
|
var curCol, drawingObject, curRow, startCol, startRow, xfrm, aImagesSync = [],
|
|
activeRow,
|
|
activeCol,
|
|
tempArr,
|
|
offX,
|
|
offY,
|
|
rot,
|
|
a_drawings = [];
|
|
for (var im = 0; im < data.addImages.length; im++) {
|
|
var src = data.addImages[im].tag.src;
|
|
var extX = ws.objectRender.convertPixToMM(data.addImages[im].tag.width);
|
|
var extY = ws.objectRender.convertPixToMM(data.addImages[im].tag.height);
|
|
var x = ws.objectRender.convertMetric(ws.cols[data.addImages[im].curCell.col].left - ws.getCellLeft(0, 1), 1, 3);
|
|
var y = ws.objectRender.convertMetric(ws.rows[data.addImages[im].curCell.row].top - ws.getCellTop(0, 1), 1, 3);
|
|
if (src) {
|
|
var drawing = DrawingObjectsController.prototype.createImage(src, x, y, extX, extY);
|
|
var drawingBase = ws.objectRender.createDrawingObject();
|
|
drawingBase.graphicObject = drawing;
|
|
a_drawings.push(drawingBase);
|
|
}
|
|
}
|
|
History.Create_NewPoint();
|
|
History.StartTransaction();
|
|
for (var i = 0; i < a_drawings.length; i++) {
|
|
a_drawings[i].graphicObject = a_drawings[i].graphicObject.copy();
|
|
drawingObject = a_drawings[i];
|
|
if (a_drawings.length === 1 && typeof CGraphicFrame !== "undefined" && drawingObject.graphicObject instanceof CGraphicFrame) {
|
|
var pasteFromBinaryWord = new Asc.pasteFromBinaryWord(this, ws);
|
|
var newCDocument = new CDocument(oTempDrawingDocument);
|
|
newCDocument.bFromDocument = true;
|
|
newCDocument.theme = this.Api.wbModel.theme;
|
|
drawingObject.graphicObject.setBDeleted(true);
|
|
drawingObject.graphicObject.setWordFlag(false, newCDocument);
|
|
var oTempDrawingDocument = ws.model.DrawingDocument;
|
|
oTempDrawingDocument.m_oLogicDocument = newCDocument;
|
|
drawingObject.graphicObject.graphicObject.Set_Parent(newCDocument);
|
|
pasteFromBinaryWord._paste(ws, {
|
|
DocumentContent: [drawingObject.graphicObject.graphicObject]
|
|
});
|
|
return;
|
|
}
|
|
CheckSpPrXfrm(drawingObject.graphicObject);
|
|
xfrm = drawingObject.graphicObject.spPr.xfrm;
|
|
drawingObject = ws.objectRender.cloneDrawingObject(drawingObject);
|
|
drawingObject.graphicObject.setDrawingBase(drawingObject);
|
|
drawingObject.graphicObject.setDrawingObjects(ws.objectRender);
|
|
drawingObject.graphicObject.setWorksheet(ws.model);
|
|
drawingObject.graphicObject.checkRemoveCache && drawingObject.graphicObject.checkRemoveCache();
|
|
drawingObject.graphicObject.addToDrawingObjects();
|
|
if (drawingObject.graphicObject.checkDrawingBaseCoords) {
|
|
drawingObject.graphicObject.checkDrawingBaseCoords();
|
|
}
|
|
drawingObject.graphicObject.recalculate();
|
|
drawingObject.graphicObject.select(ws.objectRender.controller, 0);
|
|
tempArr = [];
|
|
drawingObject.graphicObject.getAllRasterImages(tempArr);
|
|
if (tempArr.length) {
|
|
for (var n = 0; n < tempArr.length; n++) {
|
|
aImagesSync.push(tempArr[n]);
|
|
}
|
|
}
|
|
}
|
|
ws.objectRender.showDrawingObjects(true);
|
|
ws.objectRender.controller.updateOverlay();
|
|
ws.setSelectionShape(true);
|
|
History.EndTransaction();
|
|
if (aImagesSync.length > 0) {
|
|
window["Asc"]["editor"].ImageLoader.LoadDocumentImages(aImagesSync, null, function () {
|
|
ws.objectRender.showDrawingObjects(true);
|
|
ws.objectRender.controller.getGraphicObjectProps();
|
|
});
|
|
}
|
|
},
|
|
_insertImagesFromBinary: function (ws, data, isIntoShape) {
|
|
var activeRange = ws.activeRange;
|
|
var curCol, drawingObject, curRow, startCol, startRow, xfrm, aImagesSync = [],
|
|
activeRow,
|
|
activeCol,
|
|
tempArr,
|
|
offX,
|
|
offY,
|
|
rot;
|
|
History.Create_NewPoint();
|
|
History.StartTransaction();
|
|
for (var i = 0; i < data.Drawings.length; i++) {
|
|
drawingObject = data.Drawings[i];
|
|
xfrm = drawingObject.graphicObject.spPr.xfrm;
|
|
if (xfrm) {
|
|
offX = 0;
|
|
offY = 0;
|
|
rot = isRealNumber(xfrm.rot) ? xfrm.rot : 0;
|
|
rot = normalizeRotate(rot);
|
|
if (checkNormalRotate(rot)) {
|
|
if (isRealNumber(xfrm.offX) && isRealNumber(xfrm.offY)) {
|
|
offX = xfrm.offX;
|
|
offY = xfrm.offY;
|
|
}
|
|
} else {
|
|
if (isRealNumber(xfrm.offX) && isRealNumber(xfrm.offY) && isRealNumber(xfrm.extX) && isRealNumber(xfrm.extY)) {
|
|
offX = xfrm.offX + xfrm.extX / 2 - xfrm.extY / 2;
|
|
offY = xfrm.offY + xfrm.extY / 2 - xfrm.extX / 2;
|
|
}
|
|
}
|
|
if (i == 0) {
|
|
startCol = offX;
|
|
startRow = offY;
|
|
} else {
|
|
if (startCol > offX) {
|
|
startCol = offX;
|
|
}
|
|
if (startRow > offY) {
|
|
startRow = offY;
|
|
}
|
|
}
|
|
} else {
|
|
if (i == 0) {
|
|
startCol = drawingObject.from.col;
|
|
startRow = drawingObject.from.row;
|
|
} else {
|
|
if (startCol > drawingObject.from.col) {
|
|
startCol = drawingObject.from.col;
|
|
}
|
|
if (startRow > drawingObject.from.row) {
|
|
startRow = drawingObject.from.row;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (startRow < 0) {
|
|
startRow = 0;
|
|
}
|
|
if (startCol < 0) {
|
|
startCol = 0;
|
|
}
|
|
for (var i = 0; i < data.Drawings.length; i++) {
|
|
data.Drawings[i].graphicObject = data.Drawings[i].graphicObject.copy();
|
|
drawingObject = data.Drawings[i];
|
|
if (data.Drawings.length === 1 && typeof CGraphicFrame !== "undefined" && drawingObject.graphicObject instanceof CGraphicFrame) {
|
|
var pasteFromBinaryWord = new Asc.pasteFromBinaryWord(this, ws);
|
|
var newCDocument = new CDocument(oTempDrawingDocument);
|
|
newCDocument.bFromDocument = true;
|
|
newCDocument.theme = this.Api.wbModel.theme;
|
|
drawingObject.graphicObject.setBDeleted(true);
|
|
drawingObject.graphicObject.setWordFlag(false, newCDocument);
|
|
var oTempDrawingDocument = ws.model.DrawingDocument;
|
|
oTempDrawingDocument.m_oLogicDocument = newCDocument;
|
|
drawingObject.graphicObject.graphicObject.Set_Parent(newCDocument);
|
|
pasteFromBinaryWord._paste(ws, {
|
|
DocumentContent: [drawingObject.graphicObject.graphicObject]
|
|
});
|
|
return;
|
|
}
|
|
CheckSpPrXfrm(drawingObject.graphicObject);
|
|
xfrm = drawingObject.graphicObject.spPr.xfrm;
|
|
activeRow = activeRange.r1;
|
|
activeCol = activeRange.c1;
|
|
if (isIntoShape && isIntoShape.Parent && isIntoShape.Parent.parent && isIntoShape.Parent.parent.drawingBase && isIntoShape.Parent.parent.drawingBase.from) {
|
|
activeRow = isIntoShape.Parent.parent.drawingBase.from.row;
|
|
activeCol = isIntoShape.Parent.parent.drawingBase.from.col;
|
|
}
|
|
curCol = xfrm.offX - startCol + ws.objectRender.convertMetric(ws.cols[activeCol].left - ws.getCellLeft(0, 1), 1, 3);
|
|
curRow = xfrm.offY - startRow + ws.objectRender.convertMetric(ws.rows[activeRow].top - ws.getCellTop(0, 1), 1, 3);
|
|
xfrm.setOffX(curCol);
|
|
xfrm.setOffY(curRow);
|
|
drawingObject = ws.objectRender.cloneDrawingObject(drawingObject);
|
|
drawingObject.graphicObject.setDrawingBase(drawingObject);
|
|
drawingObject.graphicObject.setDrawingObjects(ws.objectRender);
|
|
drawingObject.graphicObject.setWorksheet(ws.model);
|
|
drawingObject.graphicObject.checkRemoveCache && drawingObject.graphicObject.checkRemoveCache();
|
|
drawingObject.graphicObject.addToDrawingObjects();
|
|
if (drawingObject.graphicObject.checkDrawingBaseCoords) {
|
|
drawingObject.graphicObject.checkDrawingBaseCoords();
|
|
}
|
|
drawingObject.graphicObject.recalculate();
|
|
drawingObject.graphicObject.select(ws.objectRender.controller, 0);
|
|
tempArr = [];
|
|
drawingObject.graphicObject.getAllRasterImages(tempArr);
|
|
if (tempArr.length) {
|
|
for (var n = 0; n < tempArr.length; n++) {
|
|
aImagesSync.push(tempArr[n]);
|
|
}
|
|
}
|
|
}
|
|
ws.objectRender.showDrawingObjects(true);
|
|
ws.objectRender.controller.updateOverlay();
|
|
ws.setSelectionShape(true);
|
|
History.EndTransaction();
|
|
if (aImagesSync.length > 0) {
|
|
window["Asc"]["editor"].ImageLoader.LoadDocumentImages(aImagesSync, null, function () {
|
|
ws.objectRender.showDrawingObjects(true);
|
|
ws.objectRender.controller.getGraphicObjectProps();
|
|
});
|
|
}
|
|
},
|
|
_insertImagesFromBinaryWord: function (ws, data) {
|
|
var activeRange = ws.activeRange;
|
|
var curCol, drawingObject, curRow, startCol = 0,
|
|
startRow = 0,
|
|
xfrm, drawingBase, graphicObject, aImagesSync = [],
|
|
offX,
|
|
offY,
|
|
rot;
|
|
History.Create_NewPoint();
|
|
History.StartTransaction();
|
|
for (var i = 0; i < data.length; i++) {
|
|
graphicObject = data[i].image.GraphicObj;
|
|
if (graphicObject.setBDeleted2) {
|
|
graphicObject.setBDeleted2(true);
|
|
} else {
|
|
graphicObject.bDeleted = true;
|
|
}
|
|
graphicObject = graphicObject.convertToPPTX(ws.model.DrawingDocument, ws.model);
|
|
drawingObject = ws.objectRender.createDrawingObject();
|
|
drawingObject.graphicObject = graphicObject;
|
|
if (drawingObject.graphicObject.spPr && drawingObject.graphicObject.spPr.xfrm) {
|
|
xfrm = drawingObject.graphicObject.spPr.xfrm;
|
|
offX = 0;
|
|
offY = 0;
|
|
rot = isRealNumber(xfrm.rot) ? xfrm.rot : 0;
|
|
rot = normalizeRotate(rot);
|
|
if (checkNormalRotate(rot)) {
|
|
if (isRealNumber(xfrm.offX) && isRealNumber(xfrm.offY)) {
|
|
offX = xfrm.offX;
|
|
offY = xfrm.offY;
|
|
}
|
|
} else {
|
|
if (isRealNumber(xfrm.offX) && isRealNumber(xfrm.offY) && isRealNumber(xfrm.extX) && isRealNumber(xfrm.extY)) {
|
|
offX = xfrm.offX + xfrm.extX / 2 - xfrm.extY / 2;
|
|
offY = xfrm.offY + xfrm.extY / 2 - xfrm.extX / 2;
|
|
}
|
|
}
|
|
if (i == 0) {
|
|
startCol = offX;
|
|
startRow = offY;
|
|
} else {
|
|
if (startCol > offX) {
|
|
startCol = offX;
|
|
}
|
|
if (startRow > offY) {
|
|
startRow = offY;
|
|
}
|
|
}
|
|
} else {
|
|
if (i == 0) {
|
|
startCol = drawingObject.from.col;
|
|
startRow = drawingObject.from.row;
|
|
} else {
|
|
if (startCol > drawingObject.from.col) {
|
|
startCol = drawingObject.from.col;
|
|
}
|
|
if (startRow > drawingObject.from.row) {
|
|
startRow = drawingObject.from.row;
|
|
}
|
|
}
|
|
}
|
|
CheckSpPrXfrm(drawingObject.graphicObject);
|
|
xfrm = drawingObject.graphicObject.spPr.xfrm;
|
|
curCol = xfrm.offX - startCol + ws.objectRender.convertMetric(ws.cols[data[i].col].left - ws.getCellLeft(0, 1), 1, 3);
|
|
curRow = xfrm.offY - startRow + ws.objectRender.convertMetric(ws.rows[data[i].row].top - ws.getCellTop(0, 1), 1, 3);
|
|
xfrm.setOffX(curCol);
|
|
xfrm.setOffY(curRow);
|
|
drawingObject = ws.objectRender.cloneDrawingObject(drawingObject);
|
|
drawingObject.graphicObject.setDrawingBase(drawingObject);
|
|
drawingObject.graphicObject.setDrawingObjects(ws.objectRender);
|
|
drawingObject.graphicObject.setWorksheet(ws.model);
|
|
drawingObject.graphicObject.checkRemoveCache && drawingObject.graphicObject.checkRemoveCache();
|
|
drawingObject.graphicObject.addToDrawingObjects();
|
|
if (drawingObject.graphicObject.checkDrawingBaseCoords) {
|
|
drawingObject.graphicObject.checkDrawingBaseCoords();
|
|
}
|
|
drawingObject.graphicObject.recalculate();
|
|
drawingObject.graphicObject.select(ws.objectRender.controller, 0);
|
|
if (drawingObject.graphicObject.isImage()) {
|
|
aImagesSync.push(drawingObject.graphicObject.getImageUrl());
|
|
} else {
|
|
if (drawingObject.graphicObject.spPr && drawingObject.graphicObject.spPr.Fill && drawingObject.graphicObject.spPr.Fill.fill && drawingObject.graphicObject.spPr.Fill.fill.RasterImageId && drawingObject.graphicObject.spPr.Fill.fill.RasterImageId != null) {
|
|
aImagesSync.push(drawingObject.graphicObject.spPr.Fill.fill.RasterImageId);
|
|
} else {
|
|
if (drawingObject.graphicObject.isGroup() && drawingObject.graphicObject.spTree && drawingObject.graphicObject.spTree.length) {
|
|
var spTree = drawingObject.graphicObject.spTree;
|
|
for (var j = 0; j < spTree.length; j++) {
|
|
if (spTree[j].isImage()) {
|
|
aImagesSync.push(spTree[j].getImageUrl());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
window["Asc"]["editor"].ImageLoader.LoadDocumentImages(aImagesSync, null, ws.objectRender.asyncImagesDocumentEndLoaded);
|
|
ws.objectRender.showDrawingObjects(true);
|
|
ws.setSelectionShape(true);
|
|
ws.objectRender.controller.updateOverlay();
|
|
History.EndTransaction();
|
|
},
|
|
_getBinaryColor: function (c) {
|
|
var bin, m, x, type, r, g, b, a, s;
|
|
var reColor = /^\s*(?:#?([0-9a-f]{6})|#?([0-9a-f]{3})|rgba?\s*\(\s*((?:\d*\.?\d+)(?:\s*,\s*(?:\d*\.?\d+)){2,3})\s*\))\s*$/i;
|
|
if (typeof c === "number") {
|
|
bin = c;
|
|
} else {
|
|
m = reColor.exec(c);
|
|
if (!m) {
|
|
return null;
|
|
}
|
|
if (m[1]) {
|
|
x = [m[1].slice(0, 2), m[1].slice(2, 4), m[1].slice(4)];
|
|
type = 1;
|
|
} else {
|
|
if (m[2]) {
|
|
x = [m[2].slice(0, 1), m[2].slice(1, 2), m[2].slice(2)];
|
|
type = 0;
|
|
} else {
|
|
x = m[3].split(/\s*,\s*/i);
|
|
type = x.length === 3 ? 2 : 3;
|
|
}
|
|
}
|
|
r = parseInt(type !== 0 ? x[0] : x[0] + x[0], type < 2 ? 16 : 10);
|
|
g = parseInt(type !== 0 ? x[1] : x[1] + x[1], type < 2 ? 16 : 10);
|
|
b = parseInt(type !== 0 ? x[2] : x[2] + x[2], type < 2 ? 16 : 10);
|
|
a = type === 3 ? (Math.round(parseFloat(x[3]) * 100) * 0.01) : 1;
|
|
bin = (r << 16) | (g << 8) | b;
|
|
}
|
|
return bin;
|
|
},
|
|
_startCopyOrPaste: function () {
|
|
if (window.USER_AGENT_MACOS) {}
|
|
},
|
|
_endCopyOrPaste: function () {
|
|
if (window.USER_AGENT_MACOS) {}
|
|
}
|
|
};
|
|
function pasteFromBinaryWord(clipboard, ws) {
|
|
if (! (this instanceof pasteFromBinaryWord)) {
|
|
return new pasteFromBinaryWord();
|
|
}
|
|
this.fontsNew = {};
|
|
this.aResult = [];
|
|
this.clipboard = clipboard;
|
|
this.ws = ws;
|
|
return this;
|
|
}
|
|
pasteFromBinaryWord.prototype = {
|
|
_paste: function (worksheet, pasteData) {
|
|
var documentContent = pasteData.DocumentContent;
|
|
var activeRange = worksheet.activeRange.clone(true);
|
|
if (documentContent && documentContent.length) {
|
|
var documentContentBounds = new Asc.DocumentContentBounds();
|
|
var coverDocument = documentContentBounds.getBounds(0, 0, documentContent);
|
|
this._parseChildren(coverDocument, activeRange);
|
|
}
|
|
this.aResult.fontsNew = this.fontsNew;
|
|
this.aResult.rowSpanSpCount = 0;
|
|
this.aResult.cellCount = coverDocument.width;
|
|
worksheet.setSelectionInfo("paste", this.aResult, this);
|
|
},
|
|
_parseChildren: function (children, activeRange) {
|
|
var backgroundColor;
|
|
var childrens = children.children;
|
|
for (var i = 0; i < childrens.length; i++) {
|
|
if (childrens[i].type == c_oAscBoundsElementType.Cell) {
|
|
for (var row = childrens[i].top; row < childrens[i].top + childrens[i].height; row++) {
|
|
if (!this.aResult[row + activeRange.r1]) {
|
|
this.aResult[row + activeRange.r1] = [];
|
|
}
|
|
for (var col = childrens[i].left; col < childrens[i].left + childrens[i].width; col++) {
|
|
if (!this.aResult[row + activeRange.r1][col + activeRange.c1]) {
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1] = [];
|
|
}
|
|
if (!this.aResult[row + activeRange.r1][col + activeRange.c1][0]) {
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1][0] = [];
|
|
}
|
|
var isCtable = false;
|
|
var tempChildren = childrens[i].children[0].children;
|
|
var colSpan = null;
|
|
var rowSpan = null;
|
|
for (var temp = 0; temp < tempChildren.length; temp++) {
|
|
if (tempChildren[temp].type == c_oAscBoundsElementType.Table) {
|
|
isCtable = true;
|
|
}
|
|
}
|
|
if (childrens[i].width > 1 && isCtable && col == childrens[i].left) {
|
|
colSpan = childrens[i].width;
|
|
rowSpan = 1;
|
|
} else {
|
|
if (!isCtable && tempChildren.length == 1) {
|
|
rowSpan = childrens[i].height;
|
|
colSpan = childrens[i].width;
|
|
}
|
|
}
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1][0].rowSpan = rowSpan;
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1][0].colSpan = colSpan;
|
|
backgroundColor = this.getBackgroundColorTCell(childrens[i]);
|
|
if (backgroundColor) {
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1][0].bc = backgroundColor;
|
|
}
|
|
this.aResult[row + activeRange.r1][col + activeRange.c1][0].borders = this._getBorders(childrens[i], row, col, this.aResult[row + activeRange.r1][col + activeRange.c1][0].borders);
|
|
}
|
|
}
|
|
}
|
|
if (childrens[i].children.length == 0) {
|
|
var colSpan = null;
|
|
var rowSpan = null;
|
|
this._parseParagraph(childrens[i], activeRange, childrens[i].top + activeRange.r1, childrens[i].left + activeRange.c1);
|
|
} else {
|
|
this._parseChildren(childrens[i], activeRange);
|
|
}
|
|
}
|
|
},
|
|
_getBorders: function (cellTable, top, left, oldBorders) {
|
|
var borders = cellTable.elem.Get_Borders();
|
|
var widthCell = cellTable.width;
|
|
var heigthCell = cellTable.height;
|
|
var defaultStyle = "solid";
|
|
var borderStyleName;
|
|
var formatBorders = oldBorders ? oldBorders : new Border();
|
|
if (top == cellTable.top && !formatBorders.t.s) {
|
|
borderStyleName = this.clipboard._getBorderStyleName(defaultStyle, this.ws.objectRender.convertMetric(borders.Top.Size, 3, 1));
|
|
if (null !== borderStyleName) {
|
|
formatBorders.t.setStyle(borderStyleName);
|
|
formatBorders.t.c = new RgbColor(this.clipboard._getBinaryColor("rgb(" + borders.Top.Color.r + "," + borders.Top.Color.g + "," + borders.Top.Color.b + ")"));
|
|
}
|
|
}
|
|
if (left == cellTable.left && !formatBorders.l.s) {
|
|
borderStyleName = this.clipboard._getBorderStyleName(defaultStyle, this.ws.objectRender.convertMetric(borders.Left.Size, 3, 1));
|
|
if (null !== borderStyleName) {
|
|
formatBorders.l.setStyle(borderStyleName);
|
|
formatBorders.l.c = new RgbColor(this.clipboard._getBinaryColor("rgb(" + borders.Left.Color.r + "," + borders.Left.Color.g + "," + borders.Left.Color.b + ")"));
|
|
}
|
|
}
|
|
if (top == cellTable.top + heigthCell - 1 && !formatBorders.b.s) {
|
|
borderStyleName = this.clipboard._getBorderStyleName(defaultStyle, this.ws.objectRender.convertMetric(borders.Bottom.Size, 3, 1));
|
|
if (null !== borderStyleName) {
|
|
formatBorders.b.setStyle(borderStyleName);
|
|
formatBorders.b.c = new RgbColor(this.clipboard._getBinaryColor("rgb(" + borders.Bottom.Color.r + "," + borders.Bottom.Color.g + "," + borders.Bottom.Color.b + ")"));
|
|
}
|
|
}
|
|
if (left == cellTable.left + widthCell - 1 && !formatBorders.r.s) {
|
|
borderStyleName = this.clipboard._getBorderStyleName(defaultStyle, this.ws.objectRender.convertMetric(borders.Right.Size, 3, 1));
|
|
if (null !== borderStyleName) {
|
|
formatBorders.r.setStyle(borderStyleName);
|
|
formatBorders.r.c = new RgbColor(this.clipboard._getBinaryColor("rgb(" + borders.Right.Color.r + "," + borders.Right.Color.g + "," + borders.Right.Color.b + ")"));
|
|
}
|
|
}
|
|
return formatBorders;
|
|
},
|
|
_parseParagraph: function (paragraph, activeRange, row, col, rowSpan, colSpan) {
|
|
var content = paragraph.elem.Content;
|
|
var row, cTextPr, fontFamily = "Arial";
|
|
var text = null;
|
|
var oNewItem = [],
|
|
cloneNewItem;
|
|
var paraRunContent;
|
|
var aResult = this.aResult;
|
|
if (row === undefined) {
|
|
if (aResult.length == 0) {
|
|
row = activeRange.r1;
|
|
} else {
|
|
row = aResult.length;
|
|
}
|
|
}
|
|
if (this.aResult[row] && this.aResult[row][col] && this.aResult[row][col][0] && this.aResult[row][col][0].length === 0 && (this.aResult[row][col][0].borders || this.aResult[row][col][0].rowSpan != null)) {
|
|
if (this.aResult[row][col][0].borders) {
|
|
oNewItem.borders = this.aResult[row][col][0].borders;
|
|
}
|
|
if (this.aResult[row][col][0].rowSpan != null) {
|
|
oNewItem.rowSpan = this.aResult[row][col][0].rowSpan;
|
|
oNewItem.colSpan = this.aResult[row][col][0].colSpan;
|
|
}
|
|
delete this.aResult[row][col];
|
|
}
|
|
if (!aResult[row]) {
|
|
aResult[row] = [];
|
|
}
|
|
var s = 0;
|
|
var c1 = col !== undefined ? col : activeRange.c1;
|
|
var backgroundColor = this.getBackgroundColorTCell(paragraph);
|
|
if (backgroundColor) {
|
|
oNewItem.bc = backgroundColor;
|
|
}
|
|
paragraph.elem.CompiledPr.NeedRecalc = true;
|
|
var paraPr = paragraph.elem.Get_CompiledPr();
|
|
var paragraphFontFamily = paraPr.TextPr.FontFamily.Name;
|
|
var horisonalAlign = this._getAlignHorisontal(paraPr);
|
|
if (horisonalAlign) {
|
|
oNewItem.a = this._getAlignHorisontal(paraPr);
|
|
} else {
|
|
if (horisonalAlign == null) {
|
|
oNewItem.wrap = true;
|
|
}
|
|
}
|
|
oNewItem.va = "center";
|
|
if (this._getParentByTag(paragraph, c_oAscBoundsElementType.Cell) != null) {
|
|
oNewItem.wrap = true;
|
|
}
|
|
var LvlPr = null;
|
|
var Lvl = null;
|
|
var oNumPr = paragraph.elem.Numbering_Get();
|
|
var numberingText = null;
|
|
var formatText;
|
|
if (oNumPr != null) {
|
|
var aNum = paragraph.elem.Parent.Numbering.Get_AbstractNum(oNumPr.NumId);
|
|
if (null != aNum) {
|
|
LvlPr = aNum.Lvl[oNumPr.Lvl];
|
|
Lvl = oNumPr.Lvl;
|
|
}
|
|
numberingText = this._parseNumbering(paragraph.elem);
|
|
if (text == null) {
|
|
text = "";
|
|
}
|
|
text += this._getAllNumberingText(Lvl, numberingText);
|
|
formatText = this._getPrParaRun(paraPr, LvlPr.TextPr);
|
|
fontFamily = formatText.format.fn;
|
|
this.fontsNew[fontFamily] = 1;
|
|
oNewItem.push(formatText);
|
|
if (text !== null) {
|
|
oNewItem[oNewItem.length - 1].text = text;
|
|
}
|
|
text = "";
|
|
}
|
|
for (var n = 0; n < content.length; n++) {
|
|
if (!aResult[row][s + c1]) {
|
|
aResult[row][s + c1] = [];
|
|
}
|
|
if (text == null) {
|
|
text = "";
|
|
}
|
|
switch (content[n].Type) {
|
|
case para_Run:
|
|
s = this._parseParaRun(content[n], oNewItem, paraPr, s, row, c1, text);
|
|
break;
|
|
case para_Hyperlink:
|
|
oNewItem.hyperLink = content[n].Value;
|
|
oNewItem.toolTip = content[n].ToolTip;
|
|
for (var h = 0; h < content[n].Content.length; h++) {
|
|
switch (content[n].Content[h].Type) {
|
|
case para_Run:
|
|
s = this._parseParaRun(content[n].Content[h], oNewItem, paraPr, s, row, c1, text);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
_getAlignHorisontal: function (paraPr) {
|
|
var result;
|
|
var settings = paraPr.ParaPr;
|
|
if (!settings) {
|
|
return;
|
|
}
|
|
switch (settings.Jc) {
|
|
case 0:
|
|
result = "right";
|
|
break;
|
|
case 1:
|
|
result = "left";
|
|
break;
|
|
case 2:
|
|
result = "center";
|
|
break;
|
|
case 3:
|
|
result = null;
|
|
break;
|
|
}
|
|
return result;
|
|
},
|
|
getBackgroundColorTCell: function (elem) {
|
|
var compiledPrCell, color;
|
|
var backgroundColor = null;
|
|
var tableCell = this._getParentByTag(elem, c_oAscBoundsElementType.Cell);
|
|
if (tableCell) {
|
|
compiledPrCell = tableCell.elem.Get_CompiledPr();
|
|
if (compiledPrCell) {
|
|
var color = compiledPrCell.Shd.Color;
|
|
backgroundColor = new RgbColor(this.clipboard._getBinaryColor("rgb(" + color.r + "," + color.g + "," + color.b + ")"));
|
|
}
|
|
}
|
|
return backgroundColor;
|
|
},
|
|
_getParentByTag: function (elem, tag) {
|
|
var result;
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
if (elem.type == tag) {
|
|
result = elem;
|
|
} else {
|
|
if (elem.parent) {
|
|
result = this._getParentByTag(elem.parent, tag);
|
|
} else {
|
|
if (!elem.parent) {
|
|
result = null;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
_parseParaRun: function (paraRun, oNewItem, paraPr, s, row, c1, text) {
|
|
var paraRunContent = paraRun.Content;
|
|
var aResult = this.aResult;
|
|
var paragraphFontFamily = paraPr.TextPr.FontFamily.Name;
|
|
var cloneNewItem, formatText;
|
|
var cTextPr = paraRun.Get_CompiledPr();
|
|
if (cTextPr && !(paraRunContent.length == 1 && paraRunContent[0] instanceof ParaEnd)) {
|
|
formatText = this._getPrParaRun(paraPr, cTextPr);
|
|
} else {
|
|
if (!formatText) {
|
|
formatText = this._getPrParaRun(paraPr, cTextPr);
|
|
}
|
|
}
|
|
for (var pR = 0; pR < paraRunContent.length; pR++) {
|
|
switch (paraRunContent[pR].Type) {
|
|
case para_Text:
|
|
text += String.fromCharCode(paraRunContent[pR].Value);
|
|
break;
|
|
case para_Space:
|
|
text += " ";
|
|
break;
|
|
case para_Tab:
|
|
this.fontsNew[paragraphFontFamily] = 1;
|
|
oNewItem.push(formatText);
|
|
if (text !== null) {
|
|
oNewItem[oNewItem.length - 1].text = text;
|
|
}
|
|
cloneNewItem = this._getCloneNewItem(oNewItem);
|
|
if (typeof aResult[row][s + c1] == "object") {
|
|
aResult[row][s + c1][aResult[row][s + c1].length] = cloneNewItem;
|
|
} else {
|
|
aResult[row][s + c1] = [];
|
|
aResult[row][s + c1][0] = cloneNewItem;
|
|
}
|
|
text = "";
|
|
oNewItem = [];
|
|
s++;
|
|
break;
|
|
case para_Drawing:
|
|
if (!aResult.addImagesFromWord) {
|
|
aResult.addImagesFromWord = [];
|
|
}
|
|
aResult.addImagesFromWord[aResult.addImagesFromWord.length] = {
|
|
image: paraRunContent[pR],
|
|
col: s + c1,
|
|
row: row
|
|
};
|
|
case para_End:
|
|
if (typeof aResult[row][s + c1] == "object") {
|
|
aResult[row][s + c1][aResult[row][s + c1].length] = oNewItem;
|
|
} else {
|
|
aResult[row][s + c1] = [];
|
|
aResult[row][s + c1][0] = oNewItem;
|
|
}
|
|
}
|
|
}
|
|
if (text != "") {
|
|
this.fontsNew[paragraphFontFamily] = 1;
|
|
oNewItem.push(formatText);
|
|
if (text !== null) {
|
|
oNewItem[oNewItem.length - 1].text = text;
|
|
}
|
|
cloneNewItem = this._getCloneNewItem(oNewItem);
|
|
text = "";
|
|
}
|
|
return s;
|
|
},
|
|
_getAllNumberingText: function (Lvl, numberingText) {
|
|
var preSpace, beetweenSpace, result;
|
|
if (Lvl == 0) {
|
|
preSpace = " ";
|
|
} else {
|
|
if (Lvl == 1) {
|
|
preSpace = " ";
|
|
} else {
|
|
if (Lvl >= 2) {
|
|
preSpace = " ";
|
|
}
|
|
}
|
|
}
|
|
var beetweenSpace = " ";
|
|
result = preSpace + numberingText + beetweenSpace;
|
|
return result;
|
|
},
|
|
_parseNumbering: function (paragraph) {
|
|
var Pr = paragraph.Get_CompiledPr();
|
|
if (paragraph.Numbering) {
|
|
var NumberingItem = paragraph.Numbering;
|
|
if (para_Numbering === NumberingItem.Type) {
|
|
var NumPr = Pr.ParaPr.NumPr;
|
|
if (undefined === NumPr || undefined === NumPr.NumId || 0 === NumPr.NumId || "0" === NumPr.NumId) {} else {
|
|
var Numbering = paragraph.Parent.Get_Numbering();
|
|
var NumLvl = Numbering.Get_AbstractNum(NumPr.NumId).Lvl[NumPr.Lvl];
|
|
var NumSuff = NumLvl.Suff;
|
|
var NumJc = NumLvl.Jc;
|
|
var NumTextPr = paragraph.Get_CompiledPr2(false).TextPr.Copy();
|
|
var TextPr_temp = paragraph.TextPr.Value.Copy();
|
|
TextPr_temp.Underline = undefined;
|
|
NumTextPr.Merge(TextPr_temp);
|
|
NumTextPr.Merge(NumLvl.TextPr);
|
|
var oNumPr = paragraph.Numbering_Get();
|
|
var LvlPr, Lvl;
|
|
if (oNumPr != null) {
|
|
var aNum = paragraph.Parent.Numbering.Get_AbstractNum(oNumPr.NumId);
|
|
if (null != aNum) {
|
|
LvlPr = aNum.Lvl[oNumPr.Lvl];
|
|
Lvl = oNumPr.Lvl;
|
|
}
|
|
}
|
|
var NumInfo = paragraph.Parent.Internal_GetNumInfo(paragraph.Id, NumPr);
|
|
return this._getNumberingText(NumPr.Lvl, NumInfo, NumTextPr, null, LvlPr);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_getNumberingText: function (Lvl, NumInfo, NumTextPr, Theme, LvlPr) {
|
|
var Text = LvlPr.LvlText;
|
|
var Char = "";
|
|
for (var Index = 0; Index < Text.length; Index++) {
|
|
switch (Text[Index].Type) {
|
|
case numbering_lvltext_Text:
|
|
var Hint = NumTextPr.RFonts.Hint;
|
|
var bCS = NumTextPr.CS;
|
|
var bRTL = NumTextPr.RTL;
|
|
var lcid = NumTextPr.Lang.EastAsia;
|
|
var FontSlot = g_font_detector.Get_FontClass(Text[Index].Value.charCodeAt(0), Hint, lcid, bCS, bRTL);
|
|
Char += Text[Index].Value;
|
|
break;
|
|
case numbering_lvltext_Num:
|
|
var CurLvl = Text[Index].Value;
|
|
switch (LvlPr.Format) {
|
|
case numbering_numfmt_Bullet:
|
|
break;
|
|
case numbering_numfmt_Decimal:
|
|
if (CurLvl < NumInfo.length) {
|
|
var T = "" + (LvlPr.Start - 1 + NumInfo[CurLvl]);
|
|
for (var Index2 = 0; Index2 < T.length; Index2++) {
|
|
Char += T.charAt(Index2);
|
|
}
|
|
}
|
|
break;
|
|
case numbering_numfmt_DecimalZero:
|
|
if (CurLvl < NumInfo.length) {
|
|
var T = "" + (LvlPr.Start - 1 + NumInfo[CurLvl]);
|
|
if (1 === T.length) {
|
|
var Char = T.charAt(0);
|
|
} else {
|
|
for (var Index2 = 0; Index2 < T.length; Index2++) {
|
|
Char += T.charAt(Index2);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case numbering_numfmt_LowerLetter:
|
|
case numbering_numfmt_UpperLetter:
|
|
if (CurLvl < NumInfo.length) {
|
|
var Num = LvlPr.Start - 1 + NumInfo[CurLvl] - 1;
|
|
var Count = (Num - Num % 26) / 26;
|
|
var Ost = Num % 26;
|
|
var T = "";
|
|
var Letter;
|
|
if (numbering_numfmt_LowerLetter === LvlPr.Format) {
|
|
Letter = String.fromCharCode(Ost + 97);
|
|
} else {
|
|
Letter = String.fromCharCode(Ost + 65);
|
|
}
|
|
for (var Index2 = 0; Index2 < Count + 1; Index2++) {
|
|
T += Letter;
|
|
}
|
|
for (var Index2 = 0; Index2 < T.length; Index2++) {
|
|
Char += T.charAt(Index2);
|
|
}
|
|
}
|
|
break;
|
|
case numbering_numfmt_LowerRoman:
|
|
case numbering_numfmt_UpperRoman:
|
|
if (CurLvl < NumInfo.length) {
|
|
var Num = LvlPr.Start - 1 + NumInfo[CurLvl];
|
|
var Rims;
|
|
if (numbering_numfmt_LowerRoman === LvlPr.Format) {
|
|
Rims = ["m", "cm", "d", "cd", "c", "xc", "l", "xl", "x", "ix", "v", "iv", "i", " "];
|
|
} else {
|
|
Rims = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I", " "];
|
|
}
|
|
var Vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1, 0];
|
|
var T = "";
|
|
var Index2 = 0;
|
|
while (Num > 0) {
|
|
while (Vals[Index2] <= Num) {
|
|
T += Rims[Index2];
|
|
Num -= Vals[Index2];
|
|
}
|
|
Index2++;
|
|
if (Index2 >= Rims.length) {
|
|
break;
|
|
}
|
|
}
|
|
for (var Index2 = 0; Index2 < T.length; Index2++) {
|
|
Char += T.charAt(Index2);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return Char;
|
|
},
|
|
_getPrParaRun: function (paraPr, cTextPr) {
|
|
var formatText, fontFamily, colorText;
|
|
var paragraphFontSize = paraPr.TextPr.FontSize;
|
|
var paragraphFontFamily = paraPr.TextPr && paraPr.TextPr.FontFamily ? paraPr.TextPr.FontFamily.Name : "Arial";
|
|
var paragraphBold = paraPr.TextPr.Bold;
|
|
var paragraphItalic = paraPr.TextPr.Italic;
|
|
var paragraphStrikeout = paraPr.TextPr.Strikeout;
|
|
var paragraphUnderline = paraPr.TextPr.Underline ? Asc.EUnderline.underlineSingle : Asc.EUnderline.underlineNone;
|
|
var paragraphVertAlign = "none";
|
|
if (paraPr.TextPr.VertAlign == 1) {
|
|
paragraphVertAlign = "superscript";
|
|
} else {
|
|
if (paraPr.TextPr.VertAlign == 2) {
|
|
paragraphVertAlign = "subscript";
|
|
}
|
|
}
|
|
var colorParagraph = new RgbColor(this.clipboard._getBinaryColor("rgb(" + paraPr.TextPr.Color.r + "," + paraPr.TextPr.Color.g + "," + paraPr.TextPr.Color.b + ")"));
|
|
if (cTextPr.Color) {
|
|
colorText = new RgbColor(this.clipboard._getBinaryColor("rgb(" + cTextPr.Color.r + "," + cTextPr.Color.g + "," + cTextPr.Color.b + ")"));
|
|
} else {
|
|
colorText = null;
|
|
}
|
|
fontFamily = cTextPr.fontFamily ? cTextPr.fontFamily.Name : cTextPr.RFonts.CS ? cTextPr.RFonts.CS.Name : paragraphFontFamily;
|
|
this.fontsNew[fontFamily] = 1;
|
|
var verticalAlign;
|
|
if (cTextPr.VertAlign == 2) {
|
|
verticalAlign = "subscript";
|
|
} else {
|
|
if (cTextPr.VertAlign == 1) {
|
|
verticalAlign = "superscript";
|
|
}
|
|
}
|
|
formatText = {
|
|
format: {
|
|
fn: fontFamily,
|
|
fs: cTextPr.FontSize ? cTextPr.FontSize : paragraphFontSize,
|
|
c: colorText ? colorText : colorParagraph,
|
|
b: cTextPr.Bold ? cTextPr.Bold : paragraphBold,
|
|
i: cTextPr.Italic ? cTextPr.Italic : paragraphItalic,
|
|
u: cTextPr.Underline ? Asc.EUnderline.underlineSingle : paragraphUnderline,
|
|
s: cTextPr.Strikeout ? cTextPr.Strikeout : cTextPr.DStrikeout ? cTextPr.DStrikeout : paragraphStrikeout,
|
|
va: verticalAlign ? verticalAlign : paragraphVertAlign
|
|
}
|
|
};
|
|
return formatText;
|
|
},
|
|
_getCloneNewItem: function (oNewItem) {
|
|
var result = [];
|
|
for (var item = 0; item < oNewItem.length; item++) {
|
|
result[item] = {
|
|
text: oNewItem[item].text,
|
|
format: oNewItem[item].format
|
|
};
|
|
}
|
|
result.borders = oNewItem.borders;
|
|
result.rowSpan = oNewItem.rowSpan;
|
|
result.colSpan = oNewItem.colSpan;
|
|
result.toolTip = result.toolTip;
|
|
result.bc = oNewItem.bc;
|
|
result.hyperLink = oNewItem.hyperLink;
|
|
return result;
|
|
}
|
|
};
|
|
var c_oAscBoundsElementType = {
|
|
Content: 0,
|
|
Paragraph: 1,
|
|
Table: 2,
|
|
Row: 3,
|
|
Cell: 4
|
|
};
|
|
function DocumentContentBoundsElement(elem, type, parent) {
|
|
this.elem = elem;
|
|
this.type = type;
|
|
this.parent = parent;
|
|
this.children = [];
|
|
this.left = 0;
|
|
this.top = 0;
|
|
this.width = 0;
|
|
this.height = 0;
|
|
}
|
|
function DocumentContentBounds() {}
|
|
DocumentContentBounds.prototype = {
|
|
getBounds: function (nLeft, nTop, aDocumentContent) {
|
|
var oRes = this._getMeasure(aDocumentContent, null);
|
|
this._getOffset(nLeft, nTop, oRes);
|
|
return oRes;
|
|
},
|
|
_getOffset: function (nLeft, nTop, elem) {
|
|
elem.left += nLeft;
|
|
elem.top += nTop;
|
|
var nCurLeft = elem.left;
|
|
var nCurTop = elem.top;
|
|
var bIsRow = elem.elem instanceof CTableRow;
|
|
for (var i = 0, length = elem.children.length; i < length; i++) {
|
|
var child = elem.children[i];
|
|
this._getOffset(nCurLeft, nCurTop, child);
|
|
if (bIsRow) {
|
|
nCurLeft += child.width;
|
|
} else {
|
|
nCurTop += child.height;
|
|
}
|
|
}
|
|
},
|
|
_getMeasure: function (aDocumentContent, oParent) {
|
|
var oRes = new DocumentContentBoundsElement(aDocumentContent, c_oAscBoundsElementType.Content, oParent);
|
|
for (var i = 0, length = aDocumentContent.length; i < length; i++) {
|
|
var elem = aDocumentContent[i];
|
|
var oNewElem = null;
|
|
if (type_Paragraph == elem.GetType()) {
|
|
oNewElem = new DocumentContentBoundsElement(elem, c_oAscBoundsElementType.Paragraph, oRes);
|
|
oNewElem.width = 1;
|
|
oNewElem.height = 1;
|
|
} else {
|
|
if (type_Table == elem.GetType()) {
|
|
elem.ReIndexing(0);
|
|
oNewElem = this._getTableMeasure(elem, oRes);
|
|
}
|
|
}
|
|
if (null != oNewElem) {
|
|
oRes.children.push(oNewElem);
|
|
if (oNewElem.width && oNewElem.width > oRes.width) {
|
|
oRes.width = oNewElem.width;
|
|
}
|
|
oRes.height += oNewElem.height;
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_getTableMeasure: function (table, oParent) {
|
|
var oRes = new DocumentContentBoundsElement(table, c_oAscBoundsElementType.Table, oParent);
|
|
var aGridWidth = [];
|
|
for (var i = 0, length = table.TableGrid.length; i < length; i++) {
|
|
aGridWidth.push(1);
|
|
}
|
|
for (var i = 0, length = table.Content.length; i < length; i++) {
|
|
var row = table.Content[i];
|
|
var oNewElem = this._setRowGridWidth(row, oRes, aGridWidth);
|
|
if (null != oNewElem) {
|
|
oRes.children.push(oNewElem);
|
|
}
|
|
}
|
|
var aSumGridWidth = [];
|
|
var nTempSum = 0;
|
|
for (var i = 0, length = aGridWidth.length; i < length + 1; i++) {
|
|
aSumGridWidth[i] = nTempSum;
|
|
var nCurValue = aGridWidth[i];
|
|
if (nCurValue) {
|
|
nTempSum += nCurValue;
|
|
}
|
|
}
|
|
for (var i = 0, length = oRes.children.length; i < length; i++) {
|
|
var rowWrapped = oRes.children[i];
|
|
this._getRowMeasure(rowWrapped, aSumGridWidth);
|
|
oRes.height += rowWrapped.height;
|
|
if (rowWrapped.width + rowWrapped.left > oRes.width) {
|
|
oRes.width = rowWrapped.width + rowWrapped.left;
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_setRowGridWidth: function (row, oParent, aGridWidth) {
|
|
var oRes = new DocumentContentBoundsElement(row, c_oAscBoundsElementType.Row, oParent);
|
|
var nSumGrid = 0;
|
|
var BeforeInfo = row.Get_Before();
|
|
if (BeforeInfo && BeforeInfo.GridBefore) {
|
|
nSumGrid += BeforeInfo.GridBefore;
|
|
}
|
|
for (var i = 0, length = row.Content.length; i < length; i++) {
|
|
var cell = row.Content[i];
|
|
var oNewCell = new DocumentContentBoundsElement(cell, c_oAscBoundsElementType.Cell, oRes);
|
|
oRes.children.push(oNewCell);
|
|
var oNewElem = this._getMeasure(cell.Content.Content, oNewCell);
|
|
oNewCell.children.push(oNewElem);
|
|
oNewCell.width = oNewElem.width;
|
|
oNewCell.height = oNewElem.height;
|
|
if (oNewCell.height > oRes.height) {
|
|
oRes.height = oNewCell.height;
|
|
}
|
|
var nCellGrid = cell.Get_GridSpan();
|
|
if (oNewElem.width > nCellGrid) {
|
|
var nFirstGridWidth = oNewElem.width - nCellGrid + 1;
|
|
var nCurValue = aGridWidth[nSumGrid];
|
|
if (null != nCurValue && nCurValue < nFirstGridWidth) {
|
|
aGridWidth[nSumGrid] = nFirstGridWidth;
|
|
}
|
|
}
|
|
nSumGrid += nCellGrid;
|
|
}
|
|
return oRes;
|
|
},
|
|
_getRowMeasure: function (rowWrapped, aSumGridWidth) {
|
|
var nSumGrid = 0;
|
|
var BeforeInfo = rowWrapped.elem.Get_Before();
|
|
if (BeforeInfo && BeforeInfo.GridBefore) {
|
|
rowWrapped.left = aSumGridWidth[nSumGrid + BeforeInfo.GridBefore] - aSumGridWidth[nSumGrid];
|
|
nSumGrid += BeforeInfo.GridBefore;
|
|
}
|
|
for (var i = 0, length = rowWrapped.children.length; i < length; i++) {
|
|
var cellWrapped = rowWrapped.children[i];
|
|
var nCellGrid = cellWrapped.elem.Get_GridSpan();
|
|
cellWrapped.width = aSumGridWidth[nSumGrid + nCellGrid] - aSumGridWidth[nSumGrid];
|
|
cellWrapped.height = rowWrapped.height;
|
|
rowWrapped.width += cellWrapped.width;
|
|
nSumGrid += nCellGrid;
|
|
}
|
|
}
|
|
};
|
|
function CopyProcessor(api, ElemToSelect) {
|
|
this.Ul = document.createElement("ul");
|
|
this.Ol = document.createElement("ol");
|
|
this.Para;
|
|
this.bOccurEndPar;
|
|
this.oCurHyperlink = null;
|
|
this.oCurHyperlinkElem = null;
|
|
this.oPresentationWriter = new CBinaryFileWriter();
|
|
}
|
|
CopyProcessor.prototype = {
|
|
getSrc: function (src) {
|
|
var start = src.substring(0, 6);
|
|
if (0 != src.indexOf("http:") && 0 != src.indexOf("data:") && 0 != src.indexOf("https:") && 0 != src.indexOf("ftp:") && 0 != src.indexOf("file:")) {
|
|
return documentOrigin + src;
|
|
} else {
|
|
return src;
|
|
}
|
|
},
|
|
RGBToCSS: function (rgb) {
|
|
var sResult = "#";
|
|
var sR = rgb.r.toString(16);
|
|
if (sR.length == 1) {
|
|
sR = "0" + sR;
|
|
}
|
|
var sG = rgb.g.toString(16);
|
|
if (sG.length == 1) {
|
|
sG = "0" + sG;
|
|
}
|
|
var sB = rgb.b.toString(16);
|
|
if (sB.length == 1) {
|
|
sB = "0" + sB;
|
|
}
|
|
return "#" + sR + sG + sB;
|
|
},
|
|
CommitList: function (oDomTarget) {
|
|
if (this.Ul.childNodes.length > 0) {
|
|
this.Ul.style.paddingLeft = "40px";
|
|
oDomTarget.appendChild(this.Ul);
|
|
this.Ul = document.createElement("ul");
|
|
}
|
|
if (this.Ol.childNodes.length > 0) {
|
|
this.Ol.style.paddingLeft = "40px";
|
|
oDomTarget.appendChild(this.Ol);
|
|
this.Ol = document.createElement("ol");
|
|
}
|
|
},
|
|
Commit_pPr: function (Item) {
|
|
var apPr = [];
|
|
var Def_pPr = this.oDocument.Styles.Default.ParaPr;
|
|
var Item_pPr = Item.CompiledPr.Pr.ParaPr;
|
|
if (Item_pPr) {
|
|
if (Def_pPr.Ind.Left != Item_pPr.Ind.Left) {
|
|
apPr.push("margin-left:" + (Item_pPr.Ind.Left * g_dKoef_mm_to_pt) + "pt");
|
|
}
|
|
if (Def_pPr.Ind.Right != Item_pPr.Ind.Right) {
|
|
apPr.push("margin-right:" + (Item_pPr.Ind.Right * g_dKoef_mm_to_pt) + "pt");
|
|
}
|
|
if (Def_pPr.Ind.FirstLine != Item_pPr.Ind.FirstLine) {
|
|
apPr.push("text-indent:" + (Item_pPr.Ind.FirstLine * g_dKoef_mm_to_pt) + "pt");
|
|
}
|
|
if (Def_pPr.Jc != Item_pPr.Jc) {
|
|
switch (Item_pPr.Jc) {
|
|
case align_Left:
|
|
apPr.push("text-align:left");
|
|
break;
|
|
case align_Center:
|
|
apPr.push("text-align:center");
|
|
break;
|
|
case align_Right:
|
|
apPr.push("text-align:right");
|
|
break;
|
|
case align_Justify:
|
|
apPr.push("text-align:justify");
|
|
break;
|
|
}
|
|
}
|
|
if (Def_pPr.KeepLines != Item_pPr.KeepLines || Def_pPr.WidowControl != Item_pPr.WidowControl) {
|
|
if (Def_pPr.KeepLines != Item_pPr.KeepLines && Def_pPr.WidowControl != Item_pPr.WidowControl) {
|
|
apPr.push("mso-pagination:none lines-together");
|
|
} else {
|
|
if (Def_pPr.KeepLines != Item_pPr.KeepLines) {
|
|
apPr.push("mso-pagination:widow-orphan lines-together");
|
|
} else {
|
|
if (Def_pPr.WidowControl != Item_pPr.WidowControl) {
|
|
apPr.push("mso-pagination:none");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Def_pPr.KeepNext != Item_pPr.KeepNext) {
|
|
apPr.push("page-break-after:avoid");
|
|
}
|
|
if (Def_pPr.PageBreakBefore != Item_pPr.PageBreakBefore) {
|
|
apPr.push("page-break-before:always");
|
|
}
|
|
if (Def_pPr.Spacing.Line != Item_pPr.Spacing.Line) {
|
|
if (linerule_AtLeast == Item_pPr.Spacing.LineRule) {
|
|
apPr.push("line-height:" + (Item_pPr.Spacing.Line * g_dKoef_mm_to_pt) + "pt");
|
|
} else {
|
|
if (linerule_Auto == Item_pPr.Spacing.LineRule) {
|
|
if (1 == Item_pPr.Spacing.Line) {
|
|
apPr.push("line-height:normal");
|
|
} else {
|
|
apPr.push("line-height:" + parseInt(Item_pPr.Spacing.Line * 100) + "%");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Def_pPr.Spacing.LineRule != Item_pPr.Spacing.LineRule) {
|
|
if (linerule_Exact == Item_pPr.Spacing.LineRule) {
|
|
apPr.push("mso-line-height-rule:exactly");
|
|
}
|
|
}
|
|
apPr.push("margin-top:" + (Item_pPr.Spacing.Before * g_dKoef_mm_to_pt) + "pt");
|
|
apPr.push("margin-bottom:" + (Item_pPr.Spacing.After * g_dKoef_mm_to_pt) + "pt");
|
|
if (Def_pPr.Shd.Value != Item_pPr.Shd.Value) {
|
|
apPr.push("background-color:" + this.RGBToCSS(Item_pPr.Shd.Color));
|
|
}
|
|
if (Item_pPr.Tabs.Get_Count() > 0) {
|
|
var sRes = "";
|
|
for (var i = 0, length = Item_pPr.Tabs.Get_Count(); i < length; i++) {
|
|
if (0 != i) {
|
|
sRes += " ";
|
|
}
|
|
sRes += Item_pPr.Tabs.Get(i).Pos / 10 + "cm";
|
|
}
|
|
apPr.push("tab-stops:" + sRes);
|
|
}
|
|
if (null != Item_pPr.Brd) {
|
|
apPr.push("border:none");
|
|
var borderStyle = this._BordersToStyle(Item_pPr.Brd, false, true, "mso-", "-alt");
|
|
if (null != borderStyle) {
|
|
var nborderStyleLength = borderStyle.length;
|
|
if (nborderStyleLength > 0) {
|
|
borderStyle = borderStyle.substring(0, nborderStyleLength - 1);
|
|
}
|
|
apPr.push(borderStyle);
|
|
}
|
|
}
|
|
}
|
|
if (apPr.length > 0) {
|
|
this.Para.setAttribute("style", apPr.join(";"));
|
|
}
|
|
},
|
|
parse_para_TextPr: function (Value) {
|
|
var aProp = [];
|
|
var aTagStart = [];
|
|
var aTagEnd = [];
|
|
var sRes = "";
|
|
if (null != Value.RFonts) {
|
|
var sFontName = null;
|
|
if (null != Value.RFonts.Ascii) {
|
|
sFontName = Value.RFonts.Ascii.Name;
|
|
} else {
|
|
if (null != Value.RFonts.HAnsi) {
|
|
sFontName = Value.RFonts.HAnsi.Name;
|
|
} else {
|
|
if (null != Value.RFonts.EastAsia) {
|
|
sFontName = Value.RFonts.EastAsia.Name;
|
|
} else {
|
|
if (null != Value.RFonts.CS) {
|
|
sFontName = Value.RFonts.CS.Name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (null != sFontName) {
|
|
aProp.push("font-family:" + "'" + CopyPasteCorrectString(sFontName) + "'");
|
|
}
|
|
}
|
|
if (null != Value.FontSize) {
|
|
aProp.push("font-size:" + Value.FontSize + "pt");
|
|
}
|
|
if (true == Value.Bold) {
|
|
aTagStart.push("<b>");
|
|
aTagEnd.push("</b>");
|
|
}
|
|
if (true == Value.Italic) {
|
|
aTagStart.push("<i>");
|
|
aTagEnd.push("</i>");
|
|
}
|
|
if (true == Value.Strikeout) {
|
|
aTagStart.push("<strike>");
|
|
aTagEnd.push("</strike>");
|
|
}
|
|
if (true == Value.Underline) {
|
|
aTagStart.push("<u>");
|
|
aTagEnd.push("</u>");
|
|
}
|
|
if (null != Value.HighLight && highlight_None != Value.HighLight) {
|
|
aProp.push("background-color:" + this.RGBToCSS(Value.HighLight));
|
|
}
|
|
var color;
|
|
if (null != Value.Unifill) {
|
|
var Unifill = Value.Unifill.getRGBAColor();
|
|
if (Unifill) {
|
|
color = this.RGBToCSS(new CDocumentColor(Unifill.R, Unifill.G, Unifill.B));
|
|
aProp.push("color:" + color);
|
|
aProp.push("mso-style-textfill-fill-color:" + color);
|
|
}
|
|
} else {
|
|
if (null != Value.Color) {
|
|
color = this.RGBToCSS(Value.Color);
|
|
aProp.push("color:" + color);
|
|
aProp.push("mso-style-textfill-fill-color:" + color);
|
|
}
|
|
}
|
|
if (null != Value.VertAlign) {
|
|
if (vertalign_SuperScript == Value.VertAlign) {
|
|
aProp.push("vertical-align:super");
|
|
} else {
|
|
if (vertalign_SubScript == Value.VertAlign) {
|
|
aProp.push("vertical-align:sub");
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
style: aProp.join(";"),
|
|
tagstart: aTagStart.join(""),
|
|
tagend: aTagEnd.join("")
|
|
};
|
|
},
|
|
ParseItem: function (ParaItem) {
|
|
var sRes = "";
|
|
switch (ParaItem.Type) {
|
|
case para_Text:
|
|
var sValue = String.fromCharCode(ParaItem.Value);
|
|
if (sValue) {
|
|
sRes += CopyPasteCorrectString(sValue);
|
|
}
|
|
break;
|
|
case para_Space:
|
|
sRes += " ";
|
|
break;
|
|
case para_Tab:
|
|
sRes += "<span style='mso-tab-count:1'> </span>";
|
|
break;
|
|
case para_NewLine:
|
|
if (break_Page == ParaItem.BreakType) {
|
|
sRes += '<br clear="all" style="mso-special-character:line-break;page-break-before:always;" />';
|
|
} else {
|
|
sRes += '<br style="mso-special-character:line-break;" />';
|
|
}
|
|
break;
|
|
case para_End:
|
|
this.bOccurEndPar = true;
|
|
break;
|
|
case para_Drawing:
|
|
var oGraphicObj = ParaItem.GraphicObj;
|
|
var sSrc = oGraphicObj.getBase64Img();
|
|
if (sSrc.length > 0) {
|
|
sSrc = this.getSrc(sSrc);
|
|
sRes += '<img style="max-width:100%;" width="' + Math.round(ParaItem.W * g_dKoef_mm_to_pix) + '" height="' + Math.round(ParaItem.H * g_dKoef_mm_to_pix) + '" src="' + sSrc + '" />';
|
|
break;
|
|
}
|
|
break;
|
|
case para_FlowObjectAnchor:
|
|
var oFlowObj = ParaItem.FlowObject;
|
|
if (flowobject_Image == oFlowObj.Get_Type()) {
|
|
var sSrc = oFlowObj.Img;
|
|
if (sSrc.length > 0) {
|
|
sSrc = this.getSrc(sSrc);
|
|
var sStyle = "";
|
|
var nLeft = oFlowObj.X;
|
|
var nRight = nLeft + oFlowObj.W;
|
|
if (Math.abs(nLeft - X_Left_Margin) < Math.abs(Page_Width - nRight - X_Right_Margin)) {
|
|
sStyle = "float:left;";
|
|
} else {
|
|
sStyle = "float:right;";
|
|
}
|
|
if (!this.api.DocumentReaderMode) {
|
|
if (null != oFlowObj.Paddings) {
|
|
sStyle += "margin:" + (oFlowObj.Paddings.Top * g_dKoef_mm_to_pt) + "pt " + (oFlowObj.Paddings.Right * g_dKoef_mm_to_pt) + "pt " + +(oFlowObj.Paddings.Bottom * g_dKoef_mm_to_pt) + "pt " + +(oFlowObj.Paddings.Left * g_dKoef_mm_to_pt) + "pt;";
|
|
}
|
|
} else {
|
|
sStyle += "margin:0pt 10pt 0pt 10pt;";
|
|
}
|
|
if (this.api.DocumentReaderMode) {
|
|
sStyle += "max-width:100%;";
|
|
}
|
|
sRes += '<img style="' + sStyle + '" width="' + Math.round(oFlowObj.W * g_dKoef_mm_to_pix) + '" height="' + Math.round(oFlowObj.H * g_dKoef_mm_to_pix) + '" src="' + sSrc + '" />';
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return sRes;
|
|
},
|
|
CopyRun: function (Item, bUseSelection) {
|
|
var sRes = "";
|
|
var ParaStart = 0;
|
|
var ParaEnd = Item.Content.length;
|
|
if (true == bUseSelection) {
|
|
ParaStart = Item.Selection.StartPos;
|
|
ParaEnd = Item.Selection.EndPos;
|
|
if (ParaStart > ParaEnd) {
|
|
var Temp2 = ParaEnd;
|
|
ParaEnd = ParaStart;
|
|
ParaStart = Temp2;
|
|
}
|
|
}
|
|
for (var i = ParaStart; i < ParaEnd; i++) {
|
|
sRes += this.ParseItem(Item.Content[i]);
|
|
}
|
|
return sRes;
|
|
},
|
|
CopyRunContent: function (Container, bUseSelection) {
|
|
var sRes = "";
|
|
var ParaStart = 0;
|
|
var ParaEnd = Container.Content.length - 1;
|
|
if (true == bUseSelection) {
|
|
ParaStart = Container.Selection.StartPos;
|
|
ParaEnd = Container.Selection.EndPos;
|
|
if (ParaStart > ParaEnd) {
|
|
var Temp2 = ParaEnd;
|
|
ParaEnd = ParaStart;
|
|
ParaStart = Temp2;
|
|
}
|
|
}
|
|
for (var i = ParaStart; i <= ParaEnd; i++) {
|
|
var item = Container.Content[i];
|
|
if (para_Run == item.Type) {
|
|
var sRunContent = this.CopyRun(item, bUseSelection);
|
|
if (sRunContent) {
|
|
sRes += "<span";
|
|
var oStyle = this.parse_para_TextPr(item.CompiledPr);
|
|
if (oStyle && oStyle.style) {
|
|
sRes += ' style="' + oStyle.style + '"';
|
|
}
|
|
sRes += ">";
|
|
if (oStyle.tagstart) {
|
|
sRes += oStyle.tagstart;
|
|
}
|
|
sRes += sRunContent;
|
|
if (oStyle.tagend) {
|
|
sRes += oStyle.tagend;
|
|
}
|
|
sRes += "</span>";
|
|
}
|
|
} else {
|
|
if (para_Hyperlink == item.Type) {
|
|
sRes += "<a";
|
|
var sValue = item.Get_Value();
|
|
var sToolTip = item.Get_ToolTip();
|
|
if (null != sValue && "" != sValue) {
|
|
sRes += ' href="' + CopyPasteCorrectString(sValue) + '"';
|
|
}
|
|
if (null != sToolTip && "" != sToolTip) {
|
|
sRes += ' title="' + CopyPasteCorrectString(sToolTip) + '"';
|
|
}
|
|
sRes += ">";
|
|
sRes += this.CopyRunContent(item);
|
|
sRes += "</a>";
|
|
}
|
|
}
|
|
}
|
|
return sRes;
|
|
},
|
|
CopyParagraph: function (oDomTarget, Item, bLast, bUseSelection, aDocumentContent, nDocumentContentIndex) {
|
|
var oDocument = this.oDocument;
|
|
this.Para = null;
|
|
var styleId = Item.Style_Get();
|
|
if (styleId) {
|
|
var styleName = oDocument.Styles.Get_Name(styleId).toLowerCase();
|
|
if (0 == styleName.indexOf("heading")) {
|
|
var nLevel = parseInt(styleName.substring("heading".length));
|
|
if (1 <= nLevel && nLevel <= 6) {
|
|
this.Para = document.createElement("h" + nLevel);
|
|
}
|
|
}
|
|
}
|
|
if (null == this.Para) {
|
|
this.Para = document.createElement("p");
|
|
}
|
|
this.bOccurEndPar = false;
|
|
var oNumPr;
|
|
var bIsNullNumPr = false;
|
|
oNumPr = Item.Numbering_Get();
|
|
bIsNullNumPr = (null == oNumPr || 0 == oNumPr.NumId);
|
|
if (bIsNullNumPr) {
|
|
this.CommitList(oDomTarget);
|
|
} else {
|
|
var bBullet = false;
|
|
var sListStyle = "";
|
|
var aNum = this.oDocument.Numbering.Get_AbstractNum(oNumPr.NumId);
|
|
if (null != aNum) {
|
|
var LvlPr = aNum.Lvl[oNumPr.Lvl];
|
|
if (null != LvlPr) {
|
|
switch (LvlPr.Format) {
|
|
case numbering_numfmt_Decimal:
|
|
sListStyle = "decimal";
|
|
break;
|
|
case numbering_numfmt_LowerRoman:
|
|
sListStyle = "lower-roman";
|
|
break;
|
|
case numbering_numfmt_UpperRoman:
|
|
sListStyle = "upper-roman";
|
|
break;
|
|
case numbering_numfmt_LowerLetter:
|
|
sListStyle = "lower-alpha";
|
|
break;
|
|
case numbering_numfmt_UpperLetter:
|
|
sListStyle = "upper-alpha";
|
|
break;
|
|
default:
|
|
sListStyle = "disc";
|
|
bBullet = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
var Li = document.createElement("li");
|
|
Li.setAttribute("style", "list-style-type: " + sListStyle);
|
|
Li.appendChild(this.Para);
|
|
if (bBullet) {
|
|
this.Ul.appendChild(Li);
|
|
} else {
|
|
this.Ol.appendChild(Li);
|
|
}
|
|
}
|
|
this.Para.innerHTML = this.CopyRunContent(Item, bUseSelection);
|
|
if (bLast && false == this.bOccurEndPar) {
|
|
if (false == bIsNullNumPr) {
|
|
var li = this.Para.parentNode;
|
|
var ul = li.parentNode;
|
|
ul.removeChild(li);
|
|
this.CommitList(oDomTarget);
|
|
}
|
|
for (var i = 0; i < this.Para.childNodes.length; i++) {
|
|
oDomTarget.appendChild(this.Para.childNodes[i].cloneNode(true));
|
|
}
|
|
} else {
|
|
if (this.Para.childNodes.length == 0) {
|
|
this.Para.appendChild(document.createTextNode("\xa0"));
|
|
}
|
|
if (bIsNullNumPr) {
|
|
oDomTarget.appendChild(this.Para);
|
|
}
|
|
}
|
|
},
|
|
_BorderToStyle: function (border, name) {
|
|
var res = "";
|
|
if (border_None == border.Value) {
|
|
res += name + ":none;";
|
|
} else {
|
|
var size = 0.5;
|
|
var color = {
|
|
r: 0,
|
|
g: 0,
|
|
b: 0
|
|
};
|
|
if (null != border.Size) {
|
|
size = border.Size * g_dKoef_mm_to_pt;
|
|
}
|
|
if (null != border.Color) {
|
|
color = border.Color;
|
|
}
|
|
res += name + ":" + size + "pt solid " + this.RGBToCSS(color) + ";";
|
|
}
|
|
return res;
|
|
},
|
|
_MarginToStyle: function (margins, styleName) {
|
|
var res = "";
|
|
var nMarginLeft = 1.9;
|
|
var nMarginTop = 0;
|
|
var nMarginRight = 1.9;
|
|
var nMarginBottom = 0;
|
|
if (null != margins.Left && tblwidth_Mm == margins.Left.Type && null != margins.Left.W) {
|
|
nMarginLeft = margins.Left.W;
|
|
}
|
|
if (null != margins.Top && tblwidth_Mm == margins.Top.Type && null != margins.Top.W) {
|
|
nMarginTop = margins.Top.W;
|
|
}
|
|
if (null != margins.Right && tblwidth_Mm == margins.Right.Type && null != margins.Right.W) {
|
|
nMarginRight = margins.Right.W;
|
|
}
|
|
if (null != margins.Bottom && tblwidth_Mm == margins.Bottom.Type && null != margins.Bottom.W) {
|
|
nMarginBottom = margins.Bottom.W;
|
|
}
|
|
res = styleName + ":" + (nMarginTop * g_dKoef_mm_to_pt) + "pt " + (nMarginRight * g_dKoef_mm_to_pt) + "pt " + (nMarginBottom * g_dKoef_mm_to_pt) + "pt " + (nMarginLeft * g_dKoef_mm_to_pt) + "pt;";
|
|
return res;
|
|
},
|
|
_BordersToStyle: function (borders, bUseInner, bUseBetween, mso, alt) {
|
|
var res = "";
|
|
if (null == mso) {
|
|
mso = "";
|
|
}
|
|
if (null == alt) {
|
|
alt = "";
|
|
}
|
|
if (null != borders.Left) {
|
|
res += this._BorderToStyle(borders.Left, mso + "border-left" + alt);
|
|
}
|
|
if (null != borders.Top) {
|
|
res += this._BorderToStyle(borders.Top, mso + "border-top" + alt);
|
|
}
|
|
if (null != borders.Right) {
|
|
res += this._BorderToStyle(borders.Right, mso + "border-right" + alt);
|
|
}
|
|
if (null != borders.Bottom) {
|
|
res += this._BorderToStyle(borders.Bottom, mso + "border-bottom" + alt);
|
|
}
|
|
if (bUseInner) {
|
|
if (null != borders.InsideV) {
|
|
res += this._BorderToStyle(borders.InsideV, "mso-border-insidev");
|
|
}
|
|
if (null != borders.InsideH) {
|
|
res += this._BorderToStyle(borders.InsideH, "mso-border-insideh");
|
|
}
|
|
}
|
|
if (bUseBetween) {
|
|
if (null != borders.Between) {
|
|
res += this._BorderToStyle(borders.Between, "mso-border-between");
|
|
}
|
|
}
|
|
return res;
|
|
},
|
|
_MergeProp: function (elem1, elem2) {
|
|
if (!elem1 || !elem2) {
|
|
return;
|
|
}
|
|
var p, v;
|
|
for (p in elem2) {
|
|
if (elem2.hasOwnProperty(p) && false == elem1.hasOwnProperty(p)) {
|
|
v = elem2[p];
|
|
if (null != v) {
|
|
elem1[p] = v;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
CopyDocument: function (oDomTarget, oDocument, bUseSelection) {
|
|
var Start = 0;
|
|
var End = 0;
|
|
if (bUseSelection) {
|
|
if (true === oDocument.Selection.Use) {
|
|
if (selectionflag_DrawingObject === oDocument.Selection.Flag) {
|
|
this.Para = document.createElement("p");
|
|
this.Para.innerHTML = this.ParseItem(oDocument.Selection.Data.DrawingObject);
|
|
for (var i = 0; i < this.Para.childNodes.length; i++) {
|
|
this.ElemToSelect.appendChild(this.Para.childNodes[i].cloneNode(true));
|
|
}
|
|
} else {
|
|
Start = oDocument.Selection.StartPos;
|
|
End = oDocument.Selection.EndPos;
|
|
if (Start > End) {
|
|
var Temp = End;
|
|
End = Start;
|
|
Start = Temp;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
Start = 0;
|
|
End = oDocument.Content.length - 1;
|
|
}
|
|
for (var Index = Start; Index <= End; Index++) {
|
|
var Item = oDocument.Content[Index];
|
|
if (type_Paragraph === Item.GetType()) {
|
|
this.CopyParagraph(oDomTarget, Item, Index == End, bUseSelection, oDocument.Content, Index);
|
|
}
|
|
}
|
|
this.CommitList(oDomTarget);
|
|
},
|
|
Start: function (node) {
|
|
this.oBinaryFileWriter.CopyStart();
|
|
var oDocument = this.oDocument;
|
|
if (g_bIsDocumentCopyPaste) {
|
|
if (!this.api.DocumentReaderMode) {
|
|
var Def_pPr = oDocument.Styles.Default.ParaPr;
|
|
if (docpostype_HdrFtr === oDocument.CurPos.Type) {
|
|
if (null != oDocument.HdrFtr && null != oDocument.HdrFtr.CurHdrFtr && null != oDocument.HdrFtr.CurHdrFtr.Content) {
|
|
oDocument = oDocument.HdrFtr.CurHdrFtr.Content;
|
|
}
|
|
}
|
|
if (oDocument.CurPos.Type == docpostype_FlowObjects) {
|
|
var oData = oDocument.Selection.Data.FlowObject;
|
|
switch (oData.Get_Type()) {
|
|
case flowobject_Image:
|
|
this.Para = document.createElement("p");
|
|
var sInnerHtml = this.ParseItem(oData);
|
|
var oImg = oData;
|
|
var sSrc = oImg.Img;
|
|
if (sSrc.length > 0) {
|
|
sSrc = this.getSrc(sSrc);
|
|
if (this.api.DocumentReaderMode) {
|
|
sInnerHtml += '<img style="max-width:100%;" width="' + Math.round(oImg.W * g_dKoef_mm_to_pix) + '" height="' + Math.round(oImg.H * g_dKoef_mm_to_pix) + '" src="' + sSrc + '" />';
|
|
} else {
|
|
sInnerHtml += '<img width="' + Math.round(oImg.W * g_dKoef_mm_to_pix) + '" height="' + Math.round(oImg.H * g_dKoef_mm_to_pix) + '" src="' + sSrc + '" />';
|
|
}
|
|
}
|
|
this.Para.innerHTML = sInnerHtml;
|
|
this.ElemToSelect.appendChild(this.Para);
|
|
return;
|
|
case flowobject_Table:
|
|
if (null != oData.Table && null != oData.Table.CurCell && null != oData.Table.CurCell.Content) {
|
|
oDocument = oData.Table.CurCell.Content;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (oDocument.CurPos.Type === docpostype_DrawingObjects) {
|
|
var content = oDocument.DrawingObjects.getTargetDocContent();
|
|
if (content) {
|
|
oDocument = content;
|
|
} else {
|
|
if (oDocument.DrawingObjects.selection.groupSelection && oDocument.DrawingObjects.selection.groupSelection.selectedObjects && oDocument.DrawingObjects.selection.groupSelection.selectedObjects.length) {
|
|
var s_arr = oDocument.DrawingObjects.selection.groupSelection.selectedObjects;
|
|
this.Para = document.createElement("p");
|
|
if (copyPasteUseBinary) {
|
|
var newArr = null;
|
|
var tempAr = null;
|
|
if (s_arr) {
|
|
tempAr = [];
|
|
for (var k = 0; k < s_arr.length; k++) {
|
|
tempAr[k] = s_arr[k].y;
|
|
}
|
|
}
|
|
tempAr.sort(fSortAscending);
|
|
newArr = [];
|
|
for (var k = 0; k < tempAr.length; k++) {
|
|
var absOffsetY = tempAr[k];
|
|
for (var i = 0; i < s_arr.length; i++) {
|
|
if (absOffsetY == s_arr[i].y) {
|
|
newArr[k] = s_arr[i];
|
|
}
|
|
}
|
|
}
|
|
if (newArr != null) {
|
|
s_arr = newArr;
|
|
}
|
|
}
|
|
for (var i = 0; i < s_arr.length; ++i) {
|
|
var paraDrawing = s_arr[i].parent ? s_arr[i].parent : s_arr[i].group.parent;
|
|
var graphicObj = s_arr[i];
|
|
if (isRealObject(paraDrawing.Parent)) {
|
|
var base64_img = paraDrawing.getBase64Img();
|
|
if (copyPasteUseBinary) {
|
|
var wrappingType = oDocument.DrawingObjects.selection.groupSelection.parent.wrappingType;
|
|
var DrawingType = oDocument.DrawingObjects.selection.groupSelection.parent.DrawingType;
|
|
var tempParagraph = new Paragraph(oDocument, oDocument, 0, 0, 0, 0, 0);
|
|
var index = 0;
|
|
tempParagraph.Content.unshift(new ParaRun());
|
|
var paraRun = tempParagraph.Content[index];
|
|
paraRun.Content.unshift(new ParaDrawing());
|
|
paraRun.Content[index].wrappingType = wrappingType;
|
|
paraRun.Content[index].DrawingType = DrawingType;
|
|
paraRun.Content[index].GraphicObj = graphicObj;
|
|
paraRun.Selection.EndPos = index + 1;
|
|
paraRun.Selection.StartPos = index;
|
|
paraRun.Selection.Use = true;
|
|
tempParagraph.Selection.EndPos = index + 1;
|
|
tempParagraph.Selection.StartPos = index;
|
|
tempParagraph.Selection.Use = true;
|
|
tempParagraph.bFromDocument = true;
|
|
this.oBinaryFileWriter.CopyParagraph(tempParagraph);
|
|
}
|
|
var src = this.getSrc(base64_img);
|
|
this.Para.innerHTML += '<img style="max-width:100%;" width="' + Math.round(paraDrawing.absExtX * g_dKoef_mm_to_pix) + '" height="' + Math.round(paraDrawing.absExtY * g_dKoef_mm_to_pix) + '" src="' + src + '" />';
|
|
this.ElemToSelect.appendChild(this.Para);
|
|
}
|
|
}
|
|
if (copyPasteUseBinary) {
|
|
this.oBinaryFileWriter.CopyEnd();
|
|
var sBase64 = this.oBinaryFileWriter.GetResult();
|
|
if (this.ElemToSelect.children && this.ElemToSelect.children.length == 1 && window.USER_AGENT_SAFARI_MACOS) {
|
|
$(this.ElemToSelect.children[0]).css("font-weight", "normal");
|
|
$(this.ElemToSelect.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.ElemToSelect.children[0]) {
|
|
$(this.ElemToSelect.children[0]).addClass("docData;" + sBase64);
|
|
}
|
|
}
|
|
} else {
|
|
var gr_objects = oDocument.DrawingObjects;
|
|
var selection_array = gr_objects.selectedObjects;
|
|
this.Para = document.createElement("span");
|
|
var selectionTrue;
|
|
var selectIndex;
|
|
for (var i = 0; i < selection_array.length; ++i) {
|
|
var cur_element = selection_array[i].parent;
|
|
var base64_img = cur_element.getBase64Img();
|
|
var src = this.getSrc(base64_img);
|
|
this.Para.innerHTML = '<img style="max-width:100%;" width="' + Math.round(cur_element.W * g_dKoef_mm_to_pix) + '" height="' + Math.round(cur_element.H * g_dKoef_mm_to_pix) + '" src="' + src + '" />';
|
|
this.ElemToSelect.appendChild(this.Para);
|
|
if (copyPasteUseBinary) {
|
|
var paragraph = cur_element.Parent;
|
|
var inIndex;
|
|
var paragraphIndex;
|
|
var content;
|
|
var curParaRun;
|
|
for (var k = 0; k < paragraph.Content.length; k++) {
|
|
content = paragraph.Content[k].Content;
|
|
for (var n = 0; n < content.length; n++) {
|
|
if (content[n] == cur_element) {
|
|
curParaRun = paragraph.Content[k];
|
|
inIndex = n;
|
|
paragraphIndex = k;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
selectionTrue = {
|
|
EndPos: curParaRun.Selection.EndPos,
|
|
StartPos: curParaRun.Selection.StartPos,
|
|
EndPosParagraph: paragraph.Selection.EndPos,
|
|
StartPosParagraph: paragraph.Selection.StartPos
|
|
};
|
|
curParaRun.Selection.EndPos = inIndex + 1;
|
|
curParaRun.Selection.StartPos = inIndex;
|
|
curParaRun.Selection.Use = true;
|
|
paragraph.Selection.EndPos = paragraphIndex;
|
|
paragraph.Selection.StartPos = paragraphIndex;
|
|
paragraph.Selection.Use = true;
|
|
this.oBinaryFileWriter.CopyParagraph(paragraph);
|
|
curParaRun.Selection.StartPos = selectionTrue.StartPos;
|
|
curParaRun.Selection.EndPos = selectionTrue.EndPos;
|
|
paragraph.Selection.StartPos = selectionTrue.StartPosParagraph;
|
|
paragraph.Selection.EndPos = selectionTrue.EndPosParagraph;
|
|
}
|
|
}
|
|
if (copyPasteUseBinary) {
|
|
this.oBinaryFileWriter.CopyEnd();
|
|
var sBase64 = this.oBinaryFileWriter.GetResult();
|
|
if (this.ElemToSelect.children && this.ElemToSelect.children.length == 1 && window.USER_AGENT_SAFARI_MACOS) {
|
|
$(this.ElemToSelect.children[0]).css("font-weight", "normal");
|
|
$(this.ElemToSelect.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.ElemToSelect.children[0]) {
|
|
$(this.ElemToSelect.children[0]).addClass("docData;" + sBase64);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (true === oDocument.Selection.Use) {
|
|
this.CopyDocument(this.ElemToSelect, oDocument, true);
|
|
}
|
|
} else {
|
|
this.CopyDocument(this.ElemToSelect, oDocument, false);
|
|
}
|
|
}
|
|
this.oBinaryFileWriter.CopyEnd();
|
|
if (copyPasteUseBinary && this.oBinaryFileWriter.copyParams.itemCount > 0) {
|
|
var sBase64 = this.oBinaryFileWriter.GetResult();
|
|
if (this.ElemToSelect.children && this.ElemToSelect.children.length == 1 && window.USER_AGENT_SAFARI_MACOS) {
|
|
$(this.ElemToSelect.children[0]).css("font-weight", "normal");
|
|
$(this.ElemToSelect.children[0]).wrap(document.createElement("b"));
|
|
}
|
|
if (this.ElemToSelect.children[0]) {
|
|
$(this.ElemToSelect.children[0]).addClass("docData;" + sBase64);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
window["Asc"].CopyProcessor = CopyProcessor;
|
|
window["Asc"].Clipboard = Clipboard;
|
|
window["Asc"].pasteFromBinaryWord = pasteFromBinaryWord;
|
|
window["Asc"].DocumentContentBounds = DocumentContentBounds;
|
|
})(jQuery, window);
|
|
window.USER_AGENT_MACOS = AscBrowser.isMacOs;
|
|
window.USER_AGENT_SAFARI_MACOS = AscBrowser.isSafariMacOs;
|
|
window.USER_AGENT_IE = AscBrowser.isIE || AscBrowser.isOpera;
|
|
window.USER_AGENT_WEBKIT = AscBrowser.isWebkit;
|
|
window.GlobalPasteFlag = false;
|
|
window.GlobalPasteFlagCounter = 0;
|
|
var COPY_ELEMENT_ID2 = "clipboard-helper";
|
|
var PASTE_ELEMENT_ID2 = "wrd_pastebin";
|
|
var ELEMENT_DISPAY_STYLE2 = "none";
|
|
var COPYPASTE_ELEMENT_CLASS = "sdk-element";
|
|
var kElementTextId = "clipboard-helper-text";
|
|
var isNeedEmptyAfterCut = false;
|
|
var PASTE_EMPTY_COUNTER_MAX = 10;
|
|
var PASTE_EMPTY_COUNTER = 0;
|
|
var PASTE_EMPTY_USE = AscBrowser.isMozilla;
|
|
function CopyPasteCorrectString(str) {
|
|
var res = str;
|
|
res = res.replace(/&/g, "&");
|
|
res = res.replace(/</g, "<");
|
|
res = res.replace(/>/g, ">");
|
|
res = res.replace(/'/g, "'");
|
|
res = res.replace(/"/g, """);
|
|
return res;
|
|
}
|
|
if (window.USER_AGENT_SAFARI_MACOS) {
|
|
var PASTE_ELEMENT_ID2 = "clipboard-helper";
|
|
var ELEMENT_DISPAY_STYLE2 = "block";
|
|
}
|
|
function SafariIntervalFocus2() {
|
|
var api = window["Asc"]["editor"];
|
|
if (api) {
|
|
if ((api.wb && api.wb.cellEditor && api.wb.cellEditor != null && api.wb.cellEditor.isTopLineActive) || (api.wb && api.wb.getWorksheet() && api.wb.getWorksheet().isSelectionDialogMode)) {
|
|
return;
|
|
}
|
|
var pastebin = document.getElementById(COPY_ELEMENT_ID2);
|
|
var pastebinText = document.getElementById(kElementTextId);
|
|
if (pastebinText && (api.wb && api.wb.getWorksheet() && api.wb.getWorksheet().isCellEditMode) && api.IsFocus) {
|
|
pastebinText.focus();
|
|
} else {
|
|
if (pastebin && api.IsFocus) {
|
|
pastebin.focus();
|
|
} else {
|
|
if (!pastebin || !pastebinText) {
|
|
Editor_CopyPaste_Create2(api);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function Editor_Copy_Event_Excel(e, ElemToSelect, isCut) {
|
|
var api = window["Asc"]["editor"];
|
|
var wb = api.wb;
|
|
var ws = wb.getWorksheet();
|
|
var sBase64 = wb.clipboard.copyRange(ws.getSelectedRange(), ws, isCut, true);
|
|
if (isCut) {
|
|
ws.emptySelection(c_oAscCleanOptions.All);
|
|
}
|
|
if (sBase64) {
|
|
e.clipboardData.setData("text/x-custom", sBase64);
|
|
}
|
|
e.clipboardData.setData("text/html", ElemToSelect.innerHTML);
|
|
e.clipboardData.setData("text/plain", ElemToSelect.innerText);
|
|
}
|
|
function Editor_CopyPaste_Create2(api) {
|
|
var ElemToSelect = document.createElement("div");
|
|
ElemToSelect.id = COPY_ELEMENT_ID2;
|
|
ElemToSelect.setAttribute("class", COPYPASTE_ELEMENT_CLASS);
|
|
ElemToSelect.style.left = "0px";
|
|
ElemToSelect.style.top = "100px";
|
|
if (window.USER_AGENT_MACOS) {
|
|
ElemToSelect.style.width = "1000px";
|
|
} else {
|
|
ElemToSelect.style.width = "10000px";
|
|
}
|
|
ElemToSelect.style.height = "100px";
|
|
ElemToSelect.style.overflow = "hidden";
|
|
ElemToSelect.style.zIndex = -1000;
|
|
ElemToSelect.style.MozUserSelect = "text";
|
|
ElemToSelect.style["-khtml-user-select"] = "text";
|
|
ElemToSelect.style["-o-user-select"] = "text";
|
|
ElemToSelect.style["user-select"] = "text";
|
|
ElemToSelect.style["-webkit-user-select"] = "text";
|
|
ElemToSelect.setAttribute("contentEditable", true);
|
|
ElemToSelect.style.lineHeight = "1px";
|
|
ElemToSelect.oncopy = function (e) {
|
|
var api = window["Asc"]["editor"];
|
|
if (api.controller.isCellEditMode) {
|
|
return;
|
|
}
|
|
Editor_Copy_Event_Excel(e, ElemToSelect);
|
|
e.preventDefault();
|
|
};
|
|
ElemToSelect.oncut = function (e) {
|
|
var api = window["Asc"]["editor"];
|
|
if (api.controller.isCellEditMode) {
|
|
return;
|
|
}
|
|
Editor_Copy_Event_Excel(e, ElemToSelect, true);
|
|
e.preventDefault();
|
|
};
|
|
ElemToSelect.onpaste = function (e) {
|
|
var api = window["Asc"]["editor"];
|
|
var wb = api.wb;
|
|
var ws = wb.getWorksheet();
|
|
wb.clipboard._bodyPaste(ws, e);
|
|
e.preventDefault();
|
|
};
|
|
ElemToSelect["onbeforecut"] = function (e) {
|
|
var api = window["Asc"]["editor"];
|
|
if (api.controller.isCellEditMode) {
|
|
return;
|
|
}
|
|
var selection = window.getSelection();
|
|
var rangeToSelect = document.createRange();
|
|
ElemToSelect.innerText = " ";
|
|
rangeToSelect.selectNodeContents(ElemToSelect);
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
};
|
|
ElemToSelect["onbeforecopy"] = function (e) {
|
|
var api = window["Asc"]["editor"];
|
|
if (api.controller.isCellEditMode) {
|
|
return;
|
|
}
|
|
var selection = window.getSelection();
|
|
var rangeToSelect = document.createRange();
|
|
ElemToSelect.innerText = " ";
|
|
rangeToSelect.selectNodeContents(ElemToSelect);
|
|
selection.removeAllRanges();
|
|
selection.addRange(rangeToSelect);
|
|
};
|
|
document.body.appendChild(ElemToSelect);
|
|
var elementText = document.createElement("textarea");
|
|
elementText.id = kElementTextId;
|
|
elementText.style.position = "absolute";
|
|
if (window.USER_AGENT_MACOS) {
|
|
ElemToSelect.style.width = "100px";
|
|
} else {
|
|
ElemToSelect.style.width = "10000px";
|
|
}
|
|
elementText.style.height = "100px";
|
|
elementText.style.left = "0px";
|
|
elementText.style.top = "100px";
|
|
elementText.style.overflow = "hidden";
|
|
elementText.style.zIndex = -1000;
|
|
elementText.style.display = ELEMENT_DISPAY_STYLE2;
|
|
elementText.setAttribute("contentEditable", true);
|
|
elementText.setAttribute("class", COPYPASTE_ELEMENT_CLASS);
|
|
elementText["onbeforecopy"] = function (e) {
|
|
if ((api.wb && api.wb.getWorksheet() && api.wb.getWorksheet().isCellEditMode)) {
|
|
var v = api.wb.cellEditor.copySelection();
|
|
if (v) {
|
|
api.wb.clipboard.copyCellValue(v);
|
|
}
|
|
}
|
|
};
|
|
elementText["onbeforecut"] = function (e) {
|
|
api.wb.clipboard.copyRange(api.wb.getWorksheet().getSelectedRange(), api.wb.getWorksheet());
|
|
if (isNeedEmptyAfterCut == true) {
|
|
isNeedEmptyAfterCut = false;
|
|
if ((api.wb && api.wb.getWorksheet() && api.wb.getWorksheet().isCellEditMode)) {
|
|
var v = api.wb.cellEditor.cutSelection();
|
|
if (v) {
|
|
api.wb.clipboard.copyCellValue(v);
|
|
}
|
|
}
|
|
} else {
|
|
isNeedEmptyAfterCut = true;
|
|
}
|
|
};
|
|
document.body.appendChild(elementText);
|
|
}
|
|
function CreateBinaryReader(szSrc, offset, srcLen) {
|
|
var nWritten = 0;
|
|
var index = -1 + offset;
|
|
var dst_len = "";
|
|
for (; index < srcLen;) {
|
|
index++;
|
|
var _c = szSrc.charCodeAt(index);
|
|
if (_c == ";".charCodeAt(0)) {
|
|
index++;
|
|
break;
|
|
}
|
|
dst_len += String.fromCharCode(_c);
|
|
}
|
|
var dstLen = parseInt(dst_len);
|
|
if (isNaN(dstLen)) {
|
|
return null;
|
|
}
|
|
var pointer = g_memory.Alloc(dstLen);
|
|
var stream = new FT_Stream2(pointer.data, dstLen);
|
|
stream.obj = pointer.obj;
|
|
var dstPx = stream.data;
|
|
if (window.chrome) {
|
|
while (index < srcLen) {
|
|
var dwCurr = 0;
|
|
var i;
|
|
var nBits = 0;
|
|
for (i = 0; i < 4; i++) {
|
|
if (index >= srcLen) {
|
|
break;
|
|
}
|
|
var nCh = DecodeBase64Char(szSrc.charCodeAt(index++));
|
|
if (nCh == -1) {
|
|
i--;
|
|
continue;
|
|
}
|
|
dwCurr <<= 6;
|
|
dwCurr |= nCh;
|
|
nBits += 6;
|
|
}
|
|
dwCurr <<= 24 - nBits;
|
|
for (i = 0; i < nBits / 8; i++) {
|
|
dstPx[nWritten++] = ((dwCurr & 16711680) >>> 16);
|
|
dwCurr <<= 8;
|
|
}
|
|
}
|
|
} else {
|
|
var p = b64_decode;
|
|
while (index < srcLen) {
|
|
var dwCurr = 0;
|
|
var i;
|
|
var nBits = 0;
|
|
for (i = 0; i < 4; i++) {
|
|
if (index >= srcLen) {
|
|
break;
|
|
}
|
|
var nCh = p[szSrc.charCodeAt(index++)];
|
|
if (nCh == undefined) {
|
|
i--;
|
|
continue;
|
|
}
|
|
dwCurr <<= 6;
|
|
dwCurr |= nCh;
|
|
nBits += 6;
|
|
}
|
|
dwCurr <<= 24 - nBits;
|
|
for (i = 0; i < nBits / 8; i++) {
|
|
dstPx[nWritten++] = ((dwCurr & 16711680) >>> 16);
|
|
dwCurr <<= 8;
|
|
}
|
|
}
|
|
}
|
|
return stream;
|
|
}
|
|
function Common_CmpObj2(Obj1, Obj2) {
|
|
if (!Obj1 || !Obj2 || typeof(Obj1) != typeof(Obj2)) {
|
|
return false;
|
|
}
|
|
var p, v1, v2;
|
|
for (p in Obj2) {
|
|
if (!Obj1.hasOwnProperty(p)) {
|
|
return false;
|
|
}
|
|
}
|
|
for (p in Obj1) {
|
|
if (Obj2.hasOwnProperty(p)) {
|
|
v1 = Obj1[p];
|
|
v2 = Obj2[p];
|
|
if (v1 && v2 && "object" === typeof(v1) && "object" === typeof(v2)) {
|
|
if (false == Common_CmpObj2(v1, v2)) {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (v1 != v2) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
} |