From 35c7ff28cbc311fba5e394b11fb756a4dc1edcb9 Mon Sep 17 00:00:00 2001 From: wei <> Date: Tue, 13 Dec 2005 07:08:30 +0000 Subject: Removed inline javascript from components. Adding TJavascriptLogger and logger.js --- framework/Web/Javascripts/base/prado.js | 49 ++- framework/Web/Javascripts/extended/event.js | 4 +- framework/Web/Javascripts/js/base.js | 32 +- framework/Web/Javascripts/js/dom.js | 2 +- framework/Web/Javascripts/js/logger.js | 461 ++++++++++++++++++++++++++++ 5 files changed, 510 insertions(+), 38 deletions(-) create mode 100644 framework/Web/Javascripts/js/logger.js (limited to 'framework/Web/Javascripts') diff --git a/framework/Web/Javascripts/base/prado.js b/framework/Web/Javascripts/base/prado.js index 2174908f..3eded927 100644 --- a/framework/Web/Javascripts/base/prado.js +++ b/framework/Web/Javascripts/base/prado.js @@ -25,26 +25,41 @@ Prado.Button.fireButton = function(event, target) Prado.TextBox = Class.create(); -Prado.TextBox.handleReturnKey = function(event) +/** + * Returns FALSE when the "Enter" key is pressed AND when onchange + * property is defined. The onchange function is called. However, + * it does not call event listener functions. + * @return boolean false if "Enter" and onchange property is defined, true otherwise. + */ +Prado.TextBox.handleReturnKey = function(ev) { - if (event.keyCode == 13) + var kc = ev.keyCode != null ? ev.keyCode : ev.charCode; + if(kc == Event.KEY_RETURN) { - var target; - if(typeof(event.target)!="undefined") - target=event.target; - else if(typeof(event.srcElement)!="undefined") - target=event.srcElement; - if((typeof(target)!="undefined") && (target!=null)) + var target = Event.element(ev); + if(target && isFunction(target.onchange)) { - if(typeof(target.onchange)!="undefined") - { - target.onchange(); - event.cancelBubble=true; - if(event.stopPropagation) - event.stopPropagation(); - return false; - } + target.onchange(); + Event.stop(ev); + return false; } } return true; -} \ No newline at end of file +} + +/** + * Creates a LinkButton and register the post back to the onclick event. + */ +/* to finish when doPostback changes +Prado.LinkButton = Class.create(); +Prado.LinkButton.prototype = +{ + initialize : function(element, name) + { + Event.observe(element, 'click', function(e) + { + Prado.doPostback(element, name, ''); + Event.stop(e); + }); + } +}*/ \ No newline at end of file diff --git a/framework/Web/Javascripts/extended/event.js b/framework/Web/Javascripts/extended/event.js index 17a5432c..30123efc 100644 --- a/framework/Web/Javascripts/extended/event.js +++ b/framework/Web/Javascripts/extended/event.js @@ -5,7 +5,8 @@ Object.extend(Event, { Event.__observe(w,'load',fn); }, observe: function(elements, name, observer, useCapture) { - if(isElement(elements)) + + if(!isList(elements)) return this.__observe(elements, name, observer, useCapture); for(var i=0; i 0) || element.attachEvent)) name = 'keydown'; - this._observeAndCache(element, name, observer, useCapture); } }); \ No newline at end of file diff --git a/framework/Web/Javascripts/js/base.js b/framework/Web/Javascripts/js/base.js index 276c17bd..b999f722 100644 --- a/framework/Web/Javascripts/js/base.js +++ b/framework/Web/Javascripts/js/base.js @@ -859,29 +859,25 @@ return false; return true; }; Prado.TextBox=Class.create(); -Prado.TextBox.handleReturnKey=function(_4){ -if(_4.keyCode==13){ -var _5; -if(typeof (_4.target)!="undefined"){ -_5=_4.target; -}else{ -if(typeof (_4.srcElement)!="undefined"){ -_5=_4.srcElement; -} -} -if((typeof (_5)!="undefined")&&(_5!=null)){ -if(typeof (_5.onchange)!="undefined"){ -_5.onchange(); -_4.cancelBubble=true; -if(_4.stopPropagation){ -_4.stopPropagation(); -} +Prado.TextBox.handleReturnKey=function(ev){ +var kc=ev.keyCode!=null?ev.keyCode:ev.charCode; +if(kc==Event.KEY_RETURN){ +var _6=Event.element(ev); +if(_6&&isFunction(_6.onchange)){ +_6.onchange(); +Event.stop(ev); return false; } } -} return true; }; +Prado.LinkButton=Class.create(); +Prado.LinkButton.prototype={initialize:function(_7,_8){ +Event.observe(_7,"click",function(e){ +Prado.doPostback(_7,_8,""); +Event.stop(e); +}); +}}; Prado.doPostBack=function(_1,_2,_3,_4,_5,_6,_7,_8){ if(typeof (_4)=="undefined"){ diff --git a/framework/Web/Javascripts/js/dom.js b/framework/Web/Javascripts/js/dom.js index a0f4a3f3..f22d5c80 100644 --- a/framework/Web/Javascripts/js/dom.js +++ b/framework/Web/Javascripts/js/dom.js @@ -530,7 +530,7 @@ Object.extend(Event,{OnLoad:function(fn){ var w=document.addEventListener&&!window.addEventListener?document:window; Event.__observe(w,"load",fn); },observe:function(_3,_4,_5,_6){ -if(isElement(_3)){ +if(!isList(_3)){ return this.__observe(_3,_4,_5,_6); } for(var i=0;i<_3.length;i++){ diff --git a/framework/Web/Javascripts/js/logger.js b/framework/Web/Javascripts/js/logger.js new file mode 100644 index 00000000..0c617bd7 --- /dev/null +++ b/framework/Web/Javascripts/js/logger.js @@ -0,0 +1,461 @@ +CustomEvent=Class.create(); +CustomEvent.prototype={initialize:function(){ +this.listeners=[]; +},addListener:function(_1){ +this.listeners.push(_1); +},removeListener:function(_2){ +var _3=this._findListenerIndexes(_2); +for(var i=0;i<_3.length;i++){ +this.listeners.splice(_3[i],1); +} +},dispatch:function(_5){ +for(var i=0;i0)&&!this.get(_8)){ +Logger.error("Cookie ("+_8+") was not set correctly... The value was "+_9.toString().length+" charachters long (This may be over the cookie limit)"); +} +},get:function(_14){ +var _15="(^|;)\\s*"+escape(_14)+"=([^;]+)"; +var m=document.cookie.match(_15); +if(m&&m[2]){ +return unescape(m[2]); +}else{ +return null; +} +},getAll:function(){ +var _17=document.cookie.split(";"); +var _18=[]; +for(var i=0;i<_17.length;i++){ +try{ +var _19=unescape(_17[i].match(/^\s*([^=]+)/m)[1]); +var _20=unescape(_17[i].match(/=(.*$)/m)[1]); +} +catch(e){ +continue; +} +_18.push({name:_19,value:_20}); +if(_18[_19]!=undefined){ +Logger.waring("Trying to retrieve cookie named("+_19+"). There appears to be another property with this name though."); +} +_18[_19]=_20; +} +return _18; +},clear:function(_21){ +this.set(_21,"",-1); +},clearAll:function(){ +var _22=this.getAll(); +for(var i=0;i<_22.length;i++){ +this.clear(_22[i].name); +} +}}; +Logger={logEntries:[],onupdate:new CustomEvent(),onclear:new CustomEvent(),log:function(_23,tag){ +var _25=new LogEntry(_23,tag||"info"); +this.logEntries.push(_25); +this.onupdate.dispatch(_25); +},info:function(_26){ +this.log(_26,"info"); +},debug:function(_27){ +this.log(_27,"debug"); +},warn:function(_28){ +this.log(_28,"warning"); +},error:function(_29,_30){ +this.log(_29+": \n"+_30,"error"); +},clear:function(){ +this.logEntries=[]; +this.onclear.dispatch(); +}}; +LogEntry=Class.create(); +LogEntry.prototype={initialize:function(_31,tag){ +this.message=_31; +this.tag=tag; +}}; +LogConsole=Class.create(); +LogConsole.prototype={commandHistory:[],commandIndex:0,initialize:function(){ +this.outputCount=0; +this.tagPattern=Cookie.get("tagPattern")||".*"; +this.logElement=document.createElement("div"); +document.body.appendChild(this.logElement); +Element.hide(this.logElement); +this.logElement.style.position="absolute"; +this.logElement.style.left="0px"; +this.logElement.style.width="100%"; +this.logElement.style.textAlign="left"; +this.logElement.style.fontFamily="lucida console"; +this.logElement.style.fontSize="100%"; +this.logElement.style.backgroundColor="darkgray"; +this.logElement.style.opacity=0.9; +this.logElement.style.zIndex=2000; +this.toolbarElement=document.createElement("div"); +this.logElement.appendChild(this.toolbarElement); +this.toolbarElement.style.padding="0 0 0 2px"; +this.buttonsContainerElement=document.createElement("span"); +this.toolbarElement.appendChild(this.buttonsContainerElement); +this.buttonsContainerElement.innerHTML+=""; +this.buttonsContainerElement.innerHTML+=""; +if(!Prado.Inspector.disabled){ +this.buttonsContainerElement.innerHTML+=""; +} +this.tagFilterContainerElement=document.createElement("span"); +this.toolbarElement.appendChild(this.tagFilterContainerElement); +this.tagFilterContainerElement.style.cssFloat="left"; +this.tagFilterContainerElement.appendChild(document.createTextNode("Log Filter")); +this.tagFilterElement=document.createElement("input"); +this.tagFilterContainerElement.appendChild(this.tagFilterElement); +this.tagFilterElement.style.width="200px"; +this.tagFilterElement.value=this.tagPattern; +this.tagFilterElement.setAttribute("autocomplete","off"); +Event.observe(this.tagFilterElement,"keyup",this.updateTags.bind(this)); +Event.observe(this.tagFilterElement,"click",function(){ +this.tagFilterElement.select(); +}.bind(this)); +this.outputElement=document.createElement("div"); +this.logElement.appendChild(this.outputElement); +this.outputElement.style.overflow="auto"; +this.outputElement.style.clear="both"; +this.outputElement.style.height="200px"; +this.outputElement.style.backgroundColor="black"; +this.inputContainerElement=document.createElement("div"); +this.inputContainerElement.style.width="100%"; +this.logElement.appendChild(this.inputContainerElement); +this.inputElement=document.createElement("input"); +this.inputContainerElement.appendChild(this.inputElement); +this.inputElement.style.width="100%"; +this.inputElement.style.borderWidth="0px"; +this.inputElement.style.margin="0px"; +this.inputElement.style.padding="0px"; +this.inputElement.value="Type command here"; +this.inputElement.setAttribute("autocomplete","off"); +Event.observe(this.inputElement,"keyup",this.handleInput.bind(this)); +Event.observe(this.inputElement,"click",function(){ +this.inputElement.select(); +}.bind(this)); +window.setInterval(this.repositionWindow.bind(this),500); +this.repositionWindow(); +Logger.onupdate.addListener(this.logUpdate.bind(this)); +Logger.onclear.addListener(this.clear.bind(this)); +for(var i=0;i"; +document.body.appendChild(_35); +if(Cookie.get("ConsoleVisible")=="true"){ +this.toggle(); +} +},toggle:function(){ +if(this.logElement.style.display=="none"){ +this.show(); +}else{ +this.hide(); +} +},show:function(){ +Element.show(this.logElement); +this.outputElement.scrollTop=this.outputElement.scrollHeight; +Cookie.set("ConsoleVisible","true"); +this.inputElement.select(); +},hide:function(){ +Element.hide(this.logElement); +Cookie.set("ConsoleVisible","false"); +},output:function(_36,_37){ +var _38=(this.outputElement.scrollTop+(2*this.outputElement.clientHeight))>=this.outputElement.scrollHeight; +this.outputCount++; +_37=(_37?_37+=";":""); +_37+="padding:1px;margin:0 0 5px 0"; +if(this.outputCount%2==0){ +_37+=";background-color:#101010"; +} +_36=_36||"undefined"; +_36=_36.toString().escapeHTML(); +this.outputElement.innerHTML+="
"+_36+"
"; +if(_38){ +this.outputElement.scrollTop=this.outputElement.scrollHeight; +} +},updateTags:function(){ +var _39=this.tagFilterElement.value; +if(this.tagPattern==_39){ +return; +} +try{ +new RegExp(_39); +} +catch(e){ +return; +} +this.tagPattern=_39; +Cookie.set("tagPattern",this.tagPattern); +this.outputElement.innerHTML=""; +this.outputCount=0; +for(var i=0;i",e); +break; +} +Logger.log(_46); +break; +} +if(this.inputElement.value!=""&&this.inputElement.value!=this.commandHistory[0]){ +this.commandHistory.unshift(this.inputElement.value); +} +this.commandIndex=0; +this.inputElement.value=""; +}else{ +if(e.keyCode==Event.KEY_UP&&this.commandHistory.length>0){ +this.inputElement.value=this.commandHistory[this.commandIndex]; +if(this.commandIndex0){ +if(this.commandIndex>0){ +this.commandIndex-=1; +} +this.inputElement.value=this.commandHistory[this.commandIndex]; +}else{ +this.commandIndex=0; +} +} +} +}}; +Event.observe(window,"load",function(){ +logConsole=new LogConsole(); +}); +function inspect(_47,_48,_49){ +var _50=[]; +var _51=[]; +for(var _52 in _47){ +if(_52=="______array"){ +continue; +} +try{ +if(_47[_52] instanceof Function){ +if(_49){ +_51.push(_52+":\t"+_47[_52]); +} +}else{ +if(_47[_52] instanceof Object){ +_51.push(_52+":\t"+inspect(_47[_52],_48,_49)); +}else{ +if(!_48){ +_50.push(_52+":\t"+_47[_52]); +} +} +} +} +catch(e){ +Logger.error("Excetion thrown while inspecting object.",e); +} +} +_50.sort(); +_51.sort(); +var _53=_50.concat(_51); +var _54=""; +for(var i=0;i<_53.length;i++){ +_54+=(_53[i]+"\n"); +} +return _54; +} +Array.prototype.contains=function(_55){ +for(var i=0;i/g,">"); +return str; +},parseJS:function(obj){ +var _58; +if(typeof obj=="string"){ +_58=obj; +obj=eval(obj); +} +win=typeof obj=="undefined"?window:obj; +this.displaying=_58?_58:win.toString(); +for(js in win){ +try{ +if(win[js]&&js.toString().indexOf("Inspector")==-1&&win[js].toString().indexOf("[native code]")==-1){ +t=typeof (win[js]); +if(!this.objs[t.toString()]){ +this.types[this.types.length]=t; +this.objs[t]=new Array(); +} +index=this.objs[t].length; +this.objs[t][index]=new Array(); +this.objs[t][index][0]=js; +this.objs[t][index][1]=this.format(win[js].toString()); +} +} +catch(err){ +} +} +},show:function(_59){ +this.d.getElementById(_59).style.display=this.hidden[_59]?"none":"block"; +this.hidden[_59]=this.hidden[_59]?0:1; +},changeSpan:function(_60){ +if(this.d.getElementById(_60).innerHTML.indexOf("+")>-1){ +this.d.getElementById(_60).innerHTML="[-]"; +}else{ +this.d.getElementById(_60).innerHTML="[+]"; +} +},buildInspectionLevel:function(){ +var _61=this.displaying; +var _62=_61.split("."); +var _63=["[object Window]"]; +var _64=""; +if(_61.indexOf("[object ")>=0){ +return _63.join("."); +} +for(var i=0;i<_62.length;i++){ +_64+=(_64.length?".":"")+_62[i]; +_63[i+1]=""+_62[i]+""; +} +return _63.join("."); +},buildTree:function(){ +mHTML="
Inspecting "+this.buildInspectionLevel()+"
"; +mHTML+="
    "; +this.types.sort(); +var _65=0; +for(i=0;i[+]"+this.types[i]+" ("+this.objs[this.types[i]].length+")
      "; +this.hidden["ul"+i]=0; +for(e=0;e=0&&/^[a-zA-Z_]/.test(this.objs[this.types[i]][e][0][0])){ +if(this.displaying.indexOf("[object ")<0){ +_66=" more"; +}else{ +if(this.displaying.indexOf("[object Window]")>=0){ +_66=" more"; +} +} +} +mHTML+="
    • [+]"+this.objs[this.types[i]][e][0]+"
      • "+this.objs[this.types[i]][e][1]+_66+"
      "; +this.hidden["mul"+_65]=0; +_65++; +} +mHTML+="
    "; +} +mHTML+="
"; +this.d.getElementById("so_mContainer").innerHTML=mHTML; +},handleKeyEvent:function(e){ +keyCode=document.all?window.event.keyCode:e.keyCode; +if(keyCode==27){ +this.cleanUp(); +} +},cleanUp:function(){ +if(this.d.getElementById("so_mContainer")){ +this.d.body.removeChild(this.d.getElementById("so_mContainer")); +this.d.body.removeChild(this.d.getElementById("so_mStyle")); +if(typeof Event!="undefined"){ +Event.stopObserving(this.d,"keydown",this.handleKeyEvent.bind(this)); +} +this.types=new Array(); +this.objs=new Array(); +this.hidden=new Array(); +} +},disabled:document.all&&!this.opera,inspect:function(obj){ +if(this.disabled){ +return alert("Sorry, this only works in Mozilla and Firefox currently."); +} +this.cleanUp(); +mObj=this.d.body.appendChild(this.d.createElement("div")); +mObj.id="so_mContainer"; +sObj=this.d.body.appendChild(this.d.createElement("style")); +sObj.id="so_mStyle"; +sObj.type="text/css"; +sObj.innerHTML=this.style; +if(typeof Event!="undefined"){ +Event.observe(this.d,"keydown",this.handleKeyEvent.bind(this)); +} +this.parseJS(obj); +this.buildTree(); +cObj=mObj.appendChild(this.d.createElement("div")); +cObj.className="credits"; +cObj.innerHTML="[esc] to close
Javascript Object Tree V2.0, more info."; +window.scrollTo(0,0); +},style:"#so_mContainer { position:absolute; top:5px; left:5px; background-color:#E3EBED; text-align:left; font:9pt verdana; width:85%; border:2px solid #000; padding:5px; z-index:1000; color:#000; } "+"#so_mContainer ul { padding-left:20px; } "+"#so_mContainer ul li { display:block; list-style-type:none; list-style-image:url(); line-height:2em; -moz-border-radius:.75em; font:10px verdana; padding:0; margin:2px; color:#000; } "+"#so_mContainer li:hover { background-color:#E3EBED; } "+"#so_mContainer ul li span { position:relative; width:15px; height:15px; margin-right:4px; } "+"#so_mContainer pre { background-color:#F9FAFB; border:1px solid #638DA1; height:auto; padding:5px; font:9px verdana; color:#000; } "+"#so_mContainer .topLevel { margin:0; padding:0; } "+"#so_mContainer .credits { float:left; width:200px; font:6.5pt verdana; color:#000; padding:2px; margin-left:5px; text-align:left; border-top:1px solid #000; margin-top:15px; width:75%; } "+"#so_mContainer .credits a { font:9px verdana; font-weight:bold; color:#004465; text-decoration:none; background-color:transparent; }"}; +function var_dump(obj){ +Prado.Inspector.inspect(obj); +} + -- cgit v1.2.3