sky.js/sky.types.reference.js

71 lines
1.8 KiB
JavaScript

(function(SKY){
var referenceSelectorDefaultOptions = {
id: null,
referencedType: null,
}
var referenceDefaultOptions = {
url: null,
referencedType: null,
lookup: function(pattern){ return []; },
render: function(o){ return o; },
parse: function(src){ return src; },
id: 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">');
html
.attr("id",this.options.id)
.autocomplete({
source: function(request, response){ response(self.options.referencedType.lookup(request.term)); },
});
this.html( html );
}
}
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){ return this.options.lookup(pattern); }
}
SKY.prototypes.SKYReferencingType = SKYReferencingType;
}(SKY));