%PDF- %PDF-
Direktori : /home/vacivi36/ava/lib/editor/atto/yui/src/editor/js/ |
Current File : /home/vacivi36/ava/lib/editor/atto/yui/src/editor/js/editor-plugin.js |
// 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 <http://www.gnu.org/licenses/>. /** * Atto editor plugin. * * @module moodle-editor_atto-plugin * @submodule plugin-base * @package editor_atto * @copyright 2014 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ /** * A Plugin for the Atto Editor used in Moodle. * * This class should not be directly instantiated, and all Editor plugins * should extend this class. * * @namespace M.editor_atto * @class EditorPlugin * @main * @constructor * @uses M.editor_atto.EditorPluginButtons * @uses M.editor_atto.EditorPluginDialogue */ function EditorPlugin() { EditorPlugin.superclass.constructor.apply(this, arguments); } var GROUPSELECTOR = '.atto_group.', GROUP = '_group'; Y.extend(EditorPlugin, Y.Base, { /** * The name of the current plugin. * * @property name * @type string */ name: null, /** * A Node reference to the editor. * * @property editor * @type Node */ editor: null, /** * A Node reference to the editor toolbar. * * @property toolbar * @type Node */ toolbar: null, initializer: function(config) { // Set the references to configuration parameters. this.name = config.name; this.toolbar = config.toolbar; this.editor = config.editor; // Set up the prototypal properties. // These must be set up here becuase prototypal arrays and objects are copied across instances. this.buttons = {}; this.buttonNames = []; this.buttonStates = {}; this.menus = {}; this._primaryKeyboardShortcut = []; this._buttonHandlers = []; this._menuHideHandlers = []; this._highlightQueue = {}; }, /** * Mark the content ediable content as having been changed. * * This is a convenience function and passes through to * {{#crossLink "M.editor_atto.EditorTextArea/updateOriginal"}}updateOriginal{{/crossLink}}. * * @method markUpdated */ markUpdated: function() { // Save selection after changes to the DOM. If you don't do this here, // subsequent calls to restoreSelection() will fail expecting the // previous DOM state. this.get('host').saveSelection(); return this.get('host').updateOriginal(); } }, { NAME: 'editorPlugin', ATTRS: { /** * The editor instance that this plugin was instantiated by. * * @attribute host * @type M.editor_atto.Editor * @writeOnce */ host: { writeOnce: true }, /** * The toolbar group that this button belongs to. * * When setting, the name of the group should be specified. * * When retrieving, the Node for the toolbar group is returned. If * the group doesn't exist yet, then it is created first. * * @attribute group * @type Node * @writeOnce */ group: { writeOnce: true, getter: function(groupName) { var group = this.toolbar.one(GROUPSELECTOR + groupName + GROUP); if (!group) { group = Y.Node.create('<div class="atto_group ' + groupName + GROUP + '"></div>'); this.toolbar.append(group); } return group; } } } }); Y.namespace('M.editor_atto').EditorPlugin = EditorPlugin;