diff options
| -rw-r--r-- | chimere/settings.sample.py | 278 | ||||
| -rw-r--r-- | chimere/templates/chimere/blocks/head_chimere.html | 4 | ||||
| -rw-r--r-- | chimere/templatetags/chimere_tags.py | 8 | ||||
| -rw-r--r-- | chimere/widgets.py | 25 |
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): |
