summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
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
commitf25285634613ff5beeb0c360d817835738e72b40 (patch)
treea63fcd260fe641ea27f74291ca2ed36e6a816a74 /chimere
parentb845195fda9c4e9fb79c3f6272d8de202822f57e (diff)
downloadChimère-f25285634613ff5beeb0c360d817835738e72b40.tar.bz2
Chimère-f25285634613ff5beeb0c360d817835738e72b40.zip
JS: preload icon images
Diffstat (limited to 'chimere')
-rw-r--r--chimere/models.py18
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js29
-rw-r--r--chimere/tests.py20
-rw-r--r--chimere/urls.py2
-rw-r--r--chimere/views.py26
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)