summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2013-04-01 14:49:49 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2013-04-01 14:49:49 +0200
commit273c6c037a87c1ecff8bc0630b0254b74da1ac01 (patch)
tree052af51c09fd546742e003f6f58813b987e4016b
parent01e644c2a3667a9fb5d2977a51e4730e5176b4c5 (diff)
downloadChimère-273c6c037a87c1ecff8bc0630b0254b74da1ac01.tar.bz2
Chimère-273c6c037a87c1ecff8bc0630b0254b74da1ac01.zip
Change settings to allow different JS map renderer
-rw-r--r--chimere/settings.sample.py278
-rw-r--r--chimere/templates/chimere/blocks/head_chimere.html4
-rw-r--r--chimere/templatetags/chimere_tags.py8
-rw-r--r--chimere/widgets.py25
4 files changed, 299 insertions, 16 deletions
diff --git a/chimere/settings.sample.py b/chimere/settings.sample.py
new file mode 100644
index 0000000..6db1464
--- /dev/null
+++ b/chimere/settings.sample.py
@@ -0,0 +1,278 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Don't edit this file:
+# overload all theses settings in your local_settings.py file
+
+import os
+
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+
+# Django settings for chimere project.
+PROJECT_NAME = 'Chimere'
+ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) + "/"
+
+EMAIL_HOST = 'localhost'
+STATIC_URL = '/static/'
+STATIC_ROOT = ROOT_PATH + 'static/'
+
+TINYMCE_URL = '/tinymce/'
+JQUERY_JS_URLS = ('/javascript/jquery/jquery.js',
+ '/javascript/jquery-ui/jquery-ui.js',)
+JQUERY_CSS_URLS = ('/javascript/jquery-ui/css/smoothness/jquery-ui.css',
+ '/javascript/jquery-ui-themes/base/jquery.ui.all.css')
+
+GPSBABEL = '/usr/bin/gpsbabel'
+GPSBABEL_OPTIONS = 'simplify,crosstrack,error=0.005k' # simplify with an error of 5 meters
+#GPSBABEL_OPTIONS = 'simplify,count=100'
+
+## chimere specific ##
+CHIMERE_DEFAULT_ZOOM = 10
+# center of the map
+CHIMERE_DEFAULT_CENTER = (-1.679444, 48.114722)
+# projection used by the main map
+# most public map providers use spherical mercator : 900913
+CHIMERE_EPSG_PROJECTION = 900913
+# projection displayed to the end user by openlayers
+# chimere use the same projection to save its data in the database
+CHIMERE_EPSG_DISPLAY_PROJECTION = 4326
+# display of shortcuts for areas
+CHIMERE_DISPLAY_AREAS = True
+# number of day before an event to display
+# if equal to 0: disable event management
+# if you change this value from 0 to a value in a production environnement
+# don't forget to run the upgrade.py script to create appropriate fields in
+# the database
+CHIMERE_DAYS_BEFORE_EVENT = 30
+# allow feeds
+CHIMERE_FEEDS = True
+
+CHIMERE_ICON_WIDTH = 21
+CHIMERE_ICON_HEIGHT = 25
+CHIMERE_ICON_OFFSET_X = -10
+CHIMERE_ICON_OFFSET_Y = -25
+
+# display picture inside the description by default or inside a galery?
+CHIMERE_MINIATURE_BY_DEFAULT = False
+
+# JS definition of the default map (for admin and when no map are defined in
+# the application)
+# cf. OpenLayers documentation for more details
+CHIMERE_DEFAULT_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map
+
+CHIMERE_XAPI_URL = 'http://open.mapquestapi.com/xapi/api/0.6/'
+CHIMERE_OSM_API_URL = 'api06.dev.openstreetmap.org' # test URL
+CHIMERE_OSM_USER = 'test'
+CHIMERE_OSM_PASSWORD = 'test'
+
+# as the web server need to be reloaded when property models are changed
+# it could be a good idea to hide it to an admin who could'nt do that
+CHIMERE_HIDE_PROPERTYMODEL = False
+
+# encoding for shapefile import
+CHIMERE_SHAPEFILE_ENCODING = 'ISO-8859-1'
+
+# thumbnail
+CHIMERE_THUMBS_SCALE_HEIGHT=250
+CHIMERE_THUMBS_SCALE_WIDTH=None
+
+CHIMERE_CSV_ENCODING = 'ISO-8859-1'
+
+ADMINS = (
+ # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'NAME': 'ratatouille',
+ 'ENGINE': 'django.contrib.gis.db.backends.postgis',
+ 'HOST': 'localhost',
+ 'PORT': '5432',
+ 'USER': 'ratatouille',
+ 'PASSWORD': 'wiki',
+ },
+}
+
+# Local time zone for this installation. Choices can be found here:
+# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+# although not all variations may be possible on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'Europe/Paris'
+
+# Language code for this installation. All choices can be found here:
+# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
+# http://blogs.law.harvard.edu/tech/stories/storyReader$15
+LANGUAGE_CODE = 'fr-fr'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+USE_L10N = True
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = ROOT_PATH + 'media/'
+
+# URL that handles the media served from MEDIA_ROOT.
+# Example: "http://media.lawrence.com"
+MEDIA_URL = '/media/'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+# 'django.template.loaders.eggs.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.middleware.doc.XViewMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware'
+)
+
+ROOT_URLCONF = 'chimere_example_project.urls'
+
+TEMPLATE_DIRS = [
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+ ROOT_PATH + 'templates',
+ ROOT_PATH + '../chimere/templates',
+]
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+ "django.contrib.auth.context_processors.auth",
+ "django.core.context_processors.debug",
+ "django.core.context_processors.i18n",
+ "django.core.context_processors.media",
+ "django.core.context_processors.static",
+ "django.contrib.messages.context_processors.messages",
+ "django.core.context_processors.request",
+)
+
+INSTALLED_APPS = [
+ 'django.contrib.auth',
+ 'django.contrib.admin',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.gis',
+ 'django.contrib.staticfiles',
+]
+
+# celery
+try:
+ import djcelery
+ import kombu
+ djcelery.setup_loader()
+ BROKER_URL = 'django://'
+ INSTALLED_APPS += ['kombu.transport.django',
+ 'djcelery']
+except ImportError:
+ # some import and export will not be available
+ pass
+
+INSTALLED_APPS += [
+ 'south',
+ 'chimere',
+# 'chimere.scripts', # activate it if you want to use old migration scripts
+]
+
+LOG_PATH = '/var/log/django/'
+
+CHIMERE_VIEW_RENDERER = 'openlayers' # 'openlayers' or 'leaflet'
+CHIMERE_EDIT_RENDERER = 'openlayers' # 'openlayers'
+
+try:
+ from local_settings import *
+except ImportError, e:
+ print 'Unable to load local_settings.py:', e
+
+if 'LOGGING' not in globals():
+ global LOGGING
+ LOGGING = {'version': 1,
+ 'disable_existing_loggers': False,
+ 'handlers': {
+ # Include the default Django email handler for errors
+ # This is what you'd get without configuring logging at all.
+ 'mail_admins': {
+ 'class': 'django.utils.log.AdminEmailHandler',
+ 'level': 'ERROR',
+ # But the emails are plain text by default - HTML is nicer
+ 'include_html': True,
+ },
+ # Log to a text file that can be rotated by logrotate
+ 'logfile': {
+ 'class': 'logging.handlers.WatchedFileHandler',
+ 'filename': LOG_PATH + 'chimere.log'
+ },
+ },
+ 'loggers': {
+ # Again, default Django configuration to email unhandled exceptions
+ 'django.request': {
+ 'handlers': ['mail_admins'],
+ 'level': 'ERROR',
+ 'propagate': True,
+ },
+ # Might as well log any errors anywhere else in Django
+ 'django': {
+ 'handlers': ['logfile'],
+ 'level': 'ERROR',
+ 'propagate': False,
+ },
+ # Your own app - this assumes all your logger names start with "myapp."
+ 'chimere': {
+ 'handlers': ['logfile'],
+ 'level': 'WARNING', # Or maybe INFO or DEBUG
+ 'propogate': False
+ },
+ },
+ }
+
+
+if 'CHIMERE_SHARE_NETWORKS' not in globals():
+ # after the locals to get the right STATIC_URL
+
+ # share with
+ global CHIMERE_SHARE_NETWORKS
+ CHIMERE_SHARE_NETWORKS = (
+ ("Email", 'mailto:?subject=%(text)s&body=%(url)s',
+ STATIC_URL + 'chimere/img/email.png'),
+ ("Facebook", 'http://www.facebook.com/sharer.php?t=%(text)s&u=%(url)s',
+ STATIC_URL + 'chimere/img/facebook.png'),
+ ("Twitter", 'http://twitter.com/home?status=%(text)s %(url)s',
+ STATIC_URL + 'chimere/img/twitter.png'),
+ ("Identi.ca", 'http://identi.ca/index.php?action=newnotice&status_textarea=%(text)s %(url)s',
+ STATIC_URL + 'chimere/img/identica.png'),
+ )
+
+if 'MAP_JS_URLS' not in globals():
+ global MAP_JS_URLS
+ MAP_JS_URLS = {
+ 'openlayers':[
+ STATIC_URL + "openlayers/OpenLayers.js",
+ STATIC_URL + "openlayers/SimplePanZoom.js",
+ "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"],
+ 'leaflet':[
+ STATIC_URL + "leaflet/leaflet.js"
+ ]
+ }
+
+if 'MAP_CSS_URLS' not in globals():
+ global MAP_CSS_URLS
+ MAP_CSS_URLS = {
+ 'openlayers':["http://www.openlayers.org/api/theme/default/style.css"],
+ 'leaflet':[
+ STATIC_URL + "leaflet/leaflet.css",
+ STATIC_URL + "leaflet/leaflet.ie.css"
+ ]
+ }
+
diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html
index 147d05b..8863f10 100644
--- a/chimere/templates/chimere/blocks/head_chimere.html
+++ b/chimere/templates/chimere/blocks/head_chimere.html
@@ -1,6 +1,6 @@
-{% for css_url in OSM_CSS_URLS %}
+{% for css_url in MAP_CSS_URLS %}
<link rel="stylesheet" href="{{ css_url }}" />{% endfor %}
-{% for js_url in OSM_JS_URLS %}
+{% for js_url in MAP_JS_URLS %}
<script src="{{ js_url }}" type="text/javascript"></script>{% endfor %}
{% if routing %}<script src="{{ STATIC_URL }}chimere/js/routing-widget.js" type="text/javascript"></script>{% endif %}
<script src="{{ STATIC_URL }}chimere/js/clustering.js" type="text/javascript"></script>
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index ed835a8..06e72ed 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -119,7 +119,7 @@ def head_jme(context):
return context_data
@register.inclusion_tag('chimere/blocks/head_chimere.html', takes_context=True)
-def head_chimere(context):
+def head_chimere(context, view=True):
"""
Create context and display head elements (js, css, etc.) for chimere.
"""
@@ -130,6 +130,8 @@ def head_chimere(context):
area = Area.objects.get(urn=area_name)
except ObjectDoesNotExist:
pass
+ map_renderer = settings.CHIMERE_VIEW_RENDERER if view \
+ else settings.CHIMERE_EDIT_RENDERER
context_data = {
"STATIC_URL": settings.STATIC_URL,
"MEDIA_URL": settings.MEDIA_URL,
@@ -141,8 +143,8 @@ def head_chimere(context):
"DEFAULT_CENTER": settings.CHIMERE_DEFAULT_CENTER,
"DEFAULT_ZOOM": settings.CHIMERE_DEFAULT_ZOOM,
"MAP_LAYER": settings.CHIMERE_DEFAULT_MAP_LAYER,
- "OSM_CSS_URLS": settings.OSM_CSS_URLS,
- "OSM_JS_URLS": settings.OSM_JS_URLS,
+ "MAP_CSS_URLS": settings.MAP_CSS_URLS[map_renderer],
+ "MAP_JS_URLS": settings.MAP_JS_URLS[map_renderer],
'routing':settings.CHIMERE_ENABLE_ROUTING
}
return context_data
diff --git a/chimere/widgets.py b/chimere/widgets.py
index 45161e1..f39248c 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -248,10 +248,11 @@ class PointChooserWidget(forms.TextInput):
"""
class Media:
css = {
- "all": settings.OSM_CSS_URLS + \
+ "all": settings.MAP_CSS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
["%schimere/css/forms.css" % settings.STATIC_URL,]
}
- js = settings.OSM_JS_URLS + list(settings.JQUERY_JS_URLS) + \
+ js = settings.MAP_JS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
+ list(settings.JQUERY_JS_URLS) + \
["%schimere/js/jquery.chimere.js" % settings.STATIC_URL]
def render(self, name, value, attrs=None, area_name=''):
@@ -340,10 +341,12 @@ class RouteChooserWidget(forms.TextInput):
Manage the edition of route on a map
"""
class Media:
- css = {"all": settings.OSM_CSS_URLS + \
- ["%schimere/css/forms.css" % settings.STATIC_URL,]
+ css = {
+ "all": settings.MAP_CSS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
+ ["%schimere/css/forms.css" % settings.STATIC_URL,]
}
- js = settings.OSM_JS_URLS + list(settings.JQUERY_JS_URLS) + \
+ js = settings.MAP_JS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
+ list(settings.JQUERY_JS_URLS) + \
["%schimere/js/jquery.chimere.js" % settings.STATIC_URL,
"%schimere/js/edit_route_map.js" % settings.STATIC_URL,
"%schimere/js/base.js" % settings.STATIC_URL,]
@@ -477,11 +480,11 @@ class AreaWidget(forms.TextInput):
"""
class Media:
css = {
- "all": settings.OSM_CSS_URLS + \
+ "all": settings.MAP_CSS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
["%schimere/css/forms.css" % settings.STATIC_URL,]
}
- js = settings.OSM_JS_URLS + [
- "%schimere/js/edit_area.js" % settings.STATIC_URL,
+ js = settings.MAP_JS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
+ ["%schimere/js/edit_area.js" % settings.STATIC_URL,
"%schimere/js/base.js" % settings.STATIC_URL,]
def get_bounding_box_from_value(self, value):
@@ -576,11 +579,11 @@ class ImportFiltrWidget(AreaWidget):
"""
class Media:
css = {
- "all": settings.OSM_CSS_URLS + \
+ "all": settings.MAP_CSS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
["%schimere/css/forms.css" % settings.STATIC_URL,]
}
- js = settings.OSM_JS_URLS + [
- "%schimere/js/edit_area.js" % settings.STATIC_URL,
+ js = settings.MAP_JS_URLS[settings.CHIMERE_EDIT_RENDERER] + \
+ ["%schimere/js/edit_area.js" % settings.STATIC_URL,
"%schimere/js/base.js" % settings.STATIC_URL,]
def render(self, name, value, attrs=None):