From 66e71b1d5ff97e04311f8b761cc040b1188437d3 Mon Sep 17 00:00:00 2001 From: wei <> Date: Tue, 13 Dec 2005 01:42:19 +0000 Subject: Adding client side javascript validators. --- framework/Web/Javascripts/js/dom.js | 1365 +++++++++++++++++++++++++++++++++++ 1 file changed, 1365 insertions(+) create mode 100644 framework/Web/Javascripts/js/dom.js (limited to 'framework/Web/Javascripts/js/dom.js') diff --git a/framework/Web/Javascripts/js/dom.js b/framework/Web/Javascripts/js/dom.js new file mode 100644 index 00000000..a0f4a3f3 --- /dev/null +++ b/framework/Web/Javascripts/js/dom.js @@ -0,0 +1,1365 @@ +document.getElementsByClassName=function(_1,_2){ +var _3=($(_2)||document.body).getElementsByTagName("*"); +return $A(_3).inject([],function(_4,_5){ +if(Element.hasClassName(_5,_1)){ +_4.push(_5); +} +return _4; +}); +}; +if(!window.Element){ +var Element=new Object(); +} +Object.extend(Element,{visible:function(_6){ +return $(_6).style.display!="none"; +},toggle:function(){ +for(var i=0;i"; +return $A(div.childNodes[0].childNodes[0].childNodes); +}}; +var Insertion=new Object(); +Insertion.Before=Class.create(); +Insertion.Before.prototype=Object.extend(new Abstract.Insertion("beforeBegin"),{initializeRange:function(){ +this.range.setStartBefore(this.element); +},insertContent:function(_44){ +_44.each((function(_45){ +this.element.parentNode.insertBefore(_45,this.element); +}).bind(this)); +}}); +Insertion.Top=Class.create(); +Insertion.Top.prototype=Object.extend(new Abstract.Insertion("afterBegin"),{initializeRange:function(){ +this.range.selectNodeContents(this.element); +this.range.collapse(true); +},insertContent:function(_46){ +_46.reverse().each((function(_47){ +this.element.insertBefore(_47,this.element.firstChild); +}).bind(this)); +}}); +Insertion.Bottom=Class.create(); +Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion("beforeEnd"),{initializeRange:function(){ +this.range.selectNodeContents(this.element); +this.range.collapse(this.element); +},insertContent:function(_48){ +_48.each((function(_49){ +this.element.appendChild(_49); +}).bind(this)); +}}); +Insertion.After=Class.create(); +Insertion.After.prototype=Object.extend(new Abstract.Insertion("afterEnd"),{initializeRange:function(){ +this.range.setStartAfter(this.element); +},insertContent:function(_50){ +_50.each((function(_51){ +this.element.parentNode.insertBefore(_51,this.element.nextSibling); +}).bind(this)); +}}); +Element.ClassNames=Class.create(); +Element.ClassNames.prototype={initialize:function(_52){ +this.element=$(_52); +},_each:function(_53){ +this.element.className.split(/\s+/).select(function(_54){ +return _54.length>0; +})._each(_53); +},set:function(_55){ +this.element.className=_55; +},add:function(_56){ +if(this.include(_56)){ +return; +} +this.set(this.toArray().concat(_56).join(" ")); +},remove:function(_57){ +if(!this.include(_57)){ +return; +} +this.set(this.select(function(_58){ +return _58!=_57; +})); +},toString:function(){ +return this.toArray().join(" "); +}}; +Object.extend(Element.ClassNames.prototype,Enumerable); + +Object.extend(Element,{condClassName:function(_1,_2,_3){ +(_3?Element.addClassName:Element.removeClassName)(_1,_2); +}}); + +var Field={clear:function(){ +for(var i=0;i=0){ +opt=_39.options[index]; +_40=opt.value; +if(!_40&&!("value" in opt)){ +_40=opt.text; +} +} +return [_39.name,_40]; +},selectMany:function(_41){ +var _42=new Array(); +for(var i=0;i<_41.length;i++){ +var opt=_41.options[i]; +if(opt.selected){ +var _44=opt.value; +if(!_44&&!("value" in opt)){ +_44=opt.text; +} +_42.push(_44); +} +} +return [_41.name,_42]; +}}; +var $F=Form.Element.getValue; +Abstract.TimedObserver=function(){ +}; +Abstract.TimedObserver.prototype={initialize:function(_45,_46,_47){ +this.frequency=_46; +this.element=$(_45); +this.callback=_47; +this.lastValue=this.getValue(); +this.registerCallback(); +},registerCallback:function(){ +setInterval(this.onTimerEvent.bind(this),this.frequency*1000); +},onTimerEvent:function(){ +var _48=this.getValue(); +if(this.lastValue!=_48){ +this.callback(this.element,_48); +this.lastValue=_48; +} +}}; +Form.Element.Observer=Class.create(); +Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){ +return Form.Element.getValue(this.element); +}}); +Form.Observer=Class.create(); +Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){ +return Form.serialize(this.element); +}}); +Abstract.EventObserver=function(){ +}; +Abstract.EventObserver.prototype={initialize:function(_49,_50){ +this.element=$(_49); +this.callback=_50; +this.lastValue=this.getValue(); +if(this.element.tagName.toLowerCase()=="form"){ +this.registerFormCallbacks(); +}else{ +this.registerCallback(this.element); +} +},onElementEvent:function(){ +var _51=this.getValue(); +if(this.lastValue!=_51){ +this.callback(this.element,_51); +this.lastValue=_51; +} +},registerFormCallbacks:function(){ +var _52=Form.getElements(this.element); +for(var i=0;i<_52.length;i++){ +this.registerCallback(_52[i]); +} +},registerCallback:function(_53){ +if(_53.type){ +switch(_53.type.toLowerCase()){ +case "checkbox": +case "radio": +_53.target=this; +_53.prev_onclick=_53.onclick||Prototype.emptyFunction; +_53.onclick=function(){ +this.prev_onclick(); +this.target.onElementEvent(); +}; +break; +case "password": +case "text": +case "textarea": +case "select-one": +case "select-multiple": +_53.target=this; +_53.prev_onchange=_53.onchange||Prototype.emptyFunction; +_53.onchange=function(){ +this.prev_onchange(); +this.target.onElementEvent(); +}; +break; +} +} +}}; +Form.Element.EventObserver=Class.create(); +Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){ +return Form.Element.getValue(this.element); +}}); +Form.EventObserver=Class.create(); +Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){ +return Form.serialize(this.element); +}}); + +if(!window.Event){ +var Event=new Object(); +} +Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(_1){ +return _1.target||_1.srcElement; +},isLeftClick:function(_2){ +return (((_2.which)&&(_2.which==1))||((_2.button)&&(_2.button==1))); +},pointerX:function(_3){ +return _3.pageX||(_3.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)); +},pointerY:function(_4){ +return _4.pageY||(_4.clientY+(document.documentElement.scrollTop||document.body.scrollTop)); +},stop:function(_5){ +if(_5.preventDefault){ +_5.preventDefault(); +_5.stopPropagation(); +}else{ +_5.returnValue=false; +_5.cancelBubble=true; +} +},findElement:function(_6,_7){ +var _8=Event.element(_6); +while(_8.parentNode&&(!_8.tagName||(_8.tagName.toUpperCase()!=_7.toUpperCase()))){ +_8=_8.parentNode; +} +return _8; +},observers:false,_observeAndCache:function(_9,_10,_11,_12){ +if(!this.observers){ +this.observers=[]; +} +if(_9.addEventListener){ +this.observers.push([_9,_10,_11,_12]); +_9.addEventListener(_10,_11,_12); +}else{ +if(_9.attachEvent){ +this.observers.push([_9,_10,_11,_12]); +_9.attachEvent("on"+_10,_11); +} +} +},unloadCache:function(){ +if(!Event.observers){ +return; +} +for(var i=0;i0)||_8.attachEvent)){ +_9="keydown"; +} +this._observeAndCache(_8,_9,_10,_11); +}}); + +var Position={includeScrollOffsets:false,prepare:function(){ +this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0; +this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0; +},realOffset:function(_1){ +var _2=0,valueL=0; +do{ +_2+=_1.scrollTop||0; +valueL+=_1.scrollLeft||0; +_1=_1.parentNode; +}while(_1); +return [valueL,_2]; +},cumulativeOffset:function(_3){ +var _4=0,valueL=0; +do{ +_4+=_3.offsetTop||0; +valueL+=_3.offsetLeft||0; +_3=_3.offsetParent; +}while(_3); +return [valueL,_4]; +},positionedOffset:function(_5){ +var _6=0,valueL=0; +do{ +_6+=_5.offsetTop||0; +valueL+=_5.offsetLeft||0; +_5=_5.offsetParent; +if(_5){ +p=Element.getStyle(_5,"position"); +if(p=="relative"||p=="absolute"){ +break; +} +} +}while(_5); +return [valueL,_6]; +},offsetParent:function(_7){ +if(_7.offsetParent){ +return _7.offsetParent; +} +if(_7==document.body){ +return _7; +} +while((_7=_7.parentNode)&&_7!=document.body){ +if(Element.getStyle(_7,"position")!="static"){ +return _7; +} +} +return document.body; +},within:function(_8,x,y){ +if(this.includeScrollOffsets){ +return this.withinIncludingScrolloffsets(_8,x,y); +} +this.xcomp=x; +this.ycomp=y; +this.offset=this.cumulativeOffset(_8); +return (y>=this.offset[1]&&y=this.offset[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp-1){ +var _6=token.split("#"); +var _7=_6[0]; +var id=_6[1]; +var _9=document.getElementById(id); +if(_7&&_9.nodeName.toLowerCase()!=_7){ +return new Array(); +} +_4=new Array(_9); +continue; +} +if(token.indexOf(".")>-1){ +var _6=token.split("."); +var _7=_6[0]; +var _10=_6[1]; +if(!_7){ +_7="*"; +} +var _11=new Array; +var _12=0; +for(var h=0;h<_4.length;h++){ +var _14; +if(_7=="*"){ +_14=getAllChildren(_4[h]); +}else{ +_14=_4[h].getElementsByTagName(_7); +} +for(var j=0;j<_14.length;j++){ +_11[_12++]=_14[j]; +} +} +_4=new Array; +var _16=0; +for(var k=0;k<_11.length;k++){ +if(_11[k].className&&_11[k].className.match(new RegExp("\\b"+_10+"\\b"))){ +_4[_16++]=_11[k]; +} +} +continue; +} +if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)){ +var _7=RegExp.$1; +var _18=RegExp.$2; +var _19=RegExp.$3; +var _20=RegExp.$4; +if(!_7){ +_7="*"; +} +var _11=new Array; +var _12=0; +for(var h=0;h<_4.length;h++){ +var _14; +if(_7=="*"){ +_14=getAllChildren(_4[h]); +}else{ +_14=_4[h].getElementsByTagName(_7); +} +for(var j=0;j<_14.length;j++){ +_11[_12++]=_14[j]; +} +} +_4=new Array; +var _16=0; +var _21; +switch(_19){ +case "=": +_21=function(e){ +return (e.getAttribute(_18)==_20); +}; +break; +case "~": +_21=function(e){ +return (e.getAttribute(_18).match(new RegExp("\\b"+_20+"\\b"))); +}; +break; +case "|": +_21=function(e){ +return (e.getAttribute(_18).match(new RegExp("^"+_20+"-?"))); +}; +break; +case "^": +_21=function(e){ +return (e.getAttribute(_18).indexOf(_20)==0); +}; +break; +case "$": +_21=function(e){ +return (e.getAttribute(_18).lastIndexOf(_20)==e.getAttribute(_18).length-_20.length); +}; +break; +case "*": +_21=function(e){ +return (e.getAttribute(_18).indexOf(_20)>-1); +}; +break; +default: +_21=function(e){ +return e.getAttribute(_18); +}; +} +_4=new Array; +var _16=0; +for(var k=0;k<_11.length;k++){ +if(_21(_11[k])){ +_4[_16++]=_11[k]; +} +} +continue; +} +_7=token; +var _11=new Array; +var _12=0; +for(var h=0;h<_4.length;h++){ +var _14=_4[h].getElementsByTagName(_7); +for(var j=0;j<_14.length;j++){ +_11[_12++]=_14[j]; +} +} +_4=_11; +} +return _4; +}; + +var Behaviour={list:new Array,register:function(_1){ +Behaviour.list.push(_1); +},start:function(){ +Behaviour.addLoadEvent(function(){ +Behaviour.apply(); +}); +},apply:function(){ +for(h=0;sheet=Behaviour.list[h];h++){ +for(selector in sheet){ +list=document.getElementsBySelector(selector); +if(!list){ +continue; +} +for(i=0;element=list[i];i++){ +sheet[selector](element); +} +} +} +},addLoadEvent:function(_2){ +var _3=window.onload; +if(typeof window.onload!="function"){ +window.onload=_2; +}else{ +window.onload=function(){ +_3(); +_2(); +}; +} +}}; +Behaviour.start(); + +Object.debug=function(_1){ +var _2=[]; +if(typeof _1 in ["string","number"]){ +return _1; +}else{ +for(property in _1){ +if(typeof _1[property]!="function"){ +_2.push(property+" => "+(typeof _1[property]=="string"?"\""+_1[property]+"\"":_1[property])); +} +} +} +return ("'"+_1+"' #"+typeof _1+": {"+_2.join(", ")+"}"); +}; +String.prototype.toArray=function(){ +var _3=[]; +for(var i=0;i"; +var _8=_7.firstChild||null; +if(_8&&(_8.tagName!=_5)){ +_8=_8.getElementsByTagName(_5)[0]; +} +if(!_8){ +_8=document.createElement(_5); +} +if(!_8){ +return; +} +if(arguments[1]){ +if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)){ +this._children(_8,arguments[1]); +}else{ +var _9=this._attributes(arguments[1]); +if(_9.length){ +_7.innerHTML="<"+_5+" "+_9+">"; +_8=_7.firstChild||null; +if(!_8){ +_8=document.createElement(_5); +for(attr in arguments[1]){ +_8[attr=="class"?"className":attr]=arguments[1][attr]; +} +} +if(_8.tagName!=_5){ +_8=_7.getElementsByTagName(_5)[0]; +} +} +} +} +if(arguments[2]){ +this._children(_8,arguments[2]); +} +return _8; +},_text:function(_10){ +return document.createTextNode(_10); +},_attributes:function(_11){ +var _12=[]; +for(attribute in _11){ +_12.push((attribute=="className"?"class":attribute)+"=\""+_11[attribute].toString().escapeHTML()+"\""); +} +return _12.join(" "); +},_children:function(_13,_14){ +if(typeof _14=="object"){ +_14.flatten().each(function(e){ +if(typeof e=="object"){ +_13.appendChild(e); +}else{ +if(Builder._isStringOrNumber(e)){ +_13.appendChild(Builder._text(e)); +} +} +}); +}else{ +if(Builder._isStringOrNumber(_14)){ +_13.appendChild(Builder._text(_14)); +} +} +},_isStringOrNumber:function(_16){ +return (typeof _16=="string"||typeof _16=="number"); +}}; +String.prototype.camelize=function(){ +var _17=this.split("-"); +if(_17.length==1){ +return _17[0]; +} +var ret=this.indexOf("-")==0?_17[0].charAt(0).toUpperCase()+_17[0].substring(1):_17[0]; +for(var i=1,len=_17.length;i0){ +window.scrollBy(0,0); +} +}; +Element.getOpacity=function(_37){ +var _38; +if(_38=Element.getStyle(_37,"opacity")){ +return parseFloat(_38); +} +if(_38=(Element.getStyle(_37,"filter")||"").match(/alpha\(opacity=(.*)\)/)){ +if(_38[1]){ +return parseFloat(_38[1])/100; +} +} +return 1; +}; +Element.setOpacity=function(_39,_40){ +_39=$(_39); +var els=_39.style; +if(_40==1){ +els.opacity="0.999999"; +if(/MSIE/.test(navigator.userAgent)){ +els.filter=Element.getStyle(_39,"filter").replace(/alpha\([^\)]*\)/gi,""); +} +}else{ +if(_40<0.00001){ +_40=0; +} +els.opacity=_40; +if(/MSIE/.test(navigator.userAgent)){ +els.filter=Element.getStyle(_39,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+_40*100+")"; +} +} +}; +Element.getInlineOpacity=function(_42){ +_42=$(_42); +var op; +op=_42.style.opacity; +if(typeof op!="undefined"&&op!=""){ +return op; +} +return ""; +}; +Element.setInlineOpacity=function(_44,_45){ +_44=$(_44); +var els=_44.style; +els.opacity=_45; +}; +Element.getDimensions=function(_46){ +_46=$(_46); +if(Element.getStyle(_46,"display")=="none"){ +var els=_46.style; +var _47=els.visibility; +var _48=els.position; +els.visibility="hidden"; +els.position="absolute"; +els.display=""; +var _49=_46.clientWidth; +var _50=_46.clientHeight; +els.display="none"; +els.position=_48; +els.visibility=_47; +return {width:_49,height:_50}; +} +return {width:_46.offsetWidth,height:_46.offsetHeight}; +}; +Position.positionedOffset=function(_51){ +var _52=0,valueL=0; +do{ +_52+=_51.offsetTop||0; +valueL+=_51.offsetLeft||0; +_51=_51.offsetParent; +if(_51){ +p=Element.getStyle(_51,"position"); +if(p=="relative"||p=="absolute"){ +break; +} +} +}while(_51); +return [valueL,_52]; +}; +if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){ +Position.cumulativeOffset=function(_53){ +var _54=0,valueL=0; +do{ +_54+=_53.offsetTop||0; +valueL+=_53.offsetLeft||0; +if(_53.offsetParent==document.body){ +if(Element.getStyle(_53,"position")=="absolute"){ +break; +} +} +_53=_53.offsetParent; +}while(_53); +return [valueL,_54]; +}; +} +Position.page=function(_55){ +var _56=0,valueL=0; +var _57=_55; +do{ +_56+=_57.offsetTop||0; +valueL+=_57.offsetLeft||0; +if(_57.offsetParent==document.body){ +if(Element.getStyle(_57,"position")=="absolute"){ +break; +} +} +}while(_57=_57.offsetParent); +_57=_55; +do{ +_56-=_57.scrollTop||0; +valueL-=_57.scrollLeft||0; +}while(_57=_57.parentNode); +return [valueL,_56]; +}; +Position.offsetParent=function(_58){ +if(_58.offsetParent){ +return _58.offsetParent; +} +if(_58==document.body){ +return _58; +} +while((_58=_58.parentNode)&&_58!=document.body){ +if(Element.getStyle(_58,"position")!="static"){ +return _58; +} +} +return document.body; +}; +Position.clone=function(_59,_60){ +var _61=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{}); +_59=$(_59); +var p=Position.page(_59); +_60=$(_60); +var _63=[0,0]; +var _64=null; +if(Element.getStyle(_60,"position")=="absolute"){ +_64=Position.offsetParent(_60); +_63=Position.page(_64); +} +if(_64==document.body){ +_63[0]-=document.body.offsetLeft; +_63[1]-=document.body.offsetTop; +} +if(_61.setLeft){ +_60.style.left=(p[0]-_63[0]+_61.offsetLeft)+"px"; +} +if(_61.setTop){ +_60.style.top=(p[1]-_63[1]+_61.offsetTop)+"px"; +} +if(_61.setWidth){ +_60.style.width=_59.offsetWidth+"px"; +} +if(_61.setHeight){ +_60.style.height=_59.offsetHeight+"px"; +} +}; +Position.absolutize=function(_65){ +_65=$(_65); +if(_65.style.position=="absolute"){ +return; +} +Position.prepare(); +var _66=Position.positionedOffset(_65); +var top=_66[1]; +var _68=_66[0]; +var _69=_65.clientWidth; +var _70=_65.clientHeight; +_65._originalLeft=_68-parseFloat(_65.style.left||0); +_65._originalTop=top-parseFloat(_65.style.top||0); +_65._originalWidth=_65.style.width; +_65._originalHeight=_65.style.height; +_65.style.position="absolute"; +_65.style.top=top+"px"; +_65.style.left=_68+"px"; +_65.style.width=_69+"px"; +_65.style.height=_70+"px"; +}; +Position.relativize=function(_71){ +_71=$(_71); +if(_71.style.position=="relative"){ +return; +} +Position.prepare(); +_71.style.position="relative"; +var top=parseFloat(_71.style.top||0)-(_71._originalTop||0); +var _72=parseFloat(_71.style.left||0)-(_71._originalLeft||0); +_71.style.top=top+"px"; +_71.style.left=_72+"px"; +_71.style.height=_71._originalHeight; +_71.style.width=_71._originalWidth; +}; +Element.Class={toggle:function(_73,_74){ +if(Element.Class.has(_73,_74)){ +Element.Class.remove(_73,_74); +if(arguments.length==3){ +Element.Class.add(_73,arguments[2]); +} +}else{ +Element.Class.add(_73,_74); +if(arguments.length==3){ +Element.Class.remove(_73,arguments[2]); +} +} +},get:function(_75){ +return $(_75).className.split(" "); +},remove:function(_76){ +_76=$(_76); +var _77=arguments; +$R(1,arguments.length-1).each(function(_78){ +_76.className=_76.className.split(" ").reject(function(_79){ +return (_79==_77[_78]); +}).join(" "); +}); +},add:function(_80){ +_80=$(_80); +for(var i=1;i0?" ":"")+arguments[i]; +} +},has:function(_81){ +_81=$(_81); +if(!_81||!_81.className){ +return false; +} +var _82; +for(var i=1;i