1. #1
    Sencha User p5hema2's Avatar
    Join Date
    May 2012
    Location
    Jena Germany
    Posts
    20
    Vote Rating
    1
    p5hema2 is on a distinguished road

      0  

    Default Nice Console output for Chrome [CODE]

    Nice Console output for Chrome [CODE]


    Hi Developers,

    i have written a small handy file for debugging in Google Chrome, you can add/remove console logs to all functions in your code with 2-3 commands. Try it youself, the output is in the images. The code below.

    I dont give you any guarantee that its works with your code.
    I have to functions in my code that break the complete programm like written below in the code.

    Pro:
    you only need edit your index.debug.html and this file so save testing
    Contra:
    may not work

    Happy debug

    Chrome Debugger 2.jpgChrome Debugger.jpg


    Code:
    showAnyConsole = true;showConsoleGroup = false;
    showArguments = false;
    showConsoleTime = false;
    showWebkitEvents = false;
    
    
    /* 
     * Store this all under "app/helper/debug.js"
     * 
     * You have to edit some lines below to get this all working
     * 
     * line 62 63 your have to replace "fly." with your app name, dont miss the "."
     * in line 73 230 249 252 269 270 349 371 544 as well :-)
     * 
     * you have to add the file to your index debug html like this:
     * <script type="text/javascript" src="app/helper/debug.js"></script> * 
     * 
     * add to the array in line 213 all functions which break the debug.js, i have 2 which are not working :-(
     */
    
    
    
    
    
    
    if (!showAnyConsole) {
        console = {};
        console.log = function(){};
        console.group = function(){};
        console.groupEnd = function(){};
        console.groupCollapsed = function(){};
        console.time = function(){};
        console.timeEnd = function(){};
        console.debug = function(){};
        console.info = function(){};
        console.warn = function(){};
        console.error = function(){};
        console.assert = function(){};
        console.clear = function(){};
        console.dir = function(){};
        console.dirxml = function(){};
        console.trace = function(){};
        console.time = function(){};
        console.timeEnd = function(){};
        console.profile = function(){};
        console.profileEnd = function(){};
        console.count = function(){};
        console.exception = function(){};
        console.table = function(){};
    }
    if (!showConsoleGroup) {
        console.group = function(){};
        console.groupEnd = function(){};
        console.groupCollapsed = function(){};
    }
    if (!showConsoleTime) {
        console.time = function(){};
        console.timeEnd = function(){};
    }
    
    
    Ext.override(Ext.app.Controller, {
        constructor: function(config) {
            var that = this;
            var test = that.__proto__.$className.indexOf('fly.');
            if (that.__proto__.$className.indexOf('fly.') != -1) {
                fly.helper.Debug.addDebug(that.__proto__)
            }
            this.initConfig(config);
            this.mixins.observable.constructor.call(this, config);
            
    
    
        }
    })
    
    
    Ext.define('fly.helper.Debug', {
        statics: {
            addDebug: function(TemplateClass) {
                function augment(withFn) {
                    var SenchaUnwanted = [
                            'configClass',
                            'self',
                            'superclass',
                            'defaultConfig',
                            'config',
                            'initConfigList',
                            'initConfigMap',
                            'configClass',
                            '$className',
                            'initGetProfile',
                            'getProfile',
                            'setProfile',
                            'initGetViewCache',
                            'getViewCache',
                            'setViewCache',
                            'constructor',
                            'execute',
                            'applyBefore',
                            'applyControl',
                            'applyRefs',
                            'applyRoutes',
                            'applyStores',
                            'applyModels',
                            'applyViews',
                            'getFullyQualified',
                            'control',
                            'ref',
                            'getRef',
                            'hasRef',
                            'initGetRefs',
                            'getRefs',
                            'setRefs',
                            'initGetRoutes',
                            'getRoutes',
                            'setRoutes',
                            'initGetControl',
                            'getControl',
                            'setControl',
                            'initGetBefore',
                            'getBefore',
                            'setBefore',
                            'initGetApplication',
                            'getApplication',
                            'setApplication',
                            'initGetStores',
                            'getStores',
                            'setStores',
                            'initGetModels',
                            'getModels',
                            'setModels',
                            'initGetViews',
                            'getViews',
                            'setViews',
                            'destroy',
                            'mixins',
                            'requires',
                            'mixinConfig',
                            'alternateClassName',
                            'isObservable',
                            'observableType',
                            'validIdRegex',
                            'observableIdPrefix',
                            'listenerOptionsRegex',
                            'applyListeners',
                            'applyBubbleEvents',
                            'getOptimizedObservableId',
                            'getObservableId',
                            'getOptimizedEventDispatcher',
                            'getEventDispatcher',
                            'getManagedListeners',
                            'getUsedSelectors',
                            'fireEvent',
                            'fireAction',
                            'doFireEvent',
                            'doAddListener',
                            'addDispatcherListener',
                            'doRemoveListener',
                            'removeDispatcherListener',
                            'clearManagedListeners',
                            'changeListener',
                            'addListener',
                            'addBeforeListener',
                            'addAfterListener',
                            'removeListener',
                            'removeBeforeListener',
                            'removeAfterListener',
                            'clearListeners',
                            'hasListener',
                            'suspendEvents',
                            'resumeEvents',
                            'relayEvents',
                            'relayEvent',
                            'createEventRelayer',
                            'enableBubble',
                            'createEventBubbler',
                            'getBubbleTarget',
                            'addEvents',
                            'onClassMixedIn',
                            'initGetListeners',
                            '_listeners',
                            'getListeners',
                            'setListeners',
                            'initGetBubbleEvents',
                            '_bubbleEvents',
                            'getBubbleEvents',
                            'setBubbleEvents',
                            'isIdentifiable',
                            'idCleanRegex',
                            'defaultIdPrefix',
                            'defaultIdSeparator',
                            'getOptimizedId',
                            'getUniqueId',
                            'setId',
                            'getId',
                            'on',
                            'un',
                            'onBefore',
                            'onAfter',
                            'unBefore',
                            'unAfter',
                            'isInstance',
                            'statics',
                            'callParent',
                            'wasInstantiated',
                            'initConfig',
                            'beforeInitConfig',
                            'getCurrentConfig',
                            'setConfig',
                            'getConfig',
                            'hasConfig',
                            'getInitialConfig',
                            'onConfigUpdate',
                            'callOverridden',
                            '_profile',
                            'refresh'
            	           ]
        	        var OwnUnwanted = [
    //                        'getViewName',
    //                        'createView',
    //                        'getDevice'
        	               ]
                    var name, fn;
                    for (name in TemplateClass) {
                    	if (SenchaUnwanted.indexOf(name) == -1 && OwnUnwanted.indexOf(name) == -1) {
                            fn = TemplateClass[name];
                            if (typeof fn === 'function') {
                                TemplateClass[name] = (function(name, fn) {
                                    var args = arguments;
                                    return function() {
                                        if ((typeof withFn.apply == 'function') && (typeof fn.apply == 'function') && (fn.$owner != 'undefined')) 
                                        {
                                            var debugfunc = withFn.apply(this, args);
                                            if (debugfunc && showArguments) {
                                                fly.helper.Debug.logArgsDebugJs(fn, arguments) == 'noargs' ? '' : console.log(fly.helper.Debug.logArgsDebugJs(fn, arguments));
                                            }
                                            var returnvalue = fn.apply(this, arguments);
                                            if (debugfunc) {
                                            	if (showConsoleTime) {
                                                    console.timeEnd(debugfunc);
                                            	}
                                            	if (showConsoleGroup) {
                                            	   console.groupEnd(debugfunc);
                                            	}
                                            }
                                            return returnvalue
                                        }
                                    }
                                })(name, fn);
                            }
                    	}
                    }
                }
                augment(function(name, fn) {
                    if (fly.helper.Debug.logFuncDebugJs(fn)) {
                    	var debugfunc;
                    	if (showConsoleGroup) {
                    		console.group(debugfunc = fly.helper.Debug.logFuncDebugJs(fn));
                    	} else { console.log (debugfunc = fly.helper.Debug.logFuncDebugJs(fn)) }
                        if (showConsoleTime) {
                        	console.time(debugfunc)
                        }
                        return debugfunc;
                    } else {
                    	return false
                    }
                });
            },
            
            /*
             * not working well in eclipse aka logcat
             * use this lines when you annt to add the code Mannuel to each function:
             * foo: function() {
             *     var debugfunc;
             *       console.group(debugfunc = fly.helper.Debug.logFuncManual());
             *       fly.helper.Debug.logArgsManual() == 'noargs' ? '' : console.log(fly.helper.Debug.logArgsManual());
             *
             *        [[[ code here ]]]
             *
             *       // <-- direct before every return value (everywhere where you close the function)
             *       return 
             *   }
             */
            
            logFuncManual: function() {
                try {
                    var file = arguments.callee.caller.$owner.$className;
                    var func = ": " + arguments.callee.caller.$name;
                    var string = file + func;
                    return string;
                } catch (err) {
                    var returnvalue = new Array('Error within logFunc');
                    return returnvalue
                }
            },
            
            logArgsManual: function() {
                try {
                    var returnvalue = new Array();
                    if (arguments.callee.caller.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logArgs');
                    return returnvalue
                }
            },
            
            /*
             * these are the modified versions of the 2 methods above to work in the debug.js
             */
            logFuncDebugJs: function(fn, arguments) {
                try {
                    var file = '';
                    var func = '';
                    try {
                        file = fn.$owner.$className;
                        func = ": " + fn.$name;
                        var string = file + func;
                        return string;
                    } catch  (err) {
                        func = 'unknown function';
                        return false;
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logFunc');
                    return returnvalue
                }
            },
            
            logArgsDebugJs: function(fn, arguments) {
                try {
                    var returnvalue = new Array();
                    if (arguments.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logArgs');
                    return returnvalue
                }
            },
    
    
            /*
             * working in eclipse 
             * call this way: console.log(fly.helper.Debug.consoleOutput());
             */ 
            consoleOutput: function() {
                try {
                    var logDate = new Date();
                    var args = '';
                    if (arguments.callee.caller.length > 0) {
                        args = ' with Arguments: ';
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            args = args + argumentIndex + ': ' + arguments.callee.caller.arguments[argumentIndex];
                            if (argumentIndex < arguments.callee.caller.length - 1) {
                                args = args + ', '
                            }
                        }
                    }
                    return arguments.callee.caller.$owner.$className + ": " + arguments.callee.caller.$name + args
                } catch (err) {
                    return 'Error within consoleOutput'
                }
            },
    
    
            /*
             * call this way:  console.log(Array.prototype.slice.call(fly.helper.Debug.logOutput()));
             */ 
            logOutput: function() {
                try {
                    var file = " --> " + arguments.callee.caller.$owner.$className;
                    var func = ": " + arguments.callee.caller.$name;
                    var string = file + func;
                    var args = arguments.callee.caller.arguments;
                    var returnvalue = new Array(string);
                    if (arguments.callee.caller.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logOutput');
                    return returnvalue
                }
            },
            
            logwebkitevents: function() {
                var known = [
                    'abort', 
                    'beforecopy', 
                    'beforecut', 
                    'beforeload', 
                    'beforepaste', 
                    'beforeprocess', 
                    'beforeunload', 
                    'blur', 
                    'cached', 
                    'change', 
                    'checking', 
                    'click', 
                    'close', 
                    'complete', 
                    'compositionend', 
                    'compositionstart', 
                    'compositionupdate', 
                    'connect', 
                    'contextmenu', 
                    'copy', 
                    'cut', 
                    'dblclick', 
                    'devicemotion', 
                    'deviceorientation', 
                    'display', 
                    'downloading', 
                    'drag', 
                    'dragend', 
                    'dragenter', 
                    'dragleave', 
                    'dragover', 
                    'dragstart', 
                    'drop', 
                    'error', 
                    'focus', 
                    'focusin', 
                    'focusout', 
                    'formchange', 
                    'forminput', 
                    'hashchange', 
                    'input', 
                    'invalid', 
                    'keydown', 
                    'keypress', 
                    'keyup', 
                    'load', 
                    'loadstart', 
                    'message', 
                    'mousedown', 
                    'mousemove', 
                    'mouseout', 
                    'mouseover', 
                    'mouseup', 
                    'mousewheel', 
                    'noupdate', 
                    'obsolete', 
                    'offline', 
                    'online', 
                    'open', 
                    'overflowchanged', 
                    'pagehide', 
                    'pageshow', 
                    'paste', 
                    'popstate', 
                    'readystatechange', 
                    'reset', 
                    'resize', 
                    'scroll', 
                    'search', 
                    'select', 
                    'selectstart', 
                    'storage', 
                    'submit', 
                    'textInput', 
                    'unload', 
                    'updateready', 
                    'write', 
                    'writeend', 
                    'writestart', 
                    'zoom', 
                    'DOMActivate', 
                    'DOMFocusIn', 
                    'DOMFocusOut', 
                    'DOMAttrModified', 
                    'DOMCharacterDataModified', 
                    'DOMNodeInserted', 
                    'DOMNodeInsertedIntoDocument', 
                    'DOMNodeRemoved', 
                    'DOMNodeRemovedFromDocument', 
                    'DOMSubtreeModified', 
                    'DOMContentLoaded', 
                    'webkitBeforeTextInserted', 
                    'webkitEditableContentChanged', 
                    'canplay', 
                    'canplaythrough', 
                    'durationchange', 
                    'emptied', 
                    'ended', 
                    'loadeddata', 
                    'loadedmetadata', 
                    'pause', 
                    'play', 
                    'playing', 
                    'ratechange', 
                    'seeked', 
                    'seeking', 
                    'timeupdate', 
                    'volumechange', 
                    'waiting', 
                    'webkitbeginfullscreen', 
                    'webkitendfullscreen', 
                    'progress', 
                    'stalled', 
                    'suspend', 
                    'webkitAnimationEnd', 
                    'webkitAnimationStart', 
                    'webkitAnimationIteration', 
                    'webkitTransitionEnd', 
                    'orientationchange', 
                    'timeout', 
                    'touchstart', 
                    'touchmove', 
                    'touchend', 
                    'touchcancel', 
                    'success', 
                    'loadend', 
                    'webkitfullscreenchange', 
                    'webkitspeechchange', 
                    'webglcontextlost', 
                    'webglcontextrestored', 
                    'webglcontextcreationerror', 
                    'audioprocess'
                ];
                
                function lognamed(name) {
                    document.addEventListener(name, function() {
                        console.log(name);
                    }, true);
                }
                
                known.forEach(function(name) {
                    lognamed(name);
                });
            }
        }
    });
    
    
    if (showWebkitEvents) {
        fly.helper.Debug.logwebkitevents()
    }
    Last edited by p5hema2; 6 Jul 2012 at 12:19 AM. Reason: Big misstake form me, forget to push the returnvalue, code updated :-)

  2. #2
    Sencha User p5hema2's Avatar
    Join Date
    May 2012
    Location
    Jena Germany
    Posts
    20
    Vote Rating
    1
    p5hema2 is on a distinguished road

      0  

    Default


    i found a big failure, but corrected it in the code above,
    should work now with every method in controllers :-)

  3. #3
    Sencha User p5hema2's Avatar
    Join Date
    May 2012
    Location
    Jena Germany
    Posts
    20
    Vote Rating
    1
    p5hema2 is on a distinguished road

      0  

    Default UPDATE: now also shows returnvalues

    UPDATE: now also shows returnvalues


    TODO: next i try to get all functions in models, stores and views as well. currently only controllers working

    Code:
    showAnyConsole = true;
    showConsoleGroup = true;
    showArguments = true;
    showReturn = true;
    showConsoleTime = false;
    showWebkitEvents = false;
    
    
    /* 
     * Store this all under "app/helper/debug.js"
     * 
     * You have to edit some lines below to get this all working
     * 
     * line 62 63 your have to replace "fly." with your app name, dont miss the "."
     * in line 73 230 249 252 269 270 349 371 544 as well :-) simply everywhere where you find "fly." in this file :-)
     * 
     * you have to add the file to your index debug html like this:
     * <script type="text/javascript" src="app/helper/debug.js"></script> * 
     * 
     * add to the array in line 213 all functions which break the debug.js, i have 0 which are not working :-)
     */
    
    
    
    
    
    
    if (!showAnyConsole) {
        console = {};
        console.log = function(){};
        console.group = function(){};
        console.groupEnd = function(){};
        console.groupCollapsed = function(){};
        console.time = function(){};
        console.timeEnd = function(){};
        console.debug = function(){};
        console.info = function(){};
        console.warn = function(){};
        console.error = function(){};
        console.assert = function(){};
        console.clear = function(){};
        console.dir = function(){};
        console.dirxml = function(){};
        console.trace = function(){};
        console.time = function(){};
        console.timeEnd = function(){};
        console.profile = function(){};
        console.profileEnd = function(){};
        console.count = function(){};
        console.exception = function(){};
        console.table = function(){};
    }
    if (!showConsoleGroup) {
        console.group = function(){};
        console.groupEnd = function(){};
        console.groupCollapsed = function(){};
    }
    if (!showConsoleTime) {
        console.time = function(){};
        console.timeEnd = function(){};
    }
    
    
    Ext.override(Ext.app.Controller, {
        constructor: function(config) {
            var that = this;
    
    
            if (that.__proto__.$className.indexOf('fly.') != -1) {
                fly.helper.Debug.addDebug(that.__proto__)
            }
            this.initConfig(config);
            this.mixins.observable.constructor.call(this, config);
            
    
    
        }
    })
    
    
    Ext.define('fly.helper.Debug', {
        statics: {
            addDebug: function(TemplateClass) {
                function augment(withFn) {
                    var SenchaUnwanted = [
                            'configClass',          // <-- never comment out
                            'self',                 // <-- never comment out
                            'superclass',
                            'defaultConfig',
                            'config',
                            'initConfigList',
                            'initConfigMap',
                            'configClass',
                            '$className',
                            'initGetProfile',
                            'getProfile',
                            'setProfile',
                            'initGetViewCache',
                            'getViewCache',
                            'setViewCache',
                            'constructor',
                            'execute',
                            'applyBefore',
                            'applyControl',
                            'applyRefs',
                            'applyRoutes',
                            'applyStores',
                            'applyModels',
                            'applyViews',
                            'getFullyQualified',
                            'control',
                            'ref',
                            'getRef',
                            'hasRef',
                            'initGetRefs',
                            'getRefs',
                            'setRefs',
                            'initGetRoutes',
                            'getRoutes',
                            'setRoutes',
                            'initGetControl',
                            'getControl',
                            'setControl',
                            'initGetBefore',
                            'getBefore',
                            'setBefore',
                            'initGetApplication',
                            'getApplication',
                            'setApplication',
                            'initGetStores',
                            'getStores',
                            'setStores',
                            'initGetModels',
                            'getModels',
                            'setModels',
                            'initGetViews',
                            'getViews',
                            'setViews',
                            'destroy',
                            'mixins',
                            'requires',
                            'mixinConfig',
                            'alternateClassName',
                            'isObservable',
                            'observableType',
                            'validIdRegex',
                            'observableIdPrefix',
                            'listenerOptionsRegex',
                            'applyListeners',
                            'applyBubbleEvents',
                            'getOptimizedObservableId',
                            'getObservableId',
                            'getOptimizedEventDispatcher',
                            'getEventDispatcher',
                            'getManagedListeners',
                            'getUsedSelectors',
                            'fireEvent',
                            'fireAction',
                            'doFireEvent',
                            'doAddListener',
                            'addDispatcherListener',
                            'doRemoveListener',
                            'removeDispatcherListener',
                            'clearManagedListeners',
                            'changeListener',
                            'addListener',
                            'addBeforeListener',
                            'addAfterListener',
                            'removeListener',
                            'removeBeforeListener',
                            'removeAfterListener',
                            'clearListeners',
                            'hasListener',
                            'suspendEvents',
                            'resumeEvents',
                            'relayEvents',
                            'relayEvent',
                            'createEventRelayer',
                            'enableBubble',
                            'createEventBubbler',
                            'getBubbleTarget',
                            'addEvents',
                            'onClassMixedIn',
                            'initGetListeners',
                            '_listeners',
                            'getListeners',
                            'setListeners',
                            'initGetBubbleEvents',
                            '_bubbleEvents',
                            'getBubbleEvents',
                            'setBubbleEvents',
                            'isIdentifiable',
                            'idCleanRegex',
                            'defaultIdPrefix',
                            'defaultIdSeparator',
                            'getOptimizedId',
                            'getUniqueId',
                            'setId',
                            'getId',
                            'on',
                            'un',
                            'onBefore',
                            'onAfter',
                            'unBefore',
                            'unAfter',
                            'isInstance',
                            'statics',
                            'callParent',
                            'wasInstantiated',
                            'initConfig',
                            'beforeInitConfig',
                            'getCurrentConfig',
                            'setConfig',
                            'getConfig',
                            'hasConfig',
                            'getInitialConfig',
                            'onConfigUpdate',
                            'callOverridden',
                            '_profile',
                            'refresh'
            	           ]
        	        var OwnUnwanted = [
    //                        'getViewName',
    //                        'createView',
    //                        'getDevice'
        	               ]
                    var name, fn;
                    for (name in TemplateClass) {
                    	if (SenchaUnwanted.indexOf(name) == -1 && OwnUnwanted.indexOf(name) == -1) {
                            fn = TemplateClass[name];
                            if (typeof fn === 'function') {
                                TemplateClass[name] = (function(name, fn) {
                                    var args = arguments;
                                    return function() {
                                        if ((typeof withFn.apply == 'function') && (typeof fn.apply == 'function') && (fn.$owner != 'undefined')) 
                                        {
                                            var debugfunc = withFn.apply(this, args);
                                            if (debugfunc && showArguments) {
                                                fly.helper.Debug.logArgsDebugJs(fn, arguments) == 'noargs' ? '' : console.log('args: ', fly.helper.Debug.logArgsDebugJs(fn, arguments));
                                            }
                                            var returnvalue = fn.apply(this, arguments);
                                            if (debugfunc) {
                                                if (showReturn) {
                                                   console.log('return: ', returnvalue);
                                                }
                                            	if (showConsoleTime) {
                                                    console.timeEnd(debugfunc);
                                            	}
                                            	if (showConsoleGroup) {
                                            	   console.groupEnd(debugfunc);
                                            	}
                                            }
                                            return returnvalue
                                        }
                                    }
                                })(name, fn);
                            }
                    	}
                    }
                }
                augment(function(name, fn) {
                    if (fly.helper.Debug.logFuncDebugJs(fn)) {
                    	var debugfunc;
                    	if (showConsoleGroup) {
                    		console.group(debugfunc = fly.helper.Debug.logFuncDebugJs(fn));
                    	} else { console.log (debugfunc = fly.helper.Debug.logFuncDebugJs(fn)) }
                        if (showConsoleTime) {
                        	console.time(debugfunc)
                        }
                        return debugfunc;
                    } else {
                    	return false
                    }
                });
            },
            
            /*
             * not working well in eclipse aka logcat
             * use this lines when you annt to add the code Mannuel to each function:
             * foo: function() {
             *     var debugfunc;
             *       console.group(debugfunc = fly.helper.Debug.logFuncManual());
             *       fly.helper.Debug.logArgsManual() == 'noargs' ? '' : console.log(fly.helper.Debug.logArgsManual());
             *
             *        [[[ code here ]]]
             *
             *       // <-- direct before every return value (everywhere where you close the function)
             *       return 
             *   }
             */
            
            logFuncManual: function() {
                try {
                    var file = arguments.callee.caller.$owner.$className;
                    var func = ": " + arguments.callee.caller.$name;
                    var string = file + func;
                    return string;
                } catch (err) {
                    var returnvalue = new Array('Error within logFunc');
                    return returnvalue
                }
            },
            
            logArgsManual: function() {
                try {
                    var returnvalue = new Array();
                    if (arguments.callee.caller.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logArgs');
                    return returnvalue
                }
            },
            
            /*
             * these are the modified versions of the 2 methods above to work in the debug.js
             */
            logFuncDebugJs: function(fn, arguments) {
                try {
                    var file = '';
                    var func = '';
                    try {
                        file = fn.$owner.$className;
                        func = ": " + fn.$name;
                        var string = file + func;
                        return string;
                    } catch  (err) {
                        func = 'unknown function';
                        return false;
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logFunc');
                    return returnvalue
                }
            },
            
            logArgsDebugJs: function(fn, arguments) {
                try {
                    var returnvalue = new Array();
                    if (arguments.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logArgs');
                    return returnvalue
                }
            },
    
    
            /*
             * working in eclipse 
             * call this way: console.log(fly.helper.Debug.consoleOutput());
             */ 
            consoleOutput: function() {
                try {
                    var logDate = new Date();
                    var args = '';
                    if (arguments.callee.caller.length > 0) {
                        args = ' with Arguments: ';
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            args = args + argumentIndex + ': ' + arguments.callee.caller.arguments[argumentIndex];
                            if (argumentIndex < arguments.callee.caller.length - 1) {
                                args = args + ', '
                            }
                        }
                    }
                    return arguments.callee.caller.$owner.$className + ": " + arguments.callee.caller.$name + args
                } catch (err) {
                    return 'Error within consoleOutput'
                }
            },
    
    
            /*
             * call this way:  console.log(Array.prototype.slice.call(fly.helper.Debug.logOutput()));
             */ 
            logOutput: function() {
                try {
                    var file = " --> " + arguments.callee.caller.$owner.$className;
                    var func = ": " + arguments.callee.caller.$name;
                    var string = file + func;
                    var args = arguments.callee.caller.arguments;
                    var returnvalue = new Array(string);
                    if (arguments.callee.caller.length > 0) {
                        for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                            returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                        }
                        return returnvalue
                    } else {
                        return 'noargs'
                    }
                } catch (err) {
                    var returnvalue = new Array('Error within logOutput');
                    return returnvalue
                }
            },
            
            logwebkitevents: function() {
                var known = [
                    'abort', 
                    'beforecopy', 
                    'beforecut', 
                    'beforeload', 
                    'beforepaste', 
                    'beforeprocess', 
                    'beforeunload', 
                    'blur', 
                    'cached', 
                    'change', 
                    'checking', 
                    'click', 
                    'close', 
                    'complete', 
                    'compositionend', 
                    'compositionstart', 
                    'compositionupdate', 
                    'connect', 
                    'contextmenu', 
                    'copy', 
                    'cut', 
                    'dblclick', 
                    'devicemotion', 
                    'deviceorientation', 
                    'display', 
                    'downloading', 
                    'drag', 
                    'dragend', 
                    'dragenter', 
                    'dragleave', 
                    'dragover', 
                    'dragstart', 
                    'drop', 
                    'error', 
                    'focus', 
                    'focusin', 
                    'focusout', 
                    'formchange', 
                    'forminput', 
                    'hashchange', 
                    'input', 
                    'invalid', 
                    'keydown', 
                    'keypress', 
                    'keyup', 
                    'load', 
                    'loadstart', 
                    'message', 
                    'mousedown', 
                    'mousemove', 
                    'mouseout', 
                    'mouseover', 
                    'mouseup', 
                    'mousewheel', 
                    'noupdate', 
                    'obsolete', 
                    'offline', 
                    'online', 
                    'open', 
                    'overflowchanged', 
                    'pagehide', 
                    'pageshow', 
                    'paste', 
                    'popstate', 
                    'readystatechange', 
                    'reset', 
                    'resize', 
                    'scroll', 
                    'search', 
                    'select', 
                    'selectstart', 
                    'storage', 
                    'submit', 
                    'textInput', 
                    'unload', 
                    'updateready', 
                    'write', 
                    'writeend', 
                    'writestart', 
                    'zoom', 
                    'DOMActivate', 
                    'DOMFocusIn', 
                    'DOMFocusOut', 
                    'DOMAttrModified', 
                    'DOMCharacterDataModified', 
                    'DOMNodeInserted', 
                    'DOMNodeInsertedIntoDocument', 
                    'DOMNodeRemoved', 
                    'DOMNodeRemovedFromDocument', 
                    'DOMSubtreeModified', 
                    'DOMContentLoaded', 
                    'webkitBeforeTextInserted', 
                    'webkitEditableContentChanged', 
                    'canplay', 
                    'canplaythrough', 
                    'durationchange', 
                    'emptied', 
                    'ended', 
                    'loadeddata', 
                    'loadedmetadata', 
                    'pause', 
                    'play', 
                    'playing', 
                    'ratechange', 
                    'seeked', 
                    'seeking', 
                    'timeupdate', 
                    'volumechange', 
                    'waiting', 
                    'webkitbeginfullscreen', 
                    'webkitendfullscreen', 
                    'progress', 
                    'stalled', 
                    'suspend', 
                    'webkitAnimationEnd', 
                    'webkitAnimationStart', 
                    'webkitAnimationIteration', 
                    'webkitTransitionEnd', 
                    'orientationchange', 
                    'timeout', 
                    'touchstart', 
                    'touchmove', 
                    'touchend', 
                    'touchcancel', 
                    'success', 
                    'loadend', 
                    'webkitfullscreenchange', 
                    'webkitspeechchange', 
                    'webglcontextlost', 
                    'webglcontextrestored', 
                    'webglcontextcreationerror', 
                    'audioprocess'
                ];
                
                function lognamed(name) {
                    document.addEventListener(name, function() {
                        console.log(name);
                    }, true);
                }
                
                known.forEach(function(name) {
                    lognamed(name);
                });
            }
        }
    });
    
    
    if (showWebkitEvents) {
        fly.helper.Debug.logwebkitevents()
    }

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar