From d7a8ba46314d7e4aa11df79ff468b319f45f1447 Mon Sep 17 00:00:00 2001 From: neveldo Date: Sun, 12 Jul 2015 22:30:09 +0200 Subject: [PATCH] Added 'exclusive' option on legend, and 'hidden' option on legend items --- js/jquery.mapael.js | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/js/jquery.mapael.js b/js/jquery.mapael.js index f800ea3540..1879f32bdd 100644 --- a/js/jquery.mapael.js +++ b/js/jquery.mapael.js @@ -825,8 +825,8 @@ height += legendOptions.marginBottom + elemBBox.height; } - $(elem.node).attr({"data-type": "elem", "data-index": i}); - $(label.node).attr({"data-type": "label", "data-index": i}); + $(elem.node).attr({"data-type": "elem", "data-index": i, "data-hidden": 0}); + $(label.node).attr({"data-type": "label", "data-index": i, "data-hidden": 0}); // Hide map elements when the user clicks on a legend item if (legendOptions.hideElemsOnClick.enabled) { @@ -837,9 +837,7 @@ $.fn.mapael.setHoverOptions(elem, sliceAttrs[i], sliceAttrs[i]); $.fn.mapael.setHoverOptions(label, legendOptions.labelAttrs, legendOptions.labelAttrsHover); $.fn.mapael.setHover(paper, elem, label); - - label.hidden = false; - $.fn.mapael.handleClickOnLegendElem(legendOptions, legendOptions.slices[i], label, elem, elems, legendIndex); + $.fn.mapael.handleClickOnLegendElem($container, legendOptions, legendOptions.slices[i], label, elem, elems, legendIndex); } } } @@ -855,6 +853,7 @@ /** * Allow to hide elements of the map when the user clicks on a related legend item + * @param $container the map container * @param legendOptions options for the legend to draw * @param sliceOptions options of the slice * @param label label of the legend item @@ -862,11 +861,13 @@ * @param elems collection of plots or areas displayed on the map * @param legendIndex index of the legend in the conf array */ - $.fn.mapael.handleClickOnLegendElem = function(legendOptions, sliceOptions, label, elem, elems, legendIndex) { - var hideMapElems = function() { - var elemValue = 0; - - if (!label.hidden) { + $.fn.mapael.handleClickOnLegendElem = function($container, legendOptions, sliceOptions, label, elem, elems, legendIndex) { + var hideMapElems = function(e, hideOtherElems) { + var elemValue = 0 + , hidden = $(label.node).attr('data-hidden') + , hiddenNewAttr = (hidden == 0) ? {"data-hidden": 1} : {"data-hidden": 0}; + + if (hidden == 0) { label.animate({"opacity":0.5}, 300); } else { label.animate({"opacity":1}, 300); @@ -885,7 +886,7 @@ && (typeof sliceOptions.max == "undefined" || elemValue < sliceOptions.max)) ) { (function(id) { - if (!label.hidden) { + if (hidden == 0) { elems[id].mapElem.animate({"opacity":legendOptions.hideElemsOnClick.opacity}, 300, "linear", function() {(legendOptions.hideElemsOnClick.opacity == 0) && elems[id].mapElem.hide();}); elems[id].textElem && elems[id].textElem.animate({"opacity":legendOptions.hideElemsOnClick.opacity}, 300, "linear", function() {(legendOptions.hideElemsOnClick.opacity == 0) && elems[id].textElem.hide();}); } else { @@ -899,10 +900,26 @@ })(id); } } - label.hidden = !label.hidden; + + $(elem.node).attr(hiddenNewAttr); + $(label.node).attr(hiddenNewAttr); + + if ((typeof hideOtherElems === "undefined" || hideOtherElems === true) + && typeof legendOptions.exclusive !== "undefined" && legendOptions.exclusive === true + ) { + $("[data-type='elem'][data-hidden=0]", $container).each(function() { + if ($(this).attr('data-index') !== $(elem.node).attr('data-index')) { + $(this).trigger('click', false); + } + }); + } }; $(label.node).on("click", hideMapElems); $(elem.node).on("click", hideMapElems); + + if (typeof sliceOptions.hidden !== "undefined" && sliceOptions.hidden === true) { + $(elem.node).trigger('click', false); + } }; /**