vivo/productMods/js/visualization/mapofscience/MarkerManager.js
tankchintan ca08343379 1. Added front-end for map of science vis.
2. Added Data tables for disciplines/sub-disciplines in the vis.
3. added support for different csv downloadables.
4. Added new updated libraries for DataTables plugin.
2011-05-26 17:11:16 +00:00

102 lines
2.9 KiB
JavaScript

/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/**
* The MarkerManager is more like a composite class of Marker. It manages
* markers by grouping the markers by keys.
*/
var MarkerManager = Class.extend({
init: function(colorStrategy, sizeCoder) {
this.keyToMarker = {};
this.colorStrategy = colorStrategy;
this.sizeCoder = sizeCoder;
},
addMarker: function(key, marker) {
this.keyToMarker[key] = marker;
},
getMarker: function(key) {
return this.keyToMarker[key];
},
hasKey: function(key) {
return (this.keyToMarker.hasOwnProperty(key));
},
showMarkers: function() {
$.each(this.keyToMarker, function(i, marker) {
marker.show();
});
},
hideMarkers: function() {
$.each(this.keyToMarker, function(i, marker) {
marker.hide();
});
},
addMarkersToMap: function() {
$.each(this.keyToMarker, function(i, marker) {
marker.addToMap();
});
},
removeMarkersFromMap: function() {
$.each(this.keyToMarker, function(i, marker) {
marker.removeFromMap();
});
}
});
/**
* Customized MarkerManager for Science map purpose. It is be an abstract class
*/
ScimapMarkerManager = MarkerManager.extend({
init: function(map, colorStrategy, sizeCoder) {
this._super();
this.colorStrategy = colorStrategy;
this.sizeCoder = sizeCoder;
this.map = map;
this.layer = {};
},
setSizeCoder: function(sizeCoder) {
this.sizeCoder = sizeCoder;
},
createMarker: function(key, density) {
var me = this;
var marker;
if (!me.hasKey(key)) {
var size = me.sizeCoder.getSize(density);
var color = me.colorStrategy.getColor(key);
var layer = me.layer;
var label = layer[key].label;
var latlng = createNoWrapLatLng(layer[key].latitude, layer[key].longitude);
marker = createScinodeMarker(me.map, label, density, size, color, latlng);
me.addMarker(key, marker);
} else {
marker = me.keyToMarker[key];
marker.setValue(marker.getValue() + density);
marker.setSize(me.sizeCoder.getSize(marker.getValue()));
}
return marker;
},
updateMarkerViews: function() {
var me = this;
for (var key in me.keyToMarker) {
var marker = me.keyToMarker[key];
marker.setSize(me.sizeCodingFunc(marker.getValue()));
marker.setColor(me.colorStrategy.getColor(key));
}
}
});
var DisciplineMarkerManager = ScimapMarkerManager.extend({
init: function(map, colorStrategy, sizeCoder) {
this._super(map, colorStrategy, sizeCoder);
this.layer = DISCIPLINES;
},
createMarker: function(subdisciplineKey, density) {
var me = this;
var key = SUBDISCIPLINES[subdisciplineKey].discipline;
return this._super(key, density);
}
});
var SubdisciplineMarkerManager = ScimapMarkerManager.extend({
init: function(map, colorStrategy, sizeCoder) {
this._super(map, colorStrategy, sizeCoder);
this.layer = SUBDISCIPLINES;
}
});