📄 xtree2.js
字号:
var isRe = s instanceof RegExp;
if (isRe && s.test(this.getText()) || this.getText() == s) {
if (n == 0) {
return this.childNodes[i];
}
n--;
}
var res;
for (var i = 0; i < this.childNodes.length; i++) {
res = this.childNodes[i].findNodeByText(s, n);
if (res) {
return res;
}
}
return null;
};
/* end tree model */
_p.setId = function setId(sId) {
var el = this.getElement();
webFXTreeHandler.removeNode(this);
this.id = sId;
if (el) {
el.id = sId;
}
webFXTreeHandler.addNode(this);
};
_p.isSelected = function isSelected() {
return this._selected;
};
_p.select = function select() {
this._setSelected(true);
};
_p.deselect = function deselect() {
this._setSelected(false);
};
_p._setSelected = function _setSelected(b) {
var t = this.getTree();
if (!t) return;
if (this._selected != b) {
this._selected = b;
var wasFocused = false; // used to keep focus state
var si = t.getSelected();
if (b && si != null && si != this) {
var oldFireChange = t._fireChange;
wasFocused = si._focused;
t._fireChange = false;
si._setSelected(false);
t._fireChange = oldFireChange;
}
var el = this.getRowElement();
if (el) {
el.className = this.getRowClassName();
}
if (b) {
this._setTabIndex(t.tabIndex);
t._selectedItem = this;
t._fireOnChange();
t.setSelected(this);
if (wasFocused) {
this.focus();
}
} else {
this._setTabIndex(-1);
}
if (t.getBehavior() != "classic") {
this.updateIcon();
}
}
};
_p.getExpanded = function getExpanded() {
return this.open;
};
_p.setExpanded = function setExpanded(b) {
var ce;
this.open = b;
var t = this.getTree();
if (this.hasChildren()) {
var si = t ? t.getSelected() : null;
if (!b && this.contains(si)) {
this.select();
}
var el = this.getElement();
if (el) {
ce = this.getChildrenElement();
if (ce) {
ce.style.display = b ? "block" : "none";
}
var eie = this.getExpandIconElement();
if (eie) {
eie.src = this.getExpandIconSrc();
}
}
if (webFXTreeConfig.usePersistence) {
webFXTreeHandler.persistenceManager.setExpanded(this, b);
}
} else {
ce = this.getChildrenElement();
if (ce)
ce.style.display = "none";
}
if (t && t.getBehavior() == "classic") {
this.updateIcon();
}
};
_p.toggle = function toggle() {
this.setExpanded(!this.getExpanded());
};
_p.expand = function expand() {
this.setExpanded(true);
};
_p.collapse = function collapse() {
this.setExpanded(false);
};
_p.collapseChildren = function collapseChildren() {
var cs = this.childNodes;
for (var i = 0; i < cs.length; i++) {
cs[i].collapseAll();
}
};
_p.collapseAll = function collapseAll() {
this.collapseChildren();
this.collapse();
};
_p.expandChildren = function expandChildren() {
var cs = this.childNodes;
for (var i = 0; i < cs.length; i++) {
cs[i].expandAll();
}
};
_p.expandAll = function expandAll() {
this.expandChildren();
this.expand();
};
_p.reveal = function reveal() {
var p = this.getParent();
if (p) {
p.setExpanded(true);
p.reveal();
}
};
_p.openPath = function openPath(sPath, bSelect, bFocus) {
if (sPath == "") {
if (bSelect) {
this.select();
}
if (bFocus) {
window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10);
}
return;
}
var parts = sPath.split("/");
var remainingPath = parts.slice(1).join("/");
var t = this.getTree();
if (sPath.charAt(0) == "/") {
if (t) {
t.openPath(remainingPath, bSelect, bFocus);
} else {
throw "Invalid path";
}
} else {
// open
this.setExpanded(true);
parts = sPath.split("/");
var ti = this.findChildByText(parts[0]);
if (!ti) {
throw "Could not find child node with text \"" + parts[0] + "\"";
}
ti.openPath(remainingPath, bSelect, bFocus);
}
};
_p.focus = function focus() {
var el = this.getLabelElement();
if (el) {
el.focus();
}
};
_p.getFocused = function getFocused() {
return this._focused;
};
_p._setTabIndex = function _setTabIndex(i) {
var a = this.getLabelElement();
if (a) {
if (i == "") {
a.removeAttribute("tabIndex");
} else {
a.setAttribute("tabIndex", i);
}
}
};
// HTML generation
_p.toHtml = function toHtml() {
var sb = [];
var cs = this.childNodes;
var l = cs.length;
for (var y = 0; y < l; y++) {
sb[y] = cs[y].toHtml();
}
var t = this.getTree();
var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines();
return "<div class=\"webfx-tree-item\" id=\"" +
this.id + "\"" + this.getEventHandlersHtml() + ">" +
this.getRowHtml() +
"<div class=\"webfx-tree-children" +
(hideLines ? "-nolines" : "") + "\" style=\"" +
this.getLineStyle() +
(this.getExpanded() && this.hasChildren() ? "" : "display:none;") +
"\">" +
sb.join("") +
"</div></div>";
};
_p.getRowHtml = function getRowHtml() {
var t = this.getTree();
return "<div class=\"" + this.getRowClassName() + "\" style=\"padding-left:" +
Math.max(0, (this.getDepth() - 1) * this.indentWidth) + "px\">" +
this.getExpandIconHtml() +
//"<span class=\"webfx-tree-icon-and-label\">" +
this.getIconHtml() +
this.getLabelHtml() +
//"</span>" +
"</div>";
};
_p.getRowClassName = function getRowClassName() {
return "webfx-tree-row" + (this.isSelected() ? " selected" : "") +
(this.action ? "" : " no-action");
};
_p.getLabelHtml = function getLabelHtml() {
var toolTip = this.getToolTip();
var target = this.getTarget();
return "<a href=\"" + webFXTreeHandler.textToHtml(this._getHref()) +
"\" class=\"webfx-tree-item-label\" tabindex=\"-1\"" +
(toolTip ? " title=\"" + webFXTreeHandler.textToHtml(toolTip) + "\"" : "") +
(target ? " target=\"" + target + "\"" : "") +
" onfocus=\"webFXTreeHandler.handleEvent(event)\"" +
" onblur=\"webFXTreeHandler.handleEvent(event)\">" +
this.getHtml() + "</a>";
};
_p._getHref = function _getHref() {
if (typeof this.action == "string")
return this.action;
else
return "#";
};
_p.getEventHandlersHtml = function getEventHandlersHtml() {
return "";
};
_p.getIconHtml = function getIconHtml() {
// here we are not using textToHtml since the file names rarerly contains
// HTML...
return "<img class=\"webfx-tree-icon\" src=\"" + this.getIconSrc() + "\">";
};
_p.getIconSrc = function getIconSrc() {
throw new Error("getIconSrc called on Abstract Node");
};
_p.getExpandIconHtml = function getExpandIconHtml() {
// here we are not using textToHtml since the file names rarerly contains
// HTML...
return "<img class=\"webfx-tree-expand-icon\" src=\"" +
this.getExpandIconSrc() + "\">";
};
_p.getExpandIconSrc = function getExpandIconSrc() {
var src;
var t = this.getTree();
var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines();
if (this.hasChildren()) {
var bits = 0;
/*
Bitmap used to determine which icon to use
1 Plus
2 Minus
4 T Line
8 L Line
*/
if (t && t.getShowExpandIcons()) {
if (this.getExpanded()) {
bits = 2;
} else {
bits = 1;
}
}
if (t && !hideLines) {
if (this.isLastSibling()) {
bits += 4;
} else {
bits += 8;
}
}
switch (bits) {
case 1:
return webFXTreeConfig.plusIcon;
case 2:
return webFXTreeConfig.minusIcon;
case 4:
return webFXTreeConfig.lIcon;
case 5:
return webFXTreeConfig.lPlusIcon;
case 6:
return webFXTreeConfig.lMinusIcon;
case 8:
return webFXTreeConfig.tIcon;
case 9:
return webFXTreeConfig.tPlusIcon;
case 10:
return webFXTreeConfig.tMinusIcon;
default: // 0
return webFXTreeConfig.blankIcon;
}
} else {
if (t && hideLines) {
return webFXTreeConfig.blankIcon;
} else if (this.isLastSibling()) {
return webFXTreeConfig.lIcon;
} else {
return webFXTreeConfig.tIcon;
}
}
};
_p.getLineStyle = function getLineStyle() {
return "background-position:" + this.getLineStyle2() + ";";
};
_p.getLineStyle2 = function getLineStyle2() {
return (this.isLastSibling() ? "-100" : (this.getDepth() - 1) * this.indentWidth) + "px 0";
};
// End HTML generation
// DOM
// this returns the div for the tree node
_p.getElement = function getElement() {
return document.getElementById(this.id);
};
// the row is the div that is used to draw the node without the children
_p.getRowElement = function getRowElement() {
var el = this.getElement();
if (!el) return null;
return el.firstChild;
};
// plus/minus image
_p.getExpandIconElement = function getExpandIconElement() {
var el = this.getRowElement();
if (!el) return null;
return el.firstChild;
};
_p.getIconElement = function getIconElement() {
var el = this.getRowElement();
if (!el) return null;
return el.childNodes[1];
};
// anchor element
_p.getLabelElement = function getLabelElement() {
var el = this.getRowElement();
if (!el) return null;
return el.lastChild;
};
// the div containing the children
_p.getChildrenElement = function getChildrenElement() {
var el = this.getElement();
if (!el) return null;
return el.lastChild;
};
// IE uses about:blank if not attached to document and this can cause Win2k3
// to fail
if (webFXTreeHandler.ie) {
_p.create = function create() {
var dummy = document.createElement("div");
dummy.style.display = "none";
document.body.appendChild(dummy);
dummy.innerHTML = this.toHtml();
var res = dummy.removeChild(dummy.firstChild);
document.body.removeChild(dummy);
return res;
};
} else {
_p.create = function create() {
var dummy = document.createElement("div");
dummy.innerHTML = this.toHtml();
return dummy.removeChild(dummy.firstChild);
};
}
// Getters and setters for some common fields
_p.setIcon = function setIcon(s) {
this.icon = s;
if (this.getCreated()) {
this.updateIcon();
}
};
_p.getIcon = function getIcon() {
return this.icon;
};
_p.setOpenIcon = function setOpenIcon(s) {
this.openIcon = s;
if (this.getCreated()) {
this.updateIcon();
}
};
_p.getOpenIcon = function getOpenIcon() {
return this.openIcon;
};
_p.setText = function setText(s) {
this.setHtml(webFXTreeHandler.textToHtml(s));
};
_p.getText = function getText() {
return webFXTreeHandler.htmlToText(this.getHtml());
};
_p.setHtml = function setHtml(s) {
this.text = s;
var el = this.getLabelElement();
if (el) {
el.innerHTML = s;
}
};
_p.getHtml = function getHtml() {
return this.text;
};
_p.setTarget = function setTarget(s) {
this.target = s;
};
_p.getTarget = function getTarget() {
return this.target;
};
_p.setToolTip = function setToolTip(s) {
this.toolTip = s;
var el = this.getLabelElement();
if (el) {
el.title = s;
}
};
_p.getToolTip = function getToolTip() {
return this.toolTip;
};
_p.setAction = function setAction(oAction) {
this.action = oAction;
var el = this.getLabelElement();
if (el) {
el.href = this._getHref();
}
el = this.getRowElement();
if (el) {
el.className = this.getRowClassName();
}
};
_p.getAction = function getAction() {
return this.action;
};
// update methods
_p.update = function update() {
var t = this.getTree();
if (t.suspendRedraw) return;
var el = this.getElement();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -