AnonSec Team
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/../controls/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/ifk/web/assets/54b90d07/prado/activecontrols/../controls/htmlarea.js
/*
 * 
 * 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
});



AnonSec - 2021