diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-10-03 13:23:03 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-10-03 13:23:03 +0200 |
commit | d335b6cb95a5f55ff930c0d35a49f3496406e978 (patch) | |
tree | 6e58943e38be4b1df69412f25a12081ebde09bb7 | |
parent | f14ced0bfe41e22fb66e689f7287d6159d569ad3 (diff) | |
parent | f02fb98e1e430a1100270c01b7dedfe0f85cf138 (diff) | |
download | Chimère-d335b6cb95a5f55ff930c0d35a49f3496406e978.tar.bz2 Chimère-d335b6cb95a5f55ff930c0d35a49f3496406e978.zip |
Merge branch 'v3.0'
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 226 |
1 files changed, 67 insertions, 159 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 7733670..a94b74e 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -196,6 +196,15 @@ var register_hovering = function(exp, handlers_to_deactivate){ } +var unregister_hovering = function(exp, handlers_to_deactivate){ + $(exp).data('hovering', false); + if (handlers_to_deactivate){ + for (idx in handlers_to_deactivate){ + handlers_to_deactivate[idx].setActive(true); + } + } +} + // jQuery pseudo-expression :hovering jQuery.expr[":"].hovering = function(elem) { return $(elem).data('hovering') ? true : false; @@ -237,7 +246,7 @@ jQuery.expr[":"].hovering = function(elem) { // Provide this function to make a custom click event on the marker on_marker_click: null, // Provide this function to override the feature detail display - display_feature_detail_fx: null, + display_feature_detail_callback: null, // Provide this function for overriding the getSubcategories default get_subcategories_fx: null, hide_popup_fx: null, @@ -295,15 +304,6 @@ jQuery.expr[":"].hovering = function(elem) { */ init: function ( options ) { /* Manage parameters */ - /* OL3-deprecated-cluster - // not staticaly in default because of STATIC_URL init - if (defaults.cluster_icon == null && typeof STATIC_URL != 'undefined'){ - defaults.cluster_icon = new OpenLayers.Icon( - STATIC_URL+'chimere/img/marker-cluster.png', - new OpenLayers.Size(36, 39), - new OpenLayers.Pixel(-(36/2), -(39/2))); - } - */ /* OL3-deprecated-routing if (defaults.icon_start == null && typeof STATIC_URL != 'undefined'){ defaults.icon_start = new OpenLayers.Icon( @@ -570,7 +570,14 @@ jQuery.expr[":"].hovering = function(elem) { settings.current_feature = feature; if (!settings.edition){ if ($('.popover-content').is(":hovering")){ - return; + // the popup is no more visible bad info + if ($('.popover:visible').length == 0){ + unregister_hovering('.popover-content', + [settings.MouseWheelZoom, + settings.DragPan]); + } else { + return; + } } if (feature) { $(settings.popup_item).popover('destroy'); @@ -707,91 +714,6 @@ jQuery.expr[":"].hovering = function(elem) { }); methods.enableClustering(); } - /* OL3-deprecated-cluster - if (settings.enable_clustering){ - var style = new OpenLayers.Style({ - graphicTitle: "${name}", - externalGraphic: "${icon}", - graphicWidth: "${width}", - graphicHeight: "${height}", - graphicXOffset: "${offsetx}", - graphicYOffset: "${offsety}", - graphicOpacity: 1, - label: "${label}", - labelYOffset: "2", - fontSize:'1.3em' - }, { - context: { - name: function(feature) { - if(feature.cluster) { - feature.attributes.width = settings.cluster_icon.size.w; - feature.attributes.height = settings.cluster_icon.size.h; - feature.attributes.offsetx = settings.cluster_icon.offset.x; - feature.attributes.offsety = settings.cluster_icon.offset.y; - } else{ - var marker = feature.attributes.marker - feature.attributes.width = marker.icon.size.w; - feature.attributes.height = marker.icon.size.h; - feature.attributes.offsetx = settings.icon_offset.x; - feature.attributes.offsety = settings.icon_offset.y; - } - return feature.attributes.name; - }, - label: function(feature) { - // clustered features count or blank if feature is not a cluster - return feature.cluster ? feature.cluster.length : ""; - }, - icon: function(feature) { - if (feature.cluster){ - return settings.cluster_icon.url; - } else { - return STATIC_URL + 'chimere/img/empty.png'; - } - }, - width: function(feature) { return feature.attributes.width; }, - height: function(feature) { return feature.attributes.height; }, - offsetx: function(feature) { return feature.attributes.offsetx; }, - offsety: function(feature) { return feature.attributes.offsety; } - }}); - - - // Cluster layer - settings.clustering = new OpenLayers.Strategy.Cluster({ - distance: 10, - threshold: 2}); - settings.layerCluster = new OpenLayers.Layer.Vector("Cluster layer", - {styleMap: new OpenLayers.StyleMap({'default': style}), - strategies: [settings.clustering]}); - settings.map.addLayer(settings.layerCluster); - - var highlightCtrl = new OpenLayers.Control.SelectFeature( - settings.layerCluster, { - hover: true, - highlightOnly: true, - eventListeners: { - featurehighlighted: function(e) { - if(e.feature.attributes.marker) - e.feature.attributes.marker.events.triggerEvent('mouseover'); - }, - featureunhighlighted: function(e) { - if(e.feature.attributes.marker) - e.feature.attributes.marker.events.triggerEvent('mouseout'); - } - } - }); - - var selectCtrl = new OpenLayers.Control.SelectFeature( - settings.layerCluster,{ - onSelect: methods.zoomOnCluster - }); - - settings.map.addControl(highlightCtrl); - settings.map.addControl(selectCtrl); - - highlightCtrl.activate(); - selectCtrl.activate(); - } - */ /* Markers layer */ settings.icons = []; @@ -1167,6 +1089,11 @@ jQuery.expr[":"].hovering = function(elem) { 'html': true, 'content': feature.get('name') }); + $(settings.popup_item).on('hidden.bs.popover', function () { + unregister_hovering('.popover-content', + [settings.MouseWheelZoom, + settings.DragPan]); + }) $(settings.popup_item).popover('show'); methods.display_feature_detail(feature.get('key'), feature.get('name')); }, @@ -2444,52 +2371,53 @@ jQuery.expr[":"].hovering = function(elem) { data: params, dataType: "html", success: function (data) { - if ( settings.display_feature_detail_fx ) { - settings.display_feature_detail_fx(data, settings); + if (!settings.popupContentFull) { + $('#detail').html(data).fadeIn(); + if (settings.display_feature_detail_callback){ + settings.display_feature_detail_callback(settings); + } } else { - if (!settings.popupContentFull) { - $('#detail').html(data).fadeIn(); + // first display to get the size of the content + // get default popover size + var w = $('.popover').width(); + var h = $('.popover').height(); + $(".popover").addClass('inside-popup'); + $(".popover-title").html(name); + $(".popover-title").show(); + $(".popover-content").html(data); + + if (settings.display_feature_detail_callback){ + settings.display_feature_detail_callback(settings); } - else { - // first display to get the size of the content - // get default popover size - var w = $('.popover').width(); - var h = $('.popover').height(); - $(".popover").addClass('inside-popup'); - $(".popover-title").html(name); - $(".popover-title").show(); - $(".popover-content").html(data); - var offset = settings.popup.getOffset(); - offset[0] = offset[0] - $('.popover').width()/2 + w/2; - offset[1] = offset[1] - $('.popover').height() + h; - settings.popup.setOffset(offset); - settings.popup.dispatchEvent('change:offset'); - // pan toward the popup + margin to display pop height - var center_position = settings.popup.getPosition(); - var doc_height = $(document).height(); - if (doc_height / 2 < - offset[1]*2){ - var pixel = settings.map.getPixelFromCoordinate(center_position); - pixel[1] += offset[1] + doc_height / 4; - center_position = settings.map.getCoordinateFromPixel(pixel); - } - var pan = ol.animation.pan( - {duration: settings.animation_duration, - source: settings.view.getCenter()}) - settings.map.beforeRender(pan); - settings.view.setCenter(center_position); - - // waiting for the pan to finish - setTimeout(function(){ - // to trigger autopan - settings.popup.dispatchEvent('change:position'); - $(".popover").removeClass('transparent'); - register_hovering('.popover-content', - [settings.MouseWheelZoom, - settings.DragPan]); - }, settings.animation_duration + 10 - ); + var offset = settings.popup.getOffset(); + offset[0] = offset[0] - $('.popover').width()/2 + w/2; + offset[1] = offset[1] - $('.popover').height() + h; + settings.popup.setOffset(offset); + settings.popup.dispatchEvent('change:offset'); + // pan toward the popup + margin to display pop height + var center_position = settings.popup.getPosition(); + var doc_height = $(document).height(); + if (doc_height / 2 < - offset[1]*2){ + var pixel = settings.map.getPixelFromCoordinate(center_position); + pixel[1] += offset[1] + doc_height / 4; + center_position = settings.map.getCoordinateFromPixel(pixel); } + var pan = ol.animation.pan( + {duration: settings.animation_duration, + source: settings.view.getCenter()}) + settings.map.beforeRender(pan); + settings.view.setCenter(center_position); + // waiting for the pan to finish + setTimeout(function(){ + // to trigger autopan + settings.popup.dispatchEvent('change:position'); + $(".popover").removeClass('transparent'); + register_hovering('.popover-content', + [settings.MouseWheelZoom, + settings.DragPan]); + }, settings.animation_duration + 10 + ); } } }); @@ -2770,27 +2698,7 @@ jQuery.expr[":"].hovering = function(elem) { }*/ }, hidePopup: function (evt) { - $('#'+settings.marker_hover_id).hide(); - if (settings.hide_popup_fx) { - settings.hide_popup_fx(evt, settings) - } - else { // Default behaviour - /* - if (settings.current_popup) - { - settings.current_feature = null; - if (!settings.simple){ - $('#detail').fadeOut(); - } - if (settings.current_popup.visible()){ - settings.current_popup.hide(); - if(evt) - settings.map.events.triggerEvent('click', evt); - methods.update_permalink_activation(); - return true; - } - }*/ - } + $(settings.popup_item).popover('destroy'); methods.update_permalink_activation(); return false; }, |