|
Server IP : 10.2.73.233 / Your IP : 216.73.216.59 Web Server : Apache/2.4.59 (Debian) System : Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : www-data ( 33) PHP Version : 5.6.40-64+0~20230107.71+debian10~1.gbp673146 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0777) : /home/ifk/web/assets/54b90d07/prado/activecontrols/../validator/../controls/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
/*
*
* HtmlArea (tinyMCE) wrapper
*
* @author Gabor Berczi <gabor.berczi@devworx.hu>
*
*/
Prado.WebUI.THtmlArea = Class.create(Prado.WebUI.Control,
{
initialize: function($super, options)
{
options.ID = options.EditorOptions.elements;
$super(options);
},
onInit : function(options)
{
this.options = options;
var obj = this;
this.ajaxresponder = {
onComplete : function(request)
{
if(request && (request instanceof Prado.AjaxRequest))
obj.checkInstance();
}
};
this.registerAjaxHook();
this.registerInstance();
},
registerInstance: function()
{
if (typeof tinyMCE_GZ == 'undefined')
{
if (typeof tinyMCE == 'undefined')
{
if (typeof Prado.CallbackRequest != 'undefined')
if (typeof Prado.CallbackRequest.transport != 'undefined')
{
// we're in a callback
// try it again in some time, as tinyMCE is most likely still loading
this.setTimeout(this.registerInstance.bind(this), 50);
return;
}
throw "TinyMCE libraries must be loaded first";
}
Prado.WebUI.THtmlArea.tinyMCELoadState = 255;
this.initInstance();
}
else
if (Prado.WebUI.THtmlArea.tinyMCELoadState==255)
this.initInstance();
else
{
Prado.WebUI.THtmlArea.pendingRegistrations.push(this.options.ID);
if (Prado.WebUI.THtmlArea.tinyMCELoadState==0)
{
Prado.WebUI.THtmlArea.tinyMCELoadState = 1;
tinyMCE_GZ.init(
this.options.CompressionOptions,
this.compressedScriptsLoaded.bind(this)
);
}
}
},
compressedScriptsLoaded: function()
{
Prado.WebUI.THtmlArea.tinyMCELoadState = 255;
var wrapper;
while(Prado.WebUI.THtmlArea.pendingRegistrations.length>0)
if (wrapper = Prado.Registry.get(Prado.WebUI.THtmlArea.pendingRegistrations.pop()))
wrapper.initInstance();
},
initInstance: function()
{
tinyMCE.init(this.options.EditorOptions);
},
checkInstance: function()
{
if (!document.getElementById(this.ID))
this.deinitialize();
},
removePreviousInstance: function()
{
for(var i=0;i<tinyMCE.editors.length;i++)
if (tinyMCE.editors[i].id==this.ID)
{
tinyMCE.editors.splice(i,1); // ugly hack, but works
this.deRegisterAjaxHook();
this.deregister();
i--;
}
},
registerAjaxHook: function()
{
if (typeof(Ajax)!="undefined")
if (typeof(Ajax.Responders)!="undefined")
Ajax.Responders.register(this.ajaxresponder);
},
deRegisterAjaxHook: function()
{
if (typeof(Ajax)!="undefined")
if (typeof(Ajax.Responders)!="undefined")
Ajax.Responders.unregister(this.ajaxresponder);
},
onDone: function()
{
// check for previous tinyMCE registration, and try to remove it gracefully first
var prev = tinyMCE.get(this.ID);
if (prev)
try
{
tinyMCE.execCommand('mceFocus', false, this.ID);
// when removed, tinyMCE restores its content to the textarea. If the textarea content has been
// updated in this same callback, it will be overwritten with the old content. Workaround this.
var curtext = $(this.ID).value;
tinyMCE.execCommand('mceRemoveControl', false, this.ID);
$(this.ID).value = curtext;
}
catch (e)
{
// suppress error here in case editor can't be properly removed
// (happens when <textarea> has been removed from DOM tree without deinitialzing the tinyMCE editor first)
}
// doublecheck editor instance here and remove manually from tinyMCE-registry if neccessary
this.removePreviousInstance();
this.deRegisterAjaxHook();
}
});
Object.extend(Prado.WebUI.THtmlArea,
{
pendingRegistrations : [],
tinyMCELoadState : 0
});