vivo/productMods/js/visualization/mapofscience/ScimapWidget.js

210 lines
No EOL
5.3 KiB
JavaScript

/* $This file is distributed under the terms of the license in /doc/license.txt$ */
var ScimapWidget = Class.extend({
init: function(map) {
var me = this;
me.activeManager = null;
me.isUnloaded = true;
me.map = map;
me.initView();
},
initView: function(){
var me = this;
me.initControlPanels();
me.initMarkerManagers();
me.show(SCIMAP_TYPE.SUBDISCIPLINE);
},
initControlPanels: function() {
var me = this;
/* Create slider control panel */
if (me.sliderControl == null) {
me.sliderControl = new SliderControlPanel({
map:me.map,
controlPositions: google.maps.ControlPosition.RIGHT_BOTTOM
});
}
/* Register event */
me.sliderControl.addToMap();
me.sliderControl.setChangeEventHandler(function(event, ui) {
if (me.keyToMarkerManagers) {
me.updateDisplayedMarkers(ui.value);
}
});
/* create */
if (me.disciplineLabelsControl == null) {
me.labelsMarkerManager = new DisciplineLabelsMarkerManager(map);
me.disciplineLabelsControl = new CheckBoxPanel({
map: map,
checked: true,
text: "Show discipline labels",
click: function() {
if($(this).attr('checked')) {
me.labelsMarkerManager.showMarkers();
} else {
me.labelsMarkerManager.hideMarkers();
}
}
});
}
/* Display labels if checked */
me.disciplineLabelsControl.addToMap();
if (me.disciplineLabelsControl.isChecked()) {
me.labelsMarkerManager.showMarkers();
}
},
initMarkerManagers: function() {
if (this.keyToMarkerManagers == null) {
var managers = {};
// Create discipline Marker Manager
managers[SCIMAP_TYPE.DISCIPLINE] = new DisciplineMarkerManager(
this.map,
new DisciplineColorStrategy(),
null
);
// Create subdiscipline Marker Manager
managers[SCIMAP_TYPE.SUBDISCIPLINE] = new SubdisciplineMarkerManager(
this.map,
new SubdisciplineColorStrategy(),
null
);
this.keyToMarkerManagers = managers;
}
},
needLoaded: function(){
return this.isUnloaded;
},
loadJsonData: function(data) {
var me = this;
me.uri = data.uri;
me.label = data.label;
me.pubsWithNoJournals = data.pubsWithNoJournals;
me.pubsWithInvalidJournals = data.pubsWithInvalidJournals;
me.pubsMapped = data.pubsMapped;
var scienceActivities = {};
scienceActivities[SCIMAP_TYPE.DISCIPLINE] = me._collateDisciplineActivity(data.subdisciplineActivity);
scienceActivities[SCIMAP_TYPE.SUBDISCIPLINE] = data.subdisciplineActivity;
this.isUnloaded = false;
$.each(this.keyToMarkerManagers, function(key, manager) {
// Need to create the AreaSizeCoding function
manager.setSizeCoder(new CircleSizeCoder({
scaler: new Scaler({ maxValue: me.pubsMapped })
}));
$.each(scienceActivities[key], function(science, density) {
// Create marker and add it to manager
var marker = manager.createMarker(science, density);
}); // end each scienceActivity
manager.sort();
}); // end each markerManagers
me.updateMap();
},
_collateDisciplineActivity: function(subdiscipline) {
var disciplineToActivity = {};
$.each(DISCIPLINES, function(id, discipline) {
disciplineToActivity[id] = 0.0;
});
$.each(subdiscipline, function(key, activity) {
var currentSubdisciplinesDiscipline = SUBDISCIPLINES[key].discipline;
disciplineToActivity[currentSubdisciplinesDiscipline] += activity;
});
return disciplineToActivity;
},
mouseIn: function(key, childKey) {
var manager = this.getMarkerManager(key);
// Focus if only it is an active manager
if (manager == this.activeManager) {
// Focus all if no childKey is given
if (childKey) {
manager.mouseIn(childKey);
} else {
manager.mouseInAll();
}
}
},
mouseOut: function(key, childKey) {
var manager = this.getMarkerManager(key);
// Focus if only it is an active manager
if (manager == this.activeManager) {
// Unfocus all if no childKey is given
if (childKey) {
manager.mouseOut(childKey);
} else {
manager.mouseOutAll();
}
}
},
getMarkerManager: function(key) {
return this.keyToMarkerManagers[key];
},
hasKey: function(key) {
return (this.keyToMarkerManagers.hasOwnProperty(key));
},
show: function(key) {
var manager = this.getMarkerManager(key);
if (manager) {
this._switchActiveManager(manager);
}
},
hide: function(key) {
var manager = this.getMarkerManager(key);
if (this.activeManager == manager) {
this._cleanupMarkers();
}
},
_switchActiveManager: function(manager) {
if (this.activeManager != manager) {
this._cleanUpMarkers();
manager.addMarkersToMap();
this.activeManager = manager;
this.updateMap();
}
},
_cleanUpMarkers: function() {
if (this.activeManager) {
this.activeManager.removeMarkersFromMap();
INFO_WINDOW.close();
}
},
cleanup: function() {
var me = this;
me._cleanUpMarkers();
me.sliderControl.RemoveFromMap();
me.disciplineLabelsControl.RemoveFromMap();
},
updateDisplayedMarkers: function(numberOfMarkers) {
this.activeManager.display(numberOfMarkers);
},
updateMap: function() {
var manager = this.activeManager;
if (manager) {
var length = manager.length();
var slider = this.sliderControl;
slider.setMin(Math.min(1, length));
slider.setMax(length);
slider.setValue(length);
}
},
changeFilter: function(filterType) {
this.show(filterType);
}
});