108 lines
3.1 KiB
JavaScript
108 lines
3.1 KiB
JavaScript
(function(SKY){
|
|
|
|
var referenceSelectorDefaultOptions = {
|
|
id: null,
|
|
referencedType: null,
|
|
}
|
|
|
|
var referenceDefaultOptions = {
|
|
url: null,
|
|
descriptor: null,
|
|
|
|
lookup: function(pattern,response){},
|
|
render: function(o){ return o; },
|
|
parse: function(src){ return src; },
|
|
identity:function(o){ return o; },
|
|
}
|
|
|
|
class SKYReferenceSelector extends SKY.prototypes.SKYSelector {
|
|
constructor(options){
|
|
super();
|
|
|
|
var self = this;
|
|
|
|
this.options = Object.assign({}, referenceSelectorDefaultOptions);
|
|
Object.assign(this.options,options);
|
|
|
|
var html = $('<input type="text">')
|
|
.attr("id",this.options.id)
|
|
.skySelect({
|
|
type: this.options.referencedType,
|
|
lookup: function(p,r){ self.options.referencedType.lookup(p,r); },
|
|
render: function(v){ return self.options.referencedType.render(v); },
|
|
})
|
|
.html();
|
|
/*
|
|
.autocomplete({
|
|
source: function(request, response){
|
|
response(
|
|
$.map(
|
|
self.options.referencedType.lookup(request.term),
|
|
function(item){ return self.options.referencedType.render(item); }
|
|
)
|
|
);
|
|
},
|
|
select: function( ev, ui ){
|
|
alert(JSON.stringify(ui.item));
|
|
},
|
|
});
|
|
*/
|
|
this.html( html );
|
|
this.lastSelectedItem = null;
|
|
}
|
|
|
|
valid(){
|
|
this.html().skySelect().valid();
|
|
}
|
|
changed(){
|
|
var skySelect = this.html().skySelect();
|
|
return (skySelect.value() != this.lastSelectedItem);
|
|
}
|
|
|
|
value(val){
|
|
var skySelect = this.html().skySelect();
|
|
|
|
if (arguments.length)
|
|
{
|
|
this.lastSelectedItem = val;
|
|
skySelect.value(val);
|
|
return this;
|
|
}
|
|
return skySelect.value();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
SKY.prototypes.SKYReferenceSelector = SKYReferenceSelector;
|
|
|
|
class SKYReferencingType extends SKY.prototypes.SKYType {
|
|
|
|
constructor(name,options){
|
|
super(name);
|
|
|
|
this.options = Object.assign({}, referenceDefaultOptions);
|
|
Object.assign(this.options, options);
|
|
|
|
}
|
|
|
|
editor(id){
|
|
return this.selector(id);
|
|
}
|
|
|
|
selector(id){
|
|
return new SKYReferenceSelector({
|
|
referencedType: this,
|
|
id: id,
|
|
});
|
|
}
|
|
|
|
render(value){ return this.options.render(value); }
|
|
parse(src){ return this.options.parse(src); }
|
|
lookup(pattern,response){ this.options.lookup(pattern,response); }
|
|
identity(value){ return this.options.identity(value); }
|
|
}
|
|
|
|
SKY.prototypes.SKYReferencingType = SKYReferencingType;
|
|
}(SKY));
|