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