diff --git a/src/LayerListView.html b/src/LayerListView.html new file mode 100644 index 0000000..7f34d52 --- /dev/null +++ b/src/LayerListView.html @@ -0,0 +1,6 @@ + + + + + +
diff --git a/src/LayerListView.js b/src/LayerListView.js new file mode 100644 index 0000000..94d9804 --- /dev/null +++ b/src/LayerListView.js @@ -0,0 +1,606 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dijit/_WidgetBase', + 'dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/array', + 'dojo/_base/html', + 'dojo/dom-construct', + 'dojo/on', + 'dojo/query', + 'jimu/dijit/CheckBox', + './PopupMenu', + './Metadata', + 'dijit/_TemplatedMixin', + 'dojo/text!./LayerListView.html', + 'jimu/dijit/LoadingIndicator', + 'dojo/dom-attr', + 'dojo/dom-class', + 'dojo/dom-style', + './NlsStrings' +], function(_WidgetBase, declare, lang, array, html, domConstruct, on, query, + CheckBox, PopupMenu, + Metadata, + _TemplatedMixin, template, LoadingIndicator, + domAttr, domClass, domStyle, NlsStrings) { + + return declare([_WidgetBase, _TemplatedMixin], { + templateString: template, + _currentSelectedLayerRowNode: null, + scaleConfig: [{ + "layerInfo": [], + "layerNode": [] + }], + + postMixInProperties: function() { + this.inherited(arguments); + this.nls = NlsStrings.value; + }, + + postCreate: function () { + var config = this.config.metadataTool; + this.metadata = new Metadata(config); + array.forEach(this.operLayerInfos.getLayerInfoArray(), function (layerInfo) { + this.drawListNode(layerInfo, 0, this.layerListTable, true); + }, this); + + array.forEach(this.operLayerInfos.tableInfos, function(layerInfo) { + this.drawListNode(layerInfo, 0, this.tableListTable, true); + }, this); + + + }, + + drawListNode: function(layerInfo, level, toTableNode) { + // layerInfo.getLayerType().then(function(type){ + // console.log(type + "-------------------------------"); + // }); + var nodeAndSubNode; + if(layerInfo.newSubLayers.length === 0) { + //addLayerNode + nodeAndSubNode = this.addLayerNode(layerInfo, level, toTableNode); + //add legend node + if(this.config.showLegend) { + this.addLegendNode(layerInfo, level, nodeAndSubNode.subNode); + } else { + domStyle.set(query(".showLegend-image", + nodeAndSubNode.currentNode)[0], + 'display', + 'none'); + } + return; + } + //addLayerNode + nodeAndSubNode = this.addLayerNode(layerInfo, level, toTableNode); + array.forEach(layerInfo.newSubLayers, lang.hitch(this ,function(level, subLayerInfo){ + this.drawListNode(subLayerInfo, level+1, nodeAndSubNode.subNode); + }, level)); + }, + + addLayerNode: function(layerInfo, level, toTableNode) { + var layerTrNode = domConstruct.create('tr', { + 'class': 'jimu-widget-row layer-row ' + + ( /*visible*/ false ? 'jimu-widget-row-selected' : ''), + 'layerTrNodeId': layerInfo.id + }, toTableNode), layerTdNode,metadataTdNode, ckSelectDiv, ckSelect, imageShowLegendNode, imageNoLegendDiv, + imageNoLegendNode,metadataNode, popupMenuNode, i, imageShowLegendDiv, popupMenu, divLabel; + + layerTdNode = domConstruct.create('td', { + 'class': 'col col1' + }, layerTrNode); + + for (i = 0; i < level; i++) { + domConstruct.create('div', { + 'class': 'begin-blank-div jimu-float-leading', + 'innerHTML': '' + }, layerTdNode); + } + + imageShowLegendDiv = domConstruct.create('div', { + 'class': 'showLegend-div jimu-float-leading' + }, layerTdNode); + var showLegendImageSrc; + if(isRTL) { + showLegendImageSrc = this.layerListWidget.folderUrl + 'images/v_left.png'; + } else { + showLegendImageSrc = this.layerListWidget.folderUrl + 'images/v_right.png'; + } + + imageShowLegendNode = domConstruct.create('img', { + 'class': 'showLegend-image', + 'src': showLegendImageSrc, + 'alt': 'l' + }, imageShowLegendDiv); + + ckSelectDiv = domConstruct.create('div', { + 'class': 'div-select jimu-float-leading' + }, layerTdNode); + + ckSelect = new CheckBox({ + checked: layerInfo.isVisible()//layerInfo.visible + }); + domConstruct.place(ckSelect.domNode, ckSelectDiv); + + imageNoLegendDiv = domConstruct.create('div', { + 'class': 'noLegend-div jimu-float-leading' + }, layerTdNode); + + var imageName; + if (layerInfo.isTable) { + imageName = 'images/table.png'; + } else { + imageName = 'images/noLegend.png'; + } + + imageNoLegendNode = domConstruct.create('img', { + 'class': 'noLegend-image', + 'src': this.layerListWidget.folderUrl + imageName, + 'alt': 'l' + }, imageNoLegendDiv); + + if(layerInfo.noLegend || layerInfo.isTable) { + domStyle.set(imageShowLegendDiv, 'display', 'none'); + domStyle.set(ckSelectDiv, 'display', 'none'); + domStyle.set(imageNoLegendDiv, 'display', 'block'); + } + + // set tdNode width + domStyle.set(layerTdNode, 'width', level*12 + 35 + 'px'); + + var layerTitleTdNode = domConstruct.create('td', { + 'class': 'col col2' + }, layerTrNode); + divLabel = domConstruct.create('div', { + 'innerHTML': layerInfo.title, + 'class': 'div-content jimu-float-leading' + }, layerTitleTdNode); + + //domStyle.set(divLabel, 'width', 263 - level*13 + 'px'); + metadataTdNode = domConstruct.create('td', { + 'class': 'col col3' + }, layerTrNode); + if (layerInfo.newSubLayers.length === 0) { + this.metadata._init(metadataTdNode,layerInfo) + } + + + layerTdNode = domConstruct.create('td', { + 'class': 'col col4' + }, layerTrNode); + + // add popupMenu + popupMenuNode = domConstruct.create('div', { + 'class': 'layers-list-popupMenu-div' + }, layerTdNode); + + popupMenu = new PopupMenu({ + //items: layerInfo.popupMenuInfo.menuItems, + _layerInfo: layerInfo, + box: this.layerListWidget.domNode.parentNode, + _appConfig: this.layerListWidget.appConfig + }).placeAt(popupMenuNode); + this.own(on(popupMenu, + 'onMenuClick', + lang.hitch(this, this._onPopupMenuItemClick, layerInfo, popupMenu))); + + + popupMenu.loading = new LoadingIndicator({ + hidden: true + }); + popupMenu.loading.placeAt(popupMenuNode); + + //add a tr node to toTableNode. + var trNode = domConstruct.create('tr', { + 'class': '', + 'layerContentTrNodeId': layerInfo.id + }, toTableNode); + + var tdNode = domConstruct.create('td', { + 'class': '', + 'colspan': '4' + }, trNode); + + var tableNode = domConstruct.create('table', { + 'class': 'layer-sub-node' + }, tdNode); + + //bind event + this.own(on(layerTitleTdNode, + 'click', + lang.hitch(this, + this._onRowTrClick, + layerInfo, + imageShowLegendNode, + layerTrNode, + tableNode))); + + this.own(on(imageShowLegendDiv, + 'click', + lang.hitch(this, + this._onRowTrClick, + layerInfo, + imageShowLegendNode, + layerTrNode, + tableNode))); + + this.own(on(layerTrNode, + 'mouseover', + lang.hitch(this, this._onLayerNodeMouseover, layerTrNode, popupMenu))); + this.own(on(layerTrNode, + 'mouseout', + lang.hitch(this, this._onLayerNodeMouseout, layerTrNode, popupMenu))); + this.own(on(ckSelect.domNode, 'click', lang.hitch(this, + this._onCkSelectNodeClick, + layerInfo, + ckSelect))); + + this.own(on(popupMenuNode, 'click', lang.hitch(this, + this._onPopupMenuClick, + layerInfo, + popupMenu, + layerTrNode))); + + this.scaleConfig.push({ + layerInfo: layerInfo, + layerNode: layerTrNode + }); + + + return {currentNode: layerTrNode, subNode: tableNode}; + }, + + addLegendNode: function(layerInfo, level, toTableNode) { + //var legendsDiv; + var legendTrNode = domConstruct.create('tr', { + 'class': 'legend-node-tr' + }, toTableNode), legendTdNode; + + legendTdNode = domConstruct.create('td', { + 'class': 'legend-node-td' + }, legendTrNode); + +/* + array.forEach(layerInfo.legendInfos, function(legendInfo){ + var i; + for (i = 0; i < level+1; i++) { + domConstruct.create('div', { + 'class': 'begin-blank-div' + }, legendTdNode); + } + domConstruct.place(legendInfo.legendDiv, legendTdNode); + }, this); +*/ + //legendsDiv = layerInfo.obtainLegendsNode(); + + + + // layerInfo.legendsNode = domConstruct.create("div", { + // "class": "legends-div" + // }); + // domConstruct.create("img", { + // "class": "legends-loading-img", + // "src": this.layerListWidget.folderUrl + 'images/loading.gif' + // }, layerInfo.legendsNode); + // layerInfo.initLegendsNode(layerInfo.legendsNode); + // //domStyle.set(layerInfo.legendsNode, 'background-image', + // // 'url(' + this.layerListWidget.folderUrl + 'images/loading.gif)') + // domStyle.set(layerInfo.legendsNode, 'margin-left', (level+1)*12 + 'px'); + // domConstruct.place(layerInfo.legendsNode, legendTdNode); + + + // layerInfo.legendsNode = domConstruct.create("div", { + // "class": "legends-div" + // }); + // domConstruct.create("img", { + // "class": "legends-loading-img", + // "src": this.layerListWidget.folderUrl + 'images/loading.gif' + // }, layerInfo.legendsNode); + // layerInfo.initLegendsNode(layerInfo.legendsNode); + try{ + var legendsNode = layerInfo.createLegendsNode(); + //layerInfo.legendsNode = legendsNode; + //domStyle.set(legendsNode, 'marginLeft', (level+1)*12 + 'px'); + domStyle.set(legendsNode, 'font-size', (level+1)*12 + 'px'); + domConstruct.place(legendsNode, legendTdNode); + }catch(err){ + console.error(err); + } + }, + + // return current state: + // true: fold, + // false: unfold + _fold: function(layerInfo, imageShowLegendNode, subNode) { + /*jshint unused: false*/ + /* global isRTL*/ + var state; + if (domStyle.get(subNode, 'display') === 'none') { + //unfold + domStyle.set(subNode, 'display', 'table'); + //domClass.add(imageShowLegendNode, "layers-list-imageShowLegend-down"); + domAttr.set(imageShowLegendNode, 'src', this.layerListWidget.folderUrl + 'images/v.png'); + state = false;//unfold + } else { + //fold + domStyle.set(subNode, 'display', 'none'); + //domClass.remove(imageShowLegendNode, "layers-list-imageShowLegend-down"); + var src; + if(isRTL) { + src = this.layerListWidget.folderUrl + 'images/v_left.png'; + } else { + src = this.layerListWidget.folderUrl + 'images/v_right.png'; + } + domAttr.set(imageShowLegendNode, 'src', src); + state = true;// fold + } + return state; + }, + + _onCkSelectNodeClick: function(layerInfo, ckSelect, evt) { + if (ckSelect.checked) { + layerInfo.setTopLayerVisible(true); + } else { + layerInfo.setTopLayerVisible(false); + } + evt.stopPropagation(); + }, + + _onPopupMenuClick: function(layerInfo, popupMenu, layerTrNode, evt) { + popupMenu.btnClick(); + /*jshint unused: false*/ + this._changeSelectedLayerRow(layerTrNode); + if (popupMenu && popupMenu.state === 'opened') { + popupMenu.closeDropMenu(); + } else { + //topic.publish("popupMenuAll/hide"); + this._hideCurrentPopupMenu(); + popupMenu.loading.show(); + if (popupMenu) { + this.currentPopupMenu = popupMenu; + popupMenu.getPopupMenuInfo().then(lang.hitch(this, function(popupMenuInfo) { + //handle controlPopup item. + var itemNode = query("[itemid=controlPopup]", popupMenu.dropMenuNode)[0]; + if(itemNode && layerInfo.controlPopupInfo) { + if(layerInfo.controlPopupInfo.enablePopup) { + html.setAttr(itemNode, 'innerHTML', this.nls.removePopup); + } else { + html.setAttr(itemNode, 'innerHTML', this.nls.enablePopup); + } + } + popupMenu.openDropMenu(popupMenuInfo.getDeniedItems()); + popupMenu.loading.hide(); + + })); + } + } + evt.stopPropagation(); + }, + + _hideCurrentPopupMenu: function() { + if(this.currentPopupMenu && this.currentPopupMenu.state === 'opened') { + this.currentPopupMenu.closeDropMenu(); + } + }, + + _onLayerNodeMouseover: function(layerTrNode, popupMenu) { + domClass.add(layerTrNode, "layer-row-mouseover"); + if (popupMenu) { + //domClass.add(popupMenuNode, "layers-list-popupMenu-div-selected"); + domClass.add(popupMenu.btnNode, "jimu-icon-btn-selected"); + } + }, + + _onLayerNodeMouseout: function(layerTrNode, popupMenu) { + domClass.remove(layerTrNode, "layer-row-mouseover"); + if (popupMenu) { + //domClass.remove(popupMenuNode, "layers-list-popupMenu-div-selected"); + domClass.remove(popupMenu.btnNode, "jimu-icon-btn-selected"); + } + }, + + _onPopupMenuHide: function() { + /* + if (popupMenu && popupMenu.state === 'opened') { + //popupMenu.hide(); + popupMenu.closeDropMenu(); + } + */ + }, + + _onLayerListWidgetPaneClick: function(popupMenu) { + if (popupMenu) { + //popupMenu.hide(); + popupMenu.closeDropMenu(); + } + }, + + _onRowTrClick: function(layerInfo, imageShowLegendNode, layerTrNode, subNode) { + this._changeSelectedLayerRow(layerTrNode); + var fold = this._fold(layerInfo, imageShowLegendNode, subNode); + if(layerInfo.isLeaf() && !fold) { + var legendsNode = query(".legends-div", subNode)[0]; + var loadingImg = query(".legends-loading-img", legendsNode)[0]; + if(legendsNode && loadingImg) { + layerInfo.drawLegends(legendsNode, this.layerListWidget.appConfig.portalUrl); + } + } + }, + + _changeSelectedLayerRow: function(layerTrNode) { + if (this._currentSelectedLayerRowNode && this._currentSelectedLayerRowNode === layerTrNode) { + return; + } + if(this._currentSelectedLayerRowNode) { + domClass.remove(this._currentSelectedLayerRowNode, 'jimu-widget-row-selected'); + } + domClass.add(layerTrNode, 'jimu-widget-row-selected'); + this._currentSelectedLayerRowNode = layerTrNode; + }, + + _onPopupMenuItemClick: function(layerInfo, popupMenu, item, data) { + var evt = { + itemKey: item.key, + extraData: data, + layerListWidget: this.layerListWidget, + layerListView: this + }, result; + + // window.jimuNls.layerInfosMenu.itemTransparency NlsStrings.value.itemTransparency + if (item.key === 'transparency') { + if (domStyle.get(popupMenu.transparencyDiv, 'display') === 'none') { + popupMenu.showTransNode(layerInfo.getOpacity()); + } else { + popupMenu.hideTransNode(); + } + } else { + result = popupMenu.popupMenuInfo.onPopupMenuClick(evt); + if (result.closeMenu) { + popupMenu.closeDropMenu(); + } + } + }, + + // befor exchange: id1 -> id2 + // after exchanged: id2 -> id1 + _exchangeLayerTrNode: function(id1, id2) { + var layer1TrNode = query("tr[layerTrNodeId='" + id1 + "']", this.layerListTable)[0]; + //var layer1ContentTrNode = query("tr[layerContentTrNodeId='" + id1 + "']", + // this.layerListTable)[0]; + var layer2TrNode = query("tr[layerTrNodeId='" + id2 + "']", this.layerListTable)[0]; + var layer2ContentTrNode = query("tr[layerContentTrNodeId='" + id2 + "']", + this.layerListTable)[0]; + // change layerTr + this.layerListTable.removeChild(layer2TrNode); + this.layerListTable.insertBefore(layer2TrNode, layer1TrNode); + // change LayerContentTr + this.layerListTable.removeChild(layer2ContentTrNode); + this.layerListTable.insertBefore(layer2ContentTrNode, layer1TrNode); + }, + + moveUpLayer: function(id) { + // summary: + // move up layer in layer list. + // description: + // call the moveUpLayer method of LayerInfos to change the layer order in map, + // and update the data in LayerInfos + // then, change layerNodeTr and layerContentTr domNode + var beChangedId = this.operLayerInfos.moveUpLayer(id); + if(beChangedId) { + this._exchangeLayerTrNode(beChangedId, id); + } + }, + + moveDownLayer: function(id) { + // summary: + // move down layer in layer list. + // description: + // call the moveDownLayer method of LayerInfos to change the layer order in map, + // and update the data in LayerInfos + // then, change layerNodeTr and layerContentTr domNode + var beChangedId = this.operLayerInfos.moveDownLayer(id); + + if(beChangedId) { + this._exchangeLayerTrNode(id, beChangedId); + } + }, + _adjustToState: function () { + // summary: + // enhance the layer name with a font refelcting out-of-scale or in-scale + // description: + // when ever a scale change happens,this method is called to update the layer title with a + // font effect giving an intuition to the user whether the layer is out-of-scale or in-scale of the map + var scale = this.map.getScale(); + + //1/filter the layers with newSubLayers.length = 0,so this will ensure that these are the actual layers + var actualLeafLayers = array.filter(this.scaleConfig, lang.hitch(this,function (item) { + return item.layerInfo.newSubLayers && item.layerInfo.newSubLayers.length == 0; + })); + + + array.forEach(actualLeafLayers, lang.hitch(this,function (leafItem) { + var minScale = 0; + var maxScale = 0; + if (leafItem.layerInfo.originOperLayer.layerType === "ArcGISFeatureLayer") { + var actualFeatureLayer = this.map.getLayer(leafItem.layerInfo.id); + if (!actualFeatureLayer) { + return + } + var jsonInfo = null; + if (actualFeatureLayer._json) { + jsonInfo = JSON.parse(actualFeatureLayer._json); + } + + if (actualFeatureLayer.maxScale) { + maxScale = actualFeatureLayer.maxScale; + } else if (jsonInfo && jsonInfo.maxScale) { + maxScale = jsonInfo.maxScale; + } + + if (actualFeatureLayer.minScale) { + minScale = actualFeatureLayer.minScale; + } else if (jsonInfo && jsonInfo.minScale) { + minScale = jsonInfo.minScale; + } + + } else if (leafItem.layerInfo.originOperLayer.mapService) { + var mapService = leafItem.layerInfo.originOperLayer.mapService; + var layerId = mapService.subId; + var subLayerInfoArray = mapService.layerInfo.layerObject.layerInfos; + var subLayerInfo = array.filter(subLayerInfoArray, function (info) { + return Number(info.id) == Number(layerId) ; + })[0]; + maxScale = subLayerInfo.maxScale; + minScale = subLayerInfo.minScale; + + } + var layerTextNode = leafItem.layerNode.childNodes[1]; + var outScale = (maxScale != 0 && scale < maxScale) || (minScale != 0 && scale > minScale); + if (outScale) { + if (layerTextNode) domClass.add(layerTextNode, 'LayerOutOfScale'); + + } else { + if (layerTextNode) domClass.remove(layerTextNode, 'LayerOutOfScale'); + + } + + + })); + + //2/filter the layers with newSubLayers.length > 0,so this will ensure that these are the parent layers + var parentLayers = array.filter(this.scaleConfig, lang.hitch(this,function (item) { + return item.layerInfo.newSubLayers && item.layerInfo.newSubLayers.length > 0; + })); + array.forEach(parentLayers, function (layerItem) { + if (layerItem.layerInfo.layerObject && (layerItem.layerInfo.layerObject.maxScale || layerItem.layerInfo.layerObject.minScale)) { + var layerObject = layerItem.layerInfo.layerObject; + var layerTextNode = layerItem.layerNode.childNodes[1]; + var outScale = (layerObject.maxScale != 0 && scale layerObject.minScale); + if (outScale) { + if (layerTextNode) domClass.add(layerTextNode, 'LayerOutOfScale'); + + } else { + if (layerTextNode) domClass.remove(layerTextNode, 'LayerOutOfScale'); + + } + } + }); + + } + + }); +}); diff --git a/src/Metadata.js b/src/Metadata.js new file mode 100644 index 0000000..d48f6ec --- /dev/null +++ b/src/Metadata.js @@ -0,0 +1,203 @@ +define( +[ + "dojo/_base/declare", + "dojo/_base/array", + "dojo/_base/lang", + "dojo/promise/all", + "dojo/dom", + "dojo/dom-construct", + "dojo/dom-style", + "dojo/dom-attr", + "dojo/on", + "dojo/_base/lang", + "dijit/Dialog", + "dijit/form/Button", + "esri/request", + "dijit/layout/ContentPane", + "./NlsStrings", + "jimu/dijit/Message", + "jimu/dijit/Popup" + +], function ( + declare, + array, + lang, + all, + dom, + domConstruct, + domStyle, + domAttr, + on, + lang, + Dialog, + Button, + esriRequest, + ContentPane, + NlsStrings, + Message, + Popup +) { + var Metadata = declare("Metadata", null, { + config: null, + + constructor: function (config) { + + this.nls = NlsStrings.value; + this.config = config; + + }, + _popupTitle:"Metadata", + _init: function (node, layerInfo) { + var triggerNode = domConstruct.create('div', { + 'class': "layers-list-metaData-div", + title: 'Metadata', + style: "cursor: pointer;" + }, node); + if (!layerInfo.layerObject.url) { + domStyle.set(triggerNode, { "opacity": 0.5 }); + domAttr.set(triggerNode, "title", "Metadata disabled"); + on(triggerNode, "click", lang.hitch(this, function () { + var popup = new Message({ + message: me.nls.metadataWarning, + buttons: [{ + label: me.nls.ok, + onClick: lang.hitch(this, function () { + popup.close(); + }) + }] + }); + })); + + } else { + on(triggerNode, "click", lang.hitch(this, function () { + this._setPopupTitle(layerInfo.title); + this._handleMetadataClick(layerInfo.layerObject.url) + })); + } + }, + _setPopupTitle:function(title){ + this._popupTitle = title; + }, + _handleMetadataClick: function (url,title) { + var itemUrl = url.replace("/FeatureServer/", "/MapServer/"); + var layerId = itemUrl.substr(itemUrl.lastIndexOf('/') + 1); + var serviceUrl = itemUrl.replace(itemUrl.substr(itemUrl.lastIndexOf('/')), ''); + var url = serviceUrl + this.config.path; + + url = url.replace(/\{([a-zA-Z]+)\}/g, function (match) { + return layerId; + }); + var requests = { + soe: esriRequest({ + url: url, + callbackParamName: "callback", + handleAs: "json" + }), + mxd: esriRequest({ + url: itemUrl, + callbackParamName: "callback", + handleAs: "json", + content: { + f:"json" + } + }) + } + all(requests).then(lang.hitch(this, function (response) { + if (response.soe && response.soe.metadata) { + lang.mixin(response.soe, response.soe.metadata); + } + this.parseMetadata(response); + }),lang.hitch(this, function (error) { + console.log(error); + this._showNoDataWarning(); + })); + }, + parseMetadata: function (metadata) { + var me = this; + var metadataContent = []; + var componentConfig = this.config.metadataParseConfig; + var messageContent = domConstruct.create("div", { + style: "position:relative;margin:0 auto;width:100%;" + }); + var noData = true; + array.forEach(componentConfig, lang.hitch(this, function (config, index) { + var label = config.label; + var info = this.findDataInPath(config.path, metadata[config.source]); + + if(info != null){ + if (label.length > 0) { + var labelNode = domConstruct.create("div", { + style: "position:relative;float:left;width:100%;margin-top:10px;", + innerHTML: label + }); + domConstruct.place(labelNode, messageContent); + } + var infoNode = domConstruct.create("div", { + style: "position:relative;float:left", + innerHTML: info + }); + if (label.length > 0) { + domStyle.set(infoNode, { "marginLeft": "10px" ,"marginTop":"20px;"}) + } + + domConstruct.place(infoNode, messageContent); + noData = false; + } + })); + if (noData) { + this._showNoDataWarning(); + } else { + var popup = new Popup({ + content: messageContent, + titleLabel: this._popupTitle, + autoHeight: true, + maxWidth: 400, + buttons: [{ + label: this.nls.ok, + onClick: lang.hitch(this, function () { + popup.close(); + }) + }] + }); + } + + }, + _showNoDataWarning:function(){ + var popup = new Message({ + message: this.nls.metadataWarning, + buttons: [{ + label: this.nls.ok, + onClick: lang.hitch(this, function () { + popup.close(); + }) + }] + }); + }, + findDataInPath:function(path,metadata){ + var subPaths = path.split("->"); + var data = null; + array.some(subPaths, function (key) { + if (!metadata[key]) { + data = null; + return false; + } else { + metadata = metadata[key]; + data = metadata; + } + }); + if (new RegExp("reviseDate").test(path) && data) { + data = this.formatDate(data); + } + return data ? this.stripHtml(data) : data; + }, + stripHtml: function (str) { + var regex = /(<([^>]+)>)/ig; + return str.replace(regex, ""); + }, + formatDate: function (date) { + return date.replace(/[A-Z]+.*/g, "").split("-").reverse().join("-"); + } + }); + return Metadata; +}); + diff --git a/src/NlsStrings.js b/src/NlsStrings.js new file mode 100644 index 0000000..ed092ad --- /dev/null +++ b/src/NlsStrings.js @@ -0,0 +1,21 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([], function() { + var nls = {value: null}; + return nls; +}); + diff --git a/src/PopupMenu.html b/src/PopupMenu.html new file mode 100644 index 0000000..2713211 --- /dev/null +++ b/src/PopupMenu.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/src/PopupMenu.js b/src/PopupMenu.js new file mode 100644 index 0000000..232e212 --- /dev/null +++ b/src/PopupMenu.js @@ -0,0 +1,187 @@ +define([ + 'dojo/_base/declare', + 'dojo/_base/array', + 'dojo/_base/html', + 'dojo/_base/lang', + 'dojo/query', + 'dojo/on', + 'dojo/Deferred', + 'jimu/dijit/DropMenu', + 'dijit/_TemplatedMixin', + 'dijit/form/HorizontalSlider', + 'dijit/form/HorizontalRuleLabels', + 'dojo/text!./PopupMenu.html', + 'dojo/dom-style', + './NlsStrings', + './PopupMenuInfo' +], function(declare, array, html, lang, query, on, Deferred, DropMenu, +_TemplatedMixin, HorizSlider, HorzRuleLabels, template, domStyle, NlsStrings, PopupMenuInfo) { + return declare([DropMenu, _TemplatedMixin], { + templateString: template, + popupMenuInfo: null, + _popupMenuInfoDef: null, + _deniedItems: null, + _layerInfo: null, + constructor: function() { + this.nls = NlsStrings.value; + this._deniedItems = []; + this._popupMenuInfoDef = new Deferred(); + }, + + _getDropMenuPosition: function(){ + return { + top: "28px", + //left: "-107px" + left: 12 - html.getStyle(this.dropMenuNode, 'width') + 'px' + }; + }, + + _getTransNodePosition: function() { + return { + top: "15px", + //left: "-107px" + left: -174 - html.getStyle(this.dropMenuNode, 'width') + 'px' + }; + }, + + _onBtnClick: function(){ + // if(!this.dropMenuNode){ + // PopupMenuInfo.create(this._layerInfo, this._appConfig) + // .then(lang.hitch(this, function(popupMenuInfo) { + // this.items = popupMenuInfo.getDisplayItems(); + // this.popupMenuInfo = popupMenuInfo; + // this._createDropMenuNode(); + // this.own(on(this.dropMenuNode, 'click', lang.hitch(this, function(evt){ + // evt.stopPropagation(); + // }))); + // this._popupMenuInfoDef.resolve(popupMenuInfo); + // })); + // } + }, + + btnClick: function() { + if(!this.dropMenuNode){ + PopupMenuInfo.create(this._layerInfo, this._appConfig) + .then(lang.hitch(this, function(popupMenuInfo) { + this.items = popupMenuInfo.getDisplayItems(); + this.popupMenuInfo = popupMenuInfo; + this._createDropMenuNode(); + this.own(on(this.dropMenuNode, 'click', lang.hitch(this, function(evt){ + evt.stopPropagation(); + }))); + this._popupMenuInfoDef.resolve(popupMenuInfo); + })); + } + }, + + getPopupMenuInfo: function() { + // var def = new Deferred(); + // if(this.popupMenuInfo) { + // def.resolve(this.popupMenuInfo); + // } else { + // PopupMenuInfo.create(this._layerInfo).then(lang.hitch(this, function(popupMenuInfo) { + // this.popupMenuInfo = popupMenuInfo; + // def.resolve(popupMenuInfo); + // })); + // } + // return def; + return this._popupMenuInfoDef; + }, + + // will call after openDropMenu + _refresh: function() { + this._denyItems(); + }, + + _denyItems: function() { + var itemNodes = query("div[class~='menu-item']", this.dropMenuNode) + .forEach(function(itemNode){ + html.removeClass(itemNode, "menu-item-dissable"); + }); + array.forEach(this._deniedItems, function(itemKey) { + itemNodes.forEach(function(itemNode){ + if (html.getAttr(itemNode, 'itemId') === itemKey) { + html.addClass(itemNode, "menu-item-dissable"); + if(itemKey === 'url') { + query(".menu-item-description", itemNode).forEach(function(itemA){ + html.setAttr(itemA, 'href', '#'); + html.removeAttr(itemA, 'target'); + }); + } + } + }); + }, this); + }, + + selectItem: function(item){ + var index = this._deniedItems.indexOf(item.key); + if (index === -1) { + this.emit('onMenuClick', item); + } + }, + + openDropMenu: function(deniedItemsDef){ + // if (deniedItems) { + // this._deniedItems = deniedItems; + // } else { + // this._deniedItems = []; + // } + + deniedItemsDef.then(lang.hitch(this, function(deniedItems) { + this._deniedItems = deniedItems; + this._refresh(); + })); + this.inherited(arguments); + }, + + closeDropMenu: function(){ + this.inherited(arguments); + this.hideTransNode(); + }, + + // about transparcency + _onTransparencyDivClick: function(evt) { + // summary: + // response to click transparency in popummenu. + evt.stopPropagation(); + }, + + showTransNode: function(transValue) { + /* global isRTL */ + if (!this.transHorizSlider) { + this._createTransparencyWidget(); + this.transHorizSlider.set("value", 1 - transValue); + } + domStyle.set(this.transparencyDiv, "top", this._getTransNodePosition().top); + if(isRTL) { + domStyle.set(this.transparencyDiv, "right", this._getTransNodePosition().left); + } else { + domStyle.set(this.transparencyDiv, "left", this._getTransNodePosition().left); + } + domStyle.set(this.transparencyDiv, "display", "block"); + }, + + hideTransNode: function() { + domStyle.set(this.transparencyDiv, "display", "none"); + }, + + _createTransparencyWidget: function() { + this.transHorizSlider= new HorizSlider({ + minimum: 0, + maximum: 1, + intermediateChanges: true + }, this.transparencyBody); + + this.own(this.transHorizSlider.on("change", lang.hitch(this, function(newTransValue){ + var data = {newTransValue: newTransValue}; + this.emit('onMenuClick', {key: 'transparencyChanged'}, data); + }))); + + new HorzRuleLabels({ + container: "bottomDecoration" + }, this.transparencyRule); + } + + + }); +}); diff --git a/src/PopupMenuInfo.js b/src/PopupMenuInfo.js new file mode 100644 index 0000000..92830a7 --- /dev/null +++ b/src/PopupMenuInfo.js @@ -0,0 +1,361 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dojo/_base/declare', + 'dojo/_base/array', + 'dojo/_base/lang', + 'dojo/Deferred', + 'dojo/promise/all', + 'jimu/portalUrlUtils', + 'jimu/WidgetManager', + './NlsStrings' +], function(declare, array, lang, Deferred, all, portalUrlUtils, WidgetManager, NlsStrings) { + var clazz = declare([], { + + _candidateMenuItems: null, + //_deniedItems: null, + _displayItems: null, + _layerInfo: null, + _layerType: null, + _appConfig: null, + + constructor: function(layerInfo, displayItemInfos, layerType, appConfig) { + this.nls = NlsStrings.value; + this._layerInfo = layerInfo; + this._layerType = layerType; + this._appConfig = appConfig; + this._initCandidateMenuItems(); + this._initDisplayItems(displayItemInfos); + }, + + _getATagLabel: function() { + var url; + var label; + var itemLayerId = this._layerInfo._isItemLayer && this._layerInfo._isItemLayer(); + + if(itemLayerId) { + url = portalUrlUtils. + getItemDetailsPageUrl(portalUrlUtils.getStandardPortalUrl(this._appConfig.portalUrl), + itemLayerId); + label = this.nls.itemShowItemDetails; + } else if(this._layerInfo.layerObject && + this._layerInfo.layerObject.url && + (this._layerType === "CSVLayer" || this._layerType === "KMLLayer")) { + url = this._layerInfo.layerObject.url; + label = this.nls.itemDownload; + } else if(this._layerInfo.layerObject && this._layerInfo.layerObject.url) { + url = this._layerInfo.layerObject.url; + label = this.nls.itemDesc; + } else { + url = ''; + label = this.nls.itemDesc; + } + + return '' + label + ''; + }, + + + _initCandidateMenuItems: function() { + //descriptionTitle: NlsStrings.value.itemDesc, + // var layerObjectUrl = (this._layerInfo.layerObject && this._layerInfo.layerObject.url) ? + // this._layerInfo.layerObject.url : + // ''; + this._candidateMenuItems = [{ + key: 'separator', + label: '' + },{ + key: 'empty', + label: this.nls.empty + },{ + key: 'zoomto', + label: this.nls.itemZoomTo + },{ + key: 'transparency', + label: this.nls.itemTransparency + },{ + key: 'moveup', + label: this.nls.itemMoveUp + },{ + key: 'movedown', + label: this.nls.itemMoveDown + },{ + key: 'table', + label: this.nls.itemToAttributeTable + },{ + key: 'controlPopup', + label: this.nls.removePopup + },{ + key: 'url', + label: this._getATagLabel() + }]; + }, + + _initDisplayItems: function(displayItemInfos) { + this._displayItems = []; + // according to candidate itmes to init displayItems + array.forEach(displayItemInfos, function(itemInfo) { + array.forEach(this._candidateMenuItems, function(item){ + if(itemInfo.key === item.key) { + this._displayItems.push(lang.clone(item)); + if(itemInfo.onClick) { + this._displayItem.onClick = itemInfo.onClick; + } + } + }, this); + }, this); + }, + + getDeniedItems: function() { + var defRet = new Deferred(); + var dynamicDeniedItems = []; + + if (this._layerInfo.isFirst) { + dynamicDeniedItems.push('moveup'); + } else if (this._layerInfo.isLast) { + dynamicDeniedItems.push('movedown'); + } + + if(!this._layerInfo.layerObject || !this._layerInfo.layerObject.url) { + dynamicDeniedItems.push('url'); + } + + var loadInfoTemplateDef = this._layerInfo.loadInfoTemplate(); + var getSupportTableInfoDef = this._layerInfo.getSupportTableInfo(); + + all({ + infoTemplate: loadInfoTemplateDef, + supportTableInfo: getSupportTableInfoDef + }).then(lang.hitch(this._layerInfo, function(result){ + + // deny controlPopup + if(!result.infoTemplate) { + dynamicDeniedItems.push('controlPopup'); + } + + // deny table. + var supportTableInfo = result.supportTableInfo; + var attributeTableWidgets = WidgetManager.getInstance().getWidgetsByName("AttributeTable"); + var hasAttributeTable = attributeTableWidgets.length > 0 && + attributeTableWidgets[0].visible; + if (!hasAttributeTable || + !supportTableInfo.isSupportedLayer || + !supportTableInfo.isSupportQuery) { + dynamicDeniedItems.push('table'); + } + defRet.resolve(dynamicDeniedItems/*this.***.deniedItems.concat(dynamicDeniedItems)*/); + }), function() { + defRet.resolve(dynamicDeniedItems/*this.***.deniedItems.concat(dynamicDeniedItems)*/); + }); + + return defRet; + }, + + getDisplayItems: function() { + return this._displayItems; + }, + + onPopupMenuClick: function(evt) { + var result = { + closeMenu: true + }; + switch (evt.itemKey) { + case 'zoomto'/*this.nls.itemZoomTo'Zoom to'*/: + this._onItemZoomToClick(evt); + break; + case 'moveup'/*this.nls.itemMoveUp'Move up'*/: + this._onMoveUpItemClick(evt); + break; + case 'movedown'/*this.nls.itemMoveDown'Move down'*/: + this._onMoveDownItemClick(evt); + break; + case 'table'/*this.nls.itemToAttributeTable'Open attribute table'*/: + this._onTableItemClick(evt); + break; + case 'transparencyChanged': + this._onTransparencyChanged(evt); + result.closeMenu = false; + break; + case 'controlPopup': + this._onControlPopup(); + break; + + } + return result; + }, + + /********************************** + * Respond events respectively. + * + * event format: + // evt = { + // itemKey: item key + // extraData: estra data, + // layerListWidget: layerListWidget, + // layerListView: layerListView + // }, result; + **********************************/ + _onItemZoomToClick: function(evt) { + /*jshint unused: false*/ + //this.map.setExtent(this.getExtent()); + this._layerInfo.getExtent().then(lang.hitch(this, function(geometries) { + this._layerInfo.map.setExtent(geometries[0]); + })); + }, + + _onMoveUpItemClick: function(evt) { + if (!this._layerInfo.isFirst) { + evt.layerListView.moveUpLayer(this._layerInfo.id); + } + }, + + _onMoveDownItemClick: function(evt) { + if (!this._layerInfo.isLast) { + evt.layerListView.moveDownLayer(this._layerInfo.id); + } + }, + + _onTableItemClick: function(evt) { + // new version, send layerInfo object. + this._layerInfo.getLayerType().then(lang.hitch(this, function(layerType){ + if (this._layerInfo._getLayerTypesOfSupportTable().indexOf(layerType) >= 0) { + evt.layerListWidget.publishData({ + 'target': 'AttributeTable', + 'layer': this._layerInfo + }); + } + })); + }, + + _onTransparencyChanged: function(evt) { + this._layerInfo.setOpacity(1 - evt.extraData.newTransValue); + }, + + _onControlPopup: function(evt) { + /*jshint unused: false*/ + if(this._layerInfo.controlPopupInfo.enablePopup) { + this._layerInfo.disablePopup(); + } else { + this._layerInfo.enablePopup(); + } + this._layerInfo.map.infoWindow.hide(); + } + }); + + clazz.create = function(layerInfo, appConfig) { + var retDef = new Deferred(); + var isRootLayer = layerInfo.isRootLayer(); + var defaultItemInfos = [{ + key: 'url', + onClick: null + }]; + + var itemInfoCategoreList = { + 'RootLayer': [{ + key: 'zoomto' + },{ + key: 'transparency' + },{ + key:'separator' + },{ + key: 'moveup' + },{ + key: 'movedown' + },{ + key:'separator' + },{ + key: 'url' + }], + 'RootLayerAndFeatureLayer': [{ + key: 'zoomto' + }, { + key: 'transparency' + }, { + key:'separator' + },{ + key: 'controlPopup' + }, { + key:'separator' + },{ + key: 'moveup' + }, { + key: 'movedown' + }, { + key:'separator' + }, { + key: 'table' + }, { + key:'separator' + },{ + key: 'url' + }], + 'FeatureLayer': [{ + key: 'controlPopup' + }, { + key:'separator' + }, { + key: 'table' + }, { + key:'separator' + }, { + key: 'url' + }], + 'GroupLayer': [{ + key: 'url' + }], + 'Table': [{ + key: 'table' + }, { + key:'separator' + }, { + key: 'url' + }], + 'default': defaultItemInfos + }; + + layerInfo.getLayerType().then(lang.hitch(this, function(layerType){ + var itemInfoCategory = ""; + if(isRootLayer && (layerType === "FeatureLayer" || + layerType === "CSVLayer" || + layerType ==="ArcGISImageServiceLayer")) { + itemInfoCategory = "RootLayerAndFeatureLayer"; + } else if(isRootLayer ) { + itemInfoCategory = "RootLayer"; + } else if(layerType === "FeatureLayer" || layerType === "CSVLayer") { + itemInfoCategory = "FeatureLayer"; + } else if(layerType === "GroupLayer") { + itemInfoCategory = "GroupLayer"; + } else if(layerType === "Table") { + itemInfoCategory = "Table"; + } else { + //default condition + itemInfoCategory = "default"; + } + retDef.resolve(new clazz(layerInfo, + itemInfoCategoreList[itemInfoCategory], + layerType, + appConfig)); + }), lang.hitch(this, function() { + //return default popupmenu info. + retDef.resolve(new clazz(layerInfo, [{key:'empty'}])); + })); + return retDef; + }; + + + return clazz; +}); \ No newline at end of file diff --git a/src/Widget.html b/src/Widget.html new file mode 100644 index 0000000..2e35479 --- /dev/null +++ b/src/Widget.html @@ -0,0 +1,7 @@ +
+
+
${nls.titleLayers}
+
+
+
+
diff --git a/src/Widget.js b/src/Widget.js new file mode 100644 index 0000000..4b3af70 --- /dev/null +++ b/src/Widget.js @@ -0,0 +1,343 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'jimu/BaseWidget', + 'dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/array', + 'dojo/dom-attr', + "dojo/topic", + 'dojo/dom-construct', + 'dojo/dom-geometry', + 'dojo/dom', + 'dojo/on', + 'dojo/_base/unload', + 'dojo/aspect', + 'dojo/query', + './LayerListView', + './PopupMenu', + 'dojo/dom-style', + './NlsStrings', + 'jimu/LayerInfos/LayerInfoFactory', + 'jimu/LayerInfos/LayerInfos', + 'dojo/promise/all' + ], + function(BaseWidget, declare, lang, array,domAttr,topic, domConstruct, domGeometry, dom, on, baseUnload, + aspect, query, LayerListView, PopupMenu, domStyle, NlsStrings, LayerInfoFactory, + LayerInfos, all) { + var clazz = declare([BaseWidget], { + /*jshint unused: false*/ + //these two properties is defined in the BaseWiget + baseClass: 'jimu-widget-layerList', + name: 'layerList', + //layerListView: Object{} + // A module is responsible for show layers list + layerListView: null, + + //operLayerInfos: Object{} + // operational layer infos + operLayerInfos: null, + + startup: function() { + NlsStrings.value = this.nls; + + // summary: + // this function will be called when widget is started. + // description: + // according to webmap or basemap to create LayerInfos instance + // and initialize operLayerInfos; + // show layers list; + // bind events of layerList and create popup menu. + // var mapLayers; + // LayerInfoFactory.getInstance(this.map).init().then(lang.hitch(this, function(){ + // if (this.map.itemId) { + // this.operLayerInfos = + // new LayerInfos(this.map.itemInfo.itemData.baseMap.baseMapLayers, + // this.map.itemInfo.itemData.operationalLayers, + // this.map); + // } else { + // mapLayers = this._obtainMapLayers(); + // this.operLayerInfos = new LayerInfos(mapLayers.basemapLayers, + // mapLayers.operationalLayers, this.map); + // } + + // this.showLayers(); + // this.bindEvents(); + // dom.setSelectable(this.layersSection, false); + // })); + + if (this.map.itemId) { + LayerInfos.getInstance(this.map, this.map.itemInfo).then(lang.hitch(this, function(operLayerInfos) { + this.operLayerInfos = operLayerInfos; + this.showLayers(); + //this.bindEvents(); + this.own(on(this.operLayerInfos, 'layerInfosChanged', lang.hitch(this, this._onLayerInfosChanged))); + dom.setSelectable(this.layersSection, false); + if (this.layerListView) this.layerListView._adjustToState(); + })); + } else { + var itemInfo = this._obtainMapLayers(); + LayerInfos.getInstance(this.map, itemInfo).then(lang.hitch(this, function(operLayerInfos) { + this.operLayerInfos = operLayerInfos; + this.showLayers(); + //this.bindEvents(); + this.own(on(this.operLayerInfos, 'layerInfosChanged', lang.hitch(this, this._onLayerInfosChanged))); + dom.setSelectable(this.layersSection, false); + if (this.layerListView) this.layerListView._adjustToState(); + })); + } + this._registerMapZoom(); + this._setVersionTitle(); + }, + _registerMapZoom:function(){ + //this will grey out layer nodes when zoomed out of scale + if (!this._zoomHandler) { + var map = this.map; + this._zoomHandler = this.own( + on(map, 'zoom-end', lang.hitch(this, function () { + if (this.layerListView) this.layerListView._adjustToState(); + })) + ); + } + }, + destroy: function() { + this._clearLayers(); + this.inherited(arguments); + }, + + _obtainMapLayers: function() { + // summary: + // obtain basemap layers and operational layers if the map is not webmap. + var basemapLayers = [], + operLayers = []; + // emulate a webmapItemInfo. + var retObj = { + itemData: { + baseMap: { + baseMapLayers: [] + }, + operationalLayers: [] + } + }; + // array.forEach(this.map.layerIds.concat(this.map.graphicsLayerIds), function(layerId) { + // var layer = this.map.getLayer(layerId); + // if (layer.isOperationalLayer) { + // operLayers.push({ + // layerObject: layer, + // title: layer.label || layer.title || layer.name || layer.id || " ", + // id: layer.id || " " + // }); + // } else { + // basemapLayers.push({ + // layerObject: layer, + // id: layer.id || " " + // }); + // } + // }, this); + + array.forEach(this.map.graphicsLayerIds, function(layerId) { + var layer = this.map.getLayer(layerId); + if (layer.isOperationalLayer) { + operLayers.push({ + layerObject: layer, + title: layer.label || layer.title || layer.name || layer.id || " ", + id: layer.id || " " + }); + } + }, this); + array.forEach(this.map.layerIds, function(layerId) { + var layer = this.map.getLayer(layerId); + if (layer.isOperationalLayer) { + operLayers.push({ + layerObject: layer, + title: layer.label || layer.title || layer.name || layer.id || " ", + id: layer.id || " " + }); + } else { + basemapLayers.push({ + layerObject: layer, + id: layer.id || " " + }); + } + }, this); + + retObj.itemData.baseMap.baseMapLayers = basemapLayers; + retObj.itemData.operationalLayers = operLayers; + return retObj; + }, + + + + _layerFilter: function(layerId, basemapLayers, operLayers) { + var layer = this.map.getLayer(layerId); + if (layer.isOperationalLayer) { + operLayers.push({ + layerObject: layer, + title: layer.label || layer.title || layer.name || layer.id || " ", + id: layer.id || " " + }); + } else { + basemapLayers.push({ + layerObject: layer, + id: layer.id || " " + }); + } + }, + + showLayers: function() { + // summary: + // create a LayerListView module used to draw layers list in browser. + this.layerListView = new LayerListView({ + operLayerInfos: this.operLayerInfos, + layerListWidget: this, + config: this.config, + map:this.map + }).placeAt(this.layerListBody); + }, + + _createPopupMenu: function() { + // summary: + // popup menu is a dijit used to do some operations of layer + this.popupMenu = new PopupMenu({ + layerListWidget: this + }); + domConstruct.place(this.popupMenu.domNode, this.domNode); + }, + + _clearLayers: function() { + // summary: + // clear layer list + //domConstruct.empty(this.layerListTable); + if (this.layerListView && this.layerListView.destroyRecursive) { + this.layerListView.destroyRecursive(); + } + }, + + flag: true, + + bindEvents: function() { + // summary: + // bind events are listened by this module + var handleRemove, handleRemoves, scaleChangeHandle; + //this.own(aspect.after(this.map, "onLayerAddResult", + // lang.hitch(this, this._onLayersChange))); + this.own(on(this.map, "layer-add-result", lang.hitch(this, this._onLayersChange))); + //handleRemove = aspect.after(this.map, "onLayerRemove", + // lang.hitch(this, this._onLayersChange)); + handleRemove = on(this.map, "layer-remove", lang.hitch(this, this._onLayersChange)); + this.own(handleRemove); + //aspect.after(this.map, "onLayerReorder", lang.hitch(this, this._onLayersChange)); + //this.own(on(this.map, "LayersAddResult", lang.hitch(this, this._onLayersChangeAdds))); + //this.own(on(this.map, "layers-add-result", lang.hitch(this, this._onLayersChange))); + //handleRemoves = aspect.after(this.map, "onLayersRemoved", + // lang.hitch(this, this._onLayersChange)); + //handleRemoves = on(this.map, "layers-removed", lang.hitch(this, this._onLayersChange)); + //this.own(handleRemoves); + //aspect.after(this.map, "onLayersReorder", lang.hitch(this, this._onLayersChange)); + + //this.own(on(this.map, "extent-change", lang.hitch(this, this._onLayersScaleChange))); + + baseUnload.addOnUnload(function() { + handleRemove.remove(); + handleRemoves.remove(); + //scaleChangeHandle.remove(); + }); + + // map infowindow + // on(this.map.infoWindow, "show", lang.hitch(this, function(){ + // all(this.map.infoWindow.deferreds).then(lang.hitch(this, function() { + // var features = []; + // if (this.map.infoWindow.features.length > 0) { + // features.push(this.map.infoWindow.features[0]); + // this.flag = true; + // } + // this.map.infoWindow.setFeatures(features); + // }), function() { + + // }); + + // })); + + // on(this.map.infoWindow, "hide", lang.hitch(this, function(){ + // if (this.flag) { + // this.map.infoWindow.show(); + // this.flag = false; + // } + // })); + }, + + _onLayersChange: function(evt) { + /*jshint unused: false*/ + // summary: + // response to any layer change. + // description: + // udate LayerInfos data, cleare layer list and redraw + if (evt.layer.declaredClass !== "esri.layers.GraphicsLayer") { + this.operLayerInfos.update(); + this._clearLayers(); + this.showLayers(); + } + }, + + _onLayerInfosChanged: function (layerInfo, changedType) { + this._clearLayers(); + this.showLayers(); + }, + _setVersionTitle: function () { + var labelNode = this._getLabelNode(this); + var manifestInfo = this.manifest; + var devVersion = manifestInfo.version; + var devWabVersion = manifestInfo.developedAgainst || manifestInfo.wabVersion; + var codeSourcedFrom = manifestInfo.codeSourcedFrom; + var client = manifestInfo.client; + + var title = "Dev version: " + devVersion + "\n"; + title += "Developed/Modified against: WAB" + devWabVersion + "\n"; + title += "Client: " + client + "\n"; + if (codeSourcedFrom) { + title += "Code sourced from: " + codeSourcedFrom + "\n"; + } + + if (labelNode) { + domAttr.set(labelNode, 'title', title); + } + + }, + _getLabelNode: function (widget) { + var labelNode; + if (!(widget.labelNode) && !(widget.titleLabelNode)) { + if (widget.getParent()) { + labelNode = this._getLabelNode(widget.getParent()); + } + } else { + labelNode = widget.labelNode || widget.titleLabelNode; + } + return labelNode; + + } + //_onLayersScaleChange: function (event) { + // console.log("mapScale"); + // var mapScale = this.map.getScale(); + // console.log(mapScale); + // console.log(this.operLayerInfos); + + //} + + }); + //clazz.hasConfig = false; + return clazz; + }); diff --git a/src/config.json b/src/config.json new file mode 100644 index 0000000..8b59ee5 --- /dev/null +++ b/src/config.json @@ -0,0 +1,33 @@ +{ + "showLegend": true, + "metadataTool": { + "path": "/exts/LayerMetadata/getMetadata?layer={layerId}&f=pjson", + "metadataParseConfig": [ + { + "label": "", + "path": "description", + "source":"mxd" + }, + { + "label":"Credit", + "path":"copyrightText", + "source":"mxd" + }, + { + "label":"Use Limitation", + "path":"dataIdInfo->resConst->Consts->useLimit", + "source":"soe" + }, + { + "label":"Last Updated", + "path":"dataIdInfo->idCitation->date->reviseDate", + "source":"soe" + } + + ] + } + +} + + + diff --git a/src/css/images/current_basemap_indicator.png b/src/css/images/current_basemap_indicator.png new file mode 100644 index 0000000..df226a6 Binary files /dev/null and b/src/css/images/current_basemap_indicator.png differ diff --git a/src/css/style.css b/src/css/style.css new file mode 100644 index 0000000..4c92a6b --- /dev/null +++ b/src/css/style.css @@ -0,0 +1,407 @@ + +.jimu-widget-layerList{ + position: relative; +} + +.jimu-widget-layerList .jimu-hr{ + margin-top: 15px; +} + +.jimu-widget-layerList .layers-section{ + margin-top: 0px; +} + + +.jimu-widget-layerList .layers-section .layers-list{ + width: 100%; +} + +.jimu-widget-layerList .layers-section .layer-list-title{ + height: 16px; + font-size: 14px; + /*border: 1px solid #000000;*/ + color: #86909c; + margin-top: 14px; +} + +.jimu-widget-layerList .layer-list-body { + /*overflow: auto;*/ +} + +.jimu-widget-layerList .layer-list-table{ + width: 100%; + border-spacing: 0px; +} + +.jimu-widget-layerList .layers-list-body{ + border: 0px solid #999; +} + +.jimu-widget-layerList .jimu-widget-row{ + +} + +.jimu-widget-layerList .layer-row{ + background-color: #ffffff; + height: 40px; +} + +.jimu-widget-layerList .layer-row-mouseover{ + background-color: #e3ecf2; +} + +.jimu-widget-layerList .jimu-widget-row-selected{ + background-color: #d9dde0; +; +} + +.jimu-widget-layerList .jimu-widget-row-active{ + background-color: #009cff; +} + +.jimu-widget-layerList .jimu-widget-row-selected .col-layer-label{ + color: #333; +} +.jimu-widget-layerList .jimu-widget-row-active .col-layer-label{ + color: #fff; +} + + +.jimu-widget-layerList .col{ + border: 0px solid;/*remove*/ + border-bottom: 0px solid #ffffff; + /*************/ +} + +.jimu-widget-layerList .col1{ +} + +.jimu-widget-layerList .col2{ + width: auto; + word-break: break-word; + cursor: pointer; +} + +.jimu-widget-layerList .col3{ + width: 24px; +} +.jimu-widget-layerList .col4{ + width: 24px; +} + +.jimu-widget-layerList .begin-blank-div{ + /*float: left;*/ + width: 12px; + height: 2px; +} + +.jimu-widget-layerList .col-showLegend{ + width: 17px; + text-align: center; +} + +.jimu-widget-layerList .showLegend-div{ + width: 13px; + height: 13px; + cursor: pointer; + font-size: 2px; + /*************/ +} + +.jimu-widget-layerList .showLegend-image{ + /* + position: relative; + top: -1px; + left: 3px; + */ + margin-top: 4px; + font-size: 3px; + padding-left: 3px; +} + +.jimu-rtl .jimu-widget-layerList .showLegend-image{ + padding-left: 0; + padding-right: 3px; +} + +.jimu-widget-layerList .layers-list-imageShowLegend-down{ + -moz-transform: scale(1) rotate(270deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -webkit-transform: scale(1) rotate(270deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -o-transform: scale(1) rotate(270deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + -ms-transform: scale(1) rotate(270deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); + transform: scale(1) rotate(270deg) translateX(0px) translateY(0px) skewX(0deg) skewY(0deg); +} + +.jimu-widget-layerList .layers-list-imageShowLegend-down-div{ + background-color: #d9dde0; +} + +.jimu-widget-layerList .noLegend-div{ + /*float: left;*/ + width: 33px; + text-align: right; + display: none; +} +.jimu-widget-layerList .noLegend-image{ + display: block; + margin: 0 auto; +} + +.jimu-widget-layerList .col-blank{ + width:17px; +} +.jimu-widget-layerList .col-select{ + width: 17px; + /*text-align: center;*/ +} + +.jimu-widget-layerList .col-reserve-blank{ + width: 25px; +} + +.jimu-widget-layerList .col-content{ + color: #686868; + font-size: 12px; +} + +.jimu-widget-layerList .div-select{ + position: relative; + font-size: 2px; + /*************/ +} + +.jimu-widget-layerList .div-select .checkbox{ + cursor: auto; +} + +.jimu-widget-layerList .div-content{ + position: relative; + /*************/ + color: #686868; + font-size: 12px; + border: 0px solid; + +} + +.jimu-widget-layerList .col-popupMenu{ + width: 17px; + text-align: center; +} +.jimu-widget-layerList .col-select .jimu-selection-box{ + margin-top: 5px; +} +.jimu-widget-layerList .layers-list-body .col-layer-label{ + color: #686868; +} + +.jimu-widget-layerList .layer-sub-node{ + display: none; + width:100%; + border-spacing: 0px; +} + +.jimu-widget-layerList .legend-node-td{ +} + +.jimu-widget-layerList .legend-div{ + overflow: hidden; + font-size: 11px; +} + +.jimu-widget-layerList .legend-symbol{ +} + +.jimu-widget-layerList .legend-label{ + margin-top: 17px; + color: #686868; + font-size: 11px; +} + +.jimu-widget-layerList .layers-list-popupMenu-div{ + position: relative; + width: 16px; + height: 40px; + /*background-color: #d9dde0;*/ + cursor: pointer; + border-radius: 2px; + /*************/ + float: right; + /*margin-right: 4px;*/ + padding-top: 14px; +} + +.jimu-widget-layerList .layers-list-popupMenu-div .jimu-loading{ + width: 20px; + height: 20px; + margin-top: -11px; + margin-left: -11px; +} + +.jimu-rtl .jimu-widget-layerList .layers-list-popupMenu-div .jimu-loading{ + margin-right: -11px; +} + +.jimu-widget-layerList .layers-list-popupMenu-div-selected{ + width: 13px; + height: 13px; + background-color: #ffffff; + border-radius: 2px; +} + +.jimu-widget-layerList .layers-list-popupMenu-image{ + position: absolute; + top: 5px; + left: 3px; +} + +/* +.jimu-widget-layerList .popup-menu-body{ + position: absolute; + background-color: #d9dde0; + width:126px; + height:164px; + outline-color:#ffffff; + outline-style:solid; + outline-width:1px; + overflow:auto; + color: #686868; + font-size: 12px; + z-index: 2; +} + + +.jimu-widget-layerList .popup-menu .popup-menu-hr{ + border-top: 1px solid #ffffff; + margin-left: 1px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; +} + +.jimu-widget-layerList .popup-menu .popup-menu-row{ + background-color: #d9dde0; + height: 25px; + padding-top: 5px; + padding-left: 10px; + text-align: left; + cursor: pointer; + text-decoration: none; +} +.jimu-widget-layerList .popup-menu .popup-menu-row-a{ + text-decoration: none; + color: #686868; +} +.jimu-widget-layerList .popup-menu .popup-menu-row-selected{ + text-decoration: underline; +} + +.jimu-widget-layerList .popup-menu .popup-menu-row-dissable{ + color:#c1c1c1; +} + +.jimu-widget-layerList .popup-menu .popup-menu-row .popup-menu-row-transparency{ + width:100px; +} +*/ + +.jimu-widget-layerList .popup-menu-transparency-body { + position: absolute; + background-color: #d9dde0; + outline-color:#ffffff; + outline-style:solid; + outline-width:1px; + width:184px; + height:50px; + padding-left: 2%; + padding-right: 2%; + color: #686868; + z-index: 2; + font-size: 12px; + display: none; +} + +.jimu-widget-layerList .popup-menu-transparency-body .transparency-rule{ +} + +.jimu-widget-layerList .popup-menu-transparency-body .label { + overflow: hidden; + margin-top: 2px; + margin-bottom: 1px; +} + +/* +.jimu-widget-layerList .popup-menu-transparency-body .label .label-left{ + float: left; +} + +.jimu-widget-layerList .popup-menu-transparency-body .label .label-right{ + float: right; +} +*/ +/***********************************/ + +.jimu-widget-layerList .jimu-dropmenu .jimu-icon-btn{ + width: 13px; + height: 13px; + min-height: 13px; + min-width: 13px; + border-radius: 2px; +} + +.jimu-widget-layerList .jimu-dropmenu .jimu-icon-btn-selected{ + background-color: #ffffff; + border: 1px solid #ffffff; +} + +.jimu-widget-layerList .jimu-dropmenu .drop-menu{ + /*width:126px; + height:164px;*/ + outline-color:#ffffff; + outline-style:solid; + outline-width:1px; + overflow:auto; + color: #686868; + font-size: 12px; + z-index: 2; + min-width: 119px; + right: 0px; +} + +.jimu-rtl .jimu-widget-layerList .jimu-dropmenu .drop-menu{ + left: 0px; +} + +.jimu-widget-layerList .jimu-dropmenu .menu-item{ + line-height: 25px; + white-space: nowrap; +} + +.jimu-widget-layerList .jimu-dropmenu .menu-item-dissable{ + color:#c1c1c1; +} + +.jimu-widget-layerList .legends-loading-img{ + width: 30px; + height: 30px; +} + +.jimu-widget-layerList .jimu-dropmenu .menu-item .menu-item-description{ + text-decoration: none; + color: inherit; + display: block; +} + + +.jimu-widget-layerList .layers-list-metaData-div { + position:relative; + float:right; + width:16px; + height:16px; + cursor: pointer; + background:transparent url("../images/metadata.png") center center no-repeat; + +} +.jimu-widget-layerList .LayerOutOfScale{ + color: grey; + opacity: 0.5; +} diff --git a/src/images/icon.png b/src/images/icon.png new file mode 100644 index 0000000..527ec04 Binary files /dev/null and b/src/images/icon.png differ diff --git a/src/images/loading.gif b/src/images/loading.gif new file mode 100644 index 0000000..630b6cd Binary files /dev/null and b/src/images/loading.gif differ diff --git a/src/images/metadata.png b/src/images/metadata.png new file mode 100644 index 0000000..bda8a3d Binary files /dev/null and b/src/images/metadata.png differ diff --git a/src/images/noLegend.png b/src/images/noLegend.png new file mode 100644 index 0000000..b7daad0 Binary files /dev/null and b/src/images/noLegend.png differ diff --git a/src/images/table.png b/src/images/table.png new file mode 100644 index 0000000..ea1c21b Binary files /dev/null and b/src/images/table.png differ diff --git a/src/images/v.png b/src/images/v.png new file mode 100644 index 0000000..5503eb7 Binary files /dev/null and b/src/images/v.png differ diff --git a/src/images/v_left.png b/src/images/v_left.png new file mode 100644 index 0000000..48e89c9 Binary files /dev/null and b/src/images/v_left.png differ diff --git a/src/images/v_right.png b/src/images/v_right.png new file mode 100644 index 0000000..b25b386 Binary files /dev/null and b/src/images/v_right.png differ diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..6a3c56f --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,13 @@ +{ + "name": "LayerListWidget", + "2D": true, + "platform": "HTML", + "version": "11795", + "client":"GISCO", + "developedAgainst":"1.3", + "wabVersion":"1.3", + "author": "Esri R&D Center Beijing", + "description": "", + "copyright": "", + "license": "http://www.apache.org/licenses/LICENSE-2.0" +} \ No newline at end of file diff --git a/src/nls/ar/strings.js b/src/nls/ar/strings.js new file mode 100644 index 0000000..83ec49f --- /dev/null +++ b/src/nls/ar/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "قائمة الطبقات", + titleBasemap: "خرائط الأساس", + titleLayers: "الطبقات التشغيلية", + labelLayer: "اسم الطبقة", + itemZoomTo: "تكبير إلى", + itemTransparency: "معدل الشفافية:", + itemTransparent: "شفاف", + itemOpaque: "غير شفاف", + itemMoveUp: "نقل لأعلى", + itemMoveDown: "نقل لأسفل", + itemDesc: "الوصف", + itemDownload: "تنزيل", + itemToAttributeTable: "فتح جدول البيانات الجدولية", + itemShowItemDetails: "إظهار تفاصيل العنصر", + empty: "فارغ", + removePopup: "إزالة العنصر المنبثق", + enablePopup: "تمكين العنصر المنبثق" + }) +); diff --git a/src/nls/cs/strings.js b/src/nls/cs/strings.js new file mode 100644 index 0000000..e747aad --- /dev/null +++ b/src/nls/cs/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Seznam vrstev", + titleBasemap: "Podkladové mapy", + titleLayers: "Operační vrstvy", + labelLayer: "Název vrstvy", + itemZoomTo: "Přiblížit na", + itemTransparency: "Průhlednost", + itemTransparent: "Průhledná", + itemOpaque: "Neprůhledná", + itemMoveUp: "Přesunout nahoru", + itemMoveDown: "Přesunout dolů", + itemDesc: "Popis", + itemDownload: "Stáhnout", + itemToAttributeTable: "Otevřít atributovou tabulku", + itemShowItemDetails: "Ukázat podrobnosti položky", + empty: "prázdné", + removePopup: "Odebrat vyskakovací okno", + enablePopup: "Povolit vyskakovací okno" + }) +); diff --git a/src/nls/da/strings.js b/src/nls/da/strings.js new file mode 100644 index 0000000..2aad6c8 --- /dev/null +++ b/src/nls/da/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lagliste", + titleBasemap: "Baggrundskort", + titleLayers: "Operationelle lag", + labelLayer: "Navn på lag", + itemZoomTo: "Zoom til", + itemTransparency: "Gennemsigtighed", + itemTransparent: "Gennemsigtig", + itemOpaque: "Uigennemsigtig", + itemMoveUp: "Flyt op", + itemMoveDown: "Flyt ned", + itemDesc: "Beskrivelse", + itemDownload: "Hent", + itemToAttributeTable: "Åbn attributtabel", + itemShowItemDetails: "Vil elementoplysninger", + empty: "tom", + removePopup: "Fjern pop-up", + enablePopup: "Aktivér pop-up" + }) +); diff --git a/src/nls/de/strings.js b/src/nls/de/strings.js new file mode 100644 index 0000000..472ac25 --- /dev/null +++ b/src/nls/de/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Layer-Liste", + titleBasemap: "Grundkarten", + titleLayers: "Operationale Layer", + labelLayer: "Layer-Name", + itemZoomTo: "Zoomen auf", + itemTransparency: "Transparenz", + itemTransparent: "Transparent", + itemOpaque: "Nicht transparent", + itemMoveUp: "Nach oben verschieben", + itemMoveDown: "Nach unten verschieben", + itemDesc: "Beschreibung", + itemDownload: "Herunterladen", + itemToAttributeTable: "Attributtabelle öffnen", + itemShowItemDetails: "Elementdetails anzeigen", + empty: "leer", + removePopup: "Pop-up entfernen", + enablePopup: "Pop-up aktivieren" + }) +); diff --git a/src/nls/el/strings.js b/src/nls/el/strings.js new file mode 100644 index 0000000..88a568d --- /dev/null +++ b/src/nls/el/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Λίστα θεματικών επιπέδων", + titleBasemap: "Υπόβαθρα", + titleLayers: "Επιχειρησιακά επίπεδα", + labelLayer: "Όνομα θεματικού επιπέδου", + itemZoomTo: "Εστίαση", + itemTransparency: "Διαφάνεια", + itemTransparent: "Διαφανές", + itemOpaque: "Αδιαφανές", + itemMoveUp: "Μετακίνηση προς τα επάνω", + itemMoveDown: "Μετακίνηση προς τα κάτω", + itemDesc: "Περιγραφή", + itemDownload: "Λήψη", + itemToAttributeTable: "Άνοιγμα Πίνακα Περιγραφικών Γνωρισμάτων", + itemShowItemDetails: "Εμφάνιση λεπτομερειών αντικειμένου", + empty: "κενό", + removePopup: "Κατάργηση αναδυόμενου παραθύρου", + enablePopup: "Ενεργοποίηση αναδυόμενου παραθύρου" + }) +); diff --git a/src/nls/es/strings.js b/src/nls/es/strings.js new file mode 100644 index 0000000..a16da8c --- /dev/null +++ b/src/nls/es/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lista de capas", + titleBasemap: "Mapas base", + titleLayers: "Capas operativas", + labelLayer: "Nombre de capa", + itemZoomTo: "Acercar a", + itemTransparency: "Transparencia", + itemTransparent: "Transparente", + itemOpaque: "Opaco", + itemMoveUp: "Mover hacia arriba", + itemMoveDown: "Mover hacia abajo", + itemDesc: "Descripción", + itemDownload: "Descargar", + itemToAttributeTable: "Abrir tabla de atributos", + itemShowItemDetails: "Mostrar detalles del elemento", + empty: "vacío", + removePopup: "Quitar elemento emergente", + enablePopup: "Habilitar elemento emergente" + }) +); diff --git a/src/nls/et/strings.js b/src/nls/et/strings.js new file mode 100644 index 0000000..8d3d6fd --- /dev/null +++ b/src/nls/et/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Kihiloend", + titleBasemap: "Aluskaardid", + titleLayers: "Töökihid", + labelLayer: "Kihi nimi", + itemZoomTo: "Suumi", + itemTransparency: "Läbipaistvus", + itemTransparent: "Läbipaistev", + itemOpaque: "Läbipaistmatu", + itemMoveUp: "Liiguta ülespoole", + itemMoveDown: "Liiguta allapoole", + itemDesc: "Kirjeldus", + itemDownload: "Laadi alla", + itemToAttributeTable: "Ava atribuudi tabel", + itemShowItemDetails: "Näita sisuobjekti detaile", + empty: "tühi", + removePopup: "Eemalda hüpikaken", + enablePopup: "Luba hüpikaken" + }) +); diff --git a/src/nls/fi/strings.js b/src/nls/fi/strings.js new file mode 100644 index 0000000..67da2f6 --- /dev/null +++ b/src/nls/fi/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Karttatasot", + titleBasemap: "Taustakartat", + titleLayers: "Toiminnalliset karttatasot", + labelLayer: "Karttatason nimi", + itemZoomTo: "Tarkenna kohteeseen", + itemTransparency: "Läpinäkyvyys", + itemTransparent: "Läpinäkyvä", + itemOpaque: "Läpinäkymätön", + itemMoveUp: "Siirrä ylös", + itemMoveDown: "Siirrä alas", + itemDesc: "Kuvaus", + itemDownload: "Lataa", + itemToAttributeTable: "Avaa ominaisuustietotaulu", + itemShowItemDetails: "Näytä kohteen tiedot", + empty: "tyhjä", + removePopup: "Poista ponnahdusikkuna", + enablePopup: "Ota ponnahdusikkunat käyttöön" + }) +); diff --git a/src/nls/fr/strings.js b/src/nls/fr/strings.js new file mode 100644 index 0000000..c8fe7b3 --- /dev/null +++ b/src/nls/fr/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Liste des couches", + titleBasemap: "Fonds de carte", + titleLayers: "Couches opérationnelles", + labelLayer: "Nom de la couche", + itemZoomTo: "Zoom", + itemTransparency: "Transparence", + itemTransparent: "Transparent", + itemOpaque: "Opaque", + itemMoveUp: "Monter", + itemMoveDown: "Descendre", + itemDesc: "Description", + itemDownload: "Télécharger", + itemToAttributeTable: "Ouvrir la table attributaire", + itemShowItemDetails: "Afficher les détails de l\'élément", + empty: "vide", + removePopup: "Supprimer la fenêtre contextuelle", + enablePopup: "Activer la fenêtre contextuelle" + }) +); diff --git a/src/nls/he/strings.js b/src/nls/he/strings.js new file mode 100644 index 0000000..9dc8178 --- /dev/null +++ b/src/nls/he/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "רשימת שכבות", + titleBasemap: "מפות בסיס", + titleLayers: "שכבות תפעוליות", + labelLayer: "שם שכבה", + itemZoomTo: "התמקד אל", + itemTransparency: "שקיפות", + itemTransparent: "שקוף", + itemOpaque: "אטום", + itemMoveUp: "הזז למעלה", + itemMoveDown: "הזז למטה", + itemDesc: "תיאור", + itemDownload: "הורדה", + itemToAttributeTable: "פתח טבלת מאפיינים", + itemShowItemDetails: "הצג פרטי פריט", + empty: "ריק", + removePopup: "‏‫הסר חלון קופץ‬", + enablePopup: "הפעל חלון קופץ" + }) +); diff --git a/src/nls/it/strings.js b/src/nls/it/strings.js new file mode 100644 index 0000000..671c6f5 --- /dev/null +++ b/src/nls/it/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Elenco layer", + titleBasemap: "Mappe di base", + titleLayers: "Layer operativi", + labelLayer: "Nome layer", + itemZoomTo: "Zoom a", + itemTransparency: "Trasparenza", + itemTransparent: "Trasparente", + itemOpaque: "Opaco", + itemMoveUp: "Sposta su", + itemMoveDown: "Sposta giù", + itemDesc: "Descrizione", + itemDownload: "Download", + itemToAttributeTable: "Apri tabella attributi", + itemShowItemDetails: "Mostra dettagli elemento", + empty: "vuoto", + removePopup: "Rimuovi popup", + enablePopup: "Abilita popup" + }) +); diff --git a/src/nls/ja/strings.js b/src/nls/ja/strings.js new file mode 100644 index 0000000..35dd5c6 --- /dev/null +++ b/src/nls/ja/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "レイヤー リスト", + titleBasemap: "ベースマップ", + titleLayers: "操作レイヤー", + labelLayer: "レイヤー名", + itemZoomTo: "ズーム", + itemTransparency: "透過表示", + itemTransparent: "透明", + itemOpaque: "不透明", + itemMoveUp: "上に移動", + itemMoveDown: "下に移動", + itemDesc: "説明", + itemDownload: "ダウンロード", + itemToAttributeTable: "属性テーブルを開く", + itemShowItemDetails: "アイテムの詳細を表示", + empty: "空", + removePopup: "ポップアップの削除", + enablePopup: "ポップアップの有効化" + }) +); diff --git a/src/nls/ko/strings.js b/src/nls/ko/strings.js new file mode 100644 index 0000000..fb9c861 --- /dev/null +++ b/src/nls/ko/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "레이어 목록", + titleBasemap: "베이스맵", + titleLayers: "운영 레이어", + labelLayer: "레이어 이름", + itemZoomTo: "확대", + itemTransparency: "투명도", + itemTransparent: "투명", + itemOpaque: "불투명", + itemMoveUp: "위로 이동", + itemMoveDown: "아래로 이동", + itemDesc: "설명", + itemDownload: "다운로드", + itemToAttributeTable: "속성 테이블 열기", + itemShowItemDetails: "항목 세부정보 보기", + empty: "비어 있음", + removePopup: "팝업 제거", + enablePopup: "팝업 활성화" + }) +); diff --git a/src/nls/lt/strings.js b/src/nls/lt/strings.js new file mode 100644 index 0000000..4be06ab --- /dev/null +++ b/src/nls/lt/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Sluoksniai", + titleBasemap: "Pagrindo žemėlapiai", + titleLayers: "Darbiniai sluoksniai", + labelLayer: "Sluoksnio pavadinimas", + itemZoomTo: "Parodyti visą", + itemTransparency: "Permatomumas", + itemTransparent: "Permatomas", + itemOpaque: "Nepermatomas", + itemMoveUp: "Pakelti aukštyn", + itemMoveDown: "Nuleisti žemyn", + itemDesc: "Aprašas", + itemDownload: "Atsiųsti", + itemToAttributeTable: "Atidaryti atributų lentelę", + itemShowItemDetails: "Rodyti elemento aprašą", + empty: "tuščia", + removePopup: "Pašalinti iškylančius langus", + enablePopup: "Įjungti iškylančius langus" + }) +); diff --git a/src/nls/lv/strings.js b/src/nls/lv/strings.js new file mode 100644 index 0000000..a61018a --- /dev/null +++ b/src/nls/lv/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Slāņu saraksts", + titleBasemap: "Pamatkartes", + titleLayers: "Operacionālie slāņi", + labelLayer: "Slāņa nosaukums", + itemZoomTo: "Pietuvināt", + itemTransparency: "Caurspīdīgums", + itemTransparent: "Caurspīdīgs", + itemOpaque: "Necaurredzams", + itemMoveUp: "Pārvietot uz augšu", + itemMoveDown: "Pārvietot uz leju", + itemDesc: "Apraksts", + itemDownload: "Lejupielāde", + itemToAttributeTable: "Atvērt atribūtu tabulu", + itemShowItemDetails: "Parādīt vienību detaļas", + empty: "tukšs", + removePopup: "Noņemt uznirstošo logu", + enablePopup: "Aktivizēt uznirstošo logu" + }) +); diff --git a/src/nls/nb/strings.js b/src/nls/nb/strings.js new file mode 100644 index 0000000..1e267a6 --- /dev/null +++ b/src/nls/nb/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Kartlagliste", + titleBasemap: "Bakgrunnskart", + titleLayers: "Operative kartlag", + labelLayer: "Lagnavn", + itemZoomTo: "Zoom til", + itemTransparency: "Gjennomsiktighet", + itemTransparent: "Gjennomsiktighet", + itemOpaque: "Ugjennomsiktig", + itemMoveUp: "Flytt opp", + itemMoveDown: "Flytt ned", + itemDesc: "Beskrivelse", + itemDownload: "Last ned", + itemToAttributeTable: "Åpne attributtabell", + itemShowItemDetails: "Vis elementdetaljene", + empty: "tom", + removePopup: "Fjern popup", + enablePopup: "Aktiver popup" + }) +); diff --git a/src/nls/nl/strings.js b/src/nls/nl/strings.js new file mode 100644 index 0000000..e1cde33 --- /dev/null +++ b/src/nls/nl/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lijst met lagen", + titleBasemap: "Basiskaarten", + titleLayers: "Operationele lagen", + labelLayer: "Laagnaam", + itemZoomTo: "Zoomen naar", + itemTransparency: "Transparant", + itemTransparent: "Transparant", + itemOpaque: "Niet transparant", + itemMoveUp: "Naar boven verplaatsen", + itemMoveDown: "Naar beneden verplaatsen", + itemDesc: "Beschrijving", + itemDownload: "Downloaden", + itemToAttributeTable: "Attribuuttabel openen", + itemShowItemDetails: "Itemdetails weergeven", + empty: "leeg", + removePopup: "Pop-up verwijderen", + enablePopup: "Pop-up inschakelen" + }) +); diff --git a/src/nls/pl/strings.js b/src/nls/pl/strings.js new file mode 100644 index 0000000..c02379c --- /dev/null +++ b/src/nls/pl/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lista warstw", + titleBasemap: "Mapy bazowe", + titleLayers: "Warstwy operacyjne", + labelLayer: "Nazwa warstwy tematycznej", + itemZoomTo: "Powiększ do", + itemTransparency: "Przezroczystość", + itemTransparent: "Przezroczysty", + itemOpaque: "Nieprzezroczysty", + itemMoveUp: "Przesuń w górę", + itemMoveDown: "Przesuń w dół", + itemDesc: "Opis", + itemDownload: "Pobierz", + itemToAttributeTable: "Otwórz tabelę atrybutów", + itemShowItemDetails: "Pokaż szczegóły elementu", + empty: "puste", + removePopup: "Wyłącz okna podręczne", + enablePopup: "Włącz okna podręczne" + }) +); diff --git a/src/nls/pt-br/strings.js b/src/nls/pt-br/strings.js new file mode 100644 index 0000000..4e2e350 --- /dev/null +++ b/src/nls/pt-br/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lista de Camada", + titleBasemap: "Mapas Base", + titleLayers: "Camadas Operacionais", + labelLayer: "Nome da Camada", + itemZoomTo: "Zoom para", + itemTransparency: "Transparência", + itemTransparent: "Transparente", + itemOpaque: "Opaco", + itemMoveUp: "Mover para cima", + itemMoveDown: "Mover para baixo", + itemDesc: "Descrição", + itemDownload: "Download", + itemToAttributeTable: "Abrir Tabela de Atributo", + itemShowItemDetails: "Mostrar Detalhes do Item", + empty: "vazio", + removePopup: "Remover Pop-up", + enablePopup: "Habilitar Pop-up" + }) +); diff --git a/src/nls/pt-pt/strings.js b/src/nls/pt-pt/strings.js new file mode 100644 index 0000000..c0c6196 --- /dev/null +++ b/src/nls/pt-pt/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lista de Camadas", + titleBasemap: "Mapas base", + titleLayers: "Camadas Operacionais", + labelLayer: "Nome da Camada", + itemZoomTo: "Efetuar zoom para", + itemTransparency: "Transparência", + itemTransparent: "Transparente", + itemOpaque: "Opaco", + itemMoveUp: "Mover para cima", + itemMoveDown: "Mover para baixo", + itemDesc: "Descrição", + itemDownload: "Descarregar", + itemToAttributeTable: "Abrir tabela de atributos", + itemShowItemDetails: "Mostrar Detalhes do Item", + empty: "vazio", + removePopup: "Remover Janela Pop-up", + enablePopup: "Ativar Janela Pop-up" + }) +); diff --git a/src/nls/ro/strings.js b/src/nls/ro/strings.js new file mode 100644 index 0000000..7f6dca8 --- /dev/null +++ b/src/nls/ro/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Listă de straturi tematice", + titleBasemap: "Hărţi fundal", + titleLayers: "Straturi tematice operaţionale", + labelLayer: "Nume strat tematic", + itemZoomTo: "Transfocare la", + itemTransparency: "Transparenţă", + itemTransparent: "Transparent", + itemOpaque: "Opac", + itemMoveUp: "Deplasare în sus", + itemMoveDown: "Deplasare în jos", + itemDesc: "Descriere", + itemDownload: "Descărcare", + itemToAttributeTable: "Deschidere tabel de atribute", + itemShowItemDetails: "Afişare detalii element", + empty: "gol", + removePopup: "Eliminare pop-up", + enablePopup: "Activare pop-up" + }) +); diff --git a/src/nls/ru/strings.js b/src/nls/ru/strings.js new file mode 100644 index 0000000..107bcbc --- /dev/null +++ b/src/nls/ru/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Список слоев", + titleBasemap: "Базовые карты", + titleLayers: "Рабочие слои", + labelLayer: "Имя слоя", + itemZoomTo: "Приблизить к", + itemTransparency: "Прозрачность", + itemTransparent: "Прозрачный", + itemOpaque: "Непрозрачный", + itemMoveUp: "Выше", + itemMoveDown: "Ниже", + itemDesc: "Описание", + itemDownload: "Загрузить", + itemToAttributeTable: "Открыть таблицу атрибутов", + itemShowItemDetails: "Показать информацию об элементе", + empty: "пусто", + removePopup: "Удалить всплывающее окно", + enablePopup: "Включить всплывающее окно" + }) +); diff --git a/src/nls/strings.js b/src/nls/strings.js new file mode 100644 index 0000000..4a3cf54 --- /dev/null +++ b/src/nls/strings.js @@ -0,0 +1,50 @@ +define({ + root: ({ + _widgetLabel: "Layer List Widget", + titleBasemap: "Basemaps", + titleLayers: "Operational Layers", + labelLayer: "Layer Name", + itemZoomTo: "Zoom to", + itemTransparency: "Transparency", + itemTransparent: "Transparent", + itemOpaque: "Opaque", + itemMoveUp: "Move up", + itemMoveDown: "Move down", + itemDesc: "Description", + itemDownload: "Download", + itemToAttributeTable: "Open Attribute Table", + itemShowItemDetails: "Show Item Details", + empty: "empty", + removePopup: "Remove Pop-up", + enablePopup: "Enable Pop-up", + metadataWarning: "No additional information available for this layer", + ok: "OK" + }), + "ar": 1, + "cs": 1, + "da": 1, + "de": 1, + "el": 1, + "es": 1, + "et": 1, + "fi": 1, + "fr": 1, + "he": 1, + "it": 1, + "ja": 1, + "ko": 1, + "lt": 1, + "lv": 1, + "nb": 1, + "nl": 1, + "pl": 1, + "pt-br": 1, + "pt-pt": 1, + "ro": 1, + "ru": 1, + "sv": 1, + "th": 1, + "tr": 1, + "vi": 1, + "zh-cn": 1 +}); diff --git a/src/nls/sv/strings.js b/src/nls/sv/strings.js new file mode 100644 index 0000000..aa2da53 --- /dev/null +++ b/src/nls/sv/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Lagerlista", + titleBasemap: "Baskartor", + titleLayers: "Funktionslager", + labelLayer: "Lagernamn", + itemZoomTo: "Zooma till", + itemTransparency: "Transparens", + itemTransparent: "Transparent", + itemOpaque: "Opak", + itemMoveUp: "Flytta uppåt", + itemMoveDown: "Flytta nedåt", + itemDesc: "Beskrivning", + itemDownload: "Hämta", + itemToAttributeTable: "Öppna attributtabell", + itemShowItemDetails: "Visa objektinformation", + empty: "tom", + removePopup: "Ta bort popup-ruta", + enablePopup: "Aktivera popup-ruta" + }) +); diff --git a/src/nls/th/strings.js b/src/nls/th/strings.js new file mode 100644 index 0000000..36076c7 --- /dev/null +++ b/src/nls/th/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "รายการชั้นข้อมูล", + titleBasemap: "แผนที่ฐาน", + titleLayers: "ชั้นข้อมูลกระบวนการทำงาน", + labelLayer: "ชื่อชั้นข้อมูล", + itemZoomTo: "ขยายไปยัง", + itemTransparency: "โปร่งแสง", + itemTransparent: "โปร่งแสง", + itemOpaque: "ทึบแสง", + itemMoveUp: "เลื่อนขึ้น", + itemMoveDown: "เลื่อนลง", + itemDesc: "คำอธิบาย", + itemDownload: "ดาวน์โหลด", + itemToAttributeTable: "เปิดตารางข้อมูลคุณลักษณะ", + itemShowItemDetails: "แสดงรายละเอียดข้อมูล", + empty: "ว่าง", + removePopup: "ลบป๊อปอัพ", + enablePopup: "ใช้ป๊อปอัพ" + }) +); diff --git a/src/nls/tr/strings.js b/src/nls/tr/strings.js new file mode 100644 index 0000000..1a3dae8 --- /dev/null +++ b/src/nls/tr/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Katman Listesi", + titleBasemap: "Altlık haritaları", + titleLayers: "Operasyonel Katmanlar", + labelLayer: "Katman Adı", + itemZoomTo: "Şuna Yakınlaştır", + itemTransparency: "Saydamlık", + itemTransparent: "Saydam", + itemOpaque: "Opak", + itemMoveUp: "Yukarı taşı", + itemMoveDown: "Aşağı taşı", + itemDesc: "Açıklama", + itemDownload: "İndir", + itemToAttributeTable: "Öznitelik Tablosunu Aç", + itemShowItemDetails: "Öğe Ayrıntılarını Göster", + empty: "boş", + removePopup: "Açılan Pencereyi Kaldır", + enablePopup: "Açılan Pencereyi Etkinleştir" + }) +); diff --git a/src/nls/vi/strings.js b/src/nls/vi/strings.js new file mode 100644 index 0000000..f6c5c60 --- /dev/null +++ b/src/nls/vi/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "Danh sách Lớp", + titleBasemap: "Bản đồ nền", + titleLayers: "Các lớp hoạt động", + labelLayer: "Tên lớp", + itemZoomTo: "Phóng tới", + itemTransparency: "Độ trong suốt", + itemTransparent: "Độ trong suốt", + itemOpaque: "Độ mờ", + itemMoveUp: "Di chuyển lên trên", + itemMoveDown: "Di chuyển xuống dưới", + itemDesc: "Mô tả", + itemDownload: "Tải xuống", + itemToAttributeTable: "Mở Bảng Thuộc tính", + itemShowItemDetails: "Hiện Chi tiết của Mục", + empty: "trống", + removePopup: "Ẩn cửa sổ pop-up", + enablePopup: "Bật Cửa sổ pop-up" + }) +); diff --git a/src/nls/zh-cn/strings.js b/src/nls/zh-cn/strings.js new file mode 100644 index 0000000..a8bcfa7 --- /dev/null +++ b/src/nls/zh-cn/strings.js @@ -0,0 +1,21 @@ +define( + ({ + _widgetLabel: "图层列表", + titleBasemap: "底图", + titleLayers: "业务图层", + labelLayer: "图层名称", + itemZoomTo: "缩放至", + itemTransparency: "透明度", + itemTransparent: "透明", + itemOpaque: "不透明", + itemMoveUp: "上移", + itemMoveDown: "下移", + itemDesc: "描述", + itemDownload: "下载", + itemToAttributeTable: "打开属性表", + itemShowItemDetails: "显示项目详细信息", + empty: "空", + removePopup: "移除弹出窗口", + enablePopup: "启用弹出窗口" + }) +); diff --git a/src/setting/Setting.html b/src/setting/Setting.html new file mode 100644 index 0000000..fa5a18a --- /dev/null +++ b/src/setting/Setting.html @@ -0,0 +1,4 @@ +
+ ${nls.showLegend} +
+
diff --git a/src/setting/Setting.js b/src/setting/Setting.js new file mode 100644 index 0000000..61a978f --- /dev/null +++ b/src/setting/Setting.js @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////// +// Copyright © 2014 Esri. All Rights Reserved. +// +// Licensed under the Apache License Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////////// + +define([ + 'dojo/_base/declare', + 'jimu/BaseWidgetSetting', + 'dijit/_WidgetsInTemplateMixin', + 'dijit/form/CheckBox' + ], + function( + declare, + BaseWidgetSetting, + _WidgetsInTemplateMixin) { + return declare([BaseWidgetSetting, _WidgetsInTemplateMixin], { + + baseClass: 'jimu-widget-layerList-setting', + + startup: function() { + this.inherited(arguments); + this.setConfig(this.config); + }, + + setConfig: function(config) { + this.showLegend.setChecked(config.showLegend); + }, + + getConfig: function () { + var config = { + showLegend: "true", + metadataTool: null + }; + config.showLegend = this.showLegend.checked; + config.metadataTool = this.config.metadataTool ? this.config.metadataTool : null; + return config; + } + + }); + }); diff --git a/src/setting/css/style.css b/src/setting/css/style.css new file mode 100644 index 0000000..0091716 --- /dev/null +++ b/src/setting/css/style.css @@ -0,0 +1,3 @@ +.jimu-widget-layerList-setting .show-legend-checkbox { + margin-left: 24px; +} diff --git a/src/setting/nls/ar/strings.js b/src/setting/nls/ar/strings.js new file mode 100644 index 0000000..cf57d61 --- /dev/null +++ b/src/setting/nls/ar/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "إظهار وسيلة الإيضاح" + }) +); \ No newline at end of file diff --git a/src/setting/nls/cs/strings.js b/src/setting/nls/cs/strings.js new file mode 100644 index 0000000..18d315a --- /dev/null +++ b/src/setting/nls/cs/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Zobrazit legendu" + }) +); \ No newline at end of file diff --git a/src/setting/nls/da/strings.js b/src/setting/nls/da/strings.js new file mode 100644 index 0000000..75641f8 --- /dev/null +++ b/src/setting/nls/da/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Vis signaturforklaring" + }) +); \ No newline at end of file diff --git a/src/setting/nls/de/strings.js b/src/setting/nls/de/strings.js new file mode 100644 index 0000000..c4d4eea --- /dev/null +++ b/src/setting/nls/de/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Legende anzeigen" + }) +); \ No newline at end of file diff --git a/src/setting/nls/el/strings.js b/src/setting/nls/el/strings.js new file mode 100644 index 0000000..fcd99f9 --- /dev/null +++ b/src/setting/nls/el/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Εμφάνιση υπομνήματος" + }) +); \ No newline at end of file diff --git a/src/setting/nls/es/strings.js b/src/setting/nls/es/strings.js new file mode 100644 index 0000000..70c8fad --- /dev/null +++ b/src/setting/nls/es/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Mostrar leyenda" + }) +); \ No newline at end of file diff --git a/src/setting/nls/et/strings.js b/src/setting/nls/et/strings.js new file mode 100644 index 0000000..1077470 --- /dev/null +++ b/src/setting/nls/et/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Näita legendi" + }) +); \ No newline at end of file diff --git a/src/setting/nls/fi/strings.js b/src/setting/nls/fi/strings.js new file mode 100644 index 0000000..2537dfd --- /dev/null +++ b/src/setting/nls/fi/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Näytä selite" + }) +); \ No newline at end of file diff --git a/src/setting/nls/fr/strings.js b/src/setting/nls/fr/strings.js new file mode 100644 index 0000000..e627b3a --- /dev/null +++ b/src/setting/nls/fr/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Afficher la légende" + }) +); \ No newline at end of file diff --git a/src/setting/nls/he/strings.js b/src/setting/nls/he/strings.js new file mode 100644 index 0000000..7ccc9a5 --- /dev/null +++ b/src/setting/nls/he/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "הצג מקרא" + }) +); \ No newline at end of file diff --git a/src/setting/nls/it/strings.js b/src/setting/nls/it/strings.js new file mode 100644 index 0000000..62ed5c9 --- /dev/null +++ b/src/setting/nls/it/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Mostra legenda" + }) +); \ No newline at end of file diff --git a/src/setting/nls/ja/strings.js b/src/setting/nls/ja/strings.js new file mode 100644 index 0000000..55d003a --- /dev/null +++ b/src/setting/nls/ja/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "凡例を表示" + }) +); \ No newline at end of file diff --git a/src/setting/nls/ko/strings.js b/src/setting/nls/ko/strings.js new file mode 100644 index 0000000..44cb577 --- /dev/null +++ b/src/setting/nls/ko/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "범례 표시" + }) +); \ No newline at end of file diff --git a/src/setting/nls/lt/strings.js b/src/setting/nls/lt/strings.js new file mode 100644 index 0000000..e622a59 --- /dev/null +++ b/src/setting/nls/lt/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Rodyti legendą" + }) +); \ No newline at end of file diff --git a/src/setting/nls/lv/strings.js b/src/setting/nls/lv/strings.js new file mode 100644 index 0000000..89653e2 --- /dev/null +++ b/src/setting/nls/lv/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Rādīt leģendu" + }) +); \ No newline at end of file diff --git a/src/setting/nls/nb/strings.js b/src/setting/nls/nb/strings.js new file mode 100644 index 0000000..84ac5d3 --- /dev/null +++ b/src/setting/nls/nb/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Vis tegnforklaring" + }) +); \ No newline at end of file diff --git a/src/setting/nls/nl/strings.js b/src/setting/nls/nl/strings.js new file mode 100644 index 0000000..1bbb7bb --- /dev/null +++ b/src/setting/nls/nl/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Legenda weergeven" + }) +); \ No newline at end of file diff --git a/src/setting/nls/pl/strings.js b/src/setting/nls/pl/strings.js new file mode 100644 index 0000000..da44175 --- /dev/null +++ b/src/setting/nls/pl/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Pokaż legendę" + }) +); \ No newline at end of file diff --git a/src/setting/nls/pt-br/strings.js b/src/setting/nls/pt-br/strings.js new file mode 100644 index 0000000..ded61f0 --- /dev/null +++ b/src/setting/nls/pt-br/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Mostrar legenda" + }) +); \ No newline at end of file diff --git a/src/setting/nls/pt-pt/strings.js b/src/setting/nls/pt-pt/strings.js new file mode 100644 index 0000000..58a1f6c --- /dev/null +++ b/src/setting/nls/pt-pt/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Exibir legenda" + }) +); \ No newline at end of file diff --git a/src/setting/nls/ro/strings.js b/src/setting/nls/ro/strings.js new file mode 100644 index 0000000..d8d90b1 --- /dev/null +++ b/src/setting/nls/ro/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Afişare legendă" + }) +); \ No newline at end of file diff --git a/src/setting/nls/ru/strings.js b/src/setting/nls/ru/strings.js new file mode 100644 index 0000000..fe7c453 --- /dev/null +++ b/src/setting/nls/ru/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Показать легенду" + }) +); \ No newline at end of file diff --git a/src/setting/nls/strings.js b/src/setting/nls/strings.js new file mode 100644 index 0000000..8f77e7c --- /dev/null +++ b/src/setting/nls/strings.js @@ -0,0 +1,32 @@ +define({ + root: ({ + showLegend: "Show Legend" + }), + "ar": 1, + "cs": 1, + "da": 1, + "de": 1, + "el": 1, + "es": 1, + "et": 1, + "fi": 1, + "fr": 1, + "he": 1, + "it": 1, + "ja": 1, + "ko": 1, + "lt": 1, + "lv": 1, + "nb": 1, + "nl": 1, + "pl": 1, + "pt-br": 1, + "pt-pt": 1, + "ro": 1, + "ru": 1, + "sv": 1, + "th": 1, + "tr": 1, + "vi": 1, + "zh-cn": 1 +}); \ No newline at end of file diff --git a/src/setting/nls/sv/strings.js b/src/setting/nls/sv/strings.js new file mode 100644 index 0000000..c946310 --- /dev/null +++ b/src/setting/nls/sv/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Visa förklaring" + }) +); \ No newline at end of file diff --git a/src/setting/nls/th/strings.js b/src/setting/nls/th/strings.js new file mode 100644 index 0000000..ad4ab1d --- /dev/null +++ b/src/setting/nls/th/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "แสดงคำอธิบายสัญลักษณ์" + }) +); \ No newline at end of file diff --git a/src/setting/nls/tr/strings.js b/src/setting/nls/tr/strings.js new file mode 100644 index 0000000..bcf18c2 --- /dev/null +++ b/src/setting/nls/tr/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Gösterimi Göster" + }) +); \ No newline at end of file diff --git a/src/setting/nls/vi/strings.js b/src/setting/nls/vi/strings.js new file mode 100644 index 0000000..ef741a2 --- /dev/null +++ b/src/setting/nls/vi/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "Hiển thị Chú giải" + }) +); \ No newline at end of file diff --git a/src/setting/nls/zh-cn/strings.js b/src/setting/nls/zh-cn/strings.js new file mode 100644 index 0000000..4ea2dc5 --- /dev/null +++ b/src/setting/nls/zh-cn/strings.js @@ -0,0 +1,5 @@ +define( + ({ + showLegend: "显示图例" + }) +); \ No newline at end of file