summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorwei <>2006-09-16 03:43:02 +0000
committerwei <>2006-09-16 03:43:02 +0000
commit2d8fc0f1818aa896bebedf8cbeedffb17d048600 (patch)
tree2ef6ea939d5f018598ec2983086354000750fb70 /framework
parentd148330f1fe3cb6116a69e56ecd44c37bfb2a44e (diff)
Fixed #340
Diffstat (limited to 'framework')
-rw-r--r--framework/Web/Javascripts/extra/logger.js252
-rw-r--r--framework/Web/Javascripts/js/compressed/ajax.js8
-rw-r--r--framework/Web/Javascripts/js/compressed/logger.js10
-rw-r--r--framework/Web/Javascripts/js/debug/ajax.js11
-rw-r--r--framework/Web/Javascripts/js/debug/logger.js253
-rw-r--r--framework/Web/Javascripts/prado/ajax3.js11
6 files changed, 291 insertions, 254 deletions
diff --git a/framework/Web/Javascripts/extra/logger.js b/framework/Web/Javascripts/extra/logger.js
index 063e883a..d1434361 100644
--- a/framework/Web/Javascripts/extra/logger.js
+++ b/framework/Web/Javascripts/extra/logger.js
@@ -46,7 +46,7 @@ CustomEvent.prototype = {
// ---------------
_findListenerIndexes : function(method) {
var indexes = []
- for(var i = 0; i < this.listeners.length; i++) {
+ for(var i = 0; i < this.listeners.length; i++) {
if (this.listeners[i] == method) {
indexes.push(i)
}
@@ -68,7 +68,7 @@ var Cookie = {
var date = new Date()
date.setDate(date.getDate() + expirationInDays)
cookie += "; expires=" + date.toGMTString()
- }
+ }
if (path) {
cookie += ";path=" + path
@@ -85,7 +85,7 @@ var Cookie = {
var pattern = "(^|;)\\s*" + escape(name) + "=([^;]+)"
var m = document.cookie.match(pattern)
- if (m && m[2]) {
+ if (m && m[2]) {
return unescape(m[2])
}
else return null
@@ -93,9 +93,9 @@ var Cookie = {
getAll : function() {
var cookies = document.cookie.split(';')
- var cookieArray = []
+ var cookieArray = []
- for (var i = 0; i < cookies.length; i++) {
+ for (var i = 0; i < cookies.length; i++) {
try {
var name = unescape(cookies[i].match(/^\s*([^=]+)/m)[1])
var value = unescape(cookies[i].match(/=(.*$)/m)[1])
@@ -108,7 +108,7 @@ var Cookie = {
if (cookieArray[name] != undefined) {
Logger.waring("Trying to retrieve cookie named(" + name + "). There appears to be another property with this name though.");
- }
+ }
cookieArray[name] = value
}
@@ -128,20 +128,20 @@ var Cookie = {
}
}
-}
+}
// ------
// Logger
-// -----
+// -----
Logger = {
logEntries : [],
onupdate : new CustomEvent(),
onclear : new CustomEvent(),
-
- // Logger output
+
+ // Logger output
log : function(message, tag) {
var logEntry = new LogEntry(message, tag || "info")
this.logEntries.push(logEntry)
@@ -150,28 +150,37 @@ Logger = {
info : function(message) {
this.log(message, 'info')
- },
+ if(typeof(console) != "undefined")
+ console.info(message);
+ },
debug : function(message) {
this.log(message, 'debug')
- },
+ if(typeof(console) != "undefined")
+ console.debug(message);
+ },
warn : function(message) {
this.log(message, 'warning')
+ if(typeof(console) != "undefined")
+ console.warn(message);
},
error : function(message, error) {
this.log(message + ": \n" + error, 'error')
+ if(typeof(console) != "undefined")
+ console.error(message);
+
},
clear : function () {
this.logEntries = []
this.onclear.dispatch()
}
-}
+}
LogEntry = Class.create()
-LogEntry.prototype = {
+LogEntry.prototype = {
initialize : function(message, tag) {
this.message = message
this.tag = tag
@@ -179,7 +188,7 @@ LogEntry.prototype = {
}
LogConsole = Class.create()
-LogConsole.prototype = {
+LogConsole.prototype = {
// Properties
// ----------
@@ -192,7 +201,7 @@ LogConsole.prototype = {
initialize : function() {
this.outputCount = 0
this.tagPattern = Cookie.get('tagPattern') || ".*"
-
+
// I hate writing javascript in HTML... but what's a better alternative
this.logElement = document.createElement('div')
document.body.appendChild(this.logElement)
@@ -205,81 +214,81 @@ LogConsole.prototype = {
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.logElement.style.backgroundColor = 'darkgray'
+ this.logElement.style.opacity = 0.9
+ this.logElement.style.zIndex = 2000
// Add toolbarElement
this.toolbarElement = document.createElement('div')
- this.logElement.appendChild(this.toolbarElement)
+ this.logElement.appendChild(this.toolbarElement)
this.toolbarElement.style.padding = "0 0 0 2px"
- // Add buttons
+ // Add buttons
this.buttonsContainerElement = document.createElement('span')
- this.toolbarElement.appendChild(this.buttonsContainerElement)
+ this.toolbarElement.appendChild(this.buttonsContainerElement)
this.buttonsContainerElement.innerHTML += '<button onclick="logConsole.toggle()" style="float:right;color:black">close</button>'
- this.buttonsContainerElement.innerHTML += '<button onclick="Logger.clear()" style="float:right;color:black">clear</button>'
+ this.buttonsContainerElement.innerHTML += '<button onclick="Logger.clear()" style="float:right;color:black">clear</button>'
if(!Prado.Inspector.disabled)
this.buttonsContainerElement.innerHTML += '<button onclick="Prado.Inspector.inspect()" style="float:right;color:black; margin-right:15px;">Object Tree</button>'
//Add Tag Filter
this.tagFilterContainerElement = document.createElement('span')
- this.toolbarElement.appendChild(this.tagFilterContainerElement)
+ 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.tagFilterContainerElement.appendChild(this.tagFilterElement)
+ this.tagFilterElement.style.width = '200px'
+ this.tagFilterElement.value = this.tagPattern
this.tagFilterElement.setAttribute('autocomplete', 'off') // So Firefox doesn't flip out
-
+
Event.observe(this.tagFilterElement, 'keyup', this.updateTags.bind(this))
- Event.observe(this.tagFilterElement, 'click', function() {this.tagFilterElement.select()}.bind(this))
-
+ Event.observe(this.tagFilterElement, 'click', function() {this.tagFilterElement.select()}.bind(this))
+
// Add outputElement
this.outputElement = document.createElement('div')
- this.logElement.appendChild(this.outputElement)
- this.outputElement.style.overflow = "auto"
+ 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.outputElement.style.backgroundColor = 'black'
+
this.inputContainerElement = document.createElement('div')
this.inputContainerElement.style.width = "100%"
- this.logElement.appendChild(this.inputContainerElement)
-
+ this.logElement.appendChild(this.inputContainerElement)
+
this.inputElement = document.createElement('input')
- this.inputContainerElement.appendChild(this.inputElement)
- this.inputElement.style.width = '100%'
+ this.inputContainerElement.appendChild(this.inputElement)
+ this.inputElement.style.width = '100%'
this.inputElement.style.borderWidth = '0px' // Inputs with 100% width always seem to be too large (I HATE THEM) they only work if the border, margin and padding are 0
this.inputElement.style.margin = '0px'
this.inputElement.style.padding = '0px'
- this.inputElement.value = 'Type command here'
+ this.inputElement.value = 'Type command here'
this.inputElement.setAttribute('autocomplete', 'off') // So Firefox doesn't flip out
Event.observe(this.inputElement, 'keyup', this.handleInput.bind(this))
- Event.observe(this.inputElement, 'click', function() {this.inputElement.select()}.bind(this))
+ Event.observe(this.inputElement, 'click', function() {this.inputElement.select()}.bind(this))
window.setInterval(this.repositionWindow.bind(this), 500)
this.repositionWindow()
-
+
// Listen to the logger....
Logger.onupdate.addListener(this.logUpdate.bind(this))
- Logger.onclear.addListener(this.clear.bind(this))
+ Logger.onclear.addListener(this.clear.bind(this))
// Preload log element with the log entries that have been entered
for (var i = 0; i < Logger.logEntries.length; i++) {
this.logUpdate(Logger.logEntries[i])
- }
-
+ }
+
// Feed all errors into the logger (For some unknown reason I can only get this to work
// with an inline event declaration)
Event.observe(window, 'error', function(msg, url, lineNumber) {Logger.error("Error in (" + (url || location) + ") on line "+lineNumber+"", msg)})
- // Allow acess key link
+ // Allow acess key link
var accessElement = document.createElement('span')
accessElement.innerHTML = '<button style="position:absolute;top:-100px" onclick="javascript:logConsole.toggle()" accesskey="d"></button>'
document.body.appendChild(accessElement)
@@ -296,43 +305,43 @@ LogConsole.prototype = {
else {
this.hide()
}
- },
-
+ },
+
show : function() {
Element.show(this.logElement)
this.outputElement.scrollTop = this.outputElement.scrollHeight // Scroll to bottom when toggled
Cookie.set('ConsoleVisible', 'true')
this.inputElement.select()
- },
-
+ },
+
hide : function() {
Element.hide(this.logElement)
Cookie.set('ConsoleVisible', 'false')
- },
-
+ },
+
output : function(message, style) {
- // If we are at the bottom of the window, then keep scrolling with the output
+ // If we are at the bottom of the window, then keep scrolling with the output
var shouldScroll = (this.outputElement.scrollTop + (2 * this.outputElement.clientHeight)) >= this.outputElement.scrollHeight
-
+
this.outputCount++
- style = (style ? style += ';' : '')
- style += 'padding:1px;margin:0 0 5px 0'
-
+ style = (style ? style += ';' : '')
+ style += 'padding:1px;margin:0 0 5px 0'
+
if (this.outputCount % 2 == 0) style += ";background-color:#101010"
-
+
message = message || "undefined"
message = message.toString().escapeHTML()
-
+
this.outputElement.innerHTML += "<pre style='" + style + "'>" + message + "</pre>"
-
- if (shouldScroll) {
+
+ if (shouldScroll) {
this.outputElement.scrollTop = this.outputElement.scrollHeight
}
},
-
+
updateTags : function() {
var pattern = this.tagFilterElement.value
-
+
if (this.tagPattern == pattern) return
try {
@@ -341,19 +350,19 @@ LogConsole.prototype = {
catch (e) {
return
}
-
+
this.tagPattern = pattern
Cookie.set('tagPattern', this.tagPattern)
this.outputElement.innerHTML = ""
-
+
// Go through each log entry again
this.outputCount = 0;
for (var i = 0; i < Logger.logEntries.length; i++) {
this.logUpdate(Logger.logEntries[i])
- }
+ }
},
-
+
repositionWindow : function() {
var offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
var pageHeight = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
@@ -380,35 +389,35 @@ LogConsole.prototype = {
},
handleInput : function(e) {
- if (e.keyCode == Event.KEY_RETURN ) {
+ if (e.keyCode == Event.KEY_RETURN ) {
var command = this.inputElement.value
-
+
switch(command) {
case "clear":
- Logger.clear()
+ Logger.clear()
break
-
- default:
- var consoleOutput = ""
-
+
+ default:
+ var consoleOutput = ""
+
try {
- consoleOutput = eval(this.inputElement.value)
+ consoleOutput = eval(this.inputElement.value)
}
- catch (e) {
- Logger.error("Problem parsing input <" + command + ">", e)
+ catch (e) {
+ Logger.error("Problem parsing input <" + command + ">", e)
break
}
-
- Logger.log(consoleOutput)
+
+ Logger.log(consoleOutput)
break
- }
-
+ }
+
if (this.inputElement.value != "" && this.inputElement.value != this.commandHistory[0]) {
this.commandHistory.unshift(this.inputElement.value)
}
-
- this.commandIndex = 0
- 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]
@@ -416,23 +425,23 @@ LogConsole.prototype = {
if (this.commandIndex < this.commandHistory.length - 1) {
this.commandIndex += 1
}
- }
+ }
else if (e.keyCode == Event.KEY_DOWN && this.commandHistory.length > 0) {
- if (this.commandIndex > 0) {
+ if (this.commandIndex > 0) {
this.commandIndex -= 1
- }
+ }
this.inputElement.value = this.commandHistory[this.commandIndex]
- }
+ }
else {
this.commandIndex = 0
}
- }
-}
+ }
+}
// Load the Console when the window loads
var logConsole;
-Event.OnLoad(function() { logConsole = new LogConsole()});
+Event.OnLoad(function() { logConsole = new LogConsole()});
@@ -440,7 +449,7 @@ Event.OnLoad(function() { logConsole = new LogConsole()});
// -------------------------
// Helper Functions And Junk
// -------------------------
-function inspect(o)
+function inspect(o)
{
var objtype = typeof(o);
if (objtype == "undefined") {
@@ -457,7 +466,7 @@ function inspect(o)
return "[" + typeof(o) + "]";
}
- if (typeof(o) == "function")
+ if (typeof(o) == "function")
{
o = ostring.replace(/^\s+/, "");
var idx = o.indexOf("{");
@@ -466,9 +475,9 @@ function inspect(o)
}
return o;
}
-
- var reprString = function (o)
- {
+
+ var reprString = function (o)
+ {
return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
).replace(/[\f]/g, "\\f"
).replace(/[\b]/g, "\\b"
@@ -509,7 +518,7 @@ function inspect(o)
}
return "[" + res.join(", ") + "]";
}
-
+
// generic object code path
res = [];
for (var k in o) {
@@ -530,7 +539,7 @@ function inspect(o)
res.push(useKey + ":" + val);
}
return "{" + res.join(", ") + "}";
-}
+}
Array.prototype.contains = function(object) {
for(var i = 0; i < this.length; i++) {
@@ -538,10 +547,10 @@ Array.prototype.contains = function(object) {
}
return false
-}
+}
// Helper Alias for simple logging
-var puts = function() {return Logger.log(arguments[0], arguments[1])}
+var puts = function() {return Logger.log(arguments[0], arguments[1])}
/*************************************
@@ -550,23 +559,23 @@ var puts = function() {return Logger.log(arguments[0], arguments[1])}
last revision:04.11.2004
steve@slayeroffice.com
http://slayeroffice.com
-
+
(c)2004 S.G. Chipman
Please notify me of any modifications
- you make to this code so that I can
+ you make to this code so that I can
update the version hosted on slayeroffice.com
************************************/
if(typeof Prado == "undefined")
var Prado = {};
-Prado.Inspector =
+Prado.Inspector =
{
- d : document,
+ d : document,
types : new Array(),
objs : new Array(),
- hidden : new Array(),
+ hidden : new Array(),
opera : window.opera,
displaying : '',
nameList : new Array(),
@@ -583,23 +592,23 @@ Prado.Inspector =
if(typeof obj == "string") { name = obj; obj = eval(obj); }
win= typeof obj == 'undefined' ? window : obj;
this.displaying = name ? name : win.toString();
- for(js in win) {
+ for(js in win) {
try {
if(win[js] && js.toString().indexOf("Inspector")==-1 && (win[js]+"").indexOf("[native code]")==-1) {
-
+
t=typeof(win[js]);
- if(!this.objs[t.toString()]) {
+ if(!this.objs[t.toString()]) {
this.types[this.types.length]=t;
this.objs[t]={};
this.nameList[t] = new Array();
}
this.nameList[t].push(js);
- this.objs[t][js] = this.format(win[js]+"");
+ this.objs[t][js] = this.format(win[js]+"");
}
} catch(err) { }
}
- for(i=0;i<this.types.length;i++)
+ for(i=0;i<this.types.length;i++)
this.nameList[this.types[i]].sort();
},
@@ -626,7 +635,7 @@ Prado.Inspector =
for(var i = 0; i < list.length; i++)
{
name += (name.length ? "." : "") + list[i];
- links[i+1] = "<a href=\"javascript:var_dump('"+name+"')\">"+list[i]+"</a>";
+ links[i+1] = "<a href=\"javascript:var_dump('"+name+"')\">"+list[i]+"</a>";
}
return links.join(".");
},
@@ -636,11 +645,11 @@ Prado.Inspector =
mHTML +="<ul class=\"topLevel\">";
this.types.sort();
var so_objIndex=0;
- for(i=0;i<this.types.length;i++)
+ for(i=0;i<this.types.length;i++)
{
mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('ul"+i+"');Prado.Inspector.changeSpan('sp" + i + "')\"><span id=\"sp" + i + "\">[+]</span><b>" + this.types[i] + "</b> (" + this.nameList[this.types[i]].length + ")</li><ul style=\"display:none;\" id=\"ul"+i+"\">";
this.hidden["ul"+i]=0;
- for(e=0;e<this.nameList[this.types[i]].length;e++)
+ for(e=0;e<this.nameList[this.types[i]].length;e++)
{
var prop = this.nameList[this.types[i]][e];
var value = this.objs[this.types[i]][prop]
@@ -650,7 +659,7 @@ Prado.Inspector =
if(this.displaying.indexOf("[object ") < 0)
more = " <a href=\"javascript:var_dump('"+this.displaying+"."+prop+"')\"><b>more</b></a>";
else if(this.displaying.indexOf("[object Window]") >= 0)
- more = " <a href=\"javascript:var_dump('"+prop+"')\"><b>more</b></a>";
+ more = " <a href=\"javascript:var_dump('"+prop+"')\"><b>more</b></a>";
}
mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('mul" + so_objIndex + "');Prado.Inspector.changeSpan('sk" + so_objIndex + "')\"><span id=\"sk" + so_objIndex + "\">[+]</span>" + prop + "</li><ul id=\"mul" + so_objIndex + "\" style=\"display:none;\"><li style=\"list-style-type:none;\"><pre>" + value + more + "</pre></li></ul>";
this.hidden["mul"+so_objIndex]=0;
@@ -669,7 +678,7 @@ Prado.Inspector =
}
},
- cleanUp : function()
+ cleanUp : function()
{
if(this.d.getElementById("so_mContainer"))
{
@@ -685,7 +694,7 @@ Prado.Inspector =
disabled : document.all && !this.opera,
- inspect : function(obj)
+ inspect : function(obj)
{
if(this.disabled)return alert("Sorry, this only works in Mozilla and Firefox currently.");
this.cleanUp();
@@ -709,12 +718,12 @@ Prado.Inspector =
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; } " +
+ 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 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 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; }"
@@ -727,4 +736,5 @@ function var_dump(obj)
}
//similar function to print_r for PHP
-var print_r = inspect; \ No newline at end of file
+var print_r = inspect;
+
diff --git a/framework/Web/Javascripts/js/compressed/ajax.js b/framework/Web/Javascripts/js/compressed/ajax.js
index cc7348cd..7e9cf3ec 100644
--- a/framework/Web/Javascripts/js/compressed/ajax.js
+++ b/framework/Web/Javascripts/js/compressed/ajax.js
@@ -50,7 +50,7 @@ Prado.CallbackRequest.Exception.onException(null,e);}}},Exception:{"on500":funct
{var msg='HTTP '+transport.status+" with response : \n";msg+=transport.responseText+"\n";msg+="Data : \n"+inspect(data)+"\n";msg+="Actions : \n";data=request.getHeaderData(Prado.CallbackRequest.ACTION_HEADER);if(data&&data.length>0)
{data.each(function(action)
{msg+=inspect(action)+"\n";});}
-Logger.warn(msg);}},onException:function(request,e)
+Logger.info(msg);}},onException:function(request,e)
{msg="";$H(e).each(function(item)
{msg+=item.key+": "+item.value+"\n";})
Logger.error('Uncaught Callback Client Exception:',msg);},formatException:function(e)
@@ -65,13 +65,15 @@ return null;},dispatchPriorityRequest:function(callback)
{Prado.CallbackRequest.abortRequestInProgress();},callback.options.RequestTimeOut);this.requestInProgress=callback;return true;},dispatchNormalRequest:function(callback)
{new Ajax.Request(callback.url,callback.options);return true;},abortRequestInProgress:function()
{inProgress=Prado.CallbackRequest.requestInProgress;if(inProgress)
-{inProgress.request.transport.abort();clearTimeout(inProgress.timeout);Prado.CallbackRequest.requestInProgress=null;return true;}
+{if(inProgress.request.transport.readyState<4)
+inProgress.request.transport.abort();clearTimeout(inProgress.timeout);Prado.CallbackRequest.requestInProgress=null;return true;}
return false;},updatePageState:function(request,transport)
{pagestate=$(this.FIELD_CALLBACK_PAGESTATE);if(request.options.EnablePageStateUpdate&&request.options.HasPriority&&pagestate)
{data=request.header(this.PAGESTATE_HEADER);if(typeof(data)=="string"&&data.length>0)
pagestate.value=data;else
{if(typeof(Logger)!="undefined")
-Logger.debug("Bad page state:"+data);}}}})
+Logger.warn("Missing page state:"+data);return false;}}
+return true;}})
Ajax.Responders.register({onComplete:function(request)
{if(request.options.HasPriority)
Prado.CallbackRequest.abortRequestInProgress();}});Event.OnLoad(function()
diff --git a/framework/Web/Javascripts/js/compressed/logger.js b/framework/Web/Javascripts/js/compressed/logger.js
index aaef1482..728c81e5 100644
--- a/framework/Web/Javascripts/js/compressed/logger.js
+++ b/framework/Web/Javascripts/js/compressed/logger.js
@@ -26,7 +26,15 @@ return cookieArray},clear:function(name){this.set(name,"",-1)},clearAll:function
for(var i=0;i<cookies.length;i++){this.clear(cookies[i].name)}}}
Logger={logEntries:[],onupdate:new CustomEvent(),onclear:new CustomEvent(),log:function(message,tag){var logEntry=new LogEntry(message,tag||"info")
this.logEntries.push(logEntry)
-this.onupdate.dispatch(logEntry)},info:function(message){this.log(message,'info')},debug:function(message){this.log(message,'debug')},warn:function(message){this.log(message,'warning')},error:function(message,error){this.log(message+": \n"+error,'error')},clear:function(){this.logEntries=[]
+this.onupdate.dispatch(logEntry)},info:function(message){this.log(message,'info')
+if(typeof(console)!="undefined")
+console.info(message);},debug:function(message){this.log(message,'debug')
+if(typeof(console)!="undefined")
+console.debug(message);},warn:function(message){this.log(message,'warning')
+if(typeof(console)!="undefined")
+console.warn(message);},error:function(message,error){this.log(message+": \n"+error,'error')
+if(typeof(console)!="undefined")
+console.error(message);},clear:function(){this.logEntries=[]
this.onclear.dispatch()}}
LogEntry=Class.create()
LogEntry.prototype={initialize:function(message,tag){this.message=message
diff --git a/framework/Web/Javascripts/js/debug/ajax.js b/framework/Web/Javascripts/js/debug/ajax.js
index 246a94b3..5c1fbdcc 100644
--- a/framework/Web/Javascripts/js/debug/ajax.js
+++ b/framework/Web/Javascripts/js/debug/ajax.js
@@ -479,7 +479,7 @@ Object.extend(Prado.CallbackRequest,
msg += inspect(action)+"\n";
});
}
- Logger.warn(msg);
+ Logger.info(msg);
}
},
@@ -574,8 +574,9 @@ Object.extend(Prado.CallbackRequest,
//Logger.info("aborting ... "+inProgress);
if(inProgress)
{
- // Logger.warn("aborted "+inProgress.id)
- inProgress.request.transport.abort();
+ //abort if not ready.
+ if(inProgress.request.transport.readyState < 4)
+ inProgress.request.transport.abort();
clearTimeout(inProgress.timeout);
Prado.CallbackRequest.requestInProgress = null;
return true;
@@ -598,9 +599,11 @@ Object.extend(Prado.CallbackRequest,
else
{
if(typeof(Logger) != "undefined")
- Logger.debug("Bad page state:"+data);
+ Logger.warn("Missing page state:"+data);
+ return false;
}
}
+ return true;
}
})
diff --git a/framework/Web/Javascripts/js/debug/logger.js b/framework/Web/Javascripts/js/debug/logger.js
index 0609ec68..2a376904 100644
--- a/framework/Web/Javascripts/js/debug/logger.js
+++ b/framework/Web/Javascripts/js/debug/logger.js
@@ -46,7 +46,7 @@ CustomEvent.prototype = {
// ---------------
_findListenerIndexes : function(method) {
var indexes = []
- for(var i = 0; i < this.listeners.length; i++) {
+ for(var i = 0; i < this.listeners.length; i++) {
if (this.listeners[i] == method) {
indexes.push(i)
}
@@ -68,7 +68,7 @@ var Cookie = {
var date = new Date()
date.setDate(date.getDate() + expirationInDays)
cookie += "; expires=" + date.toGMTString()
- }
+ }
if (path) {
cookie += ";path=" + path
@@ -85,7 +85,7 @@ var Cookie = {
var pattern = "(^|;)\\s*" + escape(name) + "=([^;]+)"
var m = document.cookie.match(pattern)
- if (m && m[2]) {
+ if (m && m[2]) {
return unescape(m[2])
}
else return null
@@ -93,9 +93,9 @@ var Cookie = {
getAll : function() {
var cookies = document.cookie.split(';')
- var cookieArray = []
+ var cookieArray = []
- for (var i = 0; i < cookies.length; i++) {
+ for (var i = 0; i < cookies.length; i++) {
try {
var name = unescape(cookies[i].match(/^\s*([^=]+)/m)[1])
var value = unescape(cookies[i].match(/=(.*$)/m)[1])
@@ -108,7 +108,7 @@ var Cookie = {
if (cookieArray[name] != undefined) {
Logger.waring("Trying to retrieve cookie named(" + name + "). There appears to be another property with this name though.");
- }
+ }
cookieArray[name] = value
}
@@ -128,20 +128,20 @@ var Cookie = {
}
}
-}
+}
// ------
// Logger
-// -----
+// -----
Logger = {
logEntries : [],
onupdate : new CustomEvent(),
onclear : new CustomEvent(),
-
- // Logger output
+
+ // Logger output
log : function(message, tag) {
var logEntry = new LogEntry(message, tag || "info")
this.logEntries.push(logEntry)
@@ -150,28 +150,37 @@ Logger = {
info : function(message) {
this.log(message, 'info')
- },
+ if(typeof(console) != "undefined")
+ console.info(message);
+ },
debug : function(message) {
this.log(message, 'debug')
- },
+ if(typeof(console) != "undefined")
+ console.debug(message);
+ },
warn : function(message) {
this.log(message, 'warning')
+ if(typeof(console) != "undefined")
+ console.warn(message);
},
error : function(message, error) {
this.log(message + ": \n" + error, 'error')
+ if(typeof(console) != "undefined")
+ console.error(message);
+
},
clear : function () {
this.logEntries = []
this.onclear.dispatch()
}
-}
+}
LogEntry = Class.create()
-LogEntry.prototype = {
+LogEntry.prototype = {
initialize : function(message, tag) {
this.message = message
this.tag = tag
@@ -179,7 +188,7 @@ LogEntry.prototype = {
}
LogConsole = Class.create()
-LogConsole.prototype = {
+LogConsole.prototype = {
// Properties
// ----------
@@ -192,7 +201,7 @@ LogConsole.prototype = {
initialize : function() {
this.outputCount = 0
this.tagPattern = Cookie.get('tagPattern') || ".*"
-
+
// I hate writing javascript in HTML... but what's a better alternative
this.logElement = document.createElement('div')
document.body.appendChild(this.logElement)
@@ -205,81 +214,81 @@ LogConsole.prototype = {
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.logElement.style.backgroundColor = 'darkgray'
+ this.logElement.style.opacity = 0.9
+ this.logElement.style.zIndex = 2000
// Add toolbarElement
this.toolbarElement = document.createElement('div')
- this.logElement.appendChild(this.toolbarElement)
+ this.logElement.appendChild(this.toolbarElement)
this.toolbarElement.style.padding = "0 0 0 2px"
- // Add buttons
+ // Add buttons
this.buttonsContainerElement = document.createElement('span')
- this.toolbarElement.appendChild(this.buttonsContainerElement)
+ this.toolbarElement.appendChild(this.buttonsContainerElement)
this.buttonsContainerElement.innerHTML += '<button onclick="logConsole.toggle()" style="float:right;color:black">close</button>'
- this.buttonsContainerElement.innerHTML += '<button onclick="Logger.clear()" style="float:right;color:black">clear</button>'
+ this.buttonsContainerElement.innerHTML += '<button onclick="Logger.clear()" style="float:right;color:black">clear</button>'
if(!Prado.Inspector.disabled)
this.buttonsContainerElement.innerHTML += '<button onclick="Prado.Inspector.inspect()" style="float:right;color:black; margin-right:15px;">Object Tree</button>'
//Add Tag Filter
this.tagFilterContainerElement = document.createElement('span')
- this.toolbarElement.appendChild(this.tagFilterContainerElement)
+ 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.tagFilterContainerElement.appendChild(this.tagFilterElement)
+ this.tagFilterElement.style.width = '200px'
+ this.tagFilterElement.value = this.tagPattern
this.tagFilterElement.setAttribute('autocomplete', 'off') // So Firefox doesn't flip out
-
+
Event.observe(this.tagFilterElement, 'keyup', this.updateTags.bind(this))
- Event.observe(this.tagFilterElement, 'click', function() {this.tagFilterElement.select()}.bind(this))
-
+ Event.observe(this.tagFilterElement, 'click', function() {this.tagFilterElement.select()}.bind(this))
+
// Add outputElement
this.outputElement = document.createElement('div')
- this.logElement.appendChild(this.outputElement)
- this.outputElement.style.overflow = "auto"
+ 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.outputElement.style.backgroundColor = 'black'
+
this.inputContainerElement = document.createElement('div')
this.inputContainerElement.style.width = "100%"
- this.logElement.appendChild(this.inputContainerElement)
-
+ this.logElement.appendChild(this.inputContainerElement)
+
this.inputElement = document.createElement('input')
- this.inputContainerElement.appendChild(this.inputElement)
- this.inputElement.style.width = '100%'
+ this.inputContainerElement.appendChild(this.inputElement)
+ this.inputElement.style.width = '100%'
this.inputElement.style.borderWidth = '0px' // Inputs with 100% width always seem to be too large (I HATE THEM) they only work if the border, margin and padding are 0
this.inputElement.style.margin = '0px'
this.inputElement.style.padding = '0px'
- this.inputElement.value = 'Type command here'
+ this.inputElement.value = 'Type command here'
this.inputElement.setAttribute('autocomplete', 'off') // So Firefox doesn't flip out
Event.observe(this.inputElement, 'keyup', this.handleInput.bind(this))
- Event.observe(this.inputElement, 'click', function() {this.inputElement.select()}.bind(this))
+ Event.observe(this.inputElement, 'click', function() {this.inputElement.select()}.bind(this))
window.setInterval(this.repositionWindow.bind(this), 500)
this.repositionWindow()
-
+
// Listen to the logger....
Logger.onupdate.addListener(this.logUpdate.bind(this))
- Logger.onclear.addListener(this.clear.bind(this))
+ Logger.onclear.addListener(this.clear.bind(this))
// Preload log element with the log entries that have been entered
for (var i = 0; i < Logger.logEntries.length; i++) {
this.logUpdate(Logger.logEntries[i])
- }
-
+ }
+
// Feed all errors into the logger (For some unknown reason I can only get this to work
// with an inline event declaration)
Event.observe(window, 'error', function(msg, url, lineNumber) {Logger.error("Error in (" + (url || location) + ") on line "+lineNumber+"", msg)})
- // Allow acess key link
+ // Allow acess key link
var accessElement = document.createElement('span')
accessElement.innerHTML = '<button style="position:absolute;top:-100px" onclick="javascript:logConsole.toggle()" accesskey="d"></button>'
document.body.appendChild(accessElement)
@@ -296,43 +305,43 @@ LogConsole.prototype = {
else {
this.hide()
}
- },
-
+ },
+
show : function() {
Element.show(this.logElement)
this.outputElement.scrollTop = this.outputElement.scrollHeight // Scroll to bottom when toggled
Cookie.set('ConsoleVisible', 'true')
this.inputElement.select()
- },
-
+ },
+
hide : function() {
Element.hide(this.logElement)
Cookie.set('ConsoleVisible', 'false')
- },
-
+ },
+
output : function(message, style) {
- // If we are at the bottom of the window, then keep scrolling with the output
+ // If we are at the bottom of the window, then keep scrolling with the output
var shouldScroll = (this.outputElement.scrollTop + (2 * this.outputElement.clientHeight)) >= this.outputElement.scrollHeight
-
+
this.outputCount++
- style = (style ? style += ';' : '')
- style += 'padding:1px;margin:0 0 5px 0'
-
+ style = (style ? style += ';' : '')
+ style += 'padding:1px;margin:0 0 5px 0'
+
if (this.outputCount % 2 == 0) style += ";background-color:#101010"
-
+
message = message || "undefined"
message = message.toString().escapeHTML()
-
+
this.outputElement.innerHTML += "<pre style='" + style + "'>" + message + "</pre>"
-
- if (shouldScroll) {
+
+ if (shouldScroll) {
this.outputElement.scrollTop = this.outputElement.scrollHeight
}
},
-
+
updateTags : function() {
var pattern = this.tagFilterElement.value
-
+
if (this.tagPattern == pattern) return
try {
@@ -341,19 +350,19 @@ LogConsole.prototype = {
catch (e) {
return
}
-
+
this.tagPattern = pattern
Cookie.set('tagPattern', this.tagPattern)
this.outputElement.innerHTML = ""
-
+
// Go through each log entry again
this.outputCount = 0;
for (var i = 0; i < Logger.logEntries.length; i++) {
this.logUpdate(Logger.logEntries[i])
- }
+ }
},
-
+
repositionWindow : function() {
var offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
var pageHeight = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
@@ -380,35 +389,35 @@ LogConsole.prototype = {
},
handleInput : function(e) {
- if (e.keyCode == Event.KEY_RETURN ) {
+ if (e.keyCode == Event.KEY_RETURN ) {
var command = this.inputElement.value
-
+
switch(command) {
case "clear":
- Logger.clear()
+ Logger.clear()
break
-
- default:
- var consoleOutput = ""
-
+
+ default:
+ var consoleOutput = ""
+
try {
- consoleOutput = eval(this.inputElement.value)
+ consoleOutput = eval(this.inputElement.value)
}
- catch (e) {
- Logger.error("Problem parsing input <" + command + ">", e)
+ catch (e) {
+ Logger.error("Problem parsing input <" + command + ">", e)
break
}
-
- Logger.log(consoleOutput)
+
+ Logger.log(consoleOutput)
break
- }
-
+ }
+
if (this.inputElement.value != "" && this.inputElement.value != this.commandHistory[0]) {
this.commandHistory.unshift(this.inputElement.value)
}
-
- this.commandIndex = 0
- 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]
@@ -416,23 +425,23 @@ LogConsole.prototype = {
if (this.commandIndex < this.commandHistory.length - 1) {
this.commandIndex += 1
}
- }
+ }
else if (e.keyCode == Event.KEY_DOWN && this.commandHistory.length > 0) {
- if (this.commandIndex > 0) {
+ if (this.commandIndex > 0) {
this.commandIndex -= 1
- }
+ }
this.inputElement.value = this.commandHistory[this.commandIndex]
- }
+ }
else {
this.commandIndex = 0
}
- }
-}
+ }
+}
// Load the Console when the window loads
var logConsole;
-Event.OnLoad(function() { logConsole = new LogConsole()});
+Event.OnLoad(function() { logConsole = new LogConsole()});
@@ -440,7 +449,7 @@ Event.OnLoad(function() { logConsole = new LogConsole()});
// -------------------------
// Helper Functions And Junk
// -------------------------
-function inspect(o)
+function inspect(o)
{
var objtype = typeof(o);
if (objtype == "undefined") {
@@ -457,7 +466,7 @@ function inspect(o)
return "[" + typeof(o) + "]";
}
- if (typeof(o) == "function")
+ if (typeof(o) == "function")
{
o = ostring.replace(/^\s+/, "");
var idx = o.indexOf("{");
@@ -466,9 +475,9 @@ function inspect(o)
}
return o;
}
-
- var reprString = function (o)
- {
+
+ var reprString = function (o)
+ {
return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
).replace(/[\f]/g, "\\f"
).replace(/[\b]/g, "\\b"
@@ -509,7 +518,7 @@ function inspect(o)
}
return "[" + res.join(", ") + "]";
}
-
+
// generic object code path
res = [];
for (var k in o) {
@@ -530,7 +539,7 @@ function inspect(o)
res.push(useKey + ":" + val);
}
return "{" + res.join(", ") + "}";
-}
+}
Array.prototype.contains = function(object) {
for(var i = 0; i < this.length; i++) {
@@ -538,10 +547,10 @@ Array.prototype.contains = function(object) {
}
return false
-}
+}
// Helper Alias for simple logging
-var puts = function() {return Logger.log(arguments[0], arguments[1])}
+var puts = function() {return Logger.log(arguments[0], arguments[1])}
/*************************************
@@ -550,23 +559,23 @@ var puts = function() {return Logger.log(arguments[0], arguments[1])}
last revision:04.11.2004
steve@slayeroffice.com
http://slayeroffice.com
-
+
(c)2004 S.G. Chipman
Please notify me of any modifications
- you make to this code so that I can
+ you make to this code so that I can
update the version hosted on slayeroffice.com
************************************/
if(typeof Prado == "undefined")
var Prado = {};
-Prado.Inspector =
+Prado.Inspector =
{
- d : document,
+ d : document,
types : new Array(),
objs : new Array(),
- hidden : new Array(),
+ hidden : new Array(),
opera : window.opera,
displaying : '',
nameList : new Array(),
@@ -583,23 +592,23 @@ Prado.Inspector =
if(typeof obj == "string") { name = obj; obj = eval(obj); }
win= typeof obj == 'undefined' ? window : obj;
this.displaying = name ? name : win.toString();
- for(js in win) {
+ for(js in win) {
try {
if(win[js] && js.toString().indexOf("Inspector")==-1 && (win[js]+"").indexOf("[native code]")==-1) {
-
+
t=typeof(win[js]);
- if(!this.objs[t.toString()]) {
+ if(!this.objs[t.toString()]) {
this.types[this.types.length]=t;
this.objs[t]={};
this.nameList[t] = new Array();
}
this.nameList[t].push(js);
- this.objs[t][js] = this.format(win[js]+"");
+ this.objs[t][js] = this.format(win[js]+"");
}
} catch(err) { }
}
- for(i=0;i<this.types.length;i++)
+ for(i=0;i<this.types.length;i++)
this.nameList[this.types[i]].sort();
},
@@ -626,7 +635,7 @@ Prado.Inspector =
for(var i = 0; i < list.length; i++)
{
name += (name.length ? "." : "") + list[i];
- links[i+1] = "<a href=\"javascript:var_dump('"+name+"')\">"+list[i]+"</a>";
+ links[i+1] = "<a href=\"javascript:var_dump('"+name+"')\">"+list[i]+"</a>";
}
return links.join(".");
},
@@ -636,11 +645,11 @@ Prado.Inspector =
mHTML +="<ul class=\"topLevel\">";
this.types.sort();
var so_objIndex=0;
- for(i=0;i<this.types.length;i++)
+ for(i=0;i<this.types.length;i++)
{
mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('ul"+i+"');Prado.Inspector.changeSpan('sp" + i + "')\"><span id=\"sp" + i + "\">[+]</span><b>" + this.types[i] + "</b> (" + this.nameList[this.types[i]].length + ")</li><ul style=\"display:none;\" id=\"ul"+i+"\">";
this.hidden["ul"+i]=0;
- for(e=0;e<this.nameList[this.types[i]].length;e++)
+ for(e=0;e<this.nameList[this.types[i]].length;e++)
{
var prop = this.nameList[this.types[i]][e];
var value = this.objs[this.types[i]][prop]
@@ -650,7 +659,7 @@ Prado.Inspector =
if(this.displaying.indexOf("[object ") < 0)
more = " <a href=\"javascript:var_dump('"+this.displaying+"."+prop+"')\"><b>more</b></a>";
else if(this.displaying.indexOf("[object Window]") >= 0)
- more = " <a href=\"javascript:var_dump('"+prop+"')\"><b>more</b></a>";
+ more = " <a href=\"javascript:var_dump('"+prop+"')\"><b>more</b></a>";
}
mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('mul" + so_objIndex + "');Prado.Inspector.changeSpan('sk" + so_objIndex + "')\"><span id=\"sk" + so_objIndex + "\">[+]</span>" + prop + "</li><ul id=\"mul" + so_objIndex + "\" style=\"display:none;\"><li style=\"list-style-type:none;\"><pre>" + value + more + "</pre></li></ul>";
this.hidden["mul"+so_objIndex]=0;
@@ -669,7 +678,7 @@ Prado.Inspector =
}
},
- cleanUp : function()
+ cleanUp : function()
{
if(this.d.getElementById("so_mContainer"))
{
@@ -685,7 +694,7 @@ Prado.Inspector =
disabled : document.all && !this.opera,
- inspect : function(obj)
+ inspect : function(obj)
{
if(this.disabled)return alert("Sorry, this only works in Mozilla and Firefox currently.");
this.cleanUp();
@@ -709,12 +718,12 @@ Prado.Inspector =
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; } " +
+ 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 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 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; }"
@@ -727,5 +736,7 @@ function var_dump(obj)
}
//similar function to print_r for PHP
-var print_r = inspect;
+var print_r = inspect;
+
+
diff --git a/framework/Web/Javascripts/prado/ajax3.js b/framework/Web/Javascripts/prado/ajax3.js
index 8ae6b064..5374387d 100644
--- a/framework/Web/Javascripts/prado/ajax3.js
+++ b/framework/Web/Javascripts/prado/ajax3.js
@@ -191,7 +191,7 @@ Object.extend(Prado.CallbackRequest,
msg += inspect(action)+"\n";
});
}
- Logger.warn(msg);
+ Logger.info(msg);
}
},
@@ -286,8 +286,9 @@ Object.extend(Prado.CallbackRequest,
//Logger.info("aborting ... "+inProgress);
if(inProgress)
{
- // Logger.warn("aborted "+inProgress.id)
- inProgress.request.transport.abort();
+ //abort if not ready.
+ if(inProgress.request.transport.readyState < 4)
+ inProgress.request.transport.abort();
clearTimeout(inProgress.timeout);
Prado.CallbackRequest.requestInProgress = null;
return true;
@@ -310,9 +311,11 @@ Object.extend(Prado.CallbackRequest,
else
{
if(typeof(Logger) != "undefined")
- Logger.debug("Bad page state:"+data);
+ Logger.warn("Missing page state:"+data);
+ return false;
}
}
+ return true;
}
})