// 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/>.

/*
 * @package    atto_superscript
 * @copyright  2014 Rosiana Wijaya <rwijaya@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

/**
 * @module     moodle-atto_superscript-button
 */

/**
 * Atto text editor superscript plugin.
 *
 * @namespace M.atto_superscript
 * @class button
 * @extends M.editor_atto.EditorPlugin
 */

Y.namespace('M.atto_superscript').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], {
    /**
     * A rangy object to alter CSS classes.
     *
     * @property _subscriptApplier
     * @type Object
     * @private
     */
    _subscriptApplier: null,

    /**
     * A rangy object to alter CSS classes.
     *
     * @property _superscriptApplier
     * @type Object
     * @private
     */
    _superscriptApplier: null,

    initializer: function() {
        this.addButton({
            buttonName: 'superscript',
            callback: this.toggleSuperscript,
            icon: 'e/superscript',
            inlineFormat: true,

            // Watch the following tags and add/remove highlighting as appropriate:
            tags: 'sup'
        });
        this._subscriptApplier = window.rangy.createCssClassApplier("editor-subscript");
        this._superscriptApplier = window.rangy.createCssClassApplier("editor-superscript");
    },

    /**
     * Toggle superscripts in selection
     *
     * @method toggleSuperscript
     */
    toggleSuperscript: function() {
        // Replace all the sub and sup tags.
        this.get('host').changeToCSS('sub', 'editor-subscript');
        this.get('host').changeToCSS('sup', 'editor-superscript');

        // Remove all subscripts inselection and toggle superscript.
        this._superscriptApplier.toggleSelection();
        this._subscriptApplier.undoToSelection();

        // Replace CSS classes with tags.
        this.get('host').changeToTags('editor-superscript', 'sup');
        this.get('host').changeToTags('editor-subscript', 'sub');
    }
});
