this._super(options, element);
var self = this;
- this.table = this.el('table').dataTable({
- //sPaginationType: 'full_numbers', // Use pagination
- sPaginationType: 'bootstrap',
- //bJQueryUI : true,
- //bRetrieve : true,
- sScrollX : '100%', // Horizontal scrolling
- bSortClasses : false, // Disable style for the sorted column
- aaSorting : [[ 0, 'asc' ]], // Default sorting on URN
- fnDrawCallback: function() { // Reassociate close click every time the table is redrawn
- /* Prevent to loop on click while redrawing table */
- $('.ResourceSelectedClose').unbind('click');
- /* Handle clicks on close span */
- /* Reassociate close click every time the table is redrawn */
- $('.ResourceSelectedClose').bind('click', self, self._close_click);
- }
+ this.table = this.elmt('table').dataTable({
+// the original hazelnut layout was
+// sDom: "<'row'<'col-xs-5'l><'col-xs-1'r><'col-xs-6'f>>t<'row'<'col-xs-5'i><'col-xs-7'p>>",
+// however the bottom line with 'showing blabla...' and the navigation widget are not really helpful
+ sDom: "<'row'<'col-xs-5'l><'col-xs-1'r><'col-xs-6'f>>t>",
+// so this does not matter anymore now that the pagination area is turned off
+// sPaginationType: 'bootstrap',
+ bAutoWidth: true,
+// bJQueryUI : true,
+// bRetrieve : true,
+// sScrollX : '100%', // Horizontal scrolling
+// bSortClasses : false, // Disable style for the sorted column
+// aaSorting : [[ 0, 'asc' ]], // Default sorting on URN
+// fnDrawCallback: function() { // Reassociate close click every time the table is redrawn
+// /* Prevent to loop on click while redrawing table */
+// $('.ResourceSelectedClose').unbind('click');
+// /* Handle clicks on close span */
+// /* Reassociate close click every time the table is redrawn */
+// $('.ResourceSelectedClose').bind('click', self, self._close_click);
+// }
});
+ // XXX This should not be done at init...
+ this.elmt('update').click(this, this.do_update);
+ this.elmt('refresh').click(this, this.do_refresh);
+ this.elmt('reset').click(this, this.do_reset);
+ this.elmt('clear_annotations').click(this, this.do_clear_annotations);
+
this.listen_query(options.query_uuid);
},
/*************************** PLUGIN EVENTS ****************************/
/***************************** GUI EVENTS *****************************/
-
- // Move through the query cycle
- // XXX 'update', 'refresh', 'reset' and 'remove annotation' button
- // This is a query scheduler
+ do_update: function(e)
+ {
+ var self = e.data;
+ // XXX check that the query is not disabled
+ manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
+ },
+
+ // related buttons are also disabled in the html template
+ do_refresh: function(e)
+ {
+ throw 'resource_selected.do_refresh Not implemented';
+ },
+
+ do_reset: function(e)
+ {
+ throw 'resources_selected.do_reset Not implemented';
+ },
+
+ do_clear_annotations: function(e)
+ {
+ throw 'resources_selected.do_clear_annotations Not implemented';
+ },
+
/************************** GUI MANIPULATION **************************/
+
+ set_button_state: function(name, state)
+ {
+ this.elmt(name).attr('disabled', state ? false : 'disabled');
+ },
+
clear: function()
{
},
+ find_row: function(key)
+ {
+ // key in third position, column id = 2
+ var KEY_POS = 2;
+
+ var cols = $.grep(this.table.fnSettings().aoData, function(col) {
+ return (col._aData[KEY_POS] == key);
+ } );
+
+ if (cols.length == 0)
+ return null;
+ if (cols.length > 1)
+ throw "Too many same-key rows in ResourceSelected plugin";
+
+ return cols[0];
+ },
+
set_state: function(data)
{
var action;
- var color;
var msg;
var button = '';
+ var row;
+
+ // make sure the change is visible : toggle on the whole plugin
+ // this might hae to be made an 'auto-toggle' option of this plugin..
+ // also it might be needed to be a little finer-grained here
+ this.toggle_on();
+
switch(data.request) {
+ case FIELD_REQUEST_ADD_RESET:
+ case FIELD_REQUEST_REMOVE_RESET:
+ // find line and delete it
+ row = this.find_row(data.value);
+ if (row)
+ this.table.fnDeleteRow(row.nTr);
+ return;
case FIELD_REQUEST_CHANGE:
action = 'UPDATE';
break;
switch(data.status) {
case FIELD_REQUEST_PENDING:
msg = 'PENDING';
- color = 'white';
- button = "<span class='ui-icon ui-icon-close ResourceSelectedClose' id='" + data.key + "'/>";
+ button = "<span class='glyphicon glyphicon-remove ResourceSelectedClose' id='" + data.key + "'/>";
break;
case FIELD_REQUEST_SUCCESS:
msg = 'SUCCESS';
- color = 'green';
break;
case FIELD_REQUEST_FAILURE:
msg = 'FAILURE';
- color = 'red';
break;
}
- var status = msg + color;
+ var status = msg + status;
- this.table.fnAddData([
+ // find line
+ // if no, create it, else replace it
+ // XXX it's not just about adding lines, but sometimes removing some
+ // XXX how do we handle status reset ?
+ row = this.find_row(data.value);
+ newline = [
action,
data.key,
data.value,
msg,
button
- ]);
- // XXX change cell color according to status
+ ];
+ if (!row) {
+ // XXX second parameter refresh = false can improve performance. todo in hazelnut also
+ this.table.fnAddData(newline);
+ row = this.find_row(data.value);
+ } else {
+ // Update row text...
+ this.table.fnUpdate(newline, row.nTr);
+ }
+
+ // Change cell color according to status
+ if (row) {
+ $(row.nTr).removeClass('add remove')
+ var cls = action.toLowerCase();
+ if (cls)
+ $(row.nTr).addClass(cls);
+ }
},
/*************************** QUERY HANDLER ****************************/
// - Key and confirmation could be sufficient, or key and record state
// XXX move record state to the manifold plugin API
- on_field_state_changed: function(request, key, value, status)
+ on_field_state_changed: function(result)
{
- this.set_state(request, key, value, status);
+ console.log(result)
+ /* this.set_state(result.request, result.key, result.value, result.status); */
+ this.set_state(result);
},
// XXX we will have the requests for change
var remove_urn = this.id;
var current_resources = event.data.instance.current_resources;
var list_resources = $.grep(current_resources, function(x) {return x.urn != remove_urn});
- //jQuery.publish('selected', 'cancel/'+this.id+'/'+get_value(firstCellVal));
+ //jQuery.publish('selected', 'cancel/'+this.id+'/'+unfold.get_value(firstCellVal));
$.publish('/update-set/' + event.data.instance.options.resource_query_uuid, [list_resources, true]);
},
var urn = r.urn;
time = r.timeslot;
- var SPAN = "<span class='ui-icon ui-icon-close ResourceSelectedClose' id='"+urn+"'/>";
+ var SPAN = "<span class='glyphicon glyphicon-remove ResourceSelectedClose' id='"+urn+"'/>";
var slot = "<span id='resource_"+urn+"'>" + time + "</span>"; //ioi
// ioi
var newline=Array();
var node = r.urn;
time = r.timeslot;
- var SPAN = "<span class='ui-icon ui-icon-close ResourceSelectedClose' id='"+node+"'/>";
+ var SPAN = "<span class='glyphicon glyphicon-renomve ResourceSelectedClose' id='"+node+"'/>";
var slot = "<span id='resource_"+node+"'>" + time + "</span>"; //ioi
// ioi
var newline=Array();
var node = r.urn;
var time = r.timeslot;
- var SPAN = "<span class='ui-icon ui-icon-close ResourceSelectedClose' id='"+node+"'/>";
+ var SPAN = "<span class='glyphicon glyphicon-remove ResourceSelectedClose' id='"+node+"'/>";
var slot = "<span id='resource_"+node+"'>" + time + "</span>";
// ioi
var newline=Array();