⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datagrid.js

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 JS
📖 第 1 页 / 共 2 页
字号:
        if (!gridNode || !gridNode.hasChildren)            return;        if (!gridNode.isEventWithinDisclosureTriangle(event))            return;        if (gridNode.expanded) {            if (event.altKey)                gridNode.collapseRecursively();            else                gridNode.collapse();        } else {            if (event.altKey)                gridNode.expandRecursively();            else                gridNode.expand();        }    }}WebInspector.DataGrid.prototype.__proto__ = WebInspector.Object.prototype;WebInspector.DataGridNode = function(data, hasChildren){    this._expanded = false;    this._selected = false;    this._shouldRefreshChildren = true;    this._data = data || {};    this.hasChildren = hasChildren || false;    this.children = [];    this.dataGrid = null;    this.parent = null;    this.previousSibling = null;    this.nextSibling = null;    this.disclosureToggleWidth = 10;}WebInspector.DataGridNode.prototype = {    selectable: true,    get element()    {        if (this._element)            return this._element;        if (!this.dataGrid)            return null;        this._element = document.createElement("tr");        this._element._dataGridNode = this;        if (this.hasChildren)            this._element.addStyleClass("parent");        if (this.expanded)            this._element.addStyleClass("expanded");        if (this.selected)            this._element.addStyleClass("selected");        if (this.revealed)            this._element.addStyleClass("revealed");        for (var columnIdentifier in this.dataGrid.columns) {            var cell = this.createCell(columnIdentifier);            this._element.appendChild(cell);        }        return this._element;    },    get data()    {        return this._data;    },    set data(x)    {        this._data = x || {};        this.refresh();    },    get revealed()    {        if ("_revealed" in this)            return this._revealed;        var currentAncestor = this.parent;        while (currentAncestor && !currentAncestor.root) {            if (!currentAncestor.expanded) {                this._revealed = false;                return false;            }            currentAncestor = currentAncestor.parent;        }        this._revealed = true;        return true;    },    set revealed(x)    {        if (this._revealed === x)            return;        this._revealed = x;        if (this._element) {            if (this._revealed)                this._element.addStyleClass("revealed");            else                this._element.removeStyleClass("revealed");        }        for (var i = 0; i < this.children.length; ++i)            this.children[i].revealed = x && this.expanded;    },    get depth()    {        if ("_depth" in this)            return this._depth;        if (this.parent && !this.parent.root)            this._depth = this.parent.depth + 1;        else            this._depth = 0;        return this._depth;    },    get shouldRefreshChildren()    {        return this._shouldRefreshChildren;    },    set shouldRefreshChildren(x)    {        this._shouldRefreshChildren = x;        if (x && this.expanded)            this.expand();    },    get selected()    {        return this._selected;    },    set selected(x)    {        if (x)            this.select();        else            this.deselect();    },    get expanded()    {        return this._expanded;    },    set expanded(x)    {        if (x)            this.expand();        else            this.collapse();    },    refresh: function()    {        if (!this._element || !this.dataGrid)            return;        this._element.removeChildren();        for (var columnIdentifier in this.dataGrid.columns) {            var cell = this.createCell(columnIdentifier);            this._element.appendChild(cell);        }    },    createCell: function(columnIdentifier)    {        var cell = document.createElement("td");        cell.className = columnIdentifier + "-column";        var div = document.createElement("div");        div.textContent = this.data[columnIdentifier];        cell.appendChild(div);        if (columnIdentifier === this.dataGrid.disclosureColumnIdentifier) {            cell.addStyleClass("disclosure");            if (this.depth)                cell.style.setProperty("padding-left", (this.depth * this.dataGrid.indentWidth) + "px");        }        return cell;    },    // Share these functions with DataGrid. They are written to work with a DataGridNode this object.    appendChild: WebInspector.DataGrid.prototype.appendChild,    insertChild: WebInspector.DataGrid.prototype.insertChild,    removeChild: WebInspector.DataGrid.prototype.removeChild,    removeChildren: WebInspector.DataGrid.prototype.removeChildren,    removeChildrenRecursive: WebInspector.DataGrid.prototype.removeChildrenRecursive,    collapse: function()    {        if (this._element)            this._element.removeStyleClass("expanded");        this._expanded = false;        for (var i = 0; i < this.children.length; ++i)            this.children[i].revealed = false;        this.dispatchEventToListeners("collapsed");    },    collapseRecursively: function()    {        var item = this;        while (item) {            if (item.expanded)                item.collapse();            item = item.traverseNextNode(false, this, true);        }    },    expand: function()    {        if (!this.hasChildren || this.expanded)            return;        if (this.revealed && !this._shouldRefreshChildren)            for (var i = 0; i < this.children.length; ++i)                this.children[i].revealed = true;        if (this._shouldRefreshChildren) {            for (var i = 0; i < this.children.length; ++i)                this.children[i]._detach();            this.dispatchEventToListeners("populate");            if (this._attached) {                for (var i = 0; i < this.children.length; ++i) {                    var child = this.children[i];                    if (this.revealed)                        child.revealed = true;                    child._attach();                }            }            delete this._shouldRefreshChildren;        }        if (this._element)            this._element.addStyleClass("expanded");        this._expanded = true;        this.dispatchEventToListeners("expanded");    },    expandRecursively: function()    {        var item = this;        while (item) {            item.expand();            item = item.traverseNextNode(false, this);        }    },    reveal: function()    {        var currentAncestor = this.parent;        while (currentAncestor && !currentAncestor.root) {            if (!currentAncestor.expanded)                currentAncestor.expand();            currentAncestor = currentAncestor.parent;        }        this.element.scrollIntoViewIfNeeded(false);        this.dispatchEventToListeners("revealed");    },    select: function(supressSelectedEvent)    {        if (!this.dataGrid || !this.selectable || this.selected)            return;        if (this.dataGrid.selectedNode)            this.dataGrid.selectedNode.deselect();        this._selected = true;        this.dataGrid.selectedNode = this;        if (this._element)            this._element.addStyleClass("selected");        if (!supressSelectedEvent)            this.dispatchEventToListeners("selected");    },    deselect: function(supressDeselectedEvent)    {        if (!this.dataGrid || this.dataGrid.selectedNode !== this || !this.selected)            return;        this._selected = false;        this.dataGrid.selectedNode = null;        if (this._element)            this._element.removeStyleClass("selected");        if (!supressDeselectedEvent)            this.dispatchEventToListeners("deselected");    },    traverseNextNode: function(skipHidden, stayWithin, dontPopulate, info)    {        if (!dontPopulate && this.hasChildren)            this.dispatchEventToListeners("populate");        if (info)            info.depthChange = 0;        var node = (!skipHidden || this.revealed) ? this.children[0] : null;        if (node && (!skipHidden || this.expanded)) {            if (info)                info.depthChange = 1;            return node;        }        if (this === stayWithin)            return null;        node = (!skipHidden || this.revealed) ? this.nextSibling : null;        if (node)            return node;        node = this;        while (node && !node.root && !((!skipHidden || node.revealed) ? node.nextSibling : null) && node.parent !== stayWithin) {            if (info)                info.depthChange -= 1;            node = node.parent;        }        if (!node)            return null;        return (!skipHidden || node.revealed) ? node.nextSibling : null;    },    traversePreviousNode: function(skipHidden, dontPopulate)    {        var node = (!skipHidden || this.revealed) ? this.previousSibling : null;        if (!dontPopulate && node && node.hasChildren)            node.dispatchEventToListeners("populate");        while (node && ((!skipHidden || (node.revealed && node.expanded)) ? node.children[node.children.length - 1] : null)) {            if (!dontPopulate && node.hasChildren)                node.dispatchEventToListeners("populate");            node = ((!skipHidden || (node.revealed && node.expanded)) ? node.children[node.children.length - 1] : null);        }        if (node)            return node;        if (!this.parent || this.parent.root)            return null;        return this.parent;    },    isEventWithinDisclosureTriangle: function(event)    {        if (!this.hasChildren)            return false;        var cell = event.target.enclosingNodeOrSelfWithNodeName("td");        if (!cell.hasStyleClass("disclosure"))            return false;        var computedLeftPadding = window.getComputedStyle(cell).getPropertyCSSValue("padding-left").getFloatValue(CSSPrimitiveValue.CSS_PX);        var left = cell.totalOffsetLeft + computedLeftPadding;        return event.pageX >= left && event.pageX <= left + this.disclosureToggleWidth;    },    _attach: function()    {        if (!this.dataGrid || this._attached)            return;        this._attached = true;        var nextNode = null;        var previousNode = this.traversePreviousNode(true, true);        if (previousNode && previousNode.element.parentNode && previousNode.element.nextSibling)            var nextNode = previousNode.element.nextSibling;        if (!nextNode)            nextNode = this.dataGrid.dataTableBody.lastChild;        this.dataGrid.dataTableBody.insertBefore(this.element, nextNode);        if (this.expanded)            for (var i = 0; i < this.children.length; ++i)                this.children[i]._attach();    },    _detach: function()    {        if (!this._attached)            return;        this._attached = false;        if (this._element && this._element.parentNode)            this._element.parentNode.removeChild(this._element);        for (var i = 0; i < this.children.length; ++i)            this.children[i]._detach();    }}WebInspector.DataGridNode.prototype.__proto__ = WebInspector.Object.prototype;

⌨️ 快捷键说明

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