📄 serial.js
字号:
/** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var textNode = pElement.firstChild; if (!textNode) { return ""; } var text = textNode.data; while (textNode.nextSibling) { textNode = textNode.nextSibling; text += textNode.data; } return text; } }, $load: function() { Echo.Serial.addPropertyTranslator("s", this); }});/** * Date Property Translator Singleton. */Echo.Serial.Date = Core.extend(Echo.Serial.PropertyTranslator, { $static: { _expr: /(\d{4})\.(\d{2}).(\d{2})/, /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var value = Echo.Serial.String.toProperty(client, pElement); var result = this._expr.exec(value); if (!result) { return null; } return new Date(result[1], parseInt(result[2], 10) - 1, result[3]); }, /** @see Echo.Serial.PropertyTranslator#toXml */ toXml: function(client, pElement, value) { pElement.appendChild(pElement.ownerDocument.createTextNode( value.getFullYear() + "." + (value.getMonth() + 1) + "." + value.getDate())); } }, $load: function() { Echo.Serial.addPropertyTranslator("d", this); Echo.Serial.addPropertyTranslatorByType(Date, this); }});/** * Map (Associative Array) Property Translator Singleton. */Echo.Serial.Map = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var mapObject = {}; var element = pElement.firstChild; while (element) { if (element.nodeType != 1) { continue; } Echo.Serial.loadProperty(client, element, null, mapObject, null); element = element.nextSibling; } return mapObject; } }, $load: function() { Echo.Serial.addPropertyTranslator("m", this); }});/** * Alignment Property Translator Singleton. */Echo.Serial.Alignment = Core.extend(Echo.Serial.PropertyTranslator, { $static: { _HORIZONTAL_MAP: { "leading": "leading", "trailing": "trailing", "left": "left", "center": "center", "right": "right" }, _VERTICAL_MAP: { "top": "top", "center": "middle", "bottom": "bottom" }, /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var element = Core.Web.DOM.getChildElementByTagName(pElement, "a"); var h = this._HORIZONTAL_MAP[element.getAttribute("h")]; var v = this._VERTICAL_MAP[element.getAttribute("v")]; if (h) { if (v) { return { horizontal: h, vertical: v }; } return h; } if (v) { return v; } return null; } }, $load: function() { Echo.Serial.addPropertyTranslator("Alignment", this); Echo.Serial.addPropertyTranslator("AL", this); }});/** * Border Property Translator Singleton. */Echo.Serial.Border = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { if (pElement.firstChild.nodeType == 3) { // Text content return pElement.firstChild.data; } else if (pElement.getAttribute("v")) { return pElement.getAttribute("v"); } else { var element = Core.Web.DOM.getChildElementByTagName(pElement, "b"); var border = {}; var value = element.getAttribute("t"); if (value) { border.top = value; value = element.getAttribute("r"); if (value) { border.right = value; value = element.getAttribute("b"); if (value) { border.bottom = value; value = element.getAttribute("l"); if (value) { border.left = value; } } } } else { throw new Error("Invalid multi-sided border: no sides set."); } return border; } } }, $load: function() { Echo.Serial.addPropertyTranslator("Border", this); Echo.Serial.addPropertyTranslator("BO", this); }});/** * FillImage Property Translator Singleton. */Echo.Serial.FillImage = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** * Parses a <fi> fill image element. * * @param {Echo.Client} client the client * @param {Element} fiElement the fill image element * @return the parsed fill image * @type #FillImage */ parseElement: function(client, fiElement) { var url = fiElement.getAttribute("u"); if (client.decompressUrl) { url = client.decompressUrl(url); } var repeat = fiElement.getAttribute("r"); var x = fiElement.getAttribute("x"); var y = fiElement.getAttribute("y"); if (repeat || x || y) { return { url: url, repeat: repeat, x: x, y: y }; } else { return url; } }, /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var element = Core.Web.DOM.getChildElementByTagName(pElement, "fi"); return this.parseElement(client, element); } }, $load: function() { Echo.Serial.addPropertyTranslator("FillImage", this); Echo.Serial.addPropertyTranslator("FI", this); }});/** * FillImageBorder Property Translator Singleton. */Echo.Serial.FillImageBorder = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** * (Array) mapping between border indices and property names. * @type Array */ _NAMES: [ "topLeft", "top", "topRight", "left", "right", "bottomLeft", "bottom", "bottomRight" ], /** * Parses a <fbi> fill image border element. * * @param {Echo.Client} client the client * @param {Element} fibElement the fill image border element * @return the parsed fill image border * @type #FillImageBorder */ _parseElement: function(client, fibElement) { var fillImageBorder = { contentInsets: fibElement.getAttribute("ci") ? fibElement.getAttribute("ci") : null, borderInsets: fibElement.getAttribute("bi") ? fibElement.getAttribute("bi") : null, color: fibElement.getAttribute("bc") }; var element = fibElement.firstChild; var i = 0; while(element) { if (element.nodeType == 1) { if (element.nodeName == "fi") { fillImageBorder[this._NAMES[i]] = Echo.Serial.FillImage.parseElement(client, element); ++i; } else if (element.nodeName == "null-fi") { ++i; } } element = element.nextSibling; } if (!(i === 0 || i == 8)) { throw new Error("Invalid FillImageBorder image count: " + i); } return fillImageBorder; }, /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var element = Core.Web.DOM.getChildElementByTagName(pElement, "fib"); return Echo.Serial.FillImageBorder._parseElement(client, element); } }, $load: function() { Echo.Serial.addPropertyTranslator("FillImageBorder", this); Echo.Serial.addPropertyTranslator("FIB", this); }});/** * Font Property Translator Singleton. */Echo.Serial.Font = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var element = Core.Web.DOM.getChildElementByTagName(pElement, "f"); var tfElements = Core.Web.DOM.getChildElementsByTagName(element, "tf"); var font = { }; if (tfElements.length > 1) { font.typeface = []; for (var i = 0; i < tfElements.length; ++i) { font.typeface[i] = tfElements[i].firstChild.data; } } else if (tfElements.length == 1) { font.typeface = tfElements[0].firstChild.data; } var size = element.getAttribute("sz"); if (size) { font.size = size; } if (element.getAttribute("bo")) { font.bold = true; } if (element.getAttribute("it")) { font.italic = true; } if (element.getAttribute("un")) { font.underline = true; } if (element.getAttribute("ov")) { font.overline = true; } if (element.getAttribute("lt")) { font.lineThrough = true; } return font; } }, $load: function() { Echo.Serial.addPropertyTranslator("Font", this); Echo.Serial.addPropertyTranslator("F", this); }});/** * ImageReference Property Translator Singleton. */Echo.Serial.ImageReference = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var url; if (pElement.firstChild.nodeType == 1) { var iElement = pElement.firstChild; url = iElement.firstChild.data; if (client.decompressUrl) { url = client.decompressUrl(url); } var width = iElement.getAttribute("w"); width = width ? width : null; var height = iElement.getAttribute("h"); height = height ? height : null; if (width || height) { return { url: url, width: width, height: height }; } else { return url; } } else { url = pElement.firstChild.data; return client.decompressUrl ? client.decompressUrl(url) : url; } } }, $load: function() { Echo.Serial.addPropertyTranslator("ImageReference", this); Echo.Serial.addPropertyTranslator("I", this); }});/** * LayoutData Property Translator Singleton. */Echo.Serial.LayoutData = Core.extend(Echo.Serial.PropertyTranslator, { $static: { /** @see Echo.Serial.PropertyTranslator#toProperty */ toProperty: function(client, pElement) { var layoutData = {}; var element = pElement.firstChild; while (element) { if (element.nodeType == 1) { if (element.nodeName == "p") { Echo.Serial.loadProperty(client, element, null, layoutData); } } element = element.nextSibling; } return layoutData; } }, $load: function() { Echo.Serial.addPropertyTranslator("LayoutData", this); Echo.Serial.addPropertyTranslator("L", this); }});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -