⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 silverna-packs.js

📁 《JavaScript王者归来》examples.rar
💻 JS
📖 第 1 页 / 共 4 页
字号:
	}
	catch(e){
		return null;
	}
}
Object.prototype.__setByNS__ = function(s, val, cf)
{
	var n = s.split(".");
	var o = this;
	for(var i = 0; i < n.length - 1; i++)
	{
		var t = n[i];
		var nt = n[i+1];

		if(parseInt(t).toString() == t)
		{
			t-=0;
		}
		if(o[t] == null) 
		{
			if(parseInt(nt).toString() == nt || nt == "[]")
				o[t] = [];
			else
				o[t] = {};
		}
		if(nt == "[]")				//设置数组,例如 a.[].b
		{
			var p = n[i+2];
			n[i+1] = o[t].length;
			if(p)
				for(var j = 0; j < o[t].length; j++)
				{
					if(!o[t][j][p])
					{
						n[i+1] = j;
						break;
					}
				}
		}		
		o = o[t];
	}
	if(cf && o[n[i]])	//cf决定是否允许ns重名,若允许重名将重名的作为数组
	{
		if(o[n[i]] instanceof Array)
			o[n[i]].push(val);
		else
			o[n[i]] = [o[n[i]],val];
	}
	else
		o[n[i]] = val;
	return val;
}
Object.prototype.__defer__ = function(method, delay, args){
	var $pointer = this;
	if(!(args instanceof Array))
		args = [args];
	if(typeof(method) == "string")
		method = $pointer[method];
	args = args || [];
    window.setTimeout(function(){
		return method.apply($pointer, args);
	}, delay);
}
Object.prototype.__extend__ = function(_typecall, evtArgs)
{
	evtArgs = evtArgs || [];
	_typecall.apply(this, evtArgs);
}
//用一个函数侦听某个provider的输出,以一定的时间间隔delay(毫秒)
//当provider返回true的时候,侦听继续下去
//当provider返回false的时候,侦听结束
Function.prototype.listen = function(provider, delay, args)
{
	var $pointer = this;
	if(!(args instanceof Array))
		args = [args];
	setTimeout(function(){
		if(provider.apply($pointer, args))
		{
			$pointer.apply(null, args);
			$pointer.listen(provider, delay, args);
		}
	},delay);
};
(function(){
	Object.prototype.__getter__ = function(propName, closure){
		this["get"+propName.slice(0,1).toUpperCase() + propName.slice(1)] = closure;
	}
	Object.prototype.__setter__ = function(propName, closure){
		this["set"+propName.slice(0,1).toUpperCase() + propName.slice(1)] = closure;
	}	
})();
//$函数,有几个用途:
//直接调用返回一个空的function(){}
//传入字符串,转换以该字符串为ID的DOM对象,传入其它对象直接返回
//传入多个字符串或对象,字符串转换为已该字符串为ID的DOM对象,其他对象不变,返回列表
function $(){
	var _args = Array.apply([], arguments);
		
	if(_args.length == 0)
		return $void;

	if(_args.length == 1)
	{
		var obj = $id(_args[0]) || _args[0];
		return obj;
	}

	return _args.each(function(obj){
		return $id(obj) || obj;
	});
}
//将包含有length属性的对象转换为一个ArrayList
//把实现了Iterator原型的对象转换为一个ArrayList
function $arr(obj)
{
	if(!obj) return [];
	if(obj.toArray) return obj.toArray();
	var _set = [];
	for(var i = 0; i < obj.length; i++)
		_set.push(obj[i]);
	return _set;	
}
function $id(id){
	return document.getElementById(id);
}
window.setByNS = Object.prototype.__setByNS__;
window.getByNS = Object.prototype.__getByNS__;

document.getNSById = function(id){
	return document.getNS(id);
}
document.getNS = function(o){
	var ret = {};
	for(var i = 0; i < arguments.length; i++)
	{
		var o = arguments[i];

		var value;
		if(typeof o == "string"){
			o = $id(o);
		}
		var ns = o.getAttribute("ns");
		if(ns == null) ns = o.id;
		value = $$(o).getValue();
		ret.__setByNS__(ns, value, true);
	}
	return ret;
}
document.getNSByName = function(name){
	var args = document.getElementsByName(name);
	return document.getNS.apply(this, $arr(args));
}
//declare Packs
//这里的声明非常重要,它为对象建立正确的名字空间,才能被with语句所支持
var core = {
	events : {
		EventManager:null
	},
	web : {
		widgets : 
			{
				adorners : {
					Adorner : null,
					ButtonAdorner : null,
					DragDropAdorner : null,
					DatePickerAdorner : null,
					MopCalendarAdorner : null,
					SliderAdorner : null,
					WindowAdorner : null,
					behaviors : {
						Behavior : null,
						ClickBehavior : null,
						DragBehavior : null,
						HoverBehavior : null,
						SelectBehavior : null
					}
				}, 
				Widget : null,
				ButtonWidget : null,
				DragDropWidget : null,
				DatePickerWidget : null,
				MopCalendarWidget : null,
				SliderWidget : null,
				WindowWidget : null
			},
		HTMLElement : null,
		CSSStyleSheet : null
	}
}

with(core.events)
{
	//原型:EventManager是一个重要的原型,它用来赋予对象自定义事件的能力
	//当对象类型的原型继承EventManager时,对象具有定义、分派和捕捉事件的能力
	//EventManager有四个重要的方法dispatchEvent、captureEvent、addEventListener和removeEventListener
	EventManager = function()
	{
		this.dispatchEvent = function(eventType, eventArgs)
		{
			eventArgs = eventArgs || {};
			var events = this["on"+eventType];
			var called = 0;

			if(events && typeof(events) == "function")
				events = [events];

			if(!eventArgs.type) eventArgs.type = eventType;
			//阻止默认动作的执行
			eventArgs.preventDefault = function()
			{
				eventArgs.defaultOp = null;
			}
			//阻止事件起泡
			eventArgs.stopPropagation = function()
			{
				eventArgs.cancelBubble = true;
			}
			var $pointer = this;
			if(events)
			{
				for(var i = 0; i < events.length; i++)
				{

					setTimeout(
						(function(i){
							var evt = events[i];
							var len = events.length;
							var capturer = events.capturer;
							var capturerName = events.capturerName;
							return	function(){
								called++;

								var ret = evt.call($pointer,eventArgs);
								//如果有捕获事件的方法,并且没有阻止事件气泡,在最后一个事件处理程序结束之后调用它
								if(!eventArgs.cancelBubble && called == len && capturer && capturerName && capturer[capturerName])
								{
									setTimeout(function(){
											capturer[capturerName](eventArgs)
										},1)
								}
								//如果定义了默认动作,在最后一个事件处理程序结束之后执行它
								if(called == len && eventArgs.defaultOp) 
								{
									eventArgs.defaultOp.call($pointer, eventArgs);
								}
								return ret;
							}
						})(i), 1
					);
				}
			}
			else if(eventArgs.defaultOp)
			{
				eventArgs.defaultOp.call($pointer, eventArgs);
			}
		}
		this.fireEvent = this.dispatchEvent;
		this.captureEvents = function(target, eventType, capturerName, closure)
		{
			if(capturerName instanceof Function)
			{
				closure = capturerName;
				capturerName = null;
			}
			capturerName = capturerName || "on" + eventType;
			target["on"+eventType] = target["on"+eventType] || [function(){}];
			var events = target["on"+eventType];
			if(typeof(events) == "function")
			{
				target["on"+eventType] = [events];
			}

			target["on"+eventType].capturer = this;
			target["on"+eventType].capturerName = capturerName;

			if(closure)
				this[capturerName] = closure;
		}

		this.addEventListener = function(eventType, closure)
		{
			if(this["on"+eventType] == null)
			{
				this["on"+eventType] = [];
			}
			var events = this["on"+eventType];
			if(events && typeof(events) == "function"){
				this["on"+eventType] = [events];		
				events = this["on"+eventType];
			}
			events.push(closure);
			return closure;
		}

		this.removeEventListener = function(eventType, closure)
		{
			var events = this["on"+eventType];
			if(events && typeof(events) == "function")
				events = [events];		
			
			for(var i = 0; i < events.length; i++)
			{
				if(events[i] == closure)
					events.splice(i, 1);
			}
			return closure;
		}
	}
}

if(typeof(HTMLElement)!="undefined" && !window.opera)
{
  HTMLElement.prototype.__defineGetter__("outerHTML",function()
  {
    var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)
    if(a[i].specified) str+=" "+a[i].name+'="'+a[i].value+'"';
    if(!this.canHaveChildren) return str+" />";
    return str+">"+this.innerHTML+"</"+this.tagName+">";
  });
  HTMLElement.prototype.__defineSetter__("outerHTML",function(s)
  {
    var r = this.ownerDocument.createRange();
    r.setStartBefore(this);
    var df = r.createContextualFragment(s);
    this.parentNode.replaceChild(df, this);
    return s;
  });
  HTMLElement.prototype.__defineGetter__("innerText",function()
  {
		return this.textContent;
  });
  HTMLElement.prototype.__defineSetter__("innerText",function(s)
  {
    this.textContent = s;
    return s;
  });
  HTMLElement.prototype.__defineGetter__("canHaveChildren",function()
  {
    return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
  });
}

with(core.web)
{
	//扩展DOM,具有兼容性的HTMLElement类型
	HTMLElement = function(domObj)
	{
		this.el = domObj;
	}

	HTMLElement._floatZIndex = 1000;
	
	HTMLElement.prototype.focus = function()
	{
		this.el.style.zIndex = HTMLElement._floatZIndex;
		HTMLElement._floatZIndex += 10;
	}
	HTMLElement.prototype.blur = function()
	{
		this.el.style.zIndex = 0;
	}
	HTMLElement.prototype.setAttribute = function(propName, value)
	{
		//this.el[propName] = value;
		return this.el.setAttribute(propName, value);
	}
	HTMLElement.prototype.getAttribute = function(propName)
	{
		return this.el.getAttribute(propName);
	}

	HTMLElement.prototype.setStyleRule = function(className,rules)
	{
		if(!rules)
			this.el.className = className;
		else
			this.el.style[className] = rules;
	}

	HTMLElement.prototype.setStyleRuleText = function(ruleText)
	{
		this.el.style.cssText = ruleText;
	}	

	HTMLElement.prototype.setText = function(text)
	{
		if(/^(input)|(select)|(textarea)$/i.test(this.el.tagName))
			this.el.value = text;
		else
			this.el.innerText = text;
	}

	HTMLElement.prototype.addEventListener = function(evtType, evtHandler, capturing, owner, userArgs)
	{
		var $pointer = owner || this;
		var $handler;
		capturing = capturing || false;

		if(this.el.attachEvent)
		{
			$handler = function()
			{	
				var evt = window.event;
				if(userArgs)
				{
					for(var each in userArgs)
					{
						evt[each] = userArgs[each];
					}
				}

				evt.target = evt.srcElement;
				evt.relatedTarget = evt.fromElement || evt.toElement;
				evt.leftButton = function(){return evt.button == 1};
				evt.rightButton = function(){return evt.button == 2};
				evt.layerX = evt.offsetX;
				evt.layerY = evt.offsetY;
				evt.pageX = evt.clientX - document.body.scrollLeft - document.body.clientLeft;
				evt.pageY = evt.clientY - document.body.scrollTop - document.body.clientTop;

				evt.attrName = evt.propertyName;

				return evtHandler.call($pointer,evt)
			};
			this.el.attachEvent("on"+evtType, $handler);
		}
		else if(this.el.addEventListener)
		{
			Event.prototype.leftButton = function(){return this.button == 0};
			Event.prototype.rightButton = function(){return this.button == 2};
			$handler = function(event){
				if(userArgs)
				{
					for(var each in userArgs)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -