📄 esri_toc.js
字号:
/*
COPYRIGHT 1995-2005 ESRI
TRADE SECRETS: ESRI PROPRIETARY AND CONFIDENTIAL
Unpublished material - all rights reserved under the
Copyright Laws of the United States.
For additional information, contact:
Environmental Systems Research Institute, Inc.
Attn: Contracts Dept
380 New York Street
Redlands, California, USA 92373
email: contracts@esri.com
*/
function EsriTocNode(key, label, level) {
this.key = key;
this.label = label;
this.level = level;
this.isShowExpanded = false;
this.isExpanded = false;
this.isShowChecked = false;
this.isChecked = false;
this.isUrl = false;
this.imageUrl = null;
this.isDisabled = false;
this.isSelected = false;
this.contextMenuItems = new Array();
}
function EsriContextMenuItem(label, value, description) {
this.label = label;
this.value = value;
this.description = description;
}
function EsriToc(id, cont, mapId, ren) {
this.inheritsFrom(new EsriControl(id, "Toc"));
this.mapId = mapId;
this.renderer = ren;
this.clientPostBack = false;
this.autoPostBack = true;
this.nodes = null;
this.divId = "TocDiv_" + this.id;
this.tokenStart = "${";
this.tokenEnd = "}";
this.tokenHandlers = new Array();
this.tokens = new Array();
var self = this;
this.init = function(cont) {
if (! this.renderer) this.renderer = new EsriTableTocRenderer();
this.nodes = new Array();
this.divObject = document.createElement("div");
this.divObject.id = this.divId;
EsriUtils.setElementStyle(this.divObject, "width:100%; height:100%; overflow:auto;");
this.renderer.toc = this;
this.renderer.init(this.divObject);
cont.appendChild(this.divObject);
self = this;
EsriControls.addPostBackTagHandler("toc", EsriControls.tocs[self.id].updateAsync);
}
this.addTokenHandler = function(name, handlerFunction) {
if (this.tokens.indexOf(name) == -1)
this.tokens.push(name);
this.tokenHandlers[name] = handlerFunction;
}
this.updateAsync = function(xml, eventSources) {
var idTag = xml.getElementsByTagName("id").item(0);
if (idTag.firstChild.nodeValue == self.id) {
self.renderer.reset();
self.nodes = new Array();
self.mapId = xml.getElementsByTagName("map-id").item(0).firstChild.nodeValue;
var nodeTags = xml.getElementsByTagName("dataframe").item(0).getElementsByTagName("node");
self.renderer.startRendering();
for (var i=0, l=nodeTags.length;i<l;i++) {
var node = nodeTags.item(i);
var content = node.getElementsByTagName("content").item(0);
var key = node.getAttribute("key");
var label = content.hasChildNodes() ? content.firstChild.nodeValue : "";
var level = parseInt(node.getAttribute("level"));
var n = new EsriTocNode(key, label, level);
n.isShowExpanded = node.getAttribute("expanded") != "";
n.isExpanded = node.getAttribute("expanded") == "true";
n.isShowChecked = true;
n.isShowChecked = content.getAttribute("ischecked") != "";
n.isChecked = content.getAttribute("ischecked") == "true";
n.isUrl = content.getAttribute("isurl") == "true";
n.imageUrl = content.getAttribute("image-url");
n.isDisabled = content.getAttribute("isdisabled") == "true";
n.isSelected = content.getAttribute("isselected") == "true";
var contextMenuTag = node.getElementsByTagName("context-menu");
if (contextMenuTag.length == 1) {
var contextItems = contextMenuTag.item(0).getElementsByTagName("item");
for (var c=0;c<contextItems.length;c++) n.contextMenuItems.push(new EsriContextMenuItem(contextItems.item(c).getAttribute("label"), contextItems.item(c).getAttribute("value"), contextItems.item(c).getAttribute("description")));
}
self.nodes.push(n);
self.renderer.renderNode(n);
}
self.renderer.endRendering();
var form = document.forms[EsriControls.maps[self.mapId].formId];
EsriUtils.removeFormElement(form.id, self.id);
EsriUtils.removeFormElement(form.id, self.id + "_nodeKey");
EsriUtils.removeFormElement(form.id, self.id + "_nodeOperation");
EsriUtils.removeFormElement(form.id, self.id + "_contextMenuItemValue");
for (i=0;i<form.elements.length;i++) {
var name = form.elements[i].name;
if (name && name.indexOf(self.id) == 0) EsriUtils.removeFormElement(form.id, name);
}
for (var i=0;i<self.updateListenerNames.length;i++) self.updateListeners[self.updateListenerNames[i]](self);
}
}
this.nodeOperation = function(k, o) {
var map = EsriControls.maps[this.mapId];
EsriUtils.addFormElement(map.formId, self.id, self.id);
EsriUtils.addFormElement(map.formId, self.id + "_nodeKey", k);
EsriUtils.addFormElement(map.formId, self.id + "_nodeOperation", o);
if (self.clientPostBack) EsriUtils.addFormElement(map.formId, "doPostBack", "doPostBack");
if (self.autoPostBack) {
map.showLoading();
EsriUtils.submitForm(map.formId, self.clientPostBack, EsriControls.processPostBack);
}
}
this.checkedNodeOperation = function(k, cv) {
var map = EsriControls.maps[self.mapId];
EsriUtils.addFormElement(map.formId, self.id, self.id);
EsriUtils.addFormElement(map.formId, self.id + "_nodeKey", k);
EsriUtils.addFormElement(map.formId, self.id + "_" + k, cv);
if (self.clientPostBack) EsriUtils.addFormElement(map.formId, "doPostBack", "doPostBack");
if (self.autoPostBack) {
map.showLoading();
EsriUtils.submitForm(map.formId, self.clientPostBack, EsriControls.processPostBack);
}
}
this.contextMenuOperation = function(v, k) {
var map = EsriControls.maps[self.mapId];
EsriUtils.addFormElement(map.formId, self.id, self.id);
EsriUtils.addFormElement(map.formId, self.id + "_contextMenuItemValue", v);
this.nodeOperation(k, "contextMenu");
}
EsriControls.tocIds.push(id);
EsriControls.tocs[id] = this;
if (cont) this.init(cont);
}
EsriToc.prototype.addTocNode = function(k, lb, lv, isSE, isE, isSC, isC, isU, iU, isDi, isS, mi) {
var n = new EsriTocNode(k, lb, lv);
n.isShowExpanded = isSE;
n.isExpanded = isE;
n.isShowChecked = isSC;
n.isChecked = isC;
n.isUrl = isU;
n.imageUrl = iU;
n.isDisabled = isDi;
n.isSelected = isS;
n.contextMenuItems = mi;
this.nodes.push(n);
this.renderer.renderNode(n);
}
function EsriTocRenderer() {
this.toc = null;
this.init = function(container) {}
this.reset = function() {}
this.startRendering = function() {}
this.renderNode = function(node) {}
this.endRendering = function() {}
}
function EsriTableTocRenderer() {
this.inheritsFrom(new EsriTocRenderer());
var table, tbody;
var self = this;
var checkBoxStates;
var tocContextMenuItems = new Array();
this.collapsedImage = "images/plus.gif";
this.expandedImage = "images/minus.gif";
this.indentWidth = 10;
this.init = function(container) {
table = document.createElement("table");
table.cellSpacing = 0;
table.cellPadding = 0;
tbody = document.createElement("tbody");
table.appendChild(tbody);
container.appendChild(table);
addTokenHandlers();
self = this;
}
function addTokenHandlers() {
self.toc.addTokenHandler("loading-image", function(key, token) {
var img = document.createElement("img");
img.src = EsriControls.contextPath + "images/loading.gif";
EsriUtils.setElementStyle(img, "width:16px; height:16px; vertical-align:middle; border:NONE; padding-right:4px; margin-right:4px;");
return img;
});
self.toc.addTokenHandler("url", function(key, token) {
var vStart = "(";
var vEnd = ")";
var a = document.createElement("a");
var vs = token.split(vStart);
a.href = vs[1].substring(0, vs[1].indexOf(vEnd));
a.target = "_blank";
a.appendChild(document.createTextNode(vs[2].substring(0, vs[2].indexOf(vEnd))));
return a;
});
self.toc.addTokenHandler("imgsrc", function(key, token) {
var img = document.createElement("img");
img.src = token.substring("imgsrc=".length);
EsriUtils.setElementStyle(img, "vertical-align:middle; border:NONE; padding-right:4px; margin-right:4px;");
return img;
});
self.toc.addTokenHandler("save-gp-result", function(key, token, label) {
var td = document.createElement("td");
td.appendChild(document.createTextNode(label));
td.onclick = function() { saveGpResultRequestHandler(key); };
return td;
});
self.toc.addTokenHandler("show-copyright", function(key, token, label) {
var td = document.createElement("td");
td.appendChild(document.createTextNode(label));
td.onclick = function() { showCopyrightRequestHandler(key); };
return td;
});
}
function handleLabel(lbl, key, isCtxMnu, indentWd) {
var st = lbl.indexOf(self.toc.tokenStart);
var en = lbl.indexOf(self.toc.tokenEnd, st);
if (st != -1 && en != -1) {
if (isCtxMnu) {
var token = lbl.substring((st + self.toc.tokenStart.length), en);
var label = lbl.substring(0, st) + lbl.substring(en + 1);
for (var t=0;t<self.toc.tokens.length;t++) {
if (token.indexOf(self.toc.tokens[t]) == 0)
return self.toc.tokenHandlers[self.toc.tokens[t]](key, token, label);
}
}
else {
var a = lbl.split(self.toc.tokenStart);
var ps = [];
var span = document.createElement("span");
for (var i=0;i<a.length;i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -