c3740bfe3b812c2ab4fa17d863b789737e94ac30
[moodle.git] / lib / editor / atto / plugins / collapse / yui / build / moodle-atto_collapse-button / moodle-atto_collapse-button-debug.js
1 YUI.add('moodle-atto_collapse-button', function (Y, NAME) {
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /*
19  * @package    atto_collapse
20  * @copyright  2013 Damyon Wiese  <damyon@moodle.com>
21  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
22  */
24 /**
25  * @module moodle-atto_collapse-button
26  */
28 /**
29  * Atto text editor collapse plugin.
30  *
31  * @namespace M.atto_collapse
32  * @class button
33  * @extends M.editor_atto.EditorPlugin
34  */
36 var PLUGINNAME = 'atto_collapse',
37     ATTRSHOWGROUPS = 'showgroups',
38     COLLAPSE = 'collapse',
39     COLLAPSED = 'collapsed',
40     GROUPS = '.atto_group';
42 Y.namespace('M.atto_collapse').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], {
43     initializer: function() {
44         var toolbarGroupCount = Y.Object.size(this.get('host').get('plugins'));
45         if (toolbarGroupCount <= 1 + parseInt(this.get(ATTRSHOWGROUPS), 10)) {
46             Y.log("There are not enough groups to require toggling - not adding the button",
47                 'debug','moodle-atto_collapse');
48             return;
49         }
51         if (this.toolbar.all(GROUPS).size() > this.get(ATTRSHOWGROUPS)) {
52             Y.log("The collapse plugin is shown after it's cut-off - not adding the button",
53                 'debug','moodle-atto_collapse');
54             return;
55         }
57         var button = this.addButton({
58             icon: M.util.image_url('icon', PLUGINNAME),
59             callback: this._toggle
60         });
62         // Perform a toggle after all plugins have been loaded for the first time.
63         this.get('host').on('pluginsloaded', function(e, button) {
64             this._setVisibility(button);
66             // Set the toolbar to break after the initial those displayed by default.
67             var firstGroup = this.toolbar.all(GROUPS).item(this.get(ATTRSHOWGROUPS));
68             firstGroup.insert('<div class="toolbarbreak"></div>', 'before');
69         }, this, button);
70     },
72     /**
73      * Toggle the visibility of the extra groups in the toolbar.
74      *
75      * @method _toggle
76      * @param {EventFacade} e
77      * @private
78      */
79     _toggle: function(e) {
80         e.preventDefault();
81         var button = this.buttons[COLLAPSE];
83         if (button.getData(COLLAPSED)) {
84             this.highlightButtons(COLLAPSE);
85             this._setVisibility(button, true);
86         } else {
87             this.unHighlightButtons(COLLAPSE);
88             this._setVisibility(button);
89         }
91         this.buttons[this.name].focus();
92     },
94     /**
95      * Set the visibility of the toolbar groups.
96      *
97      * @method _setVisibility
98      * @param {Node} button The collapse button
99      * @param {Booelan} visibility Whether the groups should be made visible
100      * @private
101      */
102     _setVisibility: function(button, visibility) {
103         var groups = this.toolbar.all(GROUPS).slice(this.get(ATTRSHOWGROUPS));
105         if (visibility) {
106             button.set('title', M.util.get_string('showfewer', PLUGINNAME));
107             groups.show();
108             button.setData(COLLAPSED, false);
109         } else {
110             button.set('title', M.util.get_string('showmore', PLUGINNAME));
111             groups.hide();
112             button.setData(COLLAPSED, true);
113         }
115     }
116 }, {
117     ATTRS: {
118         /**
119          * How many groups to show when collapsed.
120          *
121          * @attribute showgroups
122          * @type Number
123          * @default 3
124          */
125         showgroups: {
126             value: 3
127         }
128     }
129 });
132 }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]});