///////////////////////////////////////////////////////////////////////////
|
// 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',
|
'dojo/_base/html',
|
'dojo/_base/lang',
|
'dojo/on',
|
'dojo/Deferred',
|
'dojo/aspect',
|
'esri/request',
|
'dijit/form/ValidationTextBox'
|
],
|
function(declare, html, lang, on, Deferred, aspect, esriRequest, ValidationTextBox) {
|
return declare([ValidationTextBox], {
|
_validatingNode: null,
|
_validNode: null,
|
_inValidNode: null,
|
_fetchHandle: null,
|
_fetchErrHandle: null,
|
declaredClass: 'jimu.dijit.ServiceURLInput',
|
|
verify: true,
|
_status: null,
|
|
postCreate: function() {
|
this.inherited(arguments);
|
|
this._validatingNode = html.create('div', {
|
'class': 'jimu-service-validating'
|
}, this.domNode);
|
this._validNode = html.create('div', {
|
'class': 'jimu-service-valid'
|
}, this.domNode);
|
this._inValidNode = html.create('div', {
|
'class': 'jimu-service-invalid jimu-icon jimu-icon-error'
|
}, this.domNode);
|
|
html.addClass(this.domNode, 'jimu-serviceurl-input');
|
|
if (this.verify){
|
this.own(on(this, 'Change', lang.hitch(this, '_onServiceUrlChange')));
|
}
|
},
|
|
setProcessFunction: function (callback, errback) {
|
if (this._fetchHandle && this._fetchErrHandle){
|
this._removeProcessFunction();
|
}
|
|
if (typeof callback === 'function'){
|
this._fetchHandle = aspect.after(this, 'onFetch', callback);
|
this.own(this._fetchHandle);
|
}
|
if (typeof errback === 'function'){
|
this._fetchErrHandle = aspect.after(this, 'onFetchError', errback);
|
this.own(this._fetchErrHandle);
|
}
|
},
|
|
_removeProcessFunction: function(){
|
if (this._fetchHandle && this._fetchHandle.remove){
|
this._fetchHandle.remove();
|
this._fetchHandle = null;
|
}
|
if (this._fetchErrHandle && this._fetchErrHandle.remove){
|
this._fetchErrHandle.remove();
|
this._fetchErrHandle = null;
|
}
|
},
|
|
onFetch: function(result){
|
/* jshint unused:false */
|
return result;
|
},
|
|
onFetchError: function(evt){
|
/* jshint unused:false */
|
},
|
|
getStatus: function() {
|
return this._status;
|
},
|
|
_onServiceUrlChange: function(serviceUrl) {
|
var def = new Deferred();
|
|
def.then(lang.hitch(this, function(){
|
this._valid();
|
}), lang.hitch(this, function(){
|
this._inValid();
|
this.onFetchError();
|
}));
|
|
this._validating();
|
if (!serviceUrl) {
|
def.reject('error');
|
return;
|
}
|
esriRequest({
|
url: lang.trim(serviceUrl || ""),
|
handleAs: 'json',
|
content: {
|
f: 'json'
|
},
|
callbackParamName: 'callback'
|
}).then(lang.hitch(this, function(restData) {
|
var status = this.onFetch({
|
url: this.getValue(),
|
data: restData
|
});
|
if (status){
|
def.resolve('success');
|
}else {
|
def.reject('error');
|
}
|
}), lang.hitch(this, function(err){
|
def.reject(err);
|
}));
|
},
|
|
_validating: function(){
|
this._status = 'validating';
|
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-invalid');
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-valid');
|
html.addClass(this.domNode, 'jimu-serviceurl-input-validating');
|
},
|
|
_valid: function(){
|
this._status = 'valid';
|
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-invalid');
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-validating');
|
html.addClass(this.domNode, 'jimu-serviceurl-input-valid');
|
},
|
|
_inValid: function(){
|
this._status = 'invalid';
|
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-validating');
|
html.removeClass(this.domNode, 'jimu-serviceurl-input-valid');
|
html.addClass(this.domNode, 'jimu-serviceurl-input-invalid');
|
}
|
});
|
});
|