From a5b037aa5b44561584c10ec52fec45430b540d87 Mon Sep 17 00:00:00 2001 From: Julen Pardo Date: Mon, 11 Apr 2016 17:21:58 +0200 Subject: [PATCH] issue #8: refactoring; The cleanup with "id" attribute and without it is made separately, to avoid an evil regular expression. --- .../moodle-atto_multilang2-button-coverage.js | 4 +- .../moodle-atto_multilang2-button-debug.js | 80 ++++++++++++++----- .../moodle-atto_multilang2-button-min.js | 2 +- .../moodle-atto_multilang2-button.js | 80 ++++++++++++++----- yui/src/button/js/button.js | 80 ++++++++++++++----- 5 files changed, 180 insertions(+), 66 deletions(-) diff --git a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-coverage.js b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-coverage.js index 52f2732e3979..79842ce6d3e4 100644 --- a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-coverage.js +++ b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-coverage.js @@ -1,6 +1,6 @@ if (typeof __coverage__ === 'undefined') { __coverage__ = {}; } if (!__coverage__['build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js']) { - __coverage__['build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js'] = {"path":"build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":41},"end":{"line":1,"column":60}}},"2":{"name":"(anonymous_2)","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":53,"column":28}}},"3":{"name":"(anonymous_3)","line":83,"loc":{"start":{"line":83,"column":29},"end":{"line":83,"column":40}}},"4":{"name":"(anonymous_4)","line":114,"loc":{"start":{"line":114,"column":14},"end":{"line":114,"column":36}}},"5":{"name":"(anonymous_5)","line":139,"loc":{"start":{"line":139,"column":23},"end":{"line":139,"column":34}}},"6":{"name":"(anonymous_6)","line":172,"loc":{"start":{"line":172,"column":27},"end":{"line":172,"column":38}}},"7":{"name":"(anonymous_7)","line":193,"loc":{"start":{"line":193,"column":24},"end":{"line":193,"column":35}}},"8":{"name":"(anonymous_8)","line":209,"loc":{"start":{"line":209,"column":24},"end":{"line":209,"column":36}}},"9":{"name":"(anonymous_9)","line":281,"loc":{"start":{"line":281,"column":25},"end":{"line":281,"column":36}}},"10":{"name":"(anonymous_10)","line":324,"loc":{"start":{"line":324,"column":29},"end":{"line":324,"column":40}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":367,"column":61}},"2":{"start":{"line":28,"column":0},"end":{"line":41,"column":46}},"3":{"start":{"line":51,"column":0},"end":{"line":364,"column":3}},"4":{"start":{"line":54,"column":8},"end":{"line":55,"column":30}},"5":{"start":{"line":57,"column":8},"end":{"line":72,"column":9}},"6":{"start":{"line":58,"column":12},"end":{"line":58,"column":39}},"7":{"start":{"line":59,"column":12},"end":{"line":59,"column":58}},"8":{"start":{"line":61,"column":12},"end":{"line":68,"column":15}},"9":{"start":{"line":70,"column":12},"end":{"line":70,"column":91}},"10":{"start":{"line":71,"column":12},"end":{"line":71,"column":38}},"11":{"start":{"line":84,"column":8},"end":{"line":86,"column":21}},"12":{"start":{"line":88,"column":8},"end":{"line":88,"column":57}},"13":{"start":{"line":90,"column":8},"end":{"line":97,"column":9}},"14":{"start":{"line":91,"column":12},"end":{"line":96,"column":13}},"15":{"start":{"line":92,"column":16},"end":{"line":95,"column":19}},"16":{"start":{"line":99,"column":8},"end":{"line":99,"column":28}},"17":{"start":{"line":115,"column":8},"end":{"line":118,"column":20}},"18":{"start":{"line":120,"column":8},"end":{"line":120,"column":45}},"19":{"start":{"line":121,"column":8},"end":{"line":121,"column":87}},"20":{"start":{"line":123,"column":8},"end":{"line":123,"column":71}},"21":{"start":{"line":124,"column":8},"end":{"line":124,"column":73}},"22":{"start":{"line":126,"column":8},"end":{"line":126,"column":54}},"23":{"start":{"line":128,"column":8},"end":{"line":128,"column":27}},"24":{"start":{"line":140,"column":8},"end":{"line":144,"column":19}},"25":{"start":{"line":146,"column":8},"end":{"line":161,"column":9}},"26":{"start":{"line":147,"column":12},"end":{"line":147,"column":46}},"27":{"start":{"line":149,"column":12},"end":{"line":155,"column":13}},"28":{"start":{"line":150,"column":16},"end":{"line":150,"column":58}},"29":{"start":{"line":151,"column":16},"end":{"line":153,"column":17}},"30":{"start":{"line":152,"column":20},"end":{"line":152,"column":87}},"31":{"start":{"line":154,"column":16},"end":{"line":154,"column":43}},"32":{"start":{"line":157,"column":15},"end":{"line":161,"column":9}},"33":{"start":{"line":158,"column":12},"end":{"line":160,"column":13}},"34":{"start":{"line":159,"column":16},"end":{"line":159,"column":65}},"35":{"start":{"line":163,"column":8},"end":{"line":163,"column":20}},"36":{"start":{"line":173,"column":8},"end":{"line":177,"column":22}},"37":{"start":{"line":179,"column":8},"end":{"line":179,"column":67}},"38":{"start":{"line":180,"column":8},"end":{"line":180,"column":63}},"39":{"start":{"line":182,"column":8},"end":{"line":184,"column":9}},"40":{"start":{"line":183,"column":12},"end":{"line":183,"column":70}},"41":{"start":{"line":194,"column":8},"end":{"line":194,"column":53}},"42":{"start":{"line":196,"column":8},"end":{"line":196,"column":64}},"43":{"start":{"line":210,"column":8},"end":{"line":220,"column":21}},"44":{"start":{"line":222,"column":8},"end":{"line":222,"column":27}},"45":{"start":{"line":224,"column":8},"end":{"line":224,"column":48}},"46":{"start":{"line":225,"column":8},"end":{"line":225,"column":46}},"47":{"start":{"line":227,"column":8},"end":{"line":227,"column":78}},"48":{"start":{"line":228,"column":8},"end":{"line":228,"column":61}},"49":{"start":{"line":230,"column":8},"end":{"line":230,"column":81}},"50":{"start":{"line":231,"column":8},"end":{"line":231,"column":89}},"51":{"start":{"line":233,"column":8},"end":{"line":233,"column":69}},"52":{"start":{"line":235,"column":8},"end":{"line":248,"column":9}},"53":{"start":{"line":236,"column":12},"end":{"line":243,"column":13}},"54":{"start":{"line":237,"column":16},"end":{"line":237,"column":56}},"55":{"start":{"line":238,"column":16},"end":{"line":238,"column":73}},"56":{"start":{"line":240,"column":16},"end":{"line":240,"column":69}},"57":{"start":{"line":242,"column":16},"end":{"line":242,"column":77}},"58":{"start":{"line":245,"column":12},"end":{"line":245,"column":49}},"59":{"start":{"line":247,"column":12},"end":{"line":247,"column":31}},"60":{"start":{"line":250,"column":8},"end":{"line":265,"column":9}},"61":{"start":{"line":251,"column":12},"end":{"line":260,"column":13}},"62":{"start":{"line":252,"column":16},"end":{"line":252,"column":64}},"63":{"start":{"line":253,"column":16},"end":{"line":253,"column":68}},"64":{"start":{"line":255,"column":16},"end":{"line":255,"column":84}},"65":{"start":{"line":257,"column":16},"end":{"line":257,"column":69}},"66":{"start":{"line":259,"column":16},"end":{"line":259,"column":77}},"67":{"start":{"line":262,"column":12},"end":{"line":262,"column":49}},"68":{"start":{"line":264,"column":12},"end":{"line":264,"column":31}},"69":{"start":{"line":267,"column":8},"end":{"line":267,"column":22}},"70":{"start":{"line":269,"column":8},"end":{"line":269,"column":39}},"71":{"start":{"line":282,"column":8},"end":{"line":288,"column":30}},"72":{"start":{"line":295,"column":8},"end":{"line":295,"column":51}},"73":{"start":{"line":297,"column":8},"end":{"line":297,"column":58}},"74":{"start":{"line":298,"column":8},"end":{"line":298,"column":55}},"75":{"start":{"line":300,"column":8},"end":{"line":310,"column":9}},"76":{"start":{"line":301,"column":12},"end":{"line":307,"column":13}},"77":{"start":{"line":302,"column":16},"end":{"line":302,"column":44}},"78":{"start":{"line":304,"column":16},"end":{"line":304,"column":72}},"79":{"start":{"line":306,"column":16},"end":{"line":306,"column":75}},"80":{"start":{"line":309,"column":12},"end":{"line":309,"column":49}},"81":{"start":{"line":325,"column":8},"end":{"line":332,"column":18}},"82":{"start":{"line":334,"column":8},"end":{"line":334,"column":55}},"83":{"start":{"line":335,"column":8},"end":{"line":335,"column":57}},"84":{"start":{"line":336,"column":8},"end":{"line":336,"column":61}},"85":{"start":{"line":338,"column":8},"end":{"line":347,"column":9}},"86":{"start":{"line":339,"column":12},"end":{"line":346,"column":13}},"87":{"start":{"line":340,"column":16},"end":{"line":340,"column":56}},"88":{"start":{"line":342,"column":16},"end":{"line":342,"column":73}},"89":{"start":{"line":343,"column":16},"end":{"line":343,"column":69}},"90":{"start":{"line":345,"column":16},"end":{"line":345,"column":77}},"91":{"start":{"line":349,"column":8},"end":{"line":349,"column":25}}},"branchMap":{"1":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":57,"column":8}},{"start":{"line":57,"column":8},"end":{"line":57,"column":8}}]},"2":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":12}},{"start":{"line":91,"column":12},"end":{"line":91,"column":12}}]},"3":{"line":121,"type":"cond-expr","locations":[{"start":{"line":121,"column":66},"end":{"line":121,"column":74}},{"start":{"line":121,"column":77},"end":{"line":121,"column":86}}]},"4":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":8},"end":{"line":146,"column":8}},{"start":{"line":146,"column":8},"end":{"line":146,"column":8}}]},"5":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":12},"end":{"line":149,"column":12}},{"start":{"line":149,"column":12},"end":{"line":149,"column":12}}]},"6":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":15},"end":{"line":157,"column":15}},{"start":{"line":157,"column":15},"end":{"line":157,"column":15}}]},"7":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":12}},{"start":{"line":158,"column":12},"end":{"line":158,"column":12}}]},"8":{"line":182,"type":"if","locations":[{"start":{"line":182,"column":8},"end":{"line":182,"column":8}},{"start":{"line":182,"column":8},"end":{"line":182,"column":8}}]},"9":{"line":182,"type":"binary-expr","locations":[{"start":{"line":182,"column":12},"end":{"line":182,"column":22}},{"start":{"line":182,"column":26},"end":{"line":182,"column":35}}]},"10":{"line":235,"type":"if","locations":[{"start":{"line":235,"column":8},"end":{"line":235,"column":8}},{"start":{"line":235,"column":8},"end":{"line":235,"column":8}}]},"11":{"line":250,"type":"if","locations":[{"start":{"line":250,"column":8},"end":{"line":250,"column":8}},{"start":{"line":250,"column":8},"end":{"line":250,"column":8}}]},"12":{"line":300,"type":"if","locations":[{"start":{"line":300,"column":8},"end":{"line":300,"column":8}},{"start":{"line":300,"column":8},"end":{"line":300,"column":8}}]},"13":{"line":338,"type":"if","locations":[{"start":{"line":338,"column":8},"end":{"line":338,"column":8}},{"start":{"line":338,"column":8},"end":{"line":338,"column":8}}]}},"code":["(function () { YUI.add('moodle-atto_multilang2-button', function (Y, NAME) {","","// This file is part of Moodle - http://moodle.org/","//","// Moodle is free software: you can redistribute it and/or modify","// it under the terms of the GNU General Public License as published by","// the Free Software Foundation, either version 3 of the License, or","// (at your option) any later version.","//","// Moodle 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 General Public License for more details.","//","// You should have received a copy of the GNU General Public License","// along with Moodle. If not, see .","","/**"," * @package atto_multilang2"," * @copyright 2015 onwards Julen Pardo & Mondragon Unibertsitatea"," * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later"," */","","/**"," * @module moodle-atto_multilang2-button"," */","","var CLASSES = {"," TAG: 'filter-multilang-tag'"," },",""," LANG_WILDCARD = '%lang',"," CONTENT_WILDCARD = '%content',"," ATTR_LANGUAGES = 'languages',"," ATTR_CAPABILITY = 'capability',"," DEFAULT_LANGUAGE = '{\"en\":\"English (en)\"}',"," OPENING_SPAN = '',"," TEMPLATE = '' +"," ' ' + OPENING_SPAN + '{mlang ' + LANG_WILDCARD + '}' +"," CONTENT_WILDCARD +"," OPENING_SPAN + '{mlang} ';","","/**"," * Atto text editor multilanguage plugin."," *"," * @namespace M.atto_multilang2"," * @class button"," * @extends M.editor_atto.EditorPlugin"," */","","Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], {",""," initializer: function() {"," var hascapability = this.get(ATTR_CAPABILITY),"," toolbarItems = [];",""," if (hascapability) {"," this._decorateTagsOnInit();"," toolbarItems = this._initializeToolbarItems();",""," this.addToolbarMenu({"," globalItemConfig: {"," callback: this._addTags"," },"," icon: 'icon',"," iconComponent: 'atto_multilang2',"," items: toolbarItems"," });",""," this.get('host').on('atto:selectionchanged', this._checkSelectionChange, this);"," this._setSubmitListener();"," }"," },",""," /**"," * Initializes the toolbar items, which will be the installed languages,"," * received as parameter."," *"," * @method _initializeToolbarItems"," * @private"," * @return {Array} installed language strings"," */"," _initializeToolbarItems: function() {"," var toolbarItems = [],"," languages,"," langCode;",""," languages = JSON.parse(this.get(ATTR_LANGUAGES));",""," for (langCode in languages) {"," if (languages.hasOwnProperty(langCode)) {"," toolbarItems.push({"," text: languages[langCode],"," callbackArgs: langCode"," });"," }"," }",""," return toolbarItems;"," },",""," /**"," * Retrieves the selected text, wraps it with the multilang tags,"," * and replaces the selected text in the editor with with it."," *"," * If there is no content selected, a \" \" will be inserted; otherwhise,"," * it's impossible to place the cursor inside the {mlang} tags."," *"," * @method _addTags"," * @param {EventFacade} e"," * @param {string} langCode the language code"," * @private"," */"," _addTags: function(e, langCode) {"," var selection,"," host = this.get('host'),"," taggedContent = TEMPLATE,"," content;",""," selection = this._getSelectionHTML();"," content = (host.getSelection().toString().length === 0) ? ' ' : selection;",""," taggedContent = taggedContent.replace(LANG_WILDCARD, langCode);"," taggedContent = taggedContent.replace(CONTENT_WILDCARD, content);",""," host.insertContentAtFocusPoint(taggedContent);",""," this.markUpdated();"," },",""," /**"," * Retrieves selected text with its HTML."," * Took from: http://stackoverflow.com/questions/4176923/html-of-selected-text/4177234#4177234"," *"," * @method _getSelectionHTML"," * @private"," * @return {string} selected text's html; empty if nothing selected"," */"," _getSelectionHTML: function() {"," var html = '',"," selection,"," container,"," index,"," lenght;",""," if (typeof window.getSelection !== 'undefined') {"," selection = window.getSelection();",""," if (selection.rangeCount) {"," container = document.createElement('div');"," for (index = 0, lenght = selection.rangeCount; index < lenght; ++index) {"," container.appendChild(selection.getRangeAt(index).cloneContents());"," }"," html = container.innerHTML;"," }",""," } else if (typeof document.selection !== 'undefined') {"," if (document.selection.type === 'Text') {"," html = document.selection.createRange().htmlText;"," }"," }",""," return html;"," },"," /**"," * Listens to every change of the text cursor in the text area. If the"," * cursor is placed within a multilang tag, the whole tag is selected."," *"," * @method _checkSelectionChange"," * @private"," */"," _checkSelectionChange: function() {"," var host = this.get('host'),"," node = host.getSelectionParentNode(),"," nodeValue = Y.one(node).get('text'),"," isTextNode,"," isLangTag;",""," isTextNode = Y.one(node).toString().indexOf('#text') > - 1;"," isLangTag = (nodeValue.match(/\\{mlang/g).length === 1);",""," if (isTextNode && isLangTag) {"," host.setSelection(host.getSelectionFromNode(Y.one(node)));"," }"," },",""," /**"," * Sets the submit listener to the function that finds the spaned {mlang} tags."," *"," * @method _setSubmitListener"," * @private"," */"," _setSubmitListener: function() {"," var submitbutton = Y.one('#id_submitbutton');",""," submitbutton.on('click', this._cleanTagsOnSubmit, this);"," },",""," /**"," * Cleans the tags around the {mlang} tags when the form is submitted."," * Is necessary to prevent the default action first (the form submission) to"," * start working. When finished, with \"detach\", the default submit listener"," * is restored, so the form can be submitted."," *"," * @method _cleanTagsOnSubmit"," * @param {EventFacade} e"," * @private"," */"," _cleanTagsOnSubmit: function(e) {"," var submitbutton = Y.one('#id_submitbutton'),"," textarea,"," innerHTML,"," spanedmlangtags,"," spanedmlangtag,"," index,"," cleanmlangtag,"," regularExpression,"," openingspanwithyui,"," spanedmlangtagsdwithyui,"," mlangtag;",""," e.preventDefault();",""," textarea = Y.one('#id_messageeditable');"," innerHTML = textarea.get('innerHTML');",""," regularExpression = new RegExp(OPENING_SPAN + '.*?' + '', 'g');"," spanedmlangtags = innerHTML.match(regularExpression);",""," openingspanwithyui = OPENING_SPAN.replace('', 'g');"," "," spanedmlangtagsdwithyui = innerHTML.match(regularExpression);",""," if (spanedmlangtags !== null) {"," for (index = 0; index < spanedmlangtags.length; index++) {"," spanedmlangtag = spanedmlangtags[index];"," cleanmlangtag = spanedmlangtag.replace(OPENING_SPAN, '');",""," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);",""," this.markUpdated();"," }",""," if (spanedmlangtagsdwithyui !== null) {"," for (index = 0; index < spanedmlangtagsdwithyui.length; index++) {"," spanedmlangtag = spanedmlangtagsdwithyui[index];"," mlangtag = spanedmlangtag.match(/\\{mlang.*?\\}/g)[0];",""," cleanmlangtag = spanedmlangtag.replace(regularExpression, mlangtag);",""," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);",""," this.markUpdated();"," }",""," this.detach();",""," submitbutton.simulate('click');"," },",""," /**"," * Adds the tags to the {mlang} tags when the editor is loaded."," * In this case, we DON'T HAVE TO CALL TO markUpdated(). Why? Honestly,"," * I don't know. But, if we call it after setting the HTML, the {mlang}"," * tags flicker with the decoration, and returns to their original state."," *"," * @method _decorateTagsOnInit"," * @private"," */"," _decorateTagsOnInit: function() {"," var textarea = Y.one('#id_messageeditable'),"," innerHTML,"," regularExpression,"," mlangtags,"," mlangtag,"," index,"," decoratedmlangtag;",""," // Instead of taking the HTML directly from the textarea, we have to"," // retrieve it, first, without the tags that can be stored"," // in database, due to a bug in version 2015120501 that stores the"," // {mlang} tags in database, with the tags."," // More info about this bug: https://github.com/julenpardo/moodle-atto_multilang2/issues/8"," innerHTML = this._getHTMLwithCleanedTags();",""," regularExpression = new RegExp('{mlang.*?}', 'g');"," mlangtags = innerHTML.match(regularExpression);",""," if (mlangtags !== null) {"," for (index = 0; index < mlangtags.length; index++) {"," mlangtag = mlangtags[index];",""," decoratedmlangtag = OPENING_SPAN + mlangtag + '';",""," innerHTML = innerHTML.replace(mlangtag, decoratedmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);"," }",""," },",""," /**"," * This function returns the HTML as it is in the textarea, but cleaning every"," * tag around the {mlang} tags. This is necessary for decorating tags on"," * init, because it could happen that in database are stored the {mlang} tags with"," * their tags, due to a bug in version 2015120501."," * More info about this bug: https://github.com/julenpardo/moodle-atto_multilang2/issues/8"," *"," * @method _getHTMLwithCleanedTags"," * @return {string} HTML in textarea, without any around {mlang} tags"," */"," _getHTMLwithCleanedTags: function() {"," var textarea = Y.one('#id_messageeditable'),"," innerHTML = textarea.get('innerHTML'),"," regexString,"," regularExpression,"," spanedmlangtags,"," spanedmlangtag,"," cleanmlangtag,"," index;",""," regexString = OPENING_SPAN + '.*?' + '';"," regularExpression = new RegExp(regexString, 'g');"," spanedmlangtags = innerHTML.match(regularExpression);",""," if (spanedmlangtags !== null) {"," for (index = 0; index < spanedmlangtags.length; index++) {"," spanedmlangtag = spanedmlangtags[index];",""," cleanmlangtag = spanedmlangtag.replace(OPENING_SPAN, '');"," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }"," }",""," return innerHTML;"," }","","}, {"," ATTRS: {"," /**"," * The list of installed languages"," *"," * @attribute languages"," * @type array"," * @default {\"en\":\"English (en)\"}"," */"," languages: DEFAULT_LANGUAGE,"," capability: true"," }","});","","","}, '@VERSION@', {\"requires\": [\"moodle-editor_atto-plugin\"]});","","}());"]}; + __coverage__['build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js'] = {"path":"build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":41},"end":{"line":1,"column":60}}},"2":{"name":"(anonymous_2)","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":53,"column":28}}},"3":{"name":"(anonymous_3)","line":83,"loc":{"start":{"line":83,"column":29},"end":{"line":83,"column":40}}},"4":{"name":"(anonymous_4)","line":114,"loc":{"start":{"line":114,"column":14},"end":{"line":114,"column":36}}},"5":{"name":"(anonymous_5)","line":139,"loc":{"start":{"line":139,"column":23},"end":{"line":139,"column":34}}},"6":{"name":"(anonymous_6)","line":172,"loc":{"start":{"line":172,"column":27},"end":{"line":172,"column":38}}},"7":{"name":"(anonymous_7)","line":193,"loc":{"start":{"line":193,"column":24},"end":{"line":193,"column":35}}},"8":{"name":"(anonymous_8)","line":211,"loc":{"start":{"line":211,"column":24},"end":{"line":211,"column":36}}},"9":{"name":"(anonymous_9)","line":233,"loc":{"start":{"line":233,"column":27},"end":{"line":233,"column":38}}},"10":{"name":"(anonymous_10)","line":273,"loc":{"start":{"line":273,"column":26},"end":{"line":273,"column":37}}},"11":{"name":"(anonymous_11)","line":319,"loc":{"start":{"line":319,"column":25},"end":{"line":319,"column":36}}},"12":{"name":"(anonymous_12)","line":362,"loc":{"start":{"line":362,"column":29},"end":{"line":362,"column":40}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":405,"column":61}},"2":{"start":{"line":28,"column":0},"end":{"line":41,"column":46}},"3":{"start":{"line":51,"column":0},"end":{"line":402,"column":3}},"4":{"start":{"line":54,"column":8},"end":{"line":55,"column":30}},"5":{"start":{"line":57,"column":8},"end":{"line":72,"column":9}},"6":{"start":{"line":58,"column":12},"end":{"line":58,"column":39}},"7":{"start":{"line":59,"column":12},"end":{"line":59,"column":58}},"8":{"start":{"line":61,"column":12},"end":{"line":68,"column":15}},"9":{"start":{"line":70,"column":12},"end":{"line":70,"column":91}},"10":{"start":{"line":71,"column":12},"end":{"line":71,"column":38}},"11":{"start":{"line":84,"column":8},"end":{"line":86,"column":21}},"12":{"start":{"line":88,"column":8},"end":{"line":88,"column":57}},"13":{"start":{"line":90,"column":8},"end":{"line":97,"column":9}},"14":{"start":{"line":91,"column":12},"end":{"line":96,"column":13}},"15":{"start":{"line":92,"column":16},"end":{"line":95,"column":19}},"16":{"start":{"line":99,"column":8},"end":{"line":99,"column":28}},"17":{"start":{"line":115,"column":8},"end":{"line":118,"column":20}},"18":{"start":{"line":120,"column":8},"end":{"line":120,"column":45}},"19":{"start":{"line":121,"column":8},"end":{"line":121,"column":87}},"20":{"start":{"line":123,"column":8},"end":{"line":123,"column":71}},"21":{"start":{"line":124,"column":8},"end":{"line":124,"column":73}},"22":{"start":{"line":126,"column":8},"end":{"line":126,"column":54}},"23":{"start":{"line":128,"column":8},"end":{"line":128,"column":27}},"24":{"start":{"line":140,"column":8},"end":{"line":144,"column":19}},"25":{"start":{"line":146,"column":8},"end":{"line":161,"column":9}},"26":{"start":{"line":147,"column":12},"end":{"line":147,"column":46}},"27":{"start":{"line":149,"column":12},"end":{"line":155,"column":13}},"28":{"start":{"line":150,"column":16},"end":{"line":150,"column":58}},"29":{"start":{"line":151,"column":16},"end":{"line":153,"column":17}},"30":{"start":{"line":152,"column":20},"end":{"line":152,"column":87}},"31":{"start":{"line":154,"column":16},"end":{"line":154,"column":43}},"32":{"start":{"line":157,"column":15},"end":{"line":161,"column":9}},"33":{"start":{"line":158,"column":12},"end":{"line":160,"column":13}},"34":{"start":{"line":159,"column":16},"end":{"line":159,"column":65}},"35":{"start":{"line":163,"column":8},"end":{"line":163,"column":20}},"36":{"start":{"line":173,"column":8},"end":{"line":177,"column":22}},"37":{"start":{"line":179,"column":8},"end":{"line":179,"column":67}},"38":{"start":{"line":180,"column":8},"end":{"line":180,"column":63}},"39":{"start":{"line":182,"column":8},"end":{"line":184,"column":9}},"40":{"start":{"line":183,"column":12},"end":{"line":183,"column":70}},"41":{"start":{"line":194,"column":8},"end":{"line":194,"column":53}},"42":{"start":{"line":196,"column":8},"end":{"line":196,"column":64}},"43":{"start":{"line":212,"column":8},"end":{"line":212,"column":53}},"44":{"start":{"line":214,"column":8},"end":{"line":214,"column":27}},"45":{"start":{"line":216,"column":8},"end":{"line":216,"column":37}},"46":{"start":{"line":217,"column":8},"end":{"line":217,"column":35}},"47":{"start":{"line":219,"column":8},"end":{"line":219,"column":22}},"48":{"start":{"line":221,"column":8},"end":{"line":221,"column":39}},"49":{"start":{"line":234,"column":8},"end":{"line":240,"column":30}},"50":{"start":{"line":242,"column":8},"end":{"line":242,"column":48}},"51":{"start":{"line":243,"column":8},"end":{"line":243,"column":46}},"52":{"start":{"line":245,"column":8},"end":{"line":245,"column":78}},"53":{"start":{"line":246,"column":8},"end":{"line":246,"column":61}},"54":{"start":{"line":248,"column":8},"end":{"line":261,"column":9}},"55":{"start":{"line":249,"column":12},"end":{"line":256,"column":13}},"56":{"start":{"line":250,"column":16},"end":{"line":250,"column":56}},"57":{"start":{"line":251,"column":16},"end":{"line":251,"column":73}},"58":{"start":{"line":253,"column":16},"end":{"line":253,"column":69}},"59":{"start":{"line":255,"column":16},"end":{"line":255,"column":77}},"60":{"start":{"line":258,"column":12},"end":{"line":258,"column":49}},"61":{"start":{"line":260,"column":12},"end":{"line":260,"column":31}},"62":{"start":{"line":274,"column":8},"end":{"line":282,"column":21}},"63":{"start":{"line":284,"column":8},"end":{"line":284,"column":48}},"64":{"start":{"line":285,"column":8},"end":{"line":285,"column":46}},"65":{"start":{"line":287,"column":8},"end":{"line":287,"column":81}},"66":{"start":{"line":288,"column":8},"end":{"line":288,"column":89}},"67":{"start":{"line":290,"column":8},"end":{"line":290,"column":69}},"68":{"start":{"line":292,"column":8},"end":{"line":307,"column":9}},"69":{"start":{"line":293,"column":12},"end":{"line":302,"column":13}},"70":{"start":{"line":294,"column":16},"end":{"line":294,"column":64}},"71":{"start":{"line":295,"column":16},"end":{"line":295,"column":68}},"72":{"start":{"line":297,"column":16},"end":{"line":297,"column":84}},"73":{"start":{"line":299,"column":16},"end":{"line":299,"column":69}},"74":{"start":{"line":301,"column":16},"end":{"line":301,"column":77}},"75":{"start":{"line":304,"column":12},"end":{"line":304,"column":49}},"76":{"start":{"line":306,"column":12},"end":{"line":306,"column":31}},"77":{"start":{"line":320,"column":8},"end":{"line":326,"column":30}},"78":{"start":{"line":333,"column":8},"end":{"line":333,"column":51}},"79":{"start":{"line":335,"column":8},"end":{"line":335,"column":58}},"80":{"start":{"line":336,"column":8},"end":{"line":336,"column":55}},"81":{"start":{"line":338,"column":8},"end":{"line":348,"column":9}},"82":{"start":{"line":339,"column":12},"end":{"line":345,"column":13}},"83":{"start":{"line":340,"column":16},"end":{"line":340,"column":44}},"84":{"start":{"line":342,"column":16},"end":{"line":342,"column":72}},"85":{"start":{"line":344,"column":16},"end":{"line":344,"column":75}},"86":{"start":{"line":347,"column":12},"end":{"line":347,"column":49}},"87":{"start":{"line":363,"column":8},"end":{"line":370,"column":18}},"88":{"start":{"line":372,"column":8},"end":{"line":372,"column":55}},"89":{"start":{"line":373,"column":8},"end":{"line":373,"column":57}},"90":{"start":{"line":374,"column":8},"end":{"line":374,"column":61}},"91":{"start":{"line":376,"column":8},"end":{"line":385,"column":9}},"92":{"start":{"line":377,"column":12},"end":{"line":384,"column":13}},"93":{"start":{"line":378,"column":16},"end":{"line":378,"column":56}},"94":{"start":{"line":380,"column":16},"end":{"line":380,"column":73}},"95":{"start":{"line":381,"column":16},"end":{"line":381,"column":69}},"96":{"start":{"line":383,"column":16},"end":{"line":383,"column":77}},"97":{"start":{"line":387,"column":8},"end":{"line":387,"column":25}}},"branchMap":{"1":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":57,"column":8}},{"start":{"line":57,"column":8},"end":{"line":57,"column":8}}]},"2":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":12}},{"start":{"line":91,"column":12},"end":{"line":91,"column":12}}]},"3":{"line":121,"type":"cond-expr","locations":[{"start":{"line":121,"column":66},"end":{"line":121,"column":74}},{"start":{"line":121,"column":77},"end":{"line":121,"column":86}}]},"4":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":8},"end":{"line":146,"column":8}},{"start":{"line":146,"column":8},"end":{"line":146,"column":8}}]},"5":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":12},"end":{"line":149,"column":12}},{"start":{"line":149,"column":12},"end":{"line":149,"column":12}}]},"6":{"line":157,"type":"if","locations":[{"start":{"line":157,"column":15},"end":{"line":157,"column":15}},{"start":{"line":157,"column":15},"end":{"line":157,"column":15}}]},"7":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":12}},{"start":{"line":158,"column":12},"end":{"line":158,"column":12}}]},"8":{"line":182,"type":"if","locations":[{"start":{"line":182,"column":8},"end":{"line":182,"column":8}},{"start":{"line":182,"column":8},"end":{"line":182,"column":8}}]},"9":{"line":182,"type":"binary-expr","locations":[{"start":{"line":182,"column":12},"end":{"line":182,"column":22}},{"start":{"line":182,"column":26},"end":{"line":182,"column":35}}]},"10":{"line":248,"type":"if","locations":[{"start":{"line":248,"column":8},"end":{"line":248,"column":8}},{"start":{"line":248,"column":8},"end":{"line":248,"column":8}}]},"11":{"line":292,"type":"if","locations":[{"start":{"line":292,"column":8},"end":{"line":292,"column":8}},{"start":{"line":292,"column":8},"end":{"line":292,"column":8}}]},"12":{"line":338,"type":"if","locations":[{"start":{"line":338,"column":8},"end":{"line":338,"column":8}},{"start":{"line":338,"column":8},"end":{"line":338,"column":8}}]},"13":{"line":376,"type":"if","locations":[{"start":{"line":376,"column":8},"end":{"line":376,"column":8}},{"start":{"line":376,"column":8},"end":{"line":376,"column":8}}]}},"code":["(function () { YUI.add('moodle-atto_multilang2-button', function (Y, NAME) {","","// This file is part of Moodle - http://moodle.org/","//","// Moodle is free software: you can redistribute it and/or modify","// it under the terms of the GNU General Public License as published by","// the Free Software Foundation, either version 3 of the License, or","// (at your option) any later version.","//","// Moodle 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 General Public License for more details.","//","// You should have received a copy of the GNU General Public License","// along with Moodle. If not, see .","","/**"," * @package atto_multilang2"," * @copyright 2015 onwards Julen Pardo & Mondragon Unibertsitatea"," * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later"," */","","/**"," * @module moodle-atto_multilang2-button"," */","","var CLASSES = {"," TAG: 'filter-multilang-tag'"," },",""," LANG_WILDCARD = '%lang',"," CONTENT_WILDCARD = '%content',"," ATTR_LANGUAGES = 'languages',"," ATTR_CAPABILITY = 'capability',"," DEFAULT_LANGUAGE = '{\"en\":\"English (en)\"}',"," OPENING_SPAN = '',"," TEMPLATE = '' +"," ' ' + OPENING_SPAN + '{mlang ' + LANG_WILDCARD + '}' +"," CONTENT_WILDCARD +"," OPENING_SPAN + '{mlang} ';","","/**"," * Atto text editor multilanguage plugin."," *"," * @namespace M.atto_multilang2"," * @class button"," * @extends M.editor_atto.EditorPlugin"," */","","Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], {",""," initializer: function() {"," var hascapability = this.get(ATTR_CAPABILITY),"," toolbarItems = [];",""," if (hascapability) {"," this._decorateTagsOnInit();"," toolbarItems = this._initializeToolbarItems();",""," this.addToolbarMenu({"," globalItemConfig: {"," callback: this._addTags"," },"," icon: 'icon',"," iconComponent: 'atto_multilang2',"," items: toolbarItems"," });",""," this.get('host').on('atto:selectionchanged', this._checkSelectionChange, this);"," this._setSubmitListener();"," }"," },",""," /**"," * Initializes the toolbar items, which will be the installed languages,"," * received as parameter."," *"," * @method _initializeToolbarItems"," * @private"," * @return {Array} installed language strings"," */"," _initializeToolbarItems: function() {"," var toolbarItems = [],"," languages,"," langCode;",""," languages = JSON.parse(this.get(ATTR_LANGUAGES));",""," for (langCode in languages) {"," if (languages.hasOwnProperty(langCode)) {"," toolbarItems.push({"," text: languages[langCode],"," callbackArgs: langCode"," });"," }"," }",""," return toolbarItems;"," },",""," /**"," * Retrieves the selected text, wraps it with the multilang tags,"," * and replaces the selected text in the editor with with it."," *"," * If there is no content selected, a \" \" will be inserted; otherwhise,"," * it's impossible to place the cursor inside the {mlang} tags."," *"," * @method _addTags"," * @param {EventFacade} e"," * @param {string} langCode the language code"," * @private"," */"," _addTags: function(e, langCode) {"," var selection,"," host = this.get('host'),"," taggedContent = TEMPLATE,"," content;",""," selection = this._getSelectionHTML();"," content = (host.getSelection().toString().length === 0) ? ' ' : selection;",""," taggedContent = taggedContent.replace(LANG_WILDCARD, langCode);"," taggedContent = taggedContent.replace(CONTENT_WILDCARD, content);",""," host.insertContentAtFocusPoint(taggedContent);",""," this.markUpdated();"," },",""," /**"," * Retrieves selected text with its HTML."," * Took from: http://stackoverflow.com/questions/4176923/html-of-selected-text/4177234#4177234"," *"," * @method _getSelectionHTML"," * @private"," * @return {string} selected text's html; empty if nothing selected"," */"," _getSelectionHTML: function() {"," var html = '',"," selection,"," container,"," index,"," lenght;",""," if (typeof window.getSelection !== 'undefined') {"," selection = window.getSelection();",""," if (selection.rangeCount) {"," container = document.createElement('div');"," for (index = 0, lenght = selection.rangeCount; index < lenght; ++index) {"," container.appendChild(selection.getRangeAt(index).cloneContents());"," }"," html = container.innerHTML;"," }",""," } else if (typeof document.selection !== 'undefined') {"," if (document.selection.type === 'Text') {"," html = document.selection.createRange().htmlText;"," }"," }",""," return html;"," },"," /**"," * Listens to every change of the text cursor in the text area. If the"," * cursor is placed within a multilang tag, the whole tag is selected."," *"," * @method _checkSelectionChange"," * @private"," */"," _checkSelectionChange: function() {"," var host = this.get('host'),"," node = host.getSelectionParentNode(),"," nodeValue = Y.one(node).get('text'),"," isTextNode,"," isLangTag;",""," isTextNode = Y.one(node).toString().indexOf('#text') > - 1;"," isLangTag = (nodeValue.match(/\\{mlang/g).length === 1);",""," if (isTextNode && isLangTag) {"," host.setSelection(host.getSelectionFromNode(Y.one(node)));"," }"," },",""," /**"," * Sets the submit listener to the function that finds the spaned {mlang} tags."," *"," * @method _setSubmitListener"," * @private"," */"," _setSubmitListener: function() {"," var submitbutton = Y.one('#id_submitbutton');",""," submitbutton.on('click', this._cleanTagsOnSubmit, this);"," },",""," /**"," * When submit button clicked, this function is invoked. It has to stop the submission,"," * in order to process the textarea to clean the tags."," * Once the textarea is cleaned, detaches this submit listener, i.e., it sets as default,"," * an then simulates the click, to submit the form."," * The cleanup with \"id\" attribute and without it is made separately, to avoid an evil"," * regular expression."," *"," * @method _cleanTagsOnSubmit"," * @param {EventFacade} e"," * @private"," */"," _cleanTagsOnSubmit: function(e) {"," var submitbutton = Y.one('#id_submitbutton');",""," e.preventDefault();",""," this._cleanTagsWithNoYuiId();"," this._cleanTagsWithYuiId();",""," this.detach();",""," submitbutton.simulate('click');"," },",""," /**"," * Cleans the tags around the {mlang} tags when the form is submitted,"," * that do not have \"id\" attribute."," * The cleanup with \"id\" attribute and without it is made separately, to avoid an evil"," * regular expression."," *"," * @method _cleanTagsWithNoYuiId"," * @private"," */"," _cleanTagsWithNoYuiId: function() {"," var textarea,"," innerHTML,"," spanedmlangtags,"," spanedmlangtag,"," index,"," cleanmlangtag,"," regularExpression;",""," textarea = Y.one('#id_messageeditable');"," innerHTML = textarea.get('innerHTML');",""," regularExpression = new RegExp(OPENING_SPAN + '.*?' + '', 'g');"," spanedmlangtags = innerHTML.match(regularExpression);",""," if (spanedmlangtags !== null) {"," for (index = 0; index < spanedmlangtags.length; index++) {"," spanedmlangtag = spanedmlangtags[index];"," cleanmlangtag = spanedmlangtag.replace(OPENING_SPAN, '');",""," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);",""," this.markUpdated();"," }"," },",""," /**"," * Cleans the tags around the {mlang} tags when the form is submitted,"," * that have \"id\" attribute, generated by YUI, when the cursor is placed on the tags."," * The cleanup with \"id\" attribute and without it is made separately, to avoid an evil"," * regular expression."," *"," * @method anTagsWithYuiId"," * @private"," */"," _cleanTagsWithYuiId: function() {"," var textarea,"," innerHTML,"," spanedmlangtag,"," index,"," cleanmlangtag,"," regularExpression,"," openingspanwithyui,"," spanedmlangtagsdwithyui,"," mlangtag;",""," textarea = Y.one('#id_messageeditable');"," innerHTML = textarea.get('innerHTML');",""," openingspanwithyui = OPENING_SPAN.replace('', 'g');"," "," spanedmlangtagsdwithyui = innerHTML.match(regularExpression);",""," if (spanedmlangtagsdwithyui !== null) {"," for (index = 0; index < spanedmlangtagsdwithyui.length; index++) {"," spanedmlangtag = spanedmlangtagsdwithyui[index];"," mlangtag = spanedmlangtag.match(/\\{mlang.*?\\}/g)[0];",""," cleanmlangtag = spanedmlangtag.replace(regularExpression, mlangtag);",""," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);",""," this.markUpdated();"," }"," },",""," /**"," * Adds the tags to the {mlang} tags when the editor is loaded."," * In this case, we DON'T HAVE TO CALL TO markUpdated(). Why? Honestly,"," * I don't know. But, if we call it after setting the HTML, the {mlang}"," * tags flicker with the decoration, and returns to their original state."," *"," * @method _decorateTagsOnInit"," * @private"," */"," _decorateTagsOnInit: function() {"," var textarea = Y.one('#id_messageeditable'),"," innerHTML,"," regularExpression,"," mlangtags,"," mlangtag,"," index,"," decoratedmlangtag;",""," // Instead of taking the HTML directly from the textarea, we have to"," // retrieve it, first, without the tags that can be stored"," // in database, due to a bug in version 2015120501 that stores the"," // {mlang} tags in database, with the tags."," // More info about this bug: https://github.com/julenpardo/moodle-atto_multilang2/issues/8"," innerHTML = this._getHTMLwithCleanedTags();",""," regularExpression = new RegExp('{mlang.*?}', 'g');"," mlangtags = innerHTML.match(regularExpression);",""," if (mlangtags !== null) {"," for (index = 0; index < mlangtags.length; index++) {"," mlangtag = mlangtags[index];",""," decoratedmlangtag = OPENING_SPAN + mlangtag + '';",""," innerHTML = innerHTML.replace(mlangtag, decoratedmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);"," }",""," },",""," /**"," * This function returns the HTML as it is in the textarea, but cleaning every"," * tag around the {mlang} tags. This is necessary for decorating tags on"," * init, because it could happen that in database are stored the {mlang} tags with"," * their tags, due to a bug in version 2015120501."," * More info about this bug: https://github.com/julenpardo/moodle-atto_multilang2/issues/8"," *"," * @method _getHTMLwithCleanedTags"," * @return {string} HTML in textarea, without any around {mlang} tags"," */"," _getHTMLwithCleanedTags: function() {"," var textarea = Y.one('#id_messageeditable'),"," innerHTML = textarea.get('innerHTML'),"," regexString,"," regularExpression,"," spanedmlangtags,"," spanedmlangtag,"," cleanmlangtag,"," index;",""," regexString = OPENING_SPAN + '.*?' + '';"," regularExpression = new RegExp(regexString, 'g');"," spanedmlangtags = innerHTML.match(regularExpression);",""," if (spanedmlangtags !== null) {"," for (index = 0; index < spanedmlangtags.length; index++) {"," spanedmlangtag = spanedmlangtags[index];",""," cleanmlangtag = spanedmlangtag.replace(OPENING_SPAN, '');"," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }"," }",""," return innerHTML;"," }","","}, {"," ATTRS: {"," /**"," * The list of installed languages"," *"," * @attribute languages"," * @type array"," * @default {\"en\":\"English (en)\"}"," */"," languages: DEFAULT_LANGUAGE,"," capability: true"," }","});","","","}, '@VERSION@', {\"requires\": [\"moodle-editor_atto-plugin\"]});","","}());"]}; } var __cov_xlcucJyua6odXhLRctX6xg = __coverage__['build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js']; -__cov_xlcucJyua6odXhLRctX6xg.s['1']++;YUI.add('moodle-atto_multilang2-button',function(Y,NAME){__cov_xlcucJyua6odXhLRctX6xg.f['1']++;__cov_xlcucJyua6odXhLRctX6xg.s['2']++;var CLASSES={TAG:'filter-multilang-tag'},LANG_WILDCARD='%lang',CONTENT_WILDCARD='%content',ATTR_LANGUAGES='languages',ATTR_CAPABILITY='capability',DEFAULT_LANGUAGE='{"en":"English (en)"}',OPENING_SPAN='',TEMPLATE=''+' '+OPENING_SPAN+'{mlang '+LANG_WILDCARD+'}'+CONTENT_WILDCARD+OPENING_SPAN+'{mlang} ';__cov_xlcucJyua6odXhLRctX6xg.s['3']++;Y.namespace('M.atto_multilang2').Button=Y.Base.create('button',Y.M.editor_atto.EditorPlugin,[],{initializer:function(){__cov_xlcucJyua6odXhLRctX6xg.f['2']++;__cov_xlcucJyua6odXhLRctX6xg.s['4']++;var hascapability=this.get(ATTR_CAPABILITY),toolbarItems=[];__cov_xlcucJyua6odXhLRctX6xg.s['5']++;if(hascapability){__cov_xlcucJyua6odXhLRctX6xg.b['1'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['6']++;this._decorateTagsOnInit();__cov_xlcucJyua6odXhLRctX6xg.s['7']++;toolbarItems=this._initializeToolbarItems();__cov_xlcucJyua6odXhLRctX6xg.s['8']++;this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:'icon',iconComponent:'atto_multilang2',items:toolbarItems});__cov_xlcucJyua6odXhLRctX6xg.s['9']++;this.get('host').on('atto:selectionchanged',this._checkSelectionChange,this);__cov_xlcucJyua6odXhLRctX6xg.s['10']++;this._setSubmitListener();}else{__cov_xlcucJyua6odXhLRctX6xg.b['1'][1]++;}},_initializeToolbarItems:function(){__cov_xlcucJyua6odXhLRctX6xg.f['3']++;__cov_xlcucJyua6odXhLRctX6xg.s['11']++;var toolbarItems=[],languages,langCode;__cov_xlcucJyua6odXhLRctX6xg.s['12']++;languages=JSON.parse(this.get(ATTR_LANGUAGES));__cov_xlcucJyua6odXhLRctX6xg.s['13']++;for(langCode in languages){__cov_xlcucJyua6odXhLRctX6xg.s['14']++;if(languages.hasOwnProperty(langCode)){__cov_xlcucJyua6odXhLRctX6xg.b['2'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['15']++;toolbarItems.push({text:languages[langCode],callbackArgs:langCode});}else{__cov_xlcucJyua6odXhLRctX6xg.b['2'][1]++;}}__cov_xlcucJyua6odXhLRctX6xg.s['16']++;return toolbarItems;},_addTags:function(e,langCode){__cov_xlcucJyua6odXhLRctX6xg.f['4']++;__cov_xlcucJyua6odXhLRctX6xg.s['17']++;var selection,host=this.get('host'),taggedContent=TEMPLATE,content;__cov_xlcucJyua6odXhLRctX6xg.s['18']++;selection=this._getSelectionHTML();__cov_xlcucJyua6odXhLRctX6xg.s['19']++;content=host.getSelection().toString().length===0?(__cov_xlcucJyua6odXhLRctX6xg.b['3'][0]++,' '):(__cov_xlcucJyua6odXhLRctX6xg.b['3'][1]++,selection);__cov_xlcucJyua6odXhLRctX6xg.s['20']++;taggedContent=taggedContent.replace(LANG_WILDCARD,langCode);__cov_xlcucJyua6odXhLRctX6xg.s['21']++;taggedContent=taggedContent.replace(CONTENT_WILDCARD,content);__cov_xlcucJyua6odXhLRctX6xg.s['22']++;host.insertContentAtFocusPoint(taggedContent);__cov_xlcucJyua6odXhLRctX6xg.s['23']++;this.markUpdated();},_getSelectionHTML:function(){__cov_xlcucJyua6odXhLRctX6xg.f['5']++;__cov_xlcucJyua6odXhLRctX6xg.s['24']++;var html='',selection,container,index,lenght;__cov_xlcucJyua6odXhLRctX6xg.s['25']++;if(typeof window.getSelection!=='undefined'){__cov_xlcucJyua6odXhLRctX6xg.b['4'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['26']++;selection=window.getSelection();__cov_xlcucJyua6odXhLRctX6xg.s['27']++;if(selection.rangeCount){__cov_xlcucJyua6odXhLRctX6xg.b['5'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['28']++;container=document.createElement('div');__cov_xlcucJyua6odXhLRctX6xg.s['29']++;for(index=0,lenght=selection.rangeCount;index-1;__cov_xlcucJyua6odXhLRctX6xg.s['38']++;isLangTag=nodeValue.match(/\{mlang/g).length===1;__cov_xlcucJyua6odXhLRctX6xg.s['39']++;if((__cov_xlcucJyua6odXhLRctX6xg.b['9'][0]++,isTextNode)&&(__cov_xlcucJyua6odXhLRctX6xg.b['9'][1]++,isLangTag)){__cov_xlcucJyua6odXhLRctX6xg.b['8'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['40']++;host.setSelection(host.getSelectionFromNode(Y.one(node)));}else{__cov_xlcucJyua6odXhLRctX6xg.b['8'][1]++;}},_setSubmitListener:function(){__cov_xlcucJyua6odXhLRctX6xg.f['7']++;__cov_xlcucJyua6odXhLRctX6xg.s['41']++;var submitbutton=Y.one('#id_submitbutton');__cov_xlcucJyua6odXhLRctX6xg.s['42']++;submitbutton.on('click',this._cleanTagsOnSubmit,this);},_cleanTagsOnSubmit:function(e){__cov_xlcucJyua6odXhLRctX6xg.f['8']++;__cov_xlcucJyua6odXhLRctX6xg.s['43']++;var submitbutton=Y.one('#id_submitbutton'),textarea,innerHTML,spanedmlangtags,spanedmlangtag,index,cleanmlangtag,regularExpression,openingspanwithyui,spanedmlangtagsdwithyui,mlangtag;__cov_xlcucJyua6odXhLRctX6xg.s['44']++;e.preventDefault();__cov_xlcucJyua6odXhLRctX6xg.s['45']++;textarea=Y.one('#id_messageeditable');__cov_xlcucJyua6odXhLRctX6xg.s['46']++;innerHTML=textarea.get('innerHTML');__cov_xlcucJyua6odXhLRctX6xg.s['47']++;regularExpression=new RegExp(OPENING_SPAN+'.*?'+'','g');__cov_xlcucJyua6odXhLRctX6xg.s['48']++;spanedmlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['49']++;openingspanwithyui=OPENING_SPAN.replace('','g');__cov_xlcucJyua6odXhLRctX6xg.s['51']++;spanedmlangtagsdwithyui=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['52']++;if(spanedmlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['10'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['53']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['57']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['58']++;textarea.set('innerHTML',innerHTML);__cov_xlcucJyua6odXhLRctX6xg.s['59']++;this.markUpdated();}else{__cov_xlcucJyua6odXhLRctX6xg.b['10'][1]++;}__cov_xlcucJyua6odXhLRctX6xg.s['60']++;if(spanedmlangtagsdwithyui!==null){__cov_xlcucJyua6odXhLRctX6xg.b['11'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['61']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['66']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['67']++;textarea.set('innerHTML',innerHTML);__cov_xlcucJyua6odXhLRctX6xg.s['68']++;this.markUpdated();}else{__cov_xlcucJyua6odXhLRctX6xg.b['11'][1]++;}__cov_xlcucJyua6odXhLRctX6xg.s['69']++;this.detach();__cov_xlcucJyua6odXhLRctX6xg.s['70']++;submitbutton.simulate('click');},_decorateTagsOnInit:function(){__cov_xlcucJyua6odXhLRctX6xg.f['9']++;__cov_xlcucJyua6odXhLRctX6xg.s['71']++;var textarea=Y.one('#id_messageeditable'),innerHTML,regularExpression,mlangtags,mlangtag,index,decoratedmlangtag;__cov_xlcucJyua6odXhLRctX6xg.s['72']++;innerHTML=this._getHTMLwithCleanedTags();__cov_xlcucJyua6odXhLRctX6xg.s['73']++;regularExpression=new RegExp('{mlang.*?}','g');__cov_xlcucJyua6odXhLRctX6xg.s['74']++;mlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['75']++;if(mlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['12'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['76']++;for(index=0;index';__cov_xlcucJyua6odXhLRctX6xg.s['79']++;innerHTML=innerHTML.replace(mlangtag,decoratedmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['80']++;textarea.set('innerHTML',innerHTML);}else{__cov_xlcucJyua6odXhLRctX6xg.b['12'][1]++;}},_getHTMLwithCleanedTags:function(){__cov_xlcucJyua6odXhLRctX6xg.f['10']++;__cov_xlcucJyua6odXhLRctX6xg.s['81']++;var textarea=Y.one('#id_messageeditable'),innerHTML=textarea.get('innerHTML'),regexString,regularExpression,spanedmlangtags,spanedmlangtag,cleanmlangtag,index;__cov_xlcucJyua6odXhLRctX6xg.s['82']++;regexString=OPENING_SPAN+'.*?'+'';__cov_xlcucJyua6odXhLRctX6xg.s['83']++;regularExpression=new RegExp(regexString,'g');__cov_xlcucJyua6odXhLRctX6xg.s['84']++;spanedmlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['85']++;if(spanedmlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['13'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['86']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['90']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}}else{__cov_xlcucJyua6odXhLRctX6xg.b['13'][1]++;}__cov_xlcucJyua6odXhLRctX6xg.s['91']++;return innerHTML;}},{ATTRS:{languages:DEFAULT_LANGUAGE,capability:true}});},'@VERSION@',{'requires':['moodle-editor_atto-plugin']}); +__cov_xlcucJyua6odXhLRctX6xg.s['1']++;YUI.add('moodle-atto_multilang2-button',function(Y,NAME){__cov_xlcucJyua6odXhLRctX6xg.f['1']++;__cov_xlcucJyua6odXhLRctX6xg.s['2']++;var CLASSES={TAG:'filter-multilang-tag'},LANG_WILDCARD='%lang',CONTENT_WILDCARD='%content',ATTR_LANGUAGES='languages',ATTR_CAPABILITY='capability',DEFAULT_LANGUAGE='{"en":"English (en)"}',OPENING_SPAN='',TEMPLATE=''+' '+OPENING_SPAN+'{mlang '+LANG_WILDCARD+'}'+CONTENT_WILDCARD+OPENING_SPAN+'{mlang} ';__cov_xlcucJyua6odXhLRctX6xg.s['3']++;Y.namespace('M.atto_multilang2').Button=Y.Base.create('button',Y.M.editor_atto.EditorPlugin,[],{initializer:function(){__cov_xlcucJyua6odXhLRctX6xg.f['2']++;__cov_xlcucJyua6odXhLRctX6xg.s['4']++;var hascapability=this.get(ATTR_CAPABILITY),toolbarItems=[];__cov_xlcucJyua6odXhLRctX6xg.s['5']++;if(hascapability){__cov_xlcucJyua6odXhLRctX6xg.b['1'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['6']++;this._decorateTagsOnInit();__cov_xlcucJyua6odXhLRctX6xg.s['7']++;toolbarItems=this._initializeToolbarItems();__cov_xlcucJyua6odXhLRctX6xg.s['8']++;this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:'icon',iconComponent:'atto_multilang2',items:toolbarItems});__cov_xlcucJyua6odXhLRctX6xg.s['9']++;this.get('host').on('atto:selectionchanged',this._checkSelectionChange,this);__cov_xlcucJyua6odXhLRctX6xg.s['10']++;this._setSubmitListener();}else{__cov_xlcucJyua6odXhLRctX6xg.b['1'][1]++;}},_initializeToolbarItems:function(){__cov_xlcucJyua6odXhLRctX6xg.f['3']++;__cov_xlcucJyua6odXhLRctX6xg.s['11']++;var toolbarItems=[],languages,langCode;__cov_xlcucJyua6odXhLRctX6xg.s['12']++;languages=JSON.parse(this.get(ATTR_LANGUAGES));__cov_xlcucJyua6odXhLRctX6xg.s['13']++;for(langCode in languages){__cov_xlcucJyua6odXhLRctX6xg.s['14']++;if(languages.hasOwnProperty(langCode)){__cov_xlcucJyua6odXhLRctX6xg.b['2'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['15']++;toolbarItems.push({text:languages[langCode],callbackArgs:langCode});}else{__cov_xlcucJyua6odXhLRctX6xg.b['2'][1]++;}}__cov_xlcucJyua6odXhLRctX6xg.s['16']++;return toolbarItems;},_addTags:function(e,langCode){__cov_xlcucJyua6odXhLRctX6xg.f['4']++;__cov_xlcucJyua6odXhLRctX6xg.s['17']++;var selection,host=this.get('host'),taggedContent=TEMPLATE,content;__cov_xlcucJyua6odXhLRctX6xg.s['18']++;selection=this._getSelectionHTML();__cov_xlcucJyua6odXhLRctX6xg.s['19']++;content=host.getSelection().toString().length===0?(__cov_xlcucJyua6odXhLRctX6xg.b['3'][0]++,' '):(__cov_xlcucJyua6odXhLRctX6xg.b['3'][1]++,selection);__cov_xlcucJyua6odXhLRctX6xg.s['20']++;taggedContent=taggedContent.replace(LANG_WILDCARD,langCode);__cov_xlcucJyua6odXhLRctX6xg.s['21']++;taggedContent=taggedContent.replace(CONTENT_WILDCARD,content);__cov_xlcucJyua6odXhLRctX6xg.s['22']++;host.insertContentAtFocusPoint(taggedContent);__cov_xlcucJyua6odXhLRctX6xg.s['23']++;this.markUpdated();},_getSelectionHTML:function(){__cov_xlcucJyua6odXhLRctX6xg.f['5']++;__cov_xlcucJyua6odXhLRctX6xg.s['24']++;var html='',selection,container,index,lenght;__cov_xlcucJyua6odXhLRctX6xg.s['25']++;if(typeof window.getSelection!=='undefined'){__cov_xlcucJyua6odXhLRctX6xg.b['4'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['26']++;selection=window.getSelection();__cov_xlcucJyua6odXhLRctX6xg.s['27']++;if(selection.rangeCount){__cov_xlcucJyua6odXhLRctX6xg.b['5'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['28']++;container=document.createElement('div');__cov_xlcucJyua6odXhLRctX6xg.s['29']++;for(index=0,lenght=selection.rangeCount;index-1;__cov_xlcucJyua6odXhLRctX6xg.s['38']++;isLangTag=nodeValue.match(/\{mlang/g).length===1;__cov_xlcucJyua6odXhLRctX6xg.s['39']++;if((__cov_xlcucJyua6odXhLRctX6xg.b['9'][0]++,isTextNode)&&(__cov_xlcucJyua6odXhLRctX6xg.b['9'][1]++,isLangTag)){__cov_xlcucJyua6odXhLRctX6xg.b['8'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['40']++;host.setSelection(host.getSelectionFromNode(Y.one(node)));}else{__cov_xlcucJyua6odXhLRctX6xg.b['8'][1]++;}},_setSubmitListener:function(){__cov_xlcucJyua6odXhLRctX6xg.f['7']++;__cov_xlcucJyua6odXhLRctX6xg.s['41']++;var submitbutton=Y.one('#id_submitbutton');__cov_xlcucJyua6odXhLRctX6xg.s['42']++;submitbutton.on('click',this._cleanTagsOnSubmit,this);},_cleanTagsOnSubmit:function(e){__cov_xlcucJyua6odXhLRctX6xg.f['8']++;__cov_xlcucJyua6odXhLRctX6xg.s['43']++;var submitbutton=Y.one('#id_submitbutton');__cov_xlcucJyua6odXhLRctX6xg.s['44']++;e.preventDefault();__cov_xlcucJyua6odXhLRctX6xg.s['45']++;this._cleanTagsWithNoYuiId();__cov_xlcucJyua6odXhLRctX6xg.s['46']++;this._cleanTagsWithYuiId();__cov_xlcucJyua6odXhLRctX6xg.s['47']++;this.detach();__cov_xlcucJyua6odXhLRctX6xg.s['48']++;submitbutton.simulate('click');},_cleanTagsWithNoYuiId:function(){__cov_xlcucJyua6odXhLRctX6xg.f['9']++;__cov_xlcucJyua6odXhLRctX6xg.s['49']++;var textarea,innerHTML,spanedmlangtags,spanedmlangtag,index,cleanmlangtag,regularExpression;__cov_xlcucJyua6odXhLRctX6xg.s['50']++;textarea=Y.one('#id_messageeditable');__cov_xlcucJyua6odXhLRctX6xg.s['51']++;innerHTML=textarea.get('innerHTML');__cov_xlcucJyua6odXhLRctX6xg.s['52']++;regularExpression=new RegExp(OPENING_SPAN+'.*?'+'','g');__cov_xlcucJyua6odXhLRctX6xg.s['53']++;spanedmlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['54']++;if(spanedmlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['10'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['55']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['59']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['60']++;textarea.set('innerHTML',innerHTML);__cov_xlcucJyua6odXhLRctX6xg.s['61']++;this.markUpdated();}else{__cov_xlcucJyua6odXhLRctX6xg.b['10'][1]++;}},_cleanTagsWithYuiId:function(){__cov_xlcucJyua6odXhLRctX6xg.f['10']++;__cov_xlcucJyua6odXhLRctX6xg.s['62']++;var textarea,innerHTML,spanedmlangtag,index,cleanmlangtag,regularExpression,openingspanwithyui,spanedmlangtagsdwithyui,mlangtag;__cov_xlcucJyua6odXhLRctX6xg.s['63']++;textarea=Y.one('#id_messageeditable');__cov_xlcucJyua6odXhLRctX6xg.s['64']++;innerHTML=textarea.get('innerHTML');__cov_xlcucJyua6odXhLRctX6xg.s['65']++;openingspanwithyui=OPENING_SPAN.replace('','g');__cov_xlcucJyua6odXhLRctX6xg.s['67']++;spanedmlangtagsdwithyui=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['68']++;if(spanedmlangtagsdwithyui!==null){__cov_xlcucJyua6odXhLRctX6xg.b['11'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['69']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['74']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['75']++;textarea.set('innerHTML',innerHTML);__cov_xlcucJyua6odXhLRctX6xg.s['76']++;this.markUpdated();}else{__cov_xlcucJyua6odXhLRctX6xg.b['11'][1]++;}},_decorateTagsOnInit:function(){__cov_xlcucJyua6odXhLRctX6xg.f['11']++;__cov_xlcucJyua6odXhLRctX6xg.s['77']++;var textarea=Y.one('#id_messageeditable'),innerHTML,regularExpression,mlangtags,mlangtag,index,decoratedmlangtag;__cov_xlcucJyua6odXhLRctX6xg.s['78']++;innerHTML=this._getHTMLwithCleanedTags();__cov_xlcucJyua6odXhLRctX6xg.s['79']++;regularExpression=new RegExp('{mlang.*?}','g');__cov_xlcucJyua6odXhLRctX6xg.s['80']++;mlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['81']++;if(mlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['12'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['82']++;for(index=0;index';__cov_xlcucJyua6odXhLRctX6xg.s['85']++;innerHTML=innerHTML.replace(mlangtag,decoratedmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['86']++;textarea.set('innerHTML',innerHTML);}else{__cov_xlcucJyua6odXhLRctX6xg.b['12'][1]++;}},_getHTMLwithCleanedTags:function(){__cov_xlcucJyua6odXhLRctX6xg.f['12']++;__cov_xlcucJyua6odXhLRctX6xg.s['87']++;var textarea=Y.one('#id_messageeditable'),innerHTML=textarea.get('innerHTML'),regexString,regularExpression,spanedmlangtags,spanedmlangtag,cleanmlangtag,index;__cov_xlcucJyua6odXhLRctX6xg.s['88']++;regexString=OPENING_SPAN+'.*?'+'';__cov_xlcucJyua6odXhLRctX6xg.s['89']++;regularExpression=new RegExp(regexString,'g');__cov_xlcucJyua6odXhLRctX6xg.s['90']++;spanedmlangtags=innerHTML.match(regularExpression);__cov_xlcucJyua6odXhLRctX6xg.s['91']++;if(spanedmlangtags!==null){__cov_xlcucJyua6odXhLRctX6xg.b['13'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['92']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['96']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}}else{__cov_xlcucJyua6odXhLRctX6xg.b['13'][1]++;}__cov_xlcucJyua6odXhLRctX6xg.s['97']++;return innerHTML;}},{ATTRS:{languages:DEFAULT_LANGUAGE,capability:true}});},'@VERSION@',{'requires':['moodle-editor_atto-plugin']}); diff --git a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-debug.js b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-debug.js index b4fddb95a8a1..1330cecdf4fc 100644 --- a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-debug.js +++ b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-debug.js @@ -197,29 +197,47 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }, /** - * Cleans the tags around the {mlang} tags when the form is submitted. - * Is necessary to prevent the default action first (the form submission) to - * start working. When finished, with "detach", the default submit listener - * is restored, so the form can be submitted. + * When submit button clicked, this function is invoked. It has to stop the submission, + * in order to process the textarea to clean the tags. + * Once the textarea is cleaned, detaches this submit listener, i.e., it sets as default, + * an then simulates the click, to submit the form. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. * * @method _cleanTagsOnSubmit * @param {EventFacade} e * @private */ _cleanTagsOnSubmit: function(e) { - var submitbutton = Y.one('#id_submitbutton'), - textarea, + var submitbutton = Y.one('#id_submitbutton'); + + e.preventDefault(); + + this._cleanTagsWithNoYuiId(); + this._cleanTagsWithYuiId(); + + this.detach(); + + submitbutton.simulate('click'); + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that do not have "id" attribute. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method _cleanTagsWithNoYuiId + * @private + */ + _cleanTagsWithNoYuiId: function() { + var textarea, innerHTML, spanedmlangtags, spanedmlangtag, index, cleanmlangtag, - regularExpression, - openingspanwithyui, - spanedmlangtagsdwithyui, - mlangtag; - - e.preventDefault(); + regularExpression; textarea = Y.one('#id_messageeditable'); innerHTML = textarea.get('innerHTML'); @@ -227,11 +245,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att regularExpression = new RegExp(OPENING_SPAN + '.*?' + '', 'g'); spanedmlangtags = innerHTML.match(regularExpression); - openingspanwithyui = OPENING_SPAN.replace('', 'g'); - - spanedmlangtagsdwithyui = innerHTML.match(regularExpression); - if (spanedmlangtags !== null) { for (index = 0; index < spanedmlangtags.length; index++) { spanedmlangtag = spanedmlangtags[index]; @@ -246,6 +259,35 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that have "id" attribute, generated by YUI, when the cursor is placed on the tags. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method anTagsWithYuiId + * @private + */ + _cleanTagsWithYuiId: function() { + var textarea, + innerHTML, + spanedmlangtag, + index, + cleanmlangtag, + regularExpression, + openingspanwithyui, + spanedmlangtagsdwithyui, + mlangtag; + + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + + openingspanwithyui = OPENING_SPAN.replace('', 'g'); + + spanedmlangtagsdwithyui = innerHTML.match(regularExpression); if (spanedmlangtagsdwithyui !== null) { for (index = 0; index < spanedmlangtagsdwithyui.length; index++) { @@ -263,10 +305,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } - - this.detach(); - - submitbutton.simulate('click'); }, /** diff --git a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-min.js b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-min.js index f7fdb7c72de6..29061ffc410b 100644 --- a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-min.js +++ b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_multilang2-button",function(e,t){var n={TAG:"filter-multilang-tag"},r="%lang",i="%content",s="languages",o="capability",u='{"en":"English (en)"}',a='',f=" "+a+"{mlang "+r+"}"+i+a+"{mlang} ";e.namespace("M.atto_multilang2").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{initializer:function(){var e=this.get(o),t=[];e&&(this._decorateTagsOnInit(),t=this._initializeToolbarItems(),this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:"icon",iconComponent:"atto_multilang2",items:t}),this.get("host").on("atto:selectionchanged",this._checkSelectionChange,this),this._setSubmitListener())},_initializeToolbarItems:function(){var e=[],t,n;t=JSON.parse(this.get(s));for(n in t)t.hasOwnProperty(n)&&e.push({text:t[n],callbackArgs:n});return e},_addTags:function(e,t){var n,s=this.get("host"),o=f,u;n=this._getSelectionHTML(),u=s.getSelection().toString().length===0?" ":n,o=o.replace(r,t),o=o.replace(i,u),s.insertContentAtFocusPoint(o),this.markUpdated()},_getSelectionHTML:function(){var e="",t,n,r,i;if(typeof window.getSelection!="undefined"){t=window.getSelection();if(t.rangeCount){n=document.createElement("div");for(r=0,i=t.rangeCount;r-1,s=r.match(/\{mlang/g).length===1,i&&s&&t.setSelection(t.getSelectionFromNode(e.one(n)))},_setSubmitListener:function(){var t=e.one("#id_submitbutton");t.on("click",this._cleanTagsOnSubmit,this)},_cleanTagsOnSubmit:function(t){var n=e.one("#id_submitbutton"),r,i,s,o,u,f,l,c,h,p;t.preventDefault(),r=e.one("#id_messageeditable"),i=r.get("innerHTML"),l=new RegExp(a+".*?"+"","g"),s=i.match(l),c=a.replace("","g"),h=i.match(l);if(s!==null){for(u=0;u",""),i=i.replace(o,f);r.set("innerHTML",i),this.markUpdated()}if(h!==null){for(u=0;u",""),i=i.replace(o,f);r.set("innerHTML",i),this.markUpdated()}this.detach(),n.simulate("click")},_decorateTagsOnInit:function(){var t=e.one("#id_messageeditable"),n,r,i,s,o,u;n=this._getHTMLwithCleanedTags(),r=new RegExp("{mlang.*?}","g"),i=n.match(r);if(i!==null){for(o=0;o",n=n.replace(s,u);t.set("innerHTML",n)}},_getHTMLwithCleanedTags:function(){var t=e.one("#id_messageeditable"),n=t.get("innerHTML"),r,i,s,o,u,f;r=a+".*?"+"",i=new RegExp(r,"g"),s=n.match(i);if(s!==null)for(f=0;f",""),n=n.replace(o,u);return n}},{ATTRS:{languages:u,capability:!0}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); +YUI.add("moodle-atto_multilang2-button",function(e,t){var n={TAG:"filter-multilang-tag"},r="%lang",i="%content",s="languages",o="capability",u='{"en":"English (en)"}',a='',f=" "+a+"{mlang "+r+"}"+i+a+"{mlang} ";e.namespace("M.atto_multilang2").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{initializer:function(){var e=this.get(o),t=[];e&&(this._decorateTagsOnInit(),t=this._initializeToolbarItems(),this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:"icon",iconComponent:"atto_multilang2",items:t}),this.get("host").on("atto:selectionchanged",this._checkSelectionChange,this),this._setSubmitListener())},_initializeToolbarItems:function(){var e=[],t,n;t=JSON.parse(this.get(s));for(n in t)t.hasOwnProperty(n)&&e.push({text:t[n],callbackArgs:n});return e},_addTags:function(e,t){var n,s=this.get("host"),o=f,u;n=this._getSelectionHTML(),u=s.getSelection().toString().length===0?" ":n,o=o.replace(r,t),o=o.replace(i,u),s.insertContentAtFocusPoint(o),this.markUpdated()},_getSelectionHTML:function(){var e="",t,n,r,i;if(typeof window.getSelection!="undefined"){t=window.getSelection();if(t.rangeCount){n=document.createElement("div");for(r=0,i=t.rangeCount;r-1,s=r.match(/\{mlang/g).length===1,i&&s&&t.setSelection(t.getSelectionFromNode(e.one(n)))},_setSubmitListener:function(){var t=e.one("#id_submitbutton");t.on("click",this._cleanTagsOnSubmit,this)},_cleanTagsOnSubmit:function(t){var n=e.one("#id_submitbutton");t.preventDefault(),this._cleanTagsWithNoYuiId(),this._cleanTagsWithYuiId(),this.detach(),n.simulate("click")},_cleanTagsWithNoYuiId:function(){var t,n,r,i,s,o,u;t=e.one("#id_messageeditable"),n=t.get("innerHTML"),u=new RegExp(a+".*?"+"","g"),r=n.match(u);if(r!==null){for(s=0;s",""),n=n.replace(i,o);t.set("innerHTML",n),this.markUpdated()}},_cleanTagsWithYuiId:function(){var t,n,r,i,s,o,u,f,l;t=e.one("#id_messageeditable"),n=t.get("innerHTML"),u=a.replace("","g"),f=n.match(o);if(f!==null){for(i=0;i",""),n=n.replace(r,s);t.set("innerHTML",n),this.markUpdated()}},_decorateTagsOnInit:function(){var t=e.one("#id_messageeditable"),n,r,i,s,o,u;n=this._getHTMLwithCleanedTags(),r=new RegExp("{mlang.*?}","g"),i=n.match(r);if(i!==null){for(o=0;o",n=n.replace(s,u);t.set("innerHTML",n)}},_getHTMLwithCleanedTags:function(){var t=e.one("#id_messageeditable"),n=t.get("innerHTML"),r,i,s,o,u,f;r=a+".*?"+"",i=new RegExp(r,"g"),s=n.match(i);if(s!==null)for(f=0;f",""),n=n.replace(o,u);return n}},{ATTRS:{languages:u,capability:!0}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); diff --git a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js index b4fddb95a8a1..1330cecdf4fc 100644 --- a/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js +++ b/yui/build/moodle-atto_multilang2-button/moodle-atto_multilang2-button.js @@ -197,29 +197,47 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }, /** - * Cleans the tags around the {mlang} tags when the form is submitted. - * Is necessary to prevent the default action first (the form submission) to - * start working. When finished, with "detach", the default submit listener - * is restored, so the form can be submitted. + * When submit button clicked, this function is invoked. It has to stop the submission, + * in order to process the textarea to clean the tags. + * Once the textarea is cleaned, detaches this submit listener, i.e., it sets as default, + * an then simulates the click, to submit the form. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. * * @method _cleanTagsOnSubmit * @param {EventFacade} e * @private */ _cleanTagsOnSubmit: function(e) { - var submitbutton = Y.one('#id_submitbutton'), - textarea, + var submitbutton = Y.one('#id_submitbutton'); + + e.preventDefault(); + + this._cleanTagsWithNoYuiId(); + this._cleanTagsWithYuiId(); + + this.detach(); + + submitbutton.simulate('click'); + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that do not have "id" attribute. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method _cleanTagsWithNoYuiId + * @private + */ + _cleanTagsWithNoYuiId: function() { + var textarea, innerHTML, spanedmlangtags, spanedmlangtag, index, cleanmlangtag, - regularExpression, - openingspanwithyui, - spanedmlangtagsdwithyui, - mlangtag; - - e.preventDefault(); + regularExpression; textarea = Y.one('#id_messageeditable'); innerHTML = textarea.get('innerHTML'); @@ -227,11 +245,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att regularExpression = new RegExp(OPENING_SPAN + '.*?' + '', 'g'); spanedmlangtags = innerHTML.match(regularExpression); - openingspanwithyui = OPENING_SPAN.replace('', 'g'); - - spanedmlangtagsdwithyui = innerHTML.match(regularExpression); - if (spanedmlangtags !== null) { for (index = 0; index < spanedmlangtags.length; index++) { spanedmlangtag = spanedmlangtags[index]; @@ -246,6 +259,35 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that have "id" attribute, generated by YUI, when the cursor is placed on the tags. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method anTagsWithYuiId + * @private + */ + _cleanTagsWithYuiId: function() { + var textarea, + innerHTML, + spanedmlangtag, + index, + cleanmlangtag, + regularExpression, + openingspanwithyui, + spanedmlangtagsdwithyui, + mlangtag; + + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + + openingspanwithyui = OPENING_SPAN.replace('', 'g'); + + spanedmlangtagsdwithyui = innerHTML.match(regularExpression); if (spanedmlangtagsdwithyui !== null) { for (index = 0; index < spanedmlangtagsdwithyui.length; index++) { @@ -263,10 +305,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } - - this.detach(); - - submitbutton.simulate('click'); }, /** diff --git a/yui/src/button/js/button.js b/yui/src/button/js/button.js index 9e2af810326a..287df38e0696 100644 --- a/yui/src/button/js/button.js +++ b/yui/src/button/js/button.js @@ -195,29 +195,47 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }, /** - * Cleans the tags around the {mlang} tags when the form is submitted. - * Is necessary to prevent the default action first (the form submission) to - * start working. When finished, with "detach", the default submit listener - * is restored, so the form can be submitted. + * When submit button clicked, this function is invoked. It has to stop the submission, + * in order to process the textarea to clean the tags. + * Once the textarea is cleaned, detaches this submit listener, i.e., it sets as default, + * an then simulates the click, to submit the form. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. * * @method _cleanTagsOnSubmit * @param {EventFacade} e * @private */ _cleanTagsOnSubmit: function(e) { - var submitbutton = Y.one('#id_submitbutton'), - textarea, + var submitbutton = Y.one('#id_submitbutton'); + + e.preventDefault(); + + this._cleanTagsWithNoYuiId(); + this._cleanTagsWithYuiId(); + + this.detach(); + + submitbutton.simulate('click'); + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that do not have "id" attribute. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method _cleanTagsWithNoYuiId + * @private + */ + _cleanTagsWithNoYuiId: function() { + var textarea, innerHTML, spanedmlangtags, spanedmlangtag, index, cleanmlangtag, - regularExpression, - openingspanwithyui, - spanedmlangtagsdwithyui, - mlangtag; - - e.preventDefault(); + regularExpression; textarea = Y.one('#id_messageeditable'); innerHTML = textarea.get('innerHTML'); @@ -225,11 +243,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att regularExpression = new RegExp(OPENING_SPAN + '.*?' + '', 'g'); spanedmlangtags = innerHTML.match(regularExpression); - openingspanwithyui = OPENING_SPAN.replace('', 'g'); - - spanedmlangtagsdwithyui = innerHTML.match(regularExpression); - if (spanedmlangtags !== null) { for (index = 0; index < spanedmlangtags.length; index++) { spanedmlangtag = spanedmlangtags[index]; @@ -244,6 +257,35 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } + }, + + /** + * Cleans the tags around the {mlang} tags when the form is submitted, + * that have "id" attribute, generated by YUI, when the cursor is placed on the tags. + * The cleanup with "id" attribute and without it is made separately, to avoid an evil + * regular expression. + * + * @method anTagsWithYuiId + * @private + */ + _cleanTagsWithYuiId: function() { + var textarea, + innerHTML, + spanedmlangtag, + index, + cleanmlangtag, + regularExpression, + openingspanwithyui, + spanedmlangtagsdwithyui, + mlangtag; + + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + + openingspanwithyui = OPENING_SPAN.replace('', 'g'); + + spanedmlangtagsdwithyui = innerHTML.match(regularExpression); if (spanedmlangtagsdwithyui !== null) { for (index = 0; index < spanedmlangtagsdwithyui.length; index++) { @@ -261,10 +303,6 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att this.markUpdated(); } - - this.detach(); - - submitbutton.simulate('click'); }, /**