1. Changed icon for map of science.
2. Bug fixes for map of science edge cases. 3. Included a default error message when there are no publications to be found. 4. Improved text for map of sience info.
This commit is contained in:
parent
431036c1b0
commit
6f213a61fa
14 changed files with 614 additions and 532 deletions
|
@ -1,207 +1,207 @@
|
|||
/* $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() {
|
||||
this.keyToMarker = {};
|
||||
},
|
||||
addMarker: function(key, marker) {
|
||||
this.keyToMarker[key] = marker;
|
||||
},
|
||||
length: function() {
|
||||
var size = 0;
|
||||
for (var key in this.keyToMarker) {
|
||||
if (this.keyToMarker.hasOwnProperty(key)) size++;
|
||||
}
|
||||
return size;
|
||||
},
|
||||
getMarker: function(key) {
|
||||
return this.keyToMarker[key];
|
||||
},
|
||||
getMarkerArray: function() {
|
||||
var array = [];
|
||||
$.each(this.keyToMarker, function(i, e){ array.push(e); });
|
||||
return array;
|
||||
},
|
||||
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 Discipline labels MarkerManager for Science map purpose. It is an abstract class
|
||||
*/
|
||||
var DisciplineLabelsMarkerManager = MarkerManager.extend({
|
||||
init: function(map) {
|
||||
this._super();
|
||||
this.map = map;
|
||||
this.initMarkers(map);
|
||||
},
|
||||
initMarkers: function(map) {
|
||||
me = this;
|
||||
$.each(DISCIPLINES, function(id, discipline) {
|
||||
var opts = {
|
||||
map: map,
|
||||
position: createNoWrapLatLng(discipline.labelLatitude, discipline.labelLongitude),
|
||||
icon: getDisciplineLabelImageURL(id),
|
||||
clickable: false
|
||||
};
|
||||
me.addMarker(id, new Marker(opts));
|
||||
});
|
||||
},
|
||||
showMarkers: function() {
|
||||
this._super();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customized MarkerManager for Science map purpose. It is an abstract class
|
||||
*/
|
||||
var ScimapMarkerManager = MarkerManager.extend({
|
||||
init: function(map, colorStrategy, sizeCoder) {
|
||||
this._super();
|
||||
this.colorStrategy = colorStrategy;
|
||||
this.sizeCoder = sizeCoder;
|
||||
this.map = map;
|
||||
this.maxValue = 1;
|
||||
this.layer = {};
|
||||
},
|
||||
setSizeCoder: function(sizeCoder) {
|
||||
this.sizeCoder = sizeCoder;
|
||||
this.maxValue = sizeCoder.getMaxValue();
|
||||
},
|
||||
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));
|
||||
}
|
||||
},
|
||||
display: function(numberOfMarkers) {
|
||||
var markerArray = this.sortedMarkers;
|
||||
if (!markerArray || !markerArray.length) {
|
||||
markerArray = this.getMarkerArray();
|
||||
}
|
||||
|
||||
$.each(markerArray, function() {
|
||||
if (numberOfMarkers > 0) {
|
||||
this.show();
|
||||
numberOfMarkers--;
|
||||
} else {
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
mouseIn: function(key) {
|
||||
var marker = this.getMarker(key);
|
||||
if (marker) {
|
||||
marker.focus();
|
||||
}
|
||||
},
|
||||
mouseInAll: function() {
|
||||
$.each(this.keyToMarker, function(i, marker) {
|
||||
marker.focus();
|
||||
});
|
||||
},
|
||||
mouseOut: function(key) {
|
||||
var marker = this.getMarker(key);
|
||||
if (marker) {
|
||||
marker.unfocus();
|
||||
}
|
||||
},
|
||||
mouseOutAll: function() {
|
||||
$.each(this.keyToMarker, function(i, marker) {
|
||||
marker.unfocus();
|
||||
});
|
||||
},
|
||||
sort: function() {
|
||||
this.sortedMarkers = this.getMarkerArray();
|
||||
this.sortedMarkers.sort(function(a, b) {
|
||||
return b.getValue() -a.getValue();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
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;
|
||||
var marker = this._super(key, density);
|
||||
var poly = marker.polygon;
|
||||
|
||||
marker.setContent(
|
||||
'<div style="font-size: 80%; padding: 5px; text-align: left;"><b>'
|
||||
+ poly.label +'</b><br />'
|
||||
+ addCommasToNumber(poly.value.toFixed(2)) + ' of publications (pubs.)<br />'
|
||||
+ (poly.value * 100 / this.maxValue).toFixed(2) + '% of activity</div>'
|
||||
);
|
||||
return marker;
|
||||
}
|
||||
});
|
||||
|
||||
var SubdisciplineMarkerManager = ScimapMarkerManager.extend({
|
||||
init: function(map, colorStrategy, sizeCoder) {
|
||||
this._super(map, colorStrategy, sizeCoder);
|
||||
this.layer = SUBDISCIPLINES;
|
||||
},
|
||||
createMarker: function(subdisciplineKey, density) {
|
||||
var marker = this._super(subdisciplineKey, density);
|
||||
var disciplineId = SUBDISCIPLINES[subdisciplineKey].discipline;
|
||||
var disciplineLabel = DISCIPLINES[disciplineId].label;
|
||||
var poly = marker.polygon;
|
||||
/* Override the getContent for Subdiscipline */
|
||||
marker.setContent(
|
||||
'<div style="font-size: 80%; padding: 5px; text-align: left;"><b>'
|
||||
+ poly.label + '</b> in ' + disciplineLabel +'<br />'
|
||||
+ addCommasToNumber(poly.value.toFixed(2)) + ' of publications (pubs.)<br />'
|
||||
+ (poly.value * 100 / this.maxValue).toFixed(2) + '% of activity</div>'
|
||||
);
|
||||
|
||||
return marker;
|
||||
}
|
||||
});
|
||||
/* $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() {
|
||||
this.keyToMarker = {};
|
||||
},
|
||||
addMarker: function(key, marker) {
|
||||
this.keyToMarker[key] = marker;
|
||||
},
|
||||
length: function() {
|
||||
var size = 0;
|
||||
for (var key in this.keyToMarker) {
|
||||
if (this.keyToMarker.hasOwnProperty(key)) size++;
|
||||
}
|
||||
return size;
|
||||
},
|
||||
getMarker: function(key) {
|
||||
return this.keyToMarker[key];
|
||||
},
|
||||
getMarkerArray: function() {
|
||||
var array = [];
|
||||
$.each(this.keyToMarker, function(i, e){ array.push(e); });
|
||||
return array;
|
||||
},
|
||||
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 Discipline labels MarkerManager for Science map purpose. It is an abstract class
|
||||
*/
|
||||
var DisciplineLabelsMarkerManager = MarkerManager.extend({
|
||||
init: function(map) {
|
||||
this._super();
|
||||
this.map = map;
|
||||
this.initMarkers(map);
|
||||
},
|
||||
initMarkers: function(map) {
|
||||
me = this;
|
||||
$.each(DISCIPLINES, function(id, discipline) {
|
||||
var opts = {
|
||||
map: map,
|
||||
position: createNoWrapLatLng(discipline.labelLatitude, discipline.labelLongitude),
|
||||
icon: getDisciplineLabelImageURL(id),
|
||||
clickable: false
|
||||
};
|
||||
me.addMarker(id, new Marker(opts));
|
||||
});
|
||||
},
|
||||
showMarkers: function() {
|
||||
this._super();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Customized MarkerManager for Science map purpose. It is an abstract class
|
||||
*/
|
||||
var ScimapMarkerManager = MarkerManager.extend({
|
||||
init: function(map, colorStrategy, sizeCoder) {
|
||||
this._super();
|
||||
this.colorStrategy = colorStrategy;
|
||||
this.sizeCoder = sizeCoder;
|
||||
this.map = map;
|
||||
this.maxValue = 1;
|
||||
this.layer = {};
|
||||
},
|
||||
setSizeCoder: function(sizeCoder) {
|
||||
this.sizeCoder = sizeCoder;
|
||||
this.maxValue = sizeCoder.getMaxValue();
|
||||
},
|
||||
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));
|
||||
}
|
||||
},
|
||||
display: function(numberOfMarkers) {
|
||||
var markerArray = this.sortedMarkers;
|
||||
if (!markerArray || !markerArray.length) {
|
||||
markerArray = this.getMarkerArray();
|
||||
}
|
||||
|
||||
$.each(markerArray, function() {
|
||||
if (numberOfMarkers > 0) {
|
||||
this.show();
|
||||
numberOfMarkers--;
|
||||
} else {
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
mouseIn: function(key) {
|
||||
var marker = this.getMarker(key);
|
||||
if (marker) {
|
||||
marker.focus();
|
||||
}
|
||||
},
|
||||
mouseInAll: function() {
|
||||
$.each(this.keyToMarker, function(i, marker) {
|
||||
marker.focus();
|
||||
});
|
||||
},
|
||||
mouseOut: function(key) {
|
||||
var marker = this.getMarker(key);
|
||||
if (marker) {
|
||||
marker.unfocus();
|
||||
}
|
||||
},
|
||||
mouseOutAll: function() {
|
||||
$.each(this.keyToMarker, function(i, marker) {
|
||||
marker.unfocus();
|
||||
});
|
||||
},
|
||||
sort: function() {
|
||||
this.sortedMarkers = this.getMarkerArray();
|
||||
this.sortedMarkers.sort(function(a, b) {
|
||||
return b.getValue() -a.getValue();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
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;
|
||||
var marker = this._super(key, density);
|
||||
var poly = marker.polygon;
|
||||
|
||||
marker.setContent(
|
||||
'<div style="font-size: 80%; padding: 5px; text-align: left;"><b>'
|
||||
+ poly.label +'</b><br />'
|
||||
+ addCommasToNumber(poly.value.toFixed(2)) + ' publications (pubs.)<br />'
|
||||
+ (poly.value * 100 / this.maxValue).toFixed(2) + '% activity</div>'
|
||||
);
|
||||
return marker;
|
||||
}
|
||||
});
|
||||
|
||||
var SubdisciplineMarkerManager = ScimapMarkerManager.extend({
|
||||
init: function(map, colorStrategy, sizeCoder) {
|
||||
this._super(map, colorStrategy, sizeCoder);
|
||||
this.layer = SUBDISCIPLINES;
|
||||
},
|
||||
createMarker: function(subdisciplineKey, density) {
|
||||
var marker = this._super(subdisciplineKey, density);
|
||||
var disciplineId = SUBDISCIPLINES[subdisciplineKey].discipline;
|
||||
var disciplineLabel = DISCIPLINES[disciplineId].label;
|
||||
var poly = marker.polygon;
|
||||
/* Override the getContent for Subdiscipline */
|
||||
marker.setContent(
|
||||
'<div style="font-size: 80%; padding: 5px; text-align: left;"><b>'
|
||||
+ poly.label + '</b> in ' + disciplineLabel +'<br />'
|
||||
+ addCommasToNumber(poly.value.toFixed(2)) + ' publications (pubs.)<br />'
|
||||
+ (poly.value * 100 / this.maxValue).toFixed(2) + '% activity</div>'
|
||||
);
|
||||
|
||||
return marker;
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue