mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
Merge branch 'MDL-38404-m' of https://github.com/andrewnicols/moodle
This commit is contained in:
commit
59549129b1
File diff suppressed because one or more lines are too long
168
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse-debug.js
vendored
Normal file
168
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse-debug.js
vendored
Normal file
@ -0,0 +1,168 @@
|
||||
YUI.add('moodle-editor_tinymce-collapse', function (Y, NAME) {
|
||||
|
||||
var COLLAPSE = function() {
|
||||
COLLAPSE.superclass.constructor.apply(this, arguments);
|
||||
};
|
||||
|
||||
Y.extend(COLLAPSE, Y.Base, {
|
||||
// A location to store the node toggling template so that we do not have to create it each time.
|
||||
toggleNodeTemplate : null,
|
||||
|
||||
/**
|
||||
* Set up basic values for static access.
|
||||
*/
|
||||
init : function() {
|
||||
this.initialise_toggles(10);
|
||||
},
|
||||
|
||||
/**
|
||||
* Has TinyMCE been loaded and the editors been initialised?
|
||||
* Designed mainly for IE
|
||||
* @return bool
|
||||
*/
|
||||
editors_initialised : function() {
|
||||
return typeof tinyMCE !== 'undefined';
|
||||
},
|
||||
|
||||
initialise_toggles : function(refreshes) {
|
||||
var editors_initialised = this.editors_initialised(), self = this, editor;
|
||||
if (!editors_initialised && refreshes) {
|
||||
setTimeout(function() {
|
||||
self.initialise_toggles(refreshes - 1);
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the toggle template for use later
|
||||
this.toggleNodeTemplate = Y.Node.create('<a class="toggle_editor_toolbar" />');
|
||||
this.toggleNodeTemplate.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
|
||||
// Delegate clicks of the toggle_editor_toolbar
|
||||
Y.one('body').delegate('click', this.toggle_collapse_from_event, 'a.toggle_editor_toolbar', this);
|
||||
|
||||
// Set up editors which have already been created
|
||||
for (editor in tinyMCE.editors) {
|
||||
this.setup_collapse(tinyMCE.editors[editor]);
|
||||
}
|
||||
|
||||
// Set up for future editors.
|
||||
// I haven't yet found a way of directly delegating the editor.onInit event. Instead we have to listen for the
|
||||
// tinyMCE.onAddEditor event, and then add a further event listener to the editor's onInit event.
|
||||
// onAddEditor is triggered before the editor has been created.
|
||||
// We use Y.Bind to ensure that context is maintained.
|
||||
tinyMCE.onAddEditor.add(Y.bind(this.add_setup_collapse_listener, this));
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup a listener for a new editor which will actually set the editor up
|
||||
* @param {Manager} mgr
|
||||
* @param {Editor} ed
|
||||
*/
|
||||
add_setup_collapse_listener : function (mgr, ed) {
|
||||
// Bind the editor.onInit function to set this editor up. This ensures we maintain our context (this)
|
||||
ed.onInit.add(Y.bind(this.setup_collapse, this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup the toggle system for the provided editor
|
||||
*
|
||||
* @param {Editor} ed The TinyMCE editor instance
|
||||
*/
|
||||
setup_collapse : function(ed) {
|
||||
var textarea = Y.Node(ed.getElement()),
|
||||
editortable = Y.Node(ed.getContainer()).one('> table'),
|
||||
thisToggleNode;
|
||||
|
||||
// Does this text area support collapsing at all?
|
||||
if (!textarea.hasClass('collapsible')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Did we find an appropriate table to work with
|
||||
if (!editortable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add toggle button.
|
||||
thisToggleNode = this.toggleNodeTemplate.cloneNode(true);
|
||||
editortable.get('parentNode').insert(thisToggleNode, editortable);
|
||||
|
||||
// Toggle the toolbars initially.
|
||||
if (Y.Node(ed.getElement()).hasClass('collapsed')) {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 0);
|
||||
} else {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 1);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle the specified editor toolbars.
|
||||
*
|
||||
* @param {Node} button The toggle button which we have to change the text for
|
||||
* @param {Node} editortable The table which the tinyMCE editor is in
|
||||
* @param {Boolean} newstate The intended toggle state
|
||||
*/
|
||||
toggle_collapse : function(button, editortable, newstate) {
|
||||
var toolbar = editortable.one('td.mceToolbar').ancestor('tr'),
|
||||
statusbar = editortable.one('.mceStatusbar').ancestor('tr'),
|
||||
editor, iframe, size;
|
||||
|
||||
// Check whether we have a state already.
|
||||
if (typeof newstate === 'undefined') {
|
||||
if (toolbar.getStyle('display') === 'none') {
|
||||
newstate = 1;
|
||||
} else {
|
||||
newstate = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle the various states and update the button text to suit
|
||||
if (newstate === 0) {
|
||||
toolbar.hide();
|
||||
statusbar.hide();
|
||||
button.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
} else {
|
||||
toolbar.show();
|
||||
statusbar.show();
|
||||
button.setContent(M.util.get_string('hideeditortoolbar', 'form'));
|
||||
}
|
||||
|
||||
// TinyMCE renders the toolbar and path bar as part of the textarea. So toggling these items
|
||||
// changes the required size of the rendered textarea. Frustrating but it's the way it's built.
|
||||
// So we get TinyMCE to resize itself for us. Clunky but it works.
|
||||
|
||||
// Get the tinyMCE editor object for this text area.
|
||||
editorid = editortable.ancestor('div').one('textarea').get('id');
|
||||
editor = tinyMCE.getInstanceById(editorid);
|
||||
|
||||
// Somehow, this editor did not exist.
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Resize editor to reflect presence of toolbar and path bar..
|
||||
iframe = editor.getBody();
|
||||
if (iframe) {
|
||||
size = tinymce.DOM.getSize(iframe);
|
||||
// If objects exist resize editor.
|
||||
if (size) {
|
||||
editor.theme.resizeTo(size.w, size.h);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
toggle_collapse_from_event : function(thisevent) {
|
||||
var button = thisevent.target.ancestor('a', true),
|
||||
editortable = thisevent.target.ancestor('span', true).one('table.mceLayout');
|
||||
this.toggle_collapse(button, editortable);
|
||||
}
|
||||
});
|
||||
|
||||
M.editor_collapse = M.editor_collapse || {};
|
||||
M.editor_collapse.init = function(params) {
|
||||
return new COLLAPSE(params);
|
||||
};
|
||||
|
||||
|
||||
}, '@VERSION@', {"requires": ["base", "node", "dom"]});
|
@ -0,0 +1 @@
|
||||
YUI.add("moodle-editor_tinymce-collapse",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{toggleNodeTemplate:null,init:function(){this.initialise_toggles(10)},editors_initialised:function(){return typeof tinyMCE!="undefined"},initialise_toggles:function(t){var n=this.editors_initialised(),r=this,i;if(!n&&t){setTimeout(function(){r.initialise_toggles(t-1)},100);return}this.toggleNodeTemplate=e.Node.create('<a class="toggle_editor_toolbar" />'),this.toggleNodeTemplate.setContent(M.util.get_string("showeditortoolbar","form")),e.one("body").delegate("click",this.toggle_collapse_from_event,"a.toggle_editor_toolbar",this);for(i in tinyMCE.editors)this.setup_collapse(tinyMCE.editors[i]);tinyMCE.onAddEditor.add(e.bind(this.add_setup_collapse_listener,this))},add_setup_collapse_listener:function(t,n){n.onInit.add(e.bind(this.setup_collapse,this))},setup_collapse:function(t){var n=e.Node(t.getElement()),r=e.Node(t.getContainer()).one("> table"),i;if(!n.hasClass("collapsible"))return;if(!r)return;i=this.toggleNodeTemplate.cloneNode(!0),r.get("parentNode").insert(i,r),e.Node(t.getElement()).hasClass("collapsed")?this.toggle_collapse(i,r,0):this.toggle_collapse(i,r,1)},toggle_collapse:function(e,t,n){var r=t.one("td.mceToolbar").ancestor("tr"),i=t.one(".mceStatusbar").ancestor("tr"),s,o,u;typeof n=="undefined"&&(r.getStyle("display")==="none"?n=1:n=0),n===0?(r.hide(),i.hide(),e.setContent(M.util.get_string("showeditortoolbar","form"))):(r.show(),i.show(),e.setContent(M.util.get_string("hideeditortoolbar","form"))),editorid=t.ancestor("div").one("textarea").get("id"),s=tinyMCE.getInstanceById(editorid);if(!s)return;o=s.getBody(),o&&(u=tinymce.DOM.getSize(o),u&&s.theme.resizeTo(u.w,u.h))},toggle_collapse_from_event:function(e){var t=e.target.ancestor("a",!0),n=e.target.ancestor("span",!0).one("table.mceLayout");this.toggle_collapse(t,n)}}),M.editor_collapse=M.editor_collapse||{},M.editor_collapse.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","dom"]});
|
168
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse.js
vendored
Normal file
168
lib/editor/tinymce/yui/build/moodle-editor_tinymce-collapse/moodle-editor_tinymce-collapse.js
vendored
Normal file
@ -0,0 +1,168 @@
|
||||
YUI.add('moodle-editor_tinymce-collapse', function (Y, NAME) {
|
||||
|
||||
var COLLAPSE = function() {
|
||||
COLLAPSE.superclass.constructor.apply(this, arguments);
|
||||
};
|
||||
|
||||
Y.extend(COLLAPSE, Y.Base, {
|
||||
// A location to store the node toggling template so that we do not have to create it each time.
|
||||
toggleNodeTemplate : null,
|
||||
|
||||
/**
|
||||
* Set up basic values for static access.
|
||||
*/
|
||||
init : function() {
|
||||
this.initialise_toggles(10);
|
||||
},
|
||||
|
||||
/**
|
||||
* Has TinyMCE been loaded and the editors been initialised?
|
||||
* Designed mainly for IE
|
||||
* @return bool
|
||||
*/
|
||||
editors_initialised : function() {
|
||||
return typeof tinyMCE !== 'undefined';
|
||||
},
|
||||
|
||||
initialise_toggles : function(refreshes) {
|
||||
var editors_initialised = this.editors_initialised(), self = this, editor;
|
||||
if (!editors_initialised && refreshes) {
|
||||
setTimeout(function() {
|
||||
self.initialise_toggles(refreshes - 1);
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the toggle template for use later
|
||||
this.toggleNodeTemplate = Y.Node.create('<a class="toggle_editor_toolbar" />');
|
||||
this.toggleNodeTemplate.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
|
||||
// Delegate clicks of the toggle_editor_toolbar
|
||||
Y.one('body').delegate('click', this.toggle_collapse_from_event, 'a.toggle_editor_toolbar', this);
|
||||
|
||||
// Set up editors which have already been created
|
||||
for (editor in tinyMCE.editors) {
|
||||
this.setup_collapse(tinyMCE.editors[editor]);
|
||||
}
|
||||
|
||||
// Set up for future editors.
|
||||
// I haven't yet found a way of directly delegating the editor.onInit event. Instead we have to listen for the
|
||||
// tinyMCE.onAddEditor event, and then add a further event listener to the editor's onInit event.
|
||||
// onAddEditor is triggered before the editor has been created.
|
||||
// We use Y.Bind to ensure that context is maintained.
|
||||
tinyMCE.onAddEditor.add(Y.bind(this.add_setup_collapse_listener, this));
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup a listener for a new editor which will actually set the editor up
|
||||
* @param {Manager} mgr
|
||||
* @param {Editor} ed
|
||||
*/
|
||||
add_setup_collapse_listener : function (mgr, ed) {
|
||||
// Bind the editor.onInit function to set this editor up. This ensures we maintain our context (this)
|
||||
ed.onInit.add(Y.bind(this.setup_collapse, this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup the toggle system for the provided editor
|
||||
*
|
||||
* @param {Editor} ed The TinyMCE editor instance
|
||||
*/
|
||||
setup_collapse : function(ed) {
|
||||
var textarea = Y.Node(ed.getElement()),
|
||||
editortable = Y.Node(ed.getContainer()).one('> table'),
|
||||
thisToggleNode;
|
||||
|
||||
// Does this text area support collapsing at all?
|
||||
if (!textarea.hasClass('collapsible')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Did we find an appropriate table to work with
|
||||
if (!editortable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add toggle button.
|
||||
thisToggleNode = this.toggleNodeTemplate.cloneNode(true);
|
||||
editortable.get('parentNode').insert(thisToggleNode, editortable);
|
||||
|
||||
// Toggle the toolbars initially.
|
||||
if (Y.Node(ed.getElement()).hasClass('collapsed')) {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 0);
|
||||
} else {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 1);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle the specified editor toolbars.
|
||||
*
|
||||
* @param {Node} button The toggle button which we have to change the text for
|
||||
* @param {Node} editortable The table which the tinyMCE editor is in
|
||||
* @param {Boolean} newstate The intended toggle state
|
||||
*/
|
||||
toggle_collapse : function(button, editortable, newstate) {
|
||||
var toolbar = editortable.one('td.mceToolbar').ancestor('tr'),
|
||||
statusbar = editortable.one('.mceStatusbar').ancestor('tr'),
|
||||
editor, iframe, size;
|
||||
|
||||
// Check whether we have a state already.
|
||||
if (typeof newstate === 'undefined') {
|
||||
if (toolbar.getStyle('display') === 'none') {
|
||||
newstate = 1;
|
||||
} else {
|
||||
newstate = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle the various states and update the button text to suit
|
||||
if (newstate === 0) {
|
||||
toolbar.hide();
|
||||
statusbar.hide();
|
||||
button.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
} else {
|
||||
toolbar.show();
|
||||
statusbar.show();
|
||||
button.setContent(M.util.get_string('hideeditortoolbar', 'form'));
|
||||
}
|
||||
|
||||
// TinyMCE renders the toolbar and path bar as part of the textarea. So toggling these items
|
||||
// changes the required size of the rendered textarea. Frustrating but it's the way it's built.
|
||||
// So we get TinyMCE to resize itself for us. Clunky but it works.
|
||||
|
||||
// Get the tinyMCE editor object for this text area.
|
||||
editorid = editortable.ancestor('div').one('textarea').get('id');
|
||||
editor = tinyMCE.getInstanceById(editorid);
|
||||
|
||||
// Somehow, this editor did not exist.
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Resize editor to reflect presence of toolbar and path bar..
|
||||
iframe = editor.getBody();
|
||||
if (iframe) {
|
||||
size = tinymce.DOM.getSize(iframe);
|
||||
// If objects exist resize editor.
|
||||
if (size) {
|
||||
editor.theme.resizeTo(size.w, size.h);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
toggle_collapse_from_event : function(thisevent) {
|
||||
var button = thisevent.target.ancestor('a', true),
|
||||
editortable = thisevent.target.ancestor('span', true).one('table.mceLayout');
|
||||
this.toggle_collapse(button, editortable);
|
||||
}
|
||||
});
|
||||
|
||||
M.editor_collapse = M.editor_collapse || {};
|
||||
M.editor_collapse.init = function(params) {
|
||||
return new COLLAPSE(params);
|
||||
};
|
||||
|
||||
|
||||
}, '@VERSION@', {"requires": ["base", "node", "dom"]});
|
166
lib/editor/tinymce/yui/collapse/collapse.js
vendored
166
lib/editor/tinymce/yui/collapse/collapse.js
vendored
@ -1,166 +0,0 @@
|
||||
YUI.add('moodle-editor_tinymce-collapse', function(Y) {
|
||||
|
||||
var COLLAPSE = function() {
|
||||
COLLAPSE.superclass.constructor.apply(this, arguments);
|
||||
};
|
||||
|
||||
Y.extend(COLLAPSE, Y.Base, {
|
||||
|
||||
toggleNodeTemplate : null,
|
||||
/**
|
||||
* Set up basic values for static access.
|
||||
*/
|
||||
init : function() {
|
||||
this.initialise_toggles(10);
|
||||
},
|
||||
|
||||
/**
|
||||
* Has TinyMCE been loaded and the editors been initialised?
|
||||
* Designed mainly for IE
|
||||
* @return bool
|
||||
*/
|
||||
editors_initialised : function() {
|
||||
return typeof tinyMCE !== 'undefined';
|
||||
},
|
||||
|
||||
initialise_toggles : function(refreshes) {
|
||||
var editors_initialised = this.editors_initialised(), self = this, editor;
|
||||
if (!editors_initialised && refreshes) {
|
||||
setTimeout(function() {
|
||||
self.initialise_toggles(refreshes - 1);
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the toggle template for use later
|
||||
this.toggleNodeTemplate = Y.Node.create('<a class="toggle_editor_toolbar" />');
|
||||
this.toggleNodeTemplate.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
|
||||
// Delegate clicks of the toggle_editor_toolbar
|
||||
Y.one('body').delegate('click', this.toggle_collapse_from_event, 'a.toggle_editor_toolbar', this);
|
||||
|
||||
// Set up editors which have already been created
|
||||
for (editor in tinyMCE.editors) {
|
||||
this.setup_collapse(tinyMCE.editors[editor]);
|
||||
}
|
||||
|
||||
// Set up for future editors.
|
||||
// I haven't yet found a way of directly delegating the editor.onInit event. Instead we have to listen for the
|
||||
// tinyMCE.onAddEditor event, and then add a further event listener to the editor's onInit event.
|
||||
// onAddEditor is triggered before the editor has been created.
|
||||
// We use Y.Bind to ensure that context is maintained.
|
||||
tinyMCE.onAddEditor.add(Y.bind(this.add_setup_collapse_listener, this));
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup a listener for a new editor which will actually set the editor up
|
||||
* @param {Manager} mgr
|
||||
* @param {Editor} ed
|
||||
*/
|
||||
add_setup_collapse_listener : function (mgr, ed) {
|
||||
// Bind the editor.onInit function to set this editor up. This ensures we maintain our context (this)
|
||||
ed.onInit.add(Y.bind(this.setup_collapse, this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup the toggle system for the provided editor
|
||||
*
|
||||
* @param {Editor} ed The TinyMCE editor instance
|
||||
*/
|
||||
setup_collapse : function(ed) {
|
||||
var textarea = Y.Node(ed.getElement()),
|
||||
editortable = Y.Node(ed.getContainer()).one('> table'),
|
||||
thisToggleNode;
|
||||
|
||||
// Does this text area support collapsing at all?
|
||||
if (!textarea.hasClass('collapsible')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Did we find an appropriate table to work with
|
||||
if (!editortable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add toggle button.
|
||||
thisToggleNode = this.toggleNodeTemplate.cloneNode(true);
|
||||
editortable.get('parentNode').insert(thisToggleNode, editortable);
|
||||
|
||||
// Toggle the toolbars initially.
|
||||
if (Y.Node(ed.getElement()).hasClass('collapsed')) {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 0);
|
||||
} else {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 1);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle the specified editor toolbars.
|
||||
*
|
||||
* @param {Node} button The toggle button which we have to change the text for
|
||||
* @param {Node} editortable The table which the tinyMCE editor is in
|
||||
* @param {Boolean} newstate The intended toggle state
|
||||
*/
|
||||
toggle_collapse : function(button, editortable, newstate) {
|
||||
var toolbar = editortable.one('td.mceToolbar').ancestor('tr'),
|
||||
statusbar = editortable.one('.mceStatusbar').ancestor('tr'),
|
||||
editor, iframe, size;
|
||||
|
||||
// Check whether we have a state already.
|
||||
if (typeof newstate === 'undefined') {
|
||||
if (toolbar.getStyle('display') === 'none') {
|
||||
newstate = 1;
|
||||
} else {
|
||||
newstate = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle the various states and update the button text to suit
|
||||
if (newstate === 0) {
|
||||
toolbar.hide();
|
||||
statusbar.hide();
|
||||
button.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
} else {
|
||||
toolbar.show();
|
||||
statusbar.show();
|
||||
button.setContent(M.util.get_string('hideeditortoolbar', 'form'));
|
||||
}
|
||||
|
||||
// TinyMCE renders the toolbar and path bar as part of the textarea. So toggling these items
|
||||
// changes the required size of the rendered textarea. Frustrating but it's the way it's built.
|
||||
// So we get TinyMCE to resize itself for us. Clunky but it works.
|
||||
|
||||
// Get the tinyMCE editor object for this text area.
|
||||
editorid = editortable.ancestor('div').one('textarea').get('id');
|
||||
editor = tinyMCE.getInstanceById(editorid);
|
||||
|
||||
// Somehow, this editor did not exist.
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Resize editor to reflect presence of toolbar and path bar..
|
||||
iframe = editor.getBody();
|
||||
if (iframe) {
|
||||
size = tinymce.DOM.getSize(iframe);
|
||||
// If objects exist resize editor.
|
||||
if (size) {
|
||||
editor.theme.resizeTo(size.w, size.h);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
toggle_collapse_from_event : function(thisevent) {
|
||||
var button = thisevent.target.ancestor('a', true),
|
||||
editortable = thisevent.target.ancestor('span', true).one('table.mceLayout');
|
||||
this.toggle_collapse(button, editortable);
|
||||
}
|
||||
});
|
||||
|
||||
M.editor_collapse = M.editor_collapse || {};
|
||||
M.editor_collapse.init = function(params) {
|
||||
return new COLLAPSE(params);
|
||||
};
|
||||
|
||||
}, '@VERSION@', {requires:['base', 'node', 'dom']});
|
10
lib/editor/tinymce/yui/src/collapse/build.json
Normal file
10
lib/editor/tinymce/yui/src/collapse/build.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "moodle-editor_tinymce-collapse",
|
||||
"builds": {
|
||||
"moodle-editor_tinymce-collapse": {
|
||||
"jsfiles": [
|
||||
"collapse.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
163
lib/editor/tinymce/yui/src/collapse/js/collapse.js
vendored
Normal file
163
lib/editor/tinymce/yui/src/collapse/js/collapse.js
vendored
Normal file
@ -0,0 +1,163 @@
|
||||
var COLLAPSE = function() {
|
||||
COLLAPSE.superclass.constructor.apply(this, arguments);
|
||||
};
|
||||
|
||||
Y.extend(COLLAPSE, Y.Base, {
|
||||
// A location to store the node toggling template so that we do not have to create it each time.
|
||||
toggleNodeTemplate : null,
|
||||
|
||||
/**
|
||||
* Set up basic values for static access.
|
||||
*/
|
||||
init : function() {
|
||||
this.initialise_toggles(10);
|
||||
},
|
||||
|
||||
/**
|
||||
* Has TinyMCE been loaded and the editors been initialised?
|
||||
* Designed mainly for IE
|
||||
* @return bool
|
||||
*/
|
||||
editors_initialised : function() {
|
||||
return typeof tinyMCE !== 'undefined';
|
||||
},
|
||||
|
||||
initialise_toggles : function(refreshes) {
|
||||
var editors_initialised = this.editors_initialised(), self = this, editor;
|
||||
if (!editors_initialised && refreshes) {
|
||||
setTimeout(function() {
|
||||
self.initialise_toggles(refreshes - 1);
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the toggle template for use later
|
||||
this.toggleNodeTemplate = Y.Node.create('<a class="toggle_editor_toolbar" />');
|
||||
this.toggleNodeTemplate.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
|
||||
// Delegate clicks of the toggle_editor_toolbar
|
||||
Y.one('body').delegate('click', this.toggle_collapse_from_event, 'a.toggle_editor_toolbar', this);
|
||||
|
||||
// Set up editors which have already been created
|
||||
for (editor in tinyMCE.editors) {
|
||||
this.setup_collapse(tinyMCE.editors[editor]);
|
||||
}
|
||||
|
||||
// Set up for future editors.
|
||||
// I haven't yet found a way of directly delegating the editor.onInit event. Instead we have to listen for the
|
||||
// tinyMCE.onAddEditor event, and then add a further event listener to the editor's onInit event.
|
||||
// onAddEditor is triggered before the editor has been created.
|
||||
// We use Y.Bind to ensure that context is maintained.
|
||||
tinyMCE.onAddEditor.add(Y.bind(this.add_setup_collapse_listener, this));
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup a listener for a new editor which will actually set the editor up
|
||||
* @param {Manager} mgr
|
||||
* @param {Editor} ed
|
||||
*/
|
||||
add_setup_collapse_listener : function (mgr, ed) {
|
||||
// Bind the editor.onInit function to set this editor up. This ensures we maintain our context (this)
|
||||
ed.onInit.add(Y.bind(this.setup_collapse, this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Setup the toggle system for the provided editor
|
||||
*
|
||||
* @param {Editor} ed The TinyMCE editor instance
|
||||
*/
|
||||
setup_collapse : function(ed) {
|
||||
var textarea = Y.Node(ed.getElement()),
|
||||
editortable = Y.Node(ed.getContainer()).one('> table'),
|
||||
thisToggleNode;
|
||||
|
||||
// Does this text area support collapsing at all?
|
||||
if (!textarea.hasClass('collapsible')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Did we find an appropriate table to work with
|
||||
if (!editortable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add toggle button.
|
||||
thisToggleNode = this.toggleNodeTemplate.cloneNode(true);
|
||||
editortable.get('parentNode').insert(thisToggleNode, editortable);
|
||||
|
||||
// Toggle the toolbars initially.
|
||||
if (Y.Node(ed.getElement()).hasClass('collapsed')) {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 0);
|
||||
} else {
|
||||
this.toggle_collapse(thisToggleNode, editortable, 1);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle the specified editor toolbars.
|
||||
*
|
||||
* @param {Node} button The toggle button which we have to change the text for
|
||||
* @param {Node} editortable The table which the tinyMCE editor is in
|
||||
* @param {Boolean} newstate The intended toggle state
|
||||
*/
|
||||
toggle_collapse : function(button, editortable, newstate) {
|
||||
var toolbar = editortable.one('td.mceToolbar').ancestor('tr'),
|
||||
statusbar = editortable.one('.mceStatusbar').ancestor('tr'),
|
||||
editor, iframe, size;
|
||||
|
||||
// Check whether we have a state already.
|
||||
if (typeof newstate === 'undefined') {
|
||||
if (toolbar.getStyle('display') === 'none') {
|
||||
newstate = 1;
|
||||
} else {
|
||||
newstate = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle the various states and update the button text to suit
|
||||
if (newstate === 0) {
|
||||
toolbar.hide();
|
||||
statusbar.hide();
|
||||
button.setContent(M.util.get_string('showeditortoolbar', 'form'));
|
||||
} else {
|
||||
toolbar.show();
|
||||
statusbar.show();
|
||||
button.setContent(M.util.get_string('hideeditortoolbar', 'form'));
|
||||
}
|
||||
|
||||
// TinyMCE renders the toolbar and path bar as part of the textarea. So toggling these items
|
||||
// changes the required size of the rendered textarea. Frustrating but it's the way it's built.
|
||||
// So we get TinyMCE to resize itself for us. Clunky but it works.
|
||||
|
||||
// Get the tinyMCE editor object for this text area.
|
||||
editorid = editortable.ancestor('div').one('textarea').get('id');
|
||||
editor = tinyMCE.getInstanceById(editorid);
|
||||
|
||||
// Somehow, this editor did not exist.
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Resize editor to reflect presence of toolbar and path bar..
|
||||
iframe = editor.getBody();
|
||||
if (iframe) {
|
||||
size = tinymce.DOM.getSize(iframe);
|
||||
// If objects exist resize editor.
|
||||
if (size) {
|
||||
editor.theme.resizeTo(size.w, size.h);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
toggle_collapse_from_event : function(thisevent) {
|
||||
var button = thisevent.target.ancestor('a', true),
|
||||
editortable = thisevent.target.ancestor('span', true).one('table.mceLayout');
|
||||
this.toggle_collapse(button, editortable);
|
||||
}
|
||||
});
|
||||
|
||||
M.editor_collapse = M.editor_collapse || {};
|
||||
M.editor_collapse.init = function(params) {
|
||||
return new COLLAPSE(params);
|
||||
};
|
9
lib/editor/tinymce/yui/src/collapse/meta/collapse.json
Normal file
9
lib/editor/tinymce/yui/src/collapse/meta/collapse.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"moodle-editor_tinymce-collapse": {
|
||||
"requires": [
|
||||
"base",
|
||||
"node",
|
||||
"dom"
|
||||
]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user