From 20f457e52c69aa37465003c059ceebd5028b65fe Mon Sep 17 00:00:00 2001 From: Julen Pardo Date: Sun, 10 Apr 2016 22:22:25 +0200 Subject: [PATCH] issue #8: create function to remove tags on form submit All the logic to remove the tags is coded inside the 'on' method closure, because seems that is not possible to define a class function that is accessible from closure scope. --- .../moodle-atto_multilang2-button-coverage.js | 4 +-- .../moodle-atto_multilang2-button-debug.js | 35 +++++++++++++++++++ .../moodle-atto_multilang2-button-min.js | 2 +- .../moodle-atto_multilang2-button.js | 35 +++++++++++++++++++ yui/src/button/js/button.js | 35 +++++++++++++++++++ 5 files changed, 108 insertions(+), 3 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 4bdd115420f7..502eebf216d0 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},"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]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":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":81,"loc":{"start":{"line":81,"column":29},"end":{"line":81,"column":40}}},"4":{"name":"(anonymous_4)","line":112,"loc":{"start":{"line":112,"column":14},"end":{"line":112,"column":36}}},"5":{"name":"(anonymous_5)","line":137,"loc":{"start":{"line":137,"column":23},"end":{"line":137,"column":34}}},"6":{"name":"(anonymous_6)","line":170,"loc":{"start":{"line":170,"column":27},"end":{"line":170,"column":38}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":200,"column":61}},"2":{"start":{"line":28,"column":0},"end":{"line":41,"column":65}},"3":{"start":{"line":51,"column":0},"end":{"line":197,"column":3}},"4":{"start":{"line":54,"column":8},"end":{"line":55,"column":30}},"5":{"start":{"line":57,"column":8},"end":{"line":70,"column":9}},"6":{"start":{"line":58,"column":12},"end":{"line":58,"column":58}},"7":{"start":{"line":60,"column":12},"end":{"line":67,"column":15}},"8":{"start":{"line":69,"column":12},"end":{"line":69,"column":91}},"9":{"start":{"line":82,"column":8},"end":{"line":84,"column":21}},"10":{"start":{"line":86,"column":8},"end":{"line":86,"column":57}},"11":{"start":{"line":88,"column":8},"end":{"line":95,"column":9}},"12":{"start":{"line":89,"column":12},"end":{"line":94,"column":13}},"13":{"start":{"line":90,"column":16},"end":{"line":93,"column":19}},"14":{"start":{"line":97,"column":8},"end":{"line":97,"column":28}},"15":{"start":{"line":113,"column":8},"end":{"line":116,"column":20}},"16":{"start":{"line":118,"column":8},"end":{"line":118,"column":45}},"17":{"start":{"line":119,"column":8},"end":{"line":119,"column":87}},"18":{"start":{"line":121,"column":8},"end":{"line":121,"column":71}},"19":{"start":{"line":122,"column":8},"end":{"line":122,"column":73}},"20":{"start":{"line":124,"column":8},"end":{"line":124,"column":54}},"21":{"start":{"line":126,"column":8},"end":{"line":126,"column":27}},"22":{"start":{"line":138,"column":8},"end":{"line":142,"column":19}},"23":{"start":{"line":144,"column":8},"end":{"line":159,"column":9}},"24":{"start":{"line":145,"column":12},"end":{"line":145,"column":46}},"25":{"start":{"line":147,"column":12},"end":{"line":153,"column":13}},"26":{"start":{"line":148,"column":16},"end":{"line":148,"column":58}},"27":{"start":{"line":149,"column":16},"end":{"line":151,"column":17}},"28":{"start":{"line":150,"column":20},"end":{"line":150,"column":87}},"29":{"start":{"line":152,"column":16},"end":{"line":152,"column":43}},"30":{"start":{"line":155,"column":15},"end":{"line":159,"column":9}},"31":{"start":{"line":156,"column":12},"end":{"line":158,"column":13}},"32":{"start":{"line":157,"column":16},"end":{"line":157,"column":65}},"33":{"start":{"line":161,"column":8},"end":{"line":161,"column":20}},"34":{"start":{"line":171,"column":8},"end":{"line":175,"column":22}},"35":{"start":{"line":177,"column":8},"end":{"line":177,"column":67}},"36":{"start":{"line":178,"column":8},"end":{"line":178,"column":63}},"37":{"start":{"line":180,"column":8},"end":{"line":182,"column":9}},"38":{"start":{"line":181,"column":12},"end":{"line":181,"column":70}}},"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":89,"type":"if","locations":[{"start":{"line":89,"column":12},"end":{"line":89,"column":12}},{"start":{"line":89,"column":12},"end":{"line":89,"column":12}}]},"3":{"line":119,"type":"cond-expr","locations":[{"start":{"line":119,"column":66},"end":{"line":119,"column":74}},{"start":{"line":119,"column":77},"end":{"line":119,"column":86}}]},"4":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":8},"end":{"line":144,"column":8}},{"start":{"line":144,"column":8},"end":{"line":144,"column":8}}]},"5":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":12},"end":{"line":147,"column":12}},{"start":{"line":147,"column":12},"end":{"line":147,"column":12}}]},"6":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":15},"end":{"line":155,"column":15}},{"start":{"line":155,"column":15},"end":{"line":155,"column":15}}]},"7":{"line":156,"type":"if","locations":[{"start":{"line":156,"column":12},"end":{"line":156,"column":12}},{"start":{"line":156,"column":12},"end":{"line":156,"column":12}}]},"8":{"line":180,"type":"if","locations":[{"start":{"line":180,"column":8},"end":{"line":180,"column":8}},{"start":{"line":180,"column":8},"end":{"line":180,"column":8}}]},"9":{"line":180,"type":"binary-expr","locations":[{"start":{"line":180,"column":12},"end":{"line":180,"column":22}},{"start":{"line":180,"column":26},"end":{"line":180,"column":35}}]}},"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)\"}',",""," TEMPLATE = '' +"," ' {mlang ' + LANG_WILDCARD + '}' +"," CONTENT_WILDCARD +"," '{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) {"," 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);"," }"," },",""," /**"," * 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)));"," }"," }","","}, {"," 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},"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]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":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":80,"loc":{"start":{"line":80,"column":24},"end":{"line":80,"column":35}}},"4":{"name":"(anonymous_4)","line":89,"loc":{"start":{"line":89,"column":33},"end":{"line":89,"column":44}}},"5":{"name":"(anonymous_5)","line":116,"loc":{"start":{"line":116,"column":29},"end":{"line":116,"column":40}}},"6":{"name":"(anonymous_6)","line":147,"loc":{"start":{"line":147,"column":14},"end":{"line":147,"column":36}}},"7":{"name":"(anonymous_7)","line":172,"loc":{"start":{"line":172,"column":23},"end":{"line":172,"column":34}}},"8":{"name":"(anonymous_8)","line":205,"loc":{"start":{"line":205,"column":27},"end":{"line":205,"column":38}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":235,"column":61}},"2":{"start":{"line":28,"column":0},"end":{"line":41,"column":65}},"3":{"start":{"line":51,"column":0},"end":{"line":232,"column":3}},"4":{"start":{"line":54,"column":8},"end":{"line":55,"column":30}},"5":{"start":{"line":57,"column":8},"end":{"line":71,"column":9}},"6":{"start":{"line":58,"column":12},"end":{"line":58,"column":58}},"7":{"start":{"line":60,"column":12},"end":{"line":67,"column":15}},"8":{"start":{"line":69,"column":12},"end":{"line":69,"column":91}},"9":{"start":{"line":70,"column":12},"end":{"line":70,"column":38}},"10":{"start":{"line":81,"column":8},"end":{"line":87,"column":26}},"11":{"start":{"line":89,"column":8},"end":{"line":105,"column":11}},"12":{"start":{"line":90,"column":12},"end":{"line":90,"column":52}},"13":{"start":{"line":91,"column":12},"end":{"line":91,"column":50}},"14":{"start":{"line":92,"column":12},"end":{"line":92,"column":31}},"15":{"start":{"line":93,"column":12},"end":{"line":93,"column":101}},"16":{"start":{"line":95,"column":12},"end":{"line":102,"column":13}},"17":{"start":{"line":96,"column":16},"end":{"line":96,"column":56}},"18":{"start":{"line":97,"column":16},"end":{"line":97,"column":98}},"19":{"start":{"line":99,"column":16},"end":{"line":99,"column":69}},"20":{"start":{"line":101,"column":16},"end":{"line":101,"column":77}},"21":{"start":{"line":104,"column":12},"end":{"line":104,"column":49}},"22":{"start":{"line":117,"column":8},"end":{"line":119,"column":21}},"23":{"start":{"line":121,"column":8},"end":{"line":121,"column":57}},"24":{"start":{"line":123,"column":8},"end":{"line":130,"column":9}},"25":{"start":{"line":124,"column":12},"end":{"line":129,"column":13}},"26":{"start":{"line":125,"column":16},"end":{"line":128,"column":19}},"27":{"start":{"line":132,"column":8},"end":{"line":132,"column":28}},"28":{"start":{"line":148,"column":8},"end":{"line":151,"column":20}},"29":{"start":{"line":153,"column":8},"end":{"line":153,"column":45}},"30":{"start":{"line":154,"column":8},"end":{"line":154,"column":87}},"31":{"start":{"line":156,"column":8},"end":{"line":156,"column":71}},"32":{"start":{"line":157,"column":8},"end":{"line":157,"column":73}},"33":{"start":{"line":159,"column":8},"end":{"line":159,"column":54}},"34":{"start":{"line":161,"column":8},"end":{"line":161,"column":27}},"35":{"start":{"line":173,"column":8},"end":{"line":177,"column":19}},"36":{"start":{"line":179,"column":8},"end":{"line":194,"column":9}},"37":{"start":{"line":180,"column":12},"end":{"line":180,"column":46}},"38":{"start":{"line":182,"column":12},"end":{"line":188,"column":13}},"39":{"start":{"line":183,"column":16},"end":{"line":183,"column":58}},"40":{"start":{"line":184,"column":16},"end":{"line":186,"column":17}},"41":{"start":{"line":185,"column":20},"end":{"line":185,"column":87}},"42":{"start":{"line":187,"column":16},"end":{"line":187,"column":43}},"43":{"start":{"line":190,"column":15},"end":{"line":194,"column":9}},"44":{"start":{"line":191,"column":12},"end":{"line":193,"column":13}},"45":{"start":{"line":192,"column":16},"end":{"line":192,"column":65}},"46":{"start":{"line":196,"column":8},"end":{"line":196,"column":20}},"47":{"start":{"line":206,"column":8},"end":{"line":210,"column":22}},"48":{"start":{"line":212,"column":8},"end":{"line":212,"column":67}},"49":{"start":{"line":213,"column":8},"end":{"line":213,"column":63}},"50":{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},"51":{"start":{"line":216,"column":12},"end":{"line":216,"column":70}}},"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":124,"type":"if","locations":[{"start":{"line":124,"column":12},"end":{"line":124,"column":12}},{"start":{"line":124,"column":12},"end":{"line":124,"column":12}}]},"3":{"line":154,"type":"cond-expr","locations":[{"start":{"line":154,"column":66},"end":{"line":154,"column":74}},{"start":{"line":154,"column":77},"end":{"line":154,"column":86}}]},"4":{"line":179,"type":"if","locations":[{"start":{"line":179,"column":8},"end":{"line":179,"column":8}},{"start":{"line":179,"column":8},"end":{"line":179,"column":8}}]},"5":{"line":182,"type":"if","locations":[{"start":{"line":182,"column":12},"end":{"line":182,"column":12}},{"start":{"line":182,"column":12},"end":{"line":182,"column":12}}]},"6":{"line":190,"type":"if","locations":[{"start":{"line":190,"column":15},"end":{"line":190,"column":15}},{"start":{"line":190,"column":15},"end":{"line":190,"column":15}}]},"7":{"line":191,"type":"if","locations":[{"start":{"line":191,"column":12},"end":{"line":191,"column":12}},{"start":{"line":191,"column":12},"end":{"line":191,"column":12}}]},"8":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":8},"end":{"line":215,"column":8}},{"start":{"line":215,"column":8},"end":{"line":215,"column":8}}]},"9":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":12},"end":{"line":215,"column":22}},{"start":{"line":215,"column":26},"end":{"line":215,"column":35}}]}},"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)\"}',",""," TEMPLATE = '' +"," ' {mlang ' + LANG_WILDCARD + '}' +"," CONTENT_WILDCARD +"," '{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) {"," 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._cleanTagsOnSubmit();"," }"," },",""," /**"," * Cleans the tags around the {mlang} tags when the form is submitted."," * All the logic to remove the tags is coded inside the 'on' method closure,"," * because seems that is not possible to define a class function that is"," * accessible from closure scope."," */"," _cleanTagsOnSubmit: function() {"," var submitbutton = Y.one('#id_submitbutton'),"," textarea,"," innerHTML,"," spanedmlangtags,"," spanedmlangtag,"," index,"," cleanmlangtag;",""," submitbutton.on('click', function(e){"," textarea = Y.one('#id_messageeditable');"," innerHTML = textarea.get('innerHTML');"," e.preventDefault();"," spanedmlangtags = innerHTML.match(/.*?<\\/span>/g);"," "," for (index = 0; index < spanedmlangtags.length; index++) {"," spanedmlangtag = spanedmlangtags[index];"," cleanmlangtag = spanedmlangtag.replace('', '');",""," cleanmlangtag = cleanmlangtag.replace('', '');",""," innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag);"," }",""," textarea.set('innerHTML', innerHTML);"," });"," },",""," /**"," * 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)));"," }"," }","","}, {"," 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)"}',TEMPLATE=''+' {mlang '+LANG_WILDCARD+'}'+CONTENT_WILDCARD+'{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']++;toolbarItems=this._initializeToolbarItems();__cov_xlcucJyua6odXhLRctX6xg.s['7']++;this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:'icon',iconComponent:'atto_multilang2',items:toolbarItems});__cov_xlcucJyua6odXhLRctX6xg.s['8']++;this.get('host').on('atto:selectionchanged',this._checkSelectionChange,this);}else{__cov_xlcucJyua6odXhLRctX6xg.b['1'][1]++;}},_initializeToolbarItems:function(){__cov_xlcucJyua6odXhLRctX6xg.f['3']++;__cov_xlcucJyua6odXhLRctX6xg.s['9']++;var toolbarItems=[],languages,langCode;__cov_xlcucJyua6odXhLRctX6xg.s['10']++;languages=JSON.parse(this.get(ATTR_LANGUAGES));__cov_xlcucJyua6odXhLRctX6xg.s['11']++;for(langCode in languages){__cov_xlcucJyua6odXhLRctX6xg.s['12']++;if(languages.hasOwnProperty(langCode)){__cov_xlcucJyua6odXhLRctX6xg.b['2'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['13']++;toolbarItems.push({text:languages[langCode],callbackArgs:langCode});}else{__cov_xlcucJyua6odXhLRctX6xg.b['2'][1]++;}}__cov_xlcucJyua6odXhLRctX6xg.s['14']++;return toolbarItems;},_addTags:function(e,langCode){__cov_xlcucJyua6odXhLRctX6xg.f['4']++;__cov_xlcucJyua6odXhLRctX6xg.s['15']++;var selection,host=this.get('host'),taggedContent=TEMPLATE,content;__cov_xlcucJyua6odXhLRctX6xg.s['16']++;selection=this._getSelectionHTML();__cov_xlcucJyua6odXhLRctX6xg.s['17']++;content=host.getSelection().toString().length===0?(__cov_xlcucJyua6odXhLRctX6xg.b['3'][0]++,' '):(__cov_xlcucJyua6odXhLRctX6xg.b['3'][1]++,selection);__cov_xlcucJyua6odXhLRctX6xg.s['18']++;taggedContent=taggedContent.replace(LANG_WILDCARD,langCode);__cov_xlcucJyua6odXhLRctX6xg.s['19']++;taggedContent=taggedContent.replace(CONTENT_WILDCARD,content);__cov_xlcucJyua6odXhLRctX6xg.s['20']++;host.insertContentAtFocusPoint(taggedContent);__cov_xlcucJyua6odXhLRctX6xg.s['21']++;this.markUpdated();},_getSelectionHTML:function(){__cov_xlcucJyua6odXhLRctX6xg.f['5']++;__cov_xlcucJyua6odXhLRctX6xg.s['22']++;var html='',selection,container,index,lenght;__cov_xlcucJyua6odXhLRctX6xg.s['23']++;if(typeof window.getSelection!=='undefined'){__cov_xlcucJyua6odXhLRctX6xg.b['4'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['24']++;selection=window.getSelection();__cov_xlcucJyua6odXhLRctX6xg.s['25']++;if(selection.rangeCount){__cov_xlcucJyua6odXhLRctX6xg.b['5'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['26']++;container=document.createElement('div');__cov_xlcucJyua6odXhLRctX6xg.s['27']++;for(index=0,lenght=selection.rangeCount;index-1;__cov_xlcucJyua6odXhLRctX6xg.s['36']++;isLangTag=nodeValue.match(/\{mlang/g).length===1;__cov_xlcucJyua6odXhLRctX6xg.s['37']++;if((__cov_xlcucJyua6odXhLRctX6xg.b['9'][0]++,isTextNode)&&(__cov_xlcucJyua6odXhLRctX6xg.b['9'][1]++,isLangTag)){__cov_xlcucJyua6odXhLRctX6xg.b['8'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['38']++;host.setSelection(host.getSelectionFromNode(Y.one(node)));}else{__cov_xlcucJyua6odXhLRctX6xg.b['8'][1]++;}}},{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)"}',TEMPLATE=''+' {mlang '+LANG_WILDCARD+'}'+CONTENT_WILDCARD+'{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']++;toolbarItems=this._initializeToolbarItems();__cov_xlcucJyua6odXhLRctX6xg.s['7']++;this.addToolbarMenu({globalItemConfig:{callback:this._addTags},icon:'icon',iconComponent:'atto_multilang2',items:toolbarItems});__cov_xlcucJyua6odXhLRctX6xg.s['8']++;this.get('host').on('atto:selectionchanged',this._checkSelectionChange,this);__cov_xlcucJyua6odXhLRctX6xg.s['9']++;this._cleanTagsOnSubmit();}else{__cov_xlcucJyua6odXhLRctX6xg.b['1'][1]++;}},_cleanTagsOnSubmit:function(){__cov_xlcucJyua6odXhLRctX6xg.f['3']++;__cov_xlcucJyua6odXhLRctX6xg.s['10']++;var submitbutton=Y.one('#id_submitbutton'),textarea,innerHTML,spanedmlangtags,spanedmlangtag,index,cleanmlangtag;__cov_xlcucJyua6odXhLRctX6xg.s['11']++;submitbutton.on('click',function(e){__cov_xlcucJyua6odXhLRctX6xg.f['4']++;__cov_xlcucJyua6odXhLRctX6xg.s['12']++;textarea=Y.one('#id_messageeditable');__cov_xlcucJyua6odXhLRctX6xg.s['13']++;innerHTML=textarea.get('innerHTML');__cov_xlcucJyua6odXhLRctX6xg.s['14']++;e.preventDefault();__cov_xlcucJyua6odXhLRctX6xg.s['15']++;spanedmlangtags=innerHTML.match(/.*?<\/span>/g);__cov_xlcucJyua6odXhLRctX6xg.s['16']++;for(index=0;index','');__cov_xlcucJyua6odXhLRctX6xg.s['19']++;cleanmlangtag=cleanmlangtag.replace('','');__cov_xlcucJyua6odXhLRctX6xg.s['20']++;innerHTML=innerHTML.replace(spanedmlangtag,cleanmlangtag);}__cov_xlcucJyua6odXhLRctX6xg.s['21']++;textarea.set('innerHTML',innerHTML);});},_initializeToolbarItems:function(){__cov_xlcucJyua6odXhLRctX6xg.f['5']++;__cov_xlcucJyua6odXhLRctX6xg.s['22']++;var toolbarItems=[],languages,langCode;__cov_xlcucJyua6odXhLRctX6xg.s['23']++;languages=JSON.parse(this.get(ATTR_LANGUAGES));__cov_xlcucJyua6odXhLRctX6xg.s['24']++;for(langCode in languages){__cov_xlcucJyua6odXhLRctX6xg.s['25']++;if(languages.hasOwnProperty(langCode)){__cov_xlcucJyua6odXhLRctX6xg.b['2'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['26']++;toolbarItems.push({text:languages[langCode],callbackArgs:langCode});}else{__cov_xlcucJyua6odXhLRctX6xg.b['2'][1]++;}}__cov_xlcucJyua6odXhLRctX6xg.s['27']++;return toolbarItems;},_addTags:function(e,langCode){__cov_xlcucJyua6odXhLRctX6xg.f['6']++;__cov_xlcucJyua6odXhLRctX6xg.s['28']++;var selection,host=this.get('host'),taggedContent=TEMPLATE,content;__cov_xlcucJyua6odXhLRctX6xg.s['29']++;selection=this._getSelectionHTML();__cov_xlcucJyua6odXhLRctX6xg.s['30']++;content=host.getSelection().toString().length===0?(__cov_xlcucJyua6odXhLRctX6xg.b['3'][0]++,' '):(__cov_xlcucJyua6odXhLRctX6xg.b['3'][1]++,selection);__cov_xlcucJyua6odXhLRctX6xg.s['31']++;taggedContent=taggedContent.replace(LANG_WILDCARD,langCode);__cov_xlcucJyua6odXhLRctX6xg.s['32']++;taggedContent=taggedContent.replace(CONTENT_WILDCARD,content);__cov_xlcucJyua6odXhLRctX6xg.s['33']++;host.insertContentAtFocusPoint(taggedContent);__cov_xlcucJyua6odXhLRctX6xg.s['34']++;this.markUpdated();},_getSelectionHTML:function(){__cov_xlcucJyua6odXhLRctX6xg.f['7']++;__cov_xlcucJyua6odXhLRctX6xg.s['35']++;var html='',selection,container,index,lenght;__cov_xlcucJyua6odXhLRctX6xg.s['36']++;if(typeof window.getSelection!=='undefined'){__cov_xlcucJyua6odXhLRctX6xg.b['4'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['37']++;selection=window.getSelection();__cov_xlcucJyua6odXhLRctX6xg.s['38']++;if(selection.rangeCount){__cov_xlcucJyua6odXhLRctX6xg.b['5'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['39']++;container=document.createElement('div');__cov_xlcucJyua6odXhLRctX6xg.s['40']++;for(index=0,lenght=selection.rangeCount;index-1;__cov_xlcucJyua6odXhLRctX6xg.s['49']++;isLangTag=nodeValue.match(/\{mlang/g).length===1;__cov_xlcucJyua6odXhLRctX6xg.s['50']++;if((__cov_xlcucJyua6odXhLRctX6xg.b['9'][0]++,isTextNode)&&(__cov_xlcucJyua6odXhLRctX6xg.b['9'][1]++,isLangTag)){__cov_xlcucJyua6odXhLRctX6xg.b['8'][0]++;__cov_xlcucJyua6odXhLRctX6xg.s['51']++;host.setSelection(host.getSelectionFromNode(Y.one(node)));}else{__cov_xlcucJyua6odXhLRctX6xg.b['8'][1]++;}}},{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 f7f8c5820c95..a00149d5adc2 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 @@ -67,9 +67,44 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }); this.get('host').on('atto:selectionchanged', this._checkSelectionChange, this); + this._cleanTagsOnSubmit(); } }, + /** + * Cleans the tags around the {mlang} tags when the form is submitted. + * All the logic to remove the tags is coded inside the 'on' method closure, + * because seems that is not possible to define a class function that is + * accessible from closure scope. + */ + _cleanTagsOnSubmit: function() { + var submitbutton = Y.one('#id_submitbutton'), + textarea, + innerHTML, + spanedmlangtags, + spanedmlangtag, + index, + cleanmlangtag; + + submitbutton.on('click', function(e){ + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + e.preventDefault(); + spanedmlangtags = innerHTML.match(/.*?<\/span>/g); + + for (index = 0; index < spanedmlangtags.length; index++) { + spanedmlangtag = spanedmlangtags[index]; + cleanmlangtag = spanedmlangtag.replace('', ''); + + cleanmlangtag = cleanmlangtag.replace('', ''); + + innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag); + } + + textarea.set('innerHTML', innerHTML); + }); + }, + /** * Initializes the toolbar items, which will be the installed languages, * received as parameter. 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 ffd0d7076f28..56eb0fa63c74 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=' {mlang '+r+"}"+i+'{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&&(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))},_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=a,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)))}},{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=' {mlang '+r+"}"+i+'{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&&(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._cleanTagsOnSubmit())},_cleanTagsOnSubmit:function(){var t=e.one("#id_submitbutton"),n,r,i,s,o,u;t.on("click",function(t){n=e.one("#id_messageeditable"),r=n.get("innerHTML"),t.preventDefault(),i=r.match(/.*?<\/span>/g);for(o=0;o',""),u=u.replace("",""),r=r.replace(s,u);n.set("innerHTML",r)})},_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=a,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)))}},{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 f7f8c5820c95..a00149d5adc2 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 @@ -67,9 +67,44 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }); this.get('host').on('atto:selectionchanged', this._checkSelectionChange, this); + this._cleanTagsOnSubmit(); } }, + /** + * Cleans the tags around the {mlang} tags when the form is submitted. + * All the logic to remove the tags is coded inside the 'on' method closure, + * because seems that is not possible to define a class function that is + * accessible from closure scope. + */ + _cleanTagsOnSubmit: function() { + var submitbutton = Y.one('#id_submitbutton'), + textarea, + innerHTML, + spanedmlangtags, + spanedmlangtag, + index, + cleanmlangtag; + + submitbutton.on('click', function(e){ + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + e.preventDefault(); + spanedmlangtags = innerHTML.match(/.*?<\/span>/g); + + for (index = 0; index < spanedmlangtags.length; index++) { + spanedmlangtag = spanedmlangtags[index]; + cleanmlangtag = spanedmlangtag.replace('', ''); + + cleanmlangtag = cleanmlangtag.replace('', ''); + + innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag); + } + + textarea.set('innerHTML', innerHTML); + }); + }, + /** * Initializes the toolbar items, which will be the installed languages, * received as parameter. diff --git a/yui/src/button/js/button.js b/yui/src/button/js/button.js index 43999ee08977..d0dbe6554c42 100644 --- a/yui/src/button/js/button.js +++ b/yui/src/button/js/button.js @@ -65,9 +65,44 @@ Y.namespace('M.atto_multilang2').Button = Y.Base.create('button', Y.M.editor_att }); this.get('host').on('atto:selectionchanged', this._checkSelectionChange, this); + this._cleanTagsOnSubmit(); } }, + /** + * Cleans the tags around the {mlang} tags when the form is submitted. + * All the logic to remove the tags is coded inside the 'on' method closure, + * because seems that is not possible to define a class function that is + * accessible from closure scope. + */ + _cleanTagsOnSubmit: function() { + var submitbutton = Y.one('#id_submitbutton'), + textarea, + innerHTML, + spanedmlangtags, + spanedmlangtag, + index, + cleanmlangtag; + + submitbutton.on('click', function(e){ + textarea = Y.one('#id_messageeditable'); + innerHTML = textarea.get('innerHTML'); + e.preventDefault(); + spanedmlangtags = innerHTML.match(/.*?<\/span>/g); + + for (index = 0; index < spanedmlangtags.length; index++) { + spanedmlangtag = spanedmlangtags[index]; + cleanmlangtag = spanedmlangtag.replace('', ''); + + cleanmlangtag = cleanmlangtag.replace('', ''); + + innerHTML = innerHTML.replace(spanedmlangtag, cleanmlangtag); + } + + textarea.set('innerHTML', innerHTML); + }); + }, + /** * Initializes the toolbar items, which will be the installed languages, * received as parameter.