/* Widget displaying a columnbrowser for skos concepts when the current "focus" node is of type "vocab"
* Uses the browser from the skos_browser cpack.
*/
YUI.add('vocabulary', function(Y) {
var NODE_BROWSER = Y.one("#vocabularybrowser");
function Vocabulary(config) {
Vocabulary.superclass.constructor.apply(this, arguments);
}
Vocabulary.NAME = "vocabulary";
Vocabulary.ATTRS = {
conceptscheme : { value: null },
strategy : { value: null },
focus : { value: null },
concept : { value: null },
paths:{ value:{
concepts:"/skosapi/concepts",
mappinglist:"amalgame/data/mappinglist" }
}
};
Y.extend(Vocabulary, Y.Base, {
initializer: function(args) {
// hide the browser on start
NODE_BROWSER.addClass("hidden");
this._initHeader();
this._initBrowser();
this.after("focusChange", this._onSelectedChange, this);
this._currentMappings = {};
},
_initHeader : function() {
var oSelf = this;
var focus = this.get("focus");
var mappingHeader = NODE_BROWSER.appendChild(Y.Node.create('
'));
var titleBox = mappingHeader.appendChild(Y.Node.create(''));
this.title = titleBox.appendChild(Y.Node.create(''));
var mappingSelect = mappingHeader.appendChild(Y.Node.create(''));
mappingSelect.appendChild('(not yet implmemented) highlight mappings from: ');
mappingList = mappingSelect.appendChild(Y.Node.create(''));
mappingList.delegate('click', function(e) {
var graphs = [];
mappingList.all('input').each(function(o) {
if(o.get("checked")) {
graphs.push(o.get("value"));
}
});
oSelf.browser.updateAll({graph:graphs});
}, 'input');
titleBox.on("click", function(e) {
mappingSelect.toggleClass("hidden");
});
this.mappingList = mappingList;
this.mappingSelect = mappingSelect;
},
_initBrowser : function() {
var fetchConceptsURL = this.get("paths").concepts;
var strategy = this.get('strategy');
// We define a datasource to simplify
// access to the vocabularys later and add caching support
var DS = new Y.DataSource.IO({
source: ""
})
.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "results",
resultFields: ["id", "label", "hasNext", "count", "class"],
metaFields: {
totalNumberOfResults:"totalNumberOfResults"
}
}
});
//.plug(Y.Plugin.DataSourceCache, {"max":10});
this.browser = new Y.mazzle.ColumnBrowser({
datasource:DS,
autoLoad:false,
maxNumberItems: 25,
searchEnabled: false,
columns: [
{ request: fetchConceptsURL,
params: { type:'topconcept', strategy:strategy },
options: [{'value':'inscheme', 'label':'all concepts'},
{'value':'topconcept', 'selected':'true', 'label':'top concepts'}]
},
{ request: fetchConceptsURL,
params: {type:'child', strategy:strategy },
repeat: true,
options: []
}
]
});
this.browser.render(NODE_BROWSER);
this.browser.after('itemSelect', this._onItemSelect, this);
},
_onItemSelect : function (ev) {
if (ev.id && ev.label) {
var selectedItem = { id:ev.id, label:ev.label };
this.set("concept", selectedItem);
}
},
_onSelectedChange : function() {
var focus = this.get("focus");
if(focus.type=="vocab") {
NODE_BROWSER.removeClass("hidden");
this.browser._updateColumn(0, focus.uri);
this.title.setContent(focus.label);
this.fetchMappings();
} else {
NODE_BROWSER.addClass("hidden");
}
},
fetchMappings : function() {
var strategy = this.get("strategy"),
mappingNode = this.mappingList,
mappingSelect = this.mappingSelect,
currentMappings = this._currentMappings;
function formatMappings(e,o) {
var mappings = Y.JSON.parse(o.responseText);
if (mappings.length > 0) {
mappingSelect.removeClass("hidden");
} else {
mappingSelect.addClass("hidden");
}
for (var i=0; i < mappings.length; i++) {
var mapping = mappings[i],
uri = mapping['uri'],
label = mapping['label'];
if(currentMappings[uri]) {
var labelNode = currentMappings[uri].one('span');
if(labelNode) { labelNode.setContent(label); }
} else {
currentMappings[uri] = mappingNode.appendChild(''+mapping.label+'');
}
}
}
Y.io(this.get("paths").mappinglist, {
data: {
'strategy':strategy
},
on:{
success:formatMappings
}
});
}
});
Y.Vocabulary = Vocabulary;
}, '0.0.1', { requires: [
'node','event','anim','overlay','io-base',
'datasource-io','datasource-jsonschema',
'querystring-stringify-simple',
'columnbrowser'
]
});