summaryrefslogtreecommitdiff
path: root/chimere/static/main_map.js
diff options
context:
space:
mode:
authoretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-02-28 20:50:07 +0000
committeretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-02-28 20:50:07 +0000
commit4be50007afb898efdf11a34851c092b9102f386a (patch)
tree409da91b2bca55f5288c1aa7e6496da58786df8b /chimere/static/main_map.js
parent9651da473d422ed9c966997c6e2194f15d825836 (diff)
downloadChimère-4be50007afb898efdf11a34851c092b9102f386a.tar.bz2
Chimère-4be50007afb898efdf11a34851c092b9102f386a.zip
Dynamic loading of categories #80 - Reactivate the check-all button #81
git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@66 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864
Diffstat (limited to 'chimere/static/main_map.js')
-rw-r--r--chimere/static/main_map.js112
1 files changed, 100 insertions, 12 deletions
diff --git a/chimere/static/main_map.js b/chimere/static/main_map.js
index 1849713..ee742a2 100644
--- a/chimere/static/main_map.js
+++ b/chimere/static/main_map.js
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+/* Copyright (C) 2008-2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -18,34 +18,88 @@ See the file COPYING for details.
/* main map */
-var current_cat;
+var current_cat = -1;
/* open a category section */
-function toggleCategory(id){
- old = document.getElementById('maincategory_' + current_cat)
+function toggleCategory(item){
+ var id = item.id.split('_').pop();
+ var old;
+ if (current_cat != -1){
+ old = document.getElementById('maincategory_' + current_cat);
+ } else {
+ img = document.getElementById('maincategory_img_' + id);
+ if (img.src.split('/').pop() == "minus.png"){
+ current_cat = id;
+ old = document.getElementById('maincategory_' + id);
+ }
+ }
if(old){
old.style.display = 'None';
old_img = document.getElementById('maincategory_img_' + current_cat);
- old_img.src = "/" + extra_url + "static/icons/plus.png";
+ old_img.src = media_path + "icons/plus.png";
}
if (id != current_cat){
current_cat = id;
document.getElementById('maincategory_' + current_cat).style.display = 'block';
img = document.getElementById('maincategory_img_' + current_cat);
- img.src = "/" + extra_url + "static/icons/minus.png";
+ img.src = media_path + "icons/minus.png";
} else {
current_cat = 0;
}
}
+/* reopen the current opened categories when a redraw occurs */
+function reOpenCurrent(){
+ if (current_cat){
+ document.getElementById('maincategory_' + current_cat).style.display = 'block';
+ img = document.getElementById('maincategory_img_' + current_cat);
+ img.src = media_path + "icons/minus.png";
+ }
+}
+
+function reCheckCategories(){
+ /* recheck categories when a redraw occurs */
+ if (!checked_categories){
+ return;
+ }
+ var checked_categories_ids = checked_categories.split('_');
+ inputs = window.document.forms["frm_categories"];
+ for (var i = 0; i < inputs.length; i++) {
+ input = inputs[i];
+ cat_id = input.name.split('_').pop();
+ if (checked_categories_ids.indexOf(cat_id) != -1){
+ input.checked = true;
+ }
+ if (input.id == 'display_submited' && display_submited == true){
+ input.checked = true;
+ }
+ }
+}
+
+/* get available subcategories for a designed category */
+function getSubcategories(category_id){
+ var ul = document.getElementById('maincategory_'+category_id);
+ var subcats = new Array();
+ for (i in ul.children){
+ var li = ul.children[i];
+ if (li.id){
+ subcats.push(li.id.split('_').pop());
+ }
+ }
+ return subcats;
+}
+
/* check all the categories if clicked, unckeck if unclick */
-function checkAll(item, ids){
+function checkAll(item){
check = false;
if(item.checked == true){
check = true;
}
- for (i in ids){
- document.getElementById('category_'+ids[i]).checked = check;
+ id = item.id.split('_').pop();
+ var subcats = getSubcategories(id);
+ for (i in subcats){
+ var checkbox = document.getElementById('category_'+subcats[i]);
+ checkbox.checked = check;
}
}
@@ -122,13 +176,19 @@ function loadLayersFromJSON(layer_markers, layer_vectors, geo_objects){
function zoomToArea(top, left, bottom, right){
var bounds = new OpenLayers.Bounds(left, bottom, right, top);
map.zoomToExtent(bounds, true);
+ loadCategories();
}
/* zoom to a desired category */
-function zoomToCategory(categorie_ids){
- updateCheckedCategories();
+function zoomToCategory(category_id){
+ var sub_cats = getSubcategories(category_id).join('_');
+ zoomToSubCategory(sub_cats);
+}
+
+/* zoom to desired sub categories */
+function zoomToSubCategory(subcategory_ids){
/* 0 stand for all categories */
- var uri = "/" + extra_url + "getGeoObjects/" + categorie_ids;
+ var uri = "/" + extra_url + "getGeoObjects/" + subcategory_ids;
if (display_submited) uri += "/A_S";
OpenLayers.loadURL(uri, '', this, zoomToCategoryExtent);
}
@@ -153,6 +213,28 @@ function zoomToCategoryExtent(response){
}
fakeLayerMarkers.destroy();
fakeLayerVectors.destroy();
+ loadCategories();
+}
+
+/* update the categories with an AJAX request */
+function loadCategories(){
+ var current_extent = map.getExtent().transform(map.getProjectionObject(),
+ epsg_display_projection);
+ current_extent = current_extent.toArray().join('_')
+ current_extent = current_extent.replace(/\./g, 'D');
+ current_extent = current_extent.replace(/-/g, 'M');
+ var uri = "/" + extra_url + "getAvailableCategories/" + current_extent;
+ if (display_submited) uri += "/A_S";
+ OpenLayers.loadURL(uri, '', this, updateCategories);
+}
+
+function updateCategories(response){
+ if (response.responseText.indexOf('no results') != -1) {
+ return;
+ }
+ document.getElementById('categories').innerHTML = response.responseText;
+ reCheckCategories();
+ reOpenCurrent();
}
/* load geo objects with an AJAX request */
@@ -282,6 +364,10 @@ var hidePopUp = function (evt) {
}
}
+var refreshMapItems = function (evt) {
+ loadCategories();
+}
+
/* update current detail panel with an AJAX request */
function updateDetail(pk){
var uri = "/" + extra_url + "getDetail/" + pk;
@@ -379,6 +465,7 @@ function init(){
map.addLayers([map_layer]);
map.events.register('click', map, hidePopUp);
+ map.events.register('moveend', map, refreshMapItems);
/* if from a permalink */
if (p_zoom) {
@@ -409,5 +496,6 @@ function init(){
/* if no extent in cookies zoom to default */
map.setCenter(centerLonLat, 13);
}
+ loadCategories();
loadGeoObjects();
}