diff options
author | Étienne Loks <etienne@peacefrogs.net> | 2019-02-07 18:20:11 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:38:56 +0200 |
commit | a39df7b6088527faf4108e9a50040e8165ab6a3d (patch) | |
tree | 92b1e3e2650434e5ee40a49b5249f32405b0f699 /ishtar_common | |
parent | 1b0d2c7558b5cf64a65d05eeba0be8f5c2388bf8 (diff) | |
download | Ishtar-a39df7b6088527faf4108e9a50040e8165ab6a3d.tar.bz2 Ishtar-a39df7b6088527faf4108e9a50040e8165ab6a3d.zip |
Map: manage show detail for simple map
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 42 | ||||
-rw-r--r-- | ishtar_common/static/js/ishtar-map.js | 24 | ||||
-rw-r--r-- | ishtar_common/static/js/ishtar.js | 5 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/DataTables.html | 7 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/blocks/sheet_simple_map.html | 11 | ||||
-rw-r--r-- | ishtar_common/templatetags/link_to_window.py | 4 |
6 files changed, 64 insertions, 29 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index bd6c38ff1..962fc93a1 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -25,6 +25,7 @@ import datetime import inspect from importlib import import_module from jinja2 import TemplateSyntaxError +import json import logging import os import re @@ -71,6 +72,7 @@ from ishtar_common.models_imports import ImporterModel, ImporterType, \ ImporterDefault, ImporterDefaultValues, ImporterColumn, \ ImporterDuplicateField, Regexp, ImportTarget, TargetKey, FormaterType, \ Import, TargetKeyGroup +from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils import get_cache, disable_for_loaddata, create_slug, \ get_all_field_names, merge_tsvectors, cached_label_changed, \ generate_relation_graph, max_size_help @@ -1598,8 +1600,8 @@ class DocumentItem(object): if can_add_doc: actions = [ ( - reverse("create-document") + "?{}={}".format(self.SLUG, - self.pk), + reverse("create-document") + "?{}={}".format( + self.SLUG, self.pk), _(u"Add document/image"), "fa fa-plus", _(u"doc./image"), @@ -1611,21 +1613,37 @@ class DocumentItem(object): class GeoItem(object): + def _geojson_serialize(self, geom_attr): + if not hasattr(self, geom_attr): + return "" + cached_label_key = 'cached_label' + if getattr(self, "CACHED_LABELS", None): + cached_label_key = self.CACHED_LABELS[-1] + geojson = serialize( + 'geojson', + self.__class__.objects.filter(pk=self.pk), + geometry_field=geom_attr, fields=(cached_label_key,)) + geojson_dct = json.loads(geojson) + features = geojson_dct.pop('features') + for idx in range(len(features)): + feature = features[idx] + lbl = feature['properties'].pop(cached_label_key) + feature['properties']['name'] = lbl + feature['properties']['id'] = self.pk + geojson_dct['features'] = features + geojson_dct['link_template'] = simple_link_to_window(self).replace( + '999999', '<pk>' + ) + geojson = json.dumps(geojson_dct) + return geojson + @property def point_2d_geojson(self): - if not hasattr(self, 'point_2d'): - return "" - return serialize('geojson', self.__class__.objects.filter(pk=self.pk), - geometry_field='point_2d', - fields=('cache_complete_id',)) + return self._geojson_serialize('point_2d') @property def multi_polygon_geojson(self): - if not hasattr(self, 'multi_polygon'): - return "" - return serialize('geojson', self.__class__.objects.filter(pk=self.pk), - geometry_field='multi_polygon', - fields=('cache_complete_id',)) + return self._geojson_serialize('multi_polygon') class BaseHistorizedItem(DocumentItem, FullSearch, Imported, JsonData, GeoItem, diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js index 0613ec285..c1bed2554 100644 --- a/ishtar_common/static/js/ishtar-map.js +++ b/ishtar_common/static/js/ishtar-map.js @@ -169,7 +169,11 @@ var manage_click_on_map = function(map_id){ }; }; +var current_event; + var click_on_feature = function(map_id, feature, e){ + // console.log("click_on_feature"); + current_event = e; if (!$(e.target).is($(popup_item[map_id])) && !$.contains($(popup_item[map_id])[0], e.target) ) { @@ -183,11 +187,11 @@ var click_on_feature = function(map_id, feature, e){ current_feature = feature; if (!feature) return; - var timeout = 200; + var timeout = 10; setTimeout(function(){ // zoom on aggregated var key = feature.get('key'); - if (key && key.length > 6 && key.substring(0, 7) == 'cluster'){ + if (feature.get('name') || feature.get('key')){ feature = click_on_cluster(map_id, feature); } }, timeout); @@ -197,6 +201,7 @@ var auto_zoom = false; var click_on_cluster = function(map_id, feature, zoom_level, duration, nb_zoom, current_nb_items){ + // console.log("click_on_cluster"); if (!duration){ // zoom animation must be slower duration = animation_duration * 2; @@ -271,9 +276,13 @@ var click_on_cluster = function(map_id, feature, zoom_level, duration, nb_zoom, var display_cluster_detail = function(map_id, cluster){ // console.log("display_cluster_detail"); var features = cluster.getProperties()['features'] + var offset_x = 0; var offset_y = -21; - if (features.length == 1){ + if (!features){ + features = [cluster]; + offset_y = -7; + } else if (features.length == 1){ offset_y = -54; } display_items(map_id, features, offset_x, offset_y); @@ -319,7 +328,12 @@ var _display_items = function(map_id, features, offset_x, offset_y){ $("#ishtar-map-window-" + map_id + " .modal-body").html(window_content); $(popup_item[map_id]).html(popup_content); $("." + ul_class + " .map-list-detail").click(open_map_window(map_id)); - popup[map_id].setPosition(geom.getCoordinates()); + + if (geom.getType() == "Point"){ + popup[map_id].setPosition(geom.getCoordinates()); + } else { + popup[map_id].setPosition(current_event.coordinate); + } popup[map_id].setOffset([offset_x, offset_y]); $(popup_item[map_id]).css({opacity: 0}); $(popup_item[map_id]).show(0, function(){ @@ -417,7 +431,7 @@ var display_map = function(map_id, points, lines_and_polys, layers){ if (points){ link_template[map_id] = points['link_template']; } else { - /// link_template = lines_and_polys['link_template']; + link_template[map_id] = lines_and_polys['link_template']; } if (map[map_id]){ redraw_map(map_id, layers); diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 6600181e7..e7ec6850c 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -1250,13 +1250,12 @@ var render_map_list_modal = function(map_id){ return html; }; -var render_map = function(data_table, table_name, nb_select, map_id){ - //var html = render_paginate_select(table_name, 'map', nb_select); +var render_map = function(map_id){ var html = ""; html += "<div class='ishtar-table-map' id='" + map_id + "'></div>"; html += "<div class='ishtar-map-popup' id='ishtar-map-popup-" + map_id + "'></div>"; html += render_map_list_modal(map_id); - return {"points": data_table, "html": html}; + return html; }; var register_map = function(map_id, points){ diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html index 3e0faffd0..cf33a8cfa 100644 --- a/ishtar_common/templates/blocks/DataTables.html +++ b/ishtar_common/templates/blocks/DataTables.html @@ -114,14 +114,15 @@ map_submit_search = function(){ var timestamp = Math.floor(Date.now() / 1000); var map_id = "map-" + timestamp; $('.modal-progress .modal-header').html("{% trans 'Render map...' %}"); - var result = render_map(data, "{{name}}", nb_select, map_id); - $("#tab-content-map-{{name}}").html(result["html"]); + + var html = render_map(map_id); + $("#tab-content-map-{{name}}").html(html); $("#id_{{name}}-length_map").change(map_submit_search); if ($('.modal-progress').length > 0){ $('.modal-progress').modal('hide'); $('.modal-progress .modal-header').html(modal_base_text); } - register_map(map_id, result["points"]); + register_map(map_id, data); }); return false; diff --git a/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html b/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html index bf25db653..d0ec50b5f 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html @@ -1,8 +1,12 @@ {% if geo_item.point_2d or geo_item.multi_polygon %} -<div class="window-map" - id="map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"></div> - +<div class="col-12 col-lg-6 flex-wrap"> +<div class="window-map" id="map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"> +</div> +<div id="map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"></div> +</div> <script type="text/javascript"> +var html = render_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"); +$("#map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}").html(html); {% if geo_item.point_source == 'P' or not geo_item.multi_polygon %} var {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.point_2d_geojson|safe}}; display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}}); @@ -11,5 +15,4 @@ var {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.multi_polygon_geojson|safe}}; display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, {{geo_item.SLUG}}{{geo_item.pk}}); {% endif %} </script> - {% endif %} diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py index 439602665..4c1c79727 100644 --- a/ishtar_common/templatetags/link_to_window.py +++ b/ishtar_common/templatetags/link_to_window.py @@ -10,13 +10,13 @@ register = Library() @register.filter def simple_link_to_window(item): - if not hasattr(item, 'SHOW_URL'): + if not hasattr(item, 'SLUG'): return "" return mark_safe( u' <a class="display_details" href="#" ' u'onclick="load_window(\'{}\')">' u'<i class="fa fa-info-circle" aria-hidden="true"></i></a>'.format( - reverse(item.SHOW_URL, args=[item.pk, '']))) + reverse("show-" + item.SLUG, args=[item.pk, '']))) @register.filter |