2011-08-08 00:27:23 +02:00
var core = { } ; core . ColorPicker = function ( ) { this . palette = "7x10" ;
this . _palettes = { "7x10" : [ [ "fff" , "fcc" , "fc9" , "ff9" , "ffc" , "9f9" , "9ff" , "cff" , "ccf" , "fcf" ] , [ "ccc" , "f66" , "f96" , "ff6" , "ff3" , "6f9" , "3ff" , "6ff" , "99f" , "f9f" ] , [ "c0c0c0" , "f00" , "f90" , "fc6" , "ff0" , "3f3" , "6cc" , "3cf" , "66c" , "c6c" ] , [ "999" , "c00" , "f60" , "fc3" , "fc0" , "3c0" , "0cc" , "36f" , "63f" , "c3c" ] , [ "666" , "900" , "c60" , "c93" , "990" , "090" , "399" , "33f" , "60c" , "939" ] , [ "333" , "600" , "930" , "963" , "660" , "060" , "366" , "009" , "339" , "636" ] , [ "000" , "300" , "630" , "633" , "330" , "030" , "033" , "006" , "309" , "303" ] ] , "3x4" : [ [ "ffffff" , "00ff00" , "008000" , "0000ff" ] , [ "c0c0c0" , "ffff00" , "ff00ff" , "000080" ] , [ "808080" , "ff0000" , "800080" , "000000" ] ] }
} ;
core . ColorPicker . buildRendering = function ( ) { this . domNode = document . createElement ( "table" ) ;
with ( this . domNode ) { cellPadding = "0" ;
cellSpacing = "1" ;
border = "1" ;
style . backgroundColor = "white"
} var colors = this . _palettes [ this . palette ] ;
for ( var i = 0 ;
i < colors . length ;
i ++ ) { var tr = this . domNode . insertRow ( - 1 ) ;
for ( var j = 0 ;
j < colors [ i ] . length ;
j ++ ) { if ( colors [ i ] [ j ] . length == 3 ) { colors [ i ] [ j ] = colors [ i ] [ j ] . replace ( /(.)(.)(.)/ , "$1$1$2$2$3$3" )
} var td = tr . insertCell ( - 1 ) ;
with ( td . style ) { backgroundColor = "#" + colors [ i ] [ j ] ;
border = "1px solid gray" ;
width = height = "15px" ;
fontSize = "1px"
} td . color = "#" + colors [ i ] [ j ] ;
td . onmouseover = function ( e ) { this . style . borderColor = "white"
} ;
td . onmouseout = function ( e ) { this . style . borderColor = "gray"
} ;
td . innerHTML = " "
} } } ;
core . ColorPicker . onClick = function ( e ) { this . onColorSelect ( e . currentTarget . color ) ;
e . currentTarget . style . borderColor = "gray"
} ;
core . ColorPicker . onColorSelect = function ( color ) { } ; core . Loader = { load : function ( scriptPath , stylePath , jsFileName ) { var headElement = document . getElementsByTagName ( "head" ) ;
var htmlDoc = headElement . item ( 0 ) ;
var baseUrl = this . baseUrl ( jsFileName ) ;
if ( scriptPath && scriptPath . length > 0 ) { for ( var i = 0 ;
i < scriptPath . length ;
i ++ ) { this . includeScriptNode ( baseUrl + scriptPath [ i ] )
} } if ( stylePath && stylePath . length > 0 ) { for ( var i = 0 ;
i < stylePath . length ;
i ++ ) { this . includeStyleNode ( baseUrl + stylePath [ i ] )
} } } , baseUrl : function ( jsFileName ) { var headElement = document . getElementsByTagName ( "head" ) ;
var htmlDoc = headElement . item ( 0 ) ;
var headChildren = htmlDoc . childNodes ;
var result = null ;
for ( var i = 0 ;
i < headChildren . length ;
i ++ ) { var node = headChildren . item ( i ) ;
if ( node . nodeName && node . nodeName . toLowerCase ( ) == "script" ) { var libraryUrl = node . src ;
if ( libraryUrl . indexOf ( jsFileName ) != - 1 ) { var index = libraryUrl . lastIndexOf ( "/" ) ;
index = libraryUrl . lastIndexOf ( "/" , index - 1 ) ;
result = libraryUrl . substring ( 0 , index )
} } } if ( result == null ) { throw "Could not obtain the base url directory."
} return result
} , includeScriptNode : function ( filename ) { var html _doc = document . getElementsByTagName ( "head" ) . item ( 0 ) ;
var js = document . createElement ( "script" ) ;
js . setAttribute ( "language" , "javascript" ) ;
js . setAttribute ( "type" , "text/javascript" ) ;
js . setAttribute ( "src" , filename ) ;
html _doc . appendChild ( js ) ;
return false
} , includeStyleNode : function ( filename ) { var html _doc = document . getElementsByTagName ( "head" ) . item ( 0 ) ;
var js = document . createElement ( "link" ) ;
js . setAttribute ( "rel" , "stylesheet" ) ;
js . setAttribute ( "type" , "text/css" ) ;
js . setAttribute ( "href" , filename ) ;
html _doc . appendChild ( js ) ;
return false
} } ; var Log4js = { version : "1.0" , applicationStartDate : new Date ( ) , loggers : { } , getLogger : function ( categoryName ) { if ( ! ( typeof categoryName == "string" ) ) { categoryName = "[default]"
} if ( ! Log4js . loggers [ categoryName ] ) { Log4js . loggers [ categoryName ] = new Log4js . Logger ( categoryName )
} return Log4js . loggers [ categoryName ]
} , getDefaultLogger : function ( ) { return Log4js . getLogger ( "[default]" )
} , attachEvent : function ( element , name , observer ) { if ( element . addEventListener ) { element . addEventListener ( name , observer , false )
} else { if ( element . attachEvent ) { element . attachEvent ( "on" + name , observer )
} } } } ;
Log4js . extend = function ( destination , source ) { for ( property in source ) { destination [ property ] = source [ property ]
} return destination
} ;
Log4js . bind = function ( fn , object ) { return function ( ) { return fn . apply ( object , arguments )
}
} ;
Log4js . Level = function ( level , levelStr ) { this . level = level ;
this . levelStr = levelStr
} ;
Log4js . Level . prototype = { toLevel : function ( sArg , defaultLevel ) { if ( sArg === null ) { return defaultLevel
} if ( typeof sArg == "string" ) { var s = sArg . toUpperCase ( ) ;
if ( s == "ALL" ) { return Log4js . Level . ALL
} if ( s == "DEBUG" ) { return Log4js . Level . DEBUG
} if ( s == "INFO" ) { return Log4js . Level . INFO
} if ( s == "WARN" ) { return Log4js . Level . WARN
} if ( s == "ERROR" ) { return Log4js . Level . ERROR
} if ( s == "FATAL" ) { return Log4js . Level . FATAL
} if ( s == "OFF" ) { return Log4js . Level . OFF
} if ( s == "TRACE" ) { return Log4js . Level . TRACE
} return defaultLevel
} else { if ( typeof sArg == "number" ) { switch ( sArg ) { case ALL _INT : return Log4js . Level . ALL ;
case DEBUG _INT : return Log4js . Level . DEBUG ;
case INFO _INT : return Log4js . Level . INFO ;
case WARN _INT : return Log4js . Level . WARN ;
case ERROR _INT : return Log4js . Level . ERROR ;
case FATAL _INT : return Log4js . Level . FATAL ;
case OFF _INT : return Log4js . Level . OFF ;
case TRACE _INT : return Log4js . Level . TRACE ;
default : return defaultLevel
} } else { return defaultLevel
} } } , toString : function ( ) { return this . levelStr
} , valueOf : function ( ) { return this . level
} } ;
Log4js . Level . OFF _INT = Number . MAX _VALUE ;
Log4js . Level . FATAL _INT = 50000 ;
Log4js . Level . ERROR _INT = 40000 ;
Log4js . Level . WARN _INT = 30000 ;
Log4js . Level . INFO _INT = 20000 ;
Log4js . Level . DEBUG _INT = 10000 ;
Log4js . Level . TRACE _INT = 5000 ;
Log4js . Level . ALL _INT = Number . MIN _VALUE ;
Log4js . Level . OFF = new Log4js . Level ( Log4js . Level . OFF _INT , "OFF" ) ;
Log4js . Level . FATAL = new Log4js . Level ( Log4js . Level . FATAL _INT , "FATAL" ) ;
Log4js . Level . ERROR = new Log4js . Level ( Log4js . Level . ERROR _INT , "ERROR" ) ;
Log4js . Level . WARN = new Log4js . Level ( Log4js . Level . WARN _INT , "WARN" ) ;
Log4js . Level . INFO = new Log4js . Level ( Log4js . Level . INFO _INT , "INFO" ) ;
Log4js . Level . DEBUG = new Log4js . Level ( Log4js . Level . DEBUG _INT , "DEBUG" ) ;
Log4js . Level . TRACE = new Log4js . Level ( Log4js . Level . TRACE _INT , "TRACE" ) ;
Log4js . Level . ALL = new Log4js . Level ( Log4js . Level . ALL _INT , "ALL" ) ;
Log4js . CustomEvent = function ( ) { this . listeners = [ ]
} ;
Log4js . CustomEvent . prototype = { addListener : function ( method ) { this . listeners . push ( method )
} , removeListener : function ( method ) { var foundIndexes = this . findListenerIndexes ( method ) ;
for ( var i = 0 ;
i < foundIndexes . length ;
i ++ ) { this . listeners . splice ( foundIndexes [ i ] , 1 )
} } , dispatch : function ( handler ) { for ( var i = 0 ;
i < this . listeners . length ;
i ++ ) { try { this . listeners [ i ] ( handler )
} catch ( e ) { log4jsLogger . warn ( "Could not run the listener " + this . listeners [ i ] + ". \n" + e )
} } } , findListenerIndexes : function ( method ) { var indexes = [ ] ;
for ( var i = 0 ;
i < this . listeners . length ;
i ++ ) { if ( this . listeners [ i ] == method ) { indexes . push ( i )
} } return indexes
} } ;
Log4js . LoggingEvent = function ( categoryName , level , message , exception , logger ) { this . startTime = new Date ( ) ;
this . categoryName = categoryName ;
this . message = message ;
this . exception = exception ;
this . level = level ;
this . logger = logger
} ;
Log4js . LoggingEvent . prototype = { getFormattedTimestamp : function ( ) { if ( this . logger ) { return this . logger . getFormattedTimestamp ( this . startTime )
} else { return this . startTime . toGMTString ( )
} } } ;
Log4js . Logger = function ( name ) { this . loggingEvents = [ ] ;
this . appenders = [ ] ;
this . category = name || "" ;
this . level = Log4js . Level . FATAL ;
this . dateformat = Log4js . DateFormatter . DEFAULT _DATE _FORMAT ;
this . dateformatter = new Log4js . DateFormatter ( ) ;
this . onlog = new Log4js . CustomEvent ( ) ;
this . onclear = new Log4js . CustomEvent ( ) ;
this . appenders . push ( new Log4js . Appender ( this ) ) ;
try { window . onerror = this . windowError . bind ( this )
} catch ( e ) { } } ;
Log4js . Logger . prototype = { addAppender : function ( appender ) { if ( appender instanceof Log4js . Appender ) { appender . setLogger ( this ) ;
this . appenders . push ( appender )
} else { throw "Not instance of an Appender: " + appender
} } , setAppenders : function ( appenders ) { for ( var i = 0 ;
i < this . appenders . length ;
i ++ ) { this . appenders [ i ] . doClear ( )
} this . appenders = appenders ;
for ( var j = 0 ;
j < this . appenders . length ;
j ++ ) { this . appenders [ j ] . setLogger ( this )
} } , setLevel : function ( level ) { this . level = level
} , log : function ( logLevel , message , exception ) { var loggingEvent = new Log4js . LoggingEvent ( this . category , logLevel , message , exception , this ) ;
this . loggingEvents . push ( loggingEvent ) ;
this . onlog . dispatch ( loggingEvent )
} , clear : function ( ) { try { this . loggingEvents = [ ] ;
this . onclear . dispatch ( )
} catch ( e ) { } } , isTraceEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . TRACE . valueOf ( ) ) { return true
} return false
} , trace : function ( message ) { if ( this . isTraceEnabled ( ) ) { this . log ( Log4js . Level . TRACE , message , null )
} } , isDebugEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . DEBUG . valueOf ( ) ) { return true
} return false
} , debug : function ( message ) { if ( this . isDebugEnabled ( ) ) { this . log ( Log4js . Level . DEBUG , message , null )
} } , debug : function ( message , throwable ) { if ( this . isDebugEnabled ( ) ) { this . log ( Log4js . Level . DEBUG , message , throwable )
} } , isInfoEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . INFO . valueOf ( ) ) { return true
} return false
} , info : function ( message ) { if ( this . isInfoEnabled ( ) ) { this . log ( Log4js . Level . INFO , message , null )
} } , info : function ( message , throwable ) { if ( this . isInfoEnabled ( ) ) { this . log ( Log4js . Level . INFO , message , throwable )
} } , isWarnEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . WARN . valueOf ( ) ) { return true
} return false
} , warn : function ( message ) { if ( this . isWarnEnabled ( ) ) { this . log ( Log4js . Level . WARN , message , null )
} } , warn : function ( message , throwable ) { if ( this . isWarnEnabled ( ) ) { this . log ( Log4js . Level . WARN , message , throwable )
} } , isErrorEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . ERROR . valueOf ( ) ) { return true
} return false
} , error : function ( message ) { if ( this . isErrorEnabled ( ) ) { this . log ( Log4js . Level . ERROR , message , null )
} } , error : function ( message , throwable ) { if ( this . isErrorEnabled ( ) ) { this . log ( Log4js . Level . ERROR , message , throwable )
} } , isFatalEnabled : function ( ) { if ( this . level . valueOf ( ) <= Log4js . Level . FATAL . valueOf ( ) ) { return true
} return false
} , fatal : function ( message ) { if ( this . isFatalEnabled ( ) ) { this . log ( Log4js . Level . FATAL , message , null )
} } , fatal : function ( message , throwable ) { if ( this . isFatalEnabled ( ) ) { this . log ( Log4js . Level . FATAL , message , throwable )
} } , windowError : function ( msg , url , line ) { var message = "Error in (" + ( url || window . location ) + ") on line " + line + " with message (" + msg + ")" ;
this . log ( Log4js . Level . FATAL , message , null )
} , setDateFormat : function ( format ) { this . dateformat = format
} , getFormattedTimestamp : function ( date ) { return this . dateformatter . formatDate ( date , this . dateformat )
} } ;
Log4js . Appender = function ( ) { this . logger = null
} ;
Log4js . Appender . prototype = { doAppend : function ( loggingEvent ) { return
} , doClear : function ( ) { return
} , setLayout : function ( layout ) { this . layout = layout
} , setLogger : function ( logger ) { logger . onlog . addListener ( Log4js . bind ( this . doAppend , this ) ) ;
logger . onclear . addListener ( Log4js . bind ( this . doClear , this ) ) ;
this . logger = logger
} } ;
Log4js . Layout = function ( ) { return
} ;
Log4js . Layout . prototype = { format : function ( loggingEvent ) { return ""
} , getContentType : function ( ) { return "text/plain"
} , getHeader : function ( ) { return null
} , getFooter : function ( ) { return null
} , getSeparator : function ( ) { return ""
} } ;
Log4js . ConsoleAppender = function ( isInline ) { this . layout = new Log4js . PatternLayout ( Log4js . PatternLayout . TTCC _CONVERSION _PATTERN ) ;
this . inline = isInline ;
this . accesskey = "d" ;
this . tagPattern = null ;
this . commandHistory = [ ] ;
this . commandIndex = 0 ;
this . popupBlocker = false ;
this . outputElement = null ;
this . docReference = null ;
this . winReference = null ;
if ( this . inline ) { Log4js . attachEvent ( window , "load" , Log4js . bind ( this . initialize , this ) )
} } ;
Log4js . ConsoleAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { setAccessKey : function ( key ) { this . accesskey = key
} , initialize : function ( ) { if ( ! this . inline ) { var doc = null ;
var win = null ;
window . top . consoleWindow = window . open ( "" , this . logger . category , "left=0,top=0,width=700,height=700,scrollbars=no,status=no,resizable=yes;toolbar=no" ) ;
window . top . consoleWindow . opener = self ;
win = window . top . consoleWindow ;
if ( ! win ) { this . popupBlocker = true ;
alert ( "Popup window manager blocking the Log4js popup window to bedisplayed.\n\nPlease disabled this to properly see logged events." )
} else { doc = win . document ;
doc . open ( ) ;
doc . write ( "<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN " ) ;
doc . write ( " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>\n\n" ) ;
doc . write ( "<html><head><title>Log4js - " + this . logger . category + "</title>\n" ) ;
doc . write ( '</head><body style="background-color:darkgray"></body>\n' ) ;
win . blur ( ) ;
win . focus ( )
} this . docReference = doc ;
this . winReference = win
} else { this . docReference = document ;
this . winReference = window
} this . outputCount = 0 ;
this . tagPattern = ".*" ;
this . logElement = this . docReference . createElement ( "div" ) ;
this . docReference . body . appendChild ( this . logElement ) ;
this . logElement . style . display = "none" ;
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 = this . docReference . createElement ( "div" ) ;
this . logElement . appendChild ( this . toolbarElement ) ;
this . toolbarElement . style . padding = "0 0 0 2px" ;
this . buttonsContainerElement = this . docReference . createElement ( "span" ) ;
this . toolbarElement . appendChild ( this . buttonsContainerElement ) ;
if ( this . inline ) { var closeButton = this . docReference . createElement ( "button" ) ;
closeButton . style . cssFloat = "right" ;
closeButton . style . styleFloat = "right" ;
closeButton . style . color = "black" ;
closeButton . innerHTML = "close" ;
closeButton . onclick = Log4js . bind ( this . toggle , this ) ;
this . buttonsContainerElement . appendChild ( closeButton )
} var clearButton = this . docReference . createElement ( "button" ) ;
clearButton . style . cssFloat = "right" ;
clearButton . style . styleFloat = "right" ;
clearButton . style . color = "black" ;
clearButton . innerHTML = "clear" ;
clearButton . onclick = Log4js . bind ( this . logger . clear , this . logger ) ;
this . buttonsContainerElement . appendChild ( clearButton ) ;
this . tagFilterContainerElement = this . docReference . createElement ( "span" ) ;
this . toolbarElement . appendChild ( this . tagFilterContainerElement ) ;
this . tagFilterContainerElement . style . cssFloat = "left" ;
this . tagFilterContainerElement . appendChild ( this . docReference . createTextNode ( "Log4js - " + this . logger . category ) ) ;
this . tagFilterContainerElement . appendChild ( this . docReference . createTextNode ( " | Level Filter: " ) ) ;
this . tagFilterElement = this . docReference . createElement ( "input" ) ;
this . tagFilterContainerElement . appendChild ( this . tagFilterElement ) ;
this . tagFilterElement . style . width = "200px" ;
this . tagFilterElement . value = this . tagPattern ;
this . tagFilterElement . setAttribute ( "autocomplete" , "off" ) ;
Log4js . attachEvent ( this . tagFilterElement , "keyup" , Log4js . bind ( this . updateTags , this ) ) ;
Log4js . attachEvent ( this . tagFilterElement , "click" , Log4js . bind ( function ( ) { this . tagFilterElement . select ( )
} , this ) ) ;
this . outputElement = this . docReference . createElement ( "div" ) ;
this . logElement . appendChild ( this . outputElement ) ;
this . outputElement . style . overflow = "auto" ;
this . outputElement . style . clear = "both" ;
this . outputElement . style . height = ( this . inline ) ? ( "200px" ) : ( "650px" ) ;
this . outputElement . style . width = "100%" ;
this . outputElement . style . backgroundColor = "black" ;
this . inputContainerElement = this . docReference . createElement ( "div" ) ;
this . inputContainerElement . style . width = "100%" ;
this . logElement . appendChild ( this . inputContainerElement ) ;
this . inputElement = this . docReference . 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" ) ;
Log4js . attachEvent ( this . inputElement , "keyup" , Log4js . bind ( this . handleInput , this ) ) ;
Log4js . attachEvent ( this . inputElement , "click" , Log4js . bind ( function ( ) { this . inputElement . select ( )
} , this ) ) ;
if ( this . inline ) { window . setInterval ( Log4js . bind ( this . repositionWindow , this ) , 500 ) ;
this . repositionWindow ( ) ;
var accessElement = this . docReference . createElement ( "button" ) ;
accessElement . style . position = "absolute" ;
accessElement . style . top = "-100px" ;
accessElement . accessKey = this . accesskey ;
accessElement . onclick = Log4js . bind ( this . toggle , this ) ;
this . docReference . body . appendChild ( accessElement )
} else { this . show ( )
} } , toggle : function ( ) { if ( this . logElement . style . display == "none" ) { this . show ( ) ;
return true
} else { this . hide ( ) ;
return false
} } , show : function ( ) { this . logElement . style . display = "" ;
this . outputElement . scrollTop = this . outputElement . scrollHeight ;
this . inputElement . select ( )
} , hide : function ( ) { this . logElement . style . display = "none"
} , output : function ( message , style ) { 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" ;
if ( this . outputCount % 2 === 0 ) { style += ";background-color:#101010"
} message = message || "undefined" ;
message = message . toString ( ) ;
this . outputElement . innerHTML += "<pre style='" + style + "'>" + message + "</pre>" ;
if ( shouldScroll ) { this . outputElement . scrollTop = this . outputElement . scrollHeight
} } , updateTags : function ( ) { var pattern = this . tagFilterElement . value ;
if ( this . tagPattern == pattern ) { return
} try { new RegExp ( pattern )
} catch ( e ) { return
} this . tagPattern = pattern ;
this . outputElement . innerHTML = "" ;
this . outputCount = 0 ;
for ( var i = 0 ;
i < this . logger . loggingEvents . length ;
i ++ ) { this . doAppend ( this . logger . loggingEvents [ i ] )
} } , repositionWindow : function ( ) { var offset = window . pageYOffset || this . docReference . documentElement . scrollTop || this . docReference . body . scrollTop ;
var pageHeight = self . innerHeight || this . docReference . documentElement . clientHeight || this . docReference . body . clientHeight ;
this . logElement . style . top = ( offset + pageHeight - this . logElement . offsetHeight ) + "px"
} , doAppend : function ( loggingEvent ) { if ( this . popupBlocker ) { return
} if ( ( ! this . inline ) && ( ! this . winReference || this . winReference . closed ) ) { this . initialize ( )
} if ( this . tagPattern !== null && loggingEvent . level . toString ( ) . search ( new RegExp ( this . tagPattern , "igm" ) ) == - 1 ) { return
} var style = "" ;
if ( loggingEvent . level . toString ( ) . search ( /ERROR/ ) != - 1 ) { style += "color:red"
} else { if ( loggingEvent . level . toString ( ) . search ( /FATAL/ ) != - 1 ) { style += "color:red"
} else { if ( loggingEvent . level . toString ( ) . search ( /WARN/ ) != - 1 ) { style += "color:orange"
} else { if ( loggingEvent . level . toString ( ) . search ( /DEBUG/ ) != - 1 ) { style += "color:green"
} else { if ( loggingEvent . level . toString ( ) . search ( /INFO/ ) != - 1 ) { style += "color:white"
} else { style += "color:yellow"
} } } } } this . output ( this . layout . format ( loggingEvent ) , style )
} , doClear : function ( ) { this . outputElement . innerHTML = ""
} , handleInput : function ( e ) { if ( e . keyCode == 13 ) { var command = this . inputElement . value ;
switch ( command ) { case "clear" : this . logger . clear ( ) ;
break ;
default : var consoleOutput = "" ;
try { consoleOutput = eval ( this . inputElement . value )
} catch ( e ) { this . logger . error ( "Problem parsing input <" + command + ">" + e . message ) ;
break
} this . logger . trace ( consoleOutput ) ;
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 == 38 && this . commandHistory . length > 0 ) { this . inputElement . value = this . commandHistory [ this . commandIndex ] ;
if ( this . commandIndex < this . commandHistory . length - 1 ) { this . commandIndex += 1
} } else { if ( e . keyCode == 40 && this . commandHistory . length > 0 ) { if ( this . commandIndex > 0 ) { this . commandIndex -= 1
} this . inputElement . value = this . commandHistory [ this . commandIndex ]
} else { this . commandIndex = 0
} } } } , toString : function ( ) { return "Log4js.ConsoleAppender[inline=" + this . inline + "]"
} } ) ;
Log4js . MetatagAppender = function ( ) { this . currentLine = 0
} ;
Log4js . MetatagAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { var now = new Date ( ) ;
var lines = loggingEvent . message . split ( "\n" ) ;
var headTag = document . getElementsByTagName ( "head" ) [ 0 ] ;
for ( var i = 1 ;
i <= lines . length ;
i ++ ) { var value = lines [ i - 1 ] ;
if ( i == 1 ) { value = loggingEvent . level . toString ( ) + ": " + value
} else { value = "> " + value
} var metaTag = document . createElement ( "meta" ) ;
metaTag . setAttribute ( "name" , "X-log4js:" + this . currentLine ) ;
metaTag . setAttribute ( "content" , value ) ;
headTag . appendChild ( metaTag ) ;
this . currentLine += 1
} } , toString : function ( ) { return "Log4js.MetatagAppender"
} } ) ;
Log4js . AjaxAppender = function ( loggingUrl ) { this . isInProgress = false ;
this . loggingUrl = loggingUrl || "logging.log4js" ;
this . threshold = 1 ;
this . timeout = 2000 ;
this . loggingEventMap = new Log4js . FifoBuffer ( ) ;
this . layout = new Log4js . XMLLayout ( ) ;
this . httpRequest = null
} ;
Log4js . AjaxAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { log4jsLogger . trace ( "> AjaxAppender.append" ) ;
if ( this . loggingEventMap . length ( ) <= this . threshold || this . isInProgress === true ) { this . loggingEventMap . push ( loggingEvent )
} if ( this . loggingEventMap . length ( ) >= this . threshold && this . isInProgress === false ) { this . send ( )
} log4jsLogger . trace ( "< AjaxAppender.append" )
} , doClear : function ( ) { log4jsLogger . trace ( "> AjaxAppender.doClear" ) ;
if ( this . loggingEventMap . length ( ) > 0 ) { this . send ( )
} log4jsLogger . trace ( "< AjaxAppender.doClear" )
} , setThreshold : function ( threshold ) { log4jsLogger . trace ( "> AjaxAppender.setThreshold: " + threshold ) ;
this . threshold = threshold ;
log4jsLogger . trace ( "< AjaxAppender.setThreshold" )
} , setTimeout : function ( milliseconds ) { this . timeout = milliseconds
} , send : function ( ) { if ( this . loggingEventMap . length ( ) > 0 ) { log4jsLogger . trace ( "> AjaxAppender.send" ) ;
this . isInProgress = true ;
var a = [ ] ;
for ( var i = 0 ;
i < this . loggingEventMap . length ( ) && i < this . threshold ;
i ++ ) { a . push ( this . layout . format ( this . loggingEventMap . pull ( ) ) )
} var content = this . layout . getHeader ( ) ;
content += a . join ( this . layout . getSeparator ( ) ) ;
content += this . layout . getFooter ( ) ;
var appender = this ;
if ( this . httpRequest === null ) { this . httpRequest = this . getXmlHttpRequest ( )
} this . httpRequest . onreadystatechange = function ( ) { appender . onReadyStateChanged . call ( appender )
} ;
this . httpRequest . open ( "POST" , this . loggingUrl , true ) ;
this . httpRequest . setRequestHeader ( "Content-type" , this . layout . getContentType ( ) ) ;
this . httpRequest . setRequestHeader ( "REFERER" , location . href ) ;
this . httpRequest . setRequestHeader ( "Content-length" , content . length ) ;
this . httpRequest . setRequestHeader ( "Connection" , "close" ) ;
this . httpRequest . send ( content ) ;
appender = this ;
try { window . setTimeout ( function ( ) { log4jsLogger . trace ( "> AjaxAppender.timeout" ) ;
appender . httpRequest . onreadystatechange = function ( ) { return
} ;
appender . httpRequest . abort ( ) ;
appender . isInProgress = false ;
if ( appender . loggingEventMap . length ( ) > 0 ) { appender . send ( )
} log4jsLogger . trace ( "< AjaxAppender.timeout" )
} , this . timeout )
} catch ( e ) { log4jsLogger . fatal ( e )
} log4jsLogger . trace ( "> AjaxAppender.send" )
} } , onReadyStateChanged : function ( ) { log4jsLogger . trace ( "> AjaxAppender.onReadyStateChanged" ) ;
var req = this . httpRequest ;
if ( this . httpRequest . readyState != 4 ) { log4jsLogger . trace ( "< AjaxAppender.onReadyStateChanged: readyState " + req . readyState + " != 4" ) ;
return
} var success = ( ( typeof req . status === "undefined" ) || req . status === 0 || ( req . status >= 200 && req . status < 300 ) ) ;
if ( success ) { log4jsLogger . trace ( " AjaxAppender.onReadyStateChanged: success" ) ;
this . isInProgress = false
} else { var msg = " AjaxAppender.onReadyStateChanged: XMLHttpRequest request to URL " + this . loggingUrl + " returned status code " + this . httpRequest . status ;
log4jsLogger . error ( msg )
} log4jsLogger . trace ( "< AjaxAppender.onReadyStateChanged: readyState == 4" )
} , getXmlHttpRequest : function ( ) { log4jsLogger . trace ( "> AjaxAppender.getXmlHttpRequest" ) ;
var httpRequest = false ;
try { if ( window . XMLHttpRequest ) { httpRequest = new XMLHttpRequest ( ) ;
if ( httpRequest . overrideMimeType ) { httpRequest . overrideMimeType ( this . layout . getContentType ( ) )
} } else { if ( window . ActiveXObject ) { try { httpRequest = new ActiveXObject ( "Msxml2.XMLHTTP" )
} catch ( e ) { httpRequest = new ActiveXObject ( "Microsoft.XMLHTTP" )
} } } } catch ( e ) { httpRequest = false
} if ( ! httpRequest ) { log4jsLogger . fatal ( "Unfortunatelly your browser does not support AjaxAppender for log4js!" )
} log4jsLogger . trace ( "< AjaxAppender.getXmlHttpRequest" ) ;
return httpRequest
} , toString : function ( ) { return "Log4js.AjaxAppender[loggingUrl=" + this . loggingUrl + ", threshold=" + this . threshold + "]"
} } ) ;
Log4js . FileAppender = function ( file ) { this . layout = new Log4js . SimpleLayout ( ) ;
this . isIE = "undefined" ;
this . file = file || "log4js.log" ;
try { this . fso = new ActiveXObject ( "Scripting.FileSystemObject" ) ;
this . isIE = true
} catch ( e ) { try { netscape . security . PrivilegeManager . enablePrivilege ( "UniversalXPConnect" ) ;
this . fso = Components . classes [ "@mozilla.org/file/local;1" ] . createInstance ( Components . interfaces . nsILocalFile ) ;
this . isIE = false
} catch ( e ) { log4jsLogger . error ( e )
} } } ;
Log4js . FileAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { try { var fileHandle = null ;
if ( this . isIE === "undefined" ) { log4jsLogger . error ( "Unsupported " )
} else { if ( this . isIE ) { fileHandle = this . fso . OpenTextFile ( this . file , 8 , true ) ;
fileHandle . WriteLine ( this . layout . format ( loggingEvent ) ) ;
fileHandle . close ( )
} else { netscape . security . PrivilegeManager . enablePrivilege ( "UniversalXPConnect" ) ;
this . fso . initWithPath ( this . file ) ;
if ( ! this . fso . exists ( ) ) { this . fso . create ( 0 , 384 )
} fileHandle = Components . classes [ "@mozilla.org/network/file-output-stream;1" ] . createInstance ( Components . interfaces . nsIFileOutputStream ) ;
fileHandle . init ( this . fso , 4 | 8 | 16 , 52 , 0 ) ;
var line = this . layout . format ( loggingEvent ) ;
fileHandle . write ( line , line . length ) ;
fileHandle . close ( )
} } } catch ( e ) { log4jsLogger . error ( e )
} } , doClear : function ( ) { try { if ( this . isIE ) { var fileHandle = this . fso . GetFile ( this . file ) ;
fileHandle . Delete ( )
} else { netscape . security . PrivilegeManager . enablePrivilege ( "UniversalXPConnect" ) ;
this . fso . initWithPath ( this . file ) ;
if ( this . fso . exists ( ) ) { this . fso . remove ( false )
} } } catch ( e ) { log4jsLogger . error ( e )
} } , toString : function ( ) { return "Log4js.FileAppender[file=" + this . file + "]"
} } ) ;
Log4js . WindowsEventAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( ) ;
try { this . shell = new ActiveXObject ( "WScript.Shell" )
} catch ( e ) { log4jsLogger . error ( e )
} } ;
Log4js . WindowsEventAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { var winLevel = 4 ;
switch ( loggingEvent . level ) { case Log4js . Level . FATAL : winLevel = 1 ;
break ;
case Log4js . Level . ERROR : winLevel = 1 ;
break ;
case Log4js . Level . WARN : winLevel = 2 ;
break ;
default : winLevel = 4 ;
break
} try { this . shell . LogEvent ( winLevel , this . level . format ( loggingEvent ) )
} catch ( e ) { log4jsLogger . error ( e )
} } , toString : function ( ) { return "Log4js.WindowsEventAppender"
} } ) ;
Log4js . JSAlertAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( )
} ;
Log4js . JSAlertAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { alert ( this . layout . getHeader ( ) + this . layout . format ( loggingEvent ) + this . layout . getFooter ( ) )
} , toString : function ( ) { return "Log4js.JSAlertAppender"
} } ) ;
Log4js . MozillaJSConsoleAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( ) ;
try { netscape . security . PrivilegeManager . enablePrivilege ( "UniversalXPConnect" ) ;
this . jsConsole = Components . classes [ "@mozilla.org/consoleservice;1" ] . getService ( Components . interfaces . nsIConsoleService ) ;
this . scriptError = Components . classes [ "@mozilla.org/scripterror;1" ] . createInstance ( Components . interfaces . nsIScriptError )
} catch ( e ) { log4jsLogger . error ( e )
} } ;
Log4js . MozillaJSConsoleAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { try { netscape . security . PrivilegeManager . enablePrivilege ( "UniversalXPConnect" ) ;
this . scriptError . init ( this . layout . format ( loggingEvent ) , null , null , null , null , this . levelCode ( loggingEvent ) , loggingEvent . categoryName ) ;
this . jsConsole . logMessage ( this . scriptError )
} catch ( e ) { log4jsLogger . error ( e )
} } , toString : function ( ) { return "Log4js.MozillaJSConsoleAppender"
} , levelCode : function ( loggingEvent ) { var retval ;
switch ( loggingEvent . level ) { case Log4js . Level . FATAL : retval = 2 ;
break ;
case Log4js . Level . ERROR : retval = 0 ;
break ;
case Log4js . Level . WARN : retval = 1 ;
break ;
default : retval = 1 ;
break
} return retval
} } ) ;
Log4js . OperaJSConsoleAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( )
} ;
Log4js . OperaJSConsoleAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { opera . postError ( this . layout . format ( loggingEvent ) )
} , toString : function ( ) { return "Log4js.OperaJSConsoleAppender"
} } ) ;
Log4js . SafariJSConsoleAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( )
} ;
Log4js . SafariJSConsoleAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { window . console . log ( this . layout . format ( loggingEvent ) )
} , toString : function ( ) { return "Log4js.SafariJSConsoleAppender"
} } ) ;
Log4js . BrowserConsoleAppender = function ( ) { this . consoleDelegate = null ;
if ( window . console ) { this . consoleDelegate = new Log4js . SafariJSConsoleAppender ( )
} else { if ( window . opera ) { this . consoleDelegate = new Log4js . OperaJSConsoleAppender ( )
} else { if ( netscape ) { this . consoleDelegate = new Log4js . MozillaJSConsoleAppender ( )
} else { log4jsLogger . error ( "Unsupported Browser" )
} } } } ;
Log4js . BrowserConsoleAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { this . consoleDelegate . doAppend ( loggingEvent )
} , doClear : function ( ) { this . consoleDelegate . doClear ( )
} , setLayout : function ( layout ) { this . consoleDelegate . setLayout ( layout )
} , toString : function ( ) { return "Log4js.BrowserConsoleAppender: " + this . consoleDelegate . toString ( )
} } ) ;
Log4js . SimpleLayout = function ( ) { this . LINE _SEP = "\n" ;
this . LINE _SEP _LEN = 1
} ;
Log4js . SimpleLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { format : function ( loggingEvent ) { return loggingEvent . level . toString ( ) + " - " + loggingEvent . message + this . LINE _SEP
} , getContentType : function ( ) { return "text/plain"
} , getHeader : function ( ) { return ""
} , getFooter : function ( ) { return ""
} } ) ;
Log4js . BasicLayout = function ( ) { this . LINE _SEP = "\n"
} ;
Log4js . BasicLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { format : function ( loggingEvent ) { return loggingEvent . categoryName + "~" + loggingEvent . startTime . toLocaleString ( ) + " [" + loggingEvent . level . toString ( ) + "] " + loggingEvent . message + this . LINE _SEP
} , getContentType : function ( ) { return "text/plain"
} , getHeader : function ( ) { return ""
} , getFooter : function ( ) { return ""
} } ) ;
Log4js . HtmlLayout = function ( ) { return
} ;
Log4js . HtmlLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { format : function ( loggingEvent ) { return '<div style="' + this . getStyle ( loggingEvent ) + '">' + loggingEvent . getFormattedTimestamp ( ) + " - " + loggingEvent . level . toString ( ) + " - " + loggingEvent . message + "</div>\n"
} , getContentType : function ( ) { return "text/html"
} , getHeader : function ( ) { return "<html><head><title>log4js</head><body>"
} , getFooter : function ( ) { return "</body></html>"
} , getStyle : function ( loggingEvent ) { var style ;
if ( loggingEvent . level . toString ( ) . search ( /ERROR/ ) != - 1 ) { style = "color:red"
} else { if ( loggingEvent . level . toString ( ) . search ( /FATAL/ ) != - 1 ) { style = "color:red"
} else { if ( loggingEvent . level . toString ( ) . search ( /WARN/ ) != - 1 ) { style = "color:orange"
} else { if ( loggingEvent . level . toString ( ) . search ( /DEBUG/ ) != - 1 ) { style = "color:green"
} else { if ( loggingEvent . level . toString ( ) . search ( /INFO/ ) != - 1 ) { style = "color:white"
} else { style = "color:yellow"
} } } } } return style
} } ) ;
Log4js . XMLLayout = function ( ) { return
} ;
Log4js . XMLLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { format : function ( loggingEvent ) { var useragent = "unknown" ;
try { useragent = navigator . userAgent
} catch ( e ) { useragent = "unknown"
} var referer = "unknown" ;
try { referer = location . href
} catch ( e ) { referer = "unknown"
} var content = '<log4js:event logger="' ;
content += loggingEvent . categoryName + '" level="' ;
content += loggingEvent . level . toString ( ) + '" useragent="' ;
content += useragent + '" referer="' ;
content += referer . replace ( /&/g , "&" ) + '" timestamp="' ;
content += loggingEvent . getFormattedTimestamp ( ) + '">\n' ;
content += "\t<log4js:message><![CDATA[" + this . escapeCdata ( loggingEvent . message ) + "]]></log4js:message>\n" ;
if ( loggingEvent . exception ) { content += this . formatException ( loggingEvent . exception )
} content += "</log4js:event>\n" ;
return content
} , getContentType : function ( ) { return "text/xml"
} , getHeader : function ( ) { return '<log4js:eventSet version="' + Log4js . version + '" xmlns:log4js="http://log4js.berlios.de/2007/log4js/">\n'
} , getFooter : function ( ) { return "</log4js:eventSet>\n"
} , getSeparator : function ( ) { return "\n"
} , formatException : function ( ex ) { if ( ex ) { var exStr = "\t<log4js:throwable>" ;
if ( ex . message ) { exStr += "\t\t<log4js:message><![CDATA[" + this . escapeCdata ( ex . message ) + "]]></log4js:message>\n"
} if ( ex . description ) { exStr += "\t\t<log4js:description><![CDATA[" + this . escapeCdata ( ex . description ) + "]]></log4js:description>\n"
} exStr += "\t\t<log4js:stacktrace>" ;
exStr += '\t\t\t<log4js:location fileName="' + ex . fileName + '" lineNumber="' + ex . lineNumber + '" />' ;
exStr += "\t\t</log4js:stacktrace>" ;
exStr = "\t</log4js:throwable>" ;
return exStr
} return null
} , escapeCdata : function ( str ) { return str . replace ( /\]\]>/ , "]]>]]><![CDATA[" )
} } ) ;
Log4js . JSONLayout = function ( ) { this . df = new Log4js . DateFormatter ( )
} ;
Log4js . JSONLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { format : function ( loggingEvent ) { var useragent = "unknown" ;
try { useragent = navigator . userAgent
} catch ( e ) { useragent = "unknown"
} var referer = "unknown" ;
try { referer = location . href
} catch ( e ) { referer = "unknown"
} var jsonString = '{\n "LoggingEvent": {\n' ;
jsonString += '\t"logger": "' + loggingEvent . categoryName + '",\n' ;
jsonString += '\t"level": "' + loggingEvent . level . toString ( ) + '",\n' ;
jsonString += '\t"message": "' + loggingEvent . message + '",\n' ;
jsonString += '\t"referer": "' + referer + '",\n' ;
jsonString += '\t"useragent": "' + useragent + '",\n' ;
jsonString += '\t"timestamp": "' + this . df . formatDate ( loggingEvent . startTime , "yyyy-MM-ddThh:mm:ssZ" ) + '",\n' ;
jsonString += '\t"exception": "' + loggingEvent . exception + '"\n' ;
jsonString += "}}" ;
return jsonString
} , getContentType : function ( ) { return "text/json"
} , getHeader : function ( ) { return '{"Log4js": [\n'
} , getFooter : function ( ) { return "\n]}"
} , getSeparator : function ( ) { return ",\n"
} } ) ;
Log4js . PatternLayout = function ( pattern ) { if ( pattern ) { this . pattern = pattern
} else { this . pattern = Log4js . PatternLayout . DEFAULT _CONVERSION _PATTERN
} } ;
Log4js . PatternLayout . TTCC _CONVERSION _PATTERN = "%r %p %c - %m%n" ;
Log4js . PatternLayout . DEFAULT _CONVERSION _PATTERN = "%m%n" ;
Log4js . PatternLayout . ISO8601 _DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS" ;
Log4js . PatternLayout . DATETIME _DATEFORMAT = "dd MMM YYYY HH:mm:ss,SSS" ;
Log4js . PatternLayout . ABSOLUTETIME _DATEFORMAT = "HH:mm:ss,SSS" ;
Log4js . PatternLayout . prototype = Log4js . extend ( new Log4js . Layout ( ) , { getContentType : function ( ) { return "text/plain"
} , getHeader : function ( ) { return null
} , getFooter : function ( ) { return null
} , format : function ( loggingEvent ) { var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([cdmnpr%])(\{([^\}]+)\})?|([^%]+)/ ;
var formattedString = "" ;
var result ;
var searchString = this . pattern ;
while ( ( result = regex . exec ( searchString ) ) ) { var matchedString = result [ 0 ] ;
var padding = result [ 1 ] ;
var truncation = result [ 2 ] ;
var conversionCharacter = result [ 3 ] ;
var specifier = result [ 5 ] ;
var text = result [ 6 ] ;
if ( text ) { formattedString += "" + text
} else { var replacement = "" ;
switch ( conversionCharacter ) { case "c" : var loggerName = loggingEvent . categoryName ;
if ( specifier ) { var precision = parseInt ( specifier , 10 ) ;
var loggerNameBits = loggingEvent . categoryName . split ( "." ) ;
if ( precision >= loggerNameBits . length ) { replacement = loggerName
} else { replacement = loggerNameBits . slice ( loggerNameBits . length - precision ) . join ( "." )
} } else { replacement = loggerName
} break ;
case "d" : var dateFormat = Log4js . PatternLayout . ISO8601 _DATEFORMAT ;
if ( specifier ) { dateFormat = specifier ;
if ( dateFormat == "ISO8601" ) { dateFormat = Log4js . PatternLayout . ISO8601 _DATEFORMAT
} else { if ( dateFormat == "ABSOLUTE" ) { dateFormat = Log4js . PatternLayout . ABSOLUTETIME _DATEFORMAT
} else { if ( dateFormat == "DATE" ) { dateFormat = Log4js . PatternLayout . DATETIME _DATEFORMAT
} } } } replacement = ( new Log4js . SimpleDateFormat ( dateFormat ) ) . format ( loggingEvent . startTime ) ;
break ;
case "m" : replacement = loggingEvent . message ;
break ;
case "n" : replacement = "\n" ;
break ;
case "p" : replacement = loggingEvent . level . toString ( ) ;
break ;
case "r" : replacement = "" + loggingEvent . startTime . toLocaleTimeString ( ) ;
break ;
case "%" : replacement = "%" ;
break ;
default : replacement = matchedString ;
break
} var len ;
if ( truncation ) { len = parseInt ( truncation . substr ( 1 ) , 10 ) ;
replacement = replacement . substring ( 0 , len )
} if ( padding ) { if ( padding . charAt ( 0 ) == "-" ) { len = parseInt ( padding . substr ( 1 ) , 10 ) ;
while ( replacement . length < len ) { replacement += " "
} } else { len = parseInt ( padding , 10 ) ;
while ( replacement . length < len ) { replacement = " " + replacement
} } } formattedString += replacement
} searchString = searchString . substr ( result . index + result [ 0 ] . length )
} return formattedString
} } ) ;
if ( ! Array . prototype . push ) { Array . prototype . push = function ( ) { var startLength = this . length ;
for ( var i = 0 ;
i < arguments . length ;
i ++ ) { this [ startLength + i ] = arguments [ i ]
} return this . length
}
} Log4js . FifoBuffer = function ( ) { this . array = new Array ( )
} ;
Log4js . FifoBuffer . prototype = { push : function ( obj ) { this . array [ this . array . length ] = obj ;
return this . array . length
} , pull : function ( ) { if ( this . array . length > 0 ) { var firstItem = this . array [ 0 ] ;
for ( var i = 0 ;
i < this . array . length - 1 ;
i ++ ) { this . array [ i ] = this . array [ i + 1 ]
} this . array . length = this . array . length - 1 ;
return firstItem
} return null
} , length : function ( ) { return this . array . length
} } ;
Log4js . DateFormatter = function ( ) { return
} ;
Log4js . DateFormatter . DEFAULT _DATE _FORMAT = "yyyy-MM-ddThh:mm:ssO" ;
Log4js . DateFormatter . prototype = { formatDate : function ( vDate , vFormat ) { var vDay = this . addZero ( vDate . getDate ( ) ) ;
var vMonth = this . addZero ( vDate . getMonth ( ) + 1 ) ;
var vYearLong = this . addZero ( vDate . getFullYear ( ) ) ;
var vYearShort = this . addZero ( vDate . getFullYear ( ) . toString ( ) . substring ( 3 , 4 ) ) ;
var vYear = ( vFormat . indexOf ( "yyyy" ) > - 1 ? vYearLong : vYearShort ) ;
var vHour = this . addZero ( vDate . getHours ( ) ) ;
var vMinute = this . addZero ( vDate . getMinutes ( ) ) ;
var vSecond = this . addZero ( vDate . getSeconds ( ) ) ;
var vTimeZone = this . O ( vDate ) ;
var vDateString = vFormat . replace ( /dd/g , vDay ) . replace ( /MM/g , vMonth ) . replace ( /y{1,4}/g , vYear ) ;
vDateString = vDateString . replace ( /hh/g , vHour ) . replace ( /mm/g , vMinute ) . replace ( /ss/g , vSecond ) ;
vDateString = vDateString . replace ( /O/g , vTimeZone ) ;
return vDateString
} , addZero : function ( vNumber ) { return ( ( vNumber < 10 ) ? "0" : "" ) + vNumber
} , O : function ( date ) { var os = Math . abs ( date . getTimezoneOffset ( ) ) ;
var h = String ( Math . floor ( os / 60 ) ) ;
var m = String ( os % 60 ) ;
h . length == 1 ? h = "0" + h : 1 ;
m . length == 1 ? m = "0" + m : 1 ;
return date . getTimezoneOffset ( ) < 0 ? "+" + h + m : "-" + h + m
} } ;
var log4jsLogger = Log4js . getLogger ( "Log4js" ) ;
log4jsLogger . addAppender ( new Log4js . ConsoleAppender ( ) ) ;
log4jsLogger . setLevel ( Log4js . Level . ALL ) ; core . Monitor = function ( fadeElement , logContentElem ) { $assert ( fadeElement , "fadeElement can not be null" ) ;
$assert ( logContentElem , "logContentElem can not be null" ) ;
this . pendingMessages = [ ] ;
this . inProgress = false ;
this . _container = fadeElement ;
this . _currentMessage = null ;
this . _logContentElem = logContentElem ;
this . _fxOpacity = fadeElement . effect ( "opacity" , { duration : 6000 } )
} ;
core . Monitor . prototype . _logMessage = function ( msg , msgKind ) { this . _fxOpacity . clearTimer ( ) ;
if ( msgKind == core . Monitor . MsgKind . ERROR ) { msg = "<div id='small_error_icon'>" + msg + "</div>"
} this . _currentMessage = msg ;
this . _fxOpacity . start ( 1 , 0 ) ;
this . _logContentElem . innerHTML = msg
} ;
core . Monitor . prototype . logError = function ( userMsg ) { this . logMessage ( userMsg , core . Monitor . MsgKind . ERROR )
} ;
core . Monitor . prototype . logFatal = function ( userMsg ) { this . logMessage ( userMsg , core . Monitor . MsgKind . FATAL )
} ;
core . Monitor . prototype . logMessage = function ( msg , msgKind ) { if ( ! msgKind ) { msgKind = core . Monitor . MsgKind . INFO
} if ( msgKind == core . Monitor . MsgKind . FATAL ) { new Windoo . Alert ( msg , { window : { theme : Windoo . Themes . aero , title : "Outch!!. An unexpected error." , onClose : function ( ) { } } } )
} else { var messages = this . pendingMessages ;
var monitor = this ;
if ( ! this . executer ) { monitor . _logMessage ( msg , msgKind ) ;
var disptacher = function ( ) { if ( messages . length > 0 ) { var msgToDisplay = messages . shift ( ) ;
monitor . _logMessage ( msgToDisplay )
} if ( messages . length == 0 ) { $clear ( monitor . executer ) ;
monitor . executer = null ;
monitor . _fxOpacity . hide ( ) ;
this . _currentMessage = null
} } ;
this . executer = disptacher . periodical ( 600 )
} else { if ( this . _currentMessage != msg ) { messages . push ( msg )
} } } } ;
core . Monitor . setInstance = function ( monitor ) { this . monitor = monitor
} ;
core . Monitor . getInstance = function ( ) { var result = this . monitor ;
if ( result == null ) { result = { logError : function ( ) { } , logMessage : function ( ) { } }
} return result
} ;
core . Monitor . MsgKind = { INFO : 1 , WARNING : 2 , ERROR : 3 , FATAL : 4 } ; core . Point = function ( x , y ) { this . x = x ;
this . y = y
} ;
core . Point . prototype . setValue = function ( x , y ) { this . x = x ;
this . y = y
} ;
core . Point . prototype . inspect = function ( ) { return "{x:" + this . x + ",y:" + this . y + "}"
} ;
core . Point . prototype . clone = function ( ) { return new core . Point ( this . x , this . y )
} ;
core . Point . fromString = function ( point ) { var values = point . split ( "," ) ;
return new core . Point ( values [ 0 ] , values [ 1 ] )
} ; core . UserAgent = { isMozillaFamily : function ( ) { return this . browser == "Netscape" || this . browser == "Firefox"
} , isIE : function ( ) { return this . browser == "Explorer"
} , init : function ( ) { this . browser = this . searchString ( this . dataBrowser ) || "An unknown browser" ;
this . version = this . searchVersion ( navigator . userAgent ) || this . searchVersion ( navigator . appVersion ) || "an unknown version" ;
this . OS = this . searchString ( this . dataOS ) || "an unknown OS"
} , searchString : function ( data ) { for ( var i = 0 ;
i < data . length ;
i ++ ) { var dataString = data [ i ] . string ;
var dataProp = data [ i ] . prop ;
this . versionSearchString = data [ i ] . versionSearch || data [ i ] . identity ;
if ( dataString ) { if ( dataString . indexOf ( data [ i ] . subString ) != - 1 ) { return data [ i ] . identity
} } else { if ( dataProp ) { return data [ i ] . identity
} } } } , searchVersion : function ( dataString ) { var index = dataString . indexOf ( this . versionSearchString ) ;
if ( index == - 1 ) { return
} return parseFloat ( dataString . substring ( index + this . versionSearchString . length + 1 ) )
} , dataBrowser : [ { string : navigator . userAgent , subString : "OmniWeb" , versionSearch : "OmniWeb/" , identity : "OmniWeb" } , { string : navigator . vendor , subString : "Apple" , identity : "Safari" } , { string : navigator . vendor , subString : "Google Inc." , identity : "Chrome" } , { prop : window . opera , identity : "Opera" } , { string : navigator . vendor , subString : "iCab" , identity : "iCab" } , { string : navigator . vendor , subString : "KDE" , identity : "Konqueror" } , { string : navigator . userAgent , subString : "Firefox" , identity : "Firefox" } , { string : navigator . vendor , subString : "Camino" , identity : "Camino" } , { string : navigator . userAgent , subString : "Netscape" , identity : "Netscape" } , { string : navigator . userAgent , subString : "MSIE" , identity : "Explorer" , versionSearch : "MSIE" } , { string : navigator . userAgent , subString : "Gecko" , identity : "Mozilla" , versionSearch : "rv" } , { string : navigator . userAgent , subString : "Mozilla" , identity : "Netscape" , versionSearch : "Mozilla" } ] , dataOS : [ { string : navigator . platform , subString : "Win" , identity : "Windows" } , { string : navigator . platform , subString : "Mac" , identity : "Mac" } , { string : navigator . platform , subString : "Linux" , identity : "Linux" } ] } ;
core . UserAgent . init ( ) ; core . Utils = { escapeInvalidTags : function ( text ) { return text
} } ;
function $defined ( obj ) { return ( obj != undefined )
} objects = { } ;
objects . extend = function ( subClass , baseClass ) { function inheritance ( ) { } inheritance . prototype = baseClass . prototype ;
subClass . prototype = new inheritance ( ) ;
subClass . prototype . constructor = subClass ;
subClass . baseConstructor = baseClass ;
subClass . superClass = baseClass . prototype
} ;
$assert = function ( assert , message ) { if ( ! $defined ( assert ) || ! assert ) { var stack ;
try { null . eval ( )
} catch ( e ) { stack = e
} wLogger . error ( message + "," + stack )
} } ;
Math . sign = function ( value ) { return ( value >= 0 ) ? 1 : - 1
} ;
2011-08-09 07:17:16 +02:00
core . Utils . getMousePosition = function ( event ) { var xcoord = - 1 ;
2011-08-08 00:27:23 +02:00
var ycoord = - 1 ;
if ( ! $defined ( event ) ) { if ( $defined ( window . event ) ) { event = window . event
} else { throw "Could not obtain mouse position"
} } if ( $defined ( event . $extended ) ) { event = event . event
} if ( typeof ( event . pageX ) == "number" ) { xcoord = event . pageX ;
ycoord = event . pageY
} else { if ( typeof ( event . clientX ) == "number" ) { xcoord = event . clientX ;
ycoord = event . clientY ;
var badOldBrowser = ( window . navigator . userAgent . indexOf ( "Opera" ) + 1 ) || ( window . ScriptEngine && ScriptEngine ( ) . indexOf ( "InScript" ) + 1 ) || ( navigator . vendor == "KDE" ) ;
if ( ! badOldBrowser ) { if ( document . body && ( document . body . scrollLeft || document . body . scrollTop ) ) { xcoord += document . body . scrollLeft ;
ycoord += document . body . scrollTop
} else { if ( document . documentElement && ( document . documentElement . scrollLeft || document . documentElement . scrollTop ) ) { xcoord += document . documentElement . scrollLeft ;
ycoord += document . documentElement . scrollTop
} } } } else { throw "Could not obtain mouse position"
} } return { x : xcoord , y : ycoord }
} ;
core . Utils . workOutDivElementPosition = function ( divElement ) { var curleft = 0 ;
var curtop = 0 ;
if ( $defined ( divElement . offsetParent ) ) { curleft = divElement . offsetLeft ;
curtop = divElement . offsetTop ;
while ( divElement = divElement . offsetParent ) { curleft += divElement . offsetLeft ;
curtop += divElement . offsetTop
} } return { x : curleft , y : curtop }
} ;
core . Utils . innerXML = function ( node ) { if ( $defined ( node . innerXML ) ) { return node . innerXML
} else { if ( $defined ( node . xml ) ) { return node . xml
} else { if ( $defined ( XMLSerializer ) ) { return ( new XMLSerializer ( ) ) . serializeToString ( node )
} } } } ;
core . Utils . createDocument = function ( ) { var doc = null ;
var _document = window . document ;
if ( $defined ( window . ActiveXObject ) ) { var prefixes = [ "MSXML2" , "Microsoft" , "MSXML" , "MSXML3" ] ;
for ( var i = 0 ;
i < prefixes . length ;
i ++ ) { try { doc = new ActiveXObject ( prefixes [ i ] + ".XMLDOM" )
} catch ( e ) { } if ( $defined ( doc ) ) { break
} } } else { if ( ( _document . implementation ) && ( _document . implementation . createDocument ) ) { doc = _document . implementation . createDocument ( "" , "" , null )
} } return doc
} ;
core . Utils . createDocumentFromText = function ( str , mimetype ) { if ( ! $defined ( mimetype ) ) { mimetype = "text/xml"
} if ( $defined ( window . DOMParser ) ) { var parser = new DOMParser ( ) ;
return parser . parseFromString ( str , mimetype )
} else { if ( $defined ( window . ActiveXObject ) ) { var domDoc = core . Utils . createDocument ( ) ;
if ( $defined ( domDoc ) ) { domDoc . async = false ;
domDoc . loadXML ( str ) ;
return domDoc
} } } return null
} ;
core . Utils . calculateRelationShipPointCoordinates = function ( topic , controlPoint ) { var size = topic . getSize ( ) ;
var position = topic . getPosition ( ) ;
var m = ( position . y - controlPoint . y ) / ( position . x - controlPoint . x ) ;
var y , x ;
var gap = 5 ;
if ( controlPoint . y > position . y + ( size . height / 2 ) ) { y = position . y + ( size . height / 2 ) + gap ;
x = position . x - ( ( position . y - y ) / m ) ;
if ( x > position . x + ( size . width / 2 ) ) { x = position . x + ( size . width / 2 )
} else { if ( x < position . x - ( size . width / 2 ) ) { x = position . x - ( size . width / 2 )
} } } else { if ( controlPoint . y < position . y - ( size . height / 2 ) ) { y = position . y - ( size . height / 2 ) - gap ;
x = position . x - ( ( position . y - y ) / m ) ;
if ( x > position . x + ( size . width / 2 ) ) { x = position . x + ( size . width / 2 )
} else { if ( x < position . x - ( size . width / 2 ) ) { x = position . x - ( size . width / 2 )
} } } else { if ( controlPoint . x < ( position . x - size . width / 2 ) ) { x = position . x - ( size . width / 2 ) - gap ;
y = position . y - ( m * ( position . x - x ) )
} else { x = position . x + ( size . width / 2 ) + gap ;
y = position . y - ( m * ( position . x - x ) )
} } } return new core . Point ( x , y )
} ;
core . Utils . calculateDefaultControlPoints = function ( srcPos , tarPos ) { var y = srcPos . y - tarPos . y ;
var x = srcPos . x - tarPos . x ;
var m = y / x ;
var l = Math . sqrt ( y * y + x * x ) / 3 ;
var fix = 1 ;
if ( srcPos . x > tarPos . x ) { fix = - 1
} var x1 = srcPos . x + Math . sqrt ( l * l / ( 1 + ( m * m ) ) ) * fix ;
var y1 = m * ( x1 - srcPos . x ) + srcPos . y ;
var x2 = tarPos . x + Math . sqrt ( l * l / ( 1 + ( m * m ) ) ) * fix * - 1 ;
var y2 = m * ( x2 - tarPos . x ) + tarPos . y ;
return [ new core . Point ( - srcPos . x + x1 , - srcPos . y + y1 ) , new core . Point ( - tarPos . x + x2 , - tarPos . y + y2 ) ]
} ;
core . Utils . setVisibilityAnimated = function ( elems , isVisible , doneFn ) { core . Utils . animateVisibility ( elems , isVisible , doneFn )
} ;
core . Utils . setChildrenVisibilityAnimated = function ( rootElem , isVisible ) { var children = core . Utils . _addInnerChildrens ( rootElem ) ;
core . Utils . animateVisibility ( children , isVisible )
} ;
core . Utils . animateVisibility = function ( elems , isVisible , doneFn ) { var _fadeEffect = null ;
var _opacity = ( isVisible ? 0 : 1 ) ;
if ( isVisible ) { elems . forEach ( function ( child , index ) { if ( $defined ( child ) ) { child . setOpacity ( _opacity ) ;
child . setVisibility ( isVisible )
} } )
} var fadeEffect = function ( index ) { var step = 10 ;
if ( ( _opacity <= 0 && ! isVisible ) || ( _opacity >= 1 && isVisible ) ) { $clear ( _fadeEffect ) ;
_fadeEffect = null ;
elems . forEach ( function ( child , index ) { if ( $defined ( child ) ) { child . setVisibility ( isVisible )
} } ) ;
if ( $defined ( doneFn ) ) { doneFn . attempt ( )
} } else { var fix = 1 ;
if ( isVisible ) { fix = - 1
} _opacity -= ( 1 / step ) * fix ;
elems . forEach ( function ( child , index ) { if ( $defined ( child ) ) { child . setOpacity ( _opacity )
} } )
} } ;
_fadeEffect = fadeEffect . periodical ( 10 )
} ;
core . Utils . animatePosition = function ( elems , doneFn , designer ) { var _moveEffect = null ;
var i = 10 ;
var step = 10 ;
var moveEffect = function ( ) { if ( i > 0 ) { var keys = elems . keys ( ) ;
for ( var j = 0 ;
j < keys . length ;
j ++ ) { var id = keys [ j ] ;
var mod = elems . get ( id ) ;
var allTopics = designer . _getTopics ( ) ;
var currentTopic = allTopics . filter ( function ( node ) { return node . getId ( ) == id
} ) [ 0 ] ;
var xStep = ( mod . originalPos . x - mod . newPos . x ) / step ;
var yStep = ( mod . originalPos . y - mod . newPos . y ) / step ;
var newPos = currentTopic . getPosition ( ) . clone ( ) ;
newPos . x += xStep ;
newPos . y += yStep ;
currentTopic . setPosition ( newPos , false )
} } else { $clear ( _moveEffect ) ;
var keys = elems . keys ( ) ;
for ( var j = 0 ;
j < keys . length ;
j ++ ) { var id = keys [ j ] ;
var mod = elems . get ( id ) ;
var allTopics = designer . _getTopics ( ) ;
var currentTopic = allTopics . filter ( function ( node ) { return node . getId ( ) == id
} ) [ 0 ] ;
currentTopic . setPosition ( mod . originalPos , false )
} if ( $defined ( doneFn ) ) { doneFn . attempt ( )
} } i --
} ;
_moveEffect = moveEffect . periodical ( 10 )
} ;
core . Utils . _addInnerChildrens = function ( elem ) { var children = [ ] ;
var childs = elem . _getChildren ( ) ;
for ( var i = 0 ;
i < childs . length ;
i ++ ) { var child = childs [ i ] ;
children . push ( child ) ;
children . push ( child . getOutgoingLine ( ) ) ;
var relationships = child . getRelationships ( ) ;
children = children . concat ( relationships ) ;
var innerChilds = core . Utils . _addInnerChildrens ( child ) ;
children = children . concat ( innerChilds )
} return children
} ; core . WaitDialog = new Class ( { yPos : 0 , xPos : 0 , initialize : function ( ) { } , activate : function ( changeCursor , dialogContent ) { this . content = dialogContent ;
this . _initLightboxMarkup ( ) ;
this . displayLightbox ( "block" ) ;
if ( changeCursor ) { window . document . body . style . cursor = "wait"
} } , changeContent : function ( dialogContent , changeCursor ) { this . content = dialogContent ;
if ( ! $ ( "lbContent" ) ) { window . document . body . style . cursor = "pointer" ;
return
} this . processInfo ( ) ;
if ( changeCursor ) { window . document . body . style . cursor = "wait"
} else { window . document . body . style . cursor = "auto"
} } , displayLightbox : function ( display ) { if ( display != "none" ) { this . processInfo ( )
} $ ( "overlay" ) . style . display = display ;
$ ( "lightbox" ) . style . display = display
} , processInfo : function ( ) { if ( $ ( "lbContent" ) ) { $ ( "lbContent" ) . dispose ( )
} var lbContentElement = new Element ( "div" ) . setProperty ( "id" , "lbContent" ) ;
lbContentElement . innerHTML = this . content . innerHTML ;
lbContentElement . inject ( $ ( "lbLoadMessage" ) , "before" ) ;
$ ( "lightbox" ) . className = "done"
} , actions : function ( ) { lbActions = document . getElementsByClassName ( "lbAction" ) ;
for ( i = 0 ;
i < lbActions . length ;
i ++ ) { $ ( lbActions [ i ] ) . addEvent ( "click" , function ( ) { this [ lbActions [ i ] . rel ] . pass ( this )
} . bind ( this ) ) ;
lbActions [ i ] . onclick = function ( ) { return false
}
} } , deactivate : function ( time ) { if ( $ ( "lbContent" ) ) { $ ( "lbContent" ) . dispose ( )
} this . displayLightbox ( "none" ) ;
window . document . body . style . cursor = "default"
} , _initLightboxMarkup : function ( ) { var bodyElem = document . getElementsByTagName ( "body" ) [ 0 ] ;
var overlayElem = new Element ( "div" ) . setProperty ( "id" , "overlay" ) ;
overlayElem . inject ( bodyElem ) ;
var lightboxElem = new Element ( "div" ) . setProperty ( "id" , "lightbox" ) ;
lightboxElem . addClass ( "loading" ) ;
var lbLoadMessageElem = new Element ( "div" ) . setProperty ( "id" , "lbLoadMessage" ) ;
lbLoadMessageElem . inject ( lightboxElem ) ;
lightboxElem . inject ( bodyElem )
} } ) ; var wLogger = new Log4js . getLogger ( "WiseMapping" ) ;
wLogger . setLevel ( Log4js . Level . ALL ) ;
if ( $defined ( window . LoggerService ) ) { Log4js . WiseServerAppender = function ( ) { this . layout = new Log4js . SimpleLayout ( )
} ;
Log4js . WiseServerAppender . prototype = Log4js . extend ( new Log4js . Appender ( ) , { doAppend : function ( loggingEvent ) { try { var message = this . layout . format ( loggingEvent ) ;
var level = this . levelCode ( loggingEvent ) ;
window . LoggerService . logError ( level , message )
} catch ( e ) { alert ( e )
} } , toString : function ( ) { return "Log4js.WiseServerAppender"
} , levelCode : function ( loggingEvent ) { var retval ;
switch ( loggingEvent . level ) { case Log4js . Level . FATAL : retval = 3 ;
break ;
case Log4js . Level . ERROR : retval = 3 ;
break ;
case Log4js . Level . WARN : retval = 2 ;
break ;
default : retval = 1 ;
break
} return retval
} } ) ;
wLogger . addAppender ( new Log4js . WiseServerAppender ( ) )
} ; core . Executor = new Class ( { options : { isLoading : true } , initialize : function ( options ) { this . _pendingFunctions = [ ]
} , setLoading : function ( isLoading ) { this . options . isLoading = isLoading ;
if ( ! isLoading ) { this . _pendingFunctions . forEach ( function ( item ) { var result = item . fn . attempt ( item . args , item . bind ) ;
$assert ( result != false , "execution failed" )
} ) ;
this . _pendingFunctions = [ ]
} } , isLoading : function ( ) { return this . options . isLoading
} , delay : function ( fn , delay , bind , args ) { if ( this . options . isLoading ) { this . _pendingFunctions . push ( { fn : fn , bind : bind , args : args } )
} else { fn . delay ( delay , bind , args )
} } } ) ;
core . Executor . instance = new core . Executor ( ) ;