2011-11-07 05:34:58 +00:00
|
|
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
2013-06-07 11:59:14 -04:00
|
|
|
$.extend(this, i18nStrings);
|
|
|
|
|
2011-11-07 05:34:58 +00:00
|
|
|
COMPARISON = {
|
2011-11-10 21:38:08 +00:00
|
|
|
"one":{ "name": "one", "color": "#99CC00"},
|
|
|
|
"two":{ "name": "two", "color": "#FF9900"},
|
|
|
|
"three":{ "name": "three", "color": "#3399FF"}
|
2011-11-07 05:34:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
COMPARISON_TYPE = {
|
|
|
|
"ORGANIZATION": "ORGANIZATION",
|
|
|
|
"PERSON": "PERSON"
|
|
|
|
}
|
|
|
|
|
|
|
|
var ManagerRegistry = Class.extend({
|
|
|
|
init: function(itemArray) {
|
|
|
|
this.occupied = {};
|
|
|
|
this.availability = itemArray;
|
|
|
|
},
|
|
|
|
register: function(key) {
|
|
|
|
var me = this;
|
|
|
|
if (me.occupied[key] == null && me.isAvailable()) {
|
|
|
|
me.occupied[key] = me.availability.pop();
|
|
|
|
}
|
|
|
|
|
|
|
|
return me.occupied[key];
|
|
|
|
},
|
|
|
|
unregister: function(key) {
|
|
|
|
var me = this;
|
|
|
|
var item = me.occupied[key];
|
|
|
|
if (item) {
|
|
|
|
me.availability.push(me.occupied[key]);
|
|
|
|
delete me.occupied[key];
|
|
|
|
}
|
|
|
|
|
|
|
|
return item;
|
|
|
|
},
|
|
|
|
isAvailable: function() {
|
|
|
|
return (this.availability.length != 0);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
var ComparisonScimapWidget = Class.extend({
|
|
|
|
init: function(map) {
|
|
|
|
var me = this;
|
|
|
|
me.activeCompositeManager = null;
|
|
|
|
me.map = map;
|
|
|
|
me.initView();
|
|
|
|
},
|
|
|
|
initView: function(){
|
|
|
|
var me = this;
|
|
|
|
me.initControlPanels();
|
|
|
|
me.initMarkerManagers();
|
|
|
|
me.show(COMPARISON_TYPE.ORGANIZATION);
|
|
|
|
this.activeCompositeManager.addManagersToMap();
|
|
|
|
this.updateDisplayedMarkers();
|
|
|
|
},
|
|
|
|
cleanView: function() {
|
|
|
|
var me = this;
|
|
|
|
me._cleanUpManagers();
|
|
|
|
me.sliderControl.removeFromMap();
|
|
|
|
me.disciplineLabelsControl.removeFromMap();
|
|
|
|
me.labelsMarkerManager.removeMarkersFromMap();
|
|
|
|
},
|
|
|
|
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.keyToCompositeManager) {
|
|
|
|
me.updateDisplayedMarkers();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/* create */
|
|
|
|
if (me.disciplineLabelsControl == null) {
|
2011-12-07 15:18:15 +00:00
|
|
|
me.labelsMarkerManager = new DisciplineLabelsMarkerManager(map, getDisciplineBlackLabelImageURL);
|
2011-11-07 05:34:58 +00:00
|
|
|
me.disciplineLabelsControl = new CheckBoxPanel({
|
|
|
|
map: map,
|
|
|
|
checked: true,
|
2013-06-07 11:59:14 -04:00
|
|
|
text: i18nStrings.showDisciplineLabels,
|
2011-11-07 05:34:58 +00:00
|
|
|
click: function() {
|
|
|
|
if($(this).attr('checked')) {
|
|
|
|
me.labelsMarkerManager.showMarkers();
|
|
|
|
} else {
|
|
|
|
me.labelsMarkerManager.hideMarkers();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Display labels if checked */
|
|
|
|
me.disciplineLabelsControl.addToMap();
|
|
|
|
me.labelsMarkerManager.addMarkersToMap();
|
|
|
|
if (me.disciplineLabelsControl.isChecked()) {
|
|
|
|
me.labelsMarkerManager.showMarkers();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
initMarkerManagers: function() {
|
|
|
|
if (this.keyToCompositeManager == null) {
|
|
|
|
|
|
|
|
// Create all the marker managers
|
|
|
|
var me = this;
|
|
|
|
me.keyToCompositeManager = {};
|
|
|
|
$.each(COMPARISON_TYPE, function(type, value) {
|
|
|
|
var managerArray = [];
|
|
|
|
|
|
|
|
$.each(COMPARISON, function(key, attrs) {
|
|
|
|
var manager = new SubdisciplineMarkerManager(
|
|
|
|
me.map,
|
|
|
|
new SingleColorStrategy(attrs.color),
|
|
|
|
null
|
|
|
|
);
|
|
|
|
manager.color = attrs.color;
|
|
|
|
managerArray.push(manager);
|
|
|
|
});
|
|
|
|
me.keyToCompositeManager[type] = new CompositeMarkerManager();
|
|
|
|
me.keyToCompositeManager[type].registry = new ManagerRegistry(managerArray);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
loadJsonData: function(data) {
|
|
|
|
},
|
|
|
|
loadEntity: 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 = data.subdisciplineActivity;
|
|
|
|
|
|
|
|
var childKey = data.label;
|
|
|
|
var compositeManager = me.getCompositeManager(data.type);
|
|
|
|
// Avoid reload if data was loaded
|
|
|
|
if (compositeManager.hasKey(childKey)) {
|
|
|
|
me.updateMap();
|
|
|
|
} else {
|
|
|
|
var manager = compositeManager.registry.register(childKey);
|
|
|
|
if (manager) {
|
|
|
|
// clean previous markers
|
|
|
|
manager.removeAll();
|
|
|
|
|
|
|
|
// Need to create the AreaSizeCoding function
|
|
|
|
manager.setSizeCoder(new CircleSizeCoder({
|
|
|
|
scaler: new Scaler({ maxValue: me.pubsMapped })
|
|
|
|
}));
|
|
|
|
|
|
|
|
$.each(scienceActivities, function(science, density) {
|
|
|
|
|
|
|
|
// Create marker and add it to manager
|
|
|
|
manager.createMarker(science, density);
|
|
|
|
|
|
|
|
}); // end each scienceActivity
|
|
|
|
manager.sort();
|
|
|
|
|
|
|
|
compositeManager.addManager(childKey, manager);
|
|
|
|
me.updateMap();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
unloadEntity: function(key, childKey) {
|
|
|
|
this.removeManager(key, childKey);
|
|
|
|
},
|
|
|
|
getCompositeManager: function(key) {
|
|
|
|
return this.keyToCompositeManager[key];
|
|
|
|
},
|
|
|
|
mouseIn: function(key, childKey) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
|
|
|
|
// Focus if only it is a valid manager
|
|
|
|
if (compositeManager == this.activeCompositeManager) {
|
|
|
|
// Focus all
|
|
|
|
compositeManager.mouseIn(childKey);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
mouseOut: function(key, childKey) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
|
|
|
|
// Unfocus if only it is a valid manager
|
|
|
|
if (compositeManager == this.activeCompositeManager) {
|
|
|
|
// Unfocus all
|
|
|
|
compositeManager.mouseOut(childKey);
|
|
|
|
}
|
|
|
|
},
|
2011-11-10 21:38:08 +00:00
|
|
|
mouseInNode: function(key, childKey, subdisciplineId) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
// Focus if only it is a valid manager
|
|
|
|
if (compositeManager == this.activeCompositeManager) {
|
|
|
|
// Focus all
|
|
|
|
compositeManager.registry.register(childKey).mouseIn(subdisciplineId);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
mouseOutNode: function(key, childKey, subdisciplineId) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
|
|
|
|
// Unfocus if only it is a valid manager
|
|
|
|
if (compositeManager == this.activeCompositeManager) {
|
|
|
|
compositeManager.registry.register(childKey).mouseOut(subdisciplineId);
|
|
|
|
}
|
|
|
|
},
|
2011-11-07 05:34:58 +00:00
|
|
|
removeManager: function(key, childKey) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
|
|
|
|
// Remove manager
|
|
|
|
if (compositeManager == this.activeCompositeManager) {
|
|
|
|
this.activeCompositeManager.removeManager(childKey);
|
|
|
|
this.activeCompositeManager.registry.unregister(childKey);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
show: function(key) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
if (compositeManager) {
|
|
|
|
this._switchActiveCompositeManager(compositeManager);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
hide: function(key) {
|
|
|
|
var compositeManager = this.getCompositeManager(key);
|
|
|
|
if (this.activeCompositeManager == compositeManager) {
|
|
|
|
this._cleanupMarkers();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
_switchActiveCompositeManager: function(compositeManager) {
|
|
|
|
if (this.activeCompositeManager != compositeManager) {
|
|
|
|
this._cleanUpManagers();
|
|
|
|
compositeManager.addManagersToMap();
|
|
|
|
this.activeCompositeManager = compositeManager;
|
|
|
|
this.updateMap();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
_cleanUpManagers: function() {
|
|
|
|
if (this.activeCompositeManager) {
|
|
|
|
this.activeCompositeManager.removeManagersFromMap();
|
|
|
|
INFO_WINDOW.close();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
updateDisplayedMarkers: function() {
|
|
|
|
this.activeCompositeManager.display(this.sliderControl.getValue());
|
|
|
|
},
|
|
|
|
updateMap: function() {
|
|
|
|
var compositeManager = this.activeCompositeManager;
|
|
|
|
if (compositeManager) {
|
|
|
|
var length = compositeManager.length();
|
|
|
|
var slider = this.sliderControl;
|
2013-06-07 11:59:14 -04:00
|
|
|
slider.setTypeString(i18nStrings.subdisciplinesLower);
|
2011-11-07 05:34:58 +00:00
|
|
|
slider.setMin(Math.min(1, length));
|
|
|
|
slider.setMax(length);
|
|
|
|
slider.setValue(length);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
changeFilter: function(filterType) {
|
|
|
|
this.show(filterType);
|
|
|
|
},
|
|
|
|
getColor: function(key, childKey) {
|
|
|
|
return this.getCompositeManager(key).registry.register(childKey).color;
|
|
|
|
}
|
|
|
|
});
|