debug.js

来自「php绿色服务器,让大家试用greenamp」· JavaScript 代码 · 共 734 行 · 第 1/2 页

JS
734
字号
/*
 * Ext JS Library 1.0.1
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://www.extjs.com/license
 */

/* * These functions are only included in -debug files **/Ext.debug = {    init : function(){        var CP = Ext.ContentPanel;        var bd = Ext.get(document.body);        // create the dialog        var dlg = new Ext.LayoutDialog('x-debug-browser', {            autoCreate:true,            width:800,            height:450,            title: 'Ext Debug Console &amp; Inspector',            proxyDrag:true,            shadow:true,            center:{alwaysShowTabs:true},            constraintoviewport:false        });        // prevent dialog events from bubbling        dlg.el.swallowEvent('click');        // build the layout        var mainLayout = dlg.getLayout();        mainLayout.beginUpdate();        // create the nested layouts        var clayout = mainLayout.add('center',            new Ext.debug.InnerLayout('x-debug-console', 400, {                title: 'Debug Console'            }        ));        var ilayout = mainLayout.add('center',            new Ext.debug.InnerLayout('x-debug-inspector', 250, {                title: 'DOM Inspector'            }        ));        var scriptPanel = clayout.add('east', new CP({            autoCreate:{                tag: 'div', children: [                    {tag: 'div'},                    {tag:'textarea'}                ]            },            fitContainer:true,            fitToFrame:true,            title:'Script Console',            autoScroll: Ext.isGecko, // hideous block for firefox missing cursor AND bad sizing textareas            setSize : function(w, h){                Ext.ContentPanel.prototype.setSize.call(this, w, h);                if(Ext.isGecko && Ext.isStrict){                    var s = this.adjustForComponents(w, h);                    this.resizeEl.setSize(s.width-2, s.height-2);                }            }        }));        var sel = scriptPanel.el;        var script = sel.child('textarea');        scriptPanel.resizeEl = script;        var sctb = scriptPanel.toolbar = new Ext.Toolbar(sel.child('div'));        sctb.add({            text: 'Run',            handler: function(){                var s = script.dom.value;                if(trap.checked){                    try{                        var rt = eval(s);                        Ext.debug.dump(rt === undefined? '(no return)' : rt);                    }catch(e){                        Ext.debug.log(e.message || e.descript);                    }                }else{                    var rt = eval(s);                    Ext.debug.dump(rt === undefined? '(no return)' : rt);                }            }        }, {            text: 'Clear',            handler: function(){                script.dom.value = '';                script.dom.focus();            }        });        var trap = Ext.DomHelper.append(sctb.el, {tag:'input', type:'checkbox', checked: 'checked'});        trap.checked = true;        sctb.add('-', trap, 'Trap Errors');        var stylesGrid = new Ext.grid.PropertyGrid(bd.createChild(), {            nameText: 'Style',            enableCtxMenu: false,            enableColumnResize: false        });        var stylePanel = ilayout.add('east', new Ext.GridPanel(stylesGrid,            {title: '(No element selected)'}));        stylesGrid.render();        // hide the header        stylesGrid.getView().mainHd.setDisplayed(false);        clayout.tbar.add({            text: 'Clear',            handler: function(){                Ext.debug.console.jsonData = [];                Ext.debug.console.refresh();            }        });        var treeEl = ilayout.main.getEl();        // create main inspector toolbar        var tb = ilayout.tbar;        var inspectIgnore, inspecting;        function inspectListener(e, t){            if(!inspectIgnore.contains(e.getPoint())){                findNode(t);            }        }        function stopInspecting(e, t){            if(!inspectIgnore.contains(e.getPoint())){                inspect.toggle(false);                if(findNode(t) !== false){                    e.stopEvent();                }            }        }        function stopInspectingEsc(e, t){            if(e.getKey() == e.ESC){                inspect.toggle(false);            }        }        var inspect = tb.addButton({            text: 'Inspect',            enableToggle: true,            pressed:false,            toggleHandler: function(n, pressed){                var d = Ext.get(document);                if(pressed){                    d.on('mouseover', inspectListener, window, {buffer:50});                    d.on('mousedown', stopInspecting);                    d.on('keydown', stopInspectingEsc);                    inspectIgnore = dlg.el.getRegion();                    inspecting = true;                }else{                    d.un('mouseover', inspectListener);                    d.un('mousedown', stopInspecting);                    d.on('keydown', stopInspectingEsc);                    inspecting = false;                    var n = tree.getSelectionModel().getSelectedNode();                    if(n && n.htmlNode){                        onNodeSelect(tree, n, false);                    }                }            }        });        tb.addSeparator();        var frameEl = tb.addButton({            text: 'Highlight Selection',            enableToggle: true,            pressed:false,            toggleHandler: function(n, pressed){                var n = tree.getSelectionModel().getSelectedNode();                if(n && n.htmlNode){                    n[pressed ? 'frame' : 'unframe']();                }            }        });        tb.addSeparator();        var reload = tb.addButton({            text: 'Refresh Children',            disabled:true,            handler: function(){                var n = tree.getSelectionModel().getSelectedNode();                if(n && n.reload){                    n.reload();                }            }        });        tb.add( '-', {            text: 'Collapse All',            handler: function(){                tree.root.collapse(true);            }        });        // perform the main layout        mainLayout.endUpdate();        mainLayout.getRegion('center').showPanel(0);        stylesGrid.on('propertychange', function(s, name, value){            var node = stylesGrid.treeNode;            if(styles){                node.htmlNode.style[name] = value;            }else{                node.htmlNode[name] = value;            }            node.refresh(true);        });        // Create the style toolbar        var stb = new Ext.Toolbar(stylesGrid.view.getHeaderPanel(true));        var swap = stb.addButton({            text: 'DOM Attributes',            menu: {                items: [                    new Ext.menu.CheckItem({id:'dom', text:'DOM Attributes', checked: true, group:'xdb-styles'}),                    new Ext.menu.CheckItem({id:'styles', text:'CSS Properties', group:'xdb-styles'})                ]            }        });        swap.menu.on('click', function(){            styles = swap.menu.items.get('styles').checked;            showAll[styles? 'show' : 'hide']();            swap.setText(styles ? 'CSS Properties' : 'DOM Attributes');            var n = tree.getSelectionModel().getSelectedNode();            if(n){                onNodeSelect(tree, n);            }        });                var addStyle = stb.addButton({            text: 'Add',            disabled: true,            handler: function(){                Ext.MessageBox.prompt('Add Property', 'Property Name:', function(btn, v){                    // store.store is disgusting TODO: clean up the API                    var store = stylesGrid.store.store;                    if(btn == 'ok' && v && !store.getById(v)){                        var r = new Ext.grid.PropertyRecord({name:v, value: ''}, v);                        store.add(r);                        stylesGrid.startEditing(store.getCount()-1, 1);                    }                });            }        });        var showAll = stb.addButton({            text: 'Computed Styles',            hidden: true,            pressed: false,            enableToggle: true,            toggleHandler: function(){                var n = tree.getSelectionModel().getSelectedNode();                if(n){                    onNodeSelect(tree, n);                }            }        });        // tree related stuff        var styles = false, hnode;        var nonSpace = /^\s*$/;        var html = Ext.util.Format.htmlEncode;        var ellipsis = Ext.util.Format.ellipsis;        var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;        function findNode(n){            if(!n || n.nodeType != 1 || n == document.body || n == document){                return false;            }            var pn = [n], p = n;            while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){                pn.unshift(p);            }            var cn = hnode;            for(var i = 0, len = pn.length; i < len; i++){                cn.expand();                cn = cn.findChild('htmlNode', pn[i]);                if(!cn){ // in this dialog?                    return false;                }            }            cn.select();            var a = cn.ui.anchor;            treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10);            //treeEl.dom.scrollLeft = Math.max(0 ,a.offsetLeft-10); no likey            cn.highlight();            return true;        }        function nodeTitle(n){            var s = n.tagName;            if(n.id){                s += '#'+n.id;            }else if(n.className){                s += '.'+n.className;            }            return s;        }        function onNodeSelect(t, n, last){            if(last && last.unframe){                last.unframe();            }            var props = {};            if(n && n.htmlNode){                if(frameEl.pressed){                    n.frame();                }                if(inspecting){                    return;                }                addStyle.enable();                reload.setDisabled(n.leaf);                var dom = n.htmlNode;                stylePanel.setTitle(nodeTitle(dom));                if(styles && !showAll.pressed){                    var s = dom.style ? dom.style.cssText : '';                    if(s){                        var m;                        while ((m = styleRe.exec(s)) != null){                            props[m[1].toLowerCase()] = m[2];                        }                    }                }else if(styles){                    var cl = Ext.debug.cssList;                    var s = dom.style, fly = Ext.fly(dom);                    if(s){                        for(var i = 0, len = cl.length; i<len; i++){                            var st = cl[i];                            var v = s[st] || fly.getStyle(st);                            if(v != undefined && v !== null && v !== ''){                                props[st] = v;                            }                        }                    }                }else{                    for(var a in dom){                        var v = dom[a];                        if((isNaN(a+10)) && v != undefined && v !== null && v !== '' && !(Ext.isGecko && a[0] == a[0].toUpperCase())){                            props[a] = v;                        }                    }                }            }else{                if(inspecting){                    return;                }                addStyle.disable();                reload.disabled();            }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?