X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fsenslabmap%2Fstatic%2Fjs%2Fsenslabmap.js;h=a306219361a857b7e348b962cd286d1c53d3991d;hb=fd13b08e5ae01e312431803eb1faf38a1589c4b9;hp=8075be9cf81bd1965201e4fd808d6e6e22d11200;hpb=d1e5d12b2b9519801f7b981a2177b3f36115714a;p=myslice.git diff --git a/plugins/senslabmap/static/js/senslabmap.js b/plugins/senslabmap/static/js/senslabmap.js index 8075be9c..a3062193 100644 --- a/plugins/senslabmap/static/js/senslabmap.js +++ b/plugins/senslabmap/static/js/senslabmap.js @@ -1,80 +1,52 @@ -/** - * Description: SensLab display of 3D-geolocated data - * Copyright (c) 2012 UPMC Sorbonne Universite - INRIA - * License: GPLv3 - */ +(function($){ + var SensLabMap = Plugin.extend({ + init: function(options, element) { + this._super(options, element); + + this.elmt().on('show', this, this.on_show); -// xxx TODO -- this plugin has never been tested -// update_map looks suspiciously empty... -// in addition it could use a bit of cleaning like what was done for the first plugins -// especially wrt using 'instance' and 'data' in such a confusing way + var query = manifold.query_store.find_analyzed_query(options.query_uuid); + this.method = query.object; + this.key = manifold.metadata.get_key(this.method); + + /* Setup query and record handlers */ + this.listen_query(options.query_uuid); + this.listen_query(options.query_all_uuid, 'all'); -(function( $ ){ - - $.fn.SensLabMap = 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 $.SensLabMap' ); - } - }; - - var methods = { - init : function( options ) { - return this.each(function(){ - var $this = $(this), - data = $this.data('SensLabMap'), SensLabMap = $('
', { text : $this.attr('title') }); - // If the plugin hasn't been initialized yet - if ( ! data ) { - /* Plugin initialization */ - //google.load('maps', '3', { other_params: 'sensor=false' }); - //google.setOnLoadCallback(initialize); - init(); - /* End of plugin initialization */ - $(this).data('SensLabMap', { - plugin_uuid: options.plugin_uuid, - query_uuid: options.query_uuid, - target : $this, - SensLabMap : SensLabMap - }); - /* Subscribe to query updates */ - $.subscribe('/results/' + options.query_uuid + '/changed', {instance: $this}, update_map); - } - }); - }, - destroy : function( ) { - return this.each(function(){ - var $this = $(this), data = $this.data('SensLabMap'); - $(window).unbind('SensLabMap'); - data.SensLabMap.remove(); - $this.removeData('SensLabMap'); - }); - }, -/* - reposition : function( ) { // ... }, - show : function( ) { // ... }, - hide : function( ) { // ... }, -*/ - update : function( content ) { - // should be made a private function - set3dsize() - }, - }; - - /* Private methods */ - function update_map(e, rows) { - var $plugindiv = e.data.instance; - $plugindiv.closest('.need-spin').spin(false); - - if(rows) { - /* TODO rendering */ - } else { - alert('error'); + this.sites = []; + this.nodes = {}; + }, + + on_show: function(e) { + e.data.refresh(); + }, + + on_all_new_record: function(node) { + Senslab.normalize(node); + if (node.normalized) { + var site = node.site; + if ($.inArray(site, this.sites) == -1) { + this.sites.push(site); + this.nodes[site] = []; } - + this.nodes[site].push(node); + } else { + console.warn("node has no site:"); + console.warn(node); + } + }, + + on_all_query_done: function() { + var self = this; + + Senslab.createMaps($('#maps-container'), this.sites, this.nodes); + Senslab.notify = function(node) { + manifold.raise_event(self.options.query_uuid, + node.boot_state == "Alive" ? SET_REMOVED : SET_ADD, + node[self.key] + ); + } } - -})( jQuery ); + }); + $.plugin('SensLabMap', SensLabMap); +})(jQuery);