2017-04-15 01:34:36 +03:00

93 lines
4.0 KiB
JavaScript
Executable File

/*
* Copyright (C) 2013 Erideon (Singapore) Private Limited; http://www.erideon.com/
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This library 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 Lesser General Public License for more details available from
* Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This header must be retained in all distributed or embedded copies of this code and
* reference to www.erideon.com must be made available in derivative works.
*/
(function () {
var pluginHandle = 'maxheight';
CKEDITOR.plugins.add(pluginHandle, {
init: function (oEditor) {
// for conveniently referencing the plugin in the init-function
var oPlugin = oEditor.plugins[pluginHandle];
// we choose the DOM-element where we want to put the eventhandler on
var eventObject = window;
if (navigator.appVersion.indexOf("MSIE 7.") != -1) {
// IE7 cannot react on window-events -> use the parent-element
eventObject = oEditor.element.$.parentElement;
}
// our resize-functionality
var resizeFunction = function () {
oPlugin.recalcCKEditorSize(oEditor);
};
// for convenience calls from outside
oEditor.maximizeHeightNow = resizeFunction;
// window resize events will trigger a CKEditor-resize
oPlugin.addEvent(eventObject, 'resize', resizeFunction);
// do an initial resize at startup - does not work if the editor is not visible!
oEditor.on('instanceReady', resizeFunction);
},
recalcCKEditorSize: function (oEditor) {
/// <summary>
/// recalculate the size of the CKeditor instance
/// </summary>
/// <param name="oEditor">editor to work with</param>
// make sure everything is available
if (oEditor && oEditor.element && oEditor.container) {
// evaluate desired width
var curSize = oEditor.getResizable()
// from width-setting of the container / width-property of ASP.NET control
var curWidth = curSize.$.style.width;
if (curWidth == '') {
// from textarea (style setting on ASP.NET control)
curWidth = oEditor.element.$.style.width;
if (curWidth == '') {
// no definition so far
// we assume 100%
curWidth = '100%';
}
}
// we take height from encapsulating div/body/...
oEditor.resize(curWidth, oEditor.container.$.parentElement.offsetHeight, null, false);
}
},
addEvent: function (elem, type, eventHandle) {
/// <summary>
/// handles attaching events cross-browser.
/// <see href="http://stackoverflow.com/questions/641857/javascript-window-resize-event" />
/// </summary>
/// <param name="elem">the object to attach the event on</param>
/// <param name="type">name of the event</param>
/// <param name="eventHandle">the event handler</param>
if (elem == null || elem == undefined) return;
if (elem.addEventListener) {
elem.addEventListener(type, eventHandle, false);
} else if (elem.attachEvent) {
elem.attachEvent("on" + type, eventHandle);
} else {
elem["on" + type] = eventHandle;
}
}
});
})();