///////////////////////////////////////////////////////////////////////////
|
// Copyright © 2014 - 2018 Esri. All Rights Reserved.
|
//
|
// Licensed under the Apache License Version 2.0 (the "License");
|
// you may not use this file except in compliance with the License.
|
// You may obtain a copy of the License at
|
//
|
// http://www.apache.org/licenses/LICENSE-2.0
|
//
|
// Unless required by applicable law or agreed to in writing, software
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// See the License for the specific language governing permissions and
|
// limitations under the License.
|
///////////////////////////////////////////////////////////////////////////
|
|
define(['dojo/_base/declare',
|
'dijit/_WidgetBase',
|
'dijit/_TemplatedMixin',
|
'dijit/_WidgetsInTemplateMixin',
|
'dojo/text!./templates/PopupConfig.html',
|
'dojo/_base/lang',
|
'dojo/_base/html',
|
'dojo/_base/array',
|
'dojo/Evented',
|
'esri/request',
|
'dijit/MenuItem',
|
'jimu/dijit/SimpleTable',
|
'dijit/form/TextBox',
|
'dijit/form/DropDownButton',
|
'dijit/TooltipDialog',
|
'dijit/Menu'
|
],
|
function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin,
|
template, lang, html, array, Evented, esriRequest, MenuItem, SimpleTable) {
|
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], {
|
_def:null,
|
declaredClass: 'jimu.dijit.PopupConfig',
|
baseClass:'jimu-dijit-popup-config',
|
templateString:template,
|
url:null,
|
title:null,
|
fields:null,//array,{name,alias,type,/*optional*/ visible}
|
config:null,
|
showTitle:true,
|
|
postMixInProperties:function(){
|
this.nls = window.jimuNls.popupConfig;
|
},
|
|
postCreate:function(){
|
this.inherited(arguments);
|
this._initFieldsTable();
|
this.clear();
|
if(this.showTitle){
|
html.setStyle(this.titleTR, 'display', '');
|
if(this.title){
|
this.titleTextBox.set('value', this.title);
|
}
|
}else{
|
html.setStyle(this.titleTR, 'display', 'none');
|
}
|
|
if(this.fields){
|
this.setFields(this.fields);
|
}
|
else if(this.url){
|
this.setUrl(this.url);
|
}
|
},
|
|
getConfig:function(){
|
var config = {
|
title:lang.trim(this.titleTextBox.get('value')),
|
fields:[]
|
};
|
var trs = this.fieldsTable.getRows();
|
array.forEach(trs, lang.hitch(this, function(tr){
|
var rowData = this.fieldsTable.getRowData(tr);
|
if (rowData.visibility) {
|
config.fields.push({
|
name: rowData.name,
|
alias: rowData.alias,
|
type: tr.fieldType
|
});
|
}
|
}));
|
return config;
|
},
|
|
setUrl:function(url){
|
if(typeof url === 'string'){
|
url = lang.trim(url);
|
}
|
else{
|
return;
|
}
|
this.url = url;
|
this.clear();
|
var def = this._requestLayerInfo(url);
|
return def;
|
},
|
|
setFields:function(fields){
|
if(fields instanceof Array){
|
this._setFields(fields);
|
}
|
},
|
|
clear:function(){
|
this.fieldsTable.clear();
|
this._resetMenu();
|
this._addEmptyMenuItem();
|
},
|
|
_initFieldsTable: function(){
|
html.empty(this.fieldsTableTd);
|
var fields = [{
|
name: "visibility",
|
title: this.nls.visibility,
|
type: "checkbox",
|
onChange: lang.hitch(this, this._onFieldVisibleChange)
|
}, {
|
name: "name",
|
title: this.nls.name,
|
type: "text",
|
editable: false
|
}, {
|
name: "alias",
|
title: this.nls.alias,
|
type: "text",
|
editable: true
|
}, {
|
name: "actions",
|
title: this.nls.actions,
|
type: "actions",
|
actions: ["up", "down"]
|
}];
|
this.fieldsTable = new SimpleTable({
|
fields: fields
|
});
|
this.fieldsTable.placeAt(this.fieldsTableTd);
|
},
|
|
/**
|
* If all fields in the fieldsTable are invisible, make the Enable popup checkbox unchecked.
|
*/
|
_onFieldVisibleChange: function() {
|
var rows = this.fieldsTable.getRows();
|
var flag = array.every(rows, function(row) {
|
var rowData = this.fieldsTable.getRowData(row);
|
return rowData.visibility === false;
|
}, this);
|
if(flag) {
|
this.emit('noVisibleField');
|
} else {
|
this.emit('hasVisibleField');
|
}
|
},
|
|
_resetMenu:function(){
|
var menuItems = this.menu.getChildren();
|
array.forEach(menuItems, lang.hitch(this, function(menuItem){
|
this.menu.removeChild(menuItem);
|
}));
|
},
|
|
_addEmptyMenuItem:function(){
|
var menuItem = new MenuItem({
|
label:this.nls.noField,
|
onClick:lang.hitch(this, function(){
|
var dialog = this.menu.getParent();
|
html.setStyle(dialog.domNode.parentNode, 'display', 'none');
|
})
|
});
|
this.menu.addChild(menuItem);
|
},
|
|
_setFields:function(fields){
|
this._resetMenu();
|
this.fields = array.filter(fields, function(item) {
|
return item.type !== 'esriFieldTypeGeometry';
|
});
|
if (this.fields.length > 0) {
|
array.forEach(this.fields, lang.hitch(this, function(fieldInfo) {
|
this._addMenuItem(fieldInfo);
|
this._addRow(fieldInfo);
|
}));
|
} else {
|
this._addEmptyMenuItem();
|
}
|
},
|
|
_requestLayerInfo:function(url){
|
if(this._def){
|
this._def.cancel();
|
}
|
this._def = esriRequest({
|
url:url,
|
content:{f:"json"},
|
handleAs:"json",
|
callbackParamName:"callback"
|
});
|
this._def.then(lang.hitch(this, function(response){
|
if(response && response.fields){
|
this._setFields(response.fields);
|
}
|
}), lang.hitch(this, function(error){
|
console.error("request layer info failed", error);
|
}));
|
return this._def;
|
},
|
|
_addMenuItem:function(fieldInfo){
|
var label = fieldInfo.name + " {" + fieldInfo.name + "}";
|
var menuItem = new MenuItem({
|
label:label,
|
onClick:lang.hitch(this, function(){
|
var a = this.titleTextBox.get('value');
|
var b = a + "${" + fieldInfo.name + "}";
|
this.titleTextBox.set('value', b);
|
var dialog = this.menu.getParent();
|
html.setStyle(dialog.domNode.parentNode, 'display', 'none');
|
})
|
});
|
this.menu.addChild(menuItem);
|
},
|
|
_addRow:function(fieldInfo){
|
var rowData = {
|
visibility:fieldInfo.visible !== false,
|
name:fieldInfo.name,
|
alias:fieldInfo.alias || fieldInfo.name
|
};
|
var result = this.fieldsTable.addRow(rowData);
|
if(result.success){
|
result.tr.fieldType = fieldInfo.type;
|
}
|
}
|
|
});
|
});
|