diff --git a/Widget.js b/Widget.js index ee2cdfc..f2f4051 100644 --- a/Widget.js +++ b/Widget.js @@ -14,1439 +14,1431 @@ // limitations under the License. /////////////////////////////////////////////////////////////////////////// define([ - 'dojo/_base/declare', - 'dijit/_WidgetsInTemplateMixin', - 'jimu/BaseWidget', - 'esri/graphic', - 'esri/symbols/SimpleMarkerSymbol', - 'esri/geometry/Polyline', - 'esri/symbols/SimpleLineSymbol', - 'esri/geometry/Polygon', - 'esri/graphicsUtils', - 'esri/symbols/SimpleFillSymbol', - 'esri/symbols/TextSymbol', - 'esri/symbols/Font', - 'esri/units', - "esri/toolbars/edit", - 'esri/geometry/webMercatorUtils', - 'esri/geometry/geodesicUtils', - 'dojo/_base/lang', - 'dojo/on', - 'dojo/_base/html', - 'dojo/sniff', - 'dojo/_base/Color', - 'dojo/_base/array', - 'dojo/dom-construct', - 'dojo/dom', - 'dijit/form/Select', - 'dijit/form/NumberSpinner', - 'jimu/dijit/ViewStack', - 'jimu/dijit/SymbolChooser', - 'jimu/dijit/DrawBox', - 'jimu/dijit/Message', - 'jimu/utils', - 'jimu/symbolUtils', - 'libs/storejs/store', - 'esri/InfoTemplate', - 'esri/layers/GraphicsLayer' - ], - function(declare, _WidgetsInTemplateMixin, BaseWidget, Graphic, SimpleMarkerSymbol, Polyline, SimpleLineSymbol, Polygon, graphicsUtils, SimpleFillSymbol, - TextSymbol, Font, esriUnits, Edit, webMercatorUtils, geodesicUtils, lang, on, html, has, - Color, array, domConstruct, dom, Select, NumberSpinner, ViewStack, SymbolChooser, - DrawBox, Message, jimuUtils, jimuSymbolUtils, localStore, InfoTemplate, GraphicsLayer) { - - /*jshint unused: false*/ - return declare([BaseWidget, _WidgetsInTemplateMixin], { - name: 'eDraw', - baseClass: 'jimu-widget-edraw', - - - //////////////////////////////////////////// GENERAL METHODS ////////////////////////////////////////////////// - /** - * Set widget mode :add1 (type choice), add2 (symbology and attributes choice), edit, list, importExport - * @param name string Mode - * - add1 : Add drawing (type choice and measure option) - * - add2 : Add drawing (attributes and symbol chooser) - * - edit : Edit drawing (geometry, attributes and symbol chooser) - * - list : List drawings - * - importExport : - */ - setMode: function(name) { - this.editorEnableMapPreview(false); - this.editorActivateGeometryEdit(false); - this.allowPopup(false); - - switch (name) { - case 'add1': - this.setMenuState('add'); - - this._editorConfig["graphicCurrent"] = false; - - - this.TabViewStack.switchView(this.addSection); - - this.drawBox.deactivate(); - - this.setInfoWindow(false); - this.allowPopup(false); - - break; - case 'add2': - this.setMenuState('add', ['add']); - - this._editorConfig["graphicCurrent"] = false; - - this.editorPrepareForAdd(this._editorConfig["defaultSymbols"][this._editorConfig['commontype']]); - - this.TabViewStack.switchView(this.editorSection); - - this.setInfoWindow(false); - - break; - case 'edit': - this.setMenuState('edit', ['edit']); - if (this._editorConfig["graphicCurrent"]) { - //prepare editor - this.editorPrepareForEdit(this._editorConfig["graphicCurrent"]); - - //Focus - var extent = graphicsUtils.graphicsExtent([this._editorConfig["graphicCurrent"]]); - this.map.setExtent(extent.expand(2), true); - } - - this.TabViewStack.switchView(this.editorSection); - - this.setInfoWindow(false); - - break; - case 'list': - this.setMenuState('list'); - this.allowPopup(true); - - //Generate list and - this.listGenerateDrawTable(); - var nb_draws = this.drawBox.drawLayer.graphics.length; - var display = (nb_draws > 0) ? 'block' : 'none'; - html.setStyle(this.allActionsNode, 'display', display); - this.tableTH.innerHTML = nb_draws + ' ' + this.nls.draws; - - //Other params - this._editorConfig["graphicCurrent"] = false; - - this.TabViewStack.switchView(this.listSection); - - break; - case 'importExport': - this.setMenuState('importExport'); - this.allowPopup(true); - - - //Other params - this._editorConfig["graphicCurrent"] = false; - - this.TabViewStack.switchView(this.importExportSection); - - this.setInfoWindow(false); - - break; - } - }, - - showMessage: function(msg, type) { - - var class_icon = "message-info-icon"; - switch (type) { - case "error": - class_icon = "message-error-icon"; - break; - case "warning": - class_icon = "message-warning-icon"; - break; - } - - var content = ' ' + msg; - - new Message({ - message: content - }); - }, - - setMenuState: function(active, elements_shown) { - if (!elements_shown) { - elements_shown = ['add', 'list', 'importExport']; - } else if (elements_shown.indexOf(active) < 0) - elements_shown.push(active); - - for (var button_name in this._menuButtons) { - var menu_class = (button_name == active) ? 'menu-item-active' : 'menu-item'; - if (elements_shown.indexOf(button_name) < 0 || (button_name == "importExport" && !this.config.allowImportExport)) - menu_class = "hidden"; - if (this._menuButtons[button_name]) - this._menuButtons[button_name].className = menu_class; - } - }, - - setInfoWindow: function(graphic) { - if (!this.map.infoWindow) - return false; - - if (!graphic) { - this.map.infoWindow.hide(); - return true; - } - - if (graphic.geometry.x) - var center = graphic.geometry; - else if (graphic.geometry.getCenter) - var center = graphic.geometry.getCenter(); - else if (graphic.geometry.getExtent) - var center = graphic.geometry.getExtent().getCenter(); - else - return false; - - this.map.infoWindow.setFeatures([graphic]); - this.map.infoWindow.show(center); - - }, - - _clickHandler: false, - allowPopup: function(bool) { - this.map.setInfoWindowOnClick(bool); - - if (!bool && this._clickHandler) { - dojo.disconnect(this._clickHandler); - } else { - this._clickHandler = this.drawBox.drawLayer.on("click", this._onDrawClick); - } - }, - - saveInLocalStorage: function() { - if (!this.config.allowLocalStorage) - return; - - localStore.set(this._localStorageKey, this.drawingsGetJson()); - }, - - zoomAll: function() { - var graphics = this.drawBox.drawLayer.graphics; - var nb_graphics = graphics.length; - - if (nb_graphics < 1) - return; - - var ext = graphicsUtils.graphicsExtent(this.drawBox.drawLayer.graphics); - - this.map.setExtent(ext, true); - return true; - }, - - clear: function() { - if (!this.config.confirmOnDelete || confirm(this.nls.clear)) { - this.drawBox.drawLayer.clear(); - this.setInfoWindow(false); - this.setMode("list"); - } - }, - - drawingsGetJson: function(asString) { - if (this.drawBox.drawLayer.graphics.length < 1) - return (asString) ? '' : false; - - var content = { - "features": [], - "displayFieldName": "", - "fieldAliases": {}, - "spatialReference": this.map.spatialReference.toJson(), - "fields": [] - }; - - for (var i in this.drawBox.drawLayer.graphics) - content["features"].push(this.drawBox.drawLayer.graphics[i].toJson()); - - if (asString) { - content = JSON.stringify(content); - } - return content; - }, - - - ///////////////////////// MENU METHODS /////////////////////////////////////////////////////////// - menuOnClickAdd: function() { - this.setMode("add1"); - }, - menuOnClickList: function() { - this.setMode("list"); - }, - menuOnClickImportExport: function() { - this.setMode("importExport"); - }, - - onHideCheckboxClick: function() { - var display = (this.hideCheckbox.checked) ? 'none' : 'block'; - - this.drawBox.drawLayer.setVisibility(!this.hideCheckbox.checked); - this.menu.style.display = display; - this.settingAllContent.style.display = display; - - if (this.hideCheckbox.checked) - this.onClose(); - else - this.onOpen(); - }, - - ///////////////////////// LIST METHODS /////////////////////////////////////////////////////////// - listGenerateDrawTable: function() { - //Generate draw features table - var graphics = this.drawBox.drawLayer.graphics; - var nb_graphics = graphics.length; - - //Table - this.drawsTableBody.innerHTML = ""; - - for (var i = nb_graphics - 1; i >= 0; i--) { - var graphic = graphics[i]; - var num = i + 1; - var symbol = graphic.symbol; - - var selected = (this._editorConfig["graphicCurrent"] && this._editorConfig["graphicCurrent"] == graphic); - - if (symbol.type == "textsymbol") { - var json = symbol.toJson(); - var txt = (json.text.length > 4) ? json.text.substr(0, 4) + "..." : json.text - var font = (json.font.size < 14) ? 'font-size:' + json.font.size + 'px;' : 'font-size:14px; font-weight:bold;'; - var color = (json.color.length == 4) ? 'rgba(' + json.color.join(",") + ')' : 'rgba(' + json.color.join(",") + ')'; - var symbolHtml = '' + txt + ''; - } else { - var symbolNode = jimuSymbolUtils.createSymbolNode(symbol, { - width: 50, - height: 50 - }); - var symbolHtml = symbolNode.innerHTML; - } - var name = (graphic.attributes && graphic.attributes['name']) ? graphic.attributes['name'] : ''; - name = (name.length > 8) ? '' + name.substr(0, 8) + "..." : name; - - var html = '' + name + '' + '' + symbolHtml + '' + '' + ' ' + ' ' + '  ' + ' ' + ' ' + '  ' + ' ' + ''; - - var tr = domConstruct.create( - "tr", { - id: 'draw-tr--' + i, - innerHTML: html, - className: (selected) ? 'selected' : '' - }, - this.drawsTableBody - ); - - //Bind actions - on(dom.byId('draw-action-edit--' + i), "click", this.listOnActionClick); - on(dom.byId('draw-action-up--' + i), "click", this.listOnActionClick); - on(dom.byId('draw-action-down--' + i), "click", this.listOnActionClick); - on(dom.byId('draw-action-delete--' + i), "click", this.listOnActionClick); - on(dom.byId('draw-action-zoom--' + i), "click", this.listOnActionClick); - } - this.saveInLocalStorage(); - }, - - switch2DrawingGraphics: function(i1, i2) { - var g1 = this.drawBox.drawLayer.graphics[i1]; - var g2 = this.drawBox.drawLayer.graphics[i2]; - - if (!g1 || !g2) - return false; - - //Switch graphics - this.drawBox.drawLayer.graphics[i1] = g2; - this.drawBox.drawLayer.graphics[i2] = g1; - - //Redraw in good order - var nb = this.drawBox.drawLayer.graphics.length; - for (var i = 0; i < nb; i++) { - var g = this.drawBox.drawLayer.graphics[i]; - - if (i >= i1 || i >= i2) { - var shape = g.getShape(); - if (shape) shape.moveToFront(); - } - } - return true; - }, - - listOnActionClick: function(evt) { - if (!evt.target || !evt.target.id) - return; - - var tab = evt.target.id.split('--'); - var type = tab[0]; - var i = parseInt(tab[1]); - - var g = this.drawBox.drawLayer.graphics[i]; - this._editorConfig["graphicCurrent"] = g; - - switch (type) { - case 'draw-action-up': - this.switch2DrawingGraphics(i, i + 1); - this.listGenerateDrawTable(); - break; - case 'draw-action-down': - this.switch2DrawingGraphics(i, i - 1); - this.listGenerateDrawTable(); - break; - case 'draw-action-delete': - if (!this.config.confirmOnDelete || confirm(this.nls.confirmDrawDelete + ".")) { - g.getLayer().remove(g); - this._editorConfig["graphicCurrent"] = false; - this.listGenerateDrawTable(); - } - break; - case 'draw-action-edit': - this.setMode("edit"); - break; - case 'draw-action-zoom': - this.setInfoWindow(g); - - var extent = graphicsUtils.graphicsExtent([g]); - this.map.setExtent(extent, true); - this.listGenerateDrawTable(); - - break; - } - }, - - - ///////////////////////// SYMBOL EDITOR METHODS /////////////////////////////////////////////////////////// - _editorConfig: { - drawPlus: { - "FontFamily": false, - "bold": false, - "italic": false, - "underline": false, - "angle": false, - "placement": { - "vertical": "middle", - "horizontal": "center" - } - }, - phantom: { - "point": false, - "symbol": false, - "layer": false, - "handle": false - } - }, - - editorPrepareForAdd: function(symbol) { - this.editorSymbolChooserConfigure(symbol); - - this.nameField.value = this.nls.nameFieldDefaultValue; - this.descriptionField.value = ''; - - this.editorTitle.innerHTML = this.nls.addDrawTitle; - this.editorFooterEdit.style.display = 'none'; - this.editorFooterAdd.style.display = 'block'; - this.editorAddMessage.style.display = 'block'; - this.editorEditMessage.style.display = 'none'; - this.editorSnappingMessage.style.display = 'none'; - - var commontype = this._editorConfig['commontype']; - - //Mouse preview - this._editorConfig["phantom"]["symbol"] = symbol; - this.editorEnableMapPreview((commontype == 'point' || commontype == 'text')); - - //If text prepare symbol - if (commontype == "text") - this.editorUpdateTextPlus(); - - this.editorActivateSnapping(true); - }, - - editorPrepareForEdit: function(graphic) { - this.nameField.value = graphic.attributes["name"]; - this.descriptionField.value = graphic.attributes["description"]; - - this.editorActivateGeometryEdit(graphic); - - this.editorSymbolChooserConfigure(graphic.symbol); - - this.editorTitle.innerHTML = this.nls.editDrawTitle; - this.editorFooterEdit.style.display = 'block'; - this.editorFooterAdd.style.display = 'none'; - this.editorAddMessage.style.display = 'none'; - this.editorEditMessage.style.display = 'block'; - this.editorSnappingMessage.style.display = 'block'; - - this.editorEnableMapPreview(false); - this.editorActivateSnapping(true); - }, - - editorSymbolChooserConfigure: function(symbol) { - if (!symbol) - return; - - //Set this symbol in symbol chooser - this.editorSymbolChooser.showBySymbol(symbol); - - var type = symbol.type; - //Draw plus and specific comportment when text symbol. - if (type == "textsymbol") { - //Force editorSymbolChooser _init to walk around jimu.js bug (initTextSection doesn't pass symbol to _initTextSettings) - this.editorSymbolChooser._initTextSettings(symbol); - - //show draw plus - this.editorSymbolTextPlusNode.style.display = 'block'; - - //Hide text label input (use name instead of) - var tr = this._UTIL__getParentByTag(this.editorSymbolChooser.inputText, 'tr'); - if (tr) - tr.style.display = 'none'; - - //Draw plus configuration - this._editorConfig["drawPlus"]["bold"] = (symbol.font.weight == esri.symbol.Font.WEIGHT_BOLD); - this._editorConfig["drawPlus"]["italic"] = (symbol.font.style == esri.symbol.Font.STYLE_ITALIC); - this._editorConfig["drawPlus"]["underline"] = (symbol.font.decoration == 'underline'); - this._editorConfig["drawPlus"]["placement"]["horizontal"] = symbol.horizontalAlignment; - this._editorConfig["drawPlus"]["placement"]["vertical"] = symbol.verticalAlignment; - this.editorTextPlusFontFamilyNode.set("value", symbol.font.family); - this.editorTextPlusAngleNode.set("value", symbol.angle); - this._UTIL__enableClass(this.editorTextPlusBoldNode, 'selected', this._editorConfig["drawPlus"]["bold"]); - this._UTIL__enableClass(this.editorTextPlusItalicNode, 'selected', this._editorConfig["drawPlus"]["italic"]); - this._UTIL__enableClass(this.editorTextPlusUnderlineNode, 'selected', this._editorConfig["drawPlus"]["underline"]); - for (var i in this._editorTextPlusPlacements) { - var title_tab = this._editorTextPlusPlacements[i].title.split(" "); - var selected = (title_tab[0] == symbol.verticalAlignment && title_tab[1] == symbol.horizontalAlignment); - this._UTIL__enableClass(this._editorTextPlusPlacements[i], 'selected', selected); - } - } else { - //Hide draw plus - this.editorSymbolTextPlusNode.style.display = 'none'; - } - }, - - editorActivateSnapping: function(bool) { - //If disable - if (!bool) { - this.map.disableSnapping(); - return; - } - - //If enable - this.map.enableSnapping({ - "layerInfos": [{ - "layer": this.drawBox.drawLayer - }], - "tolerance": 20 - }); - }, - - - editorUpdateTextPlus: function() { - //Only if text - if (this.editorSymbolChooser.type != "text") { - return; - } - - //Get parameters - var text = this.nameField.value; - var family = this.editorTextPlusFontFamilyNode.value; - var angle = this.editorTextPlusAngleNode.value; - var weight = this._editorConfig["drawPlus"]["bold"] ? esri.symbol.Font.WEIGHT_BOLD : esri.symbol.Font.WEIGHT_NORMAL; - var style = this._editorConfig["drawPlus"]["italic"] ? esri.symbol.Font.STYLE_ITALIC : esri.symbol.Font.STYLE_NORMAL; - var decoration = this._editorConfig["drawPlus"]["underline"] ? 'underline' : 'none'; - var horizontal = this._editorConfig["drawPlus"]["placement"]["horizontal"]; - var vertical = this._editorConfig["drawPlus"]["placement"]["vertical"]; - - //Prepare symbol - var symbol = this.editorSymbolChooser.getSymbol(); - this.editorSymbolChooser.inputText.value = text; - symbol.text = text; - symbol.font.setFamily(family); - symbol.setAngle(angle); - symbol.setHorizontalAlignment(horizontal); - symbol.setVerticalAlignment(vertical); - symbol.font.setWeight(weight); - symbol.font.setStyle(style); - symbol.font.setDecoration(decoration); - - //Set in symbol chooser - this.editorSymbolChooser.inputText.value = text; - this.editorSymbolChooser.showBySymbol(symbol); - - //Update in drawBox - this.drawBox.setTextSymbol(symbol); - - //Update preview - this.editorSymbolChooser.textPreview.innerHTML = text; - this.editorSymbolChooser.textPreview.style.fontFamily = family; - this.editorSymbolChooser.textPreview.style['font-style'] = (this._editorConfig["drawPlus"]["italic"]) ? 'italic' : 'normal'; - this.editorSymbolChooser.textPreview.style['font-weight'] = (this._editorConfig["drawPlus"]["bold"]) ? 'bold' : 'normal'; - this.editorSymbolChooser.textPreview.style['text-decoration'] = (this._editorConfig["drawPlus"]["underline"]) ? 'underline' : 'none'; - - //Update angle preview - this.editorTextAnglePreviewNode.style.transform = 'rotate(' + angle + 'deg)'; - this.editorTextAnglePreviewNode.style['-ms-transform'] = 'rotate(' + angle + 'deg)'; - - //Update symbol on map if on modification - if (this._editorConfig["graphicCurrent"]) - this._editorConfig["graphicCurrent"].setSymbol(symbol); - else { - //Update phantom symbol - this.editorUpdateMapPreview(symbol); - } - }, - - editorSetDefaultSymbols: function() { - var symbol = this.editorSymbolChooser.getSymbol(); - switch (symbol.type.toLowerCase()) { - case "simplemarkersymbol": - this.drawBox.setPointSymbol(symbol); - break; - case "picturemarkersymbol": - this.drawBox.setPointSymbol(symbol); - break; - case "textsymbol": - this.drawBox.setPointSymbol(symbol); - break; - case "simplelinesymbol": - this.drawBox.setLineSymbol(symbol); - break; - case "cartographiclinesymbol": - this.drawBox.setLineSymbol(symbol); - break; - case "simplefillsymbol": - this.drawBox.setPolygonSymbol(symbol); - break; - case "picturefillsymbol": - this.drawBox.setPolygonSymbol(symbol); - break; - } - }, - - - ///////////////////////// IMPORT/EXPORT METHODS /////////////////////////////////////////////////////////// - importFile: function() { - if (!window.FileReader) { - this.showMessage(this.nls.importErrorMessageNavigator, 'error'); - return false; - } - - var input = this.importFileInput.files[0]; - - if (!input) { - this.showMessage(this.nls.importErrorWarningSelectFile, 'warning'); - return false; - } - var reader = new FileReader(); - reader.onload = this.importOnFileLoad; - var txt = reader.readAsText(input); - }, - - importJsonContent: function(json, nameField, descriptionField) { - try { - if (typeof json == 'string') { - json = JSON.parse(json); - } - - if (!json.features) { - this.showMessage(this.nls.importErrorFileStructure, 'error'); - return false; - } - - if (json.features.length < 1) { - this.showMessage(this.nls.importWarningNoDrawings, 'warning'); - return false; - } - - if (!nameField) { - var g = json.features[0]; - var fields_possible = ["name", "title", "label"]; - if (g.attributes) { - for (var i in fields_possible) { - if (g.attributes[fields_possible[i]]) { - nameField = fields_possible[i]; - break; - } - } - } - } - - for (var i in json.features) { - var json_feat = json.features[i]; - - var g = new Graphic(json_feat); - - if (!g) - continue; - - if (!g.attributes) - g.attributes = {}; - - g.attributes["name"] = (!nameField || !g.attributes[nameField]) ? 'n°' + (i + 1) : g.attributes[nameField]; - if (g.symbol && g.symbol.type == "textsymbol") - g.attributes["name"] = g.symbol.text; - g.attributes["description"] = (!descriptionField || !g.attributes[descriptionField]) ? '' : g.attributes[descriptionField]; - - if (g.symbol) { - this.drawBox.drawLayer.add(g); - } else { - var symbol = false; - switch (g.geometry.type) { - case 'point': - var symbol = new SimpleMarkerSymbol(); - break; - case 'polyline': - var symbol = new SimpleLineSymbol(); - break; - case 'polygon': - var symbol = new SimpleFillSymbol(); - break; - } - if (symbol) { - g.setSymbol(symbol); - this.drawBox.drawLayer.add(g); - } - } - } - - this.setMode("list"); - } catch (e) { - this.showMessage(this.nls.importErrorFileStructure, 'error'); - return false; - } - }, - - importOnFileLoad: function(evt) { - var content = evt.target.result; - this.importJsonContent(content); - this.importFileInput.files[0] = ""; - }, - - exportFile: function() { - // Be sure the link will not open if not asked : - this.exportButton.href = "#"; - this.exportButton.target = "_self"; - - // Control if there are drawings - if (this.drawBox.drawLayer.graphics.length < 1) { - this.showMessage(this.nls.importWarningNoExport0Draw, 'warning'); - return false; - } - - var export_name = (this.config.exportFileName) ? (this.config.exportFileName) : 'myDrawings.json'; - - // Case IE with blob support (IE >= 10) : use MS save blob - if (window.navigator && window.navigator.msSaveOrOpenBlob) { - var fileData = [this.drawingsGetJson(true)]; - blobObject = new Blob(fileData, { - type: 'application/octet-stream' - }); - window.navigator.msSaveOrOpenBlob(blobObject, export_name); - return false; - } - - // Case IE without blob support : write in tab. Doesn't allways work.... - if (has("ie")) { - var exportWin = window.top.open("about:blank", "_blank"); - exportWin.document.write(this.drawingsGetJson(true)); - exportWin.document.close(); - exportWin.focus(); - exportWin.document.execCommand('SaveAs', true, export_name); - exportWin.close(); - return false; - } - - // Case HTML5 (Firefox > 25, Chrome > 30....) : use data link with download attribute - this.exportButton.href = 'data:application/octet-stream;charset=utf-8,' + this.drawingsGetJson(true); - this.exportButton.target = "_blank"; - this.exportButton.download = export_name; - return true; - }, - - - ///////////////////////// EDIT METHODS /////////////////////////////////////////////////////////// - editorOnClickEditSaveButon: function() { - if (this.editorSymbolChooser.type == "text") { - this.editorUpdateTextPlus(); - } - - this._editorConfig["graphicCurrent"].attributes["name"] = this.nameField.value; - this._editorConfig["graphicCurrent"].attributes["description"] = this.descriptionField.value; - - this.setMode("list"); - }, - editorOnClickEditCancelButon: function() { - this.editorResetGraphic(); - this.editorActivateGeometryEdit(false); - this.setMode("list"); - }, - editorOnClickResetCancelButon: function() { - this.editorResetGraphic(); - this.setMode("edit"); - }, - - editorResetGraphic: function() { - if (this._editorConfig["graphicSaved"] && this._editorConfig["graphicCurrent"]) { - var g = new Graphic(this._editorConfig["graphicSaved"]); - this._editorConfig["graphicCurrent"].setGeometry(g.geometry); - this._editorConfig["graphicCurrent"].setSymbol(g.symbol); - } - }, - - editorActivateGeometryEdit: function(graphic) { - if (!graphic) - this.editorActivateSnapping(false); - - if (!graphic && this._editorConfig["editToolbar"]) { - this._editorConfig["editToolbar"].deactivate(); - return; - } - - this._editorConfig["graphicSaved"] = graphic.toJson(); - - var tool = 0 | Edit.MOVE; - if (graphic.geometry.type != "point") - tool = tool | Edit.EDIT_VERTICES | Edit.SCALE | Edit.ROTATE; - - var options = { - allowAddVertices: true, - allowDeleteVertices: true, - uniformScaling: true - }; - this._editorConfig["editToolbar"].activate(tool, graphic, options); - }, - - - ///////////////////////// ADD METHODS /////////////////////////////////////////////////////////// - drawBoxOnTypeSelected: function(target, geotype, commontype) { - if (!this._editorConfig["defaultSymbols"]) - this._editorConfig["defaultSymbols"] = {}; - this._editorConfig['commontype'] = commontype; - - var symbol = this._editorConfig["defaultSymbols"][commontype]; - if (!symbol) { - switch (commontype) { - case "point": - symbol = new SimpleMarkerSymbol(); - break; - case "polyline": - symbol = new SimpleLineSymbol(); - break; - case "polygon": - symbol = new SimpleFillSymbol(); - break; - case "text": - symbol = new TextSymbol({ - "verticalAlignment": "middle", - "horizontalAlignment": "center" - }); - break; - } - } - - if (symbol) { - this._editorConfig["defaultSymbols"][commontype] = symbol; - this.setMode('add2'); - } - }, - - drawBoxOnDrawEnd: function(graphic, geotype, commontype) { - var geometry = graphic.geometry; - - this.editorEnableMapPreview(false); - - graphic.attributes = { - "name": this.nameField.value, - "description": this.descriptionField.value - } - - if (geometry.type === 'extent') { - var a = geometry; - var polygon = new Polygon(a.spatialReference); - var r = [ - [a.xmin, a.ymin], - [a.xmin, a.ymax], - [a.xmax, a.ymax], - [a.xmax, a.ymin], - [a.xmin, a.ymin] - ]; - polygon.addRing(r); - geometry = polygon; - - graphic.setGeometry(polygon); - var layer = graphic.getLayer(); - layer.remove(graphic); - layer.add(graphic); - - commontype = 'polygon'; - } - if (commontype === 'polyline') { - if (this.showMeasure.checked) { - this._addLineMeasure(geometry); - } - } else if (commontype === 'polygon') { - if (this.showMeasure.checked) { - this._addPolygonMeasure(geometry); - } - } else if (commontype == 'text' && this.editorSymbolChooser.inputText.value.trim() == "") { - //Message - this.showMessage(this.nls.textWarningMessage, 'warning'); - - //Remove empty feature (text symbol without text) - graphic.getLayer().remove(graphic); - } - - this.saveInLocalStorage(); - this._editorConfig["graphicCurrent"] = graphic; - this._editorConfig["defaultSymbols"][this._editorConfig['commontype']] = graphic.symbol; - this.setMode("list"); - }, - - editorEnableMapPreview: function(bool) { - //if deactivate - if (!bool) { - //Hide point - if (this._editorConfig["phantom"]["point"]) - this._editorConfig["phantom"]["point"].hide(); - - this._editorConfig["phantom"]["symbol"] = false; - - //Remove map handlers - if (this._editorConfig["phantom"]["handle"]) { - dojo.disconnect(this._editorConfig["phantom"]["handle"]); - this._editorConfig["phantom"]["handle"] = false; - } - return; - } - - //Create layer if doesn't exist - if (!this._editorConfig["phantom"]["layer"]) { - this._editorConfig["phantom"]["layer"] = new GraphicsLayer({ - id: this.id + "__phantomLayer" - }); - // this._editorConfig["phantom"]["point"] - var center = this.map.extent.getCenter(); - this._editorConfig["phantom"]["point"] = new Graphic(center, this._editorConfig["phantom"]["symbol"], {}); - this._editorConfig["phantom"]["layer"].add(this._editorConfig["phantom"]["point"]); - this._editorConfig["phantom"]["point"].hide(); - - this.map.addLayer(this._editorConfig["phantom"]["layer"]); - } else { - this._editorConfig["phantom"]["point"].setSymbol(this._editorConfig["phantom"]["symbol"]); - } - - //Track mouse on map - if (!this._editorConfig["phantom"]["handle"]) { - this._editorConfig["phantom"]["handle"] = on(this.map, 'mouse-move, mouse-out, mouse-over', lang.hitch(this, function(evt) { - if (this.state === 'opened') { - switch (evt.type) { - case 'mousemove': - if (this._editorConfig["phantom"]["point"]) { - this._editorConfig["phantom"]["point"].setGeometry(evt.mapPoint); - this._editorConfig["phantom"]["point"].show(); - } - break; - case 'mouseout': - if (this._editorConfig["phantom"]["point"]) { - this._editorConfig["phantom"]["point"].hide(); - } - break; - case 'mouseover': - if (this._editorConfig["phantom"]["point"]) { - this._editorConfig["phantom"]["point"].setGeometry(evt.mapPoint); - this._editorConfig["phantom"]["point"].show(); - } - break; - } - } - })); - } - - }, - - editorUpdateMapPreview: function(symbol) { - if (this.editorSymbolChooser.type != "text" && this.editorSymbolChooser.type != "marker") { - return; - } - - if (this._editorConfig["phantom"]["handle"] && this._editorConfig["phantom"]["point"]) { - this._editorConfig["phantom"]["symbol"] = symbol; - this._editorConfig["phantom"]["point"].setSymbol(symbol); - } - - }, - - editorOnClickAddCancelButon: function() { - this.setMode("add1"); - }, - - - ////////////////////////////////////// Measure methods ////////////////////////////////////////////// - _resetUnitsArrays: function() { - this.defaultDistanceUnits = []; - this.defaultAreaUnits = []; - this.configDistanceUnits = []; - this.configAreaUnits = []; - this.distanceUnits = []; - this.areaUnits = []; - }, - - _getDefaultDistanceUnitInfo: function(unit) { - for (var i = 0; i < this.defaultDistanceUnits.length; i++) { - var unitInfo = this.defaultDistanceUnits[i]; - if (unitInfo.unit === unit) { - return unitInfo; - } - } - return null; - }, - - _getDefaultAreaUnitInfo: function(unit) { - for (var i = 0; i < this.defaultAreaUnits.length; i++) { - var unitInfo = this.defaultAreaUnits[i]; - if (unitInfo.unit === unit) { - return unitInfo; - } - } - return null; - }, - - _getDistanceUnitInfo: function(unit) { - for (var i = 0; i < this.distanceUnits.length; i++) { - var unitInfo = this.distanceUnits[i]; - if (unitInfo.unit === unit) { - return unitInfo; - } - } - return null; - }, - - _getAreaUnitInfo: function(unit) { - for (var i = 0; i < this.areaUnits.length; i++) { - var unitInfo = this.areaUnits[i]; - if (unitInfo.unit === unit) { - return unitInfo; - } - } - return null; - }, - - _setMeasureVisibility: function() { - var display = (this.showMeasure.checked) ? 'block' : 'none'; - html.setStyle(this.areaMeasure, 'display', display); - html.setStyle(this.distanceMeasure, 'display', display); - }, - - _addLineMeasure: function(geometry) { - var a = Font.STYLE_ITALIC; - var b = Font.VARIANT_NORMAL; - var c = Font.WEIGHT_BOLD; - var symbolFont = new Font("16px", a, b, c, "Courier"); - var fontColor = new Color([0, 0, 0, 1]); - var ext = geometry.getExtent(); - var center = ext.getCenter(); - var geoLine = webMercatorUtils.webMercatorToGeographic(geometry); - var unit = this.distanceUnitSelect.value; - var lengths = geodesicUtils.geodesicLengths([geoLine], esriUnits[unit]); - var abbr = this._getDistanceUnitInfo(unit).label; - var localeLength = jimuUtils.localizeNumber(lengths[0].toFixed(1)); - var length = localeLength + " " + abbr; - var textSymbol = new TextSymbol(length, symbolFont, fontColor); - var labelGraphic = new Graphic(center, textSymbol, { - "name": textSymbol.text, - "description": "" - }, null); - this.drawBox.drawLayer.add(labelGraphic); - }, - - _addPolygonMeasure: function(geometry) { - var a = Font.STYLE_ITALIC; - var b = Font.VARIANT_NORMAL; - var c = Font.WEIGHT_BOLD; - var symbolFont = new Font("16px", a, b, c, "Courier"); - var fontColor = new Color([0, 0, 0, 1]); - var ext = geometry.getExtent(); - var center = ext.getCenter(); - var geoPolygon = webMercatorUtils.webMercatorToGeographic(geometry); - var areaUnit = this.areaUnitSelect.value; - var areaAbbr = this._getAreaUnitInfo(areaUnit).label; - var areas = geodesicUtils.geodesicAreas([geoPolygon], esriUnits[areaUnit]); - var localeArea = jimuUtils.localizeNumber(areas[0].toFixed(1)); - var area = localeArea + " " + areaAbbr; - - var polyline = new Polyline(geometry.spatialReference); - var points = geometry.rings[0]; - points = points.slice(0, points.length - 1); - polyline.addPath(points); - var geoPolyline = webMercatorUtils.webMercatorToGeographic(polyline); - var lengthUnit = this.distanceUnitSelect.value; - var lengthAbbr = this._getDistanceUnitInfo(lengthUnit).label; - var lengths = geodesicUtils.geodesicLengths([geoPolyline], esriUnits[lengthUnit]); - var localeLength = jimuUtils.localizeNumber(lengths[0].toFixed(1)); - var length = localeLength + " " + lengthAbbr; - var text = area + " " + length; - - var textSymbol = new TextSymbol(text, symbolFont, fontColor); - var labelGraphic = new Graphic(center, textSymbol, { - "name": textSymbol.text, - "description": "" - }, null); - this.drawBox.drawLayer.add(labelGraphic); - }, - - //////// INIT METHODS //////////////////////////////////////////////////////////////////////////////////////////////////////// - _bindEvents: function() { - //bind DrawBox - this.own(on(this.drawBox, 'IconSelected', lang.hitch(this, this.drawBoxOnTypeSelected))); - this.own(on(this.drawBox, 'DrawEnd', lang.hitch(this, this.drawBoxOnDrawEnd))); - - //Bind symbol chooser change - this.own(on(this.editorSymbolChooser, 'change', lang.hitch(this, function() { - this.editorSetDefaultSymbols(); - - //If text plus - if (this.editorSymbolChooser.type == "text") { - this.editorUpdateTextPlus(); - } else if (this._editorConfig["graphicCurrent"]) { - //If in modification, update graphic symbology - this._editorConfig["graphicCurrent"].setSymbol(this.editorSymbolChooser.getSymbol()); - } - - //Phantom for marker - if (this.editorSymbolChooser.type == "marker") - this.editorUpdateMapPreview(this.editorSymbolChooser.getSymbol()); - - }))); - - //bind unit events - this.own(on(this.showMeasure, 'click', lang.hitch(this, this._setMeasureVisibility))); - - //hitch list event - this.listOnActionClick = lang.hitch(this, this.listOnActionClick); - //hitch import file loading - this.importOnFileLoad = lang.hitch(this, this.importOnFileLoad); - - //Bind draw plus event - this.editorUpdateTextPlus = lang.hitch(this, this.editorUpdateTextPlus); - this.editorTextPlusFontFamilyNode.on("change", this.editorUpdateTextPlus); - this.editorTextPlusAngleNode.on("change", this.editorUpdateTextPlus); - on(this.editorTextPlusBoldNode, "click", lang.hitch(this, function(evt) { - this._editorConfig["drawPlus"]["bold"] = !this._editorConfig["drawPlus"]["bold"]; - this._UTIL__enableClass(this.editorTextPlusBoldNode, 'selected', this._editorConfig["drawPlus"]["bold"]); - this.editorUpdateTextPlus(); - })); - on(this.editorTextPlusItalicNode, "click", lang.hitch(this, function(evt) { - this._editorConfig["drawPlus"]["italic"] = !this._editorConfig["drawPlus"]["italic"]; - this._UTIL__enableClass(this.editorTextPlusItalicNode, 'selected', this._editorConfig["drawPlus"]["italic"]); - this.editorUpdateTextPlus(); - })); - on(this.editorTextPlusUnderlineNode, "click", lang.hitch(this, function(evt) { - this._editorConfig["drawPlus"]["underline"] = !this._editorConfig["drawPlus"]["underline"]; - this._UTIL__enableClass(this.editorTextPlusUnderlineNode, 'selected', this._editorConfig["drawPlus"]["underline"]); - this.editorUpdateTextPlus(); - })); - this.onEditorTextPlusPlacementClick = lang.hitch(this, function(evt) { - if (!evt.target) - return; - - var selected = false; - for (var i in this._editorTextPlusPlacements) { - var is_this = (evt.target == this._editorTextPlusPlacements[i]); - - this._UTIL__enableClass(this._editorTextPlusPlacements[i], 'selected', is_this); - - if (is_this) - selected = this._editorTextPlusPlacements[i]; - } - if (!selected.title) - return; - var tab = selected.title.split(" "); - this._editorConfig["drawPlus"]["placement"] = { - "vertical": tab[0], - "horizontal": tab[1] - } - this.editorUpdateTextPlus(); - }); - this._editorTextPlusPlacements = [ - this.editorTextPlusPlacementTopLeft, - this.editorTextPlusPlacementTopCenter, - this.editorTextPlusPlacementTopRight, - this.editorTextPlusPlacementMiddleLeft, - this.editorTextPlusPlacementMiddleCenter, - this.editorTextPlusPlacementMiddleRight, - this.editorTextPlusPlacementBottomLeft, - this.editorTextPlusPlacementBottomCenter, - this.editorTextPlusPlacementBottomRight - ]; - for (var i in this._editorTextPlusPlacements) - on(this._editorTextPlusPlacements[i], "click", this.onEditorTextPlusPlacementClick); - - }, - - _menuInit: function() { - this._menuButtons = { - "add": this.menuAddButton, - "edit": this.menuEditButton, - "list": this.menuListButton, - "importExport": this.menuListImportExport - }; - - var views = [this.addSection, this.editorSection, this.listSection]; - - if (this.config.allowImportExport) { - views.push(this.importExportSection); - } else { - this.menuListImportExport.style.display = 'none'; - } - - this.TabViewStack = new ViewStack({ - viewType: 'dom', - views: views - }); - html.place(this.TabViewStack.domNode, this.settingAllContent); - }, - - _initLocalStorage: function() { - if (!this.config.allowLocalStorage) - return; - - this._localStorageKey = - (this.config.localStorageKey) ? 'WebAppBuilder.2D.eDraw.' + this.config.localStorageKey : 'WebAppBuilder.2D.eDraw'; - - var content = localStore.get(this._localStorageKey); - - if (!content || !content.features || content.features.length < 1) - return; - - //Closure with timeout to be sure widget is ready - (function(widget) { - setTimeout( - function() { - widget.importJsonContent(content, "name", "description"); - widget.showMessage(widget.nls.localLoading); - }, 200); - })(this); - - }, - - _initDrawingPopupAndClick: function() { - //Set popup template - var infoTemplate = new esri.InfoTemplate("${name}", "${description}"); - this.drawBox.drawLayer.setInfoTemplate(infoTemplate); - - //Set draw click - this._onDrawClick = lang.hitch(this, function(evt) { - if (!evt.graphic) - return; - - this._editorConfig["graphicCurrent"] = evt.graphic; - this.setMode("list"); - }); - - //Allow click - this.allowPopup(true); - - }, - - _initUnitSelect: function() { - this._initDefaultUnits(); - this._initConfigUnits(); - var a = this.configDistanceUnits; - var b = this.defaultDistanceUnits; - this.distanceUnits = a.length > 0 ? a : b; - var c = this.configAreaUnits; - var d = this.defaultAreaUnits; - this.areaUnits = c.length > 0 ? c : d; - array.forEach(this.distanceUnits, lang.hitch(this, function(unitInfo) { - var option = { - value: unitInfo.unit, - label: unitInfo.label - }; - this.distanceUnitSelect.addOption(option); - })); - - array.forEach(this.areaUnits, lang.hitch(this, function(unitInfo) { - var option = { - value: unitInfo.unit, - label: unitInfo.label - }; - this.areaUnitSelect.addOption(option); - })); - }, - - _initDefaultUnits: function() { - this.defaultDistanceUnits = [{ - unit: 'KILOMETERS', - label: this.nls.kilometers - }, { - unit: 'MILES', - label: this.nls.miles - }, { - unit: 'METERS', - label: this.nls.meters - }, { - unit: 'NAUTICAL_MILES', - label: this.nls.nauticals - }, { - unit: 'FEET', - label: this.nls.feet - }, { - unit: 'YARDS', - label: this.nls.yards - }]; - - this.defaultAreaUnits = [{ - unit: 'SQUARE_KILOMETERS', - label: this.nls.squareKilometers - }, { - unit: 'SQUARE_MILES', - label: this.nls.squareMiles - }, { - unit: 'ACRES', - label: this.nls.acres - }, { - unit: 'HECTARES', - label: this.nls.hectares - }, { - unit: 'SQUARE_METERS', - label: this.nls.squareMeters - }, { - unit: 'SQUARE_FEET', - label: this.nls.squareFeet - }, { - unit: 'SQUARE_YARDS', - label: this.nls.squareYards - }]; - }, - - _initConfigUnits: function() { - array.forEach(this.config.distanceUnits, lang.hitch(this, function(unitInfo) { - var unit = unitInfo.unit; - if (esriUnits[unit]) { - var defaultUnitInfo = this._getDefaultDistanceUnitInfo(unit); - unitInfo.label = defaultUnitInfo.label; - this.configDistanceUnits.push(unitInfo); - } - })); - - array.forEach(this.config.areaUnits, lang.hitch(this, function(unitInfo) { - var unit = unitInfo.unit; - if (esriUnits[unit]) { - var defaultUnitInfo = this._getDefaultAreaUnitInfo(unit); - unitInfo.label = defaultUnitInfo.label; - this.configAreaUnits.push(unitInfo); - } - })); - }, - - //////////////////////////// WIDGET CORE METHODS /////////////////////////////////////////////////////////////////////////////////////// - - postMixInProperties: function() { - this.inherited(arguments); - this._resetUnitsArrays(); - }, - - postCreate: function() { - this.inherited(arguments); - - //Create symbol chooser - this.editorSymbolChooser = new SymbolChooser({ - "class": "full-width", - "type": "text", - "symbol": new SimpleMarkerSymbol() - }, - this.editorSymbolChooserDiv - ); - - this.drawBox.setMap(this.map); - - //Initialize menu - this._menuInit(); - - //Init measure units - this._initUnitSelect(); - - //Bind and hitch events - this._bindEvents(); - - //Prepare text plus - this._prepareTextPlus(); - - //load if drawings in localStorage - this._initLocalStorage(); - - //Popup or click init - this._initDrawingPopupAndClick(); - - //Create edit dijit - this._editorConfig["editToolbar"] = new Edit(this.map); - }, - - _prepareTextPlus: function() { - //Select central position in UI (text placement) - this._UTIL__enableClass(this._editorTextPlusPlacements[4], 'selected', true); - - //Manage availaible FontFamily - if (this.config.drawPlus && this.config.drawPlus.fontFamilies) { - if (this.config.drawPlus.fontFamilies.length > 0) { - this.editorTextPlusFontFamilyNode.set("options", this.config.drawPlus.fontFamilies).reset(); - } - } - - }, - - onOpen: function() { - if (this.drawBox.drawLayer.graphics.length > 0) - this.setMode("list"); - else - this.setMode("add1"); - }, - - onClose: function() { - this.editorResetGraphic(); - this.drawBox.deactivate(); - this.setInfoWindow(false); - this.editorEnableMapPreview(false); - this.editorActivateGeometryEdit(false); - this.map.infoWindow.hide(); - this.allowPopup(true); - }, - - destroy: function() { - if (this.drawBox) { - this.drawBox.destroy(); - this.drawBox = null; - } - if (this.editorSymbolChooser) { - this.editorSymbolChooser.destroy(); - this.editorSymbolChooser = null; - } - this.inherited(arguments); - }, - - ///////////////////////// UTILS METHODS //////////////////////////////////////////////////////////////////////////// - _UTIL__enableClass: function(elt, className, bool) { - if (elt.classList) { - if (bool) - elt.classList.add(className); - else - elt.classList.remove(className); - return; - } - elt.className = elt.className.replace(className, "").replace(" ", " ").trim(); - if (bool) - elt.className += className; - }, - - _UTIL__getParentByTag: function(el, tagName) { - tagName = tagName.toLowerCase(); - while (el && el.parentNode) { - el = el.parentNode; - if (el.tagName && el.tagName.toLowerCase() == tagName) { - return el; - } - } - return null; - } - - }); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - }); \ No newline at end of file + 'dojo/_base/declare', + 'dijit/_WidgetsInTemplateMixin', + 'jimu/BaseWidget', + 'esri/graphic', + 'esri/symbols/SimpleMarkerSymbol', + 'esri/geometry/Polyline', + 'esri/symbols/SimpleLineSymbol', + 'esri/geometry/Polygon', + 'esri/graphicsUtils', + 'esri/symbols/SimpleFillSymbol', + 'esri/symbols/TextSymbol', + 'esri/symbols/Font', + 'esri/units', + "esri/toolbars/edit", + 'esri/geometry/webMercatorUtils', + 'esri/geometry/geodesicUtils', + 'dojo/_base/lang', + 'dojo/on', + 'dojo/_base/html', + 'dojo/sniff', + 'dojo/_base/Color', + 'dojo/_base/array', + 'dojo/dom-construct', + 'dojo/dom', + 'dijit/form/Select', + 'dijit/form/NumberSpinner', + 'jimu/dijit/ViewStack', + 'jimu/dijit/SymbolChooser', + 'jimu/dijit/DrawBox', + 'jimu/dijit/Message', + 'jimu/utils', + 'jimu/symbolUtils', + 'libs/storejs/store', + 'esri/InfoTemplate', + 'esri/layers/GraphicsLayer' + ], + function (declare, _WidgetsInTemplateMixin, BaseWidget, Graphic, SimpleMarkerSymbol, Polyline, SimpleLineSymbol, Polygon, graphicsUtils, SimpleFillSymbol, + TextSymbol, Font, esriUnits, Edit, webMercatorUtils, geodesicUtils, lang, on, html, has, + Color, array, domConstruct, dom, Select, NumberSpinner, ViewStack, SymbolChooser, + DrawBox, Message, jimuUtils, jimuSymbolUtils, localStore, InfoTemplate, GraphicsLayer) { + + /*jshint unused: false*/ + return declare([BaseWidget, _WidgetsInTemplateMixin], { + name : 'eDraw', + baseClass : 'jimu-widget-edraw', + + //////////////////////////////////////////// GENERAL METHODS ////////////////////////////////////////////////// + /** + * Set widget mode :add1 (type choice), add2 (symbology and attributes choice), edit, list, importExport + * @param name string Mode + * - add1 : Add drawing (type choice and measure option) + * - add2 : Add drawing (attributes and symbol chooser) + * - edit : Edit drawing (geometry, attributes and symbol chooser) + * - list : List drawings + * - importExport : + */ + setMode : function (name) { + this.editorEnableMapPreview(false); + this.editorActivateGeometryEdit(false); + this.allowPopup(false); + + switch (name) { + case 'add1': + this.setMenuState('add'); + + this._editorConfig["graphicCurrent"] = false; + + this.TabViewStack.switchView(this.addSection); + + this.drawBox.deactivate(); + + this.setInfoWindow(false); + this.allowPopup(false); + + break; + case 'add2': + this.setMenuState('add', ['add']); + + this._editorConfig["graphicCurrent"] = false; + + this.editorPrepareForAdd(this._editorConfig["defaultSymbols"][this._editorConfig['commontype']]); + + this.TabViewStack.switchView(this.editorSection); + + this.setInfoWindow(false); + + break; + case 'edit': + this.setMenuState('edit', ['edit']); + if (this._editorConfig["graphicCurrent"]) { + //prepare editor + this.editorPrepareForEdit(this._editorConfig["graphicCurrent"]); + + //Focus + var extent = graphicsUtils.graphicsExtent([this._editorConfig["graphicCurrent"]]); + this.map.setExtent(extent.expand(2), true); + } + + this.TabViewStack.switchView(this.editorSection); + + this.setInfoWindow(false); + + break; + case 'list': + this.setMenuState('list'); + this.allowPopup(true); + + //Generate list and + this.listGenerateDrawTable(); + var nb_draws = this.drawBox.drawLayer.graphics.length; + var display = (nb_draws > 0) ? 'block' : 'none'; + html.setStyle(this.allActionsNode, 'display', display); + this.tableTH.innerHTML = nb_draws + ' ' + this.nls.draws; + + //Other params + this._editorConfig["graphicCurrent"] = false; + + this.TabViewStack.switchView(this.listSection); + + break; + case 'importExport': + this.setMenuState('importExport'); + this.allowPopup(true); + + //Other params + this._editorConfig["graphicCurrent"] = false; + + this.TabViewStack.switchView(this.importExportSection); + + this.setInfoWindow(false); + + break; + } + }, + + showMessage : function (msg, type) { + + var class_icon = "message-info-icon"; + switch (type) { + case "error": + class_icon = "message-error-icon"; + break; + case "warning": + class_icon = "message-warning-icon"; + break; + } + + var content = ' ' + msg; + + new Message({ + message : content + }); + }, + + setMenuState : function (active, elements_shown) { + if (!elements_shown) { + elements_shown = ['add', 'list', 'importExport']; + } else if (elements_shown.indexOf(active) < 0) + elements_shown.push(active); + + for (var button_name in this._menuButtons) { + var menu_class = (button_name == active) ? 'menu-item-active' : 'menu-item'; + if (elements_shown.indexOf(button_name) < 0 || (button_name == "importExport" && !this.config.allowImportExport)) + menu_class = "hidden"; + if (this._menuButtons[button_name]) + this._menuButtons[button_name].className = menu_class; + } + }, + + setInfoWindow : function (graphic) { + if (!this.map.infoWindow) + return false; + + if (!graphic) { + this.map.infoWindow.hide(); + return true; + } + + if (graphic.geometry.x) + var center = graphic.geometry; + else if (graphic.geometry.getCenter) + var center = graphic.geometry.getCenter(); + else if (graphic.geometry.getExtent) + var center = graphic.geometry.getExtent().getCenter(); + else + return false; + + this.map.infoWindow.setFeatures([graphic]); + this.map.infoWindow.show(center); + + }, + + _clickHandler : false, + allowPopup : function (bool) { + this.map.setInfoWindowOnClick(bool); + + if (!bool && this._clickHandler) { + dojo.disconnect(this._clickHandler); + } else { + this._clickHandler = this.drawBox.drawLayer.on("click", this._onDrawClick); + } + }, + + saveInLocalStorage : function () { + if (!this.config.allowLocalStorage) + return; + + localStore.set(this._localStorageKey, this.drawingsGetJson()); + }, + + zoomAll : function () { + var graphics = this.drawBox.drawLayer.graphics; + var nb_graphics = graphics.length; + + if (nb_graphics < 1) + return; + + var ext = graphicsUtils.graphicsExtent(this.drawBox.drawLayer.graphics); + + this.map.setExtent(ext, true); + return true; + }, + + clear : function () { + if (!this.config.confirmOnDelete || confirm(this.nls.clear)) { + this.drawBox.drawLayer.clear(); + this.setInfoWindow(false); + this.setMode("list"); + } + }, + + drawingsGetJson : function (asString) { + if (this.drawBox.drawLayer.graphics.length < 1) + return (asString) ? '' : false; + + var content = { + "features" : [], + "displayFieldName" : "", + "fieldAliases" : {}, + "spatialReference" : this.map.spatialReference.toJson(), + "fields" : [] + }; + + for (var i in this.drawBox.drawLayer.graphics) + content["features"].push(this.drawBox.drawLayer.graphics[i].toJson()); + + if (asString) { + content = JSON.stringify(content); + } + return content; + }, + + ///////////////////////// MENU METHODS /////////////////////////////////////////////////////////// + menuOnClickAdd : function () { + this.setMode("add1"); + }, + menuOnClickList : function () { + this.setMode("list"); + }, + menuOnClickImportExport : function () { + this.setMode("importExport"); + }, + + onHideCheckboxClick : function () { + var display = (this.hideCheckbox.checked) ? 'none' : 'block'; + + this.drawBox.drawLayer.setVisibility(!this.hideCheckbox.checked); + this.menu.style.display = display; + this.settingAllContent.style.display = display; + + if (this.hideCheckbox.checked) + this.onClose(); + else + this.onOpen(); + }, + + ///////////////////////// LIST METHODS /////////////////////////////////////////////////////////// + listGenerateDrawTable : function () { + //Generate draw features table + var graphics = this.drawBox.drawLayer.graphics; + var nb_graphics = graphics.length; + + //Table + this.drawsTableBody.innerHTML = ""; + + for (var i = nb_graphics - 1; i >= 0; i--) { + var graphic = graphics[i]; + var num = i + 1; + var symbol = graphic.symbol; + + var selected = (this._editorConfig["graphicCurrent"] && this._editorConfig["graphicCurrent"] == graphic); + + if (symbol.type == "textsymbol") { + var json = symbol.toJson(); + var txt = (json.text.length > 4) ? json.text.substr(0, 4) + "..." : json.text + var font = (json.font.size < 14) ? 'font-size:' + json.font.size + 'px;' : 'font-size:14px; font-weight:bold;'; + var color = (json.color.length == 4) ? 'rgba(' + json.color.join(",") + ')' : 'rgba(' + json.color.join(",") + ')'; + var symbolHtml = '' + txt + ''; + } else { + var symbolNode = jimuSymbolUtils.createSymbolNode(symbol, { + width : 50, + height : 50 + }); + var symbolHtml = symbolNode.innerHTML; + } + var name = (graphic.attributes && graphic.attributes['name']) ? graphic.attributes['name'] : ''; + name = (name.length > 8) ? '' + name.substr(0, 8) + "..." : name; + + var html = '' + name + '' + '' + symbolHtml + '' + '' + ' ' + ' ' + '  ' + ' ' + ' ' + '  ' + ' ' + ''; + + var tr = domConstruct.create( + "tr", { + id : 'draw-tr--' + i, + innerHTML : html, + className : (selected) ? 'selected' : '' + }, + this.drawsTableBody); + + //Bind actions + on(dom.byId('draw-action-edit--' + i), "click", this.listOnActionClick); + on(dom.byId('draw-action-up--' + i), "click", this.listOnActionClick); + on(dom.byId('draw-action-down--' + i), "click", this.listOnActionClick); + on(dom.byId('draw-action-delete--' + i), "click", this.listOnActionClick); + on(dom.byId('draw-action-zoom--' + i), "click", this.listOnActionClick); + } + this.saveInLocalStorage(); + }, + + switch2DrawingGraphics : function (i1, i2) { + var g1 = this.drawBox.drawLayer.graphics[i1]; + var g2 = this.drawBox.drawLayer.graphics[i2]; + + if (!g1 || !g2) + return false; + + //Switch graphics + this.drawBox.drawLayer.graphics[i1] = g2; + this.drawBox.drawLayer.graphics[i2] = g1; + + //Redraw in good order + var nb = this.drawBox.drawLayer.graphics.length; + for (var i = 0; i < nb; i++) { + var g = this.drawBox.drawLayer.graphics[i]; + + if (i >= i1 || i >= i2) { + var shape = g.getShape(); + if (shape) + shape.moveToFront(); + } + } + return true; + }, + + listOnActionClick : function (evt) { + if (!evt.target || !evt.target.id) + return; + + var tab = evt.target.id.split('--'); + var type = tab[0]; + var i = parseInt(tab[1]); + + var g = this.drawBox.drawLayer.graphics[i]; + this._editorConfig["graphicCurrent"] = g; + + switch (type) { + case 'draw-action-up': + this.switch2DrawingGraphics(i, i + 1); + this.listGenerateDrawTable(); + break; + case 'draw-action-down': + this.switch2DrawingGraphics(i, i - 1); + this.listGenerateDrawTable(); + break; + case 'draw-action-delete': + if (!this.config.confirmOnDelete || confirm(this.nls.confirmDrawDelete + ".")) { + g.getLayer().remove(g); + this._editorConfig["graphicCurrent"] = false; + this.listGenerateDrawTable(); + } + break; + case 'draw-action-edit': + this.setMode("edit"); + break; + case 'draw-action-zoom': + this.setInfoWindow(g); + + var extent = graphicsUtils.graphicsExtent([g]); + this.map.setExtent(extent, true); + this.listGenerateDrawTable(); + + break; + } + }, + + ///////////////////////// SYMBOL EDITOR METHODS /////////////////////////////////////////////////////////// + _editorConfig : { + drawPlus : { + "FontFamily" : false, + "bold" : false, + "italic" : false, + "underline" : false, + "angle" : false, + "placement" : { + "vertical" : "middle", + "horizontal" : "center" + } + }, + phantom : { + "point" : false, + "symbol" : false, + "layer" : false, + "handle" : false + } + }, + + editorPrepareForAdd : function (symbol) { + this.editorSymbolChooserConfigure(symbol); + + this.nameField.value = this.nls.nameFieldDefaultValue; + this.descriptionField.value = ''; + + this.editorTitle.innerHTML = this.nls.addDrawTitle; + this.editorFooterEdit.style.display = 'none'; + this.editorFooterAdd.style.display = 'block'; + this.editorAddMessage.style.display = 'block'; + this.editorEditMessage.style.display = 'none'; + this.editorSnappingMessage.style.display = 'none'; + + var commontype = this._editorConfig['commontype']; + + //Mouse preview + this._editorConfig["phantom"]["symbol"] = symbol; + this.editorEnableMapPreview((commontype == 'point' || commontype == 'text')); + + //If text prepare symbol + if (commontype == "text") + this.editorUpdateTextPlus(); + + this.editorActivateSnapping(true); + }, + + editorPrepareForEdit : function (graphic) { + this.nameField.value = graphic.attributes["name"]; + this.descriptionField.value = graphic.attributes["description"]; + + this.editorActivateGeometryEdit(graphic); + + this.editorSymbolChooserConfigure(graphic.symbol); + + this.editorTitle.innerHTML = this.nls.editDrawTitle; + this.editorFooterEdit.style.display = 'block'; + this.editorFooterAdd.style.display = 'none'; + this.editorAddMessage.style.display = 'none'; + this.editorEditMessage.style.display = 'block'; + this.editorSnappingMessage.style.display = 'block'; + + this.editorEnableMapPreview(false); + this.editorActivateSnapping(true); + }, + + editorSymbolChooserConfigure : function (symbol) { + if (!symbol) + return; + + //Set this symbol in symbol chooser + this.editorSymbolChooser.showBySymbol(symbol); + + var type = symbol.type; + //Draw plus and specific comportment when text symbol. + if (type == "textsymbol") { + //Force editorSymbolChooser _init to walk around jimu.js bug (initTextSection doesn't pass symbol to _initTextSettings) + this.editorSymbolChooser._initTextSettings(symbol); + + //show draw plus + this.editorSymbolTextPlusNode.style.display = 'block'; + + //Hide text label input (use name instead of) + var tr = this._UTIL__getParentByTag(this.editorSymbolChooser.inputText, 'tr'); + if (tr) + tr.style.display = 'none'; + + //Draw plus configuration + this._editorConfig["drawPlus"]["bold"] = (symbol.font.weight == esri.symbol.Font.WEIGHT_BOLD); + this._editorConfig["drawPlus"]["italic"] = (symbol.font.style == esri.symbol.Font.STYLE_ITALIC); + this._editorConfig["drawPlus"]["underline"] = (symbol.font.decoration == 'underline'); + this._editorConfig["drawPlus"]["placement"]["horizontal"] = symbol.horizontalAlignment; + this._editorConfig["drawPlus"]["placement"]["vertical"] = symbol.verticalAlignment; + this.editorTextPlusFontFamilyNode.set("value", symbol.font.family); + this.editorTextPlusAngleNode.set("value", symbol.angle); + this._UTIL__enableClass(this.editorTextPlusBoldNode, 'selected', this._editorConfig["drawPlus"]["bold"]); + this._UTIL__enableClass(this.editorTextPlusItalicNode, 'selected', this._editorConfig["drawPlus"]["italic"]); + this._UTIL__enableClass(this.editorTextPlusUnderlineNode, 'selected', this._editorConfig["drawPlus"]["underline"]); + for (var i in this._editorTextPlusPlacements) { + var title_tab = this._editorTextPlusPlacements[i].title.split(" "); + var selected = (title_tab[0] == symbol.verticalAlignment && title_tab[1] == symbol.horizontalAlignment); + this._UTIL__enableClass(this._editorTextPlusPlacements[i], 'selected', selected); + } + } else { + //Hide draw plus + this.editorSymbolTextPlusNode.style.display = 'none'; + } + }, + + editorActivateSnapping : function (bool) { + //If disable + if (!bool) { + this.map.disableSnapping(); + return; + } + + //If enable + this.map.enableSnapping({ + "layerInfos" : [{ + "layer" : this.drawBox.drawLayer + } + ], + "tolerance" : 20 + }); + }, + + editorUpdateTextPlus : function () { + //Only if text + if (this.editorSymbolChooser.type != "text") { + return; + } + + //Get parameters + var text = this.nameField.value; + var family = this.editorTextPlusFontFamilyNode.value; + var angle = this.editorTextPlusAngleNode.value; + var weight = this._editorConfig["drawPlus"]["bold"] ? esri.symbol.Font.WEIGHT_BOLD : esri.symbol.Font.WEIGHT_NORMAL; + var style = this._editorConfig["drawPlus"]["italic"] ? esri.symbol.Font.STYLE_ITALIC : esri.symbol.Font.STYLE_NORMAL; + var decoration = this._editorConfig["drawPlus"]["underline"] ? 'underline' : 'none'; + var horizontal = this._editorConfig["drawPlus"]["placement"]["horizontal"]; + var vertical = this._editorConfig["drawPlus"]["placement"]["vertical"]; + + //Prepare symbol + var symbol = this.editorSymbolChooser.getSymbol(); + this.editorSymbolChooser.inputText.value = text; + symbol.text = text; + symbol.font.setFamily(family); + symbol.setAngle(angle); + symbol.setHorizontalAlignment(horizontal); + symbol.setVerticalAlignment(vertical); + symbol.font.setWeight(weight); + symbol.font.setStyle(style); + symbol.font.setDecoration(decoration); + + //Set in symbol chooser + this.editorSymbolChooser.inputText.value = text; + this.editorSymbolChooser.showBySymbol(symbol); + + //Update in drawBox + this.drawBox.setTextSymbol(symbol); + + //Update preview + this.editorSymbolChooser.textPreview.innerHTML = text; + this.editorSymbolChooser.textPreview.style.fontFamily = family; + this.editorSymbolChooser.textPreview.style['font-style'] = (this._editorConfig["drawPlus"]["italic"]) ? 'italic' : 'normal'; + this.editorSymbolChooser.textPreview.style['font-weight'] = (this._editorConfig["drawPlus"]["bold"]) ? 'bold' : 'normal'; + this.editorSymbolChooser.textPreview.style['text-decoration'] = (this._editorConfig["drawPlus"]["underline"]) ? 'underline' : 'none'; + + //Update angle preview + this.editorTextAnglePreviewNode.style.transform = 'rotate(' + angle + 'deg)'; + this.editorTextAnglePreviewNode.style['-ms-transform'] = 'rotate(' + angle + 'deg)'; + + //Update symbol on map if on modification + if (this._editorConfig["graphicCurrent"]) + this._editorConfig["graphicCurrent"].setSymbol(symbol); + else { + //Update phantom symbol + this.editorUpdateMapPreview(symbol); + } + }, + + editorSetDefaultSymbols : function () { + var symbol = this.editorSymbolChooser.getSymbol(); + switch (symbol.type.toLowerCase()) { + case "simplemarkersymbol": + this.drawBox.setPointSymbol(symbol); + break; + case "picturemarkersymbol": + this.drawBox.setPointSymbol(symbol); + break; + case "textsymbol": + this.drawBox.setPointSymbol(symbol); + break; + case "simplelinesymbol": + this.drawBox.setLineSymbol(symbol); + break; + case "cartographiclinesymbol": + this.drawBox.setLineSymbol(symbol); + break; + case "simplefillsymbol": + this.drawBox.setPolygonSymbol(symbol); + break; + case "picturefillsymbol": + this.drawBox.setPolygonSymbol(symbol); + break; + } + }, + + ///////////////////////// IMPORT/EXPORT METHODS /////////////////////////////////////////////////////////// + importFile : function () { + if (!window.FileReader) { + this.showMessage(this.nls.importErrorMessageNavigator, 'error'); + return false; + } + + var input = this.importFileInput.files[0]; + + if (!input) { + this.showMessage(this.nls.importErrorWarningSelectFile, 'warning'); + return false; + } + var reader = new FileReader(); + reader.onload = this.importOnFileLoad; + var txt = reader.readAsText(input); + }, + + importJsonContent : function (json, nameField, descriptionField) { + try { + if (typeof json == 'string') { + json = JSON.parse(json); + } + + if (!json.features) { + this.showMessage(this.nls.importErrorFileStructure, 'error'); + return false; + } + + if (json.features.length < 1) { + this.showMessage(this.nls.importWarningNoDrawings, 'warning'); + return false; + } + + if (!nameField) { + var g = json.features[0]; + var fields_possible = ["name", "title", "label"]; + if (g.attributes) { + for (var i in fields_possible) { + if (g.attributes[fields_possible[i]]) { + nameField = fields_possible[i]; + break; + } + } + } + } + + for (var i in json.features) { + var json_feat = json.features[i]; + + var g = new Graphic(json_feat); + + if (!g) + continue; + + if (!g.attributes) + g.attributes = {}; + + g.attributes["name"] = (!nameField || !g.attributes[nameField]) ? 'n°' + (i + 1) : g.attributes[nameField]; + if (g.symbol && g.symbol.type == "textsymbol") + g.attributes["name"] = g.symbol.text; + g.attributes["description"] = (!descriptionField || !g.attributes[descriptionField]) ? '' : g.attributes[descriptionField]; + + if (g.symbol) { + this.drawBox.drawLayer.add(g); + } else { + var symbol = false; + switch (g.geometry.type) { + case 'point': + var symbol = new SimpleMarkerSymbol(); + break; + case 'polyline': + var symbol = new SimpleLineSymbol(); + break; + case 'polygon': + var symbol = new SimpleFillSymbol(); + break; + } + if (symbol) { + g.setSymbol(symbol); + this.drawBox.drawLayer.add(g); + } + } + } + + this.setMode("list"); + } catch (e) { + this.showMessage(this.nls.importErrorFileStructure, 'error'); + return false; + } + }, + + importOnFileLoad : function (evt) { + var content = evt.target.result; + this.importJsonContent(content); + this.importFileInput.files[0] = ""; + }, + + exportFile : function () { + // Be sure the link will not open if not asked : + this.exportButton.href = "#"; + this.exportButton.target = "_self"; + + // Control if there are drawings + if (this.drawBox.drawLayer.graphics.length < 1) { + this.showMessage(this.nls.importWarningNoExport0Draw, 'warning'); + return false; + } + + var export_name = (this.config.exportFileName) ? (this.config.exportFileName) : 'myDrawings.json'; + + // Case IE with blob support (IE >= 10) : use MS save blob + if (window.navigator && window.navigator.msSaveOrOpenBlob) { + var fileData = [this.drawingsGetJson(true)]; + blobObject = new Blob(fileData, { + type : 'application/octet-stream' + }); + window.navigator.msSaveOrOpenBlob(blobObject, export_name); + return false; + } + + // Case IE without blob support : write in tab. Doesn't allways work.... + if (has("ie")) { + var exportWin = window.top.open("about:blank", "_blank"); + exportWin.document.write(this.drawingsGetJson(true)); + exportWin.document.close(); + exportWin.focus(); + exportWin.document.execCommand('SaveAs', true, export_name); + exportWin.close(); + return false; + } + + // Case HTML5 (Firefox > 25, Chrome > 30....) : use data link with download attribute + this.exportButton.href = 'data:application/octet-stream;charset=utf-8,' + this.drawingsGetJson(true); + this.exportButton.target = "_blank"; + this.exportButton.download = export_name; + return true; + }, + + ///////////////////////// EDIT METHODS /////////////////////////////////////////////////////////// + editorOnClickEditSaveButon : function () { + if (this.editorSymbolChooser.type == "text") { + this.editorUpdateTextPlus(); + } + + this._editorConfig["graphicCurrent"].attributes["name"] = this.nameField.value; + this._editorConfig["graphicCurrent"].attributes["description"] = this.descriptionField.value; + + this.setMode("list"); + }, + editorOnClickEditCancelButon : function () { + this.editorResetGraphic(); + this.editorActivateGeometryEdit(false); + this.setMode("list"); + }, + editorOnClickResetCancelButon : function () { + this.editorResetGraphic(); + this.setMode("edit"); + }, + + editorResetGraphic : function () { + if (this._editorConfig["graphicSaved"] && this._editorConfig["graphicCurrent"]) { + var g = new Graphic(this._editorConfig["graphicSaved"]); + this._editorConfig["graphicCurrent"].setGeometry(g.geometry); + this._editorConfig["graphicCurrent"].setSymbol(g.symbol); + } + }, + + editorActivateGeometryEdit : function (graphic) { + if (!graphic) + this.editorActivateSnapping(false); + + if (!graphic && this._editorConfig["editToolbar"]) { + this._editorConfig["editToolbar"].deactivate(); + return; + } + + this._editorConfig["graphicSaved"] = graphic.toJson(); + + var tool = 0 | Edit.MOVE; + if (graphic.geometry.type != "point") + tool = tool | Edit.EDIT_VERTICES | Edit.SCALE | Edit.ROTATE; + + var options = { + allowAddVertices : true, + allowDeleteVertices : true, + uniformScaling : true + }; + this._editorConfig["editToolbar"].activate(tool, graphic, options); + }, + + ///////////////////////// ADD METHODS /////////////////////////////////////////////////////////// + drawBoxOnTypeSelected : function (target, geotype, commontype) { + if (!this._editorConfig["defaultSymbols"]) + this._editorConfig["defaultSymbols"] = {}; + this._editorConfig['commontype'] = commontype; + + var symbol = this._editorConfig["defaultSymbols"][commontype]; + if (!symbol) { + switch (commontype) { + case "point": + symbol = new SimpleMarkerSymbol(); + break; + case "polyline": + symbol = new SimpleLineSymbol(); + break; + case "polygon": + symbol = new SimpleFillSymbol(); + break; + case "text": + symbol = new TextSymbol({ + "verticalAlignment" : "middle", + "horizontalAlignment" : "center" + }); + break; + } + } + + if (symbol) { + this._editorConfig["defaultSymbols"][commontype] = symbol; + this.setMode('add2'); + } + }, + + drawBoxOnDrawEnd : function (graphic, geotype, commontype) { + var geometry = graphic.geometry; + + this.editorEnableMapPreview(false); + + graphic.attributes = { + "name" : this.nameField.value, + "description" : this.descriptionField.value + } + + if (geometry.type === 'extent') { + var a = geometry; + var polygon = new Polygon(a.spatialReference); + var r = [ + [a.xmin, a.ymin], + [a.xmin, a.ymax], + [a.xmax, a.ymax], + [a.xmax, a.ymin], + [a.xmin, a.ymin] + ]; + polygon.addRing(r); + geometry = polygon; + + graphic.setGeometry(polygon); + var layer = graphic.getLayer(); + layer.remove(graphic); + layer.add(graphic); + + commontype = 'polygon'; + } + if (commontype === 'polyline') { + if (this.showMeasure.checked) { + this._addLineMeasure(geometry); + } + } else if (commontype === 'polygon') { + if (this.showMeasure.checked) { + this._addPolygonMeasure(geometry); + } + } else if (commontype == 'text' && this.editorSymbolChooser.inputText.value.trim() == "") { + //Message + this.showMessage(this.nls.textWarningMessage, 'warning'); + + //Remove empty feature (text symbol without text) + graphic.getLayer().remove(graphic); + } + + this.saveInLocalStorage(); + this._editorConfig["graphicCurrent"] = graphic; + this._editorConfig["defaultSymbols"][this._editorConfig['commontype']] = graphic.symbol; + this.setMode("list"); + }, + + editorEnableMapPreview : function (bool) { + //if deactivate + if (!bool) { + //Hide point + if (this._editorConfig["phantom"]["point"]) + this._editorConfig["phantom"]["point"].hide(); + + this._editorConfig["phantom"]["symbol"] = false; + + //Remove map handlers + if (this._editorConfig["phantom"]["handle"]) { + dojo.disconnect(this._editorConfig["phantom"]["handle"]); + this._editorConfig["phantom"]["handle"] = false; + } + return; + } + + //Create layer if doesn't exist + if (!this._editorConfig["phantom"]["layer"]) { + this._editorConfig["phantom"]["layer"] = new GraphicsLayer({ + id : this.id + "__phantomLayer" + }); + // this._editorConfig["phantom"]["point"] + var center = this.map.extent.getCenter(); + this._editorConfig["phantom"]["point"] = new Graphic(center, this._editorConfig["phantom"]["symbol"], {}); + this._editorConfig["phantom"]["layer"].add(this._editorConfig["phantom"]["point"]); + this._editorConfig["phantom"]["point"].hide(); + + this.map.addLayer(this._editorConfig["phantom"]["layer"]); + } else { + this._editorConfig["phantom"]["point"].setSymbol(this._editorConfig["phantom"]["symbol"]); + } + + //Track mouse on map + if (!this._editorConfig["phantom"]["handle"]) { + this._editorConfig["phantom"]["handle"] = on(this.map, 'mouse-move, mouse-out, mouse-over', lang.hitch(this, function (evt) { + if (this.state === 'opened') { + switch (evt.type) { + case 'mousemove': + if (this._editorConfig["phantom"]["point"]) { + this._editorConfig["phantom"]["point"].setGeometry(evt.mapPoint); + this._editorConfig["phantom"]["point"].show(); + } + break; + case 'mouseout': + if (this._editorConfig["phantom"]["point"]) { + this._editorConfig["phantom"]["point"].hide(); + } + break; + case 'mouseover': + if (this._editorConfig["phantom"]["point"]) { + this._editorConfig["phantom"]["point"].setGeometry(evt.mapPoint); + this._editorConfig["phantom"]["point"].show(); + } + break; + } + } + })); + } + + }, + + editorUpdateMapPreview : function (symbol) { + if (this.editorSymbolChooser.type != "text" && this.editorSymbolChooser.type != "marker") { + return; + } + + if (this._editorConfig["phantom"]["handle"] && this._editorConfig["phantom"]["point"]) { + this._editorConfig["phantom"]["symbol"] = symbol; + this._editorConfig["phantom"]["point"].setSymbol(symbol); + } + + }, + + editorOnClickAddCancelButon : function () { + this.setMode("add1"); + }, + + ////////////////////////////////////// Measure methods ////////////////////////////////////////////// + _resetUnitsArrays : function () { + this.defaultDistanceUnits = []; + this.defaultAreaUnits = []; + this.configDistanceUnits = []; + this.configAreaUnits = []; + this.distanceUnits = []; + this.areaUnits = []; + }, + + _getDefaultDistanceUnitInfo : function (unit) { + for (var i = 0; i < this.defaultDistanceUnits.length; i++) { + var unitInfo = this.defaultDistanceUnits[i]; + if (unitInfo.unit === unit) { + return unitInfo; + } + } + return null; + }, + + _getDefaultAreaUnitInfo : function (unit) { + for (var i = 0; i < this.defaultAreaUnits.length; i++) { + var unitInfo = this.defaultAreaUnits[i]; + if (unitInfo.unit === unit) { + return unitInfo; + } + } + return null; + }, + + _getDistanceUnitInfo : function (unit) { + for (var i = 0; i < this.distanceUnits.length; i++) { + var unitInfo = this.distanceUnits[i]; + if (unitInfo.unit === unit) { + return unitInfo; + } + } + return null; + }, + + _getAreaUnitInfo : function (unit) { + for (var i = 0; i < this.areaUnits.length; i++) { + var unitInfo = this.areaUnits[i]; + if (unitInfo.unit === unit) { + return unitInfo; + } + } + return null; + }, + + _setMeasureVisibility : function () { + var display = (this.showMeasure.checked) ? 'block' : 'none'; + html.setStyle(this.areaMeasure, 'display', display); + html.setStyle(this.distanceMeasure, 'display', display); + }, + + _addLineMeasure : function (geometry) { + var a = Font.STYLE_ITALIC; + var b = Font.VARIANT_NORMAL; + var c = Font.WEIGHT_BOLD; + var symbolFont = new Font("16px", a, b, c, "Courier"); + var fontColor = new Color([0, 0, 0, 1]); + var ext = geometry.getExtent(); + var center = ext.getCenter(); + var geoLine = webMercatorUtils.webMercatorToGeographic(geometry); + var unit = this.distanceUnitSelect.value; + var lengths = geodesicUtils.geodesicLengths([geoLine], esriUnits[unit]); + var abbr = this._getDistanceUnitInfo(unit).label; + var localeLength = jimuUtils.localizeNumber(lengths[0].toFixed(1)); + var length = localeLength + " " + abbr; + var textSymbol = new TextSymbol(length, symbolFont, fontColor); + var labelGraphic = new Graphic(center, textSymbol, { + "name" : textSymbol.text, + "description" : "" + }, null); + this.drawBox.drawLayer.add(labelGraphic); + }, + + _addPolygonMeasure : function (geometry) { + var a = Font.STYLE_ITALIC; + var b = Font.VARIANT_NORMAL; + var c = Font.WEIGHT_BOLD; + var symbolFont = new Font("16px", a, b, c, "Courier"); + var fontColor = new Color([0, 0, 0, 1]); + var ext = geometry.getExtent(); + var center = ext.getCenter(); + var geoPolygon = webMercatorUtils.webMercatorToGeographic(geometry); + var areaUnit = this.areaUnitSelect.value; + var areaAbbr = this._getAreaUnitInfo(areaUnit).label; + var areas = geodesicUtils.geodesicAreas([geoPolygon], esriUnits[areaUnit]); + var localeArea = jimuUtils.localizeNumber(areas[0].toFixed(1)); + var area = localeArea + " " + areaAbbr; + + var polyline = new Polyline(geometry.spatialReference); + var points = geometry.rings[0]; + points = points.slice(0, points.length - 1); + polyline.addPath(points); + var geoPolyline = webMercatorUtils.webMercatorToGeographic(polyline); + var lengthUnit = this.distanceUnitSelect.value; + var lengthAbbr = this._getDistanceUnitInfo(lengthUnit).label; + var lengths = geodesicUtils.geodesicLengths([geoPolyline], esriUnits[lengthUnit]); + var localeLength = jimuUtils.localizeNumber(lengths[0].toFixed(1)); + var length = localeLength + " " + lengthAbbr; + var text = area + " " + length; + + var textSymbol = new TextSymbol(text, symbolFont, fontColor); + var labelGraphic = new Graphic(center, textSymbol, { + "name" : textSymbol.text, + "description" : "" + }, null); + this.drawBox.drawLayer.add(labelGraphic); + }, + + //////// INIT METHODS //////////////////////////////////////////////////////////////////////////////////////////////////////// + _bindEvents : function () { + //bind DrawBox + this.own(on(this.drawBox, 'IconSelected', lang.hitch(this, this.drawBoxOnTypeSelected))); + this.own(on(this.drawBox, 'DrawEnd', lang.hitch(this, this.drawBoxOnDrawEnd))); + + //Bind symbol chooser change + this.own(on(this.editorSymbolChooser, 'change', lang.hitch(this, function () { + this.editorSetDefaultSymbols(); + + //If text plus + if (this.editorSymbolChooser.type == "text") { + this.editorUpdateTextPlus(); + } else if (this._editorConfig["graphicCurrent"]) { + //If in modification, update graphic symbology + this._editorConfig["graphicCurrent"].setSymbol(this.editorSymbolChooser.getSymbol()); + } + + //Phantom for marker + if (this.editorSymbolChooser.type == "marker") + this.editorUpdateMapPreview(this.editorSymbolChooser.getSymbol()); + + }))); + + //bind unit events + this.own(on(this.showMeasure, 'click', lang.hitch(this, this._setMeasureVisibility))); + + //hitch list event + this.listOnActionClick = lang.hitch(this, this.listOnActionClick); + //hitch import file loading + this.importOnFileLoad = lang.hitch(this, this.importOnFileLoad); + + //Bind draw plus event + this.editorUpdateTextPlus = lang.hitch(this, this.editorUpdateTextPlus); + this.editorTextPlusFontFamilyNode.on("change", this.editorUpdateTextPlus); + this.editorTextPlusAngleNode.on("change", this.editorUpdateTextPlus); + on(this.editorTextPlusBoldNode, "click", lang.hitch(this, function (evt) { + this._editorConfig["drawPlus"]["bold"] = !this._editorConfig["drawPlus"]["bold"]; + this._UTIL__enableClass(this.editorTextPlusBoldNode, 'selected', this._editorConfig["drawPlus"]["bold"]); + this.editorUpdateTextPlus(); + })); + on(this.editorTextPlusItalicNode, "click", lang.hitch(this, function (evt) { + this._editorConfig["drawPlus"]["italic"] = !this._editorConfig["drawPlus"]["italic"]; + this._UTIL__enableClass(this.editorTextPlusItalicNode, 'selected', this._editorConfig["drawPlus"]["italic"]); + this.editorUpdateTextPlus(); + })); + on(this.editorTextPlusUnderlineNode, "click", lang.hitch(this, function (evt) { + this._editorConfig["drawPlus"]["underline"] = !this._editorConfig["drawPlus"]["underline"]; + this._UTIL__enableClass(this.editorTextPlusUnderlineNode, 'selected', this._editorConfig["drawPlus"]["underline"]); + this.editorUpdateTextPlus(); + })); + this.onEditorTextPlusPlacementClick = lang.hitch(this, function (evt) { + if (!evt.target) + return; + + var selected = false; + for (var i in this._editorTextPlusPlacements) { + var is_this = (evt.target == this._editorTextPlusPlacements[i]); + + this._UTIL__enableClass(this._editorTextPlusPlacements[i], 'selected', is_this); + + if (is_this) + selected = this._editorTextPlusPlacements[i]; + } + if (!selected.title) + return; + var tab = selected.title.split(" "); + this._editorConfig["drawPlus"]["placement"] = { + "vertical" : tab[0], + "horizontal" : tab[1] + } + this.editorUpdateTextPlus(); + }); + this._editorTextPlusPlacements = [ + this.editorTextPlusPlacementTopLeft, + this.editorTextPlusPlacementTopCenter, + this.editorTextPlusPlacementTopRight, + this.editorTextPlusPlacementMiddleLeft, + this.editorTextPlusPlacementMiddleCenter, + this.editorTextPlusPlacementMiddleRight, + this.editorTextPlusPlacementBottomLeft, + this.editorTextPlusPlacementBottomCenter, + this.editorTextPlusPlacementBottomRight + ]; + for (var i in this._editorTextPlusPlacements) + on(this._editorTextPlusPlacements[i], "click", this.onEditorTextPlusPlacementClick); + + }, + + _menuInit : function () { + this._menuButtons = { + "add" : this.menuAddButton, + "edit" : this.menuEditButton, + "list" : this.menuListButton, + "importExport" : this.menuListImportExport + }; + + var views = [this.addSection, this.editorSection, this.listSection]; + + if (this.config.allowImportExport) { + views.push(this.importExportSection); + } else { + this.menuListImportExport.style.display = 'none'; + } + + this.TabViewStack = new ViewStack({ + viewType : 'dom', + views : views + }); + html.place(this.TabViewStack.domNode, this.settingAllContent); + }, + + _initLocalStorage : function () { + if (!this.config.allowLocalStorage) + return; + + this._localStorageKey = + (this.config.localStorageKey) ? 'WebAppBuilder.2D.eDraw.' + this.config.localStorageKey : 'WebAppBuilder.2D.eDraw'; + + var content = localStore.get(this._localStorageKey); + + if (!content || !content.features || content.features.length < 1) + return; + + //Closure with timeout to be sure widget is ready + (function (widget) { + setTimeout( + function () { + widget.importJsonContent(content, "name", "description"); + widget.showMessage(widget.nls.localLoading); + }, 200); + })(this); + + }, + + _initDrawingPopupAndClick : function () { + //Set popup template + var infoTemplate = new esri.InfoTemplate("${name}", "${description}"); + this.drawBox.drawLayer.setInfoTemplate(infoTemplate); + + //Set draw click + this._onDrawClick = lang.hitch(this, function (evt) { + if (!evt.graphic) + return; + + this._editorConfig["graphicCurrent"] = evt.graphic; + this.setMode("list"); + }); + + //Allow click + this.allowPopup(true); + + }, + + _initUnitSelect : function () { + this._initDefaultUnits(); + this._initConfigUnits(); + var a = this.configDistanceUnits; + var b = this.defaultDistanceUnits; + this.distanceUnits = a.length > 0 ? a : b; + var c = this.configAreaUnits; + var d = this.defaultAreaUnits; + this.areaUnits = c.length > 0 ? c : d; + array.forEach(this.distanceUnits, lang.hitch(this, function (unitInfo) { + var option = { + value : unitInfo.unit, + label : unitInfo.label + }; + this.distanceUnitSelect.addOption(option); + })); + + array.forEach(this.areaUnits, lang.hitch(this, function (unitInfo) { + var option = { + value : unitInfo.unit, + label : unitInfo.label + }; + this.areaUnitSelect.addOption(option); + })); + }, + + _initDefaultUnits : function () { + this.defaultDistanceUnits = [{ + unit : 'KILOMETERS', + label : this.nls.kilometers + }, { + unit : 'MILES', + label : this.nls.miles + }, { + unit : 'METERS', + label : this.nls.meters + }, { + unit : 'NAUTICAL_MILES', + label : this.nls.nauticals + }, { + unit : 'FEET', + label : this.nls.feet + }, { + unit : 'YARDS', + label : this.nls.yards + } + ]; + + this.defaultAreaUnits = [{ + unit : 'SQUARE_KILOMETERS', + label : this.nls.squareKilometers + }, { + unit : 'SQUARE_MILES', + label : this.nls.squareMiles + }, { + unit : 'ACRES', + label : this.nls.acres + }, { + unit : 'HECTARES', + label : this.nls.hectares + }, { + unit : 'SQUARE_METERS', + label : this.nls.squareMeters + }, { + unit : 'SQUARE_FEET', + label : this.nls.squareFeet + }, { + unit : 'SQUARE_YARDS', + label : this.nls.squareYards + } + ]; + }, + + _initConfigUnits : function () { + array.forEach(this.config.distanceUnits, lang.hitch(this, function (unitInfo) { + var unit = unitInfo.unit; + if (esriUnits[unit]) { + var defaultUnitInfo = this._getDefaultDistanceUnitInfo(unit); + unitInfo.label = defaultUnitInfo.label; + this.configDistanceUnits.push(unitInfo); + } + })); + + array.forEach(this.config.areaUnits, lang.hitch(this, function (unitInfo) { + var unit = unitInfo.unit; + if (esriUnits[unit]) { + var defaultUnitInfo = this._getDefaultAreaUnitInfo(unit); + unitInfo.label = defaultUnitInfo.label; + this.configAreaUnits.push(unitInfo); + } + })); + }, + + //////////////////////////// WIDGET CORE METHODS /////////////////////////////////////////////////////////////////////////////////////// + + postMixInProperties : function () { + this.inherited(arguments); + this._resetUnitsArrays(); + }, + + postCreate : function () { + this.inherited(arguments); + + //Create symbol chooser + this.editorSymbolChooser = new SymbolChooser({ + "class" : "full-width", + "type" : "text", + "symbol" : new SimpleMarkerSymbol() + }, + this.editorSymbolChooserDiv); + + this.drawBox.setMap(this.map); + + //Initialize menu + this._menuInit(); + + //Init measure units + this._initUnitSelect(); + + //Bind and hitch events + this._bindEvents(); + + //Prepare text plus + this._prepareTextPlus(); + + //load if drawings in localStorage + this._initLocalStorage(); + + //Popup or click init + this._initDrawingPopupAndClick(); + + //Create edit dijit + this._editorConfig["editToolbar"] = new Edit(this.map); + }, + + _prepareTextPlus : function () { + //Select central position in UI (text placement) + this._UTIL__enableClass(this._editorTextPlusPlacements[4], 'selected', true); + + //Manage availaible FontFamily + if (this.config.drawPlus && this.config.drawPlus.fontFamilies) { + if (this.config.drawPlus.fontFamilies.length > 0) { + this.editorTextPlusFontFamilyNode.set("options", this.config.drawPlus.fontFamilies).reset(); + } + } + + }, + + onOpen : function () { + if (this.drawBox.drawLayer.graphics.length > 0) + this.setMode("list"); + else + this.setMode("add1"); + }, + + onClose : function () { + this.editorResetGraphic(); + this.drawBox.deactivate(); + this.setInfoWindow(false); + this.editorEnableMapPreview(false); + this.editorActivateGeometryEdit(false); + this.map.infoWindow.hide(); + this.allowPopup(true); + }, + + destroy : function () { + if (this.drawBox) { + this.drawBox.destroy(); + this.drawBox = null; + } + if (this.editorSymbolChooser) { + this.editorSymbolChooser.destroy(); + this.editorSymbolChooser = null; + } + this.inherited(arguments); + }, + + ///////////////////////// UTILS METHODS //////////////////////////////////////////////////////////////////////////// + _UTIL__enableClass : function (elt, className, bool) { + if (elt.classList) { + if (bool) + elt.classList.add(className); + else + elt.classList.remove(className); + return; + } + elt.className = elt.className.replace(className, "").replace(" ", " ").trim(); + if (bool) + elt.className += className; + }, + + _UTIL__getParentByTag : function (el, tagName) { + tagName = tagName.toLowerCase(); + while (el && el.parentNode) { + el = el.parentNode; + if (el.tagName && el.tagName.toLowerCase() == tagName) { + return el; + } + } + return null; + } + + }); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +}); diff --git a/config.json b/config.json index 3a99e69..bc258fe 100644 --- a/config.json +++ b/config.json @@ -1,83 +1,66 @@ { - "exportFileName": "myDrawing.json", - "confirmOnDelete": true, - "allowImportExport": true, - "allowLocalStorage": true, - "localStorageKey": false, - "drawPlus": { - "fontFamilies": [ - { - "label": "Arial", - "value": "Arial" - }, - { - "label": "Helvetica", - "value": "Helvetica" - }, - { - "label": "Times New Roman", - "value": "Times New Roman" - }, - { - "label": "Courier New", - "value": "Courier New" - } - ] - }, - "distanceUnits": [ - { - "unit": "KILOMETERS", - "abbr": "km" - }, - { - "unit": "MILES", - "abbr": "mi" - }, - { - "unit": "METERS", - "abbr": "m" - }, - { - "unit": "NAUTICAL_MILES", - "abbr": "nm" - }, - { - "unit": "FEET", - "abbr": "ft" - }, - { - "unit": "YARDS", - "abbr": "yd" - } - ], - "areaUnits": [ - { - "unit": "SQUARE_KILOMETERS", - "abbr": "sq km" - }, - { - "unit": "SQUARE_MILES", - "abbr": "sq mi" - }, - { - "unit": "ACRES", - "abbr": "ac" - }, - { - "unit": "HECTARES", - "abbr": "ha" - }, - { - "unit": "SQUARE_METERS", - "abbr": "sq m" - }, - { - "unit": "SQUARE_FEET", - "abbr": "sq ft" - }, - { - "unit": "SQUARE_YARDS", - "abbr": "sq yd" - } - ] -} \ No newline at end of file + "exportFileName" : "myDrawing.json", + "confirmOnDelete" : true, + "allowImportExport" : true, + "allowLocalStorage" : true, + "localStorageKey" : false, + "drawPlus" : { + "fontFamilies" : [{ + "label" : "Arial", + "value" : "Arial" + }, { + "label" : "Helvetica", + "value" : "Helvetica" + }, { + "label" : "Times New Roman", + "value" : "Times New Roman" + }, { + "label" : "Courier New", + "value" : "Courier New" + } + ] + }, + "distanceUnits" : [{ + "unit" : "KILOMETERS", + "abbr" : "km" + }, { + "unit" : "MILES", + "abbr" : "mi" + }, { + "unit" : "METERS", + "abbr" : "m" + }, { + "unit" : "NAUTICAL_MILES", + "abbr" : "nm" + }, { + "unit" : "FEET", + "abbr" : "ft" + }, { + "unit" : "YARDS", + "abbr" : "yd" + } + ], + "areaUnits" : [{ + "unit" : "SQUARE_KILOMETERS", + "abbr" : "sq km" + }, { + "unit" : "SQUARE_MILES", + "abbr" : "sq mi" + }, { + "unit" : "ACRES", + "abbr" : "ac" + }, { + "unit" : "HECTARES", + "abbr" : "ha" + }, { + "unit" : "SQUARE_METERS", + "abbr" : "sq m" + }, { + "unit" : "SQUARE_FEET", + "abbr" : "sq ft" + }, { + "unit" : "SQUARE_YARDS", + "abbr" : "sq yd" + } + ] +} diff --git a/css/style.css b/css/style.css index b7eea59..07e8fbe 100644 --- a/css/style.css +++ b/css/style.css @@ -103,7 +103,7 @@ } .jimu-widget-edraw .draw-table th { background-color: #8d989e; - font-weight: bold; + font-weight: bold201px; text-align: center; } .jimu-widget-edraw .draw-table tr:hover th { @@ -121,7 +121,7 @@ .jimu-widget-edraw .list-draw-actions { height: 100%; vertical-align: middle; - width: 197px; + width: 201px; } .jimu-widget-edraw .list-draw-actions span { border-radius: 5px; diff --git a/manifest.json b/manifest.json index d634b24..9cc37f2 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { "name": "eDraw", "platform": "HTML", - "version": "1.1.3", - "wabVersion": "1.1", - "author": "Esri R&D Center Beijing modified by MAGIS NC", + "version": "1.3.1", + "wabVersion": "1.3", + "author" : "Esri R&D Center Beijing modified by MAGIS NC", "description": "Enhanced draw widget for WebApp Builder for Arcgis.", "copyright": "", "license": "http://www.apache.org/licenses/LICENSE-2.0" diff --git a/nls/ar/strings.js b/nls/ar/strings.js index cc7b2e5..86499b8 100644 --- a/nls/ar/strings.js +++ b/nls/ar/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "رسم", selectDrawMode: "تحديد وضع الرسم", diff --git a/nls/cs/strings.js b/nls/cs/strings.js index 2b2e81a..bb1a393 100644 --- a/nls/cs/strings.js +++ b/nls/cs/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Kreslit", selectDrawMode: "Vybrat režim kreslení", diff --git a/nls/da/strings.js b/nls/da/strings.js index 149a866..ec52397 100644 --- a/nls/da/strings.js +++ b/nls/da/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Tegn", selectDrawMode: "Vælg tegnetilstand", diff --git a/nls/de/strings.js b/nls/de/strings.js index 5c36547..8cebae9 100644 --- a/nls/de/strings.js +++ b/nls/de/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Zeichnen", selectDrawMode: "Zeichenmodus auswählen", diff --git a/nls/es/strings.js b/nls/es/strings.js index b81b1b4..1b3ca54 100644 --- a/nls/es/strings.js +++ b/nls/es/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Dibujar", selectDrawMode: "Seleccionar modo de dibujo", diff --git a/nls/et/strings.js b/nls/et/strings.js index b26b6d3..2e7e085 100644 --- a/nls/et/strings.js +++ b/nls/et/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Joonistamine", selectDrawMode: "Vali joonistamise režiim", diff --git a/nls/fi/strings.js b/nls/fi/strings.js index 81bc7fe..0d08980 100644 --- a/nls/fi/strings.js +++ b/nls/fi/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Piirrä", selectDrawMode: "Valitse piirustustapa", diff --git a/nls/fr/strings.js b/nls/fr/strings.js index 2c2205b..22070c4 100644 --- a/nls/fr/strings.js +++ b/nls/fr/strings.js @@ -1,86 +1,85 @@ define( - ({ - _widgetLabel: "Dessin", - selectDrawMode: "Sélectionner le mode de dessin", - clear: "Effacer", - point: "Point", - line: "Ligne", - polyline: "Polyligne", - freehandPolyline: "Polyligne à main levée", - triangle: "Triangle", - extent: "Enveloppe", - circle: "Cercle", - ellipse: "Ellipse", - polygon: "Polygone", - freehandPolygon: "Polygone à main levée", - text: "Texte", - textWarningMessage: "Le texte doit être saisi avant de placer le point sur la carte.", - style: "Style", - alpha: "Transparence", - width: "Largeur", - size: "Taille", - color: "Couleur", - markerColor: "Couleur du symbole ponctuel", - outlineColor: "Couleur du contour", - lineColor: "Couleur de ligne", - fillColor: "Couleur de remplissage", - showMeasurements: "Afficher les mesures", - areaUnits: "Unités de surface", - distanceUnits: "Unités de distance", - kilometers: "Kilomètres", - miles: "Miles", - meters: "Mètres", - nauticals: "Milles marins", - feet: "Pieds", - yards: "Yards", - squareKilometers: "Kilomètres carrés", - squareMiles: "Miles carrés", - acres: "Acres", - hectares: "Hectares", - squareMeters: "Mètres carrés", - squareFeet: "Pieds carrés", - squareYards: "Yards carrés", - confirmDrawDelete: "Ce dessin va être supprimé", - all: "Tous", - draws: 'dessins', - addDrawTitle: 'Ajouter un dessin', - editDrawTitle: 'Modifier un dessin', - listDrawTitle: 'Liste des dessins', - importExportTitle: 'Importer ou exporter les dessins', - exportTitle: "Exporter les dessins", - importTitle: "Importer des dessins", - importErrorMessageNavigator: "Votre navigateur ne supporte pas cette fonctionnalité.", - importErrorWarningSelectFile: "Merci de sélectionner un fichier.", - importWarningNoDrawings: "Pas de dessins à charger", - importErrorFileStructure: "Impossible d'importer les dessins, la structure du fichier n'est pas bonne.", - importWarningNoExport0Draw: "Pas d'export (aucun dessin à exporter).", - nameField: "Nom", - symbolField: "Symbol", - nameFieldDefaultValue: "Mon dessin", - descriptionField: "Description", - localLoading: "Vos derniers dessins ont été automatiquement chargés", - editLabel: "Modifier ce dessin", - deleteLabel: "Supprimer ce dessin", - upLabel: "Monter ce dessin", - downLabel: "Descendre ce dessin", - zoomLabel: "Zoomer sur ce dessin", - zoomAllLabel: "Zoomer sur tous les dessins", - saveButton: "Sauvegarder", - resetButton: "Réinitialiser", - cancelButton: "Annuler", - textAngle: 'Angle', - fontName: 'Police', - drawSampleRotatedText: 'angle', - boldTitle: 'Gras', - boldCharacter: 'B', - italicTitle: 'Italique', - italicCharacter: 'I', - underlineTitle: 'Souligné', - underlineCharacter: 'U', - addMessage: 'Vous pouvez maintenant faire votre dessin sur la carte', - editMessage: 'NB : vous pouvez modifier/déplacer la géométrie sur la carte', - snappingMessage: 'NB : l\'accrochage est possible (utiliser la touche CTRL)', - hideOption: 'Cacher les dessins', - textPlacement: 'Placement' - }) -); \ No newline at end of file + ({ + _widgetLabel : "Dessin", + selectDrawMode : "Sélectionner le mode de dessin", + clear : "Effacer", + point : "Point", + line : "Ligne", + polyline : "Polyligne", + freehandPolyline : "Polyligne à main levée", + triangle : "Triangle", + extent : "Enveloppe", + circle : "Cercle", + ellipse : "Ellipse", + polygon : "Polygone", + freehandPolygon : "Polygone à main levée", + text : "Texte", + textWarningMessage : "Le texte doit être saisi avant de placer le point sur la carte.", + style : "Style", + alpha : "Transparence", + width : "Largeur", + size : "Taille", + color : "Couleur", + markerColor : "Couleur du symbole ponctuel", + outlineColor : "Couleur du contour", + lineColor : "Couleur de ligne", + fillColor : "Couleur de remplissage", + showMeasurements : "Afficher les mesures", + areaUnits : "Unités de surface", + distanceUnits : "Unités de distance", + kilometers : "Kilomètres", + miles : "Miles", + meters : "Mètres", + nauticals : "Milles marins", + feet : "Pieds", + yards : "Yards", + squareKilometers : "Kilomètres carrés", + squareMiles : "Miles carrés", + acres : "Acres", + hectares : "Hectares", + squareMeters : "Mètres carrés", + squareFeet : "Pieds carrés", + squareYards : "Yards carrés", + confirmDrawDelete : "Ce dessin va être supprimé", + all : "Tous", + draws : 'dessins', + addDrawTitle : 'Ajouter un dessin', + editDrawTitle : 'Modifier un dessin', + listDrawTitle : 'Liste des dessins', + importExportTitle : 'Importer ou exporter les dessins', + exportTitle : "Exporter les dessins", + importTitle : "Importer des dessins", + importErrorMessageNavigator : "Votre navigateur ne supporte pas cette fonctionnalité.", + importErrorWarningSelectFile : "Merci de sélectionner un fichier.", + importWarningNoDrawings : "Pas de dessins à charger", + importErrorFileStructure : "Impossible d'importer les dessins, la structure du fichier n'est pas bonne.", + importWarningNoExport0Draw : "Pas d'export (aucun dessin à exporter).", + nameField : "Nom", + symbolField : "Symbol", + nameFieldDefaultValue : "Mon dessin", + descriptionField : "Description", + localLoading : "Vos derniers dessins ont été automatiquement chargés", + editLabel : "Modifier ce dessin", + deleteLabel : "Supprimer ce dessin", + upLabel : "Monter ce dessin", + downLabel : "Descendre ce dessin", + zoomLabel : "Zoomer sur ce dessin", + zoomAllLabel : "Zoomer sur tous les dessins", + saveButton : "Sauvegarder", + resetButton : "Réinitialiser", + cancelButton : "Annuler", + textAngle : 'Angle', + fontName : 'Police', + drawSampleRotatedText : 'angle', + boldTitle : 'Gras', + boldCharacter : 'B', + italicTitle : 'Italique', + italicCharacter : 'I', + underlineTitle : 'Souligné', + underlineCharacter : 'U', + addMessage : 'Vous pouvez maintenant faire votre dessin sur la carte', + editMessage : 'NB : vous pouvez modifier/déplacer la géométrie sur la carte', + snappingMessage : 'NB : l\'accrochage est possible (utiliser la touche CTRL)', + hideOption : 'Cacher les dessins', + textPlacement : 'Placement' + })); diff --git a/nls/he/strings.js b/nls/he/strings.js index 355bf32..91dac7d 100644 --- a/nls/he/strings.js +++ b/nls/he/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "שרטוט", selectDrawMode: "בחר מצב שרטוט", diff --git a/nls/it/strings.js b/nls/it/strings.js index dae51ff..ddfbdf4 100644 --- a/nls/it/strings.js +++ b/nls/it/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Disegna", selectDrawMode: "Seleziona modalità disegno", diff --git a/nls/ja/strings.js b/nls/ja/strings.js index 17d5ab2..524d7f0 100644 --- a/nls/ja/strings.js +++ b/nls/ja/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "描画", selectDrawMode: "描画モードの選択", diff --git a/nls/ko/strings.js b/nls/ko/strings.js index 350ac24..c2fb6ca 100644 --- a/nls/ko/strings.js +++ b/nls/ko/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "그리기", selectDrawMode: "그리기 모드 선택", diff --git a/nls/lt/strings.js b/nls/lt/strings.js index c280c94..7f7329e 100644 --- a/nls/lt/strings.js +++ b/nls/lt/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Piešti", selectDrawMode: "Pasirinkite piešimo režimą", diff --git a/nls/lv/strings.js b/nls/lv/strings.js index 35ae39a..e83471e 100644 --- a/nls/lv/strings.js +++ b/nls/lv/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Zīmēt", selectDrawMode: "Izvēlēties zīmēšanas režīmu", diff --git a/nls/nb/strings.js b/nls/nb/strings.js index 806b705..325cf78 100644 --- a/nls/nb/strings.js +++ b/nls/nb/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Tegn", selectDrawMode: "Velg tegnemodus", diff --git a/nls/nl/strings.js b/nls/nl/strings.js index c542cad..79a9f94 100644 --- a/nls/nl/strings.js +++ b/nls/nl/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Tekenen", selectDrawMode: "Tekenmodus selecteren", diff --git a/nls/pl/strings.js b/nls/pl/strings.js index 5bd934d..af8addc 100644 --- a/nls/pl/strings.js +++ b/nls/pl/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Wyświetl", selectDrawMode: "Wybierz tryb wyświetlania", diff --git a/nls/pt-br/strings.js b/nls/pt-br/strings.js index 8f3e0fa..7b35850 100644 --- a/nls/pt-br/strings.js +++ b/nls/pt-br/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Desenhar", selectDrawMode: "Selecionar modo de desenho", diff --git a/nls/pt-pt/strings.js b/nls/pt-pt/strings.js index 68a96cf..6ddc06c 100644 --- a/nls/pt-pt/strings.js +++ b/nls/pt-pt/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Desenhar", selectDrawMode: "Selecionar modo de desenho", diff --git a/nls/ro/strings.js b/nls/ro/strings.js index d261e54..cfc4a87 100644 --- a/nls/ro/strings.js +++ b/nls/ro/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Trasare", selectDrawMode: "Selectare mod de trasare", diff --git a/nls/ru/strings.js b/nls/ru/strings.js index 5e18126..1ad97da 100644 --- a/nls/ru/strings.js +++ b/nls/ru/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Рисование", selectDrawMode: "Выбрать режим рисования", diff --git a/nls/strings.js b/nls/strings.js index 8b973f1..3c02d53 100644 --- a/nls/strings.js +++ b/nls/strings.js @@ -1,112 +1,112 @@ define({ - root: ({ - _widgetLabel: "Draw", - selectDrawMode: "Select drawing mode", - clear: "Clear", - point: "Point", - line: "Line", - polyline: "Polyline", - freehandPolyline: "Freehand Polyline", - triangle: "Triangle", - extent: "Envelope", - circle: "Circle", - ellipse: "Ellipse", - polygon: "Polygon", - freehandPolygon: "Freehand Polygon", - text: "Text", - textWarningMessage: "Text must be written before placing the point on map", - style: "Style", - alpha: "Transparency", - width: "Width", - size: "Size", - color: "Color", - markerColor: "Marker Color", - outlineColor: "Outline Color", - lineColor: "Line Color", - fillColor: "Fill Color", - showMeasurements: "Show Measurements", - areaUnits: "Area Units", - distanceUnits: "Distance Units", - kilometers: "Kilometers", - miles: "Miles", - meters: "Meters", - nauticals: "Nautical miles", - feet: "Feet", - yards: "Yards", - squareKilometers: "Square kilometers", - squareMiles: "Square miles", - acres: "Acres", - hectares: "Hectares", - squareMeters: "Square meters", - squareFeet: "Square feet", - squareYards: "Square yards", - confirmDrawDelete: "This drawing will be deleted", - all: "All", - draws: 'drawings', - addDrawTitle: 'Add a drawing', - editDrawTitle: 'Edit a drawing', - listDrawTitle: 'Drawings list', - importExportTitle: 'Import or export drawings', - exportTitle: "Export draws", - importTitle: "Import draws", - importErrorMessageNavigator: "Your navigator doesn't support this functionnality.", - importErrorWarningSelectFile: "Please select a file.", - importWarningNoDrawings: "No drawings to load", - importErrorFileStructure: "The file structure doesn't match.", - importWarningNoExport0Draw: "No export of the file (No drawing to export).", - nameField: "Name", - symbolField: "Symbol", - nameFieldDefaultValue: "My drawing", - descriptionField: "Description", - localLoading: "Your last drawings were loaded", - editLabel: "Update this drawing", - deleteLabel: "Delete this drawing", - upLabel: "Move this drawing up", - downLabel: "Move this drawing down", - zoomLabel: "Zoom on this drawing", - zoomAllLabel: "Zoom on all drawings", - saveButton: "Save", - resetButton: "Reset", - cancelButton: "Cancel", - textAngle: 'Text Angle', - fontName: 'Font Name', - drawSampleRotatedText: 'angle', - boldTitle: 'Bold', - boldCharacter: 'B', - italicTitle: 'Italic', - italicCharacter: 'I', - underlineTitle: 'Underline', - underlineCharacter: 'U', - addMessage: 'You can now make your drawing on map', - editMessage: 'NB : you can modify/moove geometry on map', - snappingMessage: 'NB : snapping is allowed (use CTRL)', - hideOption: 'Hide drawings', - textPlacement: 'Placement' - }), - "ar": 1, - "cs": 1, - "da": 1, - "de": 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 + root : ({ + _widgetLabel : "Draw", + selectDrawMode : "Select drawing mode", + clear : "Clear", + point : "Point", + line : "Line", + polyline : "Polyline", + freehandPolyline : "Freehand Polyline", + triangle : "Triangle", + extent : "Envelope", + circle : "Circle", + ellipse : "Ellipse", + polygon : "Polygon", + freehandPolygon : "Freehand Polygon", + text : "Text", + textWarningMessage : "Text must be written before placing the point on map", + style : "Style", + alpha : "Transparency", + width : "Width", + size : "Size", + color : "Color", + markerColor : "Marker Color", + outlineColor : "Outline Color", + lineColor : "Line Color", + fillColor : "Fill Color", + showMeasurements : "Show Measurements", + areaUnits : "Area Units", + distanceUnits : "Distance Units", + kilometers : "Kilometers", + miles : "Miles", + meters : "Meters", + nauticals : "Nautical miles", + feet : "Feet", + yards : "Yards", + squareKilometers : "Square kilometers", + squareMiles : "Square miles", + acres : "Acres", + hectares : "Hectares", + squareMeters : "Square meters", + squareFeet : "Square feet", + squareYards : "Square yards", + confirmDrawDelete : "This drawing will be deleted", + all : "All", + draws : 'drawings', + addDrawTitle : 'Add a drawing', + editDrawTitle : 'Edit a drawing', + listDrawTitle : 'Drawings list', + importExportTitle : 'Import or export drawings', + exportTitle : "Export draws", + importTitle : "Import draws", + importErrorMessageNavigator : "Your navigator doesn't support this functionnality.", + importErrorWarningSelectFile : "Please select a file.", + importWarningNoDrawings : "No drawings to load", + importErrorFileStructure : "The file structure doesn't match.", + importWarningNoExport0Draw : "No export of the file (No drawing to export).", + nameField : "Name", + symbolField : "Symbol", + nameFieldDefaultValue : "My drawing", + descriptionField : "Description", + localLoading : "Your last drawings were loaded", + editLabel : "Update this drawing", + deleteLabel : "Delete this drawing", + upLabel : "Move this drawing up", + downLabel : "Move this drawing down", + zoomLabel : "Zoom on this drawing", + zoomAllLabel : "Zoom on all drawings", + saveButton : "Save", + resetButton : "Reset", + cancelButton : "Cancel", + textAngle : 'Text Angle', + fontName : 'Font Name', + drawSampleRotatedText : 'angle', + boldTitle : 'Bold', + boldCharacter : 'B', + italicTitle : 'Italic', + italicCharacter : 'I', + underlineTitle : 'Underline', + underlineCharacter : 'U', + addMessage : 'You can now make your drawing on map', + editMessage : 'NB : you can modify/moove geometry on map', + snappingMessage : 'NB : snapping is allowed (use CTRL)', + hideOption : 'Hide drawings', + textPlacement : 'Placement' + }), + "ar" : 1, + "cs" : 1, + "da" : 1, + "de" : 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/nls/sv/strings.js b/nls/sv/strings.js index 4927052..cf54c41 100644 --- a/nls/sv/strings.js +++ b/nls/sv/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Rita", selectDrawMode: "Välj ritläge", diff --git a/nls/th/strings.js b/nls/th/strings.js index ed74d35..26d5fab 100644 --- a/nls/th/strings.js +++ b/nls/th/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "วาด", selectDrawMode: "เลือกโหมดการวาด", diff --git a/nls/tr/strings.js b/nls/tr/strings.js index 0cd2b0a..ae56c1e 100644 --- a/nls/tr/strings.js +++ b/nls/tr/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Çiz", selectDrawMode: "Çizim modu seç", diff --git a/nls/vi/strings.js b/nls/vi/strings.js index ad7b74a..dba60b3 100644 --- a/nls/vi/strings.js +++ b/nls/vi/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "Vẽ", selectDrawMode: "Chọn chế độ vẽ", diff --git a/nls/zh-cn/strings.js b/nls/zh-cn/strings.js index d7b79e2..de577e5 100644 --- a/nls/zh-cn/strings.js +++ b/nls/zh-cn/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ _widgetLabel: "绘图", selectDrawMode: "选择绘制模式", diff --git a/setting/Setting.html b/setting/Setting.html index 9759458..03dce65 100644 --- a/setting/Setting.html +++ b/setting/Setting.html @@ -41,20 +41,22 @@

-
-
-
- - ${nls.addDistance} -
-
-
-
-
- - ${nls.addArea} -
-
-
-
+
${nls.defineUnits}
+
+
+
+ + ${nls.addDistance} +
+
+
+
+
+ + ${nls.addArea} +
+
+
+
+
\ No newline at end of file diff --git a/setting/Setting.js b/setting/Setting.js index 29b24a3..d295363 100644 --- a/setting/Setting.js +++ b/setting/Setting.js @@ -13,520 +13,564 @@ // See the License for the specific language governing permissions and // limitations under the License. /////////////////////////////////////////////////////////////////////////// + define([ - 'dojo/_base/declare', - 'dojo/_base/lang', - 'dojo/_base/array', - 'dojo/_base/html', - 'dojo/_base/query', - 'dojo/on', - 'dijit/_WidgetsInTemplateMixin', - 'jimu/BaseWidgetSetting', - 'jimu/dijit/TabContainer', - 'jimu/dijit/SimpleTable', - 'jimu/dijit/Message', - 'jimu/utils', - 'dijit/form/Select' - ], - function(declare, lang, array, html, query, on, _WidgetsInTemplateMixin, BaseWidgetSetting, TabContainer, SimpleTable, Message, jimuUtils, Select) { - return declare([BaseWidgetSetting, _WidgetsInTemplateMixin], { - baseClass: 'jimu-widget-draw-setting', - distanceUnits: null, - areaUnits: null, - - localStorageKeyMessage: function() { - new Message({ - message: this.nls.localStorageKeyInfo - }); - - }, - - postMixInProperties: function() { - this.inherited(arguments); - - this.distanceUnits = [{ - value: 'KILOMETERS', - label: this.nls.kilometers, - abbr: this.nls.kilometersAbbreviation || 'km', - conversion: jimuUtils.localizeNumber(0.001, { - places: 3 - }) - }, { - value: 'MILES', - label: this.nls.miles, - abbr: this.nls.milesAbbreviation || 'mi', - conversion: jimuUtils.localizeNumber(0.000621, { - places: 6 - }) - }, { - value: 'METERS', - label: this.nls.meters, - abbr: this.nls.metersAbbreviation || 'm', - conversion: jimuUtils.localizeNumber(1) - }, { - value: 'NAUTICAL_MILES', - label: this.nls.nauticals, - abbr: this.nls.nauticalsAbbreviation || 'nm', - conversion: jimuUtils.localizeNumber(0.00053957, { - places: 7 - }) - }, { - value: 'FEET', - label: this.nls.feet, - abbr: this.nls.feetAbbreviation || 'ft', - conversion: jimuUtils.localizeNumber(3.2808, { - places: 4 - }) - }, { - value: 'YARDS', - label: this.nls.yards, - abbr: this.nls.yardsAbbreviation || 'yd', - conversion: jimuUtils.localizeNumber(1.0936133, { - places: 7 - }) - }]; - - this.areaUnits = [{ - value: 'SQUARE_KILOMETERS', - label: this.nls.squareKilometers, - abbr: this.nls.squareKilometersAbbreviation || 'sq km', - conversion: jimuUtils.localizeNumber(0.000001, { - places: 6 - }) - }, { - value: 'SQUARE_MILES', - label: this.nls.squareMiles, - abbr: this.nls.squareMilesAbbreviation || 'sq mi', - conversion: jimuUtils.localizeNumber(3.861021, { - places: 6 - }) + 'e-7' - //0.0000003861021 - }, { - value: 'ACRES', - label: this.nls.acres, - abbr: this.nls.acresAbbreviation || 'ac', - conversion: jimuUtils.localizeNumber(0.00024710538147, { - places: 14 - }) - }, { - value: 'HECTARES', - label: this.nls.hectares, - abbr: this.nls.hectaresAbbreviation || 'ha', - conversion: jimuUtils.localizeNumber(0.0001, { - places: 4 - }) - }, { - value: 'SQUARE_METERS', - label: this.nls.squareMeters, - abbr: this.nls.squareMetersAbbreviation || 'sq m', - conversion: jimuUtils.localizeNumber(1) - }, { - value: 'SQUARE_FEET', - label: this.nls.squareFeet, - abbr: this.nls.squareFeetAbbreviation || 'sq ft', - conversion: jimuUtils.localizeNumber(10.763910417, { - places: 9 - }) - }, { - value: 'SQUARE_YARDS', - label: this.nls.squareYards, - abbr: this.nls.squareYardsAbbreviation || 'sq yd', - conversion: jimuUtils.localizeNumber(1.19599005, { - places: 8 - }) - }]; - }, - - postCreate: function() { - this.inherited(arguments); - this.own(on(this.btnAddDistance, 'click', lang.hitch(this, this._addDistance))); - this.own(on(this.btnAddArea, 'click', lang.hitch(this, this._addArea))); - this.own(on(this.btnAddFontFamily, 'click', lang.hitch(this, this._addFontFamily))); - this.own(on(this.distanceTable, 'row-delete', lang.hitch(this, function(tr) { - if (tr.select) { - tr.select.destroy(); - delete tr.select; - } - this._resetDistanceSelectOptions(); - }))); - this.own(on(this.areaTable, 'row-delete', lang.hitch(this, function(tr) { - if (tr.select) { - tr.select.destroy(); - delete tr.select; - } - this._resetAreaSelectOptions(); - }))); - this.setConfig(this.config); - }, - - startup: function() { - this.inherited(arguments); - - this.tabContainer = new TabContainer({ - tabs: [{ - title: this.nls.distance, - content: this.distanceTabNode - }, { - title: this.nls.area, - content: this.areaTabNode - }], - isNested: true - }, this.content); - this.tabContainer.startup(); - }, - - setConfig: function(config) { - this.config = config; - this._setDistanceTable(this.config.distanceUnits); - this._setAreaTable(this.config.areaUnits); - this._setTextPlusFontFamilyTable(this.config); - - this.exportFileNameInput.value = (config.exportFileName) ? config.exportFileName : this.nls.exportFileName; - this.confirmOnDeleteInput.checked = (config.confirmOnDelete) ? true : false; - this.allowImportExportInput.checked = (config.allowImportExport) ? true : false; - this.allowLocalStorageInput.checked = (config.allowLocalStorage) ? true : false; - this.localStorageKeyInput.value = (config.localStorageKey) ? config.localStorageKey : ''; - - //Text plus FontFamily - this._setTextPlusFontFamilyTable(config); - }, - - _setTextPlusFontFamilyTable: function(config) { - var options = - (config.drawPlus && config.drawPlus.fontFamilies && config.drawPlus.fontFamilies.length > 0) ? config.drawPlus.fontFamilies : [{ - "label": "Arial", - "value": "Arial" - }, { - "label": "Helvetica", - "value": "Helvetica" - }, { - "label": "Times New Roman", - "value": "Times New Roman" - }, { - "label": "Courier New", - "value": "Courier New" - }]; - - this.textPlusFontFamilyTable.clear(); - for (var i in options) - this.textPlusFontFamilyTable.addRow(options[i]); - }, - - _setDistanceTable: function(distanceUnits) { - this.distanceTable.clear(); - array.forEach(distanceUnits, lang.hitch(this, function(item) { - var defaultUnitInfo = this._getDistanceUnitInfo(item.unit); - if (!defaultUnitInfo) { - return; - } - defaultUnitInfo.abbr = item.abbr; - this._addDistanceUnitRow(defaultUnitInfo); - })); - }, - - _setAreaTable: function(areaUnits) { - this.areaTable.clear(); - array.forEach(areaUnits, lang.hitch(this, function(item) { - var defaultUnitInfo = this._getAreaUnitInfo(item.unit); - if (!defaultUnitInfo) { - return; - } - defaultUnitInfo.abbr = item.abbr; - this._addAreaUnitRow(defaultUnitInfo); - })); - }, - - getConfig: function() { - var config = { - distanceUnits: [], - areaUnits: [] - }; - config.distanceUnits = this._getDistanceConfig(); - config.areaUnits = this._getAreaConfig(); - - config.exportFileName = (this.exportFileNameInput.value.trim() != "") ? this.exportFileNameInput.value.trim() : this.nls.exportFileName; - config.confirmOnDelete = this.confirmOnDeleteInput.checked; - config.allowImportExport = this.allowImportExportInput.checked; - config.allowLocalStorage = this.allowLocalStorageInput.checked; - var key = this.localStorageKeyInput.value.trim(); - config.localStorageKey = (key == "") ? false : key; - - if (!config["drawPlus"]) - config["drawPlus"] = {}; - var FontFamilyOptions = array.map(this.textPlusFontFamilyTable.getRows(), lang.hitch(this, function(tr) { - var data = this.textPlusFontFamilyTable.getRowData(tr); - return { - "value": data.value, - "label": data.label - } - })); - config["drawPlus"]["fontFamilies"] = FontFamilyOptions; - - return config; - }, - - _getDistanceConfig: function() { - var result = []; - var trs = this.distanceTable.getRows(); - result = array.map(trs, lang.hitch(this, function(tr) { - var data = this.distanceTable.getRowData(tr); - var select = tr.select; - var unitInfo = { - unit: select.get('value'), - abbr: data.abbr - }; - return unitInfo; - })); - return result; - }, - - _getAreaConfig: function() { - var result = []; - var trs = this.areaTable.getRows(); - result = array.map(trs, lang.hitch(this, function(tr) { - var data = this.areaTable.getRowData(tr); - var select = tr.select; - var unitInfo = { - unit: select.get('value'), - abbr: data.abbr - }; - return unitInfo; - })); - return result; - }, - - _getAllDistanceUnitValues: function() { - var distanceUnitValues = array.map(this.distanceUnits, lang.hitch(this, function(item) { - return item.value; - })); - return distanceUnitValues; - }, - - _getUsedDistanceUnitValues: function() { - var trs = this.distanceTable.getRows(); - var usedDistanceUnitValues = array.map(trs, lang.hitch(this, function(tr) { - return tr.select.get('value'); - })); - return usedDistanceUnitValues; - }, - - _getNotUsedDistanceUnitValues: function() { - var allValues = this._getAllDistanceUnitValues(); - var usedValues = this._getUsedDistanceUnitValues(); - var notUsedValues = array.filter(allValues, lang.hitch(this, function(item) { - return array.indexOf(usedValues, item) < 0; - })); - return notUsedValues; - }, - - _getDistanceUnitInfo: function(value) { - var result = null; - var units = array.filter(this.distanceUnits, lang.hitch(this, function(unit) { - return unit.value === value; - })); - if (units.length > 0) { - result = lang.mixin({}, units[0]); - } - return result; - }, - - _addFontFamily: function() { - console.log("Add font family"); - var data = { - "label": "New font family", - "value": "New font family" - }; - var result = this.textPlusFontFamilyTable.addRow(data); - if (result) - this.textPlusFontFamilyTable.editRow(result.tr, data); - }, - - _addDistance: function() { - var notUsedValues = this._getNotUsedDistanceUnitValues(); - if (notUsedValues.length === 0) { - return; - } - var value = notUsedValues[0]; - var unitInfo = this._getDistanceUnitInfo(value); - this._addDistanceUnitRow(unitInfo); - }, - - _addDistanceUnitRow: function(unitInfo) { - var rowData = { - abbr: unitInfo.abbr, - conversion: unitInfo.conversion - }; - var result = this.distanceTable.addRow(rowData); - if (result.success && result.tr) { - var tr = result.tr; - var td = query('.simple-table-td', tr)[0]; - html.setStyle(td, "verticalAlign", "middle"); - var select = new Select({ - style: { - width: "100%", - height: "30px" - } - }); - select.placeAt(td); - select.startup(); - select.addOption({ - value: unitInfo.value, - label: unitInfo.label, - selected: true - }); - this.own(on(select, 'change', lang.hitch(this, this._resetDistanceSelectOptions))); - tr.select = select; - } - this._resetDistanceSelectOptions(); - }, - - _showCorrectDistanceInfoBySelectedOption: function(tr) { - var select = tr.select; - var unitInfo = this._getDistanceUnitInfo(select.value); - var rowData = { - abbr: unitInfo.abbr, - conversion: unitInfo.conversion - }; - this.distanceTable.editRow(tr, rowData); - }, - - _resetDistanceSelectOptions: function() { - var trs = this.distanceTable.getRows(); - var selects = array.map(trs, lang.hitch(this, function(tr) { - return tr.select; - })); - var notUsedValues = this._getNotUsedDistanceUnitValues(); - var notUsedUnitsInfo = array.map(notUsedValues, lang.hitch(this, function(value) { - return this._getDistanceUnitInfo(value); - })); - array.forEach(selects, lang.hitch(this, function(select, index) { - var currentValue = select.get('value'); - var notSelectedOptions = array.filter(select.getOptions(), lang.hitch(this, function(option) { - return option.value !== currentValue; - })); - select.removeOption(notSelectedOptions); - array.forEach(notUsedUnitsInfo, lang.hitch(this, function(unitInfo) { - select.addOption({ - value: unitInfo.value, - label: unitInfo.label - }); - })); - select.set('value', currentValue); - var tr = trs[index]; - this._showCorrectDistanceInfoBySelectedOption(tr); - })); - }, - - _getAllAreaUnitValues: function() { - var areaUnitValues = array.map(this.areaUnits, lang.hitch(this, function(item) { - return item.value; - })); - return areaUnitValues; - }, - - _getUsedAreaUnitValues: function() { - var trs = this.areaTable.getRows(); - var usedAreaUnitValues = array.map(trs, lang.hitch(this, function(tr) { - return tr.select.get('value'); - })); - return usedAreaUnitValues; - }, - - _getNotUsedAreaUnitValues: function() { - var allValues = this._getAllAreaUnitValues(); - var usedValues = this._getUsedAreaUnitValues(); - var notUsedValues = array.filter(allValues, lang.hitch(this, function(item) { - return array.indexOf(usedValues, item) < 0; - })); - return notUsedValues; - }, - - _getAreaUnitInfo: function(value) { - var result = null; - var units = array.filter(this.areaUnits, lang.hitch(this, function(unit) { - return unit.value === value; - })); - if (units.length > 0) { - result = lang.mixin({}, units[0]); - } - return result; - }, - - _addArea: function() { - var notUsedValues = this._getNotUsedAreaUnitValues(); - if (notUsedValues.length === 0) { - return; - } - var value = notUsedValues[0]; - var unitInfo = this._getAreaUnitInfo(value); - this._addAreaUnitRow(unitInfo); - }, - - _addAreaUnitRow: function(unitInfo) { - var rowData = { - abbr: unitInfo.abbr, - conversion: unitInfo.conversion - }; - var result = this.areaTable.addRow(rowData); - if (result.success && result.tr) { - var tr = result.tr; - var td = query('.simple-table-td', tr)[0]; - html.setStyle(td, "verticalAlign", "middle"); - var select = new Select({ - style: { - width: "100%", - height: "30px" - } - }); - select.placeAt(td); - select.startup(); - select.addOption({ - value: unitInfo.value, - label: unitInfo.label, - selected: true - }); - this.own(on(select, 'change', lang.hitch(this, this._resetAreaSelectOptions))); - tr.select = select; - } - this._resetAreaSelectOptions(); - }, - - _showCorrectAreaInfoBySelectedOption: function(tr) { - var select = tr.select; - var unitInfo = this._getAreaUnitInfo(select.value); - var rowData = { - abbr: unitInfo.abbr, - conversion: unitInfo.conversion - }; - this.areaTable.editRow(tr, rowData); - }, - - _resetAreaSelectOptions: function() { - var trs = this.areaTable.getRows(); - var selects = array.map(trs, lang.hitch(this, function(tr) { - return tr.select; - })); - var notUsedValues = this._getNotUsedAreaUnitValues(); - var notUsedUnitsInfo = array.map(notUsedValues, lang.hitch(this, function(value) { - return this._getAreaUnitInfo(value); - })); - array.forEach(selects, lang.hitch(this, function(select, index) { - var currentValue = select.get('value'); - var notSelectedOptions = array.filter(select.getOptions(), lang.hitch(this, function(option) { - return option.value !== currentValue; - })); - select.removeOption(notSelectedOptions); - array.forEach(notUsedUnitsInfo, lang.hitch(this, function(unitInfo) { - select.addOption({ - value: unitInfo.value, - label: unitInfo.label - }); - })); - select.set('value', currentValue); - var tr = trs[index]; - this._showCorrectAreaInfoBySelectedOption(tr); - })); - } - - }); - }); \ No newline at end of file + 'dojo/_base/declare', + 'dojo/_base/lang', + 'dojo/_base/array', + 'dojo/_base/html', + 'dojo/_base/query', + 'dojo/on', + 'dijit/_WidgetsInTemplateMixin', + 'jimu/BaseWidgetSetting', + 'jimu/dijit/TabContainer', + 'jimu/utils', + 'dijit/form/Select', + 'jimu/dijit/CheckBox', + 'jimu/dijit/SimpleTable', + 'jimu/dijit/Message' + ], + function (declare, lang, array, html, query, on, _WidgetsInTemplateMixin, BaseWidgetSetting, + TabContainer, jimuUtils, Select, CheckBox, SimpleTable, Message) { + + return declare([BaseWidgetSetting, _WidgetsInTemplateMixin], { + baseClass : 'jimu-widget-draw-setting', + distanceUnits : null, + areaUnits : null, + + _disabledClass : "jimu-state-disabled", + localStorageKeyMessage : function () { + new Message({ + message : this.nls.localStorageKeyInfo + }); + + }, + + postMixInProperties : function () { + this.inherited(arguments); + + this.distanceUnits = [{ + value : 'KILOMETERS', + label : this.nls.kilometers, + abbr : this.nls.kilometersAbbreviation || 'km', + conversion : jimuUtils.localizeNumber(0.001, { + places : 3 + }) + }, { + value : 'MILES', + label : this.nls.miles, + abbr : this.nls.milesAbbreviation || 'mi', + conversion : jimuUtils.localizeNumber(0.000621, { + places : 6 + }) + }, { + value : 'METERS', + label : this.nls.meters, + abbr : this.nls.metersAbbreviation || 'm', + conversion : jimuUtils.localizeNumber(1) + }, { + value : 'NAUTICAL_MILES', + label : this.nls.nauticals, + abbr : this.nls.nauticalsAbbreviation || 'nm', + conversion : jimuUtils.localizeNumber(0.00053957, { + places : 7 + }) + }, { + value : 'FEET', + label : this.nls.feet, + abbr : this.nls.feetAbbreviation || 'ft', + conversion : jimuUtils.localizeNumber(3.2808, { + places : 4 + }) + }, { + value : 'YARDS', + label : this.nls.yards, + abbr : this.nls.yardsAbbreviation || 'yd', + conversion : jimuUtils.localizeNumber(1.0936133, { + places : 7 + }) + } + ]; + + this.areaUnits = [{ + value : 'SQUARE_KILOMETERS', + label : this.nls.squareKilometers, + abbr : this.nls.squareKilometersAbbreviation || 'sq km', + conversion : jimuUtils.localizeNumber(0.000001, { + places : 6 + }) + }, { + value : 'SQUARE_MILES', + label : this.nls.squareMiles, + abbr : this.nls.squareMilesAbbreviation || 'sq mi', + conversion : jimuUtils.localizeNumber(3.861021, { + places : 6 + }) + 'e-7' + //0.0000003861021 + }, { + value : 'ACRES', + label : this.nls.acres, + abbr : this.nls.acresAbbreviation || 'ac', + conversion : jimuUtils.localizeNumber(0.00024710538147, { + places : 14 + }) + }, { + value : 'HECTARES', + label : this.nls.hectares, + abbr : this.nls.hectaresAbbreviation || 'ha', + conversion : jimuUtils.localizeNumber(0.0001, { + places : 4 + }) + }, { + value : 'SQUARE_METERS', + label : this.nls.squareMeters, + abbr : this.nls.squareMetersAbbreviation || 'sq m', + conversion : jimuUtils.localizeNumber(1) + }, { + value : 'SQUARE_FEET', + label : this.nls.squareFeet, + abbr : this.nls.squareFeetAbbreviation || 'sq ft', + conversion : jimuUtils.localizeNumber(10.763910417, { + places : 9 + }) + }, { + value : 'SQUARE_YARDS', + label : this.nls.squareYards, + abbr : this.nls.squareYardsAbbreviation || 'sq yd', + conversion : jimuUtils.localizeNumber(1.19599005, { + places : 8 + }) + } + ]; + }, + + postCreate : function () { + this.inherited(arguments); + // this.cbxOperationalLayer = new CheckBox({ + // label : this.nls.operationalLayer, + // style : 'margin-top:10px;' + // }); + // html.addClass(this.cbxOperationalLayer.domNode, 'tip'); + // this.cbxOperationalLayer.placeAt(this.domNode); + this.own(on(this.btnAddDistance, 'click', lang.hitch(this, this._addDistance))); + this.own(on(this.btnAddArea, 'click', lang.hitch(this, this._addArea))); + this.own(on(this.btnAddFontFamily, 'click', lang.hitch(this, this._addFontFamily))); + this.own(on(this.distanceTable, 'row-delete', lang.hitch(this, function (tr) { + if (tr.select) { + tr.select.destroy(); + delete tr.select; + } + this._resetDistanceSelectOptions(); + this._checkStatusForBtnAddDistance(); + }))); + this.own(on(this.areaTable, 'row-delete', lang.hitch(this, function (tr) { + if (tr.select) { + tr.select.destroy(); + delete tr.select; + } + this._resetAreaSelectOptions(); + this._checkStatusForBtnAddArea(); + }))); + this.setConfig(this.config); + }, + + startup : function () { + this.inherited(arguments); + + this.tabContainer = new TabContainer({ + tabs : [{ + title : this.nls.distance, + content : this.distanceTabNode + }, { + title : this.nls.area, + content : this.areaTabNode + } + ], + isNested : true + }, this.content); + this.tabContainer.startup(); + }, + + setConfig : function (config) { + config.isOperationalLayer = !!config.isOperationalLayer; + this.config = config; + this._setDistanceTable(this.config.distanceUnits); + this._setAreaTable(this.config.areaUnits); + // this.cbxOperationalLayer.setValue(config.isOperationalLayer); + + this._setTextPlusFontFamilyTable(this.config); + + this.exportFileNameInput.value = (config.exportFileName) ? config.exportFileName : this.nls.exportFileName; + this.confirmOnDeleteInput.checked = (config.confirmOnDelete) ? true : false; + this.allowImportExportInput.checked = (config.allowImportExport) ? true : false; + this.allowLocalStorageInput.checked = (config.allowLocalStorage) ? true : false; + this.localStorageKeyInput.value = (config.localStorageKey) ? config.localStorageKey : ''; + + //Text plus FontFamily + this._setTextPlusFontFamilyTable(config); + }, + + _setTextPlusFontFamilyTable : function (config) { + var options = + (config.drawPlus && config.drawPlus.fontFamilies && config.drawPlus.fontFamilies.length > 0) ? config.drawPlus.fontFamilies : [{ + "label" : "Arial", + "value" : "Arial" + }, { + "label" : "Helvetica", + "value" : "Helvetica" + }, { + "label" : "Times New Roman", + "value" : "Times New Roman" + }, { + "label" : "Courier New", + "value" : "Courier New" + } + ]; + + this.textPlusFontFamilyTable.clear(); + for (var i in options) + this.textPlusFontFamilyTable.addRow(options[i]); + }, + + _setDistanceTable : function (distanceUnits) { + this.distanceTable.clear(); + array.forEach(distanceUnits, lang.hitch(this, function (item) { + var defaultUnitInfo = this._getDistanceUnitInfo(item.unit); + if (!defaultUnitInfo) { + return; + } + defaultUnitInfo.abbr = item.abbr; + this._addDistanceUnitRow(defaultUnitInfo); + })); + }, + + _setAreaTable : function (areaUnits) { + this.areaTable.clear(); + array.forEach(areaUnits, lang.hitch(this, function (item) { + var defaultUnitInfo = this._getAreaUnitInfo(item.unit); + if (!defaultUnitInfo) { + return; + } + defaultUnitInfo.abbr = item.abbr; + this._addAreaUnitRow(defaultUnitInfo); + })); + }, + + getConfig : function () { + var config = { + distanceUnits : [], + areaUnits : [], + isOperationalLayer : false + }; + config.distanceUnits = this._getDistanceConfig(); + config.areaUnits = this._getAreaConfig(); + // config.isOperationalLayer = this.cbxOperationalLayer.getValue(); + + config.exportFileName = (this.exportFileNameInput.value.trim() != "") ? this.exportFileNameInput.value.trim() : this.nls.exportFileName; + config.confirmOnDelete = this.confirmOnDeleteInput.checked; + config.allowImportExport = this.allowImportExportInput.checked; + config.allowLocalStorage = this.allowLocalStorageInput.checked; + var key = this.localStorageKeyInput.value.trim(); + config.localStorageKey = (key == "") ? false : key; + + if (!config["drawPlus"]) + config["drawPlus"] = {}; + var FontFamilyOptions = array.map(this.textPlusFontFamilyTable.getRows(), lang.hitch(this, function (tr) { + var data = this.textPlusFontFamilyTable.getRowData(tr); + return { + "value" : data.value, + "label" : data.label + } + })); + config["drawPlus"]["fontFamilies"] = FontFamilyOptions; + + return config; + }, + + _getDistanceConfig : function () { + var result = []; + var trs = this.distanceTable.getRows(); + result = array.map(trs, lang.hitch(this, function (tr) { + var data = this.distanceTable.getRowData(tr); + var select = tr.select; + var unitInfo = { + unit : select.get('value'), + abbr : data.abbr + }; + return unitInfo; + })); + return result; + }, + + _getAreaConfig : function () { + var result = []; + var trs = this.areaTable.getRows(); + result = array.map(trs, lang.hitch(this, function (tr) { + var data = this.areaTable.getRowData(tr); + var select = tr.select; + var unitInfo = { + unit : select.get('value'), + abbr : data.abbr + }; + return unitInfo; + })); + return result; + }, + + _getAllDistanceUnitValues : function () { + var distanceUnitValues = array.map(this.distanceUnits, lang.hitch(this, function (item) { + return item.value; + })); + return distanceUnitValues; + }, + + _getUsedDistanceUnitValues : function () { + var trs = this.distanceTable.getRows(); + var usedDistanceUnitValues = array.map(trs, lang.hitch(this, function (tr) { + return tr.select.get('value'); + })); + return usedDistanceUnitValues; + }, + + _getNotUsedDistanceUnitValues : function () { + var allValues = this._getAllDistanceUnitValues(); + var usedValues = this._getUsedDistanceUnitValues(); + var notUsedValues = array.filter(allValues, lang.hitch(this, function (item) { + return array.indexOf(usedValues, item) < 0; + })); + return notUsedValues; + }, + + _getDistanceUnitInfo : function (value) { + var result = null; + var units = array.filter(this.distanceUnits, lang.hitch(this, function (unit) { + return unit.value === value; + })); + if (units.length > 0) { + result = lang.mixin({}, units[0]); + } + return result; + }, + + _addFontFamily : function () { + console.log("Add font family"); + var data = { + "label" : "New font family", + "value" : "New font family" + }; + var result = this.textPlusFontFamilyTable.addRow(data); + if (result) + this.textPlusFontFamilyTable.editRow(result.tr, data); + }, + + _addDistance : function () { + var notUsedValues = this._getNotUsedDistanceUnitValues(); + if (notUsedValues.length === 0) { + return; + } + var value = notUsedValues[0]; + var unitInfo = this._getDistanceUnitInfo(value); + this._addDistanceUnitRow(unitInfo); + }, + + _checkStatusForBtnAddDistance : function () { + var notUsedValues = this._getNotUsedDistanceUnitValues(); + if (notUsedValues.length === 0) { + html.addClass(this.btnAddDistance, this._disabledClass); + html.addClass(this.btnAddDistanceIcon, this._disabledClass); + } else { + html.removeClass(this.btnAddDistance, this._disabledClass); + html.removeClass(this.btnAddDistanceIcon, this._disabledClass); + } + }, + + _addDistanceUnitRow : function (unitInfo) { + var rowData = { + abbr : unitInfo.abbr, + conversion : unitInfo.conversion + }; + var result = this.distanceTable.addRow(rowData); + if (result.success && result.tr) { + var tr = result.tr; + var td = query('.simple-table-cell', tr)[0]; + html.setStyle(td, "verticalAlign", "middle"); + var select = new Select({ + style : "width:100%;height:18px;line-height:18px;" + + }); + select.placeAt(td); + select.startup(); + select.addOption({ + value : unitInfo.value, + label : unitInfo.label, + selected : true + }); + this.own(on(select, 'change', lang.hitch(this, this._resetDistanceSelectOptions))); + tr.select = select; + } + this._resetDistanceSelectOptions(); + this._checkStatusForBtnAddDistance(); + }, + + _showCorrectDistanceInfoBySelectedOption : function (tr) { + var select = tr.select; + var unitInfo = this._getDistanceUnitInfo(select.value); + var rowData = { + abbr : unitInfo.abbr, + conversion : unitInfo.conversion + }; + this.distanceTable.editRow(tr, rowData); + }, + + _resetDistanceSelectOptions : function () { + var trs = this.distanceTable.getRows(); + var selects = array.map(trs, lang.hitch(this, function (tr) { + return tr.select; + })); + var notUsedValues = this._getNotUsedDistanceUnitValues(); + var notUsedUnitsInfo = array.map(notUsedValues, lang.hitch(this, function (value) { + return this._getDistanceUnitInfo(value); + })); + array.forEach(selects, lang.hitch(this, function (select, index) { + var currentValue = select.get('value'); + var notSelectedOptions = array.filter(select.getOptions(), + lang.hitch(this, function (option) { + return option.value !== currentValue; + })); + select.removeOption(notSelectedOptions); + array.forEach(notUsedUnitsInfo, lang.hitch(this, function (unitInfo) { + select.addOption({ + value : unitInfo.value, + label : unitInfo.label + }); + })); + select.set('value', currentValue); + var tr = trs[index]; + this._showCorrectDistanceInfoBySelectedOption(tr); + })); + }, + + _getAllAreaUnitValues : function () { + var areaUnitValues = array.map(this.areaUnits, lang.hitch(this, function (item) { + return item.value; + })); + return areaUnitValues; + }, + + _getUsedAreaUnitValues : function () { + var trs = this.areaTable.getRows(); + var usedAreaUnitValues = array.map(trs, lang.hitch(this, function (tr) { + return tr.select.get('value'); + })); + return usedAreaUnitValues; + }, + + _getNotUsedAreaUnitValues : function () { + var allValues = this._getAllAreaUnitValues(); + var usedValues = this._getUsedAreaUnitValues(); + var notUsedValues = array.filter(allValues, lang.hitch(this, function (item) { + return array.indexOf(usedValues, item) < 0; + })); + return notUsedValues; + }, + + _getAreaUnitInfo : function (value) { + var result = null; + var units = array.filter(this.areaUnits, lang.hitch(this, function (unit) { + return unit.value === value; + })); + if (units.length > 0) { + result = lang.mixin({}, units[0]); + } + return result; + }, + + _addArea : function () { + var notUsedValues = this._getNotUsedAreaUnitValues(); + if (notUsedValues.length === 0) { + return; + } + var value = notUsedValues[0]; + var unitInfo = this._getAreaUnitInfo(value); + this._addAreaUnitRow(unitInfo); + }, + + _checkStatusForBtnAddArea : function () { + var notUsedValues = this._getNotUsedAreaUnitValues(); + if (notUsedValues.length === 0) { + html.addClass(this.btnAddArea, this._disabledClass); + html.addClass(this.btnAddAreaIcon, this._disabledClass); + } else { + html.removeClass(this.btnAddArea, this._disabledClass); + html.removeClass(this.btnAddAreaIcon, this._disabledClass); + } + }, + + _addAreaUnitRow : function (unitInfo) { + var rowData = { + abbr : unitInfo.abbr, + conversion : unitInfo.conversion + }; + var result = this.areaTable.addRow(rowData); + if (result.success && result.tr) { + var tr = result.tr; + var td = query('.simple-table-cell', tr)[0]; + html.setStyle(td, "verticalAlign", "middle"); + var select = new Select({ + style : "width:100%;height:18px;line-height:18px;" + + }); + select.placeAt(td); + select.startup(); + select.addOption({ + value : unitInfo.value, + label : unitInfo.label, + selected : true + }); + this.own(on(select, 'change', lang.hitch(this, this._resetAreaSelectOptions))); + tr.select = select; + } + this._resetAreaSelectOptions(); + this._checkStatusForBtnAddArea(); + }, + + _showCorrectAreaInfoBySelectedOption : function (tr) { + var select = tr.select; + var unitInfo = this._getAreaUnitInfo(select.value); + var rowData = { + abbr : unitInfo.abbr, + conversion : unitInfo.conversion + }; + this.areaTable.editRow(tr, rowData); + }, + + _resetAreaSelectOptions : function () { + var trs = this.areaTable.getRows(); + var selects = array.map(trs, lang.hitch(this, function (tr) { + return tr.select; + })); + var notUsedValues = this._getNotUsedAreaUnitValues(); + var notUsedUnitsInfo = array.map(notUsedValues, lang.hitch(this, function (value) { + return this._getAreaUnitInfo(value); + })); + array.forEach(selects, lang.hitch(this, function (select, index) { + var currentValue = select.get('value'); + var notSelectedOptions = array.filter(select.getOptions(), + lang.hitch(this, function (option) { + return option.value !== currentValue; + })); + select.removeOption(notSelectedOptions); + array.forEach(notUsedUnitsInfo, lang.hitch(this, function (unitInfo) { + select.addOption({ + value : unitInfo.value, + label : unitInfo.label + }); + })); + select.set('value', currentValue); + var tr = trs[index]; + this._showCorrectAreaInfoBySelectedOption(tr); + })); + } + + }); +}); diff --git a/setting/css/style.css b/setting/css/style.css index 57e033e..16f606f 100644 --- a/setting/css/style.css +++ b/setting/css/style.css @@ -1,32 +1,35 @@ -.jimu-widget-draw-setting .btn-add-section { - display: inline-block; - overflow: hidden; - height: 24px; - margin-left: 1px; - margin-bottom: 3px; - cursor: pointer; - font-size: 13px; - color: #538ec8; - margin-top: 8px; -} -.jimu-widget-draw-setting .btn-add-section .btn-add-icon { - height: 100%; - width: 14px; - background-repeat: no-repeat; - background-position: center center; - background-image: url(images/add.png); -} -.jimu-widget-draw-setting .btn-add-section .btn-add-label { - height: 100%; - line-height: 24px; - vertical-align: middle; - margin-left: 7px; - text-decoration: underline; -} -.jimu-rtl .jimu-widget-draw-setting .btn-add-section .btn-add-label { - margin-left: 0; - margin-right: 7px; +.jimu-widget-draw-setting .add-with-icon{ + margin-top:8px; + margin-bottom:3px; } + +.jimu-widget-draw-setting .jimu-tab{ + position: static; +} + +.jimu-widget-draw-setting .jimu-tab>.jimu-viewstack{ + position: static; + top: auto; + left: auto; + right: auto; + bottom: auto; + height: auto; +} + +.jimu-widget-draw-setting .jimu-viewstack>.view{ + height: auto; +} + +.jimu-widget-draw-setting .tip{ + color: #596679; + font-size: 14px; +} + +.jimu-widget-draw-setting .add-with-icon.jimu-state-disabled{ + color: #ccc; + cursor: default; +} + .jimu-widget-draw-setting .settings { list-style-type: none; display: table; diff --git a/setting/nls/ar/strings.js b/setting/nls/ar/strings.js index 5dd15eb..f81edfa 100644 --- a/setting/nls/ar/strings.js +++ b/setting/nls/ar/strings.js @@ -21,6 +21,20 @@ squareFeet: "قدم مربع", squareYards: "ياردات مربعة", distance: "مسافات", - area: "مناطق" + area: "مناطق", + kilometersAbbreviation: "كم", + milesAbbreviation: "ميل", + metersAbbreviation: "متر", + feetAbbreviation: "قدم", + yardsAbbreviation: "ياردة", + squareKilometersAbbreviation: "كم مربع", + squareMilesAbbreviation: "ميل مربع", + acresAbbreviation: "ac", + hectaresAbbreviation: "هكتار", + squareMetersAbbreviation: "متر مربع", + squareFeetAbbreviation: "قدم مربع", + squareYardsAbbreviation: "ياردة مربعة", + defineUnits: "تعريف وحدات القياس.", + operationalLayer: "إضافة الرسم باعتباره طبقة تشغيلية بالخريطة." }) ); \ No newline at end of file diff --git a/setting/nls/cs/strings.js b/setting/nls/cs/strings.js index c55c99a..e13ee53 100644 --- a/setting/nls/cs/strings.js +++ b/setting/nls/cs/strings.js @@ -21,6 +21,20 @@ squareFeet: "Čtvereční stopy", squareYards: "Čtvereční yardy", distance: "Vzdálenosti", - area: "Plochy" + area: "Plochy", + kilometersAbbreviation: "km", + milesAbbreviation: "míle", + metersAbbreviation: "m", + feetAbbreviation: "stopy", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "čtver. km", + squareMilesAbbreviation: "čtver. míl.", + acresAbbreviation: "akr", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "čtver. m", + squareFeetAbbreviation: "čtver. stopy", + squareYardsAbbreviation: "čtver. yd.", + defineUnits: "Definujte jednotky měření.", + operationalLayer: "Přidejte výkres jako operační vrstvu mapy." }) ); \ No newline at end of file diff --git a/setting/nls/da/strings.js b/setting/nls/da/strings.js index 660395b..520c15f 100644 --- a/setting/nls/da/strings.js +++ b/setting/nls/da/strings.js @@ -21,6 +21,20 @@ squareFeet: "Square feet", squareYards: "Square yards", distance: "Afstande", - area: "Områder" + area: "Områder", + kilometersAbbreviation: "km", + milesAbbreviation: "mile", + metersAbbreviation: "m", + feetAbbreviation: "fod", + yardsAbbreviation: "yard", + squareKilometersAbbreviation: "kvadrat-km", + squareMilesAbbreviation: "kvadrat-miles", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "kvadrat-m", + squareFeetAbbreviation: "kvadratfod", + squareYardsAbbreviation: "kvadratyard", + defineUnits: "Definér måleenheder.", + operationalLayer: "Tilføj tegning som et operationelt lag i kortet." }) ); \ No newline at end of file diff --git a/setting/nls/de/strings.js b/setting/nls/de/strings.js index dad8994..46a0889 100644 --- a/setting/nls/de/strings.js +++ b/setting/nls/de/strings.js @@ -21,6 +21,20 @@ squareFeet: "Quadratfuß", squareYards: "Quadratyard", distance: "Entfernungen", - area: "Flächen" + area: "Flächen", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "mi²", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd²", + defineUnits: "Definieren Sie die Maßeinheiten.", + operationalLayer: "Die Zeichnung als operationalen Layer der Karte hinzufügen." }) ); \ No newline at end of file diff --git a/setting/nls/el/strings.js b/setting/nls/el/strings.js new file mode 100644 index 0000000..a71c244 --- /dev/null +++ b/setting/nls/el/strings.js @@ -0,0 +1,40 @@ +define( + ({ + addDistance: "Προσθήκη μονάδας μήκους", + addArea: "Προσθήκη μονάδας εμβαδού", + label: "Ετικέτα", + abbr: "Συντομογραφία", + conversion: "Μετατροπή", + actions: "Ενέργειες", + areaUnits: "Μονάδες εμβαδού", + distanceUnits: "Μονάδες μήκους", + kilometers: "Χιλιόμετρα", + miles: "Μίλια", + meters: "Μέτρα", + feet: "Πόδια", + yards: "Γιάρδες", + squareKilometers: "Τετραγωνικά χιλιόμετρα", + squareMiles: "Τετραγωνικά μίλια", + acres: "Έικρ", + hectares: "Εκτάρια", + squareMeters: "Τετραγωνικά μέτρα", + squareFeet: "Τετραγωνικά πόδια", + squareYards: "Τετραγωνικές γιάρδες", + distance: "Αποστάσεις", + area: "Εμβαδά", + kilometersAbbreviation: "χλμ.", + milesAbbreviation: "μίλ.", + metersAbbreviation: "μ.", + feetAbbreviation: "πόδ.", + yardsAbbreviation: "γιάρδ.", + squareKilometersAbbreviation: "τ.χλμ.", + squareMilesAbbreviation: "τ.μίλ.", + acresAbbreviation: "έικρ", + hectaresAbbreviation: "εκτάρ.", + squareMetersAbbreviation: "τ.μ.", + squareFeetAbbreviation: "τ.πόδ", + squareYardsAbbreviation: "τ.γιάρδ.", + defineUnits: "Καθορίστε τις μονάδες μέτρησης.", + operationalLayer: "Προσθέστε το σχέδιο ως επιχειρησιακό επίπεδο του χάρτη." + }) +); \ No newline at end of file diff --git a/setting/nls/es/strings.js b/setting/nls/es/strings.js index 4967645..8edac48 100644 --- a/setting/nls/es/strings.js +++ b/setting/nls/es/strings.js @@ -21,6 +21,20 @@ squareFeet: "Pies cuadrados", squareYards: "Yardas cuadradas", distance: "Distancias", - area: "Áreas" + area: "Áreas", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "mi²", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd²", + defineUnits: "Define las unidades de medida.", + operationalLayer: "Agrega el dibujo como capa operativa del mapa." }) ); \ No newline at end of file diff --git a/setting/nls/et/strings.js b/setting/nls/et/strings.js index 836bded..c613449 100644 --- a/setting/nls/et/strings.js +++ b/setting/nls/et/strings.js @@ -21,6 +21,20 @@ squareFeet: "Ruutjalga", squareYards: "Ruutjardi", distance: "Vahemaad", - area: "Pindalad" + area: "Pindalad", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "mi²", + acresAbbreviation: "ak", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd²", + defineUnits: "Määra mõõtühikud", + operationalLayer: "Lisa joonistus kaardile töökihina." }) ); \ No newline at end of file diff --git a/setting/nls/fi/strings.js b/setting/nls/fi/strings.js index 61b003f..1154286 100644 --- a/setting/nls/fi/strings.js +++ b/setting/nls/fi/strings.js @@ -21,6 +21,20 @@ squareFeet: "Neliöjalkaa", squareYards: "Neliöjaardia", distance: "Etäisyydet", - area: "Alueet" + area: "Alueet", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "Määritä mittayksiköt.", + operationalLayer: "Lisää piirros kartan toiminnallisena karttatasona." }) ); \ No newline at end of file diff --git a/setting/nls/fr/strings.js b/setting/nls/fr/strings.js index c79b2c6..f93fbfc 100644 --- a/setting/nls/fr/strings.js +++ b/setting/nls/fr/strings.js @@ -1,4 +1,4 @@ -define( +define( ({ addDistance: "Ajouter une unité de longueur", addArea: "Ajouter une unité de surface", @@ -32,6 +32,21 @@ localStorageKeyLabel: "Clé Local storage", localStorageKeyInfo: "Si vide, toutes les applications partageront le même storage. Sinon, les applications avec la même clé partageront le même storage.", exportFileName: "Nom du fichier exporté", - exportFileNameValue: "mesDessins.json" + exportFileNameValue: "mesDessins.json", + kilometersAbbreviation : "km", + milesAbbreviation : "mi", + metersAbbreviation : "m", + nauticalsAbbreviation : "NM", + feetAbbreviation : "ft", + yardsAbbreviation : "yd", + squareKilometersAbbreviation : "km²", + squareMilesAbbreviation : "mi²", + acresAbbreviation : "ac", + hectaresAbbreviation : "ha", + squareMetersAbbreviation : "m²", + squareFeetAbbreviation : "ft²", + squareYardsAbbreviation : "yd²", + defineUnits : "Définir l'unité de mesure.", + operationalLayer : "Ajouter le dessin comme couche opérationnelle de la carte." }) ); \ No newline at end of file diff --git a/setting/nls/he/strings.js b/setting/nls/he/strings.js index 330bd79..29b76cd 100644 --- a/setting/nls/he/strings.js +++ b/setting/nls/he/strings.js @@ -21,6 +21,20 @@ squareFeet: "רגל מרובע", squareYards: "יארדים מרובעים", distance: "מרחקים", - area: "שטחים" + area: "שטחים", + kilometersAbbreviation: "קילומטר", + milesAbbreviation: "מייל", + metersAbbreviation: "מטר", + feetAbbreviation: "רגל", + yardsAbbreviation: "יארד", + squareKilometersAbbreviation: "קילומטר רבוע", + squareMilesAbbreviation: "מייל רבוע", + acresAbbreviation: "אקר", + hectaresAbbreviation: "האקטר‬", + squareMetersAbbreviation: "מטר רבוע", + squareFeetAbbreviation: "‏‫רגל רבוע", + squareYardsAbbreviation: "יארד רבוע", + defineUnits: "הגדר את יחידות המדידה.", + operationalLayer: "הוסף את השרטוט כשכבה תפעולית במפה." }) ); \ No newline at end of file diff --git a/setting/nls/it/strings.js b/setting/nls/it/strings.js index 24c9d57..7413603 100644 --- a/setting/nls/it/strings.js +++ b/setting/nls/it/strings.js @@ -21,6 +21,20 @@ squareFeet: "Piedi quadrati", squareYards: "Iarde quadrate", distance: "Distanze", - area: "Aree" + area: "Aree", + kilometersAbbreviation: "km", + milesAbbreviation: "miglio", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "miglio²", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd²", + defineUnits: "Definire le unità di misura.", + operationalLayer: "Aggiungere il disegno come layer operativo della mappa." }) ); \ No newline at end of file diff --git a/setting/nls/ja/strings.js b/setting/nls/ja/strings.js index 952040a..72d5de4 100644 --- a/setting/nls/ja/strings.js +++ b/setting/nls/ja/strings.js @@ -21,6 +21,20 @@ squareFeet: "平方フィート", squareYards: "平方ヤード", distance: "距離", - area: "面積" + area: "面積", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "計測単位を定義します。", + operationalLayer: "マップの操作レイヤーとして描画を追加します。" }) ); \ No newline at end of file diff --git a/setting/nls/ko/strings.js b/setting/nls/ko/strings.js index cd97553..672e3d7 100644 --- a/setting/nls/ko/strings.js +++ b/setting/nls/ko/strings.js @@ -21,6 +21,20 @@ squareFeet: "제곱피트", squareYards: "제곱야드", distance: "거리", - area: "면적" + area: "면적", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "측정 단위을 정의합니다.", + operationalLayer: "그리기를 맵의 운영 레이어로 추가합니다." }) ); \ No newline at end of file diff --git a/setting/nls/lt/strings.js b/setting/nls/lt/strings.js index 13393bd..5b5de51 100644 --- a/setting/nls/lt/strings.js +++ b/setting/nls/lt/strings.js @@ -21,6 +21,20 @@ squareFeet: "Kvadratinė pėda", squareYards: "Kvadratiniai jardai", distance: "Atstumai", - area: "Plotai" + area: "Plotai", + kilometersAbbreviation: "km", + milesAbbreviation: "myl.", + metersAbbreviation: "m", + feetAbbreviation: "pėd.", + yardsAbbreviation: "jard.", + squareKilometersAbbreviation: "kv. km.", + squareMilesAbbreviation: "kv. mi.", + acresAbbreviation: "akr.", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "kv. m.", + squareFeetAbbreviation: "kv. pėd.", + squareYardsAbbreviation: "kv. jard.", + defineUnits: "Nurodykite matavimo vienetus.", + operationalLayer: "Pridėkite piešinį kaip žemėlapio darbinį sluoksnį." }) ); \ No newline at end of file diff --git a/setting/nls/lv/strings.js b/setting/nls/lv/strings.js index 2d76384..67dcfde 100644 --- a/setting/nls/lv/strings.js +++ b/setting/nls/lv/strings.js @@ -21,6 +21,20 @@ squareFeet: "Kvadrātpēdas", squareYards: "Kvadrātjardi", distance: "Attālumi", - area: "Apgabali" + area: "Apgabali", + kilometersAbbreviation: "km", + milesAbbreviation: "jūdzes", + metersAbbreviation: "m", + feetAbbreviation: "pēdas", + yardsAbbreviation: "jardi", + squareKilometersAbbreviation: "kvadrātkilometri", + squareMilesAbbreviation: "kvadrātjūdzes", + acresAbbreviation: "akri", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "kvadrātmetri", + squareFeetAbbreviation: "kvadrātpēdas", + squareYardsAbbreviation: "kvadrātjardi", + defineUnits: "Definējiet mērvienības.", + operationalLayer: "Pievienojiet zīmējumu kā kartes darbību slāni." }) ); \ No newline at end of file diff --git a/setting/nls/nb/strings.js b/setting/nls/nb/strings.js index 6356f8e..cb132bc 100644 --- a/setting/nls/nb/strings.js +++ b/setting/nls/nb/strings.js @@ -21,6 +21,20 @@ squareFeet: "Kvadratfot", squareYards: "Kvadratyard", distance: "Avstander", - area: "Areas" + area: "Areas", + kilometersAbbreviation: "km", + milesAbbreviation: "mil", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "mi²", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd²", + defineUnits: "Definer måleenhetene.", + operationalLayer: "Legg til tegningen som et operativt lag i kartet." }) ); \ No newline at end of file diff --git a/setting/nls/nl/strings.js b/setting/nls/nl/strings.js index 48af142..acd95ca 100644 --- a/setting/nls/nl/strings.js +++ b/setting/nls/nl/strings.js @@ -21,6 +21,20 @@ squareFeet: "Vierkante voet", squareYards: "Vierkante yard", distance: "Afstanden", - area: "Gebieden" + area: "Gebieden", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "yd²", + defineUnits: "Bepaal de maateenheden.", + operationalLayer: "Voeg de tekening toe als een operationele laag van de kaart." }) ); \ No newline at end of file diff --git a/setting/nls/pl/strings.js b/setting/nls/pl/strings.js index 611fdf9..4cfea72 100644 --- a/setting/nls/pl/strings.js +++ b/setting/nls/pl/strings.js @@ -21,6 +21,20 @@ squareFeet: "Stopy kwadratowe", squareYards: "Jardy kwadratowe", distance: "Odległości", - area: "Obszary" + area: "Obszary", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "st.", + yardsAbbreviation: "jard", + squareKilometersAbbreviation: "km kw.", + squareMilesAbbreviation: "mi kw.", + acresAbbreviation: "akr", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m kw.", + squareFeetAbbreviation: "st. kw.", + squareYardsAbbreviation: "jard kw.", + defineUnits: "Zdefiniuj jednostki pomiarowe.", + operationalLayer: "Dodaj wyświetlanie jako warstwę operacyjną mapy." }) ); \ No newline at end of file diff --git a/setting/nls/pt-br/strings.js b/setting/nls/pt-br/strings.js index f04b473..dd52d14 100644 --- a/setting/nls/pt-br/strings.js +++ b/setting/nls/pt-br/strings.js @@ -21,6 +21,20 @@ squareFeet: "Pés quadrados", squareYards: "Jardas quadradas", distance: "Distâncias", - area: "Áreas" + area: "Áreas", + kilometersAbbreviation: "km", + milesAbbreviation: "milhas", + metersAbbreviation: "m", + feetAbbreviation: "pés", + yardsAbbreviation: "jarda", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "Defina as unidades de medida.", + operationalLayer: "Adicione o desenho como uma camada operacional do mapa." }) ); \ No newline at end of file diff --git a/setting/nls/pt-pt/strings.js b/setting/nls/pt-pt/strings.js index dfad914..0695d75 100644 --- a/setting/nls/pt-pt/strings.js +++ b/setting/nls/pt-pt/strings.js @@ -21,6 +21,20 @@ squareFeet: "Pés quadrados", squareYards: "Jardas quadradas", distance: "Distâncias", - area: "Áreas" + area: "Áreas", + kilometersAbbreviation: "km", + milesAbbreviation: "milhas", + metersAbbreviation: "m", + feetAbbreviation: "pés", + yardsAbbreviation: "jardas", + squareKilometersAbbreviation: "km2", + squareMilesAbbreviation: "milhas2", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m2", + squareFeetAbbreviation: "pés2", + squareYardsAbbreviation: "jardas2", + defineUnits: "Definir unidades de medição.", + operationalLayer: "Adicionar desenho como uma camada operacional do mapa." }) ); \ No newline at end of file diff --git a/setting/nls/ro/strings.js b/setting/nls/ro/strings.js index 78ba469..996f9e8 100644 --- a/setting/nls/ro/strings.js +++ b/setting/nls/ro/strings.js @@ -21,6 +21,20 @@ squareFeet: "Ft. la pătrat", squareYards: "Yd. la pătrat", distance: "Distanţe", - area: "Suprafeţe" + area: "Suprafeţe", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km pătraţi", + squareMilesAbbreviation: "mi pătrate", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m pătraţi", + squareFeetAbbreviation: "ft pătraţi", + squareYardsAbbreviation: "yd pătraţi", + defineUnits: "Definiţi unităţile de măsură.", + operationalLayer: "Adăugaţi desenul ca strat tematic operaţional al hărţii." }) ); \ No newline at end of file diff --git a/setting/nls/ru/strings.js b/setting/nls/ru/strings.js index 554ca6a..03f8c35 100644 --- a/setting/nls/ru/strings.js +++ b/setting/nls/ru/strings.js @@ -21,6 +21,20 @@ squareFeet: "Квадратные футы", squareYards: "Квадратные ярды", distance: "Расстояния", - area: "Площади" + area: "Площади", + kilometersAbbreviation: "км", + milesAbbreviation: "мили", + metersAbbreviation: "м", + feetAbbreviation: "футы", + yardsAbbreviation: "ярды", + squareKilometersAbbreviation: "кв. км.", + squareMilesAbbreviation: "кв. мили", + acresAbbreviation: "акры", + hectaresAbbreviation: "га", + squareMetersAbbreviation: "кв. м.", + squareFeetAbbreviation: "кв. футы", + squareYardsAbbreviation: "кв. ярды", + defineUnits: "Задать единицы измерений.", + operationalLayer: "Добавить на карту чертеж, как операционный слой." }) ); \ No newline at end of file diff --git a/setting/nls/strings.js b/setting/nls/strings.js index ef824df..16cf9f9 100644 --- a/setting/nls/strings.js +++ b/setting/nls/strings.js @@ -1,62 +1,80 @@ define({ - root: ({ - addDistance: "Add Length Unit", - addArea: "Add Area Unit", - addFontFamily: "Add a font family", - label: "Label", - value: "Value", - abbr: "Abbreviation", - conversion: "Conversion", - actions: "Actions", - areaUnits: "Area Units", - distanceUnits: "Length Units", - kilometers: "Kilometers", - miles: "Miles", - meters: "Meters", - nauticals: "Nautical miles", - feet: "Feet", - yards: "Yards", - squareKilometers: "Square kilometers", - squareMiles: "Square miles", - acres: "Acres", - hectares: "Hectares", - squareMeters: "Square meters", - squareFeet: "Square feet", - squareYards: "Square yards", - distance: "Distances", - area: "Areas", - confirmOnDeleteLabel: "Ask for confirmation before deleting ?", - allowImportExportLabel: "Allow import & export ?", - allowLocalStorageLabel: "Use local storage ?", - localStorageKeyLabel: "Local storage key", - localStorageKeyInfo: "If not empty, applications with same key (and same server) will share the same storage. If empty, all will share same storage.", - exportFileName: "Export file name", - exportFileNameValue: "myDrawing.json" - }), - "ar": 1, - "cs": 1, - "da": 1, - "de": 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 + root : ({ + addDistance : "Add Length Unit", + addArea : "Add Area Unit", + addFontFamily : "Add a font family", + label : "Label", + value : "Value", + abbr : "Abbreviation", + conversion : "Conversion", + actions : "Actions", + areaUnits : "Area Units", + distanceUnits : "Length Units", + kilometers : "Kilometers", + miles : "Miles", + meters : "Meters", + nauticals : "Nautical miles", + feet : "Feet", + yards : "Yards", + squareKilometers : "Square kilometers", + squareMiles : "Square miles", + acres : "Acres", + hectares : "Hectares", + squareMeters : "Square meters", + squareFeet : "Square feet", + squareYards : "Square yards", + distance : "Distances", + area : "Areas", + confirmOnDeleteLabel : "Ask for confirmation before deleting ?", + allowImportExportLabel : "Allow import & export ?", + allowLocalStorageLabel : "Use local storage ?", + localStorageKeyLabel : "Local storage key", + localStorageKeyInfo : "If not empty, applications with same key (and same server) will share the same storage. If empty, all will share same storage.", + exportFileName : "Export file name", + exportFileNameValue : "myDrawing.json", + kilometersAbbreviation : "km", + milesAbbreviation : "mi", + metersAbbreviation : "m", + nauticalsAbbreviation : "NM", + feetAbbreviation : "ft", + yardsAbbreviation : "yd", + squareKilometersAbbreviation : "sq km", + squareMilesAbbreviation : "sq mi", + acresAbbreviation : "ac", + hectaresAbbreviation : "ha", + squareMetersAbbreviation : "sq m", + squareFeetAbbreviation : "sq ft", + squareYardsAbbreviation : "sq yd", + defineUnits : "Define the measurement units.", + operationalLayer : "Add the drawing as an operational layer of the map." + }), + "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, + "zh-hk" : 1, + "zh-tw" : 1 +}); diff --git a/setting/nls/sv/strings.js b/setting/nls/sv/strings.js index 267ddf5..d389d2a 100644 --- a/setting/nls/sv/strings.js +++ b/setting/nls/sv/strings.js @@ -21,6 +21,20 @@ squareFeet: "Square feet", squareYards: "Square yards", distance: "Distanser", - area: "Ytor" + area: "Ytor", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "kv.km", + squareMilesAbbreviation: "eng. kv.m", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "kv.m", + squareFeetAbbreviation: "kv.fot", + squareYardsAbbreviation: "kv.yd", + defineUnits: "Definiera måttenheterna.", + operationalLayer: "Lägg till ritningen som ett funktionslager i kartan." }) ); \ No newline at end of file diff --git a/setting/nls/th/strings.js b/setting/nls/th/strings.js index f9e39cc..32ea6f6 100644 --- a/setting/nls/th/strings.js +++ b/setting/nls/th/strings.js @@ -21,6 +21,20 @@ squareFeet: "ตารางนิ้ว", squareYards: "ตารางหลา", distance: "ระยะทาง", - area: "พื้นที่" + area: "พื้นที่", + kilometersAbbreviation: "กม.", + milesAbbreviation: "ไมล์", + metersAbbreviation: "ม.", + feetAbbreviation: "ฟุต", + yardsAbbreviation: "หลา", + squareKilometersAbbreviation: "ตร.กม.", + squareMilesAbbreviation: "ตร.ไมล์", + acresAbbreviation: "เอซี", + hectaresAbbreviation: "เฮกเตอร์", + squareMetersAbbreviation: "ตร.ม.", + squareFeetAbbreviation: "ตร.ฟุต", + squareYardsAbbreviation: "ตร.หลา", + defineUnits: "กำหนดหน่วยการวัด", + operationalLayer: "เพิ่มรูปวาดที่เป็นชั้นการดำเนินงานของแผนที่" }) ); \ No newline at end of file diff --git a/setting/nls/tr/strings.js b/setting/nls/tr/strings.js index a484160..86e65db 100644 --- a/setting/nls/tr/strings.js +++ b/setting/nls/tr/strings.js @@ -21,6 +21,20 @@ squareFeet: "Feet kare", squareYards: "Yarda kare", distance: "Mesafeler", - area: "Alanlar" + area: "Alanlar", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yrd", + squareKilometersAbbreviation: "km²", + squareMilesAbbreviation: "mil²", + acresAbbreviation: "ar", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m²", + squareFeetAbbreviation: "ft²", + squareYardsAbbreviation: "yd kare", + defineUnits: "Ölçüm birimlerini tanımlayın.", + operationalLayer: "Çizimi harita katmanının bir işlem katmanı olarak ekleyin." }) ); \ No newline at end of file diff --git a/setting/nls/vi/strings.js b/setting/nls/vi/strings.js index 494d4f4..09a16ee 100644 --- a/setting/nls/vi/strings.js +++ b/setting/nls/vi/strings.js @@ -21,6 +21,20 @@ squareFeet: "Feet vuông", squareYards: "Thước vuông", distance: "Khoảng cách", - area: "Diện tích" + area: "Diện tích", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "km2", + squareMilesAbbreviation: "mi2", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "m2", + squareFeetAbbreviation: "ft2", + squareYardsAbbreviation: "yd2", + defineUnits: "Xác định đơn vị đo lường.", + operationalLayer: "Thêm hình vẽ làm lớp hoạt động của bản đồ." }) ); \ No newline at end of file diff --git a/setting/nls/zh-cn/strings.js b/setting/nls/zh-cn/strings.js index c59bddb..923b6ad 100644 --- a/setting/nls/zh-cn/strings.js +++ b/setting/nls/zh-cn/strings.js @@ -21,6 +21,20 @@ squareFeet: "平方英尺", squareYards: "平方码", distance: "距离", - area: "面积" + area: "面积", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "定义测量单位。", + operationalLayer: "将绘制添加为地图的业务图层。" }) ); \ No newline at end of file diff --git a/setting/nls/zh-hk/strings.js b/setting/nls/zh-hk/strings.js new file mode 100644 index 0000000..8223ab8 --- /dev/null +++ b/setting/nls/zh-hk/strings.js @@ -0,0 +1,40 @@ +define( + ({ + addDistance: "新增長度單位", + addArea: "新增面積單位", + label: "標籤", + abbr: "縮寫", + conversion: "換算", + actions: "操作", + areaUnits: "面積單位", + distanceUnits: "長度單位", + kilometers: "公里", + miles: "英里", + meters: "公尺", + feet: "英呎", + yards: "碼", + squareKilometers: "平方公里", + squareMiles: "平方英里", + acres: "英畝", + hectares: "公頃", + squareMeters: "平方公尺", + squareFeet: "平方英呎", + squareYards: "平方碼", + distance: "距離", + area: "面積", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "定義測量單位。", + operationalLayer: "將繪製新增為地圖的業務圖層。" + }) +); \ No newline at end of file diff --git a/setting/nls/zh-tw/strings.js b/setting/nls/zh-tw/strings.js new file mode 100644 index 0000000..8223ab8 --- /dev/null +++ b/setting/nls/zh-tw/strings.js @@ -0,0 +1,40 @@ +define( + ({ + addDistance: "新增長度單位", + addArea: "新增面積單位", + label: "標籤", + abbr: "縮寫", + conversion: "換算", + actions: "操作", + areaUnits: "面積單位", + distanceUnits: "長度單位", + kilometers: "公里", + miles: "英里", + meters: "公尺", + feet: "英呎", + yards: "碼", + squareKilometers: "平方公里", + squareMiles: "平方英里", + acres: "英畝", + hectares: "公頃", + squareMeters: "平方公尺", + squareFeet: "平方英呎", + squareYards: "平方碼", + distance: "距離", + area: "面積", + kilometersAbbreviation: "km", + milesAbbreviation: "mi", + metersAbbreviation: "m", + feetAbbreviation: "ft", + yardsAbbreviation: "yd", + squareKilometersAbbreviation: "sq km", + squareMilesAbbreviation: "sq mi", + acresAbbreviation: "ac", + hectaresAbbreviation: "ha", + squareMetersAbbreviation: "sq m", + squareFeetAbbreviation: "sq ft", + squareYardsAbbreviation: "sq yd", + defineUnits: "定義測量單位。", + operationalLayer: "將繪製新增為地圖的業務圖層。" + }) +); \ No newline at end of file