diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-31 15:31:30 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-31 15:31:30 +0100 |
| commit | f25285634613ff5beeb0c360d817835738e72b40 (patch) | |
| tree | a63fcd260fe641ea27f74291ca2ed36e6a816a74 /chimere | |
| parent | b845195fda9c4e9fb79c3f6272d8de202822f57e (diff) | |
| download | Chimère-f25285634613ff5beeb0c360d817835738e72b40.tar.bz2 Chimère-f25285634613ff5beeb0c360d817835738e72b40.zip | |
JS: preload icon images
Diffstat (limited to 'chimere')
| -rw-r--r-- | chimere/models.py | 18 | ||||
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 29 | ||||
| -rw-r--r-- | chimere/tests.py | 20 | ||||
| -rw-r--r-- | chimere/urls.py | 2 | ||||
| -rw-r--r-- | chimere/views.py | 26 |
5 files changed, 81 insertions, 14 deletions
diff --git a/chimere/models.py b/chimere/models.py index a34635d..01d6af0 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -279,14 +279,22 @@ class SubCategory(models.Model): [(subcat.pk, subcat.name) for subcat in subcats])) return cats + def getJSONDict(self): + items = {'id':self.pk, 'name':self.name, + 'description':self.description if self.description\ + else '', + 'icon':{'url':self.icon.image.url, + 'width':self.icon.image.width, + 'height':self.icon.image.height} + } + if self.hover_icon: + items['icon_hover'] = {'url':cat.hover_icon.image.url} + return items + def getJSON(self, categories_id=[]): '''Return a JSON string - mainly used to get description ''' - items = {'id':self.pk, 'name':json.dumps(self.name), - 'description':json.dumps(self.description) if self.description\ - else ''} - json_string = u'{"pk": %(id)d, "name": %(name)s, '\ - u'"description":%(description)s}' % items + json_string = json.dumps(self.getJSONDict()) return json_string IMPORTERS = {'KML':KMLManager, diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 24d4af1..9a07504 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -44,6 +44,15 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { return v; }; })( jQuery ); +/* preload images */ +(function ($) { + $.fn.preload = function() { + this.each(function(){ + $('<img/>')[0].src = this; + }); + } +})( jQuery ); + (function ($) { /* * Chimere jQuery plugin @@ -411,7 +420,27 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { methods.routingAddStep(); } } + methods.preload_images(); }, // end of init + /* Preload icons */ + preload_images: function(){ + var uri = extra_url + "getAllCategories/"; + $.ajax({url: uri, + dataType: "json", + success: function (data) { + if (!data.categories){return} + for(var idx=0; idx<data.categories.length; idx++){ + new Image().src = data.categories[idx].icon.url; + if(data.categories[idx].icon_hover){ + new Image().src = data.categories[idx].icon_hover.url; + } + } + }, + error: function (data) { + // fail silently + } + }); + }, activateContextMenu: function(){ settings.edition_type_is_route = false; diff --git a/chimere/tests.py b/chimere/tests.py index c372202..ea97b39 100644 --- a/chimere/tests.py +++ b/chimere/tests.py @@ -4,6 +4,7 @@ import datetime import lxml.etree import os +import simplejson as json test_path = os.path.abspath(__file__) test_dir_path = os.path.dirname(test_path) + os.sep @@ -67,12 +68,14 @@ def marker_setup(sub_categories=[]): markers.append(marker_1) marker_2 = Marker.objects.create(name="Marker 2", status='A', point='SRID=4326;POINT(-3.5 48.4)', + is_front_page=True, available_date=current_date, start_date=current_date) marker_2.categories.add(sub_categories[1]) markers.append(marker_2) marker_3 = Marker.objects.create(name="Marker 3", status='A', point='SRID=4326;POINT(-4.5 48.45)', + is_front_page=True, available_date=current_date - datetime.timedelta(days=60), start_date=current_date - datetime.timedelta(days=60), end_date=current_date - datetime.timedelta(days=30)) @@ -204,7 +207,7 @@ class MarkerFormTest(TestCase): form = MarkerForm(data) self.assertEqual(form.is_valid(), False) -class DynamicCategoryTest(TestCase): +class CategoryTest(TestCase): def setUp(self): self.areas = areas_setup() self.markers = marker_setup() @@ -213,15 +216,22 @@ class DynamicCategoryTest(TestCase): cats = self.areas[0].getCategories(status='A', filter_available=True) self.assertEqual(len(cats), 1) + def test_get_all_categories(self): + url = reverse('chimere:get_all_categories') + response = self.client.get(url) + self.assertEqual(200, response.status_code) + cats = json.loads(response.content)['categories'] + self.assertEqual(len(cats), 2) + class NewsTest(TestCase): def setUp(self): self.areas = areas_setup() self.markers = marker_setup() self.news = [] - self.news.append(News.objects.create(title=u"Test news 1", - available=True)) - self.news.append(News.objects.create(title=u"Test news 2", - available=False)) + self.news.append(News.objects.create(is_front_page=True, + title=u"Test news 1", available=True)) + self.news.append(News.objects.create(is_front_page=True, + title=u"Test news 2", available=False)) def test_news_display(self): context = display_news(Context({})) diff --git a/chimere/urls.py b/chimere/urls.py index d6ef9b9..1ccabd4 100644 --- a/chimere/urls.py +++ b/chimere/urls.py @@ -83,6 +83,8 @@ urlpatterns += patterns('chimere.views', name="getgeoobjects"), url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getAvailableCategories/$', 'get_available_categories', name="get_categories"), + url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getAllCategories/$', + 'get_all_categories', name="get_all_categories"), url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getCategory/(?P<category_id>\d+)/?$', 'getCategory', name="get_category"), url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?get-share-url/(?P<network>\w+)?$', diff --git a/chimere/views.py b/chimere/views.py index edd0ac4..03f75a6 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -39,7 +39,7 @@ from django.db.models import Q from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import redirect, render_to_response from django.template import loader, RequestContext, defaultfilters -from django.utils import simplejson +from django.utils import simplejson as json from django.utils.http import urlquote from django.utils.translation import ugettext as _ @@ -380,7 +380,7 @@ def processRouteFile(request, area_name='', file_id=None): route = route_file.route if not route: return HttpResponse(status=500) - return HttpResponse('('+simplejson.dumps({'wkt':route, + return HttpResponse('(' + json.dumps({'wkt':route, 'file_id':file_id})+')', 'application/javascript', status=200) except OSError as e: @@ -605,10 +605,28 @@ def getGeoObjects(request, area_name, category_ids, status): data = '{"type": "FeatureCollection", "features":[%s]}' % ",".join(jsons) return HttpResponse(data) +def get_all_categories(request, area_name=None): + ''' + Get all available categories in JSON + ''' + context_data, redir = get_base_response(area_name) + area = context_data["area"] + subcategories = [] + if area: + subcategories = list(area.getCategories('A', + area_name=context_data['area_name'])) + else: + categories = SubCategory.getAvailable() + for cat, subcats in categories: + subcategories += subcats + subcats = [subcat.getJSONDict() for subcat in subcategories] + jsons = json.dumps({'categories':subcats}) + return HttpResponse(jsons) + def get_available_categories(request, area_name=None, area=None, status='A', force=None): ''' - Get categories for a designed area + Get category menu for a designed area ''' context_data, redir = get_base_response(area_name) area = context_data["area"] @@ -718,7 +736,7 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, transport=transport, speed=speed) if not jsons: return HttpResponse('no results') - jsonencoder = simplejson.JSONEncoder() + jsonencoder = json.JSONEncoder() total = jsonencoder.encode(total) desc = jsonencoder.encode(desc) |
