X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fupdater%2Fstatic%2Fjs%2Fupdater.js;h=e85a5131a7d2137c062d687e71f9d448a894f32a;hb=c82cd94c927d1f2ccf60a0f3b1a014c1425b1727;hp=7ac0fc7b9f6c410f0f56fa9e2cb8a8bfa5b69a3b;hpb=8c344999d6ee3b3a9172a1068a77c83af77a7aee;p=myslice.git diff --git a/plugins/updater/static/js/updater.js b/plugins/updater/static/js/updater.js index 7ac0fc7b..e85a5131 100644 --- a/plugins/updater/static/js/updater.js +++ b/plugins/updater/static/js/updater.js @@ -11,157 +11,136 @@ var debug=false; // debug=true - $.fn.Updater = function ( method ) { - /* Method calling logic */ - if ( methods[method] ) { - return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); - } else if ( typeof method === 'object' || ! method ) { - return methods.init.apply( this, arguments ); - } else { - $.error( 'Method ' + method + ' does not exist on $.Updater' ); - } - }; - - var methods = { - init : function( options ) { - return this.each(function(){ - var $this = $(this); - var updater = new Updater (options); - $this.data('Updater',updater); - // xxx not tested yet - var results_channel = '/results/' + options.query_uuid + '/changed'; - $.subscribe(results_channel, function (e,rows) { updater.query_completed (e,rows); } ); - // under test.. - var failed_channel = '/results/' + options.query_uuid + '/failed'; - $.subscribe(failed_channel, $this, function (e,code,output) { updater.query_failed (e, code, output); } ); - }); - }, - destroy : function( ) { - return this.each(function(){ - var $this = $(this); - $(window).unbind('Updater'); - data.Updater.remove(); - $this.removeData('Updater'); - }); - }, + var Updater = Plugin.extend({ + + init: function(options, element) + { + this._super(options, element); + + this.listen_query(options.query_uuid); + }, + + + /*************************** PLUGIN EVENTS ****************************/ + + /***************************** GUI EVENTS *****************************/ + + arm_button: function() + { + this.el('updater').click(this, this.submit_update_request); + }, + + submit_update_request: function (e) + { + var self = e.data; + + manifold.raise_event(self.options.query_uuid, RUN_UPDATE); - show : function( content ) { } - }; - - function Updater (options) { - this.options=options; - // xxx should try to locate update_query first, in case we have several Updaters - // on the same query - // however the mental model behind the global manifold object for now is - // to unambiguously find a query based on its query_uuid, which in the joomla - // implementation wouldn't fly - // we keep this for a later improvement - var query=manifold.find_query (options.query_uuid); - // very rough way of filling this for now - this.update_query = - new ManifoldQuery ("update", query.object, null, query.filters, - {}, // params - query.fields, - undefined, /* unique */ - Math.uuid(32,16), - undefined, undefined /* maybe some day I'll get that one */); - manifold.insert_query (this.update_query); - // arm button once document is loaded - (function(updater) {$(document).ready(function(){updater.arm_button()})})(this); - - this.arm_button = function () { - $('#updater-' + this.options.plugin_uuid).click(this, this.submit_update_request); - }, - this.submit_update_request = function (e) { - var query_uuid = e.data.options.query_uuid; - var update_query = e.data.update_query; - if (debug) messages.debug("Updater.submit_update_request " + update_query.__repr()); - // actually send the Update query, but publish results as if coming from the original query - manifold.asynchroneous_exec ( [ {'query_uuid': update_query.query_uuid, 'publish_uuid' : query_uuid} ], false); - // disable button while the query is flying - $('#updater-' + e.data.options.plugin_uuid).attr('disabled', 'disabled'); }, - this.query_failed = function (e, code, output) { - var plugindiv=e.data; - var updater=plugindiv.data('Updater'); - $('#updater-' + updater.options.plugin_uuid).removeAttr('disabled'); - // just as a means to deom how to retrieve the stuff passed on the channel - if (debug) messages.debug("retrieved error code " + code + " and output " + output); - } + /************************** GUI MANIPULATION **************************/ + + disable_update_button: function() + { + this.el('updater').attr('disabled', 'disabled'); + }, + + /*************************** QUERY HANDLER ****************************/ + + /*************************** RECORD HANDLER ***************************/ + + on_query_status_ + + /************************** PRIVATE METHODS ***************************/ + + /******************************** TODO ********************************/ + + /* + query_failed: function (e, code, output) + { + var plugindiv=e.data; + var updater=plugindiv.data('Updater'); + $('#updater-' + updater.options.plugin_uuid).removeAttr('disabled'); + // just as a means to deom how to retrieve the stuff passed on the channel + if (debug) + messages.debug("retrieved error code " + code + " and output " + output); + }, - this.update_resources = function (e, resources, change) { - data = e.data.instance.data().Slices; + update_resources: function (e, resources, change) + { + data = e.data.instance.data().Slices; + + data.update_query.params['resource'] = resources + $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); + }, - data.update_query.params['resource'] = resources + update_leases: function (e, leases, change) + { + data = e.data.instance.data().Slices; + + data.update_query.params['lease'] = leases $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); - }, + }, + + query_completed: function (e, rows, query) + { - this.update_leases = function (e, leases, change) { - data = e.data.instance.data().Slices; - - data.update_query.params['lease'] = leases - $.publish('/update/' + data.options.query_uuid, [data.update_query, true]); - }, - - this.query_completed = function (e, rows, query) { - - /* This function is called twice : get and update */ - messages.info("updater.query_completed - not implemented yet"); - return; - - var data = e.data.instance.data().Slices; - - /* Update placeholders and trigger subqueries updates */ - if (rows.length == 0) { - alert("no result"); - return; - } - var slice = rows[0]; - - /* for get */ - if (data.update_query == null) { - data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid); - } - /* In case of update the list of resources and leases should be updated accordingly */ - - /* only for get ? */ - $.each(slice, function(key, value) { - if (typeof value == 'string') { - $('#myslice__' + key).html(value); - } - }); - - /* TODO avoid repetitions + made this code generic and plugin-independent */ - - if (query.method == 'update') { - // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant. - query.analyzed_subqueries(); - } - - /* NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout - * le query plan et obtenir toutes les infos, par contre on ne peut pas - * savoir d'avance quels parametres ont été accordés, changés, etc. - * Dans le cas général, ca pourrait affecter le query plan... - * Par contre on n'a pas d'information sur toutes les resources, mais - * uniquement celles dans la liste. Comment gérer ? - */ - - /* Inform child plugins about their respective parts of the results */ - /* Only for get */ + // This function is called twice : get and update + messages.info("updater.query_completed - not implemented yet"); + return; + + var data = e.data.instance.data().Slices; + + // Update placeholders and trigger subqueries updates + if (rows.length == 0) { + alert("no result"); + return; + } + var slice = rows[0]; + + // for get + if (data.update_query == null) { + data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid); + } + // In case of update the list of resources and leases should be updated accordingly + + // only for get ? + $.each(slice, function(key, value) { + if (typeof value == 'string') { + $('#myslice__' + key).html(value); + } + }); + + // TODO avoid repetitions + made this code generic and plugin-independent + + if (query.method == 'update') { + // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant. + query.analyzed_subqueries(); + } + + // NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout + // le query plan et obtenir toutes les infos, par contre on ne peut pas + // savoir d'avance quels parametres ont été accordés, changés, etc. + // Dans le cas général, ca pourrait affecter le query plan... + // Par contre on n'a pas d'information sur toutes les resources, mais + // uniquement celles dans la liste. Comment gérer ? + + // Inform child plugins about their respective parts of the results + // Only for get var r_subq = query.analyzed_query.subqueries['resource']; var l_subq = query.analyzed_query.subqueries['lease']; $.publish('/results/' + r_subq.uuid + '/changed', [slice['resource'], r_subq]); $.publish('/results/' + l_subq.uuid + '/changed', [slice['lease'], l_subq]); - - /* Subscribe to get notifications from child plugins */ + + // Subscribe to get notifications from child plugins if (!data.child_subscribe) { - $.subscribe('/update-set/' + r_subq.uuid, {instance: e.data.instance}, update_resources); - $.subscribe('/update-set/' + l_subq.uuid, {instance: e.data.instance}, update_leases); - data.child_subscribe = true + $.subscribe('/update-set/' + r_subq.uuid, {instance: e.data.instance}, update_resources); + $.subscribe('/update-set/' + l_subq.uuid, {instance: e.data.instance}, update_leases); + data.child_subscribe = true } - - } - } + + } + */ + }); })( jQuery );