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()
    }

Turkiyenin en sevilen filmlerinin yer aldigi xnxx internet sitemiz olan ve porn sex tarzi bir site olan mobil porno izle sitemiz gercekten dillere destan bir durumda herkesin sevdigi bir site olarak tarihe gececege benziyor. Sitenin en belirgin ozelliklerinden birisi de Turkiyede gercekten kaliteli ve muntazam, duzenli porno izle siteleri olmamasidir. Bu yuzden iste. Ayrica en net goruntu kalitesine sahip adresinde yayinlanmaktadir. Mesela diğer sitelerimizden bahsedecek olursak, en iyi hd porno video arşivine sahip bir siteyiz. "The Best anal porn videos and slut anus, big asses movies set..." hd porno faketaxi