diff --git a/js/editor/EditorSession.js b/js/editor/EditorSession.js index 21ae8327..ea271fd3 100644 --- a/js/editor/EditorSession.js +++ b/js/editor/EditorSession.js @@ -44,8 +44,10 @@ define("webodf/editor/EditorSession", [ return [ "../../webodf/lib" ]; }; + runtime.loadClass("core.DomUtils"); runtime.loadClass("ops.OdtDocument"); runtime.loadClass("ops.Session"); + runtime.loadClass("odf.Namespaces"); runtime.loadClass("odf.OdfCanvas"); runtime.loadClass("gui.CaretManager"); runtime.loadClass("gui.Caret"); @@ -69,10 +71,11 @@ define("webodf/editor/EditorSession", [ currentStyleName = null, caretManager, odtDocument = session.getOdtDocument(), - textns = "urn:oasis:names:tc:opendocument:xmlns:text:1.0", + textns = odf.Namespaces.textns, fontStyles = document.createElement('style'), formatting = odtDocument.getFormatting(), styleHelper = new gui.StyleHelper(formatting), + domUtils = new core.DomUtils(), eventNotifier = new core.EventNotifier([ EditorSession.signalMemberAdded, EditorSession.signalMemberRemoved, @@ -89,6 +92,15 @@ define("webodf/editor/EditorSession", [ this.sessionView = new gui.SessionView(config.viewOptions, session, caretManager); this.availableFonts = []; + function isTrueForSelection(predicate) { + var cursor = odtDocument.getCursor(localMemberId); + // no own cursor yet/currently added? + if (!cursor) { + return false; + } + return predicate(cursor.getSelectedRange()); + } + /* * @return {Array.{!string}} */ @@ -192,11 +204,15 @@ define("webodf/editor/EditorSession", [ } function trackCurrentParagraph(info) { - if (info.paragraphElement !== currentParagraphNode) { - return; + var cursor = odtDocument.getCursor(localMemberId), + range = cursor && cursor.getSelectedRange(), + paragraphRange = odtDocument.getDOM().createRange(); + paragraphRange.selectNode(info.paragraphElement); + if ((range && domUtils.rangesIntersect(range, paragraphRange)) || info.paragraphElement === currentParagraphNode) { + self.emit(EditorSession.signalParagraphChanged, info); + checkParagraphStyleName(); } - self.emit(EditorSession.signalParagraphChanged, info); - checkParagraphStyleName(); + paragraphRange.detach(); } function onCursorAdded(cursor) { @@ -283,41 +299,15 @@ define("webodf/editor/EditorSession", [ return formatting.getAvailableParagraphStyles(); }; - this.isBold = function () { - var cursor = odtDocument.getCursor(localMemberId); - // no own cursor yet/currently added? - if (!cursor) { - return false; - } - return styleHelper.isBold(cursor.getSelectedRange()); - }; + this.isBold = isTrueForSelection.bind(self, styleHelper.isBold); + this.isItalic = isTrueForSelection.bind(self, styleHelper.isItalic); + this.hasUnderline = isTrueForSelection.bind(self, styleHelper.hasUnderline); + this.hasStrikeThrough = isTrueForSelection.bind(self, styleHelper.hasStrikeThrough); - this.isItalic = function () { - var cursor = odtDocument.getCursor(localMemberId); - // no own cursor yet/currently added? - if (!cursor) { - return false; - } - return styleHelper.isItalic(cursor.getSelectedRange()); - }; - - this.hasUnderline = function () { - var cursor = odtDocument.getCursor(localMemberId); - // no own cursor yet/currently added? - if (!cursor) { - return false; - } - return styleHelper.hasUnderline(cursor.getSelectedRange()); - }; - - this.hasStrikeThrough = function () { - var cursor = odtDocument.getCursor(localMemberId); - // no own cursor yet/currently added? - if (!cursor) { - return false; - } - return styleHelper.hasStrikeThrough(cursor.getSelectedRange()); - }; + this.isAlignedLeft = isTrueForSelection.bind(self, styleHelper.isAlignedLeft); + this.isAlignedCenter = isTrueForSelection.bind(self, styleHelper.isAlignedCenter); + this.isAlignedRight = isTrueForSelection.bind(self, styleHelper.isAlignedRight); + this.isAlignedJustified = isTrueForSelection.bind(self, styleHelper.isAlignedJustified); this.getCurrentParagraphStyle = function () { return currentNamedStyleName; diff --git a/js/editor/MemberListView.js b/js/editor/MemberListView.js index a7f768e6..ed6078fa 100644 --- a/js/editor/MemberListView.js +++ b/js/editor/MemberListView.js @@ -56,14 +56,14 @@ define("webodf/editor/MemberListView", */ function updateAvatarButton(memberId, memberDetails) { var node = memberListDiv.firstChild; - if (memberDetails === null) { - // 'null' here means finally unknown member - // (and not that the data is still loading) - memberDetails = { - memberid: memberId, fullname: "Unknown", - color: "black", imageurl: "avatar-joe.png" - }; + + // this takes care of incorrectly implemented MemberModels, + // which might end up returning undefined member data + if (!memberDetails) { + runtime.log("MemberModel sent undefined data for member \"" + memberId + "\"."); + return; } + while (node) { if (node.memberId === memberId) { node = node.firstChild; diff --git a/js/editor/Tools.js b/js/editor/Tools.js index 09a1bc31..3ee59426 100644 --- a/js/editor/Tools.js +++ b/js/editor/Tools.js @@ -41,12 +41,13 @@ define("webodf/editor/Tools", [ "dijit/form/Button", "dijit/form/DropDownButton", "dijit/Toolbar", + "webodf/editor/widgets/paragraphAlignment", "webodf/editor/widgets/simpleStyles", "webodf/editor/widgets/undoRedoMenu", "webodf/editor/widgets/toolbarWidgets/currentStyle", "webodf/editor/widgets/paragraphStylesDialog", "webodf/editor/widgets/zoomSlider"], - function (ready, MenuItem, DropDownMenu, Button, DropDownButton, Toolbar, SimpleStyles, UndoRedoMenu, CurrentStyle, ParagraphStylesDialog, ZoomSlider) { + function (ready, MenuItem, DropDownMenu, Button, DropDownButton, Toolbar, ParagraphAlignment, SimpleStyles, UndoRedoMenu, CurrentStyle, ParagraphStylesDialog, ZoomSlider) { "use strict"; return function Tools(args) { @@ -60,26 +61,18 @@ define("webodf/editor/Tools", [ paragraphStylesMenuItem, paragraphStylesDialog, simpleStyles, currentStyle, zoomSlider, undoRedoMenu, - editorSession; + editorSession, + paragraphAlignment, + sessionSubscribers = []; - this.setEditorSession = function(session) { + function setEditorSession(session) { editorSession = session; - if (undoRedoMenu) { - undoRedoMenu.setEditorSession(session); - } - if (simpleStyles) { - simpleStyles.setEditorSession(session); - } - if (currentStyle) { - currentStyle.setEditorSession(session); - } - if (zoomSlider) { - zoomSlider.setEditorSession(session); - } - if (paragraphStylesDialog) { - paragraphStylesDialog.setEditorSession(session); - } - }; + sessionSubscribers.forEach(function (subscriber) { + subscriber.setEditorSession(editorSession); + }); + } + + this.setEditorSession = setEditorSession; /** * @param {!function(!Object=)} callback, passing an error object in case of error @@ -101,7 +94,7 @@ define("webodf/editor/Tools", [ widget.placeAt(toolbar); widget.startup(); }); - undoRedoMenu.setEditorSession(editorSession); + sessionSubscribers.push(undoRedoMenu); } // Simple Style Selector [B, I, U, S] @@ -110,22 +103,32 @@ define("webodf/editor/Tools", [ widget.placeAt(toolbar); widget.startup(); }); - simpleStyles.setEditorSession(editorSession); + sessionSubscribers.push(simpleStyles); } + // Paragraph direct alignment buttons + if (args.directStylingEnabled) { + paragraphAlignment = new ParagraphAlignment(function (widget) { + widget.placeAt(toolbar); + widget.startup(); + }); + sessionSubscribers.push(paragraphAlignment); + } + + // Paragraph Style Selector currentStyle = new CurrentStyle(function (widget) { widget.placeAt(toolbar); widget.startup(); }); - currentStyle.setEditorSession(editorSession); + sessionSubscribers.push(currentStyle); // Zoom Level Selector zoomSlider = new ZoomSlider(function (widget) { widget.placeAt(toolbar); widget.startup(); }); - zoomSlider.setEditorSession(editorSession); + sessionSubscribers.push(zoomSlider); // Load if (loadOdtFile) { @@ -174,7 +177,7 @@ define("webodf/editor/Tools", [ } }; }); - paragraphStylesDialog.setEditorSession(editorSession); + sessionSubscribers.push(paragraphStylesDialog); formatMenuButton = new DropDownButton({ dropDown: formatDropDownMenu, @@ -215,6 +218,8 @@ define("webodf/editor/Tools", [ }); closeButton.placeAt(toolbar); } + + setEditorSession(editorSession); }); }; diff --git a/js/editor/nls/de/myResources.js b/js/editor/nls/de/myResources.js index 1dd1c290..6b4197ca 100644 --- a/js/editor/nls/de/myResources.js +++ b/js/editor/nls/de/myResources.js @@ -41,6 +41,12 @@ define({ edit: "Bearbeiten", view: "Ansicht", annotate: "Kommentieren", + justifyLeft: "Linksbündig", + justifyCenter: "Zentriert", + justifyRight: "Rechtsbündig", + justifyFull: "Blocksatz", + indent: "Einzug erhöhen", + outdent: "Einzug vermindern", clone: "Kopiere", create: "Erzeuge", delete: "Entferne", diff --git a/js/editor/nls/myResources.js b/js/editor/nls/myResources.js index 6946907b..b9940f33 100644 --- a/js/editor/nls/myResources.js +++ b/js/editor/nls/myResources.js @@ -40,6 +40,12 @@ define({ edit: "Edit", view: "View", annotate: "Annotate", + justifyLeft: "Align Left", + justifyCenter: "Centered", + justifyRight: "Align Right", + justifyFull: "Justified", + indent: "Increase Indent", + outdent: "Decrease Indent", clone: "Clone", create: "Create", delete: "Delete", diff --git a/js/editor/server/pullbox/MemberModel.js b/js/editor/server/pullbox/MemberModel.js index 324588f4..534b0eb7 100644 --- a/js/editor/server/pullbox/MemberModel.js +++ b/js/editor/server/pullbox/MemberModel.js @@ -226,6 +226,14 @@ define("webodf/editor/server/pullbox/MemberModel", [], function () { if (memberData) { // data available from cache subscriber(memberId, memberData); + } else { + // pass temporary data + subscriber(memberId, { + memberid: memberId, + fullname: "Unknown", + color: "black", + imageurl: "" + }); } }; diff --git a/js/webodf-debug.js b/js/webodf-debug.js index 23169358..eeac81b0 100644 --- a/js/webodf-debug.js +++ b/js/webodf-debug.js @@ -2991,7 +2991,25 @@ core.Utils = function Utils() { } return hash } - this.hashString = hashString + this.hashString = hashString; + function mergeObjects(destination, source) { + if(Array.isArray(source)) { + destination = (destination || []).concat(source.map(function(obj) { + return mergeObjects({}, obj) + })) + }else { + if(typeof source === "object") { + destination = destination || {}; + Object.keys(source).forEach(function(p) { + destination[p] = mergeObjects(destination[p], source[p]) + }) + }else { + destination = source + } + } + return destination + } + this.mergeObjects = mergeObjects }; core.DomUtils = function DomUtils() { function findStablePoint(container, offset) { @@ -6513,7 +6531,7 @@ odf.OdfUtils = function OdfUtils() { } this.getFirstNonWhitespaceChild = getFirstNonWhitespaceChild; function parseLength(length) { - var re = /-?([0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/, m = re.exec(length); + var re = /(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/, m = re.exec(length); if(!m) { return null } @@ -6534,6 +6552,7 @@ odf.OdfUtils = function OdfUtils() { } return result } + this.parseNonNegativeLength = parseNonNegativeLength; function parsePercentage(length) { var result = parseLength(length); if(result && result.unit !== "%") { @@ -6773,7 +6792,7 @@ odf.TextSerializer = function TextSerializer() { runtime.loadClass("core.DomUtils"); runtime.loadClass("core.LoopWatchDog"); runtime.loadClass("odf.Namespaces"); -odf.TextStyleApplicator = function TextStyleApplicator(newStylePrefix, formatting, automaticStyles) { +odf.TextStyleApplicator = function TextStyleApplicator(styleNameGenerator, formatting, automaticStyles) { var domUtils = new core.DomUtils, textns = odf.Namespaces.textns, stylens = odf.Namespaces.stylens, textProperties = "style:text-properties", webodfns = "urn:webodf:names:scope"; function StyleLookup(info) { function compare(expected, actual) { @@ -6792,25 +6811,15 @@ odf.TextStyleApplicator = function TextStyleApplicator(newStylePrefix, formattin function StyleManager(info) { var createdStyles = {}; function createDirectFormat(existingStyleName, document) { - var existingStyleNode, styleNode; - if(existingStyleName) { - existingStyleNode = formatting.getStyleElement(existingStyleName, "text"); - if(existingStyleNode.parentNode === automaticStyles) { - styleNode = existingStyleNode.cloneNode(true) - }else { - styleNode = document.createElementNS(stylens, "style:style"); - styleNode.setAttributeNS(stylens, "style:parent-style-name", existingStyleName); - styleNode.setAttributeNS(stylens, "style:family", "text"); - styleNode.setAttributeNS(webodfns, "scope", "document-content") - } - }else { - styleNode = document.createElementNS(stylens, "style:style"); - styleNode.setAttributeNS(stylens, "style:family", "text"); - styleNode.setAttributeNS(webodfns, "scope", "document-content") - } - formatting.updateStyle(styleNode, info, newStylePrefix); - automaticStyles.appendChild(styleNode); - return styleNode + var derivedStyleInfo, derivedStyleNode; + derivedStyleInfo = existingStyleName ? formatting.createDerivedStyleObject(existingStyleName, "text", info) : info; + derivedStyleNode = document.createElementNS(stylens, "style:style"); + formatting.updateStyle(derivedStyleNode, derivedStyleInfo); + derivedStyleNode.setAttributeNS(stylens, "style:name", styleNameGenerator.generateName()); + derivedStyleNode.setAttributeNS(stylens, "style:family", "text"); + derivedStyleNode.setAttributeNS(webodfns, "scope", "document-content"); + automaticStyles.appendChild(derivedStyleNode); + return derivedStyleNode } function getDirectStyle(existingStyleName, document) { existingStyleName = existingStyleName || ""; @@ -8122,32 +8131,77 @@ odf.FontLoader = function() { @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ +odf.StyleNameGenerator = function StyleNameGenerator(prefix, formatting) { + var reportedNames = {}; + this.generateName = function() { + var name, existingNames = {}, startIndex = 0; + formatting.getAllStyleNames().forEach(function(styleName) { + existingNames[styleName] = true + }); + do { + name = prefix + startIndex; + startIndex += 1 + }while(reportedNames[name] || existingNames[name]); + reportedNames[name] = true; + return name + } +}; +/* + + Copyright (C) 2012-2013 KO GmbH + + @licstart + The JavaScript code in this page is free software: you can redistribute it + and/or modify it under the terms of the GNU Affero General Public License + (GNU AGPL) as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. The code is distributed + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU AGPL for more details. + + As additional permission under GNU AGPL version 3 section 7, you + may distribute non-source (e.g., minimized or compacted) forms of + that code without the copy of the GNU GPL normally required by + section 4, provided you include this license notice and a URL + through which recipients can access the Corresponding Source. + + As a special exception to the AGPL, any HTML file which merely makes function + calls to this code, and for that purpose includes it by reference shall be + deemed a separate work for copyright law purposes. In addition, the copyright + holders of this code give you permission to combine this code with free + software libraries that are released under the GNU LGPL. You may copy and + distribute such a system following the terms of the GNU AGPL for this code + and the LGPL for the libraries. If you modify this code, you may extend this + exception to your version of the code, but you are not obligated to do so. + If you do not wish to do so, delete this exception statement from your + version. + + This license applies to this entire compilation. + @licend + @source: http://www.webodf.org/ + @source: http://gitorious.org/webodf/webodf/ +*/ runtime.loadClass("core.Utils"); +runtime.loadClass("odf.StyleNameGenerator"); runtime.loadClass("odf.Namespaces"); runtime.loadClass("odf.OdfContainer"); runtime.loadClass("odf.StyleInfo"); runtime.loadClass("odf.OdfUtils"); runtime.loadClass("odf.TextStyleApplicator"); odf.Formatting = function Formatting() { - var self = this, odfContainer, styleInfo = new odf.StyleInfo, svgns = odf.Namespaces.svgns, stylens = odf.Namespaces.stylens, textns = odf.Namespaces.textns, numberns = odf.Namespaces.numberns, odfUtils = new odf.OdfUtils, utils = new core.Utils; - function mergeRecursive(destination, source) { - Object.keys(source).forEach(function(p) { - try { - if(source[p].constructor === Object) { - destination[p] = mergeRecursive(destination[p], source[p]) - }else { - destination[p] = source[p] - } - }catch(e) { - destination[p] = source[p] - } - }); - return destination + var self = this, odfContainer, styleInfo = new odf.StyleInfo, svgns = odf.Namespaces.svgns, stylens = odf.Namespaces.stylens, textns = odf.Namespaces.textns, numberns = odf.Namespaces.numberns, odfUtils = new odf.OdfUtils, utils = new core.Utils, builtInDefaultStyleAttributesByFamily = {"paragraph":{"style:paragraph-properties":{"fo:text-align":"left"}}}; + function getBuiltInDefaultStyleAttributes(styleFamily) { + var result, builtInDefaultStyleAttributes = builtInDefaultStyleAttributesByFamily[styleFamily]; + if(builtInDefaultStyleAttributes) { + result = utils.mergeObjects({}, builtInDefaultStyleAttributes) + }else { + result = null + } + return result } this.setOdfContainer = function(odfcontainer) { odfContainer = odfcontainer }; - this.getFontMap = function() { + function getFontMap() { var fontFaceDecls = odfContainer.rootElement.fontFaceDecls, fontFaceDeclsMap = {}, node, name, family; node = fontFaceDecls && fontFaceDecls.firstChild; while(node) { @@ -8163,7 +8217,8 @@ odf.Formatting = function Formatting() { node = node.nextSibling } return fontFaceDeclsMap - }; + } + this.getFontMap = getFontMap; this.getAvailableParagraphStyles = function() { var node = odfContainer.rootElement.styles && odfContainer.rootElement.styles.firstChild, p_family, p_name, p_displayName, paragraphStyles = [], style; while(node) { @@ -8198,6 +8253,7 @@ odf.Formatting = function Formatting() { } return null } + this.getDefaultStyleElement = getDefaultStyleElement; function getStyleElement(styleName, family, styleElements) { var node, nodeStyleName, styleListElement; styleElements = styleElements || [odfContainer.rootElement.automaticStyles, odfContainer.rootElement.styles]; @@ -8235,6 +8291,9 @@ odf.Formatting = function Formatting() { } propertiesNode = propertiesNode.nextSibling } + for(i = 0;i < styleNode.attributes.length;i += 1) { + propertiesMap[styleNode.attributes[i].name] = styleNode.attributes[i].value + } return propertiesMap } this.getStyleAttributes = getStyleAttributes; @@ -8250,22 +8309,28 @@ odf.Formatting = function Formatting() { } }) } - function getInheritedStyleAttributes(styleNode) { - var styleListElement = odfContainer.rootElement.styles, parentStyleName, propertiesMap = {}, inheritedPropertiesMap = {}, node = styleNode; + function getInheritedStyleAttributes(styleNode, includeSystemDefault) { + var styleListElement = odfContainer.rootElement.styles, parentStyleName, propertiesMap, inheritedPropertiesMap = {}, styleFamily = styleNode.getAttributeNS(stylens, "family"), node = styleNode; while(node) { propertiesMap = getStyleAttributes(node); - inheritedPropertiesMap = mergeRecursive(propertiesMap, inheritedPropertiesMap); + inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap); parentStyleName = node.getAttributeNS(stylens, "parent-style-name"); if(parentStyleName) { - node = getStyleElement(parentStyleName, styleNode.getAttributeNS(stylens, "family"), [styleListElement]) + node = getStyleElement(parentStyleName, styleFamily, [styleListElement]) }else { node = null } } - node = getDefaultStyleElement(styleNode.getAttributeNS(stylens, "family")); + node = getDefaultStyleElement(styleFamily); if(node) { propertiesMap = getStyleAttributes(node); - inheritedPropertiesMap = mergeRecursive(propertiesMap, inheritedPropertiesMap) + inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap) + } + if(includeSystemDefault) { + propertiesMap = getBuiltInDefaultStyleAttributes(styleFamily); + if(propertiesMap) { + inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap) + } } return inheritedPropertiesMap } @@ -8320,7 +8385,7 @@ odf.Formatting = function Formatting() { styleElement = getStyleElement(styleName, styleFamily); if(styleElement) { parentStyle = getInheritedStyleAttributes((styleElement)); - mergedChildStyle = mergeRecursive(parentStyle, mergedChildStyle); + mergedChildStyle = utils.mergeObjects(parentStyle, mergedChildStyle); displayName = styleElement.getAttributeNS(stylens, "display-name") }else { runtime.log("No style element found for '" + styleName + "' of family '" + styleFamily + "'") @@ -8346,7 +8411,7 @@ odf.Formatting = function Formatting() { return styleChain ? calculateAppliedStyle(styleChain) : undefined }; this.applyStyle = function(memberId, textNodes, limits, info) { - var textStyles = new odf.TextStyleApplicator("auto" + utils.hashString(memberId) + "_", self, odfContainer.rootElement.automaticStyles); + var textStyles = new odf.TextStyleApplicator(new odf.StyleNameGenerator("auto" + utils.hashString(memberId) + "_", self), self, odfContainer.rootElement.automaticStyles); textStyles.applyStyle(textNodes, limits, info) }; function getAllStyleNames() { @@ -8364,19 +8429,39 @@ odf.Formatting = function Formatting() { }); return styleNames } - this.updateStyle = function(styleNode, properties, newStylePrefix) { - var name, existingNames, startIndex; + this.getAllStyleNames = getAllStyleNames; + this.updateStyle = function(styleNode, properties) { + var fontName, fontFaceNode; mapObjOntoNode(styleNode, properties); - if(newStylePrefix) { - name = styleNode.getAttributeNS(stylens, "name"); - existingNames = getAllStyleNames(); - startIndex = 0; - do { - name = newStylePrefix + startIndex; - startIndex += 1 - }while(existingNames.indexOf(name) !== -1); - styleNode.setAttributeNS(stylens, "style:name", name) + fontName = properties["style:text-properties"] && properties["style:text-properties"]["style:font-name"]; + if(fontName && !getFontMap().hasOwnProperty(fontName)) { + fontFaceNode = styleNode.ownerDocument.createElementNS(stylens, "style:font-face"); + fontFaceNode.setAttributeNS(stylens, "style:name", fontName); + fontFaceNode.setAttributeNS(svgns, "svg:font-family", fontName); + odfContainer.rootElement.fontFaceDecls.appendChild(fontFaceNode) + } + }; + function isAutomaticStyleElement(styleNode) { + return styleNode.parentNode === odfContainer.rootElement.automaticStyles + } + this.createDerivedStyleObject = function(parentStyleName, family, overrides) { + var originalStyleElement = (getStyleElement(parentStyleName, family)), newStyleObject; + runtime.assert(Boolean(originalStyleElement), "No style element found for '" + parentStyleName + "' of family '" + family + "'"); + if(isAutomaticStyleElement(originalStyleElement)) { + newStyleObject = getStyleAttributes(originalStyleElement) + }else { + newStyleObject = {"style:parent-style-name":parentStyleName} + } + newStyleObject["style:family"] = family; + utils.mergeObjects(newStyleObject, overrides); + return newStyleObject + }; + this.getDefaultTabStopDistance = function() { + var defaultParagraph = getDefaultStyleElement("paragraph"), paragraphProperties = defaultParagraph && defaultParagraph.getAttributeNS(stylens, "paragraph-properties"), tabStopDistance = paragraphProperties && paragraphProperties.getAttributeNS(stylens, "tab-stop-distance"); + if(!tabStopDistance) { + tabStopDistance = "1.25cm" } + return odfUtils.parseNonNegativeLength(tabStopDistance) } }; /* @@ -9590,9 +9675,10 @@ ops.OpAddCursor = function OpAddCursor() { @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("core.DomUtils"); +runtime.loadClass("odf.Namespaces"); runtime.loadClass("odf.OdfUtils"); gui.StyleHelper = function StyleHelper(formatting) { - var domUtils = new core.DomUtils, odfUtils = new odf.OdfUtils; + var domUtils = new core.DomUtils, odfUtils = new odf.OdfUtils, textns = odf.Namespaces.textns; this.getAppliedStyles = function(range) { var textNodes = odfUtils.getTextNodes(range, true); return formatting.getAppliedStyles(textNodes) @@ -9635,6 +9721,46 @@ gui.StyleHelper = function StyleHelper(formatting) { }; this.hasStrikeThrough = function(range) { return hasTextPropertyValue(range, "style:text-line-through-style", "solid") + }; + function hasParagraphPropertyValue(range, propertyName, propertyValues) { + var nodes = odfUtils.getParagraphElements(range), isStyleChecked = {}, isDefaultParagraphStyleChecked = false, paragraphStyleName, paragraphStyleElement, paragraphStyleAttributes, properties; + while(nodes.length > 0) { + paragraphStyleName = nodes[0].getAttributeNS(textns, "style-name"); + if(paragraphStyleName) { + if(!isStyleChecked[paragraphStyleName]) { + paragraphStyleElement = formatting.getStyleElement(paragraphStyleName, "paragraph"); + isStyleChecked[paragraphStyleName] = true + } + }else { + if(!isDefaultParagraphStyleChecked) { + isDefaultParagraphStyleChecked = true; + paragraphStyleElement = formatting.getDefaultStyleElement("paragraph") + }else { + paragraphStyleElement = undefined + } + } + if(paragraphStyleElement) { + paragraphStyleAttributes = formatting.getInheritedStyleAttributes((paragraphStyleElement), true); + properties = paragraphStyleAttributes["style:paragraph-properties"]; + if(properties && propertyValues.indexOf(properties[propertyName]) === -1) { + return false + } + } + nodes.pop() + } + return true + } + this.isAlignedLeft = function(range) { + return hasParagraphPropertyValue(range, "fo:text-align", ["left", "start"]) + }; + this.isAlignedCenter = function(range) { + return hasParagraphPropertyValue(range, "fo:text-align", ["center"]) + }; + this.isAlignedRight = function(range) { + return hasParagraphPropertyValue(range, "fo:text-align", ["right", "end"]) + }; + this.isAlignedJustified = function(range) { + return hasParagraphPropertyValue(range, "fo:text-align", ["justify"]) } }; /* @@ -10705,8 +10831,9 @@ ops.OpSetParagraphStyle = function OpSetParagraphStyle() { @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ +runtime.loadClass("odf.Namespaces"); ops.OpUpdateParagraphStyle = function OpUpdateParagraphStyle() { - var self = this, optype = "UpdateParagraphStyle", memberid, timestamp, styleName, setProperties, removedProperties, paragraphPropertiesName = "style:paragraph-properties", textPropertiesName = "style:text-properties", stylens = "urn:oasis:names:tc:opendocument:xmlns:style:1.0", svgns = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; + var self = this, optype = "UpdateParagraphStyle", memberid, timestamp, styleName, setProperties, removedProperties, paragraphPropertiesName = "style:paragraph-properties", textPropertiesName = "style:text-properties", stylens = odf.Namespaces.stylens; function removedAttributesFromStyleNode(node, removedAttributeNames) { var i, attributeNameParts, attributeNameList = removedAttributeNames ? removedAttributeNames.split(",") : []; for(i = 0;i < attributeNameList.length;i += 1) { @@ -10814,42 +10941,13 @@ ops.OpUpdateParagraphStyle = function OpUpdateParagraphStyle() { return result }; this.execute = function(odtDocument) { - var formatting = odtDocument.getFormatting(), dom = odtDocument.getDOM(), styleNode = dom.createElementNS(stylens, "style:style"), paragraphPropertiesNode, textPropertiesNode, fontFaceNode, fontName, ns; + var formatting = odtDocument.getFormatting(), styleNode, paragraphPropertiesNode, textPropertiesNode; styleNode = odtDocument.getParagraphStyleElement(styleName); if(styleNode) { paragraphPropertiesNode = styleNode.getElementsByTagNameNS(stylens, "paragraph-properties")[0]; textPropertiesNode = styleNode.getElementsByTagNameNS(stylens, "text-properties")[0]; if(setProperties) { - Object.keys(setProperties).forEach(function(propertyName) { - switch(propertyName) { - case paragraphPropertiesName: - if(paragraphPropertiesNode === undefined) { - paragraphPropertiesNode = dom.createElementNS(stylens, paragraphPropertiesName); - styleNode.appendChild(paragraphPropertiesNode) - } - formatting.updateStyle(paragraphPropertiesNode, setProperties[paragraphPropertiesName]); - break; - case textPropertiesName: - if(textPropertiesNode === undefined) { - textPropertiesNode = dom.createElementNS(stylens, textPropertiesName); - styleNode.appendChild(textPropertiesNode) - } - fontName = setProperties[textPropertiesName]["style:font-name"]; - if(fontName && !formatting.getFontMap().hasOwnProperty(fontName)) { - fontFaceNode = dom.createElementNS(stylens, "style:font-face"); - fontFaceNode.setAttributeNS(stylens, "style:name", fontName); - fontFaceNode.setAttributeNS(svgns, "svg:font-family", fontName); - odtDocument.getOdfCanvas().odfContainer().rootElement.fontFaceDecls.appendChild(fontFaceNode) - } - formatting.updateStyle(textPropertiesNode, setProperties[textPropertiesName]); - break; - default: - if(typeof setProperties[propertyName] !== "object") { - ns = odf.Namespaces.resolvePrefix(propertyName.substr(0, propertyName.indexOf(":"))); - styleNode.setAttributeNS(ns, propertyName, setProperties[propertyName]) - } - } - }) + formatting.updateStyle(styleNode, setProperties) } if(removedProperties) { if(removedProperties[paragraphPropertiesName]) { @@ -10913,11 +11011,12 @@ ops.OpUpdateParagraphStyle = function OpUpdateParagraphStyle() { */ runtime.loadClass("odf.Namespaces"); ops.OpAddParagraphStyle = function OpAddParagraphStyle() { - var self = this, memberid, timestamp, styleName, setProperties, paragraphPropertiesName = "style:paragraph-properties", textPropertiesName = "style:text-properties", svgns = odf.Namespaces.svgns, stylens = odf.Namespaces.stylens; + var self = this, memberid, timestamp, styleName, isAutomaticStyle, setProperties, stylens = odf.Namespaces.stylens; this.init = function(data) { memberid = data.memberid; timestamp = data.timestamp; styleName = data.styleName; + isAutomaticStyle = data.isAutomaticStyle === "true" || data.isAutomaticStyle === true; setProperties = data.setProperties }; function dropStyleReferencingAttributes(deletedStyleName) { @@ -10937,47 +11036,26 @@ ops.OpAddParagraphStyle = function OpAddParagraphStyle() { return[self] }; this.execute = function(odtDocument) { - var odfContainer = odtDocument.getOdfCanvas().odfContainer(), formatting = odtDocument.getFormatting(), dom = odtDocument.getDOM(), styleNode = dom.createElementNS(stylens, "style:style"), paragraphPropertiesNode, textPropertiesNode, fontFaceNode, fontName, ns; + var odfContainer = odtDocument.getOdfCanvas().odfContainer(), formatting = odtDocument.getFormatting(), dom = odtDocument.getDOM(), styleNode = dom.createElementNS(stylens, "style:style"); if(!styleNode) { return false } + if(setProperties) { + formatting.updateStyle(styleNode, setProperties) + } styleNode.setAttributeNS(stylens, "style:family", "paragraph"); styleNode.setAttributeNS(stylens, "style:name", styleName); - if(setProperties) { - Object.keys(setProperties).forEach(function(propertyName) { - switch(propertyName) { - case paragraphPropertiesName: - paragraphPropertiesNode = dom.createElementNS(stylens, paragraphPropertiesName); - styleNode.appendChild(paragraphPropertiesNode); - formatting.updateStyle(paragraphPropertiesNode, setProperties[paragraphPropertiesName]); - break; - case textPropertiesName: - textPropertiesNode = dom.createElementNS(stylens, textPropertiesName); - styleNode.appendChild(textPropertiesNode); - fontName = setProperties[textPropertiesName]["style:font-name"]; - if(fontName && !formatting.getFontMap().hasOwnProperty(fontName)) { - fontFaceNode = dom.createElementNS(stylens, "style:font-face"); - fontFaceNode.setAttributeNS(stylens, "style:name", fontName); - fontFaceNode.setAttributeNS(svgns, "svg:font-family", fontName); - odfContainer.rootElement.fontFaceDecls.appendChild(fontFaceNode) - } - formatting.updateStyle(textPropertiesNode, setProperties[textPropertiesName]); - break; - default: - if(typeof setProperties[propertyName] !== "object") { - ns = odf.Namespaces.resolvePrefix(propertyName.substr(0, propertyName.indexOf(":"))); - styleNode.setAttributeNS(ns, propertyName, setProperties[propertyName]) - } - } - }) + if(isAutomaticStyle) { + odfContainer.rootElement.automaticStyles.appendChild(styleNode) + }else { + odfContainer.rootElement.styles.appendChild(styleNode) } - odfContainer.rootElement.styles.appendChild(styleNode); odtDocument.getOdfCanvas().refreshCSS(); odtDocument.emit(ops.OdtDocument.signalStyleCreated, styleName); return true }; this.spec = function() { - return{optype:"AddParagraphStyle", memberid:memberid, timestamp:timestamp, styleName:styleName, setProperties:setProperties} + return{optype:"AddParagraphStyle", memberid:memberid, timestamp:timestamp, styleName:styleName, isAutomaticStyle:isAutomaticStyle, setProperties:setProperties} } }; /* @@ -12262,7 +12340,7 @@ gui.KeyboardHandler = function KeyboardHandler() { } }; gui.KeyboardHandler.Modifier = {None:0, Meta:1, Ctrl:2, Alt:4, Shift:8, MetaShift:9, CtrlShift:10, AltShift:12}; -gui.KeyboardHandler.KeyCode = {Backspace:8, Tab:9, Clear:12, Enter:13, End:35, Home:36, Left:37, Up:38, Right:39, Down:40, Delete:46, A:65, B:66, I:73, U:85, Z:90}; +gui.KeyboardHandler.KeyCode = {Backspace:8, Tab:9, Clear:12, Enter:13, End:35, Home:36, Left:37, Up:38, Right:39, Down:40, Delete:46, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77, N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90}; (function() { return gui.KeyboardHandler })(); @@ -12334,6 +12412,7 @@ gui.Clipboard = function Clipboard() { init() }; runtime.loadClass("core.DomUtils"); +runtime.loadClass("core.Utils"); runtime.loadClass("odf.OdfUtils"); runtime.loadClass("ops.OpAddCursor"); runtime.loadClass("ops.OpRemoveCursor"); @@ -12350,7 +12429,7 @@ runtime.loadClass("gui.StyleHelper"); gui.SessionController = function() { gui.SessionController = function SessionController(session, inputMemberId) { var window = (runtime.getWindow()), odtDocument = session.getOdtDocument(), domUtils = new core.DomUtils, odfUtils = new odf.OdfUtils, clipboard = new gui.Clipboard, clickHandler = new gui.ClickHandler, keyDownHandler = new gui.KeyboardHandler, keyPressHandler = new gui.KeyboardHandler, styleHelper = new gui.StyleHelper(odtDocument.getFormatting()), keyboardMovementsFilter = new core.PositionFilterChain, baseFilter = odtDocument.getPositionFilter(), clickStartedWithinContainer = false, undoManager = - null; + null, utils = new core.Utils, styleNameGenerator = new odf.StyleNameGenerator("auto" + utils.hashString(inputMemberId) + "_", odtDocument.getFormatting()); runtime.assert(window !== null, "Expected to be run in an environment which has a global window, like a browser."); keyboardMovementsFilter.addFilter("BaseFilter", baseFilter); keyboardMovementsFilter.addFilter("RootFilter", odtDocument.createRootFilter(inputMemberId)); @@ -12919,6 +12998,53 @@ gui.SessionController = function() { function filterMouseClicks(e) { clickStartedWithinContainer = e.target && domUtils.containsNode(odtDocument.getOdfCanvas().getElement(), e.target) } + function applyParagraphDirectStyling(applyDirectStyling) { + var range = odtDocument.getCursor(inputMemberId).getSelectedRange(), position = odtDocument.getCursorPosition(inputMemberId), paragraphs = odfUtils.getParagraphElements(range), formatting = odtDocument.getFormatting(); + paragraphs.forEach(function(paragraph) { + var paragraphStartPoint = position + odtDocument.getDistanceFromCursor(inputMemberId, paragraph, 0), paragraphStyleName = paragraph.getAttributeNS(odf.Namespaces.textns, "style-name"), newParagraphStyleName = styleNameGenerator.generateName(), opAddParagraphStyle, opSetParagraphStyle, paragraphProperties; + paragraphStartPoint += 1; + if(paragraphStyleName) { + paragraphProperties = formatting.createDerivedStyleObject(paragraphStyleName, "paragraph", {}) + } + paragraphProperties = applyDirectStyling(paragraphProperties || {}); + opAddParagraphStyle = new ops.OpAddParagraphStyle; + opAddParagraphStyle.init({memberid:inputMemberId, styleName:newParagraphStyleName, isAutomaticStyle:true, setProperties:paragraphProperties}); + session.enqueue(opAddParagraphStyle); + opSetParagraphStyle = new ops.OpSetParagraphStyle; + opSetParagraphStyle.init({memberid:inputMemberId, styleName:newParagraphStyleName, position:paragraphStartPoint}); + session.enqueue(opSetParagraphStyle) + }) + } + function applySimpleParagraphDirectStyling(styleOverrides) { + applyParagraphDirectStyling(function(paragraphStyle) { + return utils.mergeObjects(paragraphStyle, styleOverrides) + }) + } + function alignParagraphLeft() { + applySimpleParagraphDirectStyling({"style:paragraph-properties":{"fo:text-align":"left"}}); + return true + } + function alignParagraphCenter() { + applySimpleParagraphDirectStyling({"style:paragraph-properties":{"fo:text-align":"center"}}); + return true + } + function alignParagraphRight() { + applySimpleParagraphDirectStyling({"style:paragraph-properties":{"fo:text-align":"right"}}); + return true + } + function alignParagraphJustified() { + applySimpleParagraphDirectStyling({"style:paragraph-properties":{"fo:text-align":"justify"}}); + return true + } + function modifyParagraphIndent(direction, paragraphStyle) { + var tabStopDistance = odtDocument.getFormatting().getDefaultTabStopDistance(), paragraphProperties = paragraphStyle["style:paragraph-properties"], indentValue = paragraphProperties && paragraphProperties["fo:margin-left"], indent = indentValue && odfUtils.parseLength(indentValue), newIndent; + if(indent && indent.unit === tabStopDistance.unit) { + newIndent = indent.value + direction * tabStopDistance.value + indent.unit + }else { + newIndent = direction * tabStopDistance.value + tabStopDistance.unit + } + return utils.mergeObjects(paragraphStyle, {"style:paragraph-properties":{"fo:margin-left":newIndent}}) + } this.startEditing = function() { var canvasElement, op; canvasElement = odtDocument.getOdfCanvas().getElement(); @@ -12965,6 +13091,18 @@ gui.SessionController = function() { undoManager.resetInitialState() } }; + this.alignParagraphLeft = alignParagraphLeft; + this.alignParagraphCenter = alignParagraphCenter; + this.alignParagraphRight = alignParagraphRight; + this.alignParagraphJustified = alignParagraphJustified; + this.indent = function() { + applyParagraphDirectStyling(modifyParagraphIndent.bind(null, 1)); + return true + }; + this.outdent = function() { + applyParagraphDirectStyling(modifyParagraphIndent.bind(null, -1)); + return true + }; this.getInputMemberId = function() { return inputMemberId }; @@ -13032,6 +13170,10 @@ gui.SessionController = function() { keyDownHandler.bind(keyCode.B, modifier.Meta, toggleBold); keyDownHandler.bind(keyCode.I, modifier.Meta, toggleItalic); keyDownHandler.bind(keyCode.U, modifier.Meta, toggleUnderline); + keyDownHandler.bind(keyCode.L, modifier.MetaShift, alignParagraphLeft); + keyDownHandler.bind(keyCode.E, modifier.MetaShift, alignParagraphCenter); + keyDownHandler.bind(keyCode.R, modifier.MetaShift, alignParagraphRight); + keyDownHandler.bind(keyCode.J, modifier.MetaShift, alignParagraphJustified); keyDownHandler.bind(keyCode.Z, modifier.Meta, undo); keyDownHandler.bind(keyCode.Z, modifier.MetaShift, redo) }else { @@ -13039,6 +13181,10 @@ gui.SessionController = function() { keyDownHandler.bind(keyCode.B, modifier.Ctrl, toggleBold); keyDownHandler.bind(keyCode.I, modifier.Ctrl, toggleItalic); keyDownHandler.bind(keyCode.U, modifier.Ctrl, toggleUnderline); + keyDownHandler.bind(keyCode.L, modifier.CtrlShift, alignParagraphLeft); + keyDownHandler.bind(keyCode.E, modifier.CtrlShift, alignParagraphCenter); + keyDownHandler.bind(keyCode.R, modifier.CtrlShift, alignParagraphRight); + keyDownHandler.bind(keyCode.J, modifier.CtrlShift, alignParagraphJustified); keyDownHandler.bind(keyCode.Z, modifier.Ctrl, undo); keyDownHandler.bind(keyCode.Z, modifier.CtrlShift, redo) } @@ -13145,7 +13291,7 @@ ops.MemberModel.prototype.close = function(callback) { */ ops.TrivialMemberModel = function TrivialMemberModel() { this.getMemberDetailsAndUpdates = function(memberId, subscriber) { - subscriber(memberId, null) + subscriber(memberId, {memberid:memberId, fullname:"Unknown", color:"black", imageurl:"avatar-joe.png"}) }; this.unsubscribeMemberDetailsUpdates = function(memberId, subscriber) { }; @@ -13582,13 +13728,10 @@ gui.SessionView = function() { }; function renderMemberData(memberId, memberData) { var caret = caretManager.getCaret(memberId); - if(memberData === undefined) { + if(!memberData) { runtime.log('MemberModel sent undefined data for member "' + memberId + '".'); return } - if(memberData === null) { - memberData = {memberid:memberId, fullname:"Unknown Identity", color:"black", imageurl:"avatar-joe.png"} - } if(caret) { caret.setAvatarImageUrl(memberData.imageurl); caret.setColor(memberData.color) @@ -15032,5 +15175,5 @@ ops.Session = function Session(odfCanvas) { } init() }; -var webodf_css = "@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n@namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n@namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n@namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n@namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n@namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n@namespace table url(urn:oasis:names:tc:opendocument:xmlns:table:1.0);\n@namespace text url(urn:oasis:names:tc:opendocument:xmlns:text:1.0);\n@namespace runtimens url(urn:webodf); /* namespace for runtime only */\n@namespace cursor url(urn:webodf:names:cursor);\n@namespace editinfo url(urn:webodf:names:editinfo);\n@namespace annotation url(urn:webodf:names:annotation);\n@namespace dc url(http://purl.org/dc/elements/1.1/);\n\noffice|document > *, office|document-content > * {\n display: none;\n}\noffice|body, office|document {\n display: inline-block;\n position: relative;\n}\n\ntext|p, text|h {\n display: block;\n padding: 0;\n margin: 0;\n line-height: normal;\n position: relative;\n min-height: 1.3em; /* prevent empty paragraphs and headings from collapsing if they are empty */\n}\n*[runtimens|containsparagraphanchor] {\n position: relative;\n}\ntext|s {\n white-space: pre;\n}\ntext|tab {\n display: inline;\n white-space: pre;\n}\ntext|line-break {\n content: \" \";\n display: block;\n}\ntext|tracked-changes {\n /*Consumers that do not support change tracking, should ignore changes.*/\n display: none;\n}\noffice|binary-data {\n display: none;\n}\noffice|text {\n display: block;\n text-align: left;\n overflow: visible;\n word-wrap: break-word;\n}\n\noffice|text::selection {\n /** Let's not draw selection highlight that overflows into the office|text\n * node when selecting content across several paragraphs\n */\n background: transparent;\n}\noffice|text * draw|text-box {\n /** only for text documents */\n display: block;\n border: 1px solid #d3d3d3;\n}\noffice|spreadsheet {\n display: block;\n border-collapse: collapse;\n empty-cells: show;\n font-family: sans-serif;\n font-size: 10pt;\n text-align: left;\n page-break-inside: avoid;\n overflow: hidden;\n}\noffice|presentation {\n display: inline-block;\n text-align: left;\n}\n#shadowContent {\n display: inline-block;\n text-align: left;\n}\ndraw|page {\n display: block;\n position: relative;\n overflow: hidden;\n}\npresentation|notes, presentation|footer-decl, presentation|date-time-decl {\n display: none;\n}\n@media print {\n draw|page {\n border: 1pt solid black;\n page-break-inside: avoid;\n }\n presentation|notes {\n /*TODO*/\n }\n}\noffice|spreadsheet text|p {\n border: 0px;\n padding: 1px;\n margin: 0px;\n}\noffice|spreadsheet table|table {\n margin: 3px;\n}\noffice|spreadsheet table|table:after {\n /* show sheet name the end of the sheet */\n /*content: attr(table|name);*/ /* gives parsing error in opera */\n}\noffice|spreadsheet table|table-row {\n counter-increment: row;\n}\noffice|spreadsheet table|table-row:before {\n width: 3em;\n background: #cccccc;\n border: 1px solid black;\n text-align: center;\n content: counter(row);\n display: table-cell;\n}\noffice|spreadsheet table|table-cell {\n border: 1px solid #cccccc;\n}\ntable|table {\n display: table;\n}\ndraw|frame table|table {\n width: 100%;\n height: 100%;\n background: white;\n}\ntable|table-header-rows {\n display: table-header-group;\n}\ntable|table-row {\n display: table-row;\n}\ntable|table-column {\n display: table-column;\n}\ntable|table-cell {\n width: 0.889in;\n display: table-cell;\n word-break: break-all; /* prevent long words from extending out the table cell */\n}\ndraw|frame {\n display: block;\n}\ndraw|image {\n display: block;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n -moz-background-size: 100% 100%;\n}\n/* only show the first image in frame */\ndraw|frame > draw|image:nth-of-type(n+2) {\n display: none;\n}\ntext|list:before {\n display: none;\n content:\"\";\n}\ntext|list {\n counter-reset: list;\n}\ntext|list-item {\n display: block;\n}\ntext|number {\n display:none;\n}\n\ntext|a {\n color: blue;\n text-decoration: underline;\n cursor: pointer;\n}\ntext|note-citation {\n vertical-align: super;\n font-size: smaller;\n}\ntext|note-body {\n display: none;\n}\ntext|note:hover text|note-citation {\n background: #dddddd;\n}\ntext|note:hover text|note-body {\n display: block;\n left:1em;\n max-width: 80%;\n position: absolute;\n background: #ffffaa;\n}\nsvg|title, svg|desc {\n display: none;\n}\nvideo {\n width: 100%;\n height: 100%\n}\n\n/* below set up the cursor */\ncursor|cursor {\n display: inline;\n width: 0px;\n height: 1em;\n /* making the position relative enables the avatar to use\n the cursor as reference for its absolute position */\n position: relative;\n z-index: 1;\n}\ncursor|cursor > span {\n display: inline;\n position: absolute;\n top: 5%; /* push down the caret; 0px can do the job, 5% looks better, 10% is a bit over */\n height: 1em;\n border-left: 2px solid black;\n outline: none;\n}\n\ncursor|cursor > div {\n padding: 3px;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n border: none !important;\n border-radius: 5px;\n opacity: 0.3;\n}\n\ncursor|cursor > div > img {\n border-radius: 5px;\n}\n\ncursor|cursor > div.active {\n opacity: 0.8;\n}\n\ncursor|cursor > div:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 43%;\n}\n\n\n.editInfoMarker {\n position: absolute;\n width: 10px;\n height: 100%;\n left: -20px;\n opacity: 0.8;\n top: 0;\n border-radius: 5px;\n background-color: transparent;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n}\n.editInfoMarker:hover {\n box-shadow: 0px 0px 8px rgba(0, 0, 0, 1);\n}\n\n.editInfoHandle {\n position: absolute;\n background-color: black;\n padding: 5px;\n border-radius: 5px;\n opacity: 0.8;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n bottom: 100%;\n margin-bottom: 10px;\n z-index: 3;\n left: -25px;\n}\n.editInfoHandle:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 5px;\n}\n.editInfo {\n font-family: sans-serif;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n color: white;\n width: 100%;\n height: 12pt;\n}\n.editInfoColor {\n float: left;\n width: 10pt;\n height: 10pt;\n border: 1px solid white;\n}\n.editInfoAuthor {\n float: left;\n margin-left: 5pt;\n font-size: 10pt;\n text-align: left;\n height: 12pt;\n line-height: 12pt;\n}\n.editInfoTime {\n float: right;\n margin-left: 30pt;\n font-size: 8pt;\n font-style: italic;\n color: yellow;\n height: 12pt;\n line-height: 12pt;\n}\n\n.annotationWrapper {\n display: inline;\n position: relative;\n}\n\n.annotationRemoveButton:before {\n content: '\u00d7';\n color: white;\n padding: 5px;\n line-height: 1em;\n}\n\n.annotationRemoveButton {\n width: 20px;\n height: 20px;\n border-radius: 10px;\n background-color: black;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n position: absolute;\n top: -10px;\n left: -10px;\n z-index: 3;\n text-align: center;\n font-family: sans-serif;\n font-style: normal;\n font-weight: normal;\n text-decoration: none;\n font-size: 15px;\n}\n.annotationRemoveButton:hover {\n cursor: pointer;\n box-shadow: 0px 0px 5px rgba(0, 0, 0, 1);\n}\n\n.annotationNote {\n width: 4cm;\n position: absolute;\n display: inline;\n z-index: 10;\n}\n.annotationNote > office|annotation {\n display: block;\n}\n\n.annotationConnector {\n position: absolute;\n display: inline;\n z-index: 2;\n border-top: 1px dashed brown;\n}\n.annotationConnector.angular {\n -moz-transform-origin: left top;\n -webkit-transform-origin: left top;\n -ms-transform-origin: left top;\n transform-origin: left top;\n}\n.annotationConnector.horizontal {\n left: 0;\n}\n.annotationConnector.horizontal:before {\n content: '';\n display: inline;\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: brown transparent transparent transparent;\n top: -1px;\n left: -5px;\n}\n\noffice|annotation {\n width: 100%;\n height: 100%;\n display: none;\n background: rgb(198, 238, 184);\n background: -moz-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -webkit-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -o-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -ms-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: linear-gradient(180deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n box-shadow: 0 3px 4px -3px #ccc;\n}\n\noffice|annotation > dc|creator {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n color: white;\n background-color: brown;\n padding: 4px;\n}\noffice|annotation > dc|date {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n border: 4px solid transparent;\n}\noffice|annotation > text|list {\n display: block;\n padding: 5px;\n}\n\n/* This is very temporary CSS. This must go once\n * we start bundling webodf-default ODF styles for annotations.\n */\noffice|annotation text|p {\n font-size: 10pt;\n color: black;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n font-family: sans-serif;\n}\n\ndc|*::selection {\n background: transparent;\n}\ndc|*::-moz-selection {\n background: transparent;\n}\n\n#annotationsPane {\n background-color: #EAEAEA;\n width: 4cm;\n height: 100%;\n display: none;\n position: absolute;\n outline: 1px solid #ccc;\n}\n\n.annotationHighlight {\n background-color: yellow;\n position: relative;\n}\n"; +var webodf_css = "@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n@namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n@namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n@namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n@namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n@namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n@namespace table url(urn:oasis:names:tc:opendocument:xmlns:table:1.0);\n@namespace text url(urn:oasis:names:tc:opendocument:xmlns:text:1.0);\n@namespace runtimens url(urn:webodf); /* namespace for runtime only */\n@namespace cursor url(urn:webodf:names:cursor);\n@namespace editinfo url(urn:webodf:names:editinfo);\n@namespace annotation url(urn:webodf:names:annotation);\n@namespace dc url(http://purl.org/dc/elements/1.1/);\n\noffice|document > *, office|document-content > * {\n display: none;\n}\noffice|body, office|document {\n display: inline-block;\n position: relative;\n}\n\ntext|p, text|h {\n display: block;\n padding: 0;\n margin: 0;\n line-height: normal;\n position: relative;\n min-height: 1.3em; /* prevent empty paragraphs and headings from collapsing if they are empty */\n}\n*[runtimens|containsparagraphanchor] {\n position: relative;\n}\ntext|s {\n white-space: pre;\n}\ntext|tab {\n display: inline;\n white-space: pre;\n}\ntext|line-break {\n content: \" \";\n display: block;\n}\ntext|tracked-changes {\n /*Consumers that do not support change tracking, should ignore changes.*/\n display: none;\n}\noffice|binary-data {\n display: none;\n}\noffice|text {\n display: block;\n text-align: left;\n overflow: visible;\n word-wrap: break-word;\n}\n\noffice|text::selection {\n /** Let's not draw selection highlight that overflows into the office|text\n * node when selecting content across several paragraphs\n */\n background: transparent;\n}\noffice|text * draw|text-box {\n /** only for text documents */\n display: block;\n border: 1px solid #d3d3d3;\n}\noffice|spreadsheet {\n display: block;\n border-collapse: collapse;\n empty-cells: show;\n font-family: sans-serif;\n font-size: 10pt;\n text-align: left;\n page-break-inside: avoid;\n overflow: hidden;\n}\noffice|presentation {\n display: inline-block;\n text-align: left;\n}\n#shadowContent {\n display: inline-block;\n text-align: left;\n}\ndraw|page {\n display: block;\n position: relative;\n overflow: hidden;\n}\npresentation|notes, presentation|footer-decl, presentation|date-time-decl {\n display: none;\n}\n@media print {\n draw|page {\n border: 1pt solid black;\n page-break-inside: avoid;\n }\n presentation|notes {\n /*TODO*/\n }\n}\noffice|spreadsheet text|p {\n border: 0px;\n padding: 1px;\n margin: 0px;\n}\noffice|spreadsheet table|table {\n margin: 3px;\n}\noffice|spreadsheet table|table:after {\n /* show sheet name the end of the sheet */\n /*content: attr(table|name);*/ /* gives parsing error in opera */\n}\noffice|spreadsheet table|table-row {\n counter-increment: row;\n}\noffice|spreadsheet table|table-row:before {\n width: 3em;\n background: #cccccc;\n border: 1px solid black;\n text-align: center;\n content: counter(row);\n display: table-cell;\n}\noffice|spreadsheet table|table-cell {\n border: 1px solid #cccccc;\n}\ntable|table {\n display: table;\n}\ndraw|frame table|table {\n width: 100%;\n height: 100%;\n background: white;\n}\ntable|table-header-rows {\n display: table-header-group;\n}\ntable|table-row {\n display: table-row;\n}\ntable|table-column {\n display: table-column;\n}\ntable|table-cell {\n width: 0.889in;\n display: table-cell;\n word-break: break-all; /* prevent long words from extending out the table cell */\n}\ndraw|frame {\n display: block;\n}\ndraw|image {\n display: block;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n -moz-background-size: 100% 100%;\n}\n/* only show the first image in frame */\ndraw|frame > draw|image:nth-of-type(n+2) {\n display: none;\n}\ntext|list:before {\n display: none;\n content:\"\";\n}\ntext|list {\n counter-reset: list;\n}\ntext|list-item {\n display: block;\n}\ntext|number {\n display:none;\n}\n\ntext|a {\n color: blue;\n text-decoration: underline;\n cursor: pointer;\n}\ntext|note-citation {\n vertical-align: super;\n font-size: smaller;\n}\ntext|note-body {\n display: none;\n}\ntext|note:hover text|note-citation {\n background: #dddddd;\n}\ntext|note:hover text|note-body {\n display: block;\n left:1em;\n max-width: 80%;\n position: absolute;\n background: #ffffaa;\n}\nsvg|title, svg|desc {\n display: none;\n}\nvideo {\n width: 100%;\n height: 100%\n}\n\n/* below set up the cursor */\ncursor|cursor {\n display: inline;\n width: 0px;\n height: 1em;\n /* making the position relative enables the avatar to use\n the cursor as reference for its absolute position */\n position: relative;\n z-index: 1;\n}\ncursor|cursor > span {\n display: inline;\n position: absolute;\n top: 5%; /* push down the caret; 0px can do the job, 5% looks better, 10% is a bit over */\n height: 1em;\n border-left: 2px solid black;\n outline: none;\n}\n\ncursor|cursor > div {\n padding: 3px;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n border: none !important;\n border-radius: 5px;\n opacity: 0.3;\n}\n\ncursor|cursor > div > img {\n border-radius: 5px;\n}\n\ncursor|cursor > div.active {\n opacity: 0.8;\n}\n\ncursor|cursor > div:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 43%;\n}\n\n\n.editInfoMarker {\n position: absolute;\n width: 10px;\n height: 100%;\n left: -20px;\n opacity: 0.8;\n top: 0;\n border-radius: 5px;\n background-color: transparent;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n}\n.editInfoMarker:hover {\n box-shadow: 0px 0px 8px rgba(0, 0, 0, 1);\n}\n\n.editInfoHandle {\n position: absolute;\n background-color: black;\n padding: 5px;\n border-radius: 5px;\n opacity: 0.8;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n bottom: 100%;\n margin-bottom: 10px;\n z-index: 3;\n left: -25px;\n}\n.editInfoHandle:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 5px;\n}\n.editInfo {\n font-family: sans-serif;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n color: white;\n width: 100%;\n height: 12pt;\n}\n.editInfoColor {\n float: left;\n width: 10pt;\n height: 10pt;\n border: 1px solid white;\n}\n.editInfoAuthor {\n float: left;\n margin-left: 5pt;\n font-size: 10pt;\n text-align: left;\n height: 12pt;\n line-height: 12pt;\n}\n.editInfoTime {\n float: right;\n margin-left: 30pt;\n font-size: 8pt;\n font-style: italic;\n color: yellow;\n height: 12pt;\n line-height: 12pt;\n}\n\n.annotationWrapper {\n display: inline;\n position: relative;\n}\n\n.annotationRemoveButton:before {\n content: '\u00d7';\n color: white;\n padding: 5px;\n line-height: 1em;\n}\n\n.annotationRemoveButton {\n width: 20px;\n height: 20px;\n border-radius: 10px;\n background-color: black;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n position: absolute;\n top: -10px;\n left: -10px;\n z-index: 3;\n text-align: center;\n font-family: sans-serif;\n font-style: normal;\n font-weight: normal;\n text-decoration: none;\n font-size: 15px;\n}\n.annotationRemoveButton:hover {\n cursor: pointer;\n box-shadow: 0px 0px 5px rgba(0, 0, 0, 1);\n}\n\n.annotationNote {\n width: 4cm;\n position: absolute;\n display: inline;\n z-index: 10;\n}\n.annotationNote > office|annotation {\n display: block;\n text-align: left;\n}\n\n.annotationConnector {\n position: absolute;\n display: inline;\n z-index: 2;\n border-top: 1px dashed brown;\n}\n.annotationConnector.angular {\n -moz-transform-origin: left top;\n -webkit-transform-origin: left top;\n -ms-transform-origin: left top;\n transform-origin: left top;\n}\n.annotationConnector.horizontal {\n left: 0;\n}\n.annotationConnector.horizontal:before {\n content: '';\n display: inline;\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: brown transparent transparent transparent;\n top: -1px;\n left: -5px;\n}\n\noffice|annotation {\n width: 100%;\n height: 100%;\n display: none;\n background: rgb(198, 238, 184);\n background: -moz-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -webkit-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -o-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -ms-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: linear-gradient(180deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n box-shadow: 0 3px 4px -3px #ccc;\n}\n\noffice|annotation > dc|creator {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n color: white;\n background-color: brown;\n padding: 4px;\n}\noffice|annotation > dc|date {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n border: 4px solid transparent;\n}\noffice|annotation > text|list {\n display: block;\n padding: 5px;\n}\n\n/* This is very temporary CSS. This must go once\n * we start bundling webodf-default ODF styles for annotations.\n */\noffice|annotation text|p {\n font-size: 10pt;\n color: black;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n font-family: sans-serif;\n}\n\ndc|*::selection {\n background: transparent;\n}\ndc|*::-moz-selection {\n background: transparent;\n}\n\n#annotationsPane {\n background-color: #EAEAEA;\n width: 4cm;\n height: 100%;\n display: none;\n position: absolute;\n outline: 1px solid #ccc;\n}\n\n.annotationHighlight {\n background-color: yellow;\n position: relative;\n}\n"; diff --git a/js/webodf.js b/js/webodf.js index 3ee1f51d..1ed7b394 100644 --- a/js/webodf.js +++ b/js/webodf.js @@ -36,79 +36,79 @@ */ var core={},gui={},xmldom={},odf={},ops={}; // Input 1 -function Runtime(){}Runtime.ByteArray=function(m){};Runtime.prototype.getVariable=function(m){};Runtime.prototype.toJson=function(m){};Runtime.prototype.fromJson=function(m){};Runtime.ByteArray.prototype.slice=function(m,n){};Runtime.ByteArray.prototype.length=0;Runtime.prototype.byteArrayFromArray=function(m){};Runtime.prototype.byteArrayFromString=function(m,n){};Runtime.prototype.byteArrayToString=function(m,n){};Runtime.prototype.concatByteArrays=function(m,n){}; -Runtime.prototype.read=function(m,n,k,c){};Runtime.prototype.readFile=function(m,n,k){};Runtime.prototype.readFileSync=function(m,n){};Runtime.prototype.loadXML=function(m,n){};Runtime.prototype.writeFile=function(m,n,k){};Runtime.prototype.isFile=function(m,n){};Runtime.prototype.getFileSize=function(m,n){};Runtime.prototype.deleteFile=function(m,n){};Runtime.prototype.log=function(m,n){};Runtime.prototype.setTimeout=function(m,n){};Runtime.prototype.clearTimeout=function(m){}; -Runtime.prototype.libraryPaths=function(){};Runtime.prototype.type=function(){};Runtime.prototype.getDOMImplementation=function(){};Runtime.prototype.parseXML=function(m){};Runtime.prototype.getWindow=function(){};Runtime.prototype.assert=function(m,n,k){};var IS_COMPILED_CODE=!0; -Runtime.byteArrayToString=function(m,n){function k(a){var b="",f,e=a.length;for(f=0;fd?b+=String.fromCharCode(d):(f+=1,c=a[f],194<=d&&224>d?b+=String.fromCharCode((d&31)<<6|c&63):(f+=1,l=a[f],224<=d&&240>d?b+=String.fromCharCode((d&15)<<12|(c&63)<<6|l&63):(f+=1,p=a[f],240<=d&&245>d&&(d=(d&7)<<18|(c&63)<<12|(l&63)<<6|p&63,d-=65536,b+=String.fromCharCode((d>>10)+55296,(d&1023)+56320))))); -return b}var a;"utf8"===n?a=c(m):("binary"!==n&&this.log("Unsupported encoding: "+n),a=k(m));return a};Runtime.getVariable=function(m){try{return eval(m)}catch(n){}};Runtime.toJson=function(m){return JSON.stringify(m)};Runtime.fromJson=function(m){return JSON.parse(m)};Runtime.getFunctionName=function(m){return void 0===m.name?(m=/function\s+(\w+)/.exec(m))&&m[1]:m.name}; -function BrowserRuntime(m){function n(b,f){var e,d,a;void 0!==f?a=b:f=b;m?(d=m.ownerDocument,a&&(e=d.createElement("span"),e.className=a,e.appendChild(d.createTextNode(a)),m.appendChild(e),m.appendChild(d.createTextNode(" "))),e=d.createElement("span"),0l?(d[p]=l,p+=1):2048>l?(d[p]=192|l>>>6,d[p+1]=128|l&63,p+=2):(d[p]=224|l>>>12&15,d[p+1]=128|l>>>6&63,d[p+2]=128|l&63,p+=3)}else for("binary"!== -f&&c.log("unknown encoding: "+f),e=b.length,d=new c.ByteArray(e),a=0;ad.status||0===d.status?e(null):e("Status "+String(d.status)+": "+d.responseText|| -d.statusText):e("File "+b+" is empty."))};f=f.buffer&&!d.sendAsBinary?f.buffer:c.byteArrayToString(f,"binary");try{d.sendAsBinary?d.sendAsBinary(f):d.send(f)}catch(h){c.log("HUH? "+h+" "+f),e(h.message)}};this.deleteFile=function(b,f){delete a[b];var e=new XMLHttpRequest;e.open("DELETE",b,!0);e.onreadystatechange=function(){4===e.readyState&&(200>e.status&&300<=e.status?f(e.responseText):f(null))};e.send(null)};this.loadXML=function(b,f){var a=new XMLHttpRequest;a.open("GET",b,!0);a.overrideMimeType&& -a.overrideMimeType("text/xml");a.onreadystatechange=function(){4===a.readyState&&(0!==a.status||a.responseText?200===a.status||0===a.status?f(null,a.responseXML):f(a.responseText):f("File "+b+" is empty."))};try{a.send(null)}catch(d){f(d.message)}};this.isFile=function(b,a){c.getFileSize(b,function(b){a(-1!==b)})};this.getFileSize=function(b,a){var e=new XMLHttpRequest;e.open("HEAD",b,!0);e.onreadystatechange=function(){if(4===e.readyState){var d=e.getResponseHeader("Content-Length");d?a(parseInt(d, -10)):k(b,"binary",function(d,b){d?a(-1):a(b.length)})}};e.send(null)};this.log=n;this.assert=function(b,a,e){if(!b)throw n("alert","ASSERTION FAILED:\n"+a),e&&e(),a;};this.setTimeout=function(b,a){return setTimeout(function(){b()},a)};this.clearTimeout=function(a){clearTimeout(a)};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(){};this.type=function(){return"BrowserRuntime"};this.getDOMImplementation=function(){return window.document.implementation};this.parseXML=function(a){return(new DOMParser).parseFromString(a, -"text/xml")};this.exit=function(a){n("Calling exit with code "+String(a)+", but exit() is not implemented.")};this.getWindow=function(){return window}} -function NodeJSRuntime(){function m(b,e,d){b=c.resolve(a,b);"binary"!==e?k.readFile(b,e,d):k.readFile(b,null,d)}var n=this,k=require("fs"),c=require("path"),a="",h,b;this.ByteArray=function(a){return new Buffer(a)};this.byteArrayFromArray=function(a){var b=new Buffer(a.length),d,c=a.length;for(d=0;d").implementation} -function RhinoRuntime(){function m(b,a){var e;void 0!==a?e=b:a=b;"alert"===e&&print("\n!!!!! ALERT !!!!!");print(a);"alert"===e&&print("!!!!! ALERT !!!!!")}var n=this,k=Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(),c,a,h="";k.setValidating(!1);k.setNamespaceAware(!0);k.setExpandEntityReferences(!1);k.setSchema(null);a=Packages.org.xml.sax.EntityResolver({resolveEntity:function(b,a){var e=new Packages.java.io.FileReader(a);return new Packages.org.xml.sax.InputSource(e)}});c=k.newDocumentBuilder(); -c.setEntityResolver(a);this.ByteArray=function(b){return[b]};this.byteArrayFromArray=function(b){return b};this.byteArrayFromString=function(b,a){var e=[],d,c=b.length;for(d=0;dd?a+=String.fromCharCode(d):(n+=1,c=b[n],194<=d&&224>d?a+=String.fromCharCode((d&31)<<6|c&63):(n+=1,k=b[n],224<=d&&240>d?a+=String.fromCharCode((d&15)<<12|(c&63)<<6|k&63):(n+=1,q=b[n],240<=d&&245>d&&(d=(d&7)<<18|(c&63)<<12|(k&63)<<6|q&63,d-=65536,a+=String.fromCharCode((d>>10)+55296,(d&1023)+56320))))); +return a}var b;"utf8"===l?b=c(m):("binary"!==l&&this.log("Unsupported encoding: "+l),b=e(m));return b};Runtime.getVariable=function(m){try{return eval(m)}catch(l){}};Runtime.toJson=function(m){return JSON.stringify(m)};Runtime.fromJson=function(m){return JSON.parse(m)};Runtime.getFunctionName=function(m){return void 0===m.name?(m=/function\s+(\w+)/.exec(m))&&m[1]:m.name}; +function BrowserRuntime(m){function l(a,n){var f,d,b;void 0!==n?b=a:n=a;m?(d=m.ownerDocument,b&&(f=d.createElement("span"),f.className=b,f.appendChild(d.createTextNode(b)),m.appendChild(f),m.appendChild(d.createTextNode(" "))),f=d.createElement("span"),0k?(d[e]=k,e+=1):2048>k?(d[e]=192|k>>>6,d[e+1]=128|k&63,e+=2):(d[e]=224|k>>>12&15,d[e+1]=128|k>>>6&63,d[e+2]=128|k&63,e+=3)}else for("binary"!== +n&&c.log("unknown encoding: "+n),f=a.length,d=new c.ByteArray(f),b=0;bd.status||0===d.status?f(null):f("Status "+String(d.status)+": "+d.responseText|| +d.statusText):f("File "+a+" is empty."))};n=n.buffer&&!d.sendAsBinary?n.buffer:c.byteArrayToString(n,"binary");try{d.sendAsBinary?d.sendAsBinary(n):d.send(n)}catch(e){c.log("HUH? "+e+" "+n),f(e.message)}};this.deleteFile=function(a,n){delete b[a];var f=new XMLHttpRequest;f.open("DELETE",a,!0);f.onreadystatechange=function(){4===f.readyState&&(200>f.status&&300<=f.status?n(f.responseText):n(null))};f.send(null)};this.loadXML=function(a,n){var f=new XMLHttpRequest;f.open("GET",a,!0);f.overrideMimeType&& +f.overrideMimeType("text/xml");f.onreadystatechange=function(){4===f.readyState&&(0!==f.status||f.responseText?200===f.status||0===f.status?n(null,f.responseXML):n(f.responseText):n("File "+a+" is empty."))};try{f.send(null)}catch(d){n(d.message)}};this.isFile=function(a,n){c.getFileSize(a,function(a){n(-1!==a)})};this.getFileSize=function(a,n){var f=new XMLHttpRequest;f.open("HEAD",a,!0);f.onreadystatechange=function(){if(4===f.readyState){var d=f.getResponseHeader("Content-Length");d?n(parseInt(d, +10)):e(a,"binary",function(d,a){d?n(-1):n(a.length)})}};f.send(null)};this.log=l;this.assert=function(a,n,f){if(!a)throw l("alert","ASSERTION FAILED:\n"+n),f&&f(),n;};this.setTimeout=function(a,n){return setTimeout(function(){a()},n)};this.clearTimeout=function(a){clearTimeout(a)};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(){};this.type=function(){return"BrowserRuntime"};this.getDOMImplementation=function(){return window.document.implementation};this.parseXML=function(a){return(new DOMParser).parseFromString(a, +"text/xml")};this.exit=function(a){l("Calling exit with code "+String(a)+", but exit() is not implemented.")};this.getWindow=function(){return window}} +function NodeJSRuntime(){function m(a,f,d){a=c.resolve(b,a);"binary"!==f?e.readFile(a,f,d):e.readFile(a,null,d)}var l=this,e=require("fs"),c=require("path"),b="",h,a;this.ByteArray=function(a){return new Buffer(a)};this.byteArrayFromArray=function(a){var f=new Buffer(a.length),d,b=a.length;for(d=0;d").implementation} +function RhinoRuntime(){function m(a,b){var f;void 0!==b?f=a:b=a;"alert"===f&&print("\n!!!!! ALERT !!!!!");print(b);"alert"===f&&print("!!!!! ALERT !!!!!")}var l=this,e=Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(),c,b,h="";e.setValidating(!1);e.setNamespaceAware(!0);e.setExpandEntityReferences(!1);e.setSchema(null);b=Packages.org.xml.sax.EntityResolver({resolveEntity:function(a,b){var f=new Packages.java.io.FileReader(b);return new Packages.org.xml.sax.InputSource(f)}});c=e.newDocumentBuilder(); +c.setEntityResolver(b);this.ByteArray=function(a){return[a]};this.byteArrayFromArray=function(a){return a};this.byteArrayFromString=function(a,b){var f=[],d,e=a.length;for(d=0;d>>18],b+=q[d>>>12&63],b+=q[d>>>6&63],b+=q[d&63];g===l+1?(d=a[g]<<4,b+=q[d>>>6],b+=q[d&63],b+="=="):g===l&&(d=a[g]<<10|a[g+1]<<2,b+=q[d>>>12],b+=q[d>>>6&63],b+=q[d&63],b+="=");return b}function k(a){a=a.replace(/[^A-Za-z0-9+\/]+/g,"");var d=[],b=a.length%4,g,l=a.length,c;for(g=0;g>16,c>>8&255,c&255);d.length-=[0,0,2,1][b];return d}function c(a){var d=[],b,g=a.length,l;for(b=0;bl?d.push(l):2048>l?d.push(192|l>>>6,128|l&63):d.push(224|l>>>12&15,128|l>>>6&63,128|l&63);return d}function a(a){var d=[],b,g=a.length,l,c,e;for(b=0;bl?d.push(l):(b+=1,c=a[b],224>l?d.push((l&31)<<6|c&63):(b+=1,e=a[b],d.push((l&15)<<12|(c&63)<<6|e&63)));return d}function h(a){return n(m(a))} -function b(a){return String.fromCharCode.apply(String,k(a))}function f(d){return a(m(d))}function e(d){d=a(d);for(var b="",g=0;gd?g+=String.fromCharCode(d):(e+=1,l=a.charCodeAt(e)&255,224>d?g+=String.fromCharCode((d&31)<<6|l&63):(e+=1,c=a.charCodeAt(e)&255,g+=String.fromCharCode((d&15)<<12|(l&63)<<6|c&63)));return g}function t(a,b){function g(){var f= -e+l;f>a.length&&(f=a.length);c+=d(a,e,f);e=f;f=e===a.length;b(c,f)&&!f&&runtime.setTimeout(g,0)}var l=1E5,c="",e=0;a.length>>18],b+=p[d>>>12&63],b+=p[d>>>6&63],b+=p[d&63];k===g+1?(d=a[k]<<4,b+=p[d>>>6],b+=p[d&63],b+="=="):k===g&&(d=a[k]<<10|a[k+1]<<2,b+=p[d>>>12],b+=p[d>>>6&63],b+=p[d&63],b+="=");return b}function e(a){a=a.replace(/[^A-Za-z0-9+\/]+/g,"");var d=[],b=a.length%4,k,g=a.length,e;for(k=0;k>16,e>>8&255,e&255);d.length-=[0,0,2,1][b];return d}function c(a){var d=[],b,k=a.length,g;for(b=0;bg?d.push(g):2048>g?d.push(192|g>>>6,128|g&63):d.push(224|g>>>12&15,128|g>>>6&63,128|g&63);return d}function b(a){var d=[],b,k=a.length,g,e,f;for(b=0;bg?d.push(g):(b+=1,e=a[b],224>g?d.push((g&31)<<6|e&63):(b+=1,f=a[b],d.push((g&15)<<12|(e&63)<<6|f&63)));return d}function h(a){return l(m(a))} +function a(a){return String.fromCharCode.apply(String,e(a))}function n(a){return b(m(a))}function f(a){a=b(a);for(var d="",k=0;kd?k+=String.fromCharCode(d):(f+=1,g=a.charCodeAt(f)&255,224>d?k+=String.fromCharCode((d&31)<<6|g&63):(f+=1,e=a.charCodeAt(f)&255,k+=String.fromCharCode((d&15)<<12|(g&63)<<6|e&63)));return k}function s(a,b){function k(){var c= +e+g;c>a.length&&(c=a.length);f+=d(a,e,c);e=c;c=e===a.length;b(f,c)&&!c&&runtime.setTimeout(k,0)}var g=1E5,f="",e=0;a.length>>8):(va(b&255),va(b>>>8))},pa=function(){r=(r<<5^g[z+3-1]&255)&8191;v=w[32768+r];w[z&32767]=v;w[32768+r]=z},ga=function(a,b){A>16-b?(u|=a<>16-A,A+=b-16):(u|=a<a;a++)g[a]=g[a+32768];R-=32768;z-=32768;x-=32768;for(a=0;8192>a;a++)b=w[32768+a],w[32768+a]=32768<=b?b-32768:0;for(a=0;32768>a;a++)b=w[a],w[a]=32768<=b?b-32768:0;d+=32768}E||(a=Z(g,z+K,d),0>=a?E=!0:K+=a)},qa=function(a){var b=X,d=z,l,c=P,e=32506=ra&&(b>>=2);do if(l=a,g[l+c]===p&&g[l+c-1]===q&&g[l]===g[d]&&g[++l]===g[d+1]){d+=2;l++;do++d;while(g[d]=== -g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&g[++d]===g[++l]&&dc){R=a;c=l;if(258<=l)break;q=g[d+c-1];p=g[d+c]}a=w[a&32767]}while(a>e&&0!==--b);return c},za=function(a,d){s[T++]=d;0===a?aa[d].fc++:(a--,aa[ca[d]+256+1].fc++,ea[(256>a?ha[a]:ha[256+(a>>7)])&255].fc++,q[ja++]=a,U|=ma);ma<<=1;0===(T&7)&&(ia[la++]=U,U=0,ma=1);if(2l;l++)b+=ea[l].fc*(5+ta[l]);b>>=3;if(ja< -parseInt(T/2,10)&&b>=1,b<<=1;while(0<--d);return b>>1},Ea=function(a,d){var b=[];b.length=16;var g=0,l;for(l=1;15>=l;l++)g=g+I[l-1]<<1,b[l]=g;for(g=0;g<=d;g++)l=a[g].dl,0!==l&&(a[g].fc=Da(b[l]++,l))},Ca=function(a){var d=a.dyn_tree,b=a.static_tree,g=a.elems,l,c=-1,e=g;ba=0;fa=573;for(l= -0;lba;)l=Q[++ba]=2>c?++c:0,d[l].fc=1,N[l]=0,W--,null!==b&&($-=b[l].dl);a.max_code=c;for(l=ba>>1;1<=l;l--)Ba(d,l);do l=Q[1],Q[1]=Q[ba--],Ba(d,1),b=Q[1],Q[--fa]=l,Q[--fa]=b,d[e].fc=d[l].fc+d[b].fc,N[e]=N[l]>N[b]+1?N[l]:N[b]+1,d[l].dl=d[b].dl=e,Q[1]=e++,Ba(d,1);while(2<=ba);Q[--fa]=Q[1];e=a.dyn_tree;l=a.extra_bits;var g=a.extra_base,b=a.max_code,f=a.max_length,q=a.static_tree,p,h,r,k,u=0;for(h=0;15>=h;h++)I[h]=0;e[Q[fa]].dl=0;for(a=fa+1;573>a;a++)p= -Q[a],h=e[e[p].dl].dl+1,h>f&&(h=f,u++),e[p].dl=h,p>b||(I[h]++,r=0,p>=g&&(r=l[p-g]),k=e[p].fc,W+=k*(h+r),null!==q&&($+=k*(q[p].dl+r)));if(0!==u){do{for(h=f-1;0===I[h];)h--;I[h]--;I[h+1]+=2;I[f]--;u-=2}while(0b||(e[l].dl!==h&&(W+=(h-e[l].dl)*e[l].fc,e[l].fc=h),p--)}Ea(d,c)},Fa=function(a,d){var b,g=-1,l,c=a[0].dl,e=0,f=7,h=4;0===c&&(f=138,h=3);a[d+1].dl=65535;for(b=0;b<=d;b++)l=c,c=a[b+1].dl,++e=e?S[17].fc++:S[18].fc++,e=0,g=l,0===c?(f=138,h=3):l===c?(f=6,h=3):(f=7,h=4))},Ga=function(){8b?ha[b]:ha[256+(b>>7)])&255,Y(f,d),h=ta[f],0!==h&&(b-=ka[f],ga(b,h))),e>>=1;while(g=e?(Y(17,S),ga(e-3,3)):(Y(18,S),ga(e-11,7));e=0;g=l;0===c?(f=138,h=3):l===c?(f=6,h=3):(f=7,h=4)}},Ja=function(){var a;for(a=0;286>a;a++)aa[a].fc=0;for(a=0;30>a;a++)ea[a].fc=0;for(a=0;19>a;a++)S[a].fc=0;aa[256].fc=1;U=T=ja=la=W=$=0;ma=1},Aa=function(a){var b,d,l,c;c=z-x;ia[la]=U;Ca(M);Ca(H);Fa(aa,M.max_code);Fa(ea,H.max_code);Ca(F);for(l=18;3<=l&&0===S[J[l]].dl;l--);W+=3*(l+1)+14;b=W+3+7>> -3;d=$+3+7>>3;d<=b&&(b=d);if(c+4<=b&&0<=x)for(ga(0+a,3),Ga(),na(c),na(~c),l=0;lb.len&&(f=b.len);for(p=0;pt-l&&(f=t-l);for(p=0;pq;q++)for(C[q]=h,f=0;f<1<q;q++)for(ka[q]=h,f=0;f<1<>=7;30>q;q++)for(ka[q]=h<<7,f=0;f<1<=f;f++)I[f]=0;for(f=0;143>=f;)O[f++].dl=8,I[8]++;for(;255>=f;)O[f++].dl=9,I[9]++;for(;279>=f;)O[f++].dl=7,I[7]++;for(;287>=f;)O[f++].dl=8,I[8]++;Ea(O,287);for(f=0;30>f;f++)V[f].dl=5,V[f].fc=Da(f,5);Ja()}for(f=0;8192>f;f++)w[32768+f]=0;oa=ua[L].max_lazy;ra=ua[L].good_length;X=ua[L].max_chain;x=z=0;K=Z(g,0,65536);if(0>=K)E=!0,K=0;else{for(E=!1;262>K&& -!E;)wa();for(f=r=0;2>f;f++)r=(r<<5^g[f]&255)&8191}b=null;l=t=0;3>=L?(P=2,y=0):(y=2,G=0);p=!1}e=!0;if(0===K)return p=!0,0}f=Ka(a,d,c);if(f===c)return c;if(p)return f;if(3>=L)for(;0!==K&&null===b;){pa();0!==v&&32506>=z-v&&(y=qa(v),y>K&&(y=K));if(3<=y)if(q=za(z-R,y-3),K-=y,y<=oa){y--;do z++,pa();while(0!==--y);z++}else z+=y,y=0,r=g[z]&255,r=(r<<5^g[z+1]&255)&8191;else q=za(0,g[z]&255),K--,z++;q&&(Aa(0),x=z);for(;262>K&&!E;)wa()}else for(;0!==K&&null===b;){pa();P=y;D=R;y=2;0!==v&&(P=z-v)&& -(y=qa(v),y>K&&(y=K),3===y&&4096K&&!E;)wa()}0===K&&(0!==G&&za(0,g[z-1]&255),Aa(1),p=!0);return f+Ka(a,f+d,c-f)};this.deflate=function(l,c){var p,r;B=l;sa=0;"undefined"===String(typeof c)&&(c=6);(p=c)?1>p?p=1:9p;p++)aa[p]=new m;ea=[];ea.length=61;for(p=0;61>p;p++)ea[p]=new m;O=[];O.length=288;for(p=0;288>p;p++)O[p]=new m;V=[];V.length=30;for(p=0;30>p;p++)V[p]=new m;S=[];S.length=39;for(p=0;39>p;p++)S[p]=new m;M=new n;H=new n;F=new n;I=[];I.length=16;Q=[];Q.length=573;N=[];N.length=573;ca=[];ca.length=256;ha=[];ha.length=512;C=[];C.length=29;ka=[];ka.length=30;ia=[];ia.length=1024}var k=Array(1024),u=[],v=[];for(p=La(k,0,k.length);0>>8):(z(a&255),z(a>>>8))},ua=function(){v=(v<<5^g[B+3-1]&255)&8191;t=w[32768+v];w[B&32767]=t;w[32768+v]=B},ea=function(a,d){A>16-d?(u|=a<>16-A,A+=d-16):(u|=a<a;a++)g[a]=g[a+32768];R-=32768;B-=32768;x-=32768;for(a=0;8192>a;a++)d=w[32768+a],w[32768+a]=32768<=d?d-32768:0;for(a=0;32768>a;a++)d=w[a],w[a]=32768<=d?d-32768:0;b+=32768}G||(a=xa(g,B+L,b),0>=a?G=!0:L+=a)},ra=function(a){var d=X,b=B,k,f=P,e=32506=sa&&(d>>=2);do if(k=a,g[k+f]===n&&g[k+f-1]===t&&g[k]===g[b]&&g[++k]===g[b+1]){b+=2;k++;do++b;while(g[b]=== +g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&g[++b]===g[++k]&&bf){R=a;f=k;if(258<=k)break;t=g[b+f-1];n=g[b+f]}a=w[a&32767]}while(a>e&&0!==--d);return f},na=function(a,d){r[T++]=d;0===a?Y[d].fc++:(a--,Y[$[d]+256+1].fc++,ba[(256>a?fa[a]:fa[256+(a>>7)])&255].fc++,p[ia++]=a,U|=ma);ma<<=1;0===(T&7)&&(ha[la++]=U,U=0,ma=1);if(2g;g++)b+=ba[g].fc*(5+pa[g]);b>>=3;if(ia< +parseInt(T/2,10)&&b>=1,b<<=1;while(0<--d);return b>>1},Aa=function(a,d){var b=[];b.length=16;var k=0,g;for(g=1;15>=g;g++)k=k+K[g-1]<<1,b[g]=k;for(k=0;k<=d;k++)g=a[k].dl,0!==g&&(a[k].fc=aa(b[g]++,g))},Da=function(a){var d=a.dyn_tree,b=a.static_tree,k=a.elems,g,f=-1,e=k;Z=0;da=573;for(g=0;g< +k;g++)0!==d[g].fc?(Q[++Z]=f=g,O[g]=0):d[g].dl=0;for(;2>Z;)g=Q[++Z]=2>f?++f:0,d[g].fc=1,O[g]=0,W--,null!==b&&(ja-=b[g].dl);a.max_code=f;for(g=Z>>1;1<=g;g--)za(d,g);do g=Q[1],Q[1]=Q[Z--],za(d,1),b=Q[1],Q[--da]=g,Q[--da]=b,d[e].fc=d[g].fc+d[b].fc,O[e]=O[g]>O[b]+1?O[g]:O[b]+1,d[g].dl=d[b].dl=e,Q[1]=e++,za(d,1);while(2<=Z);Q[--da]=Q[1];e=a.dyn_tree;g=a.extra_bits;var k=a.extra_base,b=a.max_code,c=a.max_length,t=a.static_tree,n,p,h,q,r=0;for(p=0;15>=p;p++)K[p]=0;e[Q[da]].dl=0;for(a=da+1;573>a;a++)n=Q[a], +p=e[e[n].dl].dl+1,p>c&&(p=c,r++),e[n].dl=p,n>b||(K[p]++,h=0,n>=k&&(h=g[n-k]),q=e[n].fc,W+=q*(p+h),null!==t&&(ja+=q*(t[n].dl+h)));if(0!==r){do{for(p=c-1;0===K[p];)p--;K[p]--;K[p+1]+=2;K[c]--;r-=2}while(0b||(e[g].dl!==p&&(W+=(p-e[g].dl)*e[g].fc,e[g].fc=p),n--)}Aa(d,f)},Fa=function(a,d){var b,k=-1,g,f=a[0].dl,e=0,c=7,p=4;0===f&&(c=138,p=3);a[d+1].dl=65535;for(b=0;b<=d;b++)g=f,f=a[b+1].dl,++e=e?S[17].fc++:S[18].fc++,e=0,k=g,0===f?(c=138,p=3):g===f?(c=6,p=3):(c=7,p=4))},Ga=function(){8b?fa[b]:fa[256+(b>>7)])&255,ga(c,d),t=pa[c],0!==t&&(b-=ka[c],ea(b,t))),e>>=1;while(k=e?(ga(17,S),ea(e-3,3)):(ga(18,S),ea(e-11,7));e=0;k=g;0===f?(c=138,p=3):g===f?(c=6,p=3):(c=7,p=4)}},Ja=function(){var a;for(a=0;286>a;a++)Y[a].fc=0;for(a=0;30>a;a++)ba[a].fc=0;for(a=0;19>a;a++)S[a].fc=0;Y[256].fc=1;U=T=ia=la=W=ja=0;ma=1},Ea=function(a){var d,b,k,f;f=B-x;ha[la]=U;Da(J);Da(C);Fa(Y,J.max_code);Fa(ba,C.max_code);Da(I);for(k=18;3<=k&&0===S[Ca[k]].dl;k--);W+=3*(k+1)+14;d=W+3+ +7>>3;b=ja+3+7>>3;b<=d&&(d=b);if(f+4<=d&&0<=x)for(ea(0+a,3),Ga(),qa(f),qa(~f),k=0;ka.len&&(c=a.len);for(p=0;ps-k&&(c=s-k);for(p=0;pn;n++)for(F[n]=p,c=0;c<1<n;n++)for(ka[n]=p,c=0;c<1<>=7;30>n;n++)for(ka[n]=p<<7,c=0;c<1<=c;c++)K[c]=0;for(c=0;143>=c;)M[c++].dl=8,K[8]++;for(;255>=c;)M[c++].dl=9,K[9]++;for(;279>=c;)M[c++].dl=7,K[7]++;for(;287>=c;)M[c++].dl=8,K[8]++;Aa(M,287);for(c=0;30>c;c++)V[c].dl=5,V[c].fc=aa(c,5);Ja()}for(c=0;8192>c;c++)w[32768+c]=0;oa=ca[N].max_lazy;sa=ca[N].good_length;X=ca[N].max_chain;x=B=0;L=xa(g,0,65536);if(0>=L)G=!0,L=0;else{for(G=!1;262>L&& +!G;)ya();for(c=v=0;2>c;c++)v=(v<<5^g[c]&255)&8191}a=null;k=s=0;3>=N?(P=2,y=0):(y=2,H=0);q=!1}f=!0;if(0===L)return q=!0,0}c=Ka(d,b,e);if(c===e)return e;if(q)return c;if(3>=N)for(;0!==L&&null===a;){ua();0!==t&&32506>=B-t&&(y=ra(t),y>L&&(y=L));if(3<=y)if(n=na(B-R,y-3),L-=y,y<=oa){y--;do B++,ua();while(0!==--y);B++}else B+=y,y=0,v=g[B]&255,v=(v<<5^g[B+1]&255)&8191;else n=na(0,g[B]&255),L--,B++;n&&(Ea(0),x=B);for(;262>L&&!G;)ya()}else for(;0!==L&&null===a;){ua();P=y;E=R;y=2;0!==t&&(P=B-t)&& +(y=ra(t),y>L&&(y=L),3===y&&4096L&&!G;)ya()}0===L&&(0!==H&&na(0,g[B-1]&255),Ea(1),q=!0);return c+Ka(d,c+b,e-c)};this.deflate=function(k,e){var c,t;ta=k;va=0;"undefined"===String(typeof e)&&(e=6);(c=e)?1>c?c=1:9c;c++)Y[c]=new m;ba=[];ba.length=61;for(c=0;61>c;c++)ba[c]=new m;M=[];M.length=288;for(c=0;288>c;c++)M[c]=new m;V=[];V.length=30;for(c=0;30>c;c++)V[c]=new m;S=[];S.length=39;for(c=0;39>c;c++)S[c]=new m;J=new l;C=new l;I=new l;K=[];K.length=16;Q=[];Q.length=573;O=[];O.length=573;$=[];$.length=256;fa=[];fa.length=512;F=[];F.length=29;ka=[];ka.length=30;ha=[];ha.length=1024}var q=Array(1024),u=[],s=[];for(c=La(q,0,q.length);0>8&255])};this.appendUInt32LE=function(c){n.appendArray([c&255,c>>8&255,c>>16&255,c>>24&255])};this.appendString=function(c){k=runtime.concatByteArrays(k, -runtime.byteArrayFromString(c,m))};this.getLength=function(){return k.length};this.getByteArray=function(){return k}}; +core.ByteArrayWriter=function(m){var l=this,e=new runtime.ByteArray(0);this.appendByteArrayWriter=function(c){e=runtime.concatByteArrays(e,c.getByteArray())};this.appendByteArray=function(c){e=runtime.concatByteArrays(e,c)};this.appendArray=function(c){e=runtime.concatByteArrays(e,runtime.byteArrayFromArray(c))};this.appendUInt16LE=function(c){l.appendArray([c&255,c>>8&255])};this.appendUInt32LE=function(c){l.appendArray([c&255,c>>8&255,c>>16&255,c>>24&255])};this.appendString=function(c){e=runtime.concatByteArrays(e, +runtime.byteArrayFromString(c,m))};this.getLength=function(){return e.length};this.getByteArray=function(){return e}}; // Input 6 -core.RawInflate=function(){var m,n,k=null,c,a,h,b,f,e,d,t,l,p,g,q,s,w,u=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],A=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],x=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],r=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],v=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],D=[16,17,18, -0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],G=function(){this.list=this.next=null},y=function(){this.n=this.b=this.e=0;this.t=null},P=function(a,b,d,l,g,f){this.BMAX=16;this.N_MAX=288;this.status=0;this.root=null;this.m=0;var c=Array(this.BMAX+1),e,p,h,q,r,k,u,s=Array(this.BMAX+1),m,n,v,w=new y,t=Array(this.BMAX);q=Array(this.N_MAX);var x,A=Array(this.BMAX+1),X,z,D;D=this.root=null;for(r=0;rr&&(f=r);for(X=1<(X-=c[k])){this.status=2;this.m=f;return}if(0>(X-=c[r]))this.status=2,this.m=f;else{c[r]+=X;A[1]=k=0;m=c;n=1;for(v=2;0<--r;)A[v++]=k+=m[n++];m=a;r=n=0;do 0!=(k=m[n++])&&(q[A[k]++]=r);while(++rx+s[1+q];){x+=s[1+q];q++;z=(z=h-x)>f?f:z;if((p=1<<(k=u-x))>a+1)for(p-=a+1,v=u;++ke&&x>x-s[q],t[q-1][k].e=w.e,t[q-1][k].b=w.b,t[q-1][k].n=w.n,t[q-1][k].t=w.t)}w.b=u-x;n>=b?w.e=99:m[n]m[n]?16:15,w.n=m[n++]): -(w.e=g[m[n]-d],w.n=l[m[n++]-d]);p=1<>x;k>=1)r^=k;for(r^=k;(r&(1<>=a;b-=a},K=function(a,b,c){var e,h,r;if(0==c)return 0;for(r=0;;){z(g);h=l.list[R(g)];for(e=h.e;16 -e;e++)m[D[e]]=0;g=7;e=new P(m,19,19,null,null,g);if(0!=e.status)return-1;l=e.root;g=e.m;h=u+s;for(c=f=0;ce)m[c++]=f=e;else if(16==e){z(2);e=3+R(2);E(2);if(c+e>h)return-1;for(;0h)return-1;for(;0H;H++)M[H]=8;for(;256>H;H++)M[H]=9;for(;280>H;H++)M[H]=7;for(;288>H;H++)M[H]=8;a=7;H=new P(M,288,257,A,x,a);if(0!=H.status){alert("HufBuild error: "+H.status);O=-1;break b}k=H.root;a=H.m;for(H=0;30>H;H++)M[H]=5;X=5;H=new P(M,30,0,r,v,X);if(1h&&(c=h);for(E=1<(E-=e[q])){this.status=2;this.m=c;return}if(0>(E-=e[h]))this.status=2,this.m=c;else{e[h]+=E;A[1]=q=0;l=e;w=1;for(u=2;0<--h;)A[u++]=q+=l[w++];l=a;h=w=0;do 0!=(q=l[w++])&&(t[A[q]++]=h);while(++hx+m[1+t];){x+=m[1+t];t++;X=(X=n-x)>c?c:X;if((p=1<<(q=r-x))>a+1)for(p-=a+1,u=r;++qf&&x>x-m[t],v[t-1][q].e=s.e,v[t-1][q].b=s.b,v[t-1][q].n=s.n,v[t-1][q].t=s.t)}s.b=r-x;w>=d?s.e=99:l[w]l[w]?16:15,s.n=l[w++]): +(s.e=g[l[w]-b],s.n=k[l[w++]-b]);p=1<>x;q>=1)h^=q;for(h^=q;(h&(1<>=d;a-=d},L=function(a,b,c){var e,f,t;if(0==c)return 0;for(t=0;;){B(g);f=k.list[R(g)];for(e=f.e;16 +c;c++)l[E[c]]=0;g=7;c=new P(l,19,19,null,null,g);if(0!=c.status)return-1;k=c.root;g=c.m;n=r+m;for(e=f=0;ec)l[e++]=f=c;else if(16==c){B(2);c=3+R(2);G(2);if(e+c>n)return-1;for(;0n)return-1;for(;0C;C++)J[C]=8;for(;256>C;C++)J[C]=9;for(;280>C;C++)J[C]=7;for(;288>C;C++)J[C]=8;b=7;C=new P(J,288,257,A,x,b);if(0!=C.status){alert("HufBuild error: "+C.status);M=-1;break b}e=C.root;b=C.m;for(C=0;30>C;C++)J[C]=5;X=5;C=new P(J,30,0,v,t,X);if(1m))throw runtime.log("alert","watchdog timeout"),"timeout!";if(0n))throw runtime.log("alert","watchdog loop overflow"),"loop overflow";}}; +core.LoopWatchDog=function(m,l){var e=Date.now(),c=0;this.check=function(){var b;if(m&&(b=Date.now(),b-e>m))throw runtime.log("alert","watchdog timeout"),"timeout!";if(0l))throw runtime.log("alert","watchdog loop overflow"),"loop overflow";}}; // Input 8 -core.Utils=function(){this.hashString=function(m){var n=0,k,c;k=0;for(c=m.length;k=k.compareBoundaryPoints(k.START_TO_START,c)&&0<=k.compareBoundaryPoints(k.END_TO_END,c)};this.rangesIntersect=function(k,c){return 0>=k.compareBoundaryPoints(k.END_TO_START,c)&&0<=k.compareBoundaryPoints(k.START_TO_END,c)};this.getNodesInRange=function(k,c){var a=[],h,b=k.startContainer.ownerDocument.createTreeWalker(k.commonAncestorContainer,NodeFilter.SHOW_ALL,c,!1);for(h=b.currentNode=k.startContainer;h;){if(c(h)=== -NodeFilter.FILTER_ACCEPT)a.push(h);else if(c(h)===NodeFilter.FILTER_REJECT)break;h=h.parentNode}a.reverse();for(h=b.nextNode();h;)a.push(h),h=b.nextNode();return a};this.normalizeTextNodes=function(k){k&&k.nextSibling&&(k=m(k,k.nextSibling));k&&k.previousSibling&&m(k.previousSibling,k)};this.rangeContainsNode=function(k,c){var a=c.ownerDocument.createRange(),h=c.nodeType===Node.TEXT_NODE?c.length:c.childNodes.length;a.setStart(k.startContainer,k.startOffset);a.setEnd(k.endContainer,k.endOffset);h= -0===a.comparePoint(c,0)&&0===a.comparePoint(c,h);a.detach();return h};this.mergeIntoParent=function(k){for(var c=k.parentNode;k.firstChild;)c.insertBefore(k.firstChild,k);c.removeChild(k);return c};this.getElementsByTagNameNS=function(k,c,a){return Array.prototype.slice.call(k.getElementsByTagNameNS(c,a))};this.rangeIntersectsNode=function(k,c){var a=c.nodeType===Node.TEXT_NODE?c.length:c.childNodes.length;return 0>=k.comparePoint(c,0)&&0<=k.comparePoint(c,a)};this.containsNode=function(k,c){return k=== -c||k.contains(c)};(function(k){var c=runtime.getWindow();null!==c&&(c=c.navigator.appVersion.toLowerCase(),c=-1===c.indexOf("chrome")&&(-1!==c.indexOf("applewebkit")||-1!==c.indexOf("safari")))&&(k.containsNode=n)})(this)}; +core.DomUtils=function(){function m(e,c){if(e.nodeType===Node.TEXT_NODE)if(0===e.length)e.parentNode.removeChild(e);else if(c.nodeType===Node.TEXT_NODE)return c.insertData(0,e.data),e.parentNode.removeChild(e),c;return e}function l(e,c){return e===c||Boolean(e.compareDocumentPosition(c)&Node.DOCUMENT_POSITION_CONTAINED_BY)}this.splitBoundaries=function(e){var c=[],b;if(e.startContainer.nodeType===Node.TEXT_NODE||e.endContainer.nodeType===Node.TEXT_NODE){b=e.endContainer;var h=e.endOffset;if(h=e.compareBoundaryPoints(e.START_TO_START,c)&&0<=e.compareBoundaryPoints(e.END_TO_END,c)};this.rangesIntersect=function(e,c){return 0>=e.compareBoundaryPoints(e.END_TO_START,c)&&0<=e.compareBoundaryPoints(e.START_TO_END,c)};this.getNodesInRange=function(e,c){var b=[],h,a=e.startContainer.ownerDocument.createTreeWalker(e.commonAncestorContainer,NodeFilter.SHOW_ALL,c,!1);for(h=a.currentNode=e.startContainer;h;){if(c(h)=== +NodeFilter.FILTER_ACCEPT)b.push(h);else if(c(h)===NodeFilter.FILTER_REJECT)break;h=h.parentNode}b.reverse();for(h=a.nextNode();h;)b.push(h),h=a.nextNode();return b};this.normalizeTextNodes=function(e){e&&e.nextSibling&&(e=m(e,e.nextSibling));e&&e.previousSibling&&m(e.previousSibling,e)};this.rangeContainsNode=function(e,c){var b=c.ownerDocument.createRange(),h=c.nodeType===Node.TEXT_NODE?c.length:c.childNodes.length;b.setStart(e.startContainer,e.startOffset);b.setEnd(e.endContainer,e.endOffset);h= +0===b.comparePoint(c,0)&&0===b.comparePoint(c,h);b.detach();return h};this.mergeIntoParent=function(e){for(var c=e.parentNode;e.firstChild;)c.insertBefore(e.firstChild,e);c.removeChild(e);return c};this.getElementsByTagNameNS=function(e,c,b){return Array.prototype.slice.call(e.getElementsByTagNameNS(c,b))};this.rangeIntersectsNode=function(e,c){var b=c.nodeType===Node.TEXT_NODE?c.length:c.childNodes.length;return 0>=e.comparePoint(c,0)&&0<=e.comparePoint(c,b)};this.containsNode=function(e,c){return e=== +c||e.contains(c)};(function(e){var c=runtime.getWindow();null!==c&&(c=c.navigator.appVersion.toLowerCase(),c=-1===c.indexOf("chrome")&&(-1!==c.indexOf("applewebkit")||-1!==c.indexOf("safari")))&&(e.containsNode=l)})(this)}; // Input 10 runtime.loadClass("core.DomUtils"); -core.Cursor=function(m,n){function k(a){a.parentNode&&(f.push(a.previousSibling),f.push(a.nextSibling),a.parentNode.removeChild(a))}function c(a,b,d){if(b.nodeType===Node.TEXT_NODE){runtime.assert(Boolean(b),"putCursorIntoTextNode: invalid container");var e=b.parentNode;runtime.assert(Boolean(e),"putCursorIntoTextNode: container without parent");runtime.assert(0<=d&&d<=b.length,"putCursorIntoTextNode: offset is out of bounds");0===d?e.insertBefore(a,b):(d!==b.length&&b.splitText(d),e.insertBefore(a, -b.nextSibling))}else if(b.nodeType===Node.ELEMENT_NODE){runtime.assert(Boolean(b),"putCursorIntoContainer: invalid container");for(e=b.firstChild;null!==e&&01/f?"-0":String(f),m(d+" should be "+b+". Was "+c+".")):m(d+" should be "+b+" (of type "+typeof b+"). Was "+f+" (of type "+typeof f+").")}var b=0,f;f=function(b,d){var c=Object.keys(b),l=Object.keys(d);c.sort();l.sort();return n(c,l)&&Object.keys(b).every(function(l){var g= -b[l],c=d[l];return a(g,c)?!0:(m(g+" should be "+c+" for key "+l),!1)})};this.areNodesEqual=c;this.shouldBeNull=function(a,b){h(a,b,"null")};this.shouldBeNonNull=function(a,b){var c,l;try{l=eval(b)}catch(f){c=f}c?m(b+" should be non-null. Threw exception "+c):null!==l?runtime.log("pass",b+" is non-null."):m(b+" should be non-null. Was "+l)};this.shouldBe=h;this.countFailedTests=function(){return b}}; -core.UnitTester=function(){function m(c,a){return""+c+""}var n=0,k={};this.runTests=function(c,a,h){function b(l){if(0===l.length)k[f]=t,n+=e.countFailedTests(),a();else{p=l[0];var g=Runtime.getFunctionName(p);runtime.log("Running "+g);q=e.countFailedTests();d.setUp();p(function(){d.tearDown();t[g]=q===e.countFailedTests();b(l.slice(1))})}}var f=Runtime.getFunctionName(c),e=new core.UnitTestRunner,d=new c(e),t={},l,p,g,q,s="BrowserRuntime"=== -runtime.type();if(k.hasOwnProperty(f))runtime.log("Test "+f+" has already run.");else{s?runtime.log("Running "+m(f,'runSuite("'+f+'");')+": "+d.description()+""):runtime.log("Running "+f+": "+d.description);g=d.tests();for(l=0;lRunning "+m(c,'runTest("'+f+'","'+c+'")')+""):runtime.log("Running "+c),q=e.countFailedTests(),d.setUp(),p(),d.tearDown(),t[c]=q===e.countFailedTests()); -b(d.asyncTests())}};this.countFailedTests=function(){return n};this.results=function(){return k}}; +core.UnitTest.provideTestAreaDiv=function(){var m=runtime.getWindow().document,l=m.getElementById("testarea");runtime.assert(!l,'Unclean test environment, found a div with id "testarea".');l=m.createElement("div");l.setAttribute("id","testarea");m.body.appendChild(l);return l}; +core.UnitTest.cleanupTestAreaDiv=function(){var m=runtime.getWindow().document,l=m.getElementById("testarea");runtime.assert(!!l&&l.parentNode===m.body,'Test environment broken, found no div with id "testarea" below body.');m.body.removeChild(l)}; +core.UnitTestRunner=function(){function m(b){a+=1;runtime.log("fail",b)}function l(a,d){var b;try{if(a.length!==d.length)return m("array of length "+a.length+" should be "+d.length+" long"),!1;for(b=0;b1/e?"-0":String(e),m(d+" should be "+a+". Was "+c+".")):m(d+" should be "+a+" (of type "+typeof a+"). Was "+e+" (of type "+typeof e+").")}var a=0,n;n=function(a,d){var c=Object.keys(a),k=Object.keys(d);c.sort();k.sort();return l(c,k)&&Object.keys(a).every(function(k){var c= +a[k],e=d[k];return b(c,e)?!0:(m(c+" should be "+e+" for key "+k),!1)})};this.areNodesEqual=c;this.shouldBeNull=function(a,b){h(a,b,"null")};this.shouldBeNonNull=function(a,b){var c,k;try{k=eval(b)}catch(e){c=e}c?m(b+" should be non-null. Threw exception "+c):null!==k?runtime.log("pass",b+" is non-null."):m(b+" should be non-null. Was "+k)};this.shouldBe=h;this.countFailedTests=function(){return a}}; +core.UnitTester=function(){function m(c,b){return""+c+""}var l=0,e={};this.runTests=function(c,b,h){function a(k){if(0===k.length)e[n]=s,l+=f.countFailedTests(),b();else{q=k[0];var c=Runtime.getFunctionName(q);runtime.log("Running "+c);p=f.countFailedTests();d.setUp();q(function(){d.tearDown();s[c]=p===f.countFailedTests();a(k.slice(1))})}}var n=Runtime.getFunctionName(c),f=new core.UnitTestRunner,d=new c(f),s={},k,q,g,p,r="BrowserRuntime"=== +runtime.type();if(e.hasOwnProperty(n))runtime.log("Test "+n+" has already run.");else{r?runtime.log("Running "+m(n,'runSuite("'+n+'");')+": "+d.description()+""):runtime.log("Running "+n+": "+d.description);g=d.tests();for(k=0;kRunning "+m(c,'runTest("'+n+'","'+c+'")')+""):runtime.log("Running "+c),p=f.countFailedTests(),d.setUp(),q(),d.tearDown(),s[c]=p===f.countFailedTests()); +a(d.asyncTests())}};this.countFailedTests=function(){return l};this.results=function(){return e}}; // Input 13 -core.PositionIterator=function(m,n,k,c){function a(){this.acceptNode=function(a){return a.nodeType===Node.TEXT_NODE&&0===a.length?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}function h(a){this.acceptNode=function(b){return b.nodeType===Node.TEXT_NODE&&0===b.length?NodeFilter.FILTER_REJECT:a.acceptNode(b)}}function b(){var a=e.currentNode.nodeType;d=a===Node.TEXT_NODE?e.currentNode.length-1:a===Node.ELEMENT_NODE?1:0}var f=this,e,d,t;this.nextPosition=function(){if(e.currentNode===m)return!1; -if(0===d&&e.currentNode.nodeType===Node.ELEMENT_NODE)null===e.firstChild()&&(d=1);else if(e.currentNode.nodeType===Node.TEXT_NODE&&d+1 "+a.length),runtime.assert(0<=b,"Error in setPosition: "+b+" < 0"), -b===a.length&&(d=void 0,e.nextSibling()?d=0:e.parentNode()&&(d=1),runtime.assert(void 0!==d,"Error in setPosition: position not valid.")),!0;g=t(a);b "+a.length),runtime.assert(0<=b,"Error in setPosition: "+b+" < 0"), +b===a.length&&(d=void 0,f.nextSibling()?d=0:f.parentNode()&&(d=1),runtime.assert(void 0!==d,"Error in setPosition: position not valid.")),!0;c=s(a);b>>8^l;return d^-1}function c(a){return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&15,a>>5&63,(a&31)<<1)}function a(a){var b=a.getFullYear();return 1980>b?0:b-1980<< -25|a.getMonth()+1<<21|a.getDate()<<16|a.getHours()<<11|a.getMinutes()<<5|a.getSeconds()>>1}function h(a,b){var d,g,l,f,e,h,k,p=this;this.load=function(b){if(void 0!==p.data)b(null,p.data);else{var d=e+34+g+l+256;d+k>q&&(d=q-k);runtime.read(a,k,d,function(d,g){if(d||null===g)b(d,g);else a:{var c=g,l=new core.ByteArray(c),q=l.readUInt32LE(),k;if(67324752!==q)b("File entry signature is wrong."+q.toString()+" "+c.length.toString(),null);else{l.pos+=22;q=l.readUInt16LE();k=l.readUInt16LE();l.pos+=q+k; -if(f){c=c.slice(l.pos,l.pos+e);if(e!==c.length){b("The amount of compressed bytes read was "+c.length.toString()+" instead of "+e.toString()+" for "+p.filename+" in "+a+".",null);break a}c=w(c,h)}else c=c.slice(l.pos,l.pos+h);h!==c.length?b("The amount of bytes read was "+c.length.toString()+" instead of "+h.toString()+" for "+p.filename+" in "+a+".",null):(p.data=c,b(null,c))}}})}};this.set=function(a,b,d,g){p.filename=a;p.data=b;p.compressed=d;p.date=g};this.error=null;b&&(d=b.readUInt32LE(),33639248!== -d?this.error="Central directory entry has wrong signature at position "+(b.pos-4).toString()+' for file "'+a+'": '+b.data.length.toString():(b.pos+=6,f=b.readUInt16LE(),this.date=c(b.readUInt32LE()),b.readUInt32LE(),e=b.readUInt32LE(),h=b.readUInt32LE(),g=b.readUInt16LE(),l=b.readUInt16LE(),d=b.readUInt16LE(),b.pos+=8,k=b.readUInt32LE(),this.filename=runtime.byteArrayToString(b.data.slice(b.pos,b.pos+g),"utf8"),b.pos+=g+l+d))}function b(a,b){if(22!==a.length)b("Central directory length should be 22.", -u);else{var d=new core.ByteArray(a),c;c=d.readUInt32LE();101010256!==c?b("Central directory signature is wrong: "+c.toString(),u):(c=d.readUInt16LE(),0!==c?b("Zip files with non-zero disk numbers are not supported.",u):(c=d.readUInt16LE(),0!==c?b("Zip files with non-zero disk numbers are not supported.",u):(c=d.readUInt16LE(),s=d.readUInt16LE(),c!==s?b("Number of entries is inconsistent.",u):(c=d.readUInt32LE(),d=d.readUInt16LE(),d=q-22-c,runtime.read(m,d,q-d,function(a,d){if(a||null===d)b(a,u);else a:{var c= -new core.ByteArray(d),l,f;g=[];for(l=0;lq?n("File '"+m+"' cannot be read.",u):runtime.read(m,q-22,22,function(a,d){a||null===n||null===d?n(a,u):b(d,n)})})}; +2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],d,c,e=a.length,g=0,g=0;d=-1;for(c=0;c>>8^g;return d^-1}function c(a){return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&15,a>>5&63,(a&31)<<1)}function b(a){var b=a.getFullYear();return 1980>b?0:b-1980<< +25|a.getMonth()+1<<21|a.getDate()<<16|a.getHours()<<11|a.getMinutes()<<5|a.getSeconds()>>1}function h(a,b){var d,e,g,k,f,n,h,r=this;this.load=function(b){if(void 0!==r.data)b(null,r.data);else{var d=f+34+e+g+256;d+h>p&&(d=p-h);runtime.read(a,h,d,function(d,c){if(d||null===c)b(d,c);else a:{var e=c,g=new core.ByteArray(e),p=g.readUInt32LE(),t;if(67324752!==p)b("File entry signature is wrong."+p.toString()+" "+e.length.toString(),null);else{g.pos+=22;p=g.readUInt16LE();t=g.readUInt16LE();g.pos+=p+t; +if(k){e=e.slice(g.pos,g.pos+f);if(f!==e.length){b("The amount of compressed bytes read was "+e.length.toString()+" instead of "+f.toString()+" for "+r.filename+" in "+a+".",null);break a}e=w(e,n)}else e=e.slice(g.pos,g.pos+n);n!==e.length?b("The amount of bytes read was "+e.length.toString()+" instead of "+n.toString()+" for "+r.filename+" in "+a+".",null):(r.data=e,b(null,e))}}})}};this.set=function(a,b,d,c){r.filename=a;r.data=b;r.compressed=d;r.date=c};this.error=null;b&&(d=b.readUInt32LE(),33639248!== +d?this.error="Central directory entry has wrong signature at position "+(b.pos-4).toString()+' for file "'+a+'": '+b.data.length.toString():(b.pos+=6,k=b.readUInt16LE(),this.date=c(b.readUInt32LE()),b.readUInt32LE(),f=b.readUInt32LE(),n=b.readUInt32LE(),e=b.readUInt16LE(),g=b.readUInt16LE(),d=b.readUInt16LE(),b.pos+=8,h=b.readUInt32LE(),this.filename=runtime.byteArrayToString(b.data.slice(b.pos,b.pos+e),"utf8"),b.pos+=e+g+d))}function a(a,b){if(22!==a.length)b("Central directory length should be 22.", +u);else{var d=new core.ByteArray(a),c;c=d.readUInt32LE();101010256!==c?b("Central directory signature is wrong: "+c.toString(),u):(c=d.readUInt16LE(),0!==c?b("Zip files with non-zero disk numbers are not supported.",u):(c=d.readUInt16LE(),0!==c?b("Zip files with non-zero disk numbers are not supported.",u):(c=d.readUInt16LE(),r=d.readUInt16LE(),c!==r?b("Number of entries is inconsistent.",u):(c=d.readUInt32LE(),d=d.readUInt16LE(),d=p-22-c,runtime.read(m,d,p-d,function(a,d){if(a||null===d)b(a,u);else a:{var c= +new core.ByteArray(d),e,k;g=[];for(e=0;ep?l("File '"+m+"' cannot be read.",u):runtime.read(m,p-22,22,function(b,d){b||null===l||null===d?l(b,u):a(d,l)})})}; // Input 18 -core.CSSUnits=function(){var m={"in":1,cm:2.54,mm:25.4,pt:72,pc:12};this.convert=function(n,k,c){return n*m[c]/m[k]};this.convertMeasure=function(m,k){var c,a;m&&k?(c=parseFloat(m),a=m.replace(c.toString(),""),c=this.convert(c,a,k)):c="";return c.toString()};this.getUnits=function(m){return m.substr(m.length-2,m.length)}}; +core.CSSUnits=function(){var m={"in":1,cm:2.54,mm:25.4,pt:72,pc:12};this.convert=function(l,e,c){return l*m[c]/m[e]};this.convertMeasure=function(m,e){var c,b;m&&e?(c=parseFloat(m),b=m.replace(c.toString(),""),c=this.convert(c,b,e)):c="";return c.toString()};this.getUnits=function(m){return m.substr(m.length-2,m.length)}}; // Input 19 xmldom.LSSerializerFilter=function(){}; // Input 20 -"function"!==typeof Object.create&&(Object.create=function(m){var n=function(){};n.prototype=m;return new n}); -xmldom.LSSerializer=function(){function m(a){var c=a||{},b=function(a){var b={},d;for(d in a)a.hasOwnProperty(d)&&(b[a[d]]=d);return b}(a),f=[c],e=[b],d=0;this.push=function(){d+=1;c=f[d]=Object.create(c);b=e[d]=Object.create(b)};this.pop=function(){f[d]=void 0;e[d]=void 0;d-=1;c=f[d];b=e[d]};this.getLocalNamespaceDefinitions=function(){return b};this.getQName=function(a){var d=a.namespaceURI,f=0,g;if(!d)return a.localName;if(g=b[d])return g+":"+a.localName;do{g||!a.prefix?(g="ns"+f,f+=1):g=a.prefix; -if(c[g]===d)break;if(!c[g]){c[g]=d;b[d]=g;break}g=null}while(null===g);return g+":"+a.localName}}function n(a){return a.replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")}function k(a,h){var b="",f=c.filter?c.filter.acceptNode(h):NodeFilter.FILTER_ACCEPT,e;if(f===NodeFilter.FILTER_ACCEPT&&h.nodeType===Node.ELEMENT_NODE){a.push();e=a.getQName(h);var d,m=h.attributes,l,p,g,q="",s;d="<"+e;l=m.length;for(p=0;p")}if(f===NodeFilter.FILTER_ACCEPT||f===NodeFilter.FILTER_SKIP){for(f=h.firstChild;f;)b+=k(a,f),f=f.nextSibling;h.nodeValue&&(b+=n(h.nodeValue))}e&&(b+="",a.pop());return b}var c=this;this.filter=null;this.writeToString=function(a,c){if(!a)return"";var b=new m(c);return k(b,a)}}; +"function"!==typeof Object.create&&(Object.create=function(m){var l=function(){};l.prototype=m;return new l}); +xmldom.LSSerializer=function(){function m(b){var c=b||{},a=function(a){var b={},d;for(d in a)a.hasOwnProperty(d)&&(b[a[d]]=d);return b}(b),e=[c],f=[a],d=0;this.push=function(){d+=1;c=e[d]=Object.create(c);a=f[d]=Object.create(a)};this.pop=function(){e[d]=void 0;f[d]=void 0;d-=1;c=e[d];a=f[d]};this.getLocalNamespaceDefinitions=function(){return a};this.getQName=function(b){var d=b.namespaceURI,e=0,g;if(!d)return b.localName;if(g=a[d])return g+":"+b.localName;do{g||!b.prefix?(g="ns"+e,e+=1):g=b.prefix; +if(c[g]===d)break;if(!c[g]){c[g]=d;a[d]=g;break}g=null}while(null===g);return g+":"+b.localName}}function l(b){return b.replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")}function e(b,h){var a="",n=c.filter?c.filter.acceptNode(h):NodeFilter.FILTER_ACCEPT,f;if(n===NodeFilter.FILTER_ACCEPT&&h.nodeType===Node.ELEMENT_NODE){b.push();f=b.getQName(h);var d,m=h.attributes,k,q,g,p="",r;d="<"+f;k=m.length;for(q=0;q")}if(n===NodeFilter.FILTER_ACCEPT||n===NodeFilter.FILTER_SKIP){for(n=h.firstChild;n;)a+=e(b,n),n=n.nextSibling;h.nodeValue&&(a+=l(h.nodeValue))}f&&(a+="",b.pop());return a}var c=this;this.filter=null;this.writeToString=function(b,c){if(!b)return"";var a=new m(c);return e(a,b)}}; // Input 21 -xmldom.RelaxNGParser=function(){function m(a,b){this.message=function(){b&&(a+=1===b.nodeType?" Element ":" Node ",a+=b.nodeName,b.nodeValue&&(a+=" with value '"+b.nodeValue+"'"),a+=".");return a}}function n(a){if(2>=a.e.length)return a;var b={name:a.name,e:a.e.slice(0,2)};return n({name:a.name,e:[b].concat(a.e.slice(2))})}function k(a){a=a.split(":",2);var b="",c;1===a.length?a=["",a[0]]:b=a[0];for(c in f)f[c]===b&&(a[0]=c);return a}function c(a,b){for(var l=0,f,g,e=a.name;a.e&&l=a.e.length)return a;var b={name:a.name,e:a.e.slice(0,2)};return l({name:a.name,e:[b].concat(a.e.slice(2))})}function e(a){a=a.split(":",2);var b="",c;1===a.length?a=["",a[0]]:b=a[0];for(c in n)n[c]===b&&(a[0]=c);return a}function c(a,b){for(var k=0,f,g,p=a.name;a.e&&k=c.length)return b;0===g&&(g=0);for(var l=c.item(g);l.namespaceURI===d;){g+=1;if(g>=c.length)return b;l=c.item(g)}return l=f(a,b.attDeriv(a,c.item(g)),c,g+1)}function e(a,b,d){d.e[0].a?(a.push(d.e[0].text),b.push(d.e[0].a.ns)):e(a,b,d.e[0]);d.e[1].a?(a.push(d.e[1].text),b.push(d.e[1].a.ns)): -e(a,b,d.e[1])}var d="http://www.w3.org/2000/xmlns/",t,l,p,g,q,s,w,u,A,x,r={type:"notAllowed",nullable:!1,hash:"notAllowed",textDeriv:function(){return r},startTagOpenDeriv:function(){return r},attDeriv:function(){return r},startTagCloseDeriv:function(){return r},endTagDeriv:function(){return r}},v={type:"empty",nullable:!0,hash:"empty",textDeriv:function(){return r},startTagOpenDeriv:function(){return r},attDeriv:function(){return r},startTagCloseDeriv:function(){return v},endTagDeriv:function(){return r}}, -D={type:"text",nullable:!0,hash:"text",textDeriv:function(){return D},startTagOpenDeriv:function(){return r},attDeriv:function(){return r},startTagCloseDeriv:function(){return D},endTagDeriv:function(){return r}},G,y,P;t=c("choice",function(a,b){if(a===r)return b;if(b===r||a===b)return a},function(b,d){var c={},g;a(c,{p1:b,p2:d});d=b=void 0;for(g in c)c.hasOwnProperty(g)&&(void 0===b?b=c[g]:d=void 0===d?c[g]:t(d,c[g]));return function(a,b){return{type:"choice",p1:a,p2:b,nullable:a.nullable||b.nullable, -textDeriv:function(d,c){return t(a.textDeriv(d,c),b.textDeriv(d,c))},startTagOpenDeriv:k(function(d){return t(a.startTagOpenDeriv(d),b.startTagOpenDeriv(d))}),attDeriv:function(d,c){return t(a.attDeriv(d,c),b.attDeriv(d,c))},startTagCloseDeriv:m(function(){return t(a.startTagCloseDeriv(),b.startTagCloseDeriv())}),endTagDeriv:m(function(){return t(a.endTagDeriv(),b.endTagDeriv())})}}(b,d)});l=function(a,b,d){return function(){var c={},g=0;return function(f,l){var e=b&&b(f,l),h,q;if(void 0!==e)return e; -e=f.hash||f.toString();h=l.hash||l.toString();e=c.length)return b;0===e&&(e=0);for(var g=c.item(e);g.namespaceURI===d;){e+=1;if(e>=c.length)return b;g=c.item(e)}return g=n(a,b.attDeriv(a,c.item(e)),c,e+1)}function f(a,b,c){c.e[0].a?(a.push(c.e[0].text),b.push(c.e[0].a.ns)):f(a,b,c.e[0]);c.e[1].a?(a.push(c.e[1].text),b.push(c.e[1].a.ns)): +f(a,b,c.e[1])}var d="http://www.w3.org/2000/xmlns/",s,k,q,g,p,r,w,u,A,x,v={type:"notAllowed",nullable:!1,hash:"notAllowed",textDeriv:function(){return v},startTagOpenDeriv:function(){return v},attDeriv:function(){return v},startTagCloseDeriv:function(){return v},endTagDeriv:function(){return v}},t={type:"empty",nullable:!0,hash:"empty",textDeriv:function(){return v},startTagOpenDeriv:function(){return v},attDeriv:function(){return v},startTagCloseDeriv:function(){return t},endTagDeriv:function(){return v}}, +E={type:"text",nullable:!0,hash:"text",textDeriv:function(){return E},startTagOpenDeriv:function(){return v},attDeriv:function(){return v},startTagCloseDeriv:function(){return E},endTagDeriv:function(){return v}},H,y,P;s=c("choice",function(a,b){if(a===v)return b;if(b===v||a===b)return a},function(a,c){var d={},g;b(d,{p1:a,p2:c});c=a=void 0;for(g in d)d.hasOwnProperty(g)&&(void 0===a?a=d[g]:c=void 0===c?d[g]:s(c,d[g]));return function(a,b){return{type:"choice",p1:a,p2:b,nullable:a.nullable||b.nullable, +textDeriv:function(c,d){return s(a.textDeriv(c,d),b.textDeriv(c,d))},startTagOpenDeriv:e(function(c){return s(a.startTagOpenDeriv(c),b.startTagOpenDeriv(c))}),attDeriv:function(c,d){return s(a.attDeriv(c,d),b.attDeriv(c,d))},startTagCloseDeriv:m(function(){return s(a.startTagCloseDeriv(),b.startTagCloseDeriv())}),endTagDeriv:m(function(){return s(a.endTagDeriv(),b.endTagDeriv())})}}(a,c)});k=function(a,b,c){return function(){var d={},e=0;return function(g,f){var k=b&&b(g,f),p,n;if(void 0!==k)return k; +k=g.hash||g.toString();p=f.hash||f.toString();kNode.ELEMENT_NODE;){if(d!==Node.COMMENT_NODE&&(d!==Node.TEXT_NODE||!/^\s+$/.test(c.currentNode.nodeValue)))return[new m("Not allowed node of type "+ -d+".")];d=(e=c.nextSibling())?e.nodeType:0}if(!e)return[new m("Missing element "+a.names)];if(a.names&&-1===a.names.indexOf(h[e.namespaceURI]+":"+e.localName))return[new m("Found "+e.nodeName+" instead of "+a.names+".",e)];if(c.firstChild()){for(k=n(a.e[1],c,e);c.nextSibling();)if(d=c.currentNode.nodeType,!(c.currentNode&&c.currentNode.nodeType===Node.TEXT_NODE&&/^\s+$/.test(c.currentNode.nodeValue)||d===Node.COMMENT_NODE))return[new m("Spurious content.",c.currentNode)];if(c.parentNode()!==e)return[new m("Implementation error.")]}else k= -n(a.e[1],c,e);c.nextSibling();return k}var c,a,h;a=function(b,c,e,d){var h=b.name,l=null;if("text"===h)a:{for(var p=(b=c.currentNode)?b.nodeType:0;b!==e&&3!==p;){if(1===p){l=[new m("Element not allowed here.",b)];break a}p=(b=c.nextSibling())?b.nodeType:0}c.nextSibling();l=null}else if("data"===h)l=null;else if("value"===h)d!==b.text&&(l=[new m("Wrong value, should be '"+b.text+"', not '"+d+"'",e)]);else if("list"===h)l=null;else if("attribute"===h)a:{if(2!==b.e.length)throw"Attribute with wrong # of elements: "+ -b.e.length;h=b.localnames.length;for(l=0;lNode.ELEMENT_NODE;){if(d!==Node.COMMENT_NODE&&(d!==Node.TEXT_NODE||!/^\s+$/.test(b.currentNode.nodeValue)))return[new m("Not allowed node of type "+ +d+".")];d=(c=b.nextSibling())?c.nodeType:0}if(!c)return[new m("Missing element "+a.names)];if(a.names&&-1===a.names.indexOf(h[c.namespaceURI]+":"+c.localName))return[new m("Found "+c.nodeName+" instead of "+a.names+".",c)];if(b.firstChild()){for(e=l(a.e[1],b,c);b.nextSibling();)if(d=b.currentNode.nodeType,!(b.currentNode&&b.currentNode.nodeType===Node.TEXT_NODE&&/^\s+$/.test(b.currentNode.nodeValue)||d===Node.COMMENT_NODE))return[new m("Spurious content.",b.currentNode)];if(b.parentNode()!==c)return[new m("Implementation error.")]}else e= +l(a.e[1],b,c);b.nextSibling();return e}var c,b,h;b=function(a,c,f,d){var h=a.name,k=null;if("text"===h)a:{for(var q=(a=c.currentNode)?a.nodeType:0;a!==f&&3!==q;){if(1===q){k=[new m("Element not allowed here.",a)];break a}q=(a=c.nextSibling())?a.nodeType:0}c.nextSibling();k=null}else if("data"===h)k=null;else if("value"===h)d!==a.text&&(k=[new m("Wrong value, should be '"+a.text+"', not '"+d+"'",f)]);else if("list"===h)k=null;else if("attribute"===h)a:{if(2!==a.e.length)throw"Attribute with wrong # of elements: "+ +a.e.length;h=a.localnames.length;for(k=0;k=e&&c.push(n(a.substring(b,d)))):"["===a[d]&&(0>=e&&(b=d+1),e+=1),d+=1;return d};xmldom.XPathIterator.prototype.next=function(){};xmldom.XPathIterator.prototype.reset=function(){};d=function(d,e,g){var h,k,m,u;for(h=0;h=f&&c.push(l(a.substring(b,d)))):"["===a[d]&&(0>=f&&(b=d+1),f+=1),d+=1;return d};xmldom.XPathIterator.prototype.next=function(){};xmldom.XPathIterator.prototype.reset=function(){};d=function(d,e,g){var f,h,m,l;for(f=0;f=(n.getBoundingClientRect().top-x.bottom)/u?c.style.top=Math.abs(n.getBoundingClientRect().top-x.bottom)/u+20+"px":c.style.top="0px");h.style.left=d.getBoundingClientRect().width/u+"px";var d=h.style,n=h.getBoundingClientRect().left/u,A=h.getBoundingClientRect().top/u,x=c.getBoundingClientRect().left/u,r=c.getBoundingClientRect().top/u,v=0,D= -0,v=x-n,v=v*v,D=r-A,D=D*D,n=Math.sqrt(v+D);d.width=n+"px";u=Math.asin((c.getBoundingClientRect().top-h.getBoundingClientRect().top)/(u*parseFloat(h.style.width)));h.style.transform="rotate("+u+"rad)";h.style.MozTransform="rotate("+u+"rad)";h.style.WebkitTransform="rotate("+u+"rad)";h.style.msTransform="rotate("+u+"rad)";b&&(u=t.getComputedStyle(b,":before").content)&&"none"!==u&&(u=u.substring(1,u.length-1),b.firstChild?b.firstChild.nodeValue=u:b.appendChild(e.createTextNode(u)))}}var f=[],e=n.ownerDocument, -d=new odf.OdfUtils,t=runtime.getWindow();runtime.assert(Boolean(t),"Expected to be run in an environment which has a global window, like a browser.");this.rerenderAnnotations=b;this.addAnnotation=function(d){a(!0);f.push({node:d.node,end:d.end});h();var k=e.createElement("div"),g=e.createElement("div"),m=e.createElement("div"),n=e.createElement("div"),w=e.createElement("div"),u=d.node;k.className="annotationWrapper";u.parentNode.insertBefore(k,u);g.className="annotationNote";g.appendChild(u);w.className= -"annotationRemoveButton";g.appendChild(w);m.className="annotationConnector horizontal";n.className="annotationConnector angular";k.appendChild(g);k.appendChild(m);k.appendChild(n);d.end&&c(d);b()};this.forgetAnnotations=function(){for(;f.length;){var b=f[0],c=f.indexOf(b),d=b.node,h=d.parentNode.parentNode;"div"===h.localName&&(h.parentNode.insertBefore(d,h),h.parentNode.removeChild(h));b=b.node.getAttributeNS(odf.Namespaces.officens,"name");b=e.querySelectorAll('span.annotationHighlight[annotation="'+ -b+'"]');h=d=void 0;for(d=0;d=(l.getBoundingClientRect().top-x.bottom)/u?c.style.top=Math.abs(l.getBoundingClientRect().top-x.bottom)/u+20+"px":c.style.top="0px");h.style.left=d.getBoundingClientRect().width/u+"px";var d=h.style,l=h.getBoundingClientRect().left/u,A=h.getBoundingClientRect().top/u,x=c.getBoundingClientRect().left/u,v=c.getBoundingClientRect().top/u,t=0,E= +0,t=x-l,t=t*t,E=v-A,E=E*E,l=Math.sqrt(t+E);d.width=l+"px";u=Math.asin((c.getBoundingClientRect().top-h.getBoundingClientRect().top)/(u*parseFloat(h.style.width)));h.style.transform="rotate("+u+"rad)";h.style.MozTransform="rotate("+u+"rad)";h.style.WebkitTransform="rotate("+u+"rad)";h.style.msTransform="rotate("+u+"rad)";b&&(u=s.getComputedStyle(b,":before").content)&&"none"!==u&&(u=u.substring(1,u.length-1),b.firstChild?b.firstChild.nodeValue=u:b.appendChild(f.createTextNode(u)))}}var n=[],f=l.ownerDocument, +d=new odf.OdfUtils,s=runtime.getWindow();runtime.assert(Boolean(s),"Expected to be run in an environment which has a global window, like a browser.");this.rerenderAnnotations=a;this.addAnnotation=function(d){b(!0);n.push({node:d.node,end:d.end});h();var e=f.createElement("div"),g=f.createElement("div"),p=f.createElement("div"),m=f.createElement("div"),l=f.createElement("div"),u=d.node;e.className="annotationWrapper";u.parentNode.insertBefore(e,u);g.className="annotationNote";g.appendChild(u);l.className= +"annotationRemoveButton";g.appendChild(l);p.className="annotationConnector horizontal";m.className="annotationConnector angular";e.appendChild(g);e.appendChild(p);e.appendChild(m);d.end&&c(d);a()};this.forgetAnnotations=function(){for(;n.length;){var a=n[0],c=n.indexOf(a),d=a.node,e=d.parentNode.parentNode;"div"===e.localName&&(e.parentNode.insertBefore(d,e),e.parentNode.removeChild(e));a=a.node.getAttributeNS(odf.Namespaces.officens,"name");a=f.querySelectorAll('span.annotationHighlight[annotation="'+ +a+'"]');e=d=void 0;for(d=0;d=b.value||"%"===b.unit)?null:b;return b||q(a)};this.parseFoLineHeight=function(a){var b;b=(b=g(a))&&(0>b.value|| -"%"===b.unit)?null:b;return b||q(a)};this.getImpactedParagraphs=function(a){var b=a.commonAncestorContainer,c=[];for(b.nodeType===Node.ELEMENT_NODE&&(c=x.getElementsByTagNameNS(b,w,"p").concat(x.getElementsByTagNameNS(b,w,"h")));b&&!m(b);)b=b.parentNode;b&&c.push(b);return c.filter(function(b){return x.rangeIntersectsNode(a,b)})};this.getTextNodes=function(a,b){var c=a.startContainer.ownerDocument.createRange(),d;d=x.getNodesInRange(a,function(d){c.selectNodeContents(d);if(d.nodeType===Node.TEXT_NODE){if(b&& -x.rangesIntersect(a,c)||x.containsRange(a,c))return Boolean(n(d)&&(!k(d.textContent)||p(d,0)))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}else if(x.rangesIntersect(a,c)&&s(d))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});c.detach();return d};this.getTextElements=function(b,d){var g=b.startContainer.ownerDocument.createRange(),e;e=x.getNodesInRange(b,function(e){var f=e.nodeType;g.selectNodeContents(e);if(f===Node.TEXT_NODE){if(x.containsRange(b,g)&&(d||Boolean(n(e)&&(!k(e.textContent)|| -p(e,0)))))return NodeFilter.FILTER_ACCEPT}else if(a(e)){if(x.containsRange(b,g))return NodeFilter.FILTER_ACCEPT}else if(s(e)||c(e))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});g.detach();return e};this.getParagraphElements=function(a){var b=a.startContainer.ownerDocument.createRange(),d;d=x.getNodesInRange(a,function(d){b.selectNodeContents(d);if(m(d)){if(x.rangesIntersect(a,b))return NodeFilter.FILTER_ACCEPT}else if(s(d)||c(d))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT}); -b.detach();return d}}; +odf.OdfUtils=function(){function m(a){var b=a&&a.localName;return("p"===b||"h"===b)&&a.namespaceURI===u}function l(a){for(;a&&!m(a);)a=a.parentNode;return a}function e(a){return/^[ \t\r\n]+$/.test(a)}function c(a){var b=a&&a.localName;return/^(span|p|h|a|meta)$/.test(b)&&a.namespaceURI===u||"span"===b&&"annotationHighlight"===a.className?!0:!1}function b(a){var b=a&&a.localName,c,d=!1;b&&(c=a.namespaceURI,c===u?d="s"===b||"tab"===b||"line-break"===b:c===A&&(d="frame"===b&&"as-char"===a.getAttributeNS(u, +"anchor-type")));return d}function h(a){for(;null!==a.firstChild&&c(a);)a=a.firstChild;return a}function a(a){for(;null!==a.lastChild&&c(a);)a=a.lastChild;return a}function n(b){for(;!m(b)&&null===b.previousSibling;)b=b.parentNode;return m(b)?null:a(b.previousSibling)}function f(a){for(;!m(a)&&null===a.nextSibling;)a=a.parentNode;return m(a)?null:h(a.nextSibling)}function d(a){for(var c=!1;a;)if(a.nodeType===Node.TEXT_NODE)if(0===a.length)a=n(a);else return!e(a.data.substr(a.length-1,1));else b(a)? +(c=!0,a=null):a=n(a);return c}function s(a){var c=!1;for(a=a&&h(a);a;){if(a.nodeType===Node.TEXT_NODE&&0a.value||"%"===a.unit)?null:a}function r(a){return(a=g(a))&&"%"!==a.unit?null:a}function w(a){switch(a.namespaceURI){case odf.Namespaces.drawns:case odf.Namespaces.svgns:case odf.Namespaces.dr3dns:return!1;case odf.Namespaces.textns:switch(a.localName){case "note-body":case "ruby-text":return!1}break;case odf.Namespaces.officens:switch(a.localName){case "annotation":case "binary-data":case "event-listeners":return!1}break;default:switch(a.localName){case "editinfo":return!1}}return!0} +var u="urn:oasis:names:tc:opendocument:xmlns:text:1.0",A="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",x=/^\s*$/,v=new core.DomUtils;this.isParagraph=m;this.getParagraphElement=l;this.isWithinTrackedChanges=function(a,b){for(;a&&a!==b;){if(a.namespaceURI===u&&"tracked-changes"===a.localName)return!0;a=a.parentNode}return!1};this.isListItem=function(a){return"list-item"===(a&&a.localName)&&a.namespaceURI===u};this.isODFWhitespace=e;this.isGroupingElement=c;this.isCharacterElement=b;this.firstChild= +h;this.lastChild=a;this.previousNode=n;this.nextNode=f;this.scanLeftForNonWhitespace=d;this.lookLeftForCharacter=function(a){var c;c=0;a.nodeType===Node.TEXT_NODE&&0=b.value||"%"===b.unit)?null:b;return b||r(a)};this.parseFoLineHeight=function(a){return p(a)|| +r(a)};this.getImpactedParagraphs=function(a){var b=a.commonAncestorContainer,c=[];for(b.nodeType===Node.ELEMENT_NODE&&(c=v.getElementsByTagNameNS(b,u,"p").concat(v.getElementsByTagNameNS(b,u,"h")));b&&!m(b);)b=b.parentNode;b&&c.push(b);return c.filter(function(b){return v.rangeIntersectsNode(a,b)})};this.getTextNodes=function(a,b){var c=a.startContainer.ownerDocument.createRange(),d;d=v.getNodesInRange(a,function(d){c.selectNodeContents(d);if(d.nodeType===Node.TEXT_NODE){if(b&&v.rangesIntersect(a, +c)||v.containsRange(a,c))return Boolean(l(d)&&(!e(d.textContent)||q(d,0)))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}else if(v.rangesIntersect(a,c)&&w(d))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});c.detach();return d};this.getTextElements=function(a,d){var f=a.startContainer.ownerDocument.createRange(),g;g=v.getNodesInRange(a,function(g){var h=g.nodeType;f.selectNodeContents(g);if(h===Node.TEXT_NODE){if(v.containsRange(a,f)&&(d||Boolean(l(g)&&(!e(g.textContent)||q(g,0)))))return NodeFilter.FILTER_ACCEPT}else if(b(g)){if(v.containsRange(a, +f))return NodeFilter.FILTER_ACCEPT}else if(w(g)||c(g))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});f.detach();return g};this.getParagraphElements=function(a){var b=a.startContainer.ownerDocument.createRange(),d;d=v.getNodesInRange(a,function(d){b.selectNodeContents(d);if(m(d)){if(v.rangesIntersect(a,b))return NodeFilter.FILTER_ACCEPT}else if(w(d)||c(d))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});b.detach();return d}}; // Input 30 /* @@ -566,7 +565,7 @@ b.detach();return d}}; @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("odf.OdfUtils"); -odf.TextSerializer=function(){function m(c){var a="",h=n.filter?n.filter.acceptNode(c):NodeFilter.FILTER_ACCEPT,b=c.nodeType,f;if(h===NodeFilter.FILTER_ACCEPT||h===NodeFilter.FILTER_SKIP)for(f=c.firstChild;f;)a+=m(f),f=f.nextSibling;h===NodeFilter.FILTER_ACCEPT&&(b===Node.ELEMENT_NODE&&k.isParagraph(c)?a+="\n":b===Node.TEXT_NODE&&c.textContent&&(a+=c.textContent));return a}var n=this,k=new odf.OdfUtils;this.filter=null;this.writeToString=function(c){return c?m(c):""}}; +odf.TextSerializer=function(){function m(c){var b="",h=l.filter?l.filter.acceptNode(c):NodeFilter.FILTER_ACCEPT,a=c.nodeType,n;if(h===NodeFilter.FILTER_ACCEPT||h===NodeFilter.FILTER_SKIP)for(n=c.firstChild;n;)b+=m(n),n=n.nextSibling;h===NodeFilter.FILTER_ACCEPT&&(a===Node.ELEMENT_NODE&&e.isParagraph(c)?b+="\n":a===Node.TEXT_NODE&&c.textContent&&(b+=c.textContent));return b}var l=this,e=new odf.OdfUtils;this.filter=null;this.writeToString=function(c){return c?m(c):""}}; // Input 31 /* @@ -603,10 +602,10 @@ odf.TextSerializer=function(){function m(c){var a="",h=n.filter?n.filter.acceptN @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("core.DomUtils");runtime.loadClass("core.LoopWatchDog");runtime.loadClass("odf.Namespaces"); -odf.TextStyleApplicator=function(m,n,k){function c(a){function b(a,c){return"object"===typeof a&&"object"===typeof c?Object.keys(a).every(function(d){return b(a[d],c[d])}):a===c}this.isStyleApplied=function(c){c=n.getAppliedStylesForElement(c);return b(a,c)}}function a(a){var c={};this.applyStyleToContainer=function(h){var p;p=h.getAttributeNS(b,"style-name");var g=h.ownerDocument;p=p||"";if(!c.hasOwnProperty(p)){var q=p,s=p,w;s?(w=n.getStyleElement(s,"text"),w.parentNode===k?g=w.cloneNode(!0):(g= -g.createElementNS(f,"style:style"),g.setAttributeNS(f,"style:parent-style-name",s),g.setAttributeNS(f,"style:family","text"),g.setAttributeNS(e,"scope","document-content"))):(g=g.createElementNS(f,"style:style"),g.setAttributeNS(f,"style:family","text"),g.setAttributeNS(e,"scope","document-content"));n.updateStyle(g,a,m);k.appendChild(g);c[q]=g}p=c[p].getAttributeNS(f,"name");h.setAttributeNS(b,"text:style-name",p)}}var h=new core.DomUtils,b=odf.Namespaces.textns,f=odf.Namespaces.stylens,e="urn:webodf:names:scope"; -this.applyStyle=function(d,e,f){var k={},g,m,n,w;runtime.assert(f&&f["style:text-properties"],"applyStyle without any text properties");k["style:text-properties"]=f["style:text-properties"];n=new a(k);w=new c(k);d.forEach(function(a){g=w.isStyleApplied(a);if(!1===g){var c=a.ownerDocument,d=a.parentNode,f,l=a,k=new core.LoopWatchDog(1E3);"span"===d.localName&&d.namespaceURI===b?(a.previousSibling&&!h.rangeContainsNode(e,a.previousSibling)?(c=d.cloneNode(!1),d.parentNode.insertBefore(c,d.nextSibling)): -c=d,f=!0):(c=c.createElementNS(b,"text:span"),d.insertBefore(c,a),f=!1);for(;l&&(l===a||h.rangeContainsNode(e,l));)k.check(),d=l.nextSibling,l.parentNode!==c&&c.appendChild(l),l=d;if(l&&f)for(a=c.cloneNode(!1),c.parentNode.insertBefore(a,c.nextSibling);l;)k.check(),d=l.nextSibling,a.appendChild(l),l=d;m=c;n.applyStyleToContainer(m)}})}}; +odf.TextStyleApplicator=function(m,l,e){function c(a){function b(a,c){return"object"===typeof a&&"object"===typeof c?Object.keys(a).every(function(d){return b(a[d],c[d])}):a===c}this.isStyleApplied=function(c){c=l.getAppliedStylesForElement(c);return b(a,c)}}function b(b){var c={};this.applyStyleToContainer=function(h){var q;q=h.getAttributeNS(a,"style-name");var g=h.ownerDocument;q=q||"";if(!c.hasOwnProperty(q)){var p=q,r;r=q?l.createDerivedStyleObject(q,"text",b):b;g=g.createElementNS(n,"style:style"); +l.updateStyle(g,r);g.setAttributeNS(n,"style:name",m.generateName());g.setAttributeNS(n,"style:family","text");g.setAttributeNS(f,"scope","document-content");e.appendChild(g);c[p]=g}q=c[q].getAttributeNS(n,"name");h.setAttributeNS(a,"text:style-name",q)}}var h=new core.DomUtils,a=odf.Namespaces.textns,n=odf.Namespaces.stylens,f="urn:webodf:names:scope";this.applyStyle=function(d,e,f){var n={},g,m,l,w;runtime.assert(f&&f["style:text-properties"],"applyStyle without any text properties");n["style:text-properties"]= +f["style:text-properties"];l=new b(n);w=new c(n);d.forEach(function(b){g=w.isStyleApplied(b);if(!1===g){var c=b.ownerDocument,d=b.parentNode,f,k=b,n=new core.LoopWatchDog(1E3);"span"===d.localName&&d.namespaceURI===a?(b.previousSibling&&!h.rangeContainsNode(e,b.previousSibling)?(c=d.cloneNode(!1),d.parentNode.insertBefore(c,d.nextSibling)):c=d,f=!0):(c=c.createElementNS(a,"text:span"),d.insertBefore(c,b),f=!1);for(;k&&(k===b||h.rangeContainsNode(e,k));)n.check(),d=k.nextSibling,k.parentNode!==c&& +c.appendChild(k),k=d;if(k&&f)for(b=c.cloneNode(!1),c.parentNode.insertBefore(b,c.nextSibling);k;)n.check(),d=k.nextSibling,b.appendChild(k),k=d;m=c;l.applyStyleToContainer(m)}})}}; // Input 32 /* @@ -643,48 +642,48 @@ c=d,f=!0):(c=c.createElementNS(b,"text:span"),d.insertBefore(c,a),f=!1);for(;l&& @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfUtils");runtime.loadClass("xmldom.XPath");runtime.loadClass("core.CSSUnits"); -odf.Style2CSS=function(){function m(a){var b={},c,d;if(!a)return b;for(a=a.firstChild;a;){if(d=a.namespaceURI!==q||"style"!==a.localName&&"default-style"!==a.localName?a.namespaceURI===u&&"list-style"===a.localName?"list":a.namespaceURI!==q||"page-layout"!==a.localName&&"default-page-layout"!==a.localName?void 0:"page":a.getAttributeNS(q,"family"))(c=a.getAttributeNS&&a.getAttributeNS(q,"name"))||(c=""),d=b[d]=b[d]||{},d[c]=a;a=a.nextSibling}return b}function n(a,b){if(!b||!a)return null;if(a[b])return a[b]; -var c,d;for(c in a)if(a.hasOwnProperty(c)&&(d=n(a[c].derivedStyles,b)))return d;return null}function k(a,b,c){var d=b[a],e,g;d&&(e=d.getAttributeNS(q,"parent-style-name"),g=null,e&&(g=n(c,e),!g&&b[e]&&(k(e,b,c),g=b[e],b[e]=null)),g?(g.derivedStyles||(g.derivedStyles={}),g.derivedStyles[a]=d):c[a]=d)}function c(a,b){for(var c in a)a.hasOwnProperty(c)&&(k(c,a,b),a[c]=null)}function a(a,b){var c=r[a],d;if(null===c)return null;d=b?"["+c+'|style-name="'+b+'"]':"["+c+"|style-name]";"presentation"===c&& -(c="draw",d=b?'[presentation|style-name="'+b+'"]':"[presentation|style-name]");return c+"|"+v[a].join(d+","+c+"|")+d}function h(b,c,d){var e=[],g,f;e.push(a(b,c));for(g in d.derivedStyles)if(d.derivedStyles.hasOwnProperty(g))for(f in c=h(b,g,d.derivedStyles[g]),c)c.hasOwnProperty(f)&&e.push(c[f]);return e}function b(a,b,c){if(!a)return null;for(a=a.firstChild;a;){if(a.namespaceURI===b&&a.localName===c)return b=a;a=a.nextSibling}return null}function f(a,b){var c="",d,e;for(d in b)if(b.hasOwnProperty(d)&& -(d=b[d],e=a.getAttributeNS(d[0],d[1]))){e=e.trim();if(L.hasOwnProperty(d[1])){var g=e.indexOf(" "),f=void 0,h=void 0;-1!==g?(f=e.substring(0,g),h=e.substring(g)):(f=e,h="");(f=aa.parseLength(f))&&("pt"===f.unit&&0.75>f.value)&&(e="0.75pt"+h)}d[2]&&(c+=d[2]+":"+e+";")}return c}function e(a){return(a=b(a,q,"text-properties"))?aa.parseFoFontSize(a.getAttributeNS(g,"font-size")):null}function d(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,b,c,d){return b+b+c+c+d+d});return(a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a))? -{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null}function t(a,b,c,d){b='text|list[text|style-name="'+b+'"]';var e=c.getAttributeNS(u,"level"),g;c=aa.getFirstNonWhitespaceChild(c);c=aa.getFirstNonWhitespaceChild(c);var f;c&&(g=c.attributes,f=g["fo:text-indent"]?g["fo:text-indent"].value:void 0,g=g["fo:margin-left"]?g["fo:margin-left"].value:void 0);f||(f="-0.6cm");c="-"===f.charAt(0)?f.substring(1):"-"+f;for(e=e&&parseInt(e,10);1 text|list-item > text|list",e-=1;e=b+" > text|list-item > *:not(text|list):first-child"; -void 0!==g&&(g=e+"{margin-left:"+g+";}",a.insertRule(g,a.cssRules.length));d=b+" > text|list-item > *:not(text|list):first-child:before{"+d+";";d+="counter-increment:list;";d+="margin-left:"+f+";";d+="width:"+c+";";d+="display:inline-block}";try{a.insertRule(d,a.cssRules.length)}catch(h){throw h;}}function l(a,c,k,m){if("list"===c)for(var n=m.firstChild,s,r;n;){if(n.namespaceURI===u)if(s=n,"list-level-style-number"===n.localName){var v=s;r=v.getAttributeNS(q,"num-format");var L=v.getAttributeNS(q, -"num-suffix"),C={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},v=v.getAttributeNS(q,"num-prefix")||"",v=C.hasOwnProperty(r)?v+(" counter(list, "+C[r]+")"):r?v+("'"+r+"';"):v+" ''";L&&(v+=" '"+L+"'");r="content: "+v+";";t(a,k,s,r)}else"list-level-style-image"===n.localName?(r="content: none;",t(a,k,s,r)):"list-level-style-bullet"===n.localName&&(r="content: '"+s.getAttributeNS(u,"bullet-char")+"';",t(a,k,s,r));n=n.nextSibling}else if("page"===c)if(L=s=k="",n=m.getElementsByTagNameNS(q, -"page-layout-properties")[0],s=n.parentNode.parentNode.parentNode.masterStyles,L="",k+=f(n,X),r=n.getElementsByTagNameNS(q,"background-image"),0g.value)&&(e="0.75pt"+h)}d[2]&&(c+=d[2]+":"+e+";")}return c}function f(b){return(b=a(b,p,"text-properties"))?Y.parseFoFontSize(b.getAttributeNS(g,"font-size")):null}function d(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,b,c,d){return b+b+c+c+d+d});return(a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a))? +{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null}function s(a,b,c,d){b='text|list[text|style-name="'+b+'"]';var e=c.getAttributeNS(u,"level"),f;c=Y.getFirstNonWhitespaceChild(c);c=Y.getFirstNonWhitespaceChild(c);var g;c&&(f=c.attributes,g=f["fo:text-indent"]?f["fo:text-indent"].value:void 0,f=f["fo:margin-left"]?f["fo:margin-left"].value:void 0);g||(g="-0.6cm");c="-"===g.charAt(0)?g.substring(1):"-"+g;for(e=e&&parseInt(e,10);1 text|list-item > text|list",e-=1;e=b+" > text|list-item > *:not(text|list):first-child"; +void 0!==f&&(f=e+"{margin-left:"+f+";}",a.insertRule(f,a.cssRules.length));d=b+" > text|list-item > *:not(text|list):first-child:before{"+d+";";d+="counter-increment:list;";d+="margin-left:"+g+";";d+="width:"+c+";";d+="display:inline-block}";try{a.insertRule(d,a.cssRules.length)}catch(h){throw h;}}function k(b,c,e,m){if("list"===c)for(var l=m.firstChild,r,t;l;){if(l.namespaceURI===u)if(r=l,"list-level-style-number"===l.localName){var v=r;t=v.getAttributeNS(p,"num-format");var N=v.getAttributeNS(p, +"num-suffix"),F={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},v=v.getAttributeNS(p,"num-prefix")||"",v=F.hasOwnProperty(t)?v+(" counter(list, "+F[t]+")"):t?v+("'"+t+"';"):v+" ''";N&&(v+=" '"+N+"'");t="content: "+v+";";s(b,e,r,t)}else"list-level-style-image"===l.localName?(t="content: none;",s(b,e,r,t)):"list-level-style-bullet"===l.localName&&(t="content: '"+r.getAttributeNS(u,"bullet-char")+"';",s(b,e,r,t));l=l.nextSibling}else if("page"===c)if(N=r=e="",l=m.getElementsByTagNameNS(p, +"page-layout-properties")[0],r=l.parentNode.parentNode.parentNode.masterStyles,N="",e+=n(l,X),t=l.getElementsByTagNameNS(p,"background-image"),0c)break;e=e.nextSibling}a.insertBefore(b,e)}}}function h(a){this.OdfContainer=a}function b(a, -b,c,d){var e=this;this.size=0;this.type=null;this.name=a;this.container=c;this.onchange=this.onreadystatechange=this.document=this.mimetype=this.url=null;this.EMPTY=0;this.LOADING=1;this.DONE=2;this.state=this.EMPTY;this.load=function(){null!==d&&(this.mimetype=b,d.loadAsDataURL(a,b,function(a,b){a&&runtime.log(a);e.url=b;if(e.onchange)e.onchange(e);if(e.onstatereadychange)e.onstatereadychange(e)}))}}var f=new odf.StyleInfo,e="urn:oasis:names:tc:opendocument:xmlns:office:1.0",d="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0", -t="urn:webodf:names:scope",l="meta settings scripts font-face-decls styles automatic-styles master-styles body".split(" "),p=(new Date).getTime()+"_webodf_",g=new core.Base64;h.prototype=new function(){};h.prototype.constructor=h;h.namespaceURI=e;h.localName="document";b.prototype.load=function(){};b.prototype.getUrl=function(){return this.data?"data:;base64,"+g.toBase64(this.data):null};odf.OdfContainer=function s(g,l){function n(a){for(var b=a.firstChild,c;b;)c=b.nextSibling,b.nodeType===Node.ELEMENT_NODE? -n(b):b.nodeType===Node.PROCESSING_INSTRUCTION_NODE&&a.removeChild(b),b=c}function x(a,b){for(var c=a&&a.firstChild;c;)c.nodeType===Node.ELEMENT_NODE&&c.setAttributeNS(t,"scope",b),c=c.nextSibling}function r(a,b){var c=null,d,e,g;if(a)for(c=a.cloneNode(!0),d=c.firstChild;d;)e=d.nextSibling,d.nodeType===Node.ELEMENT_NODE&&(g=d.getAttributeNS(t,"scope"))&&g!==b&&c.removeChild(d),d=e;return c}function v(a){var b=F.rootElement.ownerDocument,c;if(a){n(a.documentElement);try{c=b.importNode(a.documentElement, -!0)}catch(d){}}return c}function D(a){F.state=a;if(F.onchange)F.onchange(F);if(F.onstatereadychange)F.onstatereadychange(F)}function G(a){ba=null;F.rootElement=a;a.fontFaceDecls=m(a,e,"font-face-decls");a.styles=m(a,e,"styles");a.automaticStyles=m(a,e,"automatic-styles");a.masterStyles=m(a,e,"master-styles");a.body=m(a,e,"body");a.meta=m(a,e,"meta")}function y(b){b=v(b);var c=F.rootElement;b&&"document-styles"===b.localName&&b.namespaceURI===e?(c.fontFaceDecls=m(b,e,"font-face-decls"),a(c,c.fontFaceDecls), -c.styles=m(b,e,"styles"),a(c,c.styles),c.automaticStyles=m(b,e,"automatic-styles"),x(c.automaticStyles,"document-styles"),a(c,c.automaticStyles),c.masterStyles=m(b,e,"master-styles"),a(c,c.masterStyles),f.prefixStyleNames(c.automaticStyles,p,c.masterStyles)):D(s.INVALID)}function P(b){b=v(b);var c,d,g;if(b&&"document-content"===b.localName&&b.namespaceURI===e){c=F.rootElement;d=m(b,e,"font-face-decls");if(c.fontFaceDecls&&d)for(g=d.firstChild;g;)c.fontFaceDecls.appendChild(g),g=d.firstChild;else d&& -(c.fontFaceDecls=d,a(c,d));d=m(b,e,"automatic-styles");x(d,"document-content");if(c.automaticStyles&&d)for(g=d.firstChild;g;)c.automaticStyles.appendChild(g),g=d.firstChild;else d&&(c.automaticStyles=d,a(c,d));c.body=m(b,e,"body");a(c,c.body)}else D(s.INVALID)}function z(b){b=v(b);var c;b&&("document-meta"===b.localName&&b.namespaceURI===e)&&(c=F.rootElement,c.meta=m(b,e,"meta"),a(c,c.meta))}function R(b){b=v(b);var c;b&&("document-settings"===b.localName&&b.namespaceURI===e)&&(c=F.rootElement,c.settings= -m(b,e,"settings"),a(c,c.settings))}function E(a){a=v(a);var b;if(a&&"manifest"===a.localName&&a.namespaceURI===d)for(b=F.rootElement,b.manifest=a,a=b.manifest.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&("file-entry"===a.localName&&a.namespaceURI===d)&&(Q[a.getAttributeNS(d,"full-path")]=a.getAttributeNS(d,"media-type")),a=a.nextSibling}function K(a){var b=a.shift(),c,d;b?(c=b[0],d=b[1],I.loadAsDOM(c,function(b,c){d(c);b||F.state===s.INVALID||K(a)})):D(s.DONE)}function X(a){var b="";odf.Namespaces.forEachPrefix(function(a, -c){b+=" xmlns:"+a+'="'+c+'"'});return''}function oa(){var a=new xmldom.LSSerializer,b=X("document-meta");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(F.rootElement.meta,odf.Namespaces.namespaceMap);return b+""}function L(a,b){var c=document.createElementNS(d,"manifest:file-entry");c.setAttributeNS(d,"manifest:full-path",a);c.setAttributeNS(d,"manifest:media-type",b);return c}function ra(){var a= -runtime.parseXML(''),b=m(a,d,"manifest"),c=new xmldom.LSSerializer,e;for(e in Q)Q.hasOwnProperty(e)&&b.appendChild(L(e,Q[e]));c.filter=new odf.OdfNodeFilter;return'\n'+c.writeToString(a,odf.Namespaces.namespaceMap)}function aa(){var a=new xmldom.LSSerializer,b=X("document-settings");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(F.rootElement.settings,odf.Namespaces.namespaceMap); -return b+""}function ea(){var a=odf.Namespaces.namespaceMap,b=new xmldom.LSSerializer,c=r(F.rootElement.automaticStyles,"document-styles"),d=F.rootElement.masterStyles&&F.rootElement.masterStyles.cloneNode(!0),e=X("document-styles");f.removePrefixFromStyleNames(c,p,d);b.filter=new k(d,c);e+=b.writeToString(F.rootElement.fontFaceDecls,a);e+=b.writeToString(F.rootElement.styles,a);e+=b.writeToString(c,a);e+=b.writeToString(d,a);return e+""}function O(){var a= -odf.Namespaces.namespaceMap,b=new xmldom.LSSerializer,d=r(F.rootElement.automaticStyles,"document-content"),e=X("document-content");b.filter=new c(F.rootElement.body,d);e+=b.writeToString(d,a);e+=b.writeToString(F.rootElement.body,a);return e+""}function V(a,b){runtime.loadXML(a,function(a,c){if(a)b(a);else{var d=v(c);d&&"document"===d.localName&&d.namespaceURI===e?(G(d),D(s.DONE)):D(s.INVALID)}})}function S(){function a(b,c){var g;c||(c=b);g=document.createElementNS(e,c); -d[b]=g;d.appendChild(g)}var b=new core.Zip("",null),c=runtime.byteArrayFromString("application/vnd.oasis.opendocument.text","utf8"),d=F.rootElement,g=document.createElementNS(e,"text");b.save("mimetype",c,!1,new Date);a("meta");a("settings");a("scripts");a("fontFaceDecls","font-face-decls");a("styles");a("automaticStyles","automatic-styles");a("masterStyles","master-styles");a("body");d.body.appendChild(g);D(s.DONE);return b}function M(){var a,b=new Date;a=runtime.byteArrayFromString(aa(),"utf8"); -I.save("settings.xml",a,!0,b);a=runtime.byteArrayFromString(oa(),"utf8");I.save("meta.xml",a,!0,b);a=runtime.byteArrayFromString(ea(),"utf8");I.save("styles.xml",a,!0,b);a=runtime.byteArrayFromString(O(),"utf8");I.save("content.xml",a,!0,b);a=runtime.byteArrayFromString(ra(),"utf8");I.save("META-INF/manifest.xml",a,!0,b)}function H(a,b){M();I.writeAs(a,function(a){b(a)})}var F=this,I,Q={},ba;this.onstatereadychange=l;this.rootElement=this.state=this.onchange=null;this.setRootElement=G;this.getContentElement= -function(){var a;ba||(a=F.rootElement.body,ba=a.getElementsByTagNameNS(e,"text")[0]||a.getElementsByTagNameNS(e,"presentation")[0]||a.getElementsByTagNameNS(e,"spreadsheet")[0]);return ba};this.getDocumentType=function(){var a=F.getContentElement();return a&&a.localName};this.getPart=function(a){return new b(a,Q[a],F,I)};this.getPartData=function(a,b){I.load(a,b)};this.createByteArray=function(a,b){M();I.createByteArray(a,b)};this.saveAs=H;this.save=function(a){H(g,a)};this.getUrl=function(){return g}; -this.state=s.LOADING;this.rootElement=function(a){var b=document.createElementNS(a.namespaceURI,a.localName),c;a=new a;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}(h);I=g?new core.Zip(g,function(a,b){I=b;a?V(g,function(b){a&&(I.error=a+"\n"+b,D(s.INVALID))}):K([["styles.xml",y],["content.xml",P],["meta.xml",z],["settings.xml",R],["META-INF/manifest.xml",E]])}):S()};odf.OdfContainer.EMPTY=0;odf.OdfContainer.LOADING=1;odf.OdfContainer.DONE=2;odf.OdfContainer.INVALID=3;odf.OdfContainer.SAVING= +odf.OdfContainer=function(){function m(a,b,c){for(a=a?a.firstChild:null;a;){if(a.localName===c&&a.namespaceURI===b)return a;a=a.nextSibling}return null}function l(a){var b,c=k.length;for(b=0;bc)break;e=e.nextSibling}a.insertBefore(b,e)}}}function h(a){this.OdfContainer=a}function a(a, +b,c,d){var e=this;this.size=0;this.type=null;this.name=a;this.container=c;this.onchange=this.onreadystatechange=this.document=this.mimetype=this.url=null;this.EMPTY=0;this.LOADING=1;this.DONE=2;this.state=this.EMPTY;this.load=function(){null!==d&&(this.mimetype=b,d.loadAsDataURL(a,b,function(a,b){a&&runtime.log(a);e.url=b;if(e.onchange)e.onchange(e);if(e.onstatereadychange)e.onstatereadychange(e)}))}}var n=new odf.StyleInfo,f="urn:oasis:names:tc:opendocument:xmlns:office:1.0",d="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0", +s="urn:webodf:names:scope",k="meta settings scripts font-face-decls styles automatic-styles master-styles body".split(" "),q=(new Date).getTime()+"_webodf_",g=new core.Base64;h.prototype=new function(){};h.prototype.constructor=h;h.namespaceURI=f;h.localName="document";a.prototype.load=function(){};a.prototype.getUrl=function(){return this.data?"data:;base64,"+g.toBase64(this.data):null};odf.OdfContainer=function r(g,k){function l(a){for(var b=a.firstChild,c;b;)c=b.nextSibling,b.nodeType===Node.ELEMENT_NODE? +l(b):b.nodeType===Node.PROCESSING_INSTRUCTION_NODE&&a.removeChild(b),b=c}function x(a,b){for(var c=a&&a.firstChild;c;)c.nodeType===Node.ELEMENT_NODE&&c.setAttributeNS(s,"scope",b),c=c.nextSibling}function v(a,b){var c=null,d,e,f;if(a)for(c=a.cloneNode(!0),d=c.firstChild;d;)e=d.nextSibling,d.nodeType===Node.ELEMENT_NODE&&(f=d.getAttributeNS(s,"scope"))&&f!==b&&c.removeChild(d),d=e;return c}function t(a){var b=I.rootElement.ownerDocument,c;if(a){l(a.documentElement);try{c=b.importNode(a.documentElement, +!0)}catch(d){}}return c}function E(a){I.state=a;if(I.onchange)I.onchange(I);if(I.onstatereadychange)I.onstatereadychange(I)}function H(a){Z=null;I.rootElement=a;a.fontFaceDecls=m(a,f,"font-face-decls");a.styles=m(a,f,"styles");a.automaticStyles=m(a,f,"automatic-styles");a.masterStyles=m(a,f,"master-styles");a.body=m(a,f,"body");a.meta=m(a,f,"meta")}function y(a){a=t(a);var c=I.rootElement;a&&"document-styles"===a.localName&&a.namespaceURI===f?(c.fontFaceDecls=m(a,f,"font-face-decls"),b(c,c.fontFaceDecls), +c.styles=m(a,f,"styles"),b(c,c.styles),c.automaticStyles=m(a,f,"automatic-styles"),x(c.automaticStyles,"document-styles"),b(c,c.automaticStyles),c.masterStyles=m(a,f,"master-styles"),b(c,c.masterStyles),n.prefixStyleNames(c.automaticStyles,q,c.masterStyles)):E(r.INVALID)}function P(a){a=t(a);var c,d,e;if(a&&"document-content"===a.localName&&a.namespaceURI===f){c=I.rootElement;d=m(a,f,"font-face-decls");if(c.fontFaceDecls&&d)for(e=d.firstChild;e;)c.fontFaceDecls.appendChild(e),e=d.firstChild;else d&& +(c.fontFaceDecls=d,b(c,d));d=m(a,f,"automatic-styles");x(d,"document-content");if(c.automaticStyles&&d)for(e=d.firstChild;e;)c.automaticStyles.appendChild(e),e=d.firstChild;else d&&(c.automaticStyles=d,b(c,d));c.body=m(a,f,"body");b(c,c.body)}else E(r.INVALID)}function B(a){a=t(a);var c;a&&("document-meta"===a.localName&&a.namespaceURI===f)&&(c=I.rootElement,c.meta=m(a,f,"meta"),b(c,c.meta))}function R(a){a=t(a);var c;a&&("document-settings"===a.localName&&a.namespaceURI===f)&&(c=I.rootElement,c.settings= +m(a,f,"settings"),b(c,c.settings))}function G(a){a=t(a);var b;if(a&&"manifest"===a.localName&&a.namespaceURI===d)for(b=I.rootElement,b.manifest=a,a=b.manifest.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&("file-entry"===a.localName&&a.namespaceURI===d)&&(Q[a.getAttributeNS(d,"full-path")]=a.getAttributeNS(d,"media-type")),a=a.nextSibling}function L(a){var b=a.shift(),c,d;b?(c=b[0],d=b[1],K.loadAsDOM(c,function(b,c){d(c);b||I.state===r.INVALID||L(a)})):E(r.DONE)}function X(a){var b="";odf.Namespaces.forEachPrefix(function(a, +c){b+=" xmlns:"+a+'="'+c+'"'});return''}function oa(){var a=new xmldom.LSSerializer,b=X("document-meta");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(I.rootElement.meta,odf.Namespaces.namespaceMap);return b+""}function N(a,b){var c=document.createElementNS(d,"manifest:file-entry");c.setAttributeNS(d,"manifest:full-path",a);c.setAttributeNS(d,"manifest:media-type",b);return c}function sa(){var a= +runtime.parseXML(''),b=m(a,d,"manifest"),c=new xmldom.LSSerializer,e;for(e in Q)Q.hasOwnProperty(e)&&b.appendChild(N(e,Q[e]));c.filter=new odf.OdfNodeFilter;return'\n'+c.writeToString(a,odf.Namespaces.namespaceMap)}function Y(){var a=new xmldom.LSSerializer,b=X("document-settings");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(I.rootElement.settings,odf.Namespaces.namespaceMap); +return b+""}function ba(){var a=odf.Namespaces.namespaceMap,b=new xmldom.LSSerializer,c=v(I.rootElement.automaticStyles,"document-styles"),d=I.rootElement.masterStyles&&I.rootElement.masterStyles.cloneNode(!0),f=X("document-styles");n.removePrefixFromStyleNames(c,q,d);b.filter=new e(d,c);f+=b.writeToString(I.rootElement.fontFaceDecls,a);f+=b.writeToString(I.rootElement.styles,a);f+=b.writeToString(c,a);f+=b.writeToString(d,a);return f+""}function M(){var a= +odf.Namespaces.namespaceMap,b=new xmldom.LSSerializer,d=v(I.rootElement.automaticStyles,"document-content"),e=X("document-content");b.filter=new c(I.rootElement.body,d);e+=b.writeToString(d,a);e+=b.writeToString(I.rootElement.body,a);return e+""}function V(a,b){runtime.loadXML(a,function(a,c){if(a)b(a);else{var d=t(c);d&&"document"===d.localName&&d.namespaceURI===f?(H(d),E(r.DONE)):E(r.INVALID)}})}function S(){function a(b,c){var e;c||(c=b);e=document.createElementNS(f,c); +d[b]=e;d.appendChild(e)}var b=new core.Zip("",null),c=runtime.byteArrayFromString("application/vnd.oasis.opendocument.text","utf8"),d=I.rootElement,e=document.createElementNS(f,"text");b.save("mimetype",c,!1,new Date);a("meta");a("settings");a("scripts");a("fontFaceDecls","font-face-decls");a("styles");a("automaticStyles","automatic-styles");a("masterStyles","master-styles");a("body");d.body.appendChild(e);E(r.DONE);return b}function J(){var a,b=new Date;a=runtime.byteArrayFromString(Y(),"utf8"); +K.save("settings.xml",a,!0,b);a=runtime.byteArrayFromString(oa(),"utf8");K.save("meta.xml",a,!0,b);a=runtime.byteArrayFromString(ba(),"utf8");K.save("styles.xml",a,!0,b);a=runtime.byteArrayFromString(M(),"utf8");K.save("content.xml",a,!0,b);a=runtime.byteArrayFromString(sa(),"utf8");K.save("META-INF/manifest.xml",a,!0,b)}function C(a,b){J();K.writeAs(a,function(a){b(a)})}var I=this,K,Q={},Z;this.onstatereadychange=k;this.rootElement=this.state=this.onchange=null;this.setRootElement=H;this.getContentElement= +function(){var a;Z||(a=I.rootElement.body,Z=a.getElementsByTagNameNS(f,"text")[0]||a.getElementsByTagNameNS(f,"presentation")[0]||a.getElementsByTagNameNS(f,"spreadsheet")[0]);return Z};this.getDocumentType=function(){var a=I.getContentElement();return a&&a.localName};this.getPart=function(b){return new a(b,Q[b],I,K)};this.getPartData=function(a,b){K.load(a,b)};this.createByteArray=function(a,b){J();K.createByteArray(a,b)};this.saveAs=C;this.save=function(a){C(g,a)};this.getUrl=function(){return g}; +this.state=r.LOADING;this.rootElement=function(a){var b=document.createElementNS(a.namespaceURI,a.localName),c;a=new a;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}(h);K=g?new core.Zip(g,function(a,b){K=b;a?V(g,function(b){a&&(K.error=a+"\n"+b,E(r.INVALID))}):L([["styles.xml",y],["content.xml",P],["meta.xml",B],["settings.xml",R],["META-INF/manifest.xml",G]])}):S()};odf.OdfContainer.EMPTY=0;odf.OdfContainer.LOADING=1;odf.OdfContainer.DONE=2;odf.OdfContainer.INVALID=3;odf.OdfContainer.SAVING= 4;odf.OdfContainer.MODIFIED=5;odf.OdfContainer.getContainer=function(a){return new odf.OdfContainer(a,null)};return odf.OdfContainer}(); // Input 34 /* @@ -722,9 +721,9 @@ this.state=s.LOADING;this.rootElement=function(a){var b=document.createElementNS @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("core.Base64");runtime.loadClass("xmldom.XPath");runtime.loadClass("odf.OdfContainer"); -odf.FontLoader=function(){function m(c,a,h,b,f){var e,d=0,n;for(n in c)if(c.hasOwnProperty(n)){if(d===h){e=n;break}d+=1}e?a.getPartData(c[e].href,function(d,n){if(d)runtime.log(d);else{var g="@font-face { font-family: '"+(c[e].family||e)+"'; src: url(data:application/x-font-ttf;charset=binary;base64,"+k.convertUTF8ArrayToBase64(n)+') format("truetype"); }';try{b.insertRule(g,b.cssRules.length)}catch(q){runtime.log("Problem inserting rule in CSS: "+runtime.toJson(q)+"\nRule: "+g)}}m(c,a,h+1,b,f)}): -f&&f()}var n=new xmldom.XPath,k=new core.Base64;odf.FontLoader=function(){this.loadFonts=function(c,a){for(var h=c.rootElement.fontFaceDecls;a.cssRules.length;)a.deleteRule(a.cssRules.length-1);if(h){var b={},f,e,d,k;if(h)for(h=n.getODFElementsWithXPath(h,"style:font-face[svg:font-face-src]",odf.Namespaces.resolvePrefix),f=0;f text|list-item > *:first-child:before {";if(C=y.getAttributeNS(v,"style-name")){y= -q[C];Z=R.getFirstNonWhitespaceChild(y);y=void 0;if(Z)if("list-level-style-number"===Z.localName){y=Z.getAttributeNS(A,"num-format");C=Z.getAttributeNS(A,"num-suffix");var wa="",wa={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},qa=void 0,qa=Z.getAttributeNS(A,"num-prefix")||"",qa=wa.hasOwnProperty(y)?qa+(" counter(list, "+wa[y]+")"):y?qa+("'"+y+"';"):qa+" ''";C&&(qa+=" '"+C+"'");y=wa="content: "+qa+";"}else"list-level-style-image"===Z.localName?y="content: none;":"list-level-style-bullet"=== -Z.localName&&(y="content: '"+Z.getAttributeNS(v,"bullet-char")+"';");Z=y}if(E){for(y=n[E];y;)E=y,y=n[E];da+="counter-increment:"+E+";";Z?(Z=Z.replace("list",E),da+=Z):da+="content:counter("+E+");"}else E="",Z?(Z=Z.replace("list",u),da+=Z):da+="content: counter("+u+");",da+="counter-increment:"+u+";",k.insertRule("text|list#"+u+" {counter-reset:"+u+"}",k.cssRules.length);da+="}";n[u]=E;da&&k.insertRule(da,k.cssRules.length)}N.insertBefore(K,N.firstChild);x();D(g);if(!a&&(g=[I],ma.hasOwnProperty("statereadychange")))for(k= -ma.statereadychange,Z=0;Z + Copyright (C) 2012-2013 KO GmbH @licstart The JavaScript code in this page is free software: you can redistribute it @@ -874,11 +842,43 @@ odf.CommandLineTools=function(){this.roundTrip=function(m,n,k){return new odf.Od @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.Server=function(){};ops.Server.prototype.connect=function(m,n){};ops.Server.prototype.networkStatus=function(){};ops.Server.prototype.login=function(m,n,k,c){};ops.Server.prototype.joinSession=function(m,n,k,c){};ops.Server.prototype.leaveSession=function(m,n,k,c){};ops.Server.prototype.getGenesisUrl=function(m){}; +runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfContainer");runtime.loadClass("odf.Formatting");runtime.loadClass("xmldom.XPath");runtime.loadClass("odf.FontLoader");runtime.loadClass("odf.Style2CSS");runtime.loadClass("odf.OdfUtils");runtime.loadClass("gui.AnnotationViewManager"); +odf.OdfCanvas=function(){function m(){function a(d){c=!0;runtime.setTimeout(function(){try{d()}catch(e){runtime.log(e)}c=!1;0 text|list-item > *:first-child:before {";if(F=y.getAttributeNS(t,"style-name")){y= +p[F];C=R.getFirstNonWhitespaceChild(y);y=void 0;if(C)if("list-level-style-number"===C.localName){y=C.getAttributeNS(A,"num-format");F=C.getAttributeNS(A,"num-suffix");var M="",M={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},J=void 0,J=C.getAttributeNS(A,"num-prefix")||"",J=M.hasOwnProperty(y)?J+(" counter(list, "+M[y]+")"):y?J+("'"+y+"';"):J+" ''";F&&(J+=" '"+F+"'");y=M="content: "+J+";"}else"list-level-style-image"===C.localName?y="content: none;":"list-level-style-bullet"=== +C.localName&&(y="content: '"+C.getAttributeNS(t,"bullet-char")+"';");C=y}if(G){for(y=m[G];y;)G=y,y=m[G];D+="counter-increment:"+G+";";C?(C=C.replace("list",G),D+=C):D+="content:counter("+G+");"}else G="",C?(C=C.replace("list",u),D+=C):D+="content: counter("+u+");",D+="counter-increment:"+u+";",g.insertRule("text|list#"+u+" {counter-reset:"+u+"}",g.cssRules.length);D+="}";m[u]=G;D&&g.insertRule(D,g.cssRules.length)}O.insertBefore(L,O.firstChild);x();E(f);if(!b&&(f=[K],ma.hasOwnProperty("statereadychange")))for(g= +ma.statereadychange,C=0;C + Copyright (C) 2013 KO GmbH @licstart The JavaScript code in this page is free software: you can redistribute it @@ -910,7 +910,7 @@ ops.Server=function(){};ops.Server.prototype.connect=function(m,n){};ops.Server. @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.Operation=function(){};ops.Operation.prototype.init=function(m){};ops.Operation.prototype.transform=function(m,n){};ops.Operation.prototype.execute=function(m){};ops.Operation.prototype.spec=function(){}; +ops.Server=function(){};ops.Server.prototype.connect=function(m,l){};ops.Server.prototype.networkStatus=function(){};ops.Server.prototype.login=function(m,l,e,c){};ops.Server.prototype.joinSession=function(m,l,e,c){};ops.Server.prototype.leaveSession=function(m,l,e,c){};ops.Server.prototype.getGenesisUrl=function(m){}; // Input 40 /* @@ -946,7 +946,7 @@ ops.Operation=function(){};ops.Operation.prototype.init=function(m){};ops.Operat @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.OpAddCursor=function(){var m=this,n,k;this.init=function(c){n=c.memberid;k=c.timestamp};this.transform=function(c,a){return[m]};this.execute=function(c){var a=c.getCursor(n);if(a)return!1;a=new ops.OdtCursor(n,c);c.addCursor(a);c.emit(ops.OdtDocument.signalCursorAdded,a);return!0};this.spec=function(){return{optype:"AddCursor",memberid:n,timestamp:k}}}; +ops.Operation=function(){};ops.Operation.prototype.init=function(m){};ops.Operation.prototype.transform=function(m,l){};ops.Operation.prototype.execute=function(m){};ops.Operation.prototype.spec=function(){}; // Input 41 /* @@ -982,9 +982,7 @@ ops.OpAddCursor=function(){var m=this,n,k;this.init=function(c){n=c.memberid;k=c @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfUtils"); -gui.StyleHelper=function(m){function n(a,h,b){var f=!0,e;a.collapsed?(e=a.startContainer,e.hasChildNodes()&&a.startOffsetd?-f.countBackwardSteps(-d, -e):0;b.move(d);a&&(e=0a?-f.countBackwardSteps(-a,e):0,b.move(e,!0));h.emit(ops.OdtDocument.signalCursorMoved,b);return!0};this.spec=function(){return{optype:"MoveCursor",memberid:n,timestamp:k,position:c,length:a}}}; +ops.OpRemoveCursor=function(){var m=this,l,e;this.init=function(c){l=c.memberid;e=c.timestamp};this.transform=function(c,b){var e=c.spec(),a=[m];"RemoveCursor"===e.optype&&e.memberid===l&&(a=[]);return a};this.execute=function(c){return c.removeCursor(l)?!0:!1};this.spec=function(){return{optype:"RemoveCursor",memberid:l,timestamp:e}}}; // Input 45 /* - Copyright (C) 2013 KO GmbH + Copyright (C) 2012-2013 KO GmbH @licstart The JavaScript code in this page is free software: you can redistribute it @@ -1132,15 +1132,13 @@ e):0;b.move(d);a&&(e=0a?-f.countBackwardSteps(-a,e @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.OpInsertTable=function(){function m(b,c){var d;if(1===t.length)d=t[0];else if(3===t.length)switch(b){case 0:d=t[0];break;case a-1:d=t[2];break;default:d=t[1]}else d=t[b];if(1===d.length)return d[0];if(3===d.length)switch(c){case 0:return d[0];case h-1:return d[2];default:return d[1]}return d[c]}var n=this,k,c,a,h,b,f,e,d,t;this.init=function(l){k=l.memberid;c=l.timestamp;b=parseInt(l.position,10);a=parseInt(l.initialRows,10);h=parseInt(l.initialColumns,10);f=l.tableName;e=l.tableStyleName;d=l.tableColumnStyleName; -t=l.tableCellStyleMatrix};this.transform=function(a,c){var d=a.spec(),e=[n];switch(d.optype){case "InsertTable":e=null;break;case "AddAnnotation":d.positiond?-n.countBackwardSteps(-d, +f):0;a.move(d);b&&(f=0b?-n.countBackwardSteps(-b,f):0,a.move(f,!0));e.emit(ops.OdtDocument.signalCursorMoved,a);return!0};this.spec=function(){return{optype:"MoveCursor",memberid:l,timestamp:e,position:c,length:b}}}; // Input 46 /* - Copyright (C) 2012-2013 KO GmbH + Copyright (C) 2013 KO GmbH @licstart The JavaScript code in this page is free software: you can redistribute it @@ -1172,11 +1170,11 @@ u.appendChild(A),t.appendChild(u);s.appendChild(t)}n=l.getParagraphElement(n.tex @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.OpInsertText=function(){function m(a,c){var e=c.parentNode,d=c.nextSibling,h=[];a.getCursors().forEach(function(a){var b=a.getSelectedRange();!b||b.startContainer!==c&&b.endContainer!==c||h.push({cursor:a,startContainer:b.startContainer,startOffset:b.startOffset,endContainer:b.endContainer,endOffset:b.endOffset})});e.removeChild(c);e.insertBefore(c,d);h.forEach(function(a){var b=a.cursor.getSelectedRange();b.setStart(a.startContainer,a.startOffset);b.setEnd(a.endContainer,a.endOffset)})}var n= -this,k,c,a,h;this.init=function(b){k=b.memberid;c=b.timestamp;a=parseInt(b.position,10);h=b.text};this.merge=function(b){return"InsertText"===b.optype&&b.memberid===k&&b.position===a+h.length?(h+=b.text,c=b.timestamp,!0):!1};this.transform=function(b,c){var e=b.spec(),d=[n];switch(e.optype){case "InsertText":e.position=b.textNode.length?null:b.textNode.splitText(b.offset));for(b=b.textNode;b!==e;)if(b=b.parentNode,d=b.cloneNode(!1),l){for(m&&d.appendChild(m);l.nextSibling;)d.appendChild(l.nextSibling); -b.parentNode.insertBefore(d,b.nextSibling);l=b;m=d}else b.parentNode.insertBefore(d,b),l=d,m=b;a.isListItem(m)&&(m=m.childNodes[0]);h.fixCursorPositions(n);h.getOdfCanvas().refreshSize();h.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:f,memberId:n,timeStamp:k});h.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:m,memberId:n,timeStamp:k});h.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"SplitParagraph",memberid:n,timestamp:k,position:c}}}; +runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfUtils");runtime.loadClass("core.DomUtils"); +ops.OpRemoveText=function(){function m(a){function b(a){if(n.isCharacterElement(a))return!1;if(a.nodeType===Node.TEXT_NODE)return 0===a.textContent.length;for(a=a.firstChild;a;){if(!b(a))return!1;a=a.nextSibling}return!0}function c(e){e=f.mergeIntoParent(e);return!n.isParagraph(e)&&e!==a&&b(e)?c(e):e}this.isEmpty=b;this.mergeChildrenIntoParent=c}function l(b){var c=b.getPositionFilter(),e,n,g,l,m=a,w=b.getDOM().createRange();b=b.getIteratorAtPosition(h);e=b.container();for(n=b.unfilteredDomOffset();m&& +b.nextPosition();)g=b.container(),l=b.unfilteredDomOffset(),c.acceptPosition(b)===NodeFilter.FILTER_ACCEPT&&(m-=1);w.setStart(e,n);w.setEnd(g,l);f.splitBoundaries(w);return w}var e=this,c,b,h,a,n,f;this.init=function(d){runtime.assert(0<=d.length,"OpRemoveText only supports positive lengths");c=d.memberid;b=d.timestamp;h=parseInt(d.position,10);a=parseInt(d.length,10);n=new odf.OdfUtils;f=new core.DomUtils};this.transform=function(d,f){var k=d.spec(),n=h+a,g,l=[e];switch(k.optype){case "RemoveText":g= +k.position+k.length;g<=h?h-=k.length:k.position=a.textNode.length?null:a.textNode.splitText(a.offset));for(a=a.textNode;a!==f;)if(a=a.parentNode,d=a.cloneNode(!1),k){for(m&&d.appendChild(m);k.nextSibling;)d.appendChild(k.nextSibling); +a.parentNode.insertBefore(d,a.nextSibling);k=a;m=d}else a.parentNode.insertBefore(d,a),k=d,m=a;b.isListItem(m)&&(m=m.childNodes[0]);h.fixCursorPositions(l);h.getOdfCanvas().refreshSize();h.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:n,memberId:l,timeStamp:e});h.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:m,memberId:l,timeStamp:e});h.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"SplitParagraph",memberid:l,timestamp:e,position:c}}}; // Input 50 /* @@ -1329,13 +1330,8 @@ ops.OpSetParagraphStyle=function(){var m=this,n,k,c,a;this.init=function(h){n=h. @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.OpUpdateParagraphStyle=function(){function m(a,b){var c,d,e=b?b.split(","):[];for(c=0;cl?-g.countBackwardSteps(-l,d):0,n.move(d),f.emit(ops.OdtDocument.signalCursorMoved,n));f.getOdfCanvas().addAnnotation(e);return!0};this.spec=function(){return{optype:"AddAnnotation",memberid:k,timestamp:c,position:a, -length:h,name:b}}}; +ops.OpRemoveParagraphStyle=function(){function m(c){var a=[];c&&["style:parent-style-name","style:next-style-name"].forEach(function(e){c[e]===b&&a.push(e)});return a}var l=this,e,c,b;this.init=function(h){e=h.memberid;c=h.timestamp;b=h.styleName};this.transform=function(h,a){var n=h.spec(),f,d;f=[l];switch(n.optype){case "RemoveParagraphStyle":n.styleName===b&&(f=[]);break;case "AddParagraphStyle":case "UpdateParagraphStyle":d=m(n.setProperties);0k?-g.countBackwardSteps(-k,d):0,s.move(d),l.emit(ops.OdtDocument.signalCursorMoved,s));l.getOdfCanvas().addAnnotation(f);return!0};this.spec=function(){return{optype:"AddAnnotation",memberid:e,timestamp:c,position:b, +length:h,name:a}}}; // Input 55 /* @@ -1527,24 +1523,63 @@ position:k,length:c}}}; @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ +runtime.loadClass("odf.Namespaces");runtime.loadClass("core.DomUtils"); +ops.OpRemoveAnnotation=function(){var m,l,e,c,b;this.init=function(h){m=h.memberid;l=h.timestamp;e=parseInt(h.position,10);c=parseInt(h.length,10);b=new core.DomUtils};this.transform=function(b,a){return null};this.execute=function(c){for(var a=c.getIteratorAtPosition(e).container(),l,f=null,d=null;a.namespaceURI!==odf.Namespaces.officens||"annotation"!==a.localName;)a=a.parentNode;if(null===a)return!1;f=a;(l=f.getAttributeNS(odf.Namespaces.officens,"name"))&&(d=b.getElementsByTagNameNS(c.getRootNode(), +odf.Namespaces.officens,"annotation-end").filter(function(a){return l===a.getAttributeNS(odf.Namespaces.officens,"name")})[0]||null);c.getOdfCanvas().forgetAnnotations();for(a=b.getElementsByTagNameNS(f,odf.Namespaces.webodfns+":names:cursor","cursor");a.length;)f.parentNode.insertBefore(a.pop(),f);f.parentNode.removeChild(f);d&&d.parentNode.removeChild(d);c.fixCursorPositions();c.getOdfCanvas().refreshAnnotations();return!0};this.spec=function(){return{optype:"RemoveAnnotation",memberid:m,timestamp:l, +position:e,length:c}}}; +// Input 56 +/* + + Copyright (C) 2012-2013 KO GmbH + + @licstart + The JavaScript code in this page is free software: you can redistribute it + and/or modify it under the terms of the GNU Affero General Public License + (GNU AGPL) as published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. The code is distributed + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU AGPL for more details. + + As additional permission under GNU AGPL version 3 section 7, you + may distribute non-source (e.g., minimized or compacted) forms of + that code without the copy of the GNU GPL normally required by + section 4, provided you include this license notice and a URL + through which recipients can access the Corresponding Source. + + As a special exception to the AGPL, any HTML file which merely makes function + calls to this code, and for that purpose includes it by reference shall be + deemed a separate work for copyright law purposes. In addition, the copyright + holders of this code give you permission to combine this code with free + software libraries that are released under the GNU LGPL. You may copy and + distribute such a system following the terms of the GNU AGPL for this code + and the LGPL for the libraries. If you modify this code, you may extend this + exception to your version of the code, but you are not obligated to do so. + If you do not wish to do so, delete this exception statement from your + version. + + This license applies to this entire compilation. + @licend + @source: http://www.webodf.org/ + @source: http://gitorious.org/webodf/webodf/ +*/ runtime.loadClass("ops.OpAddCursor");runtime.loadClass("ops.OpApplyDirectStyling");runtime.loadClass("ops.OpRemoveCursor");runtime.loadClass("ops.OpMoveCursor");runtime.loadClass("ops.OpInsertTable");runtime.loadClass("ops.OpInsertText");runtime.loadClass("ops.OpRemoveText");runtime.loadClass("ops.OpSplitParagraph");runtime.loadClass("ops.OpSetParagraphStyle");runtime.loadClass("ops.OpUpdateParagraphStyle");runtime.loadClass("ops.OpAddParagraphStyle");runtime.loadClass("ops.OpRemoveParagraphStyle"); runtime.loadClass("ops.OpAddAnnotation");runtime.loadClass("ops.OpRemoveAnnotation"); -ops.OperationFactory=function(){function m(k){return function(){return new k}}var n;this.register=function(k,c){n[k]=c};this.create=function(k){var c=null,a=n[k.optype];a&&(c=a(k),c.init(k));return c};n={AddCursor:m(ops.OpAddCursor),ApplyDirectStyling:m(ops.OpApplyDirectStyling),InsertTable:m(ops.OpInsertTable),InsertText:m(ops.OpInsertText),RemoveText:m(ops.OpRemoveText),SplitParagraph:m(ops.OpSplitParagraph),SetParagraphStyle:m(ops.OpSetParagraphStyle),UpdateParagraphStyle:m(ops.OpUpdateParagraphStyle), +ops.OperationFactory=function(){function m(e){return function(){return new e}}var l;this.register=function(e,c){l[e]=c};this.create=function(e){var c=null,b=l[e.optype];b&&(c=b(e),c.init(e));return c};l={AddCursor:m(ops.OpAddCursor),ApplyDirectStyling:m(ops.OpApplyDirectStyling),InsertTable:m(ops.OpInsertTable),InsertText:m(ops.OpInsertText),RemoveText:m(ops.OpRemoveText),SplitParagraph:m(ops.OpSplitParagraph),SetParagraphStyle:m(ops.OpSetParagraphStyle),UpdateParagraphStyle:m(ops.OpUpdateParagraphStyle), AddParagraphStyle:m(ops.OpAddParagraphStyle),RemoveParagraphStyle:m(ops.OpRemoveParagraphStyle),MoveCursor:m(ops.OpMoveCursor),RemoveCursor:m(ops.OpRemoveCursor),AddAnnotation:m(ops.OpAddAnnotation),RemoveAnnotation:m(ops.OpRemoveAnnotation)}}; -// Input 56 -runtime.loadClass("core.Cursor");runtime.loadClass("core.PositionIterator");runtime.loadClass("core.PositionFilter");runtime.loadClass("core.LoopWatchDog");runtime.loadClass("odf.OdfUtils"); -gui.SelectionMover=function(m,n){function k(){u.setUnfilteredPosition(m.getNode(),0);return u}function c(a,b){var c,d=null;a&&(c=b?a[a.length-1]:a[0]);c&&(d={top:c.top,left:b?c.right:c.left,bottom:c.bottom});return d}function a(b,d,e,g){var f=b.nodeType;e.setStart(b,d);e.collapse(!g);g=c(e.getClientRects(),!0===g);!g&&0b?-1:1;for(b=Math.abs(b);0l?m.previousPosition():m.nextPosition());)if(F.check(),h.acceptPosition(m)===r&&(s+=1,q=m.container(),w=a(q,m.unfilteredDomOffset(),H),w.top!==V)){if(w.top!==M&&M!==V)break;M=w.top;w=Math.abs(S-w.left);if(null===p||wb?(d=h.previousPosition,e=-1):(d=h.nextPosition,e=1);for(g=a(h.container(),h.unfilteredDomOffset(),q);d.call(h);)if(c.acceptPosition(h)===r){if(w.getParagraphElement(h.getCurrentNode())!==l)break;f=a(h.container(),h.unfilteredDomOffset(),q);if(f.bottom!==g.bottom&&(g=f.top>=g.top&&f.bottomg.bottom,!g))break;m+=e;g=f}q.detach();return m}function q(a,b){for(var c=0,d;a.parentNode!==b;)runtime.assert(null!==a.parentNode,"parent is null"), -a=a.parentNode;for(d=b.firstChild;d!==a;)c+=1,d=d.nextSibling;return c}function s(a,b,c){runtime.assert(null!==a,"SelectionMover.countStepsToPosition called with element===null");var d=k(),e=d.container(),g=d.unfilteredDomOffset(),f=0,h=new core.LoopWatchDog(1E3);d.setUnfilteredPosition(a,b);a=d.container();runtime.assert(Boolean(a),"SelectionMover.countStepsToPosition: positionIterator.container() returned null");b=d.unfilteredDomOffset();d.setUnfilteredPosition(e,g);var e=a,g=b,l=d.container(), -m=d.unfilteredDomOffset();if(e===l)e=m-g;else{var n=e.compareDocumentPosition(l);2===n?n=-1:4===n?n=1:10===n?(g=q(e,l),n=ge)for(;d.nextPosition()&&(h.check(),c.acceptPosition(d)===r&&(f+=1),d.container()!==a||d.unfilteredDomOffset()!==b););else if(0a?-1:1;for(a=Math.abs(a);0m?n.previousPosition():n.nextPosition());)if(I.check(),k.acceptPosition(n)===v&&(r+=1,p=n.container(),w=b(p,n.unfilteredDomOffset(),C),w.top!==V)){if(w.top!==J&&J!==V)break;J=w.top;w=Math.abs(S-w.left);if(null===u||wa?(d=k.previousPosition,f=-1):(d=k.nextPosition,f=1);for(g=b(k.container(),k.unfilteredDomOffset(),p);d.call(k);)if(c.acceptPosition(k)===v){if(w.getParagraphElement(k.getCurrentNode())!==m)break;h=b(k.container(),k.unfilteredDomOffset(),p);if(h.bottom!==g.bottom&&(g=h.top>=g.top&&h.bottomg.bottom,!g))break;n+=f;g=h}p.detach();return n}function p(a,b){for(var c=0,d;a.parentNode!==b;)runtime.assert(null!==a.parentNode,"parent is null"), +a=a.parentNode;for(d=b.firstChild;d!==a;)c+=1,d=d.nextSibling;return c}function r(a,b,c){runtime.assert(null!==a,"SelectionMover.countStepsToPosition called with element===null");var d=e(),f=d.container(),g=d.unfilteredDomOffset(),h=0,k=new core.LoopWatchDog(1E3);d.setUnfilteredPosition(a,b);a=d.container();runtime.assert(Boolean(a),"SelectionMover.countStepsToPosition: positionIterator.container() returned null");b=d.unfilteredDomOffset();d.setUnfilteredPosition(f,g);var f=a,g=b,l=d.container(), +m=d.unfilteredDomOffset();if(f===l)f=m-g;else{var n=f.compareDocumentPosition(l);2===n?n=-1:4===n?n=1:10===n?(g=p(f,l),n=gf)for(;d.nextPosition()&&(k.check(),c.acceptPosition(d)===v&&(h+=1),d.container()!==a||d.unfilteredDomOffset()!==b););else if(0 @@ -1580,13 +1615,13 @@ u.unfilteredDomOffset());a.collapse(!0);m.setSelectedRange(a)})()};gui.Selection @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("ops.OpAddCursor");runtime.loadClass("ops.OpRemoveCursor");runtime.loadClass("ops.OpMoveCursor");runtime.loadClass("ops.OpInsertTable");runtime.loadClass("ops.OpInsertText");runtime.loadClass("ops.OpRemoveText");runtime.loadClass("ops.OpSplitParagraph");runtime.loadClass("ops.OpSetParagraphStyle");runtime.loadClass("ops.OpAddParagraphStyle");runtime.loadClass("ops.OpUpdateParagraphStyle");runtime.loadClass("ops.OpRemoveParagraphStyle"); -ops.OperationTransformer=function(){function m(k,c){for(var a,h,b,f=[],e=[];0=a&&(f=-c.movePointBackward(-a,b));k.handleUpdate();return f};this.handleUpdate=function(){};this.getStepCounter=function(){return c.getStepCounter()};this.getMemberId=function(){return m};this.getNode=function(){return a.getNode()};this.getAnchorNode=function(){return a.getAnchorNode()};this.getSelectedRange=function(){return a.getSelectedRange()}; -this.getOdtDocument=function(){return n};a=new core.Cursor(n.getDOM(),m);c=new gui.SelectionMover(a,n.getRootNode())}; +ops.OperationTransformer=function(){function m(e,c){for(var b,h,a,n=[],f=[];0=b&&(l=-c.movePointBackward(-b,a));e.handleUpdate();return l};this.handleUpdate=function(){};this.getStepCounter=function(){return c.getStepCounter()};this.getMemberId=function(){return m};this.getNode=function(){return b.getNode()};this.getAnchorNode=function(){return b.getAnchorNode()};this.getSelectedRange=function(){return b.getSelectedRange()}; +this.getOdtDocument=function(){return l};b=new core.Cursor(l.getDOM(),m);c=new gui.SelectionMover(b,l.getRootNode())}; +// Input 60 /* Copyright (C) 2012 KO GmbH @@ -1621,21 +1656,21 @@ this.getOdtDocument=function(){return n};a=new core.Cursor(n.getDOM(),m);c=new g @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.EditInfo=function(m,n){function k(){var c=[],b;for(b in a)a.hasOwnProperty(b)&&c.push({memberid:b,time:a[b].time});c.sort(function(a,b){return a.time-b.time});return c}var c,a={};this.getNode=function(){return c};this.getOdtDocument=function(){return n};this.getEdits=function(){return a};this.getSortedEdits=function(){return k()};this.addEdit=function(c,b){a[c]={time:b}};this.clearEdits=function(){a={}};this.destroy=function(a){m.removeChild(c);a()};c=n.getDOM().createElementNS("urn:webodf:names:editinfo", +ops.EditInfo=function(m,l){function e(){var c=[],a;for(a in b)b.hasOwnProperty(a)&&c.push({memberid:a,time:b[a].time});c.sort(function(a,b){return a.time-b.time});return c}var c,b={};this.getNode=function(){return c};this.getOdtDocument=function(){return l};this.getEdits=function(){return b};this.getSortedEdits=function(){return e()};this.addEdit=function(c,a){b[c]={time:a}};this.clearEdits=function(){b={}};this.destroy=function(b){m.removeChild(c);b()};c=l.getDOM().createElementNS("urn:webodf:names:editinfo", "editinfo");m.insertBefore(c,m.firstChild)}; -// Input 60 -gui.Avatar=function(m,n){var k=this,c,a,h;this.setColor=function(b){a.style.borderColor=b};this.setImageUrl=function(b){k.isVisible()?a.src=b:h=b};this.isVisible=function(){return"block"===c.style.display};this.show=function(){h&&(a.src=h,h=void 0);c.style.display="block"};this.hide=function(){c.style.display="none"};this.markAsFocussed=function(a){c.className=a?"active":""};this.destroy=function(a){m.removeChild(c);a()};(function(){var b=m.ownerDocument,f=b.documentElement.namespaceURI;c=b.createElementNS(f, -"div");a=b.createElementNS(f,"img");a.width=64;a.height=64;c.appendChild(a);c.style.width="64px";c.style.height="70px";c.style.position="absolute";c.style.top="-80px";c.style.left="-34px";c.style.display=n?"block":"none";m.appendChild(c)})()}; // Input 61 -runtime.loadClass("gui.Avatar");runtime.loadClass("ops.OdtCursor"); -gui.Caret=function(m,n,k){function c(h){f&&b.parentNode&&(!e||h)&&(h&&void 0!==d&&runtime.clearTimeout(d),e=!0,a.style.opacity=h||"0"===a.style.opacity?"1":"0",d=runtime.setTimeout(function(){e=!1;c(!1)},500))}var a,h,b,f=!1,e=!1,d;this.refreshCursorBlinking=function(){k||m.getSelectedRange().collapsed?(f=!0,c(!0)):(f=!1,a.style.opacity="0")};this.setFocus=function(){f=!0;h.markAsFocussed(!0);c(!0)};this.removeFocus=function(){f=!1;h.markAsFocussed(!1);a.style.opacity="0"};this.setAvatarImageUrl= -function(a){h.setImageUrl(a)};this.setColor=function(b){a.style.borderColor=b;h.setColor(b)};this.getCursor=function(){return m};this.getFocusElement=function(){return a};this.toggleHandleVisibility=function(){h.isVisible()?h.hide():h.show()};this.showHandle=function(){h.show()};this.hideHandle=function(){h.hide()};this.ensureVisible=function(){var b,c,d,e,f=m.getOdtDocument().getOdfCanvas().getElement().parentNode,h;d=f.offsetWidth-f.clientWidth+5;e=f.offsetHeight-f.clientHeight+5;h=a.getBoundingClientRect(); -b=h.left-d;c=h.top-e;d=h.right+d;e=h.bottom+e;h=f.getBoundingClientRect();ch.bottom&&(f.scrollTop+=e-h.bottom);bh.right&&(f.scrollLeft+=d-h.right)};this.destroy=function(c){h.destroy(function(d){d?c(d):(b.removeChild(a),c())})};(function(){var c=m.getOdtDocument().getDOM();a=c.createElementNS(c.documentElement.namespaceURI,"span");b=m.getNode();b.appendChild(a);h=new gui.Avatar(b,n)})()}; +gui.Avatar=function(m,l){var e=this,c,b,h;this.setColor=function(a){b.style.borderColor=a};this.setImageUrl=function(a){e.isVisible()?b.src=a:h=a};this.isVisible=function(){return"block"===c.style.display};this.show=function(){h&&(b.src=h,h=void 0);c.style.display="block"};this.hide=function(){c.style.display="none"};this.markAsFocussed=function(a){c.className=a?"active":""};this.destroy=function(a){m.removeChild(c);a()};(function(){var a=m.ownerDocument,e=a.documentElement.namespaceURI;c=a.createElementNS(e, +"div");b=a.createElementNS(e,"img");b.width=64;b.height=64;c.appendChild(b);c.style.width="64px";c.style.height="70px";c.style.position="absolute";c.style.top="-80px";c.style.left="-34px";c.style.display=l?"block":"none";m.appendChild(c)})()}; // Input 62 -runtime.loadClass("core.EventNotifier"); -gui.ClickHandler=function(){function m(){k=0;c=null}var n,k=0,c=null,a=new core.EventNotifier([gui.ClickHandler.signalSingleClick,gui.ClickHandler.signalDoubleClick,gui.ClickHandler.signalTripleClick]);this.subscribe=function(c,b){a.subscribe(c,b)};this.handleMouseUp=function(h){var b=runtime.getWindow();c&&c.x===h.screenX&&c.y===h.screenY?(k+=1,1===k?a.emit(gui.ClickHandler.signalSingleClick,h):2===k?a.emit(gui.ClickHandler.signalDoubleClick,void 0):3===k&&(b.clearTimeout(n),a.emit(gui.ClickHandler.signalTripleClick, -void 0),m())):(a.emit(gui.ClickHandler.signalSingleClick,h),k=1,c={x:h.screenX,y:h.screenY},b.clearTimeout(n),n=b.setTimeout(m,400))}};gui.ClickHandler.signalSingleClick="click";gui.ClickHandler.signalDoubleClick="doubleClick";gui.ClickHandler.signalTripleClick="tripleClick";(function(){return gui.ClickHandler})(); +runtime.loadClass("gui.Avatar");runtime.loadClass("ops.OdtCursor"); +gui.Caret=function(m,l,e){function c(e){n&&a.parentNode&&(!f||e)&&(e&&void 0!==d&&runtime.clearTimeout(d),f=!0,b.style.opacity=e||"0"===b.style.opacity?"1":"0",d=runtime.setTimeout(function(){f=!1;c(!1)},500))}var b,h,a,n=!1,f=!1,d;this.refreshCursorBlinking=function(){e||m.getSelectedRange().collapsed?(n=!0,c(!0)):(n=!1,b.style.opacity="0")};this.setFocus=function(){n=!0;h.markAsFocussed(!0);c(!0)};this.removeFocus=function(){n=!1;h.markAsFocussed(!1);b.style.opacity="0"};this.setAvatarImageUrl= +function(a){h.setImageUrl(a)};this.setColor=function(a){b.style.borderColor=a;h.setColor(a)};this.getCursor=function(){return m};this.getFocusElement=function(){return b};this.toggleHandleVisibility=function(){h.isVisible()?h.hide():h.show()};this.showHandle=function(){h.show()};this.hideHandle=function(){h.hide()};this.ensureVisible=function(){var a,c,d,e,f=m.getOdtDocument().getOdfCanvas().getElement().parentNode,h;d=f.offsetWidth-f.clientWidth+5;e=f.offsetHeight-f.clientHeight+5;h=b.getBoundingClientRect(); +a=h.left-d;c=h.top-e;d=h.right+d;e=h.bottom+e;h=f.getBoundingClientRect();ch.bottom&&(f.scrollTop+=e-h.bottom);ah.right&&(f.scrollLeft+=d-h.right)};this.destroy=function(c){h.destroy(function(d){d?c(d):(a.removeChild(b),c())})};(function(){var c=m.getOdtDocument().getDOM();b=c.createElementNS(c.documentElement.namespaceURI,"span");a=m.getNode();a.appendChild(b);h=new gui.Avatar(a,l)})()}; // Input 63 +runtime.loadClass("core.EventNotifier"); +gui.ClickHandler=function(){function m(){e=0;c=null}var l,e=0,c=null,b=new core.EventNotifier([gui.ClickHandler.signalSingleClick,gui.ClickHandler.signalDoubleClick,gui.ClickHandler.signalTripleClick]);this.subscribe=function(c,a){b.subscribe(c,a)};this.handleMouseUp=function(h){var a=runtime.getWindow();c&&c.x===h.screenX&&c.y===h.screenY?(e+=1,1===e?b.emit(gui.ClickHandler.signalSingleClick,h):2===e?b.emit(gui.ClickHandler.signalDoubleClick,void 0):3===e&&(a.clearTimeout(l),b.emit(gui.ClickHandler.signalTripleClick, +void 0),m())):(b.emit(gui.ClickHandler.signalSingleClick,h),e=1,c={x:h.screenX,y:h.screenY},a.clearTimeout(l),l=a.setTimeout(m,400))}};gui.ClickHandler.signalSingleClick="click";gui.ClickHandler.signalDoubleClick="doubleClick";gui.ClickHandler.signalTripleClick="tripleClick";(function(){return gui.ClickHandler})(); +// Input 64 /* Copyright (C) 2012-2013 KO GmbH @@ -1670,9 +1705,9 @@ void 0),m())):(a.emit(gui.ClickHandler.signalSingleClick,h),k=1,c={x:h.screenX,y @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -gui.KeyboardHandler=function(){function m(a,c){c||(c=n.None);return a+":"+c}var n=gui.KeyboardHandler.Modifier,k=null,c={};this.setDefault=function(a){k=a};this.bind=function(a,h,b){a=m(a,h);runtime.assert(!1===c.hasOwnProperty(a),"tried to overwrite the callback handler of key combo: "+a);c[a]=b};this.unbind=function(a,h){var b=m(a,h);delete c[b]};this.reset=function(){k=null;c={}};this.handleEvent=function(a){var h=a.keyCode,b=n.None;a.metaKey&&(b|=n.Meta);a.ctrlKey&&(b|=n.Ctrl);a.altKey&&(b|=n.Alt); -a.shiftKey&&(b|=n.Shift);h=m(h,b);h=c[h];b=!1;h?b=h():null!==k&&(b=k(a));b&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}};gui.KeyboardHandler.Modifier={None:0,Meta:1,Ctrl:2,Alt:4,Shift:8,MetaShift:9,CtrlShift:10,AltShift:12};gui.KeyboardHandler.KeyCode={Backspace:8,Tab:9,Clear:12,Enter:13,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Delete:46,A:65,B:66,I:73,U:85,Z:90};(function(){return gui.KeyboardHandler})(); -// Input 64 +gui.KeyboardHandler=function(){function m(b,c){c||(c=l.None);return b+":"+c}var l=gui.KeyboardHandler.Modifier,e=null,c={};this.setDefault=function(b){e=b};this.bind=function(b,e,a){b=m(b,e);runtime.assert(!1===c.hasOwnProperty(b),"tried to overwrite the callback handler of key combo: "+b);c[b]=a};this.unbind=function(b,e){var a=m(b,e);delete c[a]};this.reset=function(){e=null;c={}};this.handleEvent=function(b){var h=b.keyCode,a=l.None;b.metaKey&&(a|=l.Meta);b.ctrlKey&&(a|=l.Ctrl);b.altKey&&(a|=l.Alt); +b.shiftKey&&(a|=l.Shift);h=m(h,a);h=c[h];a=!1;h?a=h():null!==e&&(a=e(b));a&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}};gui.KeyboardHandler.Modifier={None:0,Meta:1,Ctrl:2,Alt:4,Shift:8,MetaShift:9,CtrlShift:10,AltShift:12};gui.KeyboardHandler.KeyCode={Backspace:8,Tab:9,Clear:12,Enter:13,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Delete:46,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90};(function(){return gui.KeyboardHandler})(); +// Input 65 /* Copyright (C) 2013 KO GmbH @@ -1708,38 +1743,42 @@ a.shiftKey&&(b|=n.Shift);h=m(h,b);h=c[h];b=!1;h?b=h():null!==k&&(b=k(a));b&&(a.p @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("odf.Namespaces");runtime.loadClass("xmldom.LSSerializer");runtime.loadClass("odf.OdfNodeFilter");runtime.loadClass("odf.TextSerializer"); -gui.Clipboard=function(){var m,n,k;this.setDataFromRange=function(c,a){var h=!0,b,f=c.clipboardData;b=runtime.getWindow();var e=a.startContainer.ownerDocument;!f&&b&&(f=b.clipboardData);f?(e=e.createElement("span"),e.appendChild(a.cloneContents()),b=f.setData("text/plain",n.writeToString(e)),h=h&&b,b=f.setData("text/html",m.writeToString(e,odf.Namespaces.namespaceMap)),h=h&&b,c.preventDefault()):h=!1;return h};m=new xmldom.LSSerializer;n=new odf.TextSerializer;k=new odf.OdfNodeFilter;m.filter=k;n.filter= -k}; -// Input 65 -runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfUtils");runtime.loadClass("ops.OpAddCursor");runtime.loadClass("ops.OpRemoveCursor");runtime.loadClass("ops.OpMoveCursor");runtime.loadClass("ops.OpInsertText");runtime.loadClass("ops.OpRemoveText");runtime.loadClass("ops.OpSplitParagraph");runtime.loadClass("ops.OpSetParagraphStyle");runtime.loadClass("ops.OpRemoveAnnotation");runtime.loadClass("gui.ClickHandler");runtime.loadClass("gui.Clipboard");runtime.loadClass("gui.KeyboardHandler"); -runtime.loadClass("gui.StyleHelper"); -gui.SessionController=function(){gui.SessionController=function(m,n){function k(a,b,c,d){var e="on"+b,g=!1;a.attachEvent&&(g=a.attachEvent(e,c));!g&&a.addEventListener&&(a.addEventListener(b,c,!1),g=!0);g&&!d||!a.hasOwnProperty(e)||(a[e]=c)}function c(a,b,c){var d="on"+b;a.detachEvent&&a.detachEvent(d,c);a.removeEventListener&&a.removeEventListener(b,c,!1);a[d]===c&&(a[d]=null)}function a(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function h(a,b){var c=new ops.OpMoveCursor;c.init({memberid:n, -position:a,length:b||0});return c}function b(a,b){var c=gui.SelectionMover.createPositionIterator(B.getRootNode()),d=B.getOdfCanvas().getElement(),e;e=a;if(!e)return null;for(;e!==d&&!("urn:webodf:names:cursor"===e.namespaceURI&&"cursor"===e.localName||"urn:webodf:names:editinfo"===e.namespaceURI&&"editinfo"===e.localName);)if(e=e.parentNode,!e)return null;e!==d&&a!==e&&(a=e.parentNode,b=Array.prototype.indexOf.call(a.childNodes,e));c.setUnfilteredPosition(a,b);return B.getDistanceFromCursor(n,c.container(), -c.unfilteredDomOffset())}function f(a){var b=B.getOdfCanvas().getElement(),c=B.getRootNode(),d=0;b.compareDocumentPosition(a)&Node.DOCUMENT_POSITION_PRECEDING||(a=gui.SelectionMover.createPositionIterator(c),a.moveToEnd(),c=a.container(),d=a.unfilteredDomOffset());return{node:c,offset:d}}function e(a){ga&&runtime.setTimeout(function(){var c;a:{var d=B.getOdfCanvas().getElement(),e=$.getSelection(),g,l,k,q;if(null===e.anchorNode&&null===e.focusNode){c=a.clientX;g=a.clientY;l=B.getDOM();l.caretRangeFromPoint? -(c=l.caretRangeFromPoint(c,g),g={container:c.startContainer,offset:c.startOffset}):l.caretPositionFromPoint?(c=l.caretPositionFromPoint(c,g),g={container:c.offsetNode,offset:c.offset}):g=null;if(!g){c=null;break a}c=g.container;g=g.offset;l=c;e=g}else c=e.anchorNode,g=e.anchorOffset,l=e.focusNode,e=e.focusOffset;runtime.assert(null!==c&&null!==l,"anchorNode is null or focusNode is null");k=sa.containsNode(d,c);q=sa.containsNode(d,l);k||q?(k||(k=f(c),c=k.node,g=k.offset),q||(k=f(l),l=k.node,e=k.offset), -d.focus(),c={anchorNode:c,anchorOffset:g,focusNode:l,focusOffset:e}):c=null}null!==c&&(d=b(c.anchorNode,c.anchorOffset),g=c.focusNode===c.anchorNode&&c.focusOffset===c.anchorOffset?d:b(c.focusNode,c.focusOffset),null!==g&&0!==g||null!==d&&0!==d)&&(c=B.getCursorPosition(n),d=h(c+d,g-d),m.enqueue(d))},0)}function d(a){e(a)}function t(){var a=B.getOdfCanvas().getElement(),b=/[A-Za-z0-9]/,c=0,d=0,e,g;if(sa.containsNode(a,$.getSelection().focusNode)){a=gui.SelectionMover.createPositionIterator(B.getRootNode()); -e=B.getCursor(n).getNode();for(a.setUnfilteredPosition(e,0);a.previousPosition();)if(g=a.getCurrentNode(),g.nodeType===Node.TEXT_NODE){g=g.data[a.unfilteredDomOffset()];if(!b.test(g))break;c-=1}else if(g.namespaceURI!==odf.Namespaces.textns||"span"!==g.localName)break;a.setUnfilteredPosition(e,0);do if(g=a.getCurrentNode(),g.nodeType===Node.TEXT_NODE){g=g.data[a.unfilteredDomOffset()];if(!b.test(g))break;d+=1}else if(g.namespaceURI!==odf.Namespaces.textns||"span"!==g.localName)break;while(a.nextPosition()); -if(0!==c||0!==d)b=B.getCursorPosition(n),c=h(b+c,Math.abs(c)+Math.abs(d)),m.enqueue(c)}}function l(){var a=B.getOdfCanvas().getElement(),b,c;sa.containsNode(a,$.getSelection().focusNode)&&(c=B.getParagraphElement(B.getCursor(n).getNode()),a=B.getDistanceFromCursor(n,c,0),b=gui.SelectionMover.createPositionIterator(B.getRootNode()),b.moveToEndOfNode(c),c=B.getDistanceFromCursor(n,c,b.unfilteredDomOffset()),0!==a||0!==c)&&(b=B.getCursorPosition(n),a=h(b+a,Math.abs(a)+Math.abs(c)),m.enqueue(a))}function p(a){var b= -B.getCursorSelection(n),c=B.getCursor(n).getStepCounter();0!==a&&(a=0a.length&&(a.position+=a.length,a.length=-a.length); -return a}function V(a){var b=new ops.OpRemoveText;b.init({memberid:n,position:a.position,length:a.length});return b}function S(){var a=O(B.getCursorSelection(n)),b=null;0===a.length?0a.length&&(a.position+=a.length,a.length=-a.length); +return a}function V(a){var b=new ops.OpRemoveText;b.init({memberid:l,position:a.position,length:a.length});return b}function S(){var a=M(z.getCursorSelection(l)),b=null;0===a.length?0 @@ -1774,8 +1813,8 @@ function(a){var b=a.target,c=null;if("annotationRemoveButton"===b.className){a=c @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(m,n){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(m,n){};ops.MemberModel.prototype.close=function(m){}; -// Input 67 +ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(m,l){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(m,l){};ops.MemberModel.prototype.close=function(m){}; +// Input 68 /* Copyright (C) 2012-2013 KO GmbH @@ -1810,8 +1849,8 @@ ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdate @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(m,n){n(m,null)};this.unsubscribeMemberDetailsUpdates=function(m,n){};this.close=function(m){m()}}; -// Input 68 +ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(m,l){l(m,{memberid:m,fullname:"Unknown",color:"black",imageurl:"avatar-joe.png"})};this.unsubscribeMemberDetailsUpdates=function(m,l){};this.close=function(m){m()}}; +// Input 69 /* Copyright (C) 2013 KO GmbH @@ -1847,7 +1886,7 @@ ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(m,n){ @source: http://gitorious.org/webodf/webodf/ */ ops.OperationRouter=function(){};ops.OperationRouter.prototype.setOperationFactory=function(m){};ops.OperationRouter.prototype.setPlaybackFunction=function(m){};ops.OperationRouter.prototype.push=function(m){};ops.OperationRouter.prototype.close=function(m){};ops.OperationRouter.prototype.getHasLocalUnsyncedOpsAndUpdates=function(m){};ops.OperationRouter.prototype.unsubscribeHasLocalUnsyncedOpsUpdates=function(m){}; -// Input 69 +// Input 70 /* Copyright (C) 2012 KO GmbH @@ -1882,11 +1921,11 @@ ops.OperationRouter=function(){};ops.OperationRouter.prototype.setOperationFacto @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -ops.TrivialOperationRouter=function(){var m,n;this.setOperationFactory=function(k){m=k};this.setPlaybackFunction=function(k){n=k};this.push=function(k){k=k.spec();k.timestamp=(new Date).getTime();k=m.create(k);n(k)};this.close=function(k){k()};this.getHasLocalUnsyncedOpsAndUpdates=function(k){k(!0)};this.unsubscribeHasLocalUnsyncedOpsUpdates=function(k){}}; -// Input 70 -gui.EditInfoHandle=function(m){var n=[],k,c=m.ownerDocument,a=c.documentElement.namespaceURI;this.setEdits=function(h){n=h;var b,f,e,d;k.innerHTML="";for(h=0;h @@ -1922,10 +1961,10 @@ d=c.createElementNS(a,"span"),d.className="editInfoTime",d.setAttributeNS("urn:w @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("ops.EditInfo");runtime.loadClass("gui.EditInfoHandle"); -gui.EditInfoMarker=function(m,n){function k(a,c){return runtime.getWindow().setTimeout(function(){b.style.opacity=a},c)}var c=this,a,h,b,f,e;this.addEdit=function(a,c){var l=Date.now()-c;m.addEdit(a,c);h.setEdits(m.getSortedEdits());b.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);if(f){var n=f;runtime.getWindow().clearTimeout(n)}e&&(n=e,runtime.getWindow().clearTimeout(n));1E4>l?(k(1,0),f=k(0.5,1E4-l),e=k(0.2,2E4-l)):1E4<=l&&2E4>l?(k(0.5,0),e=k(0.2,2E4-l)):k(0.2,0)};this.getEdits= -function(){return m.getEdits()};this.clearEdits=function(){m.clearEdits();h.setEdits([]);b.hasAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")&&b.removeAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")};this.getEditInfo=function(){return m};this.show=function(){b.style.display="block"};this.hide=function(){c.hideHandle();b.style.display="none"};this.showHandle=function(){h.show()};this.hideHandle=function(){h.hide()};this.destroy=function(c){a.removeChild(b);h.destroy(function(a){a? -c(a):m.destroy(c)})};(function(){var d=m.getOdtDocument().getDOM();b=d.createElementNS(d.documentElement.namespaceURI,"div");b.setAttribute("class","editInfoMarker");b.onmouseover=function(){c.showHandle()};b.onmouseout=function(){c.hideHandle()};a=m.getNode();a.appendChild(b);h=new gui.EditInfoHandle(a);n||c.hide()})()}; -// Input 72 +gui.EditInfoMarker=function(m,l){function e(b,c){return runtime.getWindow().setTimeout(function(){a.style.opacity=b},c)}var c=this,b,h,a,n,f;this.addEdit=function(b,c){var k=Date.now()-c;m.addEdit(b,c);h.setEdits(m.getSortedEdits());a.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",b);if(n){var l=n;runtime.getWindow().clearTimeout(l)}f&&(l=f,runtime.getWindow().clearTimeout(l));1E4>k?(e(1,0),n=e(0.5,1E4-k),f=e(0.2,2E4-k)):1E4<=k&&2E4>k?(e(0.5,0),f=e(0.2,2E4-k)):e(0.2,0)};this.getEdits= +function(){return m.getEdits()};this.clearEdits=function(){m.clearEdits();h.setEdits([]);a.hasAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")&&a.removeAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")};this.getEditInfo=function(){return m};this.show=function(){a.style.display="block"};this.hide=function(){c.hideHandle();a.style.display="none"};this.showHandle=function(){h.show()};this.hideHandle=function(){h.hide()};this.destroy=function(c){b.removeChild(a);h.destroy(function(a){a? +c(a):m.destroy(c)})};(function(){var d=m.getOdtDocument().getDOM();a=d.createElementNS(d.documentElement.namespaceURI,"div");a.setAttribute("class","editInfoMarker");a.onmouseover=function(){c.showHandle()};a.onmouseout=function(){c.hideHandle()};b=m.getNode();b.appendChild(a);h=new gui.EditInfoHandle(b);l||c.hide()})()}; +// Input 73 /* Copyright (C) 2012-2013 KO GmbH @@ -1961,14 +2000,14 @@ c(a):m.destroy(c)})};(function(){var d=m.getOdtDocument().getDOM();b=d.createEle @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("gui.Caret");runtime.loadClass("ops.TrivialMemberModel");runtime.loadClass("ops.EditInfo");runtime.loadClass("gui.EditInfoMarker");gui.SessionViewOptions=function(){this.caretBlinksOnRangeSelect=this.caretAvatarsInitiallyVisible=this.editInfoMarkersInitiallyVisible=!0}; -gui.SessionView=function(){return function(m,n,k){function c(a,b,c){function d(b,c,e){c=b+'[editinfo|memberid^="'+a+'"]'+e+c;a:{var g=t.firstChild;for(b=b+'[editinfo|memberid^="'+a+'"]'+e;g;){if(g.nodeType===Node.TEXT_NODE&&0===g.data.indexOf(b)){b=g;break a}g=g.nextSibling}b=null}b?b.data=c:t.appendChild(document.createTextNode(c))}d("div.editInfoMarker","{ background-color: "+c+"; }","");d("span.editInfoColor","{ background-color: "+c+"; }","");d("span.editInfoAuthor",'{ content: "'+b+'"; }',":before"); -d("dc|creator",'{ content: "'+b+'"; display: none;}',":before");d("dc|creator","{ background-color: "+c+"; }","")}function a(a){var b,c;for(c in p)p.hasOwnProperty(c)&&(b=p[c],a?b.show():b.hide())}function h(a){k.getCarets().forEach(function(b){a?b.showHandle():b.hideHandle()})}function b(a,b){var d=k.getCaret(a);void 0===b?runtime.log('MemberModel sent undefined data for member "'+a+'".'):(null===b&&(b={memberid:a,fullname:"Unknown Identity",color:"black",imageurl:"avatar-joe.png"}),d&&(d.setAvatarImageUrl(b.imageurl), -d.setColor(b.color)),c(a,b.fullname,b.color))}function f(a){var c=a.getMemberId(),d=n.getMemberModel();k.registerCursor(a,q,s);b(c,null);d.getMemberDetailsAndUpdates(c,b);runtime.log("+++ View here +++ eagerly created an Caret for '"+c+"'! +++")}function e(a){var c=!1,d;for(d in p)if(p.hasOwnProperty(d)&&p[d].getEditInfo().getEdits().hasOwnProperty(a)){c=!0;break}c||n.getMemberModel().unsubscribeMemberDetailsUpdates(a,b)}function d(a){var b=a.paragraphElement,c=a.memberId;a=a.timeStamp;var d,e="", -f=b.getElementsByTagNameNS(l,"editinfo")[0];f?(e=f.getAttributeNS(l,"id"),d=p[e]):(e=Math.random().toString(),d=new ops.EditInfo(b,n.getOdtDocument()),d=new gui.EditInfoMarker(d,g),f=b.getElementsByTagNameNS(l,"editinfo")[0],f.setAttributeNS(l,"id",e),p[e]=d);d.addEdit(c,new Date(a))}var t,l="urn:webodf:names:editinfo",p={},g=void 0!==m.editInfoMarkersInitiallyVisible?Boolean(m.editInfoMarkersInitiallyVisible):!0,q=void 0!==m.caretAvatarsInitiallyVisible?Boolean(m.caretAvatarsInitiallyVisible):!0, -s=void 0!==m.caretBlinksOnRangeSelect?Boolean(m.caretBlinksOnRangeSelect):!0;this.showEditInfoMarkers=function(){g||(g=!0,a(g))};this.hideEditInfoMarkers=function(){g&&(g=!1,a(g))};this.showCaretAvatars=function(){q||(q=!0,h(q))};this.hideCaretAvatars=function(){q&&(q=!1,h(q))};this.getSession=function(){return n};this.getCaret=function(a){return k.getCaret(a)};this.destroy=function(a){var c=n.getOdtDocument(),g=n.getMemberModel(),h=Object.keys(p).map(function(a){return p[a]});c.subscribe(ops.OdtDocument.signalCursorAdded, -f);c.subscribe(ops.OdtDocument.signalCursorRemoved,e);c.subscribe(ops.OdtDocument.signalParagraphChanged,d);k.getCarets().forEach(function(a){g.unsubscribeMemberDetailsUpdates(a.getCursor().getMemberId(),b)});t.parentNode.removeChild(t);(function v(b,c){c?a(c):b @@ -2004,27 +2043,27 @@ e);a.subscribe(ops.OdtDocument.signalParagraphChanged,d);t=document.createElemen @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("gui.Caret"); -gui.CaretManager=function(m){function n(a){return d.hasOwnProperty(a)?d[a]:null}function k(){return Object.keys(d).map(function(a){return d[a]})}function c(){return m.getSession().getOdtDocument().getOdfCanvas().getElement()}function a(a){a===m.getInputMemberId()&&c().removeAttribute("tabindex");delete d[a]}function h(a){a=a.getMemberId();a===m.getInputMemberId()&&(a=n(a))&&a.refreshCursorBlinking()}function b(a){a.memberId===m.getInputMemberId()&&(a=n(a.memberId))&&a.ensureVisible()}function f(){var a= -n(m.getInputMemberId());a&&a.setFocus()}function e(){var a=n(m.getInputMemberId());a&&a.removeFocus()}var d={};this.registerCursor=function(a,b,e){var g=a.getMemberId(),f=c();b=new gui.Caret(a,b,e);d[g]=b;g===m.getInputMemberId()&&(runtime.log("Starting to track input on new cursor of "+g),a.handleUpdate=b.ensureVisible,f.setAttribute("tabindex",0),f.focus());return b};this.getCaret=n;this.getCarets=k;this.destroy=function(d){var e=m.getSession().getOdtDocument(),f=c(),g=k();e.unsubscribe(ops.OdtDocument.signalParagraphChanged, -b);e.unsubscribe(ops.OdtDocument.signalCursorMoved,h);e.unsubscribe(ops.OdtDocument.signalCursorRemoved,a);f.onfocus=null;f.onblur=null;(function s(a,b){b?d(b):aa?-1:a-1})};c.slideChange=function(a){var h=c.getPages(c.odf_canvas.odfContainer().rootElement),b=-1,f=0;h.forEach(function(a){a=a[1];a.hasAttribute("slide_current")&&(b=f,a.removeAttribute("slide_current"));f+=1});a=a(b,h.length);-1===a&&(a=b);h[a][1].setAttribute("slide_current", -"1");document.getElementById("pagelist").selectedIndex=a;"cont"===c.slide_mode&&n.scrollBy(0,h[a][1].getBoundingClientRect().top-30)};c.selectSlide=function(a){c.slideChange(function(c,b){return a>=b||0>a?-1:a})};c.scrollIntoContView=function(a){var h=c.getPages(c.odf_canvas.odfContainer().rootElement);0!==h.length&&n.scrollBy(0,h[a][1].getBoundingClientRect().top-30)};c.getPages=function(a){a=a.getElementsByTagNameNS(odf.Namespaces.drawns,"page");var c=[],b;for(b=0;bb?-1:b-1})};c.slideChange=function(b){var e=c.getPages(c.odf_canvas.odfContainer().rootElement),a=-1,m=0;e.forEach(function(b){b=b[1];b.hasAttribute("slide_current")&&(a=m,b.removeAttribute("slide_current"));m+=1});b=b(a,e.length);-1===b&&(b=a);e[b][1].setAttribute("slide_current", +"1");document.getElementById("pagelist").selectedIndex=b;"cont"===c.slide_mode&&l.scrollBy(0,e[b][1].getBoundingClientRect().top-30)};c.selectSlide=function(b){c.slideChange(function(c,a){return b>=a||0>b?-1:b})};c.scrollIntoContView=function(b){var e=c.getPages(c.odf_canvas.odfContainer().rootElement);0!==e.length&&l.scrollBy(0,e[b][1].getBoundingClientRect().top-30)};c.getPages=function(b){b=b.getElementsByTagNameNS(odf.Namespaces.drawns,"page");var c=[],a;for(a=0;a=a.rangeCount||!q)||(a=a.getRangeAt(0),q.setPoint(a.startContainer,a.startOffset))}function h(){var a=m.ownerDocument.defaultView.getSelection(),b,c;a.removeAllRanges();q&&q.node()&&(b=q.node(),c=b.ownerDocument.createRange(), -c.setStart(b,q.position()),c.collapse(!0),a.addRange(c))}function b(b){var d=b.charCode||b.keyCode;if(q=null,q&&37===d)a(),q.stepBackward(),h();else if(16<=d&&20>=d||33<=d&&40>=d)return;c(b)}function f(a){c(a)}function e(a){for(var b=a.firstChild;b&&b!==a;)b.nodeType===Node.ELEMENT_NODE&&e(b),b=b.nextSibling||b.parentNode;var c,d,g,b=a.attributes;c="";for(g=b.length-1;0<=g;g-=1)d=b.item(g),c=c+" "+d.nodeName+'="'+d.nodeValue+'"';a.setAttribute("customns_name",a.nodeName);a.setAttribute("customns_atts", -c);b=a.firstChild;for(d=/^\s*$/;b&&b!==a;)c=b,b=b.nextSibling||b.parentNode,c.nodeType===Node.TEXT_NODE&&d.test(c.nodeValue)&&c.parentNode.removeChild(c)}function d(a,b){for(var c=a.firstChild,e,g,f;c&&c!==a;){if(c.nodeType===Node.ELEMENT_NODE)for(d(c,b),e=c.attributes,f=e.length-1;0<=f;f-=1)g=e.item(f),"http://www.w3.org/2000/xmlns/"!==g.namespaceURI||b[g.nodeValue]||(b[g.nodeValue]=g.localName);c=c.nextSibling||c.parentNode}}function t(){var a=m.ownerDocument.createElement("style"),b;b={};d(m,b); -var c={},e,g,f=0;for(e in b)if(b.hasOwnProperty(e)&&e){g=b[e];if(!g||c.hasOwnProperty(g)||"xmlns"===g){do g="ns"+f,f+=1;while(c.hasOwnProperty(g));b[e]=g}c[g]=!0}a.type="text/css";b="@namespace customns url(customns);\n"+l;a.appendChild(m.ownerDocument.createTextNode(b));n=n.parentNode.replaceChild(a,n)}var l,p,g,q=null;m.id||(m.id="xml"+String(Math.random()).substring(2));p="#"+m.id+" ";l=p+"*,"+p+":visited, "+p+":link {display:block; margin: 0px; margin-left: 10px; font-size: medium; color: black; background: white; font-variant: normal; font-weight: normal; font-style: normal; font-family: sans-serif; text-decoration: none; white-space: pre-wrap; height: auto; width: auto}\n"+ -p+":before {color: blue; content: '<' attr(customns_name) attr(customns_atts) '>';}\n"+p+":after {color: blue; content: '';}\n"+p+"{overflow: auto;}\n";(function(a){k(a,"click",f);k(a,"keydown",b);k(a,"drop",c);k(a,"dragend",c);k(a,"beforepaste",c);k(a,"paste",c)})(m);this.updateCSS=t;this.setXML=function(a){a=a.documentElement||a;g=a=m.ownerDocument.importNode(a,!0);for(e(a);m.lastChild;)m.removeChild(m.lastChild);m.appendChild(a);t();q=new core.PositionIterator(a)};this.getXML= +gui.XMLEdit=function(m,l){function e(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent?a.attachEvent("on"+b,c):a["on"+b]=c}function c(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function b(){var a=m.ownerDocument.defaultView.getSelection();!a||(0>=a.rangeCount||!p)||(a=a.getRangeAt(0),p.setPoint(a.startContainer,a.startOffset))}function h(){var a=m.ownerDocument.defaultView.getSelection(),b,c;a.removeAllRanges();p&&p.node()&&(b=p.node(),c=b.ownerDocument.createRange(), +c.setStart(b,p.position()),c.collapse(!0),a.addRange(c))}function a(a){var d=a.charCode||a.keyCode;if(p=null,p&&37===d)b(),p.stepBackward(),h();else if(16<=d&&20>=d||33<=d&&40>=d)return;c(a)}function n(a){c(a)}function f(a){for(var b=a.firstChild;b&&b!==a;)b.nodeType===Node.ELEMENT_NODE&&f(b),b=b.nextSibling||b.parentNode;var c,d,e,b=a.attributes;c="";for(e=b.length-1;0<=e;e-=1)d=b.item(e),c=c+" "+d.nodeName+'="'+d.nodeValue+'"';a.setAttribute("customns_name",a.nodeName);a.setAttribute("customns_atts", +c);b=a.firstChild;for(d=/^\s*$/;b&&b!==a;)c=b,b=b.nextSibling||b.parentNode,c.nodeType===Node.TEXT_NODE&&d.test(c.nodeValue)&&c.parentNode.removeChild(c)}function d(a,b){for(var c=a.firstChild,e,f,g;c&&c!==a;){if(c.nodeType===Node.ELEMENT_NODE)for(d(c,b),e=c.attributes,g=e.length-1;0<=g;g-=1)f=e.item(g),"http://www.w3.org/2000/xmlns/"!==f.namespaceURI||b[f.nodeValue]||(b[f.nodeValue]=f.localName);c=c.nextSibling||c.parentNode}}function s(){var a=m.ownerDocument.createElement("style"),b;b={};d(m,b); +var c={},e,f,g=0;for(e in b)if(b.hasOwnProperty(e)&&e){f=b[e];if(!f||c.hasOwnProperty(f)||"xmlns"===f){do f="ns"+g,g+=1;while(c.hasOwnProperty(f));b[e]=f}c[f]=!0}a.type="text/css";b="@namespace customns url(customns);\n"+k;a.appendChild(m.ownerDocument.createTextNode(b));l=l.parentNode.replaceChild(a,l)}var k,q,g,p=null;m.id||(m.id="xml"+String(Math.random()).substring(2));q="#"+m.id+" ";k=q+"*,"+q+":visited, "+q+":link {display:block; margin: 0px; margin-left: 10px; font-size: medium; color: black; background: white; font-variant: normal; font-weight: normal; font-style: normal; font-family: sans-serif; text-decoration: none; white-space: pre-wrap; height: auto; width: auto}\n"+ +q+":before {color: blue; content: '<' attr(customns_name) attr(customns_atts) '>';}\n"+q+":after {color: blue; content: '';}\n"+q+"{overflow: auto;}\n";(function(b){e(b,"click",n);e(b,"keydown",a);e(b,"drop",c);e(b,"dragend",c);e(b,"beforepaste",c);e(b,"paste",c)})(m);this.updateCSS=s;this.setXML=function(a){a=a.documentElement||a;g=a=m.ownerDocument.importNode(a,!0);for(f(a);m.lastChild;)m.removeChild(m.lastChild);m.appendChild(a);s();p=new core.PositionIterator(a)};this.getXML= function(){return g}}; -// Input 76 +// Input 77 /* Copyright (C) 2013 KO GmbH @@ -2059,9 +2098,9 @@ function(){return g}}; @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -gui.UndoManager=function(){};gui.UndoManager.prototype.subscribe=function(m,n){};gui.UndoManager.prototype.unsubscribe=function(m,n){};gui.UndoManager.prototype.setOdtDocument=function(m){};gui.UndoManager.prototype.saveInitialState=function(){};gui.UndoManager.prototype.resetInitialState=function(){};gui.UndoManager.prototype.setPlaybackFunction=function(m){};gui.UndoManager.prototype.hasUndoStates=function(){};gui.UndoManager.prototype.hasRedoStates=function(){}; +gui.UndoManager=function(){};gui.UndoManager.prototype.subscribe=function(m,l){};gui.UndoManager.prototype.unsubscribe=function(m,l){};gui.UndoManager.prototype.setOdtDocument=function(m){};gui.UndoManager.prototype.saveInitialState=function(){};gui.UndoManager.prototype.resetInitialState=function(){};gui.UndoManager.prototype.setPlaybackFunction=function(m){};gui.UndoManager.prototype.hasUndoStates=function(){};gui.UndoManager.prototype.hasRedoStates=function(){}; gui.UndoManager.prototype.moveForward=function(m){};gui.UndoManager.prototype.moveBackward=function(m){};gui.UndoManager.prototype.onOperationExecuted=function(m){};gui.UndoManager.signalUndoStackChanged="undoStackChanged";gui.UndoManager.signalUndoStateCreated="undoStateCreated";gui.UndoManager.signalUndoStateModified="undoStateModified";(function(){return gui.UndoManager})(); -// Input 77 +// Input 78 /* Copyright (C) 2013 KO GmbH @@ -2096,9 +2135,9 @@ gui.UndoManager.prototype.moveForward=function(m){};gui.UndoManager.prototype.mo @source: http://www.webodf.org/ @source: http://gitorious.org/webodf/webodf/ */ -gui.UndoStateRules=function(){function m(k){return k.spec().optype}function n(k){switch(m(k)){case "MoveCursor":case "AddCursor":case "RemoveCursor":return!1;default:return!0}}this.getOpType=m;this.isEditOperation=n;this.isPartOfOperationSet=function(k,c){if(n(k)){if(0===c.length)return!0;var a;if(a=n(c[c.length-1]))a:{a=c.filter(n);var h=m(k),b;b:switch(h){case "RemoveText":case "InsertText":b=!0;break b;default:b=!1}if(b&&h===m(a[0])){if(1===a.length){a=!0;break a}h=a[a.length-2].spec().position; -a=a[a.length-1].spec().position;b=k.spec().position;if(a===b-(a-h)){a=!0;break a}}a=!1}return a}return!0}}; -// Input 78 +gui.UndoStateRules=function(){function m(e){return e.spec().optype}function l(e){switch(m(e)){case "MoveCursor":case "AddCursor":case "RemoveCursor":return!1;default:return!0}}this.getOpType=m;this.isEditOperation=l;this.isPartOfOperationSet=function(e,c){if(l(e)){if(0===c.length)return!0;var b;if(b=l(c[c.length-1]))a:{b=c.filter(l);var h=m(e),a;b:switch(h){case "RemoveText":case "InsertText":a=!0;break b;default:a=!1}if(a&&h===m(b[0])){if(1===b.length){b=!0;break a}h=b[b.length-2].spec().position; +b=b[b.length-1].spec().position;a=e.spec().position;if(b===a-(b-h)){b=!0;break a}}b=!1}return b}return!0}}; +// Input 79 /* Copyright (C) 2013 KO GmbH @@ -2134,13 +2173,13 @@ a=a[a.length-1].spec().position;b=k.spec().position;if(a===b-(a-h)){a=!0;break a @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("core.DomUtils");runtime.loadClass("gui.UndoManager");runtime.loadClass("gui.UndoStateRules"); -gui.TrivialUndoManager=function(m){function n(){s.emit(gui.UndoManager.signalUndoStackChanged,{undoAvailable:b.hasUndoStates(),redoAvailable:b.hasRedoStates()})}function k(){p!==d&&p!==g[g.length-1]&&g.push(p)}function c(a){var b=a.previousSibling||a.nextSibling;a.parentNode.removeChild(a);f.normalizeTextNodes(b)}function a(a){return Object.keys(a).map(function(b){return a[b]})}function h(b){function c(a){var b=a.spec();if(g[b.memberid])switch(b.optype){case "AddCursor":d[b.memberid]||(d[b.memberid]= -a,delete g[b.memberid],f-=1);break;case "MoveCursor":e[b.memberid]||(e[b.memberid]=a)}}var d={},e={},g={},f,h=b.pop();l.getCursors().forEach(function(a){g[a.getMemberId()]=!0});for(f=Object.keys(g).length;h&&0 @@ -2176,22 +2215,22 @@ b.refreshCSS(),p=g[g.length-1]||d,n());return f}};gui.TrivialUndoManager.signalD @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("core.EventNotifier");runtime.loadClass("odf.OdfUtils");runtime.loadClass("gui.SelectionMover");runtime.loadClass("gui.StyleHelper");runtime.loadClass("core.PositionFilterChain"); -ops.OdtDocument=function(m){function n(){var a=m.odfContainer().getContentElement(),b=a&&a.localName;runtime.assert("text"===b,"Unsupported content element type '"+b+"'for OdtDocument");return a}function k(a){function b(a){for(;!(a.namespaceURI===odf.Namespaces.officens&&"text"===a.localName||a.namespaceURI===odf.Namespaces.officens&&"annotation"===a.localName);)a=a.parentNode;return a}this.acceptPosition=function(c){c=c.container();var d=e[a].getNode();return b(c)===b(d)?t:l}}function c(a){var b= -gui.SelectionMover.createPositionIterator(n());for(a+=1;0=e;e+=1){b=a.container();d=a.unfilteredDomOffset();if(b.nodeType===Node.TEXT_NODE&&" "===b.data[d]&&f.isSignificantWhitespace(b, -d)){runtime.assert(" "===b.data[d],"upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");var h=b.ownerDocument.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:s");h.appendChild(b.ownerDocument.createTextNode(" "));b.deleteData(d,1);0= 0");1===p.acceptPosition(d)?(h=d.container(),h.nodeType===Node.TEXT_NODE&&(f=h,l=0)):a+=1;for(;0=e;e+=1){b=a.container();d=a.unfilteredDomOffset();if(b.nodeType===Node.TEXT_NODE&&" "===b.data[d]&&n.isSignificantWhitespace(b, +d)){runtime.assert(" "===b.data[d],"upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");var f=b.ownerDocument.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:s");f.appendChild(b.ownerDocument.createTextNode(" "));b.deleteData(d,1);0= 0");1===q.acceptPosition(d)?(h=d.container(),h.nodeType===Node.TEXT_NODE&&(e=h,k=0)):b+=1;for(;0 @@ -2227,7 +2266,7 @@ ops.OdtDocument.signalCursorRemoved="cursor/removed";ops.OdtDocument.signalCurso @source: http://gitorious.org/webodf/webodf/ */ runtime.loadClass("ops.TrivialMemberModel");runtime.loadClass("ops.TrivialOperationRouter");runtime.loadClass("ops.OperationFactory");runtime.loadClass("ops.OdtDocument"); -ops.Session=function(m){var n=new ops.OperationFactory,k=new ops.OdtDocument(m),c=new ops.TrivialMemberModel,a=null;this.setMemberModel=function(a){c=a};this.setOperationFactory=function(c){n=c;a&&a.setOperationFactory(n)};this.setOperationRouter=function(c){a=c;c.setPlaybackFunction(function(a){a.execute(k);k.emit(ops.OdtDocument.signalOperationExecuted,a)});c.setOperationFactory(n)};this.getMemberModel=function(){return c};this.getOperationFactory=function(){return n};this.getOdtDocument=function(){return k}; -this.enqueue=function(c){a.push(c)};this.close=function(h){a.close(function(a){a?h(a):c.close(function(a){a?h(a):k.close(h)})})};this.destroy=function(a){k.destroy(a)};this.setOperationRouter(new ops.TrivialOperationRouter)}; -// Input 81 -var webodf_css="@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n@namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n@namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n@namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n@namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n@namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n@namespace table url(urn:oasis:names:tc:opendocument:xmlns:table:1.0);\n@namespace text url(urn:oasis:names:tc:opendocument:xmlns:text:1.0);\n@namespace runtimens url(urn:webodf); /* namespace for runtime only */\n@namespace cursor url(urn:webodf:names:cursor);\n@namespace editinfo url(urn:webodf:names:editinfo);\n@namespace annotation url(urn:webodf:names:annotation);\n@namespace dc url(http://purl.org/dc/elements/1.1/);\n\noffice|document > *, office|document-content > * {\n display: none;\n}\noffice|body, office|document {\n display: inline-block;\n position: relative;\n}\n\ntext|p, text|h {\n display: block;\n padding: 0;\n margin: 0;\n line-height: normal;\n position: relative;\n min-height: 1.3em; /* prevent empty paragraphs and headings from collapsing if they are empty */\n}\n*[runtimens|containsparagraphanchor] {\n position: relative;\n}\ntext|s {\n white-space: pre;\n}\ntext|tab {\n display: inline;\n white-space: pre;\n}\ntext|line-break {\n content: \" \";\n display: block;\n}\ntext|tracked-changes {\n /*Consumers that do not support change tracking, should ignore changes.*/\n display: none;\n}\noffice|binary-data {\n display: none;\n}\noffice|text {\n display: block;\n text-align: left;\n overflow: visible;\n word-wrap: break-word;\n}\n\noffice|text::selection {\n /** Let's not draw selection highlight that overflows into the office|text\n * node when selecting content across several paragraphs\n */\n background: transparent;\n}\noffice|text * draw|text-box {\n /** only for text documents */\n display: block;\n border: 1px solid #d3d3d3;\n}\noffice|spreadsheet {\n display: block;\n border-collapse: collapse;\n empty-cells: show;\n font-family: sans-serif;\n font-size: 10pt;\n text-align: left;\n page-break-inside: avoid;\n overflow: hidden;\n}\noffice|presentation {\n display: inline-block;\n text-align: left;\n}\n#shadowContent {\n display: inline-block;\n text-align: left;\n}\ndraw|page {\n display: block;\n position: relative;\n overflow: hidden;\n}\npresentation|notes, presentation|footer-decl, presentation|date-time-decl {\n display: none;\n}\n@media print {\n draw|page {\n border: 1pt solid black;\n page-break-inside: avoid;\n }\n presentation|notes {\n /*TODO*/\n }\n}\noffice|spreadsheet text|p {\n border: 0px;\n padding: 1px;\n margin: 0px;\n}\noffice|spreadsheet table|table {\n margin: 3px;\n}\noffice|spreadsheet table|table:after {\n /* show sheet name the end of the sheet */\n /*content: attr(table|name);*/ /* gives parsing error in opera */\n}\noffice|spreadsheet table|table-row {\n counter-increment: row;\n}\noffice|spreadsheet table|table-row:before {\n width: 3em;\n background: #cccccc;\n border: 1px solid black;\n text-align: center;\n content: counter(row);\n display: table-cell;\n}\noffice|spreadsheet table|table-cell {\n border: 1px solid #cccccc;\n}\ntable|table {\n display: table;\n}\ndraw|frame table|table {\n width: 100%;\n height: 100%;\n background: white;\n}\ntable|table-header-rows {\n display: table-header-group;\n}\ntable|table-row {\n display: table-row;\n}\ntable|table-column {\n display: table-column;\n}\ntable|table-cell {\n width: 0.889in;\n display: table-cell;\n word-break: break-all; /* prevent long words from extending out the table cell */\n}\ndraw|frame {\n display: block;\n}\ndraw|image {\n display: block;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n -moz-background-size: 100% 100%;\n}\n/* only show the first image in frame */\ndraw|frame > draw|image:nth-of-type(n+2) {\n display: none;\n}\ntext|list:before {\n display: none;\n content:\"\";\n}\ntext|list {\n counter-reset: list;\n}\ntext|list-item {\n display: block;\n}\ntext|number {\n display:none;\n}\n\ntext|a {\n color: blue;\n text-decoration: underline;\n cursor: pointer;\n}\ntext|note-citation {\n vertical-align: super;\n font-size: smaller;\n}\ntext|note-body {\n display: none;\n}\ntext|note:hover text|note-citation {\n background: #dddddd;\n}\ntext|note:hover text|note-body {\n display: block;\n left:1em;\n max-width: 80%;\n position: absolute;\n background: #ffffaa;\n}\nsvg|title, svg|desc {\n display: none;\n}\nvideo {\n width: 100%;\n height: 100%\n}\n\n/* below set up the cursor */\ncursor|cursor {\n display: inline;\n width: 0px;\n height: 1em;\n /* making the position relative enables the avatar to use\n the cursor as reference for its absolute position */\n position: relative;\n z-index: 1;\n}\ncursor|cursor > span {\n display: inline;\n position: absolute;\n top: 5%; /* push down the caret; 0px can do the job, 5% looks better, 10% is a bit over */\n height: 1em;\n border-left: 2px solid black;\n outline: none;\n}\n\ncursor|cursor > div {\n padding: 3px;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n border: none !important;\n border-radius: 5px;\n opacity: 0.3;\n}\n\ncursor|cursor > div > img {\n border-radius: 5px;\n}\n\ncursor|cursor > div.active {\n opacity: 0.8;\n}\n\ncursor|cursor > div:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 43%;\n}\n\n\n.editInfoMarker {\n position: absolute;\n width: 10px;\n height: 100%;\n left: -20px;\n opacity: 0.8;\n top: 0;\n border-radius: 5px;\n background-color: transparent;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n}\n.editInfoMarker:hover {\n box-shadow: 0px 0px 8px rgba(0, 0, 0, 1);\n}\n\n.editInfoHandle {\n position: absolute;\n background-color: black;\n padding: 5px;\n border-radius: 5px;\n opacity: 0.8;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n bottom: 100%;\n margin-bottom: 10px;\n z-index: 3;\n left: -25px;\n}\n.editInfoHandle:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 5px;\n}\n.editInfo {\n font-family: sans-serif;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n color: white;\n width: 100%;\n height: 12pt;\n}\n.editInfoColor {\n float: left;\n width: 10pt;\n height: 10pt;\n border: 1px solid white;\n}\n.editInfoAuthor {\n float: left;\n margin-left: 5pt;\n font-size: 10pt;\n text-align: left;\n height: 12pt;\n line-height: 12pt;\n}\n.editInfoTime {\n float: right;\n margin-left: 30pt;\n font-size: 8pt;\n font-style: italic;\n color: yellow;\n height: 12pt;\n line-height: 12pt;\n}\n\n.annotationWrapper {\n display: inline;\n position: relative;\n}\n\n.annotationRemoveButton:before {\n content: '\u00d7';\n color: white;\n padding: 5px;\n line-height: 1em;\n}\n\n.annotationRemoveButton {\n width: 20px;\n height: 20px;\n border-radius: 10px;\n background-color: black;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n position: absolute;\n top: -10px;\n left: -10px;\n z-index: 3;\n text-align: center;\n font-family: sans-serif;\n font-style: normal;\n font-weight: normal;\n text-decoration: none;\n font-size: 15px;\n}\n.annotationRemoveButton:hover {\n cursor: pointer;\n box-shadow: 0px 0px 5px rgba(0, 0, 0, 1);\n}\n\n.annotationNote {\n width: 4cm;\n position: absolute;\n display: inline;\n z-index: 10;\n}\n.annotationNote > office|annotation {\n display: block;\n}\n\n.annotationConnector {\n position: absolute;\n display: inline;\n z-index: 2;\n border-top: 1px dashed brown;\n}\n.annotationConnector.angular {\n -moz-transform-origin: left top;\n -webkit-transform-origin: left top;\n -ms-transform-origin: left top;\n transform-origin: left top;\n}\n.annotationConnector.horizontal {\n left: 0;\n}\n.annotationConnector.horizontal:before {\n content: '';\n display: inline;\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: brown transparent transparent transparent;\n top: -1px;\n left: -5px;\n}\n\noffice|annotation {\n width: 100%;\n height: 100%;\n display: none;\n background: rgb(198, 238, 184);\n background: -moz-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -webkit-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -o-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -ms-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: linear-gradient(180deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n box-shadow: 0 3px 4px -3px #ccc;\n}\n\noffice|annotation > dc|creator {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n color: white;\n background-color: brown;\n padding: 4px;\n}\noffice|annotation > dc|date {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n border: 4px solid transparent;\n}\noffice|annotation > text|list {\n display: block;\n padding: 5px;\n}\n\n/* This is very temporary CSS. This must go once\n * we start bundling webodf-default ODF styles for annotations.\n */\noffice|annotation text|p {\n font-size: 10pt;\n color: black;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n font-family: sans-serif;\n}\n\ndc|*::selection {\n background: transparent;\n}\ndc|*::-moz-selection {\n background: transparent;\n}\n\n#annotationsPane {\n background-color: #EAEAEA;\n width: 4cm;\n height: 100%;\n display: none;\n position: absolute;\n outline: 1px solid #ccc;\n}\n\n.annotationHighlight {\n background-color: yellow;\n position: relative;\n}\n"; +ops.Session=function(m){var l=new ops.OperationFactory,e=new ops.OdtDocument(m),c=new ops.TrivialMemberModel,b=null;this.setMemberModel=function(b){c=b};this.setOperationFactory=function(c){l=c;b&&b.setOperationFactory(l)};this.setOperationRouter=function(c){b=c;c.setPlaybackFunction(function(a){a.execute(e);e.emit(ops.OdtDocument.signalOperationExecuted,a)});c.setOperationFactory(l)};this.getMemberModel=function(){return c};this.getOperationFactory=function(){return l};this.getOdtDocument=function(){return e}; +this.enqueue=function(c){b.push(c)};this.close=function(h){b.close(function(a){a?h(a):c.close(function(a){a?h(a):e.close(h)})})};this.destroy=function(b){e.destroy(b)};this.setOperationRouter(new ops.TrivialOperationRouter)}; +// Input 82 +var webodf_css="@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n@namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n@namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n@namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n@namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n@namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n@namespace table url(urn:oasis:names:tc:opendocument:xmlns:table:1.0);\n@namespace text url(urn:oasis:names:tc:opendocument:xmlns:text:1.0);\n@namespace runtimens url(urn:webodf); /* namespace for runtime only */\n@namespace cursor url(urn:webodf:names:cursor);\n@namespace editinfo url(urn:webodf:names:editinfo);\n@namespace annotation url(urn:webodf:names:annotation);\n@namespace dc url(http://purl.org/dc/elements/1.1/);\n\noffice|document > *, office|document-content > * {\n display: none;\n}\noffice|body, office|document {\n display: inline-block;\n position: relative;\n}\n\ntext|p, text|h {\n display: block;\n padding: 0;\n margin: 0;\n line-height: normal;\n position: relative;\n min-height: 1.3em; /* prevent empty paragraphs and headings from collapsing if they are empty */\n}\n*[runtimens|containsparagraphanchor] {\n position: relative;\n}\ntext|s {\n white-space: pre;\n}\ntext|tab {\n display: inline;\n white-space: pre;\n}\ntext|line-break {\n content: \" \";\n display: block;\n}\ntext|tracked-changes {\n /*Consumers that do not support change tracking, should ignore changes.*/\n display: none;\n}\noffice|binary-data {\n display: none;\n}\noffice|text {\n display: block;\n text-align: left;\n overflow: visible;\n word-wrap: break-word;\n}\n\noffice|text::selection {\n /** Let's not draw selection highlight that overflows into the office|text\n * node when selecting content across several paragraphs\n */\n background: transparent;\n}\noffice|text * draw|text-box {\n /** only for text documents */\n display: block;\n border: 1px solid #d3d3d3;\n}\noffice|spreadsheet {\n display: block;\n border-collapse: collapse;\n empty-cells: show;\n font-family: sans-serif;\n font-size: 10pt;\n text-align: left;\n page-break-inside: avoid;\n overflow: hidden;\n}\noffice|presentation {\n display: inline-block;\n text-align: left;\n}\n#shadowContent {\n display: inline-block;\n text-align: left;\n}\ndraw|page {\n display: block;\n position: relative;\n overflow: hidden;\n}\npresentation|notes, presentation|footer-decl, presentation|date-time-decl {\n display: none;\n}\n@media print {\n draw|page {\n border: 1pt solid black;\n page-break-inside: avoid;\n }\n presentation|notes {\n /*TODO*/\n }\n}\noffice|spreadsheet text|p {\n border: 0px;\n padding: 1px;\n margin: 0px;\n}\noffice|spreadsheet table|table {\n margin: 3px;\n}\noffice|spreadsheet table|table:after {\n /* show sheet name the end of the sheet */\n /*content: attr(table|name);*/ /* gives parsing error in opera */\n}\noffice|spreadsheet table|table-row {\n counter-increment: row;\n}\noffice|spreadsheet table|table-row:before {\n width: 3em;\n background: #cccccc;\n border: 1px solid black;\n text-align: center;\n content: counter(row);\n display: table-cell;\n}\noffice|spreadsheet table|table-cell {\n border: 1px solid #cccccc;\n}\ntable|table {\n display: table;\n}\ndraw|frame table|table {\n width: 100%;\n height: 100%;\n background: white;\n}\ntable|table-header-rows {\n display: table-header-group;\n}\ntable|table-row {\n display: table-row;\n}\ntable|table-column {\n display: table-column;\n}\ntable|table-cell {\n width: 0.889in;\n display: table-cell;\n word-break: break-all; /* prevent long words from extending out the table cell */\n}\ndraw|frame {\n display: block;\n}\ndraw|image {\n display: block;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n background-repeat: no-repeat;\n background-size: 100% 100%;\n -moz-background-size: 100% 100%;\n}\n/* only show the first image in frame */\ndraw|frame > draw|image:nth-of-type(n+2) {\n display: none;\n}\ntext|list:before {\n display: none;\n content:\"\";\n}\ntext|list {\n counter-reset: list;\n}\ntext|list-item {\n display: block;\n}\ntext|number {\n display:none;\n}\n\ntext|a {\n color: blue;\n text-decoration: underline;\n cursor: pointer;\n}\ntext|note-citation {\n vertical-align: super;\n font-size: smaller;\n}\ntext|note-body {\n display: none;\n}\ntext|note:hover text|note-citation {\n background: #dddddd;\n}\ntext|note:hover text|note-body {\n display: block;\n left:1em;\n max-width: 80%;\n position: absolute;\n background: #ffffaa;\n}\nsvg|title, svg|desc {\n display: none;\n}\nvideo {\n width: 100%;\n height: 100%\n}\n\n/* below set up the cursor */\ncursor|cursor {\n display: inline;\n width: 0px;\n height: 1em;\n /* making the position relative enables the avatar to use\n the cursor as reference for its absolute position */\n position: relative;\n z-index: 1;\n}\ncursor|cursor > span {\n display: inline;\n position: absolute;\n top: 5%; /* push down the caret; 0px can do the job, 5% looks better, 10% is a bit over */\n height: 1em;\n border-left: 2px solid black;\n outline: none;\n}\n\ncursor|cursor > div {\n padding: 3px;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n border: none !important;\n border-radius: 5px;\n opacity: 0.3;\n}\n\ncursor|cursor > div > img {\n border-radius: 5px;\n}\n\ncursor|cursor > div.active {\n opacity: 0.8;\n}\n\ncursor|cursor > div:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 43%;\n}\n\n\n.editInfoMarker {\n position: absolute;\n width: 10px;\n height: 100%;\n left: -20px;\n opacity: 0.8;\n top: 0;\n border-radius: 5px;\n background-color: transparent;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n}\n.editInfoMarker:hover {\n box-shadow: 0px 0px 8px rgba(0, 0, 0, 1);\n}\n\n.editInfoHandle {\n position: absolute;\n background-color: black;\n padding: 5px;\n border-radius: 5px;\n opacity: 0.8;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n bottom: 100%;\n margin-bottom: 10px;\n z-index: 3;\n left: -25px;\n}\n.editInfoHandle:after {\n content: ' ';\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: black transparent transparent transparent;\n\n top: 100%;\n left: 5px;\n}\n.editInfo {\n font-family: sans-serif;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n color: white;\n width: 100%;\n height: 12pt;\n}\n.editInfoColor {\n float: left;\n width: 10pt;\n height: 10pt;\n border: 1px solid white;\n}\n.editInfoAuthor {\n float: left;\n margin-left: 5pt;\n font-size: 10pt;\n text-align: left;\n height: 12pt;\n line-height: 12pt;\n}\n.editInfoTime {\n float: right;\n margin-left: 30pt;\n font-size: 8pt;\n font-style: italic;\n color: yellow;\n height: 12pt;\n line-height: 12pt;\n}\n\n.annotationWrapper {\n display: inline;\n position: relative;\n}\n\n.annotationRemoveButton:before {\n content: '\u00d7';\n color: white;\n padding: 5px;\n line-height: 1em;\n}\n\n.annotationRemoveButton {\n width: 20px;\n height: 20px;\n border-radius: 10px;\n background-color: black;\n box-shadow: 0px 0px 5px rgba(50, 50, 50, 0.75);\n position: absolute;\n top: -10px;\n left: -10px;\n z-index: 3;\n text-align: center;\n font-family: sans-serif;\n font-style: normal;\n font-weight: normal;\n text-decoration: none;\n font-size: 15px;\n}\n.annotationRemoveButton:hover {\n cursor: pointer;\n box-shadow: 0px 0px 5px rgba(0, 0, 0, 1);\n}\n\n.annotationNote {\n width: 4cm;\n position: absolute;\n display: inline;\n z-index: 10;\n}\n.annotationNote > office|annotation {\n display: block;\n text-align: left;\n}\n\n.annotationConnector {\n position: absolute;\n display: inline;\n z-index: 2;\n border-top: 1px dashed brown;\n}\n.annotationConnector.angular {\n -moz-transform-origin: left top;\n -webkit-transform-origin: left top;\n -ms-transform-origin: left top;\n transform-origin: left top;\n}\n.annotationConnector.horizontal {\n left: 0;\n}\n.annotationConnector.horizontal:before {\n content: '';\n display: inline;\n position: absolute;\n width: 0px;\n height: 0px;\n border-style: solid;\n border-width: 8.7px 5px 0 5px;\n border-color: brown transparent transparent transparent;\n top: -1px;\n left: -5px;\n}\n\noffice|annotation {\n width: 100%;\n height: 100%;\n display: none;\n background: rgb(198, 238, 184);\n background: -moz-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -webkit-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -o-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: -ms-linear-gradient(90deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n background: linear-gradient(180deg, rgb(198, 238, 184) 30%, rgb(180, 196, 159) 100%);\n box-shadow: 0 3px 4px -3px #ccc;\n}\n\noffice|annotation > dc|creator {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n color: white;\n background-color: brown;\n padding: 4px;\n}\noffice|annotation > dc|date {\n display: block;\n font-size: 10pt;\n font-weight: normal;\n font-style: normal;\n font-family: sans-serif;\n border: 4px solid transparent;\n}\noffice|annotation > text|list {\n display: block;\n padding: 5px;\n}\n\n/* This is very temporary CSS. This must go once\n * we start bundling webodf-default ODF styles for annotations.\n */\noffice|annotation text|p {\n font-size: 10pt;\n color: black;\n font-weight: normal;\n font-style: normal;\n text-decoration: none;\n font-family: sans-serif;\n}\n\ndc|*::selection {\n background: transparent;\n}\ndc|*::-moz-selection {\n background: transparent;\n}\n\n#annotationsPane {\n background-color: #EAEAEA;\n width: 4cm;\n height: 100%;\n display: none;\n position: absolute;\n outline: 1px solid #ccc;\n}\n\n.annotationHighlight {\n background-color: yellow;\n position: relative;\n}\n";