kfm2: example widget
As an example of a front-end widget, I’ve whipped up a demo of file-tree navigation using the excellent jsTree widget.
You can see from the source how short it is – all it does is load up the jsTree library (and jQuery), then it connects directly to KFM2 to get data about the files on the server.
in fact… it’s so short I’ll just paste the demo into this page as well:
$(document).ready(function () {
$(“#tree_div”).tree({
data : {
type : “json”,
async : true,
opts : {
async : true,
method : “POST”,
url : “http://demo.verens.com/kfm2/trunk/?p=get_file_listing” // KFM LOCATION
}
},
callback : {
‘beforedata’:function(node){
var id=$(node).attr(‘id’);
if(!id)return {‘d’:’/’};
return {‘d’:$(node).attr(‘id’).replace(/^kfm2_node_/,”)};
},
‘ondata’:function(res){
var data=[],i;
for(i in res.files)data.push({‘data’:i,’attributes’:{‘id’:’kfm2_node_’+res.d+’/’+i}});
for(i in res.directories)data.push({‘data’:i,’state’:’closed’,’attributes’:{‘id’:’kfm2_node_’+res.d+’/’+i}});
return data;
}
}
});
});
You should see a list of files just above this paragraph.
No modification of jsTree was necessary, as it handily gives two event triggers which can be used to translate the request data to KFM’s request format, and the received data back into jsTree’s data format.
Here is the code used to attach the tree to the #tree_div element in this page:
$("#tree_div").tree({ data : { type : "json", async : true, opts : { async : true, method : "POST", url : "http://demo.verens.com/kfm2/trunk/?p=get_file_listing" // KFM LOCATION } }, callback : { 'beforedata':function(node){ var id=$(node).attr('id'); if(!id)return {'d':'/'}; return {'d':$(node).attr('id').replace(/^kfm2_node_/,'')}; }, 'ondata':function(res){ var data=[],i; for(i in res.files)data.push({'data':i,'attributes':{'id':'kfm2_node_'+res.d+'/'+i}}); for(i in res.directories)data.push({'data':i,'state':'closed','attributes':{'id':'kfm2_node_'+res.d+'/'+i}}); return data; } } });
This is just an example of what can be built quickly with the new RPC-based KFM.
Further and more useful examples will come soon.
Looking very good! exactly the type of thing that I need !
the widget just demos navigation.
but if you can add a click event to do whatever you need; the ID of the file-names’ parent LI element holds the file address.
hmm… just noticed I can drag things around in that nav-tree. looks like this might actually be /very/ useful. I’ll do further work on it tomorrow