Refactor code structure for improved readability and maintainability
This commit is contained in:
		
							
								
								
									
										258
									
								
								themes/sources/dhtmlxMessage/codebase/dhtmlxmessage.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								themes/sources/dhtmlxMessage/codebase/dhtmlxmessage.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,258 @@ | ||||
| /* | ||||
| Product Name: dhtmlxSuite  | ||||
| Version: 5.2.0  | ||||
| Edition: Professional  | ||||
| License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com | ||||
| Copyright UAB Dinamenta http://www.dhtmlx.com | ||||
| */ | ||||
|  | ||||
| if(!window.dhtmlx) | ||||
| 	window.dhtmlx = {}; | ||||
|  | ||||
| (function(){ | ||||
| 	var _dhx_msg_cfg = null; | ||||
| 	function callback(config, result){ | ||||
| 			var usercall = config.callback; | ||||
| 			modality(false); | ||||
| 			config.box.parentNode.removeChild(config.box); | ||||
| 			_dhx_msg_cfg = config.box = null; | ||||
| 			if (usercall) | ||||
| 				usercall(result); | ||||
| 	} | ||||
| 	function modal_key(e){ | ||||
| 		if (_dhx_msg_cfg){ | ||||
| 			e = e||event; | ||||
| 			var code = e.which||event.keyCode; | ||||
| 			if (dhtmlx.message.keyboard){ | ||||
| 				if (code == 13 || code == 32) | ||||
| 					callback(_dhx_msg_cfg, true); | ||||
| 				if (code == 27) | ||||
| 					callback(_dhx_msg_cfg, false); | ||||
|  | ||||
| 				if (e.preventDefault) | ||||
| 					e.preventDefault(); | ||||
| 				return !(e.cancelBubble = true); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if (document.attachEvent) | ||||
| 		document.attachEvent("onkeydown", modal_key); | ||||
| 	else | ||||
| 		document.addEventListener("keydown", modal_key, true); | ||||
| 		 | ||||
| 	function modality(mode){ | ||||
| 		if(!modality.cover){ | ||||
| 			modality.cover = document.createElement("DIV"); | ||||
| 			//necessary for IE only | ||||
| 			modality.cover.onkeydown = modal_key; | ||||
| 			modality.cover.className = "dhx_modal_cover"; | ||||
| 			document.body.appendChild(modality.cover); | ||||
| 		} | ||||
| 		var height =  document.body.scrollHeight; | ||||
| 		modality.cover.style.display = mode?"inline-block":"none"; | ||||
| 	} | ||||
|  | ||||
| 	function button(text, result){ | ||||
| 		return "<div class='dhtmlx_popup_button' result='"+result+"' ><div>"+text+"</div></div>"; | ||||
| 	} | ||||
|  | ||||
| 	function info(text){ | ||||
| 		if (!t.area){ | ||||
| 			t.area = document.createElement("DIV"); | ||||
| 			t.area.className = "dhtmlx_message_area"; | ||||
| 			t.area.style[t.position]="15px"; | ||||
| 			document.body.appendChild(t.area); | ||||
| 		} | ||||
|  | ||||
| 		t.hide(text.id); | ||||
| 		var message = document.createElement("DIV"); | ||||
| 		message.innerHTML = "<div>"+text.text+"</div>"; | ||||
| 		message.className = "dhtmlx-info dhtmlx-" + text.type; | ||||
| 		message.onclick = function(){ | ||||
| 			if (text) t.hide(text.id); | ||||
| 			text = null; | ||||
| 		}; | ||||
|  | ||||
| 		if (t.position == "bottom" && t.area.firstChild) | ||||
| 			t.area.insertBefore(message,t.area.firstChild); | ||||
| 		else | ||||
| 			t.area.appendChild(message); | ||||
| 		 | ||||
| 		if (text.expire > 0) | ||||
| 			t.timers[text.id]=window.setTimeout(function(){ | ||||
| 				t.hide(text.id); | ||||
| 			}, text.expire); | ||||
|  | ||||
| 		t.pull[text.id] = message; | ||||
| 		message = null; | ||||
|  | ||||
| 		return text.id; | ||||
| 	} | ||||
| 	function _boxStructure(config, ok, cancel){ | ||||
| 		var box = document.createElement("DIV"); | ||||
| 		box.className = " dhtmlx_modal_box dhtmlx-"+config.type; | ||||
| 		box.setAttribute("dhxbox", 1); | ||||
| 			 | ||||
| 		var inner = ''; | ||||
|  | ||||
| 		if (config.width) | ||||
| 			box.style.width = config.width; | ||||
| 		if (config.height) | ||||
| 			box.style.height = config.height; | ||||
| 		if (config.title) | ||||
| 			inner+='<div class="dhtmlx_popup_title">'+config.title+'</div>'; | ||||
| 		inner+='<div class="dhtmlx_popup_text"><span>'+(config.content?'':config.text)+'</span></div><div  class="dhtmlx_popup_controls">'; | ||||
| 		if (ok) | ||||
| 			inner += button(config.ok || "OK", true); | ||||
| 		if (cancel) | ||||
| 			inner += button(config.cancel || "Cancel", false); | ||||
| 		if (config.buttons){ | ||||
| 			for (var i=0; i<config.buttons.length; i++) | ||||
| 				inner += button(config.buttons[i],i); | ||||
| 		} | ||||
| 		inner += '</div>'; | ||||
| 		box.innerHTML = inner; | ||||
|  | ||||
| 		if (config.content){ | ||||
| 			var node = config.content; | ||||
| 			if (typeof node == "string")  | ||||
| 				node = document.getElementById(node); | ||||
| 			if (node.style.display == 'none') | ||||
| 				node.style.display = ""; | ||||
| 			box.childNodes[config.title?1:0].appendChild(node); | ||||
| 		} | ||||
|  | ||||
| 		box.onclick = function(e){ | ||||
| 			e = e ||event; | ||||
| 			var source = e.target || e.srcElement; | ||||
| 			if (!source.className) source = source.parentNode; | ||||
| 			if (source.className == "dhtmlx_popup_button"){ | ||||
| 				var result = source.getAttribute("result"); | ||||
| 				result = (result == "true")||(result == "false"?false:result); | ||||
| 				callback(config, result); | ||||
| 			} | ||||
| 		}; | ||||
| 		config.box = box; | ||||
| 		if (ok||cancel) | ||||
| 			_dhx_msg_cfg = config; | ||||
|  | ||||
| 		return box; | ||||
| 	} | ||||
| 	function _createBox(config, ok, cancel){ | ||||
| 		var box = config.tagName ? config : _boxStructure(config, ok, cancel); | ||||
| 		 | ||||
| 		if (!config.hidden) | ||||
| 			modality(true); | ||||
| 		document.body.appendChild(box); | ||||
| 		var x = config.left||Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth) - box.offsetWidth)/2)); | ||||
| 		var y = config.top||Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight) - box.offsetHeight)/2)); | ||||
| 		if (config.position == "top") | ||||
| 			box.style.top = "-3px"; | ||||
| 		else | ||||
| 			box.style.top = y+'px'; | ||||
| 		box.style.left = x+'px'; | ||||
| 		//necessary for IE only | ||||
| 		box.onkeydown = modal_key; | ||||
|  | ||||
| 		box.focus(); | ||||
| 		if (config.hidden) | ||||
| 			dhtmlx.modalbox.hide(box); | ||||
|  | ||||
| 		return box; | ||||
| 	} | ||||
|  | ||||
| 	function alertPopup(config){ | ||||
| 		return _createBox(config, true, false); | ||||
| 	} | ||||
| 	function confirmPopup(config){ | ||||
| 		return _createBox(config, true, true); | ||||
| 	} | ||||
| 	function boxPopup(config){ | ||||
| 		return _createBox(config); | ||||
| 	} | ||||
| 	function box_params(text, type, callback){ | ||||
| 		if (typeof text != "object"){ | ||||
| 			if (typeof type == "function"){ | ||||
| 				callback = type; | ||||
| 				type = ""; | ||||
| 			} | ||||
| 			text = {text:text, type:type, callback:callback }; | ||||
| 		} | ||||
| 		return text; | ||||
| 	} | ||||
| 	function params(text, type, expire, id){ | ||||
| 		if (typeof text != "object" || !text) | ||||
| 			text = {text:text, type:type, expire:expire, id:id}; | ||||
| 		text.id = text.id||t.uid(); | ||||
| 		text.expire = text.expire||t.expire; | ||||
| 		return text; | ||||
| 	} | ||||
| 	dhtmlx.alert = function(){ | ||||
| 		var text = box_params.apply(this, arguments); | ||||
| 		text.type = text.type || "confirm"; | ||||
| 		return alertPopup(text); | ||||
| 	}; | ||||
| 	dhtmlx.confirm = function(){ | ||||
| 		var text = box_params.apply(this, arguments); | ||||
| 		text.type = text.type || "alert"; | ||||
| 		return confirmPopup(text); | ||||
| 	}; | ||||
| 	dhtmlx.modalbox = function(){ | ||||
| 		var text = box_params.apply(this, arguments); | ||||
| 		text.type = text.type || "alert"; | ||||
| 		return boxPopup(text); | ||||
| 	}; | ||||
| 	dhtmlx.modalbox.hide = function(node){ | ||||
| 		while (node && node.getAttribute && !node.getAttribute("dhxbox")) | ||||
| 			node = node.parentNode; | ||||
| 		if (node){ | ||||
| 			node.parentNode.removeChild(node); | ||||
| 			modality(false); | ||||
| 			_dhx_msg_cfg = null; | ||||
| 		} | ||||
| 	}; | ||||
| 	var t = dhtmlx.message = function(text, type, expire, id){ | ||||
| 		text = params.apply(this, arguments); | ||||
| 		text.type = text.type||"info"; | ||||
|  | ||||
| 		var subtype = text.type.split("-")[0]; | ||||
| 		switch (subtype){ | ||||
| 			case "alert": | ||||
| 				return alertPopup(text); | ||||
| 			case "confirm": | ||||
| 				return confirmPopup(text); | ||||
| 			case "modalbox": | ||||
| 				return boxPopup(text); | ||||
| 			default: | ||||
| 				return info(text); | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	t.seed = (new Date()).valueOf(); | ||||
| 	t.uid = function(){return t.seed++;}; | ||||
| 	t.expire = 4000; | ||||
| 	t.keyboard = true; | ||||
| 	t.position = "top"; | ||||
| 	t.pull = {}; | ||||
| 	t.timers = {}; | ||||
|  | ||||
| 	t.hideAll = function(){ | ||||
| 		for (var key in t.pull) | ||||
| 			t.hide(key); | ||||
| 	}; | ||||
| 	t.hide = function(id){ | ||||
| 		var obj = t.pull[id]; | ||||
| 		if (obj && obj.parentNode){ | ||||
| 			window.setTimeout(function(){ | ||||
| 				obj.parentNode.removeChild(obj); | ||||
| 				obj = null; | ||||
| 			},2000); | ||||
| 			obj.className+=" hidden"; | ||||
| 			 | ||||
| 			if(t.timers[id]) | ||||
| 				window.clearTimeout(t.timers[id]); | ||||
| 			delete t.pull[id]; | ||||
| 		} | ||||
| 	}; | ||||
| })(); | ||||
		Reference in New Issue
	
	Block a user