📄 xtree2.js
字号:
if (!el || !el.parentNode) return;
var newEl = this.create();
el.parentNode.replaceChild(newEl, el);
this._setTabIndex(this.tabIndex); // in case root had the tab index
var si = t.getSelected();
if (si && si.getFocused()) {
si.focus();
}
};
_p.updateExpandIcon = function updateExpandIcon() {
var t = this.getTree();
if (t.suspendRedraw) return;
var img = this.getExpandIconElement();
img.src = this.getExpandIconSrc();
var cel = this.getChildrenElement();
cel.style.backgroundPosition = this.getLineStyle2();
};
_p.updateIcon = function updateIcon() {
var t = this.getTree();
if (t.suspendRedraw) return;
var img = this.getIconElement();
if (img) {
img.src = this.getIconSrc();
}
};
// End DOM
_p._callSuspended = function _callSuspended(f) {
var t = this.getTree();
var sr = t.getSuspendRedraw();
t.setSuspendRedraw(true);
f.call(this);
t.setSuspendRedraw(sr);
};
// Event handlers
_p._onmousedown = function _onmousedown(e) {
var el = e.target || e.srcElement;
// expand icon
if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) {
this.toggle();
if (webFXTreeHandler.ie) {
window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10);
}
return false;
}
this.select();
if (/*!/webfx-tree-item-label/.test(el.className) && */!webFXTreeHandler.opera) { // opera cancels the click if focus is called
// in case we are not clicking on the label
if (webFXTreeHandler.ie) {
window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10);
} else {
this.focus();
}
}
var rowEl = this.getRowElement();
if (rowEl) {
rowEl.className = this.getRowClassName();
}
return false;
};
_p._onclick = function _onclick(e) {
var el = e.target || e.srcElement;
// expand icon
if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) {
return false;
}
if (typeof this.action == "function") {
this.action();
} else if (this.action != null) {
window.open(this.action, this.target || "_self");
}
return false;
};
_p._ondblclick = function _ondblclick(e) {
var el = e.target || e.srcElement;
// expand icon
if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) {
return;
}
this.toggle();
};
_p._onfocus = function _onfocus(e) {
this.select();
this._focused = true;
};
_p._onblur = function _onblur(e) {
this._focused = false;
};
_p._onkeydown = function _onkeydown(e) {
var n;
var rv = true;
switch (e.keyCode) {
case 39: // RIGHT
if (e.altKey) {
rv = true;
break;
}
if (this.hasChildren()) {
if (!this.getExpanded()) {
this.setExpanded(true);
} else {
this.getFirstChild().focus();
}
}
rv = false;
break;
case 37: // LEFT
if (e.altKey) {
rv = true;
break;
}
if (this.hasChildren() && this.getExpanded()) {
this.setExpanded(false);
} else {
var p = this.getParent();
var t = this.getTree();
// don't go to root if hidden
if (p && (t.showRootNode || p != t)) {
p.focus();
}
}
rv = false;
break;
case 40: // DOWN
n = this.getNextShownNode();
if (n) {
n.focus();
}
rv = false;
break;
case 38: // UP
n = this.getPreviousShownNode()
if (n) {
n.focus();
}
rv = false;
break;
}
if (!rv && e.preventDefault) {
e.preventDefault();
}
e.returnValue = rv;
return rv;
};
_p._onkeypress = function _onkeypress(e) {
if (!e.altKey && e.keyCode >= 37 && e.keyCode <= 40) {
if (e.preventDefault) {
e.preventDefault();
}
e.returnValue = false;
return false;
}
};
// End event handlers
_p.dispose = function dispose() {
if (this.disposed) return;
for (var i = this.childNodes.length - 1; i >= 0; i--) {
this.childNodes[i].dispose();
}
this.tree = null;
this.parentNode = null;
this.childNodes = null;
this.disposed = true;
};
// Some methods that are usable when navigating the tree using the arrows
_p.getLastShownDescendant = function getLastShownDescendant() {
if (!this.getExpanded() || !this.hasChildren()) {
return this;
}
// we know there is at least 1 child
return this.getLastChild().getLastShownDescendant();
};
_p.getNextShownNode = function getNextShownNode() {
if (this.hasChildren() && this.getExpanded()) {
return this.getFirstChild();
} else {
var p = this;
var next;
while (p != null) {
next = p.getNextSibling();
if (next != null) {
return next;
}
p = p.getParent();
}
return null;
}
};
_p.getPreviousShownNode = function getPreviousShownNode() {
var ps = this.getPreviousSibling();
if (ps != null) {
return ps.getLastShownDescendant();
}
var p = this.getParent();
var t = this.getTree();
if (!t.showRootNode && p == t) {
return null;
}
return p;
};
///////////////////////////////////////////////////////////////////////////////
// WebFXTree
///////////////////////////////////////////////////////////////////////////////
function WebFXTree(sText, oAction, sBehavior, sIcon, sOpenIcon) {
WebFXTreeAbstractNode.call(this, sText, oAction);
if (sIcon) this.icon = sIcon;
if (sOpenIcon) this.openIcon = sOpenIcon;
if (sBehavior) this.behavior = sBehavior;
}
_p = WebFXTree.prototype = new WebFXTreeAbstractNode;
_p.indentWidth = 19;
_p.open = true;
_p._selectedItem = null;
_p._fireChange = true;
_p.rendered = false;
_p.suspendRedraw = false;
_p.showLines = true;
_p.showExpandIcons = true;
_p.showRootNode = true;
_p.showRootLines = true;
_p.getTree = function getTree() {
return this;
};
_p.getDepth = function getDepth() {
return 0;
};
_p.getCreated = function getCreated() {
return this.rendered;
};
/* end tree model */
_p.getExpanded = function getExpanded() {
return !this.showRootNode || WebFXTreeAbstractNode.prototype.getExpanded.call(this);
};
_p.setExpanded = function setExpanded(b) {
if (!this.showRootNode) {
this.open = b;
} else {
WebFXTreeAbstractNode.prototype.setExpanded.call(this, b);
}
};
_p.getExpandIconHtml = function getExpandIconHtml() {
return "";
};
// we don't have an expand icon here
_p.getIconElement = function getIconElement() {
var el = this.getRowElement();
if (!el) return null;
return el.firstChild;
};
// no expand icon for root element
_p.getExpandIconElement = function getExpandIconElement(oDoc) {
return null;
};
_p.updateExpandIcon = function updateExpandIcon() {
// no expand icon
};
_p.getRowClassName = function getRowClassName() {
return WebFXTreeAbstractNode.prototype.getRowClassName.call(this) +
(this.showRootNode ? "" : " webfx-tree-hide-root");
};
// if classic then the openIcon is used for expanded, otherwise openIcon is used
// for selected
_p.getIconSrc = function getIconSrc() {
var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior;
var open = behavior == "classic" && this.getExpanded() ||
behavior != "classic" && this.isSelected();
if (open && this.openIcon) {
return this.openIcon;
}
if (!open && this.icon) {
return this.icon;
}
// fall back on default icons
return open ? webFXTreeConfig.openRootIcon : webFXTreeConfig.rootIcon;
};
_p.getEventHandlersHtml = function getEventHandlersHtml() {
return " onclick=\"return webFXTreeHandler.handleEvent(event)\" " +
"onmousedown=\"return webFXTreeHandler.handleEvent(event)\" " +
"ondblclick=\"return webFXTreeHandler.handleEvent(event)\" " +
"onkeydown=\"return webFXTreeHandler.handleEvent(event)\" " +
"onkeypress=\"return webFXTreeHandler.handleEvent(event)\"";
};
_p.setSelected = function setSelected(o) {
if (this._selectedItem != o && o) {
o._setSelected(true);
}
};
_p._fireOnChange = function _fireOnChange() {
if (this._fireChange && typeof this.onchange == "function") {
this.onchange();
}
};
_p.getSelected = function getSelected() {
return this._selectedItem;
};
_p.tabIndex = "";
_p.setTabIndex = function setTabIndex(i) {
var n = this._selectedItem || (this.showRootNode ? this : this.firstChild);
this.tabIndex = i;
if (n) {
n._setTabIndex(i);
}
};
_p.getTabIndex = function getTabIndex() {
return this.tabIndex;
};
_p.setBehavior = function setBehavior(s) {
this.behavior = s;
};
_p.getBehavior = function getBehavior() {
return this.behavior || webFXTreeConfig.defaultBehavior;
};
_p.setShowLines = function setShowLines(b) {
if (this.showLines != b) {
this.showLines = b;
if (this.rendered) {
this.update();
}
}
};
_p.getShowLines = function getShowLines() {
return this.showLines;
};
_p.setShowRootLines = function setShowRootLines(b) {
if (this.showRootLines != b) {
this.showRootLines = b;
if (this.rendered) {
this.update();
}
}
};
_p.getShowRootLines = function getShowRootLines() {
return this.showRootLines;
};
_p.setShowExpandIcons = function setShowExpandIcons(b) {
if (this.showExpandIcons != b) {
this.showExpandIcons = b;
if (this.rendered) {
this.getTree().update();
}
}
};
_p.getShowExpandIcons = function getShowExpandIcons() {
return this.showExpandIcons;
};
_p.setShowRootNode = function setShowRootNode(b) {
if (this.showRootNode != b) {
this.showRootNode = b;
if (this.rendered) {
this.getTree().update();
}
}
};
_p.getShowRoootNode = function getShowRoootNode() {
return this.showRootNode;
};
_p.onchange = function onchange() {};
_p.create = function create() {
var el = WebFXTreeAbstractNode.prototype.create.call(this);
this.setTabIndex(this.tabIndex);
this.rendered = true;
return el;
};
_p.write = function write() {
document.write(this.toHtml());
this.setTabIndex(this.tabIndex);
this.rendered = true;
};
_p.setSuspendRedraw = function setSuspendRedraw(b) {
this.suspendRedraw = b;
};
_p.getSuspendRedraw = function getSuspendRedraw() {
return this.suspendRedraw;
};
///////////////////////////////////////////////////////////////////////////////
// WebFXTreeItem
///////////////////////////////////////////////////////////////////////////////
function WebFXTreeItem(sText, oAction, eParent, sIcon, sOpenIcon) {
WebFXTreeAbstractNode.call(this, sText, oAction);
if (sIcon) this.icon = sIcon;
if (sOpenIcon) this.openIcon = sOpenIcon;
if (eParent) eParent.add(this);
}
_p = WebFXTreeItem.prototype = new WebFXTreeAbstractNode;
_p.tree = null;
/* tree model */
_p.getDepth = function getDepth() {
if (this.depth != null) {
return this.depth;
}
if (this.parentNode) {
var pd = this.parentNode.getDepth();
return this.depth = (pd != null ? pd + 1 : null);
}
return null;
};
_p.getTree = function getTree() {
if (this.tree) {
return this.tree;
}
if (this.parentNode) {
return this.tree = this.parentNode.getTree();
}
return null;
};
_p.getCreated = function getCreated() {
var t = this.getTree();
return t && t.getCreated();
};
// if classic then the openIcon is used for expanded, otherwise openIcon is used
// for selected
_p.getIconSrc = function getIconSrc() {
var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior;
var open = behavior == "classic" && this.getExpanded() ||
behavior != "classic" && this.isSelected();
if (open && this.openIcon) {
return this.openIcon;
}
if (!open && this.icon) {
return this.icon;
}
// fall back on default icons
if (this.hasChildren()) {
return open ? webFXTreeConfig.openFolderIcon : webFXTreeConfig.folderIcon;
}
return webFXTreeConfig.fileIcon;
};
/* end tree model */
if (window.attachEvent) {
window.attachEvent("onunload", function () {
for (var id in webFXTreeHandler.all)
webFXTreeHandler.all[id].dispose();
});
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -