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 */
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']);