sky.js/sky.types.reference.js

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));