e1817070b1550a26ca52d494d0f8c6b8a55b648b
[moodle.git] / lib / editor / tinymce / plugins / wrap / tinymce / editor_plugin.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  * Plugin for Moodle 'wrap' button.
18  *
19  * @package   tinymce_wrap
20  * @copyright 2013 Damyon Wiese
21  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
22  */
23 (function() {
24     tinymce.create('tinymce.ui.Wrap:tinymce.ui.Control', {
25         /**
26          * Constructor for the tinymce.Wrap class.
27          */
28         Wrap : function(id, s) {
29             this.parent(id, s);
30             this.groupEndClass = 'mceGroupEnd';
31             this.toolbarEndClass = 'mceLast';
32             this.groupEndPlaceholder = 'mceToolbarEndPlaceholder';
33             this.groupStartClass = 'mceGroupStart';
34             this.wrapClass = 'mceWrap';
35             this.setDisabled(true);
36         },
38         /**
39          * Returns the HTML for this control. This control actually ends the current td
40          * container and opens a new one so that the containers can be styled with CSS
41          * to wrap at certain screen widths.
42          * @return string HTML
43          */
44         renderHTML : function() {
45             var separator = tinymce.DOM.createHTML('span', {role : 'separator',
46                                                             'aria-orientation' : 'vertical',
47                                                             tabindex : '-1'});
48             return '</td>' +
49                    '<td style="position: relative" class="' + this.groupEndPlaceholder + '">' + separator + '</td>' +
50                    '<td style="position: relative" class="' + this.groupStartClass + ' ' + this.wrapClass + '">' + separator + '</td>';
51         },
53         postRender : function() {
54             var self = this;
55             // Add a class to the item prior to the wrap.
56             YUI().use('node', function(Y) {
57                 var endGroupElements = tinymce.DOM.select('td.' + self.groupEndPlaceholder),
58                     index = 0, curElement, endOfLast;
59                     endBarElements = tinymce.DOM.select('td.' + self.toolbarEndClass)
60                 for (index = 0; index < endGroupElements.length; index++) {
61                     if (!endGroupElements.hasOwnProperty(index)) {
62                           continue;
63                     }
64                     curElement = Y.one(endGroupElements[index]);
65                     endOfLast = curElement.previous('td').previous('td');
66                     if (endOfLast) {
67                         endOfLast.addClass(self.groupEndClass);
68                     }
69                 }
70                 for (index = 0; index < endBarElements.length; index++) {
71                     if (!endBarElements.hasOwnProperty(index)) {
72                         continue;
73                     }
74                     curElement = Y.one(endBarElements[index]);
75                     endOfLast = curElement.previous('td');
76                     if (endOfLast) {
77                         endOfLast.addClass(self.groupEndClass);
78                     }
79                 }
80             });
81         }
82     });
84     tinymce.create('tinymce.plugins.wrapPlugin', {
85         /**
86          * Returns a new instance of this control, in this case a custom Wrap class.
87          *
88          * @param string name - The name of the control to create. Return false if we can't create this control type.
89          * @param tinymce.ControlManager cc - Tinymce control manager class.
90          * @return mixed - false or the new control
91          */
92         createControl : function(name, cc) {
93             if (name === "wrap") {
94                 return new tinymce.ui.Wrap();
95             }
96             return false;
97         },
99         /**
100          * Returns information about the plugin as a name/value array.
101          * The current keys are longname, author, authorurl, infourl and version.
102          *
103          * @return {Object} Name/value array containing information about the plugin.
104          */
105         getInfo : function() {
106             return {
107                 longname : 'wrap plugin',
108                 author : 'Damyon Wiese',
109                 authorurl : 'http://moodle.com/hq',
110                 infourl : 'http://docs.moodle.org/en/TinyMCE',
111                 version : "1.0"
112             };
113         }
114     });
116     // Register plugin.
117     tinymce.PluginManager.add('wrap', tinymce.plugins.wrapPlugin);
118 })();