diff options
| author | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2010-02-28 20:50:07 +0000 |
|---|---|---|
| committer | etienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864> | 2010-02-28 20:50:07 +0000 |
| commit | 4be50007afb898efdf11a34851c092b9102f386a (patch) | |
| tree | 409da91b2bca55f5288c1aa7e6496da58786df8b /chimere/static/main_map.js | |
| parent | 9651da473d422ed9c966997c6e2194f15d825836 (diff) | |
| download | Chimè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.js | 112 |
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(); } |
