From: Jordan Augé <jordan.auge@lip6.fr> Date: Fri, 29 Nov 2013 09:30:26 +0000 (+0100) Subject: Merge branch 'master' into scheduler X-Git-Tag: myslice-0.3-0~103 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=03839166e30819c37290f33056f44aaee1583bfc;p=unfold.git Merge branch 'master' into scheduler Conflicts: plugins/googlemap/static/js/googlemap.js --- 03839166e30819c37290f33056f44aaee1583bfc diff --cc plugins/googlemap/static/js/googlemap.js index 23345a27,b8bbf538..d6006744 --- a/plugins/googlemap/static/js/googlemap.js +++ b/plugins/googlemap/static/js/googlemap.js @@@ -41,15 -41,24 +41,24 @@@ googlemap_debug_detailed=false this.object = query.object; var keys = manifold.metadata.get_key(this.object); - // + // this.key = (keys && keys.length == 1) ? keys[0] : null; + // xxx temporary hack + // as of nov. 28 2013 we have here this.key='urn', but in any place where + // the code tries to access record[this.key] the records only have + // keys=type,hrn,network_hrn,hostname + // so for now we force using hrn instead + // as soon as record have their primary key set this line can be removed + // see also same hack in querytable + this.key= (this.key == 'urn') ? 'hrn' : this.key; + //// Setup query and record handlers - // this query is the one about the slice itself - // event related to this query will trigger callbacks like on_new_record + // this query is the one about the slice itself + // event related to this query will trigger callbacks like on_new_record this.listen_query(options.query_uuid); - // this one is the complete list of resources - // and will be bound to callbacks like on_all_new_record + // this one is the complete list of resources + // and will be bound to callbacks like on_all_new_record this.listen_query(options.query_all_uuid, 'all'); /* GUI setup and event binding */ @@@ -86,82 -95,86 +95,86 @@@ this.infowindow = new google.maps.InfoWindow(); }, // initialize_map - // xxx probably not the right place - // The function accepts both records and their key - record_hrn : function (record) { - var key_value; - switch (manifold.get_type(record)) { + // The function accepts both records and their id + // record.key points to the name of the primary key for this record + // typically this is 'urn' + record_id : function (input) { + var id; + switch (manifold.get_type(input)) { case TYPE_VALUE: - key_value = record; + id = input; break; case TYPE_RECORD: - if ( ! this.key in record ) return; - key_value = record[this.key]; + if ( ! this.key in input ) return; + id = input[this.key]; break; default: - throw "Not implemented"; + throw "googlemap.record_id: not implemented"; break; } - // XXX BACKSLASHES original code was reading like this - //return this.escape_id(key_value).replace(/\\/g, ''); - // however this sequence removes backslashes from hrn's and as a result - // queryupdater was getting all mixed up - // querytable does publish hrn's with backslashes and that seems like the thing to do - return key_value; - }, - - // return { marker: gmap_marker, ul : <ul DOM> } - create_marker_struct: function (object,lat,lon) { - // the DOM fragment - var dom = $("<p>").addClass("geo").append(object+"(s)"); - var ul = $("<ul>").addClass("geo"); - dom.append(ul); - // add a gmap marker to the mix - var marker = new google.maps.Marker({ - position: new google.maps.LatLng(lat, lon), + return id; + }, + + // return { marker: gmap_marker, ul : <ul DOM> } + create_marker_struct: function (object,lat,lon) { + // the DOM fragment + var dom = $("<p>").addClass("geo").append(object+"(s)"); + var ul = $("<ul>").addClass("geo"); + dom.append(ul); + // add a gmap marker to the mix + var marker = new google.maps.Marker({ + position: new google.maps.LatLng(lat, lon), title: object, - // gmap can deal with a DOM element but not a jquery object + // gmap can deal with a DOM element but not a jquery object content: dom.get(0), }); - return {marker:marker, ul:ul}; - }, - - // add an entry in the marker <ul> tag for that record - // returns { checkbox : <input DOM> } - create_record_checkbox: function (record,ul,checked) { - var checkbox = $("<input>", {type:'checkbox', checked:checked, class:'geo'}); - var hrn=this.record_hrn(record); - ul.append($("<li>").addClass("geo").append(checkbox). - append($("<span>").addClass("geo").append(hrn))); - var googlemap=this; - // the callback for when a user clicks - // NOTE: this will *not* be called for changes done by program - checkbox.change( function (e) { - if (googlemap_debug) messages.debug("googlemap click handler checked= " + this.checked + " hrn=" + hrn); - manifold.raise_event (googlemap.options.query_uuid, - this.checked ? SET_ADD : SET_REMOVED, hrn); - }); - return checkbox; - }, - - // retrieve DOM checkbox and make sure it is checked/unchecked + return {marker:marker, ul:ul}; + }, + + // given an input <ul> element, this method inserts a <li> with embedded checkbox + // for displaying/selecting the resource corresponding to the input record + // returns the created <input> element for further checkbox manipulation + create_record_checkbox: function (record,ul,checked) { + var checkbox = $("<input>", {type:'checkbox', checked:checked, class:'geo'}); + var id=this.record_id(record); + // use hrn as far as possible for displaying + var label= ('hrn' in record) ? record.hrn : id; + ul.append($("<li>").addClass("geo").append(checkbox). + append($("<span>").addClass("geo").append(label))); + var googlemap=this; + // the callback for when a user clicks + // NOTE: this will *not* be called for changes done by program + checkbox.change( function (e) { + manifold.raise_event (googlemap.options.query_uuid, this.checked ? SET_ADD : SET_REMOVED, id); + }); + return checkbox; + }, + + warning: function (record,message) { + try {messages.warning (message+" -- hostname="+record.hostname); } + catch (err) {messages.warning (message); } + }, + + // retrieve DOM checkbox and make sure it is checked/unchecked set_checkbox: function(record, checked) { - var hrn=this.record_hrn (record); - if (! hrn) { - try {messages.warning ("googlemap.set_checkbox: record has no hrn -- hostname="+record.hostname); } - catch (err) {messages.warning ("googlemap.set_checkbox: record has no hrn"); } - return; - } - var checkbox_s = this.by_hrn [ hrn ]; - if (! checkbox_s ) { messages.warning ("googlemap.set_checkbox: could not spot checkbox for hrn "+hrn); return; } - checkbox_s.checkbox.prop('checked',checked); + var id=this.record_id (record); + if (! id) { + this.warning (record, "googlemap.set_checkbox: record has no id"); + return; + } + var checkbox = this.by_id [ id ]; + if (! checkbox ) { + this.warning (record, "googlemap.set_checkbox: checkbox not found"); + return; + } + checkbox.prop('checked',checked); }, // set_checkbox - // this record is *in* the slice + // this record is *in* the slice new_record: function(record) { - if (googlemap_debug_detailed) messages.debug ("new_record"); + if (googlemap_debug_detailed) messages.debug ("new_record"); if (!(record['latitude'])) return false; - + // get the coordinates var latitude=unfold.get_value(record['latitude']); var longitude=unfold.get_value(record['longitude']); diff --cc portal/sliceview.py index 8b0c552c,753fed26..42cc8ba1 --- a/portal/sliceview.py +++ b/portal/sliceview.py @@@ -205,12 -195,11 +205,13 @@@ class SliceView (LoginRequiredAutoLogou togglable=True, title="Resources", outline_complete=True, - sons=[ resources_as_gmap, - resources_as_3dmap, + sons=[ + resources_as_scheduler, + #resources_as_gmap, + #resources_as_3dmap, resources_as_list_area, ], active_domid = 'resources-map', + persistent_active=True, ) main_stack.insert (resources_area)