ref: master
plugins/web_odf/public/wodotexteditor-0.5.9/wodotexteditor/widgets/dialogWidgets/idMangler.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
/** * Copyright (C) 2014 KO GmbH <copyright@kogmbh.com> * * @licstart * This file is part of WebODF. * * WebODF 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. * * WebODF is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with WebODF. If not, see <http://www.gnu.org/licenses/>. * @licend * * @source: http://www.webodf.org/ * @source: https://github.com/kogmbh/WebODF/ */ /*global define, document, dojo, dijit */ define("webodf/editor/widgets/dialogWidgets/idMangler", ["dojo", "dijit"], function (dojo, dijit) { "use strict"; var instanceCount = 0; /** * Mangles html id attributes and associated references so that the same HTML code can be copied into * a page multiple times without identifier clashes. This also provides helper functions for retrieving * these now-mangled identifiers. * @constructor */ function IdMangler() { var suffix; /** * Returns the supplied text with identifiers mangled * @param {!string} text * @return {!string} */ function mangleIds(text) { /*jslint regexp: true*/ var newText = text.replace(/((id|for|data-dojo-id)\s*=\s*["'][^"']+)/g, "$1" + suffix); /*jslint regexp: false*/ return newText; } this.mangleIds = mangleIds; /** * Replacement method for ContentPane's ioMethod * @return {*} See http://dojotoolkit.org/api/?qs=1.9/dojo/_base/xhr#1_9dojo__base_xhr_get for return details */ this.ioMethod = function() { var args = Array.prototype.slice.call(arguments, 0); return dojo.xhr.get.apply(dojo, args).then(function(html) { return mangleIds(html); }); }; /** * Replacement for dijit.byId * @param {!string} id * @return {*} See http://dojotoolkit.org/api/?qs=1.9/dojo/_base/xhr#1_9dijit_registry_byId for return details */ this.byId = function(id) { return dijit.byId(id + suffix); }; /** * Replacement for document.getElementById * @param {!string} id * @return {HTMLElement|*} */ this.getElementById = function(id) { return document.getElementById(id + suffix); }; function init() { suffix = "_" + instanceCount; instanceCount += 1; } init(); } return IdMangler; }); |