summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/actions.py39
-rw-r--r--chimere/admin.py24
-rw-r--r--chimere/fixtures/initial_data.json91
-rw-r--r--chimere/forms.py116
-rw-r--r--chimere/locale/fr/LC_MESSAGES/django.po622
-rw-r--r--chimere/migrations/0029_auto__add_propertymodelchoice.py (renamed from chimere/migrations/0030_auto__add_field_importer_default_name.py)28
-rw-r--r--chimere/migrations/0030_auto__add_multimediaextension.py (renamed from chimere/migrations/0029_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py)56
-rw-r--r--chimere/migrations/0031_auto__add_field_subcategory_dated.py (renamed from chimere/migrations/0032_auto__add_field_subcategory_submission.py)38
-rw-r--r--chimere/migrations/0032_auto__add_page.py252
-rw-r--r--chimere/migrations/0033_auto__add_field_marker_is_front_page__add_field_news_is_front_page__ad.py264
-rw-r--r--chimere/migrations/0034_auto__add_field_subcategory_description.py249
-rw-r--r--chimere/migrations/0035_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py277
-rw-r--r--chimere/migrations/0036_auto__add_field_importer_default_name.py254
-rw-r--r--chimere/migrations/0037_auto__add_field_subcategory_hover_icon.py255
-rw-r--r--chimere/migrations/0038_auto__chg_field_picturefile_width__chg_field_picturefile_height.py (renamed from chimere/migrations/0031_auto__chg_field_picturefile_width__chg_field_picturefile_height.py)0
-rw-r--r--chimere/migrations/0039_auto__add_field_subcategory_submission.py254
-rw-r--r--chimere/migrations/0040_auto__add_field_subcategory_as_layer.py257
-rw-r--r--chimere/migrations/0041_auto__add_field_importer_source_file.py (renamed from chimere/migrations/0033_auto__add_field_importer_source_file.py)0
-rw-r--r--chimere/migrations/0042_auto__add_field_importer_origin__add_field_importer_license__add_field.py (renamed from chimere/migrations/0034_auto__add_field_importer_origin__add_field_importer_license__add_field.py)0
-rw-r--r--chimere/migrations/0043_area_permissions.py (renamed from chimere/migrations/0035_area_permissions.py)0
-rw-r--r--chimere/migrations/0044_auto.py (renamed from chimere/migrations/0036_auto.py)0
-rw-r--r--chimere/models.py153
-rw-r--r--chimere/route.py116
-rw-r--r--chimere/static/chimere/css/print.css36
-rw-r--r--chimere/static/chimere/css/styles.css258
-rw-r--r--chimere/static/chimere/img/bottom-arrow.pngbin0 -> 199 bytes
-rw-r--r--chimere/static/chimere/img/close.pngbin0 -> 856 bytes
-rw-r--r--chimere/static/chimere/img/empty.pngbin0 -> 165 bytes
-rw-r--r--chimere/static/chimere/img/feed.pngbin0 -> 1453 bytes
-rw-r--r--chimere/static/chimere/img/film_logo.pngbin0 -> 748 bytes
-rw-r--r--chimere/static/chimere/img/flag-finish.pngbin0 -> 1652 bytes
-rw-r--r--chimere/static/chimere/img/flag-start.pngbin0 -> 1165 bytes
-rw-r--r--chimere/static/chimere/img/flag-step.pngbin0 -> 1256 bytes
-rw-r--r--chimere/static/chimere/img/images_licences17
-rw-r--r--chimere/static/chimere/img/img_logo.pngbin0 -> 864 bytes
-rw-r--r--chimere/static/chimere/img/marker-cluster.pngbin0 -> 949 bytes
-rw-r--r--chimere/static/chimere/img/printer.pngbin0 -> 914 bytes
-rw-r--r--chimere/static/chimere/img/share-icon.pngbin0 -> 1208 bytes
-rw-r--r--chimere/static/chimere/img/share-icon.xcfbin0 -> 5431 bytes
-rw-r--r--chimere/static/chimere/js/base.js33
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js811
-rw-r--r--chimere/static/chimere/js/nominatim-widget.js45
-rw-r--r--chimere/static/chimere/js/routing-widget.js47
-rw-r--r--chimere/static/chimere/js/utils.js6
-rw-r--r--chimere/templates/base.html36
-rw-r--r--chimere/templates/chimere/base.html1
-rw-r--r--chimere/templates/chimere/blocks/actions.html4
-rw-r--r--chimere/templates/chimere/blocks/alternate_multimedia.html151
-rw-r--r--chimere/templates/chimere/blocks/categories.html56
-rw-r--r--chimere/templates/chimere/blocks/head_chimere.html2
-rw-r--r--chimere/templates/chimere/blocks/head_form.html2
-rw-r--r--chimere/templates/chimere/blocks/map.html39
-rw-r--r--chimere/templates/chimere/blocks/map_menu.html14
-rw-r--r--chimere/templates/chimere/blocks/multimedia_file.html2
-rw-r--r--chimere/templates/chimere/blocks/news.html53
-rw-r--r--chimere/templates/chimere/blocks/routing.html45
-rw-r--r--chimere/templates/chimere/blocks/share_bar.html39
-rw-r--r--chimere/templates/chimere/default_extra_page.html15
-rw-r--r--chimere/templates/chimere/detail.html14
-rw-r--r--chimere/templates/chimere/edit.html3
-rw-r--r--chimere/templates/chimere/main_map.html14
-rw-r--r--chimere/templatetags/chimere_tags.py132
-rw-r--r--chimere/urls.py20
-rw-r--r--chimere/views.py132
-rw-r--r--chimere/widgets.py115
-rw-r--r--example_project/locale/fr/LC_MESSAGES/django.po47
-rw-r--r--example_project/settings.py29
67 files changed, 5044 insertions, 519 deletions
diff --git a/chimere/actions.py b/chimere/actions.py
index 0363d54..a434279 100644
--- a/chimere/actions.py
+++ b/chimere/actions.py
@@ -22,21 +22,44 @@ Actions available in the main interface
"""
from django.conf import settings
from django.contrib.auth import models
+from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
+from models import Page
+
class Action:
- def __init__(self, id, path, label):
+ def __init__(self, id, path, label, extra_url_args=[]):
self.id, self.path, self.label = id, path, label
+ self.extra_url_args, self.url = extra_url_args, None
+
+ def update_url(self, area_name):
+ self.url = reverse(self.path,
+ args=[area_name+'/'] + self.extra_url_args)
-actions = [(Action('view', '', _('View')), []),
- (Action('contribute', 'edit/', _('Contribute')),
- (Action('edit', 'edit/', _('Add a new point of interest')),
- Action('edit-route', 'edit-route/', _('Add a new route'))),
- ),]
+default_actions = [(Action('view', 'chimere:index', _('View')), []),
+ (Action('contribute', 'chimere:edit', _('Contribute')),
+ (Action('edit', 'chimere:edit', _('Add a new point of interest')),
+ Action('edit-route', 'chimere:editroute', _('Add a new route'))),
+ ),]
if settings.CHIMERE_FEEDS:
- actions.append((Action('rss', 'feeds', _('RSS feeds')), []))
+ default_actions.append((Action('rss', 'chimere:feeds-form',
+ _('RSS feeds')), []))
if settings.EMAIL_HOST:
- actions.append((Action('contact', 'contact', _('Contact us')), []),)
+ default_actions.append((Action('contact', 'chimere:contact',
+ _('Contact us')), []),)
+
+def actions(area_name=''):
+ acts = default_actions[:]
+ for act, childs in default_actions:
+ act.update_url(area_name)
+ for child_act in childs:
+ child_act.update_url(area_name)
+ for page in Page.objects.filter(available=True).order_by('order'):
+ act = Action(page.mnemonic, 'chimere:extra_page', page.title,
+ [page.mnemonic])
+ act.update_url(area_name)
+ acts.append((act, []))
+ return acts
diff --git a/chimere/admin.py b/chimere/admin.py
index 7663bd5..cc7925c 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -36,15 +36,15 @@ except ImportError:
pass
from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
- NewsAdminForm, CategoryAdminForm, ImporterAdminForm, \
- PictureFileAdminForm, MultimediaFileAdminForm
+ NewsAdminForm, CategoryAdminForm, ImporterAdminForm,\
+ PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm
from chimere.models import Category, Icon, SubCategory, Marker, \
PropertyModel, News, Route, Area, ColorTheme, Color, \
MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\
+ PropertyModelChoice, MultimediaExtension, Page,\
get_areas_for_user, get_users_by_area
from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\
CSVManager
-from chimere.widgets import TextareaWidget
def validate(modeladmin, request, queryset):
for item in queryset:
@@ -110,9 +110,9 @@ class MarkerAdmin(admin.ModelAdmin):
list_filter = ('status', 'categories')
actions = [validate, export_to_kml, export_to_shapefile, export_to_csv]
exclude = ['submiter_session_key', 'import_key', 'import_version',
- 'available_date']
+ 'available_date', 'ref_item']
readonly_fields = ['submiter_email', 'submiter_comment', 'import_source',
- 'ref_item', 'modified_since_import']
+ 'submiter_name', 'ref_item', 'modified_since_import']
form = MarkerAdminForm
inlines = [MultimediaInline, PictureInline]
@@ -202,6 +202,11 @@ class ImporterAdmin(admin.ModelAdmin):
actions = [importing, cancel_import, export_to_osm, cancel_export]
admin.site.register(Importer, ImporterAdmin)
+class PageAdmin(admin.ModelAdmin):
+ """
+ Use the TinyMCE widget for the page content
+ """
+ form = PageAdminForm
class NewsAdmin(admin.ModelAdmin):
"""
@@ -230,13 +235,20 @@ class ColorThemeAdmin(admin.ModelAdmin):
class IconAdmin(admin.ModelAdmin):
exclude = ['height', 'width']
+class PropertyModelChoiceInline(admin.TabularInline):
+ model = PropertyModelChoice
+ extra = 1
+class PropertyModelAdmin(admin.ModelAdmin):
+ inlines = [PropertyModelChoiceInline]
+
# register of differents database fields
+admin.site.register(Page, PageAdmin)
admin.site.register(News, NewsAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Icon, IconAdmin)
admin.site.register(Marker, MarkerAdmin)
admin.site.register(Route, RouteAdmin)
-admin.site.register(PropertyModel)
+admin.site.register(PropertyModel, PropertyModelAdmin)
admin.site.register(Area, AreaAdmin)
admin.site.register(ColorTheme, ColorThemeAdmin)
admin.site.register(Layer)
diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json
index 21ba13c..20347a3 100644
--- a/chimere/fixtures/initial_data.json
+++ b/chimere/fixtures/initial_data.json
@@ -165,6 +165,97 @@
}
},
{
+ "pk": 16,
+ "model": "chimere.multimediatype",
+ "fields": {
+ "available": false,
+ "media_type": "O",
+ "iframe": false,
+ "name": "auto",
+ "mime_type": ""
+ }
+ },
+ {
+ "pk": 1,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 7,
+ "name": "mkv"
+ }
+ },
+ {
+ "pk": 3,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 2,
+ "name": "mp3"
+ }
+ },
+ {
+ "pk": 4,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 3,
+ "name": "ogg"
+ }
+ },
+ {
+ "pk": 5,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 5,
+ "name": "mp4"
+ }
+ },
+ {
+ "pk": 6,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 4,
+ "name": "mpg"
+ }
+ },
+ {
+ "pk": 7,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 4,
+ "name": "mpeg"
+ }
+ },
+ {
+ "pk": 8,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 8,
+ "name": "avi"
+ }
+ },
+ {
+ "pk": 9,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 6,
+ "name": "ogm"
+ }
+ },
+ {
+ "pk": 10,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 6,
+ "name": "ogv"
+ }
+ },
+ {
+ "pk": 11,
+ "model": "chimere.multimediaextension",
+ "fields": {
+ "multimedia_type": 13,
+ "name": "webm"
+ }
+ },
+ {
"pk": 1,
"model": "chimere.layer",
"fields": {
diff --git a/chimere/forms.py b/chimere/forms.py
index bb31ffe..8ce9ad2 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -32,10 +32,12 @@ from django.contrib.admin.widgets import AdminDateWidget
from django.core.mail import EmailMessage, BadHeaderError
from chimere.models import Marker, Route, PropertyModel, Property, Area,\
- News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
- PictureFile, Importer
+ News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
+ PictureFile, Importer, PropertyModelChoice, IFRAME_LINKS, \
+ MultimediaExtension, Page
from chimere.widgets import AreaField, PointField, TextareaWidget, \
- TextareaAdminWidget, DatePickerWidget
+ FullTextareaWidget, DatePickerWidget, ButtonSelectWidget, NominatimWidget, \
+ TextareaAdminWidget
from datetime import timedelta, datetime, tzinfo
@@ -53,13 +55,18 @@ class UTC(tzinfo):
def dst(self, dt):
return ZERO
+def getStaffEmails():
+ return [u.email for u in
+ User.objects.filter(is_staff=True).exclude(email="").order_by('id')]
+
def notifyStaff(subject, body, sender=None):
if not settings.EMAIL_HOST:
return
+ user_list = getStaffEmails()
+ if not user_list:
+ return
if settings.PROJECT_NAME:
subject = u'[%s] %s' % (settings.PROJECT_NAME, subject)
- user_list = [u.email for u in
- User.objects.filter(is_staff=True).exclude(email="").order_by('id')]
headers = {}
if sender:
headers['Reply-To'] = sender
@@ -89,6 +96,20 @@ class ContactForm(forms.Form):
email = forms.EmailField(label=_("Email (optional)"), required=False)
content = forms.CharField(label=_("Object"), widget=forms.Textarea)
+class SubCategoryAdminForm(forms.ModelForm):
+ '''
+ Add a tinyMCE widget to fill description
+ '''
+ description = forms.CharField(widget=FullTextareaWidget, required=False)
+
+class PageAdminForm(forms.ModelForm):
+ """
+ Main form for extra pages
+ """
+ content = forms.CharField(widget=FullTextareaWidget)
+ class Meta:
+ model = Page
+
class NewsAdminForm(forms.ModelForm):
"""
Main form for news
@@ -215,16 +236,32 @@ class MarkerAdminFormBase(forms.ModelForm):
return new_marker
# As we have dynamic fields, it's cleaner to make the class dynamic too
-fields = {}
-# declare properties
-for prop in PropertyModel.objects.filter(available=True):
- key = "property_%d_%d" % (prop.order, prop.id)
- fields[key] = forms.CharField(label=prop.name,
- widget=PropertyModel.TYPE_WIDGET[prop.type],
- required=False)
-MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,), fields)
-
-class MarkerForm(MarkerAdminForm):
+def get_properties(queryset):
+ fields = {}
+ for prop in queryset:
+ key = "property_%d_%d" % (prop.order, prop.id)
+ if prop.type == 'C':
+ choices = PropertyModelChoice.objects.filter(propertymodel=prop,
+ available=True
+ ).order_by('value')
+ fields[key] = forms.ChoiceField(label=prop.name,
+ choices=[('', '--')] + \
+ [(choice.pk, unicode(choice))
+ for choice in choices],
+ required=False)
+ else:
+ fields[key] = forms.CharField(label=prop.name,
+ widget=PropertyModel.TYPE_WIDGET[prop.type],
+ required=False)
+ return fields
+
+# in admin all fields are displayed
+MarkerAdminForm = type("MarkerAdminForm", (MarkerAdminFormBase,),
+ get_properties(PropertyModel.objects.all()))
+MarkerBaseForm = type("MarkerBaseForm", (MarkerAdminFormBase,),
+ get_properties(PropertyModel.objects.filter(available=True)))
+
+class MarkerForm(MarkerBaseForm):
"""
Form for the edit page
"""
@@ -387,7 +424,33 @@ class MultimediaFileForm(BaseFileForm):
def __init__(self, *args, **kwargs):
super(MultimediaFileForm, self).__init__(*args, **kwargs)
self.fields['multimedia_type'].widget.choices = \
- MultimediaType.get_tuples()
+ MultimediaType.get_tuples()
+ # this can be auto detect
+ self.fields['multimedia_type'].required = False
+
+ def clean(self):
+ if not self.cleaned_data.get('url'):
+ return self.cleaned_data
+ if self.cleaned_data.get('multimedia_type') and \
+ self.cleaned_data['multimedia_type'].name != 'auto':
+ return self.cleaned_data
+ url = self.cleaned_data['url']
+ for mm_type in IFRAME_LINKS:
+ res, embeded_url = IFRAME_LINKS[mm_type]
+ if [r for r in res if r.search(url)]:
+ multimedia_type = MultimediaType.objects.get(
+ name__iexact=mm_type)
+ self.cleaned_data['multimedia_type'] = multimedia_type
+ return self.cleaned_data
+ ext = url.split(".")[-1]
+ q = MultimediaExtension.objects.filter(name__iendswith=ext)
+ if q.count():
+ self.cleaned_data['multimedia_type'] = q.all()[0].multimedia_type
+ else:
+ # default to an iframe
+ self.cleaned_data['multimedia_type'] = \
+ MultimediaType.objects.filter(name__iexact='iframe').all()[0]
+ return self.cleaned_data
MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True)
@@ -485,3 +548,24 @@ class AreaForm(AreaAdminForm):
class Meta:
model = Area
+CHIMERE_ROUTING_TRANSPORT = [(idx, _(lbl))
+ for idx, lbl in settings.CHIMERE_ROUTING_TRANSPORT]
+
+class RoutingForm(forms.Form):
+ transport = forms.ChoiceField(label='', widget=ButtonSelectWidget,
+ choices=CHIMERE_ROUTING_TRANSPORT,
+ initial=CHIMERE_ROUTING_TRANSPORT[0][0])
+ start = forms.CharField(label=_(u"Start"), widget=NominatimWidget)
+ end = forms.CharField(label=_(u"Finish"), widget=NominatimWidget)
+ speed = forms.ChoiceField(label=_(u"Speed"), choices=[],
+ required=False)
+
+ def __init__(self, *args, **kwargs):
+ super(RoutingForm, self).__init__(*args, **kwargs)
+ if not settings.CHIMERE_ROUTING_SPEEDS:
+ self.fields.pop('speed')
+ self.fields['speed'].widget.choices = [('', '--')]
+ for transport in settings.CHIMERE_ROUTING_SPEEDS:
+ for speed, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]:
+ self.fields['speed'].widget.choices.append(
+ ("%s_%d" % (transport, speed), _(lbl)))
diff --git a/chimere/locale/fr/LC_MESSAGES/django.po b/chimere/locale/fr/LC_MESSAGES/django.po
index 214dfb4..5956c20 100644
--- a/chimere/locale/fr/LC_MESSAGES/django.po
+++ b/chimere/locale/fr/LC_MESSAGES/django.po
@@ -1,80 +1,79 @@
# Chimère
# Copyright (C) 2008-2012
# This file is distributed under the same license as the Chimère package.
-# Étienne Loks <etienne.loks@peacefrogs.net>, 2008-2011.
+# Étienne Loks <etienne.loks@peacefrogs.net>, 2008-2012.
#
msgid ""
msgstr ""
-"Project-Id-Version: 0.2\n"
+"Project-Id-Version: 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-10-06 20:09+0200\n"
-"PO-Revision-Date: 2010-03-20 20:00+0100\n"
+"POT-Creation-Date: 2012-10-14 16:46+0200\n"
"Last-Translator: Étienne Loks <etienne.loks@peacefrogs.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: __init__.py:8 models.py:618
+#: __init__.py:8 models.py:734
msgid "Multimedia files"
msgstr "Fichiers multimedias"
-#: __init__.py:9 models.py:674
+#: __init__.py:9 models.py:790
msgid "Picture files"
msgstr "Fichiers d'image"
-#: actions.py:31
+#: actions.py:39
msgid "View"
msgstr "Voir"
-#: actions.py:32
+#: actions.py:40
msgid "Contribute"
msgstr "Participer"
-#: actions.py:33
+#: actions.py:41
msgid "Add a new point of interest"
msgstr "Ajout d'un point remarquable"
-#: actions.py:34
+#: actions.py:42
msgid "Add a new route"
msgstr "Ajout d'un nouveau trajet"
-#: actions.py:38
+#: actions.py:47
msgid "RSS feeds"
msgstr "Flux RSS"
-#: actions.py:41
+#: actions.py:51
msgid "Contact us"
msgstr "Nous contacter"
-#: admin.py:64 templates/chimere/feeds/rss.html:69
+#: admin.py:53 templates/chimere/feeds/rss.html:69
msgid "Validate"
msgstr "Valider"
-#: admin.py:75
+#: admin.py:64
msgid "Export to KML"
msgstr "Exporter en KML"
-#: admin.py:89
+#: admin.py:78
msgid "Export to Shapefile"
msgstr "Exporter en Shapefile"
-#: admin.py:99
+#: admin.py:88
msgid "Export to CSV"
msgstr "Exporter en CSV"
-#: admin.py:184
+#: admin.py:174
msgid "Import"
msgstr "Import"
-#: admin.py:190
+#: admin.py:180
msgid "Cancel import"
msgstr "Annuler l'import"
-#: admin.py:196
+#: admin.py:186
msgid "Cancel export"
msgstr "Annuler l'export"
-#: admin.py:204
+#: admin.py:194
msgid "Export to osm"
msgstr "Exporter vers osm"
@@ -90,437 +89,501 @@ msgstr "Nouveaux points d'intérêt de "
msgid "Last points of interest by area"
msgstr "Nouveaux points d'intérêt par zone"
-#: forms.py:76
+#: forms.py:83
msgid "New submission for"
msgstr "Nouvelle proposition pour"
-#: forms.py:77
+#: forms.py:84
#, python-format
msgid "The new item \"%s\" has been submited in the category: "
msgstr "Le nouvel élément « %s » a été proposé dans la catégorie : "
-#: forms.py:79
+#: forms.py:86
msgid "To valid, precise or unvalid this item: "
msgstr "Pour valider, préciser ou rejeter cet élément : "
-#: forms.py:89
+#: forms.py:96
msgid "Email (optional)"
msgstr "Courriel (optionnel) "
-#: forms.py:90
+#: forms.py:97
msgid "Object"
msgstr "Objet"
-#: forms.py:115
+#: forms.py:136
msgid "Shapefiles must be provided in a zipped archive."
msgstr ""
"Les fichiers Shapefiles doivent être fournis regroupés dans une archive zip."
-#: forms.py:119
+#: forms.py:140
msgid "You have to set \"source\" or \"source file\" but not both."
msgstr ""
"Vous devez spécifier le champ « Source » ou « Fichier source » mais pas les "
"deux."
-#: forms.py:124
+#: forms.py:145
msgid "You have to set \"source\" or \"source file\"."
msgstr "Vous devez spécifier le champ « Source » ou « Fichier source »."
-#: forms.py:183
+#: forms.py:204
msgid "End date has been set with no start date"
msgstr "Une date de fin a été donnée sans date de début"
-#: forms.py:194
+#: forms.py:215
msgid "This field is mandatory for the selected categories"
msgstr "Ce champ est obligatoire pour les catégories sélectionnées"
-#: forms.py:414
+#: forms.py:478
msgid "File"
msgstr "Fichier"
-#: forms.py:420
+#: forms.py:484
msgid "Bad file format: this must be a GPX or KML file"
msgstr "Mauvais format de fichier : KML et GPX sont supportés"
-#: forms.py:425 models.py:50 models.py:103 models.py:124 models.py:137
-#: models.py:151 models.py:267 models.py:565 models.py:608 models.py:651
-#: models.py:767 models.py:1083 models.py:1095 models.py:1180 utils.py:454
-#: templates/chimere/edit.html:39 templates/chimere/edit_route.html:36
+#: forms.py:489 models.py:53 models.py:101 models.py:163 models.py:184
+#: models.py:197 models.py:212 models.py:352 models.py:668 models.py:724
+#: models.py:767 models.py:883 models.py:1199 models.py:1211 models.py:1384
+#: utils.py:454 templates/chimere/edit.html:39
+#: templates/chimere/edit_route.html:36
+#: templates/chimere/blocks/alternate_multimedia.html:39
msgid "Name"
msgstr "Nom"
-#: forms.py:434 models.py:1132
+#: forms.py:498 models.py:1248
msgid "Area"
msgstr "Zone"
-#: models.py:51 models.py:125 models.py:152 models.py:278 models.py:569
-#: models.py:1101 models.py:1182
+#: forms.py:558
+msgid "Start"
+msgstr "Départ"
+
+#: forms.py:559
+msgid "Finish"
+msgstr "Arrivée :"
+
+#: forms.py:560
+msgid "Speed"
+msgstr "Vitesse"
+
+#: models.py:54
+msgid "Mnemonic"
+msgstr "Mnémonique"
+
+#: models.py:56 models.py:102 models.py:185 models.py:213 models.py:363
+#: models.py:672 models.py:1217 models.py:1386 models.py:1427
msgid "Available"
msgstr "Disponible"
-#: models.py:52 models.py:1191
+#: models.py:57 models.py:173 models.py:186 models.py:223 models.py:726
+#: models.py:782 models.py:1216 models.py:1373 models.py:1385
+msgid "Order"
+msgstr "Ordre"
+
+#: models.py:58
+msgid "Template path"
+msgstr "Chemin du patron"
+
+#: models.py:65 models.py:66
+msgid "Page"
+msgstr "Page"
+
+#: models.py:103 models.py:443
+msgid "Is front page"
+msgstr "Est en page principale"
+
+#: models.py:105 models.py:1395
msgid "Date"
msgstr "Date"
-#: models.py:58 models.py:59
+#: models.py:107 models.py:725
+msgid "Url"
+msgstr "Url"
+
+#: models.py:108
+msgid "Associated areas"
+msgstr "Zones associées"
+
+#: models.py:114 models.py:115 templates/chimere/blocks/news.html:3
+#: templates/chimere/blocks/news.html:5
msgid "News"
msgstr "Nouvelle"
-#: models.py:64
+#: models.py:124
msgid "Parameters"
msgstr "Paramètres"
-#: models.py:68
+#: models.py:128
msgid "TinyUrl"
msgstr "Mini-url"
-#: models.py:107 models.py:114 models.py:156
+#: models.py:167 models.py:174 models.py:221
msgid "Color theme"
msgstr "Thème de couleur"
-#: models.py:112
+#: models.py:172
msgid "Code"
msgstr "Code"
-#: models.py:113 models.py:126 models.py:158 models.py:610 models.py:666
-#: models.py:1100 models.py:1169 models.py:1181
-msgid "Order"
-msgstr "Ordre"
-
-#: models.py:119
+#: models.py:179
msgid "Color"
msgstr "Couleur"
-#: models.py:132 models.py:150 templates/chimere/main_map.html:13
+#: models.py:192 models.py:210 templates/chimere/main_map.html:13
msgid "Category"
msgstr "Catégorie"
-#: models.py:138 models.py:561 models.py:652 models.py:833
+#: models.py:198 models.py:664 models.py:768 models.py:949
+#: templates/chimere/blocks/alternate_multimedia.html:43
msgid "Image"
msgstr "Image"
-#: models.py:140 models.py:654 models.py:835
+#: models.py:200 models.py:770 models.py:951
msgid "Height"
msgstr "Hauteur"
-#: models.py:141 models.py:655 models.py:836
+#: models.py:201 models.py:771 models.py:952
msgid "Width"
msgstr "Largeur"
-#: models.py:145 models.py:155
+#: models.py:205 models.py:218
msgid "Icon"
msgstr "Icône"
-#: models.py:153
+#: models.py:214
msgid "Available for submission"
msgstr "Disponible pour soumission"
-#: models.py:159
+#: models.py:216
+msgid "Displayed in the layer menu"
+msgstr "Apparaît dans le menu des couches ?"
+
+#: models.py:219
+msgid "Hover icon"
+msgstr "Icône en survol"
+
+#: models.py:224
+msgid "Is dated"
+msgstr "Est daté"
+
+#: models.py:225
msgid "Marker"
msgstr "Point d'intérêt"
-#: models.py:160 models.py:829 models.py:844
+#: models.py:226 models.py:945 models.py:960
#: templates/chimere/edit_route.html:27
msgid "Route"
msgstr "Trajet"
-#: models.py:161
+#: models.py:227
msgid "Both"
msgstr "Mixte"
-#: models.py:162
+#: models.py:228
msgid "Item type"
msgstr "Type d'élément"
-#: models.py:167
+#: models.py:234
msgid "Sub-category"
msgstr "Sous-catégorie"
-#: models.py:168
+#: models.py:235
msgid "Sub-categories"
msgstr "Sous-catégories"
-#: models.py:226
+#: models.py:311
msgid "Importer type"
msgstr "Type d'import"
-#: models.py:229 models.py:289
+#: models.py:314 models.py:374
msgid "Source"
msgstr "Source"
-#: models.py:231
+#: models.py:316
msgid "Source file"
msgstr "Fichier source"
-#: models.py:233
+#: models.py:318
msgid "Filter"
msgstr "Filtre"
-#: models.py:235
+#: models.py:320
msgid "Name by default"
msgstr "Nom par défaut"
-#: models.py:237
+#: models.py:322
msgid "SRID"
msgstr "SRID"
-#: models.py:238
+#: models.py:323
msgid "Zipped file"
msgstr "Fichier zippé"
-#: models.py:239 models.py:295
+#: models.py:324 models.py:380
msgid "Origin"
msgstr "Origine"
-#: models.py:241 models.py:297
+#: models.py:326 models.py:382
msgid "License"
msgstr "Licence"
-#: models.py:244
+#: models.py:329
msgid "Associated subcategories"
msgstr "Sous-catégories associées"
-#: models.py:245 utils.py:458
+#: models.py:330 utils.py:458
msgid "State"
msgstr "État"
-#: models.py:249
+#: models.py:334
msgid "Importer"
msgstr "Import"
-#: models.py:269
+#: models.py:354
msgid "Submitter session key"
msgstr "Clé de session du demandeur"
-#: models.py:271
+#: models.py:356
msgid "Submitter name or nickname"
msgstr "Nom ou pseudo du demandeur"
-#: models.py:273
+#: models.py:358
msgid "Submitter email"
msgstr "Courriel du demandeur"
-#: models.py:275
+#: models.py:360
msgid "Submitter comment"
msgstr "Commentaire du demandeur"
-#: models.py:277
+#: models.py:362
msgid "Submited"
msgstr "Soumis"
-#: models.py:279
+#: models.py:364
msgid "Modified"
msgstr "Modifié"
-#: models.py:280
+#: models.py:365
msgid "Disabled"
msgstr "Désactivé"
-#: models.py:281
+#: models.py:366
msgid "Imported"
msgstr "Importé"
-#: models.py:282
+#: models.py:367
msgid "Excluded"
msgstr "Exclu"
-#: models.py:284
+#: models.py:369
msgid "Status"
msgstr "État"
-#: models.py:285
+#: models.py:370
msgid "Import key"
msgstr "Clé d'import"
-#: models.py:287
+#: models.py:372
msgid "Import version"
msgstr "Version de l'import"
-#: models.py:291
+#: models.py:376
msgid "Modified since last import"
msgstr "Modifié depuis le dernier import"
-#: models.py:293
+#: models.py:378
msgid "Not to be imported inside OSM"
-msgstr "À ne pas importer dans OSM"
+msgstr "Ne pas importer dans OSM"
-#: models.py:300 templates/chimere/edit.html:56
+#: models.py:385 templates/chimere/edit.html:56
#: templates/chimere/edit_route.html:52
msgid "Start date"
msgstr "Date de début"
-#: models.py:301
+#: models.py:386
msgid "Not mandatory. Set it for dated item such as event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ pour les éléments datés comme un événement. "
"Format du champ : AAAA-MM-JJ"
-#: models.py:303 templates/chimere/edit.html:62
+#: models.py:388 templates/chimere/edit.html:62
#: templates/chimere/edit_route.html:58
msgid "End date"
msgstr "Date de fin"
-#: models.py:304
+#: models.py:389
msgid ""
"Not mandatory. Set it only if you have a multi-day event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ seulement pour des événements durant plusieurs "
"jours. Format du champ : AAAA-MM-JJ"
-#: models.py:350
+#: models.py:435
msgid "Reference marker"
msgstr "Point d'intérêt de référence"
-#: models.py:351 utils.py:460
+#: models.py:436 utils.py:460
msgid "Localisation"
msgstr "Localisation"
-#: models.py:353
+#: models.py:438
msgid "Available Date"
msgstr "Date de mise en disponibilité"
-#: models.py:357 utils.py:459 templates/chimere/edit.html:49
+#: models.py:442 utils.py:459 templates/chimere/edit.html:49
#: templates/chimere/edit_route.html:46
msgid "Description"
msgstr "Description"
-#: models.py:415 models.py:1216
+#: models.py:506 models.py:1437
msgid "Point of interest"
msgstr "Point d'intérêt"
-#: models.py:559
+#: models.py:662
msgid "Audio"
msgstr "Audio"
-#: models.py:560
+#: models.py:663
msgid "Video"
msgstr "Vidéo"
-#: models.py:562
+#: models.py:665
msgid "Other"
msgstr "Autre"
-#: models.py:563
+#: models.py:666
msgid "Media type"
msgstr "Type de media"
-#: models.py:566
+#: models.py:669
msgid "Mime type"
msgstr "Type mime"
-#: models.py:568
+#: models.py:671
msgid "Inside an iframe"
msgstr "À l'intérieur d'un iframe"
-#: models.py:572
+#: models.py:675
msgid "Multimedia type"
msgstr "Type de multimedia"
-#: models.py:573
+#: models.py:676
msgid "Multimedia types"
msgstr "Types de multimedia"
-#: models.py:609
-msgid "Url"
-msgstr "Url"
+#: models.py:711
+msgid "Extension name"
+msgstr "Nom de l'extension"
+
+#: models.py:713
+msgid "Associated multimedia type"
+msgstr "Type de multimedia associé"
+
+#: models.py:717
+msgid "Multimedia extension"
+msgstr "Extension de fichier multimedia"
+
+#: models.py:718
+msgid "Multimedia extensions"
+msgstr "Extensions de fichier multimedia"
-#: models.py:612 models.py:656
+#: models.py:728 models.py:772
msgid "Display inside the description?"
msgstr "Apparaît dans la description ?"
-#: models.py:617
+#: models.py:733
msgid "Multimedia file"
msgstr "Fichier multimedia"
-#: models.py:658
+#: models.py:774
msgid "Thumbnail"
msgstr "Miniature"
-#: models.py:662
+#: models.py:778
msgid "Thumbnail height"
msgstr "Hauteur de la miniature"
-#: models.py:664
+#: models.py:780
msgid "Thumbnail width"
msgstr "Largeur de la miniature"
-#: models.py:673
+#: models.py:789
msgid "Picture file"
msgstr "Fichier d'image"
-#: models.py:768
+#: models.py:884
msgid "Raw file (gpx or kml)"
msgstr "Fichier brut (gpx ou kml)"
-#: models.py:770
+#: models.py:886
msgid "Simplified file"
msgstr "Fichier simplifié"
-#: models.py:772
+#: models.py:888
msgid "KML"
msgstr "KML"
-#: models.py:772
+#: models.py:888
msgid "GPX"
msgstr "GPX"
-#: models.py:777
+#: models.py:893
msgid "Route file"
msgstr "Fichier de trajet"
-#: models.py:778
+#: models.py:894
msgid "Route files"
msgstr "Fichiers de trajet"
-#: models.py:828
+#: models.py:944
msgid "Reference route"
msgstr "Trajet de référence"
-#: models.py:832
+#: models.py:948
msgid "Associated file"
msgstr "Fichier associé"
-#: models.py:1084
+#: models.py:1200
msgid "Layer code"
msgstr "Code pour la couche"
-#: models.py:1090
+#: models.py:1206
msgid "Layer"
msgstr "Couche"
-#: models.py:1096
+#: models.py:1212
msgid "Area urn"
msgstr "Urn de la zone"
-#: models.py:1098 templates/chimere/blocks/welcome.html:3
+#: models.py:1214 templates/chimere/blocks/welcome.html:3
msgid "Welcome message"
msgstr "Message d'accueil"
-#: models.py:1102
+#: models.py:1218
msgid "Upper left corner"
msgstr "Coin en haut à gauche"
-#: models.py:1104
+#: models.py:1220
msgid "Lower right corner"
msgstr "Coin en bas à droite"
-#: models.py:1106
+#: models.py:1222
msgid "Default area"
msgstr "Zone par défaut"
-#: models.py:1107
+#: models.py:1223
msgid "Only one area is set by default"
msgstr "Seule une zone est définie par défaut"
-#: models.py:1111
+#: models.py:1227
msgid "Sub-categories checked by default"
msgstr "Sous-catégories cochées par défaut"
-#: models.py:1113
+#: models.py:1229
msgid "Sub-categories dynamicaly displayed"
msgstr "Sous-categories affichées dynamiquement"
-#: models.py:1114
+#: models.py:1230
msgid ""
"If checked, categories are only displayed in the menu if they are available "
"on the current extent."
@@ -528,68 +591,76 @@ msgstr ""
"Si coché, les catégories sont disponibles sur le menu seulement si elles "
"apparaissent sur la zone affichée."
-#: models.py:1118 models.py:1185
+#: models.py:1234 models.py:1389
msgid "Restricted to theses sub-categories"
msgstr "Restreindre à ces sous-categories"
-#: models.py:1119
+#: models.py:1235
msgid "If no sub-category is set all sub-categories are available"
msgstr ""
"Si aucune sous-catégorie n'est définie toutes les sous-catégories sont "
"disponibles"
-#: models.py:1121
+#: models.py:1237
msgid "Link to an external CSS"
msgstr "Lien vers une feuille de style externe"
-#: models.py:1123
+#: models.py:1239
msgid "Restrict to the area extent"
msgstr "Restreindre à l'étendue de la zone"
-#: models.py:1170
+#: models.py:1374 widgets.py:86
msgid "Default layer"
msgstr "Couche par défaut"
-#: models.py:1174 models.py:1175
+#: models.py:1378 models.py:1379
msgid "Layers"
msgstr "Couches"
-#: models.py:1183
+#: models.py:1387
msgid "Mandatory"
msgstr "Obligatoire"
-#: models.py:1186
+#: models.py:1390
msgid ""
"If no sub-category is set all the property applies to all sub-categories"
msgstr ""
"Si aucune sous-catégorie n'est précisée, cette propriété est disponible pour "
"toutes les sous-catégories"
-#: models.py:1188
+#: models.py:1392
msgid "Text"
msgstr "Texte"
-#: models.py:1189
+#: models.py:1393
msgid "Long text"
msgstr "Texte long"
-#: models.py:1190
+#: models.py:1394
msgid "Password"
msgstr "Mot de passe"
-#: models.py:1196
+#: models.py:1396
+msgid "Choices"
+msgstr "Choix"
+
+#: models.py:1404
msgid "Type"
msgstr "Type"
-#: models.py:1201 models.py:1218
+#: models.py:1409 models.py:1425 models.py:1439
msgid "Property model"
msgstr "Modèle de propriété"
-#: models.py:1219
+#: models.py:1426 models.py:1440
msgid "Value"
msgstr "Valeur"
-#: models.py:1223
+#: models.py:1432
+msgid "Model property choice"
+msgstr "Choix pour les modèles de propriété"
+
+#: models.py:1451
msgid "Property"
msgstr "Propriété"
@@ -712,7 +783,7 @@ msgstr "Mauvais paramètre"
#: utils.py:748
msgid "No non ambigious tag is defined in the XAPI request"
-msgstr "Pas de tag non ambigü définis dans la requête XAPI"
+msgstr "Aucun « tag » non ambigu n'est défini dans la requête XAPI"
#: utils.py:750
msgid ""
@@ -723,19 +794,19 @@ msgstr ""
"vouloir lancer la requête sur la planète entière fixez la « bounding box » "
"à -180,-90,180,90"
-#: views.py:235
+#: views.py:268
msgid "There are missing field(s) and/or errors in the submited form."
msgstr "Il y a des champs manquants ou des erreurs dans ce formulaire."
-#: views.py:317
+#: views.py:353
msgid "Bad file. Please check it with an external software."
msgstr "Fichier incohérent. Merci de le vérifier avec un logiciel externe."
-#: views.py:439
+#: views.py:465
msgid "Comments/request on the map"
msgstr "Commentaires/requètes sur la carte"
-#: views.py:442
+#: views.py:468
msgid ""
"Thank you for your contribution. It will be taken into account. If you have "
"left your email you may be contacted soon for more details."
@@ -744,48 +815,52 @@ msgstr ""
"laissé votre courriel vous serez peut-être contacté bientôt pour plus de "
"détails."
-#: views.py:446
+#: views.py:472
msgid "Temporary error. Renew your message later."
msgstr "Erreur temporaire. Réenvoyez votre message plus tard."
-#: views.py:578
+#: views.py:624
msgid "No category available in this area."
msgstr "Pas de catégorie disponible sur cette zone."
-#: views.py:686
+#: views.py:768
msgid "Incorrect choice in the list"
msgstr "Choix incorrect dans la liste"
-#: widgets.py:197
+#: widgets.py:245
+msgid "Street, City, Country"
+msgstr "Rue, Commune, Pays"
+
+#: widgets.py:312
msgid "Latitude"
msgstr "Latitude"
-#: widgets.py:197
+#: widgets.py:312
msgid "Longitude"
msgstr "Longitude"
-#: widgets.py:222
+#: widgets.py:337
msgid "Invalid point"
msgstr "Point invalide"
-#: widgets.py:272
+#: widgets.py:390
msgid "Creation mode"
msgstr "Mode création"
-#: widgets.py:273
+#: widgets.py:391
msgid "To start drawing the route click on the toggle button: \"Draw\"."
msgstr ""
"Pour commencer le dessin cliquez sur le bouton&nbsp;: «&nbsp;Tracer&nbsp;»."
-#: widgets.py:275
+#: widgets.py:393
msgid "Then click on the map to begin the drawing."
msgstr "Puis cliquez sur la carte pour commencer le dessin."
-#: widgets.py:276
+#: widgets.py:394
msgid "You can add points by clicking again."
msgstr "Vous pouvez ajouter des points en cliquant de nouveau."
-#: widgets.py:277
+#: widgets.py:395
msgid ""
"To finish the drawing double click. When the drawing is finished you can "
"edit it."
@@ -793,7 +868,7 @@ msgstr ""
"Pour finir le tracé double-cliquez. Quand le tracé est fini vous pouvez "
"toujours l'éditer."
-#: widgets.py:279
+#: widgets.py:397
msgid ""
"While creating to undo a drawing click again on the toggle button \"Stop "
"drawing\"."
@@ -801,17 +876,17 @@ msgstr ""
"En mode création vous pouvez annuler un tracé en appuyant sur le bouton "
"«&nbsp;Arrêter le tracé&nbsp;»."
-#: widgets.py:284
+#: widgets.py:402
msgid "Modification mode"
msgstr "Mode modification"
-#: widgets.py:285
+#: widgets.py:403
msgid "To move a point click on it and drag it to the desired position."
msgstr ""
"Pour bouger un point, cliquez dessus, maintenez le click pour le déposer à "
"la position désirée."
-#: widgets.py:286
+#: widgets.py:404
msgid ""
"To delete a point move the mouse cursor over it and press the \"d\" or \"Del"
"\" key."
@@ -819,7 +894,7 @@ msgstr ""
"Pour supprimer un point, mettez le curseur de la souris sur celui-ci et "
"appuyez sur le touche «&nbsp;d&nbsp;» ou «&nbsp;Suppr&nbsp;»."
-#: widgets.py:288
+#: widgets.py:406
msgid ""
"To add a point click in the middle of a segment and drag the new point to "
"the desired position"
@@ -828,39 +903,39 @@ msgstr ""
"maintenez le bouton appuyé et déplacez le nouveau point à la position "
"désirée."
-#: widgets.py:295
+#: widgets.py:413
msgid "Give a name and set category before uploading a file."
msgstr ""
"Renseignez le nom et choisissez au moins une catégorie avant de déposer un "
"fichier."
-#: widgets.py:298
+#: widgets.py:416
msgid "Upload a route file (GPX or KML)"
msgstr "Déposer un trajet (fichier GPX ou KML)"
-#: widgets.py:299
+#: widgets.py:417
msgid "or"
msgstr "ou"
-#: widgets.py:304
+#: widgets.py:422
msgid "Start \"hand\" drawing"
msgstr "Commencer le tracé manuellement"
-#: widgets.py:327
+#: widgets.py:445
msgid "Move on the map"
msgstr "Se déplacer"
-#: widgets.py:327
+#: widgets.py:445
msgid "Draw"
msgstr "Tracer"
-#: widgets.py:394
+#: widgets.py:525
msgid "Hold CTRL, click and drag to select area on the map"
msgstr ""
"Maintenir la touche Control, cliquez puis glissez pour sélectionner une zone "
"sur la carte"
-#: widgets.py:460
+#: widgets.py:591
msgid "Select..."
msgstr "Sélectionner..."
@@ -873,10 +948,10 @@ msgid "Internal server error"
msgstr "Erreur interne du serveur"
#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7
-msgid "Administration de Chimère"
+msgid "Chimère administration"
msgstr "Administration de Chimère"
-#: templates/chimere/base.html:18
+#: templates/chimere/base.html:19
msgid "You must enable JavaScript in your browser to display Chimère."
msgstr ""
"Vous devez activer le JavaScript dans votre navigateur pour afficher Chimère."
@@ -908,13 +983,13 @@ msgstr "Licence :"
msgid "Show multimedia gallery"
msgstr "Montrer la galerie multimedia"
-#: templates/chimere/detail.html:31
-msgid "Share on"
-msgstr "Partager sur"
+#: templates/chimere/detail.html:32 templates/chimere/detail.html.py:33
+msgid "Propose amendment"
+msgstr "Proposer une modification"
-#: templates/chimere/detail.html:35
-msgid "Share"
-msgstr "Partager"
+#: templates/chimere/detail.html:32
+msgid "I would like to propose an amendment for this item:"
+msgstr "Je souhaiterai proposer une modification pour cet élément :"
#: templates/chimere/edit.html:20
msgid "Error"
@@ -963,9 +1038,9 @@ msgstr "Commentaires au sujet de votre proposition"
#: templates/chimere/edit.html:134
msgid "Upload in progress. Please wait..."
-msgstr "Dépôt en cours. Veuillez patienter..."
+msgstr "Traitement en cours. Veuillez patienter..."
-#: templates/chimere/edit.html:151 templates/chimere/edit_route.html:77
+#: templates/chimere/edit.html:152 templates/chimere/edit_route.html:77
msgid "Propose"
msgstr "Proposez"
@@ -985,10 +1060,58 @@ msgstr "Merci pour votre proposition !"
msgid "Upload a file"
msgstr "Déposer un fichier"
-#: templates/chimere/upload_file.html:46
+#: templates/chimere/upload_file.html:47
msgid "Upload"
msgstr "Déposer"
+#: templates/chimere/blocks/alternate_multimedia.html:33
+#: templates/chimere/blocks/alternate_multimedia.html:51
+msgid "Add"
+msgstr "Ajouter"
+
+#: templates/chimere/blocks/alternate_multimedia.html:35
+msgid "Add multimedia from your computer or a website"
+msgstr "Ajouter du multimedia depuis votre ordinateur ou un site web"
+
+#: templates/chimere/blocks/alternate_multimedia.html:36
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu luctus "
+"ipsum. Donec vel urna a turpis consectetur consectetur. Vestibulum ut enim "
+"vel odio porta vulputate."
+msgstr ""
+
+#: templates/chimere/blocks/alternate_multimedia.html:44
+msgid "Audio, video, other..."
+msgstr "Audio, vidéo, autre..."
+
+#: templates/chimere/blocks/alternate_multimedia.html:47
+msgid "Download"
+msgstr "Téléchargement"
+
+#: templates/chimere/blocks/alternate_multimedia.html:48
+msgid "Or"
+msgstr "Ou"
+
+#: templates/chimere/blocks/alternate_multimedia.html:49
+msgid "Web address"
+msgstr "Adresse web"
+
+#: templates/chimere/blocks/alternate_multimedia.html:80
+msgid "You must provide a name."
+msgstr "Vous devez donner un nom."
+
+#: templates/chimere/blocks/alternate_multimedia.html:85
+msgid "You must choose a media type."
+msgstr "Voux devez choisir un type de média."
+
+#: templates/chimere/blocks/alternate_multimedia.html:91
+msgid "You must provide a file or a web address."
+msgstr "Vous devez fournir un fichier ou une adresse web."
+
+#: templates/chimere/blocks/alternate_multimedia.html:96
+msgid "You must provide a web address."
+msgstr "Voux devez donner une adresse web."
+
#: templates/chimere/blocks/areas.html:4
msgid "Areas:"
msgstr "Zones :"
@@ -1024,16 +1147,101 @@ msgstr "Carte"
msgid "Loading of the map in progress"
msgstr "Chargement de la carte en cours"
-#: templates/chimere/blocks/map.html:18
+#: templates/chimere/blocks/map.html:13
+msgid "Display options"
+msgstr "Options d'affichage"
+
+#: templates/chimere/blocks/map.html:15
+msgid "Map type"
+msgstr "Type de carte"
+
+#: templates/chimere/blocks/map.html:24
msgid "Permalink"
msgstr "Lien permanent"
+#: templates/chimere/blocks/map_menu.html:5
+msgctxt "routing"
+msgid "From"
+msgstr "En partir"
+
+#: templates/chimere/blocks/map_menu.html:6
+msgctxt "routing"
+msgid "Add a step"
+msgstr "Ajout d'une étape"
+
+#: templates/chimere/blocks/map_menu.html:7
+msgctxt "routing"
+msgid "To"
+msgstr "Y aller"
+
+#: templates/chimere/blocks/map_menu.html:8
+msgctxt "routing"
+msgid "Clear the itinerary"
+msgstr "Effacer l'itinéraire"
+
+#: templates/chimere/blocks/map_menu.html:10
+msgid "Zoom in"
+msgstr "Zoomer en avant"
+
+#: templates/chimere/blocks/map_menu.html:11
+msgid "Zoom out"
+msgstr "Zoomer en arrière"
+
+#: templates/chimere/blocks/map_menu.html:12
+msgid "Center the map here"
+msgstr "Centrer la carte ici"
+
#: templates/chimere/blocks/multimedia_file.html:19
msgid "Please use a modern browser or install the non free Flash-Plugin."
msgstr ""
"Utilisez un navigateur internet plus récent ou installez le greffon non "
"libre Flash."
+#: templates/chimere/blocks/news.html:42
+#: templates/chimere/blocks/welcome.html:47
+msgid "See it on the map"
+msgstr "Voir sur la carte"
+
+#: templates/chimere/blocks/routing.html:5
+msgid "Itinerary"
+msgstr "Itinéraire"
+
+#: templates/chimere/blocks/routing.html:16
+msgid "Add a step"
+msgstr "Ajouter une étape"
+
+#: templates/chimere/blocks/routing.html:17
+msgid "Search"
+msgstr "Rechercher"
+
+#: templates/chimere/blocks/routing.html:23
+msgid "Modify"
+msgstr "Modifier"
+
+#: templates/chimere/blocks/routing.html:26
+msgid "New search"
+msgstr "Nouvelle recherche"
+
+#: templates/chimere/blocks/routing.html:34
+msgid "Start:"
+msgstr "Départ :"
+
+#: templates/chimere/blocks/routing.html:38
+msgid "Finish:"
+msgstr "Arrivée :"
+
+#: templates/chimere/blocks/routing.html:43
+msgid "Step"
+msgstr "Étape"
+
+#: templates/chimere/blocks/share_bar.html:3
+msgid "Share on"
+msgstr "Partager sur"
+
+#: templates/chimere/blocks/share_bar.html:7
+msgid "Share"
+msgstr "Partager"
+
#: templates/chimere/blocks/submited.html:3
msgid ""
"Your new proposition/modification has been submited. A moderator will treat "
@@ -1062,10 +1270,6 @@ msgstr "Retourner à la carte"
msgid "Welcome"
msgstr "Accueil"
-#: templates/chimere/blocks/welcome.html:47
-msgid "See it on the map"
-msgstr "Voir sur la carte"
-
#: templates/chimere/feeds/rss.html:13
msgid "Subscribe to RSS feed"
msgstr "Souscrire à un flux RSS"
@@ -1106,26 +1310,10 @@ msgstr "Description :"
msgid ":"
msgstr " :"
-#~ msgid "Submit a modification"
-#~ msgstr "Proposer une modification"
-
-#~ msgid "Add/modify a site"
-#~ msgstr "Ajouter ou modifier un site"
-
-#~ msgid "Categorys"
-#~ msgstr "Catégories"
-
-#~ msgid "Theme"
-#~ msgstr "Thème"
-
-#~ msgid "Subtheme"
-#~ msgstr "Sous-thème"
-
-#~ msgid "Subthemes"
-#~ msgstr "Sous-thèmes"
-
-#~ msgid "Themes"
-#~ msgstr "Thèmes"
+#: templatetags/chimere_tags.py:76
+#, python-format
+msgid "Welcome to the %s"
+msgstr "Bienvenue sur %s"
-#~ msgid "Site name"
-#~ msgstr "Nom du site"
+#~ msgid "Administration de Chimère"
+#~ msgstr "Administration de Chimère"
diff --git a/chimere/migrations/0030_auto__add_field_importer_default_name.py b/chimere/migrations/0029_auto__add_propertymodelchoice.py
index b43d44c..b80129f 100644
--- a/chimere/migrations/0030_auto__add_field_importer_default_name.py
+++ b/chimere/migrations/0029_auto__add_propertymodelchoice.py
@@ -8,15 +8,19 @@ from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
- # Adding field 'Importer.default_name'
- db.add_column('chimere_importer', 'default_name',
- self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),
- keep_default=False)
+ # Adding model 'PropertyModelChoice'
+ db.create_table('chimere_propertymodelchoice', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('propertymodel', self.gf('django.db.models.fields.related.ForeignKey')(related_name='choices', to=orm['chimere.PropertyModel'])),
+ ('value', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ))
+ db.send_create_signal('chimere', ['PropertyModelChoice'])
def backwards(self, orm):
- # Deleting field 'Importer.default_name'
- db.delete_column('chimere_importer', 'default_name')
+ # Deleting model 'PropertyModelChoice'
+ db.delete_table('chimere_propertymodelchoice')
models = {
@@ -77,7 +81,6 @@ class Migration(SchemaMigration):
'chimere.importer': {
'Meta': {'object_name': 'Importer'},
'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
- 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
@@ -102,9 +105,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'point': ('chimere.widgets.PointField', [], {}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
@@ -173,6 +174,13 @@ class Migration(SchemaMigration):
'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
},
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
'chimere.route': {
'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
@@ -183,9 +191,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
'route': ('chimere.widgets.RouteField', [], {}),
diff --git a/chimere/migrations/0029_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py b/chimere/migrations/0030_auto__add_multimediaextension.py
index 72d718c..47888c4 100644
--- a/chimere/migrations/0029_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
+++ b/chimere/migrations/0030_auto__add_multimediaextension.py
@@ -8,39 +8,18 @@ from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
- # Adding field 'Marker.modified_since_import'
- db.add_column('chimere_marker', 'modified_since_import',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'Marker.not_for_osm'
- db.add_column('chimere_marker', 'not_for_osm',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'Route.modified_since_import'
- db.add_column('chimere_route', 'modified_since_import',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
-
- # Adding field 'Route.not_for_osm'
- db.add_column('chimere_route', 'not_for_osm',
- self.gf('django.db.models.fields.BooleanField')(default=False),
- keep_default=False)
+ # Adding model 'MultimediaExtension'
+ db.create_table('chimere_multimediaextension', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=6)),
+ ('multimedia_type', self.gf('django.db.models.fields.related.ForeignKey')(related_name='extensions', to=orm['chimere.MultimediaType'])),
+ ))
+ db.send_create_signal('chimere', ['MultimediaExtension'])
def backwards(self, orm):
- # Deleting field 'Marker.modified_since_import'
- db.delete_column('chimere_marker', 'modified_since_import')
-
- # Deleting field 'Marker.not_for_osm'
- db.delete_column('chimere_marker', 'not_for_osm')
-
- # Deleting field 'Route.modified_since_import'
- db.delete_column('chimere_route', 'modified_since_import')
-
- # Deleting field 'Route.not_for_osm'
- db.delete_column('chimere_route', 'not_for_osm')
+ # Deleting model 'MultimediaExtension'
+ db.delete_table('chimere_multimediaextension')
models = {
@@ -125,9 +104,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'point': ('chimere.widgets.PointField', [], {}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
@@ -138,6 +115,12 @@ class Migration(SchemaMigration):
'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
},
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
'chimere.multimediafile': {
'Meta': {'object_name': 'MultimediaFile'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
@@ -196,6 +179,13 @@ class Migration(SchemaMigration):
'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
},
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
'chimere.route': {
'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
@@ -206,9 +196,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
'route': ('chimere.widgets.RouteField', [], {}),
diff --git a/chimere/migrations/0032_auto__add_field_subcategory_submission.py b/chimere/migrations/0031_auto__add_field_subcategory_dated.py
index d96e5bb..5ebbecf 100644
--- a/chimere/migrations/0032_auto__add_field_subcategory_submission.py
+++ b/chimere/migrations/0031_auto__add_field_subcategory_dated.py
@@ -8,15 +8,15 @@ from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
- # Adding field 'SubCategory.submission'
- db.add_column('chimere_subcategory', 'submission',
- self.gf('django.db.models.fields.BooleanField')(default=True),
+ # Adding field 'SubCategory.dated'
+ db.add_column('chimere_subcategory', 'dated',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)
def backwards(self, orm):
- # Deleting field 'SubCategory.submission'
- db.delete_column('chimere_subcategory', 'submission')
+ # Deleting field 'SubCategory.dated'
+ db.delete_column('chimere_subcategory', 'dated')
models = {
@@ -77,7 +77,6 @@ class Migration(SchemaMigration):
'chimere.importer': {
'Meta': {'object_name': 'Importer'},
'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
- 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
@@ -102,9 +101,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'point': ('chimere.widgets.PointField', [], {}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
@@ -115,6 +112,12 @@ class Migration(SchemaMigration):
'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
},
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
'chimere.multimediafile': {
'Meta': {'object_name': 'MultimediaFile'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
@@ -144,7 +147,7 @@ class Migration(SchemaMigration):
},
'chimere.picturefile': {
'Meta': {'object_name': 'PictureFile'},
- 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
@@ -154,7 +157,7 @@ class Migration(SchemaMigration):
'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ 'width': ('django.db.models.fields.IntegerField', [], {})
},
'chimere.property': {
'Meta': {'object_name': 'Property'},
@@ -173,6 +176,13 @@ class Migration(SchemaMigration):
'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
},
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
'chimere.route': {
'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
@@ -183,9 +193,7 @@ class Migration(SchemaMigration):
'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
'route': ('chimere.widgets.RouteField', [], {}),
@@ -207,15 +215,15 @@ class Migration(SchemaMigration):
},
'chimere.subcategory': {
'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
- 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'}),
- 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ 'order': ('django.db.models.fields.IntegerField', [], {})
},
'chimere.tinyurl': {
'Meta': {'object_name': 'TinyUrl'},
diff --git a/chimere/migrations/0032_auto__add_page.py b/chimere/migrations/0032_auto__add_page.py
new file mode 100644
index 0000000..e39c4a8
--- /dev/null
+++ b/chimere/migrations/0032_auto__add_page.py
@@ -0,0 +1,252 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'Page'
+ db.create_table('chimere_page', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('mnemonic', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)),
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('order', self.gf('django.db.models.fields.IntegerField')(default=10, null=True, blank=True)),
+ ('template_path', self.gf('django.db.models.fields.CharField')(max_length=150, null=True, blank=True)),
+ ('content', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('chimere', ['Page'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'Page'
+ db.delete_table('chimere_page')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0033_auto__add_field_marker_is_front_page__add_field_news_is_front_page__ad.py b/chimere/migrations/0033_auto__add_field_marker_is_front_page__add_field_news_is_front_page__ad.py
new file mode 100644
index 0000000..9f37064
--- /dev/null
+++ b/chimere/migrations/0033_auto__add_field_marker_is_front_page__add_field_news_is_front_page__ad.py
@@ -0,0 +1,264 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'Marker.is_front_page'
+ db.add_column('chimere_marker', 'is_front_page',
+ self.gf('django.db.models.fields.NullBooleanField')(null=True, blank=True),
+ keep_default=False)
+
+ # Adding field 'News.is_front_page'
+ db.add_column('chimere_news', 'is_front_page',
+ self.gf('django.db.models.fields.NullBooleanField')(null=True, blank=True),
+ keep_default=False)
+
+ # Adding field 'News.url'
+ db.add_column('chimere_news', 'url',
+ self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Marker.is_front_page'
+ db.delete_column('chimere_marker', 'is_front_page')
+
+ # Deleting field 'News.is_front_page'
+ db.delete_column('chimere_news', 'is_front_page')
+
+ # Deleting field 'News.url'
+ db.delete_column('chimere_news', 'url')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0034_auto__add_field_subcategory_description.py b/chimere/migrations/0034_auto__add_field_subcategory_description.py
new file mode 100644
index 0000000..c77ab1d
--- /dev/null
+++ b/chimere/migrations/0034_auto__add_field_subcategory_description.py
@@ -0,0 +1,249 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SubCategory.description'
+ db.add_column('chimere_subcategory', 'description',
+ self.gf('django.db.models.fields.TextField')(null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.description'
+ db.delete_column('chimere_subcategory', 'description')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0035_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py b/chimere/migrations/0035_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
new file mode 100644
index 0000000..568d369
--- /dev/null
+++ b/chimere/migrations/0035_auto__add_field_marker_modified_since_import__add_field_marker_not_for.py
@@ -0,0 +1,277 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'Marker.modified_since_import'
+ db.add_column('chimere_marker', 'modified_since_import',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'Marker.not_for_osm'
+ db.add_column('chimere_marker', 'not_for_osm',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'Route.modified_since_import'
+ db.add_column('chimere_route', 'modified_since_import',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'Route.not_for_osm'
+ db.add_column('chimere_route', 'not_for_osm',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Marker.modified_since_import'
+ db.delete_column('chimere_marker', 'modified_since_import')
+
+ # Deleting field 'Marker.not_for_osm'
+ db.delete_column('chimere_marker', 'not_for_osm')
+
+ # Deleting field 'Route.modified_since_import'
+ db.delete_column('chimere_route', 'modified_since_import')
+
+ # Deleting field 'Route.not_for_osm'
+ db.delete_column('chimere_route', 'not_for_osm')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0036_auto__add_field_importer_default_name.py b/chimere/migrations/0036_auto__add_field_importer_default_name.py
new file mode 100644
index 0000000..5920a6d
--- /dev/null
+++ b/chimere/migrations/0036_auto__add_field_importer_default_name.py
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'Importer.default_name'
+ db.add_column('chimere_importer', 'default_name',
+ self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Importer.default_name'
+ db.delete_column('chimere_importer', 'default_name')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0037_auto__add_field_subcategory_hover_icon.py b/chimere/migrations/0037_auto__add_field_subcategory_hover_icon.py
new file mode 100644
index 0000000..973730f
--- /dev/null
+++ b/chimere/migrations/0037_auto__add_field_subcategory_hover_icon.py
@@ -0,0 +1,255 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SubCategory.hover_icon'
+ db.add_column('chimere_subcategory', 'hover_icon',
+ self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='subcat_hovered', null=True, to=orm['chimere.Icon']),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.hover_icon'
+ db.delete_column('chimere_subcategory', 'hover_icon_id')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'hover_icon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'subcat_hovered'", 'null': 'True', 'to': "orm['chimere.Icon']"}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere']
diff --git a/chimere/migrations/0031_auto__chg_field_picturefile_width__chg_field_picturefile_height.py b/chimere/migrations/0038_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
index dac7145..dac7145 100644
--- a/chimere/migrations/0031_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
+++ b/chimere/migrations/0038_auto__chg_field_picturefile_width__chg_field_picturefile_height.py
diff --git a/chimere/migrations/0039_auto__add_field_subcategory_submission.py b/chimere/migrations/0039_auto__add_field_subcategory_submission.py
new file mode 100644
index 0000000..9511827
--- /dev/null
+++ b/chimere/migrations/0039_auto__add_field_subcategory_submission.py
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SubCategory.submission'
+ db.add_column('chimere_subcategory', 'submission',
+ self.gf('django.db.models.fields.BooleanField')(default=True),
+ keep_default=False)
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.submission'
+ db.delete_column('chimere_subcategory', 'submission')
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'hover_icon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'subcat_hovered'", 'null': 'True', 'to': "orm['chimere.Icon']"}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere']
diff --git a/chimere/migrations/0040_auto__add_field_subcategory_as_layer.py b/chimere/migrations/0040_auto__add_field_subcategory_as_layer.py
new file mode 100644
index 0000000..8cc8997
--- /dev/null
+++ b/chimere/migrations/0040_auto__add_field_subcategory_as_layer.py
@@ -0,0 +1,257 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'SubCategory.as_layer'
+ db.add_column('chimere_subcategory', 'as_layer',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.as_layer'
+ db.delete_column('chimere_subcategory', 'as_layer')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Color'},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon'},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'as_layer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'hover_icon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'subcat_hovered'", 'null': 'True', 'to': "orm['chimere.Icon']"}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0033_auto__add_field_importer_source_file.py b/chimere/migrations/0041_auto__add_field_importer_source_file.py
index 788d12c..788d12c 100644
--- a/chimere/migrations/0033_auto__add_field_importer_source_file.py
+++ b/chimere/migrations/0041_auto__add_field_importer_source_file.py
diff --git a/chimere/migrations/0034_auto__add_field_importer_origin__add_field_importer_license__add_field.py b/chimere/migrations/0042_auto__add_field_importer_origin__add_field_importer_license__add_field.py
index 757deab..757deab 100644
--- a/chimere/migrations/0034_auto__add_field_importer_origin__add_field_importer_license__add_field.py
+++ b/chimere/migrations/0042_auto__add_field_importer_origin__add_field_importer_license__add_field.py
diff --git a/chimere/migrations/0035_area_permissions.py b/chimere/migrations/0043_area_permissions.py
index d396050..d396050 100644
--- a/chimere/migrations/0035_area_permissions.py
+++ b/chimere/migrations/0043_area_permissions.py
diff --git a/chimere/migrations/0036_auto.py b/chimere/migrations/0044_auto.py
index bb93496..bb93496 100644
--- a/chimere/migrations/0036_auto.py
+++ b/chimere/migrations/0044_auto.py
diff --git a/chimere/models.py b/chimere/models.py
index c3a5f6e..357a32a 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -25,6 +25,8 @@ import simplejson as json
from lxml import etree
from PIL import Image
from subprocess import Popen, PIPE
+from BeautifulSoup import BeautifulSoup
+
from django import forms
from django.conf import settings
from django.contrib import admin
@@ -45,13 +47,64 @@ from chimere.managers import BaseGeoManager
from chimere.utils import KMLManager, OSMManager, ShapefileManager, \
GeoRSSManager, CSVManager
+class Page(models.Model):
+ """Simple extra pages
+ """
+ title = models.CharField(_(u"Name"), max_length=150)
+ mnemonic = models.CharField(_(u"Mnemonic"), max_length=10, blank=True,
+ null=True)
+ available = models.BooleanField(_(u"Available"), default=True)
+ order = models.IntegerField(_(u"Order"), default=10, blank=True, null=True)
+ template_path = models.CharField(_(u"Template path"), max_length=150,
+ blank=True, null=True)
+ content = models.TextField(blank=True, null=True)
+ def __unicode__(self):
+ ordering = ["order"]
+ return self.title
+ class Meta:
+ verbose_name = _(u"Page")
+ verbose_name_plural = _(u"Page")
+
+def page_post_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ page = kwargs['instance']
+ if not page.mnemonic:
+ page.mnemonic = defaultfilters.slugify(page.title)
+ page.save()
+post_save.connect(page_post_save, sender=Page)
+
+def shortify(text):
+ if not text:
+ return ''
+ if len(text) <= settings.CHIMERE_SHORT_DESC_LENGTH:
+ return text
+ desc = text[:settings.CHIMERE_SHORT_DESC_LENGTH]
+ short_desc = ""
+ # find a correct opportunity to cut
+ for idx, c in enumerate(reversed(desc)):
+ if c == '>':
+ break
+ if c == '<':
+ short_desc = desc[:-(idx+1)]
+ break
+ if not short_desc:
+ for idx, c in enumerate(reversed(desc)):
+ if c == ' ' or c == '\n':
+ short_desc = desc[:-(idx+1)]
+ break
+ return BeautifulSoup(short_desc).prettify()
+
class News(models.Model):
"""News of the site
"""
title = models.CharField(_(u"Name"), max_length=150)
available = models.BooleanField(_(u"Available"))
+ is_front_page = models.NullBooleanField(_(u"Is front page"), blank=True,
+ null=True)
date = models.DateField(_(u"Date"), auto_now_add=True)
content = models.TextField()
+ url = models.URLField(_(u"Url"), max_length=200, blank=True, null=True)
areas = SelectMultipleField('Area', verbose_name=_(u"Associated areas"),
blank=True, null=True)
def __unicode__(self):
@@ -61,6 +114,10 @@ class News(models.Model):
verbose_name = _(u"News")
verbose_name_plural = _(u"News")
+ @property
+ def short_desc(self):
+ return shortify(self.content)
+
class TinyUrl(models.Model):
"""Tinyfied version of permalink parameters
"""
@@ -156,14 +213,20 @@ class SubCategory(models.Model):
available = models.BooleanField(_(u"Available"), default=True)
submission = models.BooleanField(_(u"Available for submission"),
default=True)
+ as_layer = models.BooleanField(_(u"Displayed in the layer menu"),
+ default=False)
icon = models.ForeignKey(Icon, verbose_name=_(u"Icon"))
+ hover_icon = models.ForeignKey(Icon, verbose_name=_(u"Hover icon"),
+ blank=True, null=True, related_name='subcat_hovered')
color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"),
blank=True, null=True)
order = models.IntegerField(_(u"Order"), default=1000)
+ dated = models.BooleanField(_(u"Is dated"), default=False)
TYPE = (('M', _(u'Marker')),
('R', _(u'Route')),
('B', _(u'Both')),)
item_type = models.CharField(_(u"Item type"), max_length=1, choices=TYPE)
+ description = models.TextField(blank=True, null=True)
def __unicode__(self):
return u"%s / %s" % (self.category.name, self.name)
class Meta:
@@ -207,6 +270,24 @@ class SubCategory(models.Model):
subcategories = sorted(subcategories, key=get_cat_order)
return subcategories
+ @classmethod
+ def getAvailableTuples(cls, area_name=None):
+ cats = []
+ for cat, subcats in cls.getAvailable(area_name=area_name):
+ cats.append((unicode(cat),
+ [(subcat.pk, subcat.name) for subcat in subcats]))
+ return cats
+
+ 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
+ return json_string
+
IMPORTERS = {'KML':KMLManager,
'OSM':OSMManager,
'SHP':ShapefileManager,
@@ -359,6 +440,8 @@ class Marker(GeographicItem):
route = models.ForeignKey(u"Route", blank=True, null=True,
related_name='associated_marker')
description = models.TextField(_(u"Description"), blank=True, null=True)
+ is_front_page = models.NullBooleanField(_(u"Is front page"), blank=True,
+ null=True)
objects = models.GeoManager()
def __unicode__(self):
@@ -411,6 +494,10 @@ class Marker(GeographicItem):
return self.start_date
@property
+ def short_desc(self):
+ return shortify(self.description)
+
+ @property
def geometry(self):
return self.point.wkt
@@ -493,12 +580,18 @@ class Marker(GeographicItem):
items = {'id':self.id, 'name':json.dumps(self.name),
'geometry':self.point.geojson,
'icon_path':cat.icon.image,
+ 'icon_hover_path':cat.hover_icon.image \
+ if cat.hover_icon else '',
'icon_width':cat.icon.image.width,
- 'icon_height':cat.icon.image.height,}
+ 'icon_height':cat.icon.image.height,
+ 'category_name':json.dumps(cat.name)}
jsons.append(u'{"type":"Feature", "geometry":%(geometry)s, '\
u'"properties":{"pk": %(id)d, "name": %(name)s, '\
- u'"icon_path":"%(icon_path)s", "icon_width":%(icon_width)d, '\
- u'"icon_height":%(icon_height)d}}' % items)
+ u'"icon_path":"%(icon_path)s", '\
+ u'"icon_hover_path":"%(icon_hover_path)s", '\
+ u'"icon_width":%(icon_width)d, '\
+ u'"icon_height":%(icon_height)d, '\
+ u'"category_name":%(category_name)s}}' % items)
return ",".join(jsons)
@property
@@ -603,17 +696,30 @@ IFRAME_LINKS = {
'youtube':((re.compile(r'youtube.com\/watch\?v=([A-Za-z0-9_-]*)'),
re.compile(r'youtu.be\/([A-Za-z0-9_-]*)'),
re.compile(r'youtube.com\/embed\/([A-Za-z0-9_-]*)')),
- "http://www.youtube.com/embed/%s"),
+ "http://www.youtube.com/embed/%s"),
'dailymotion':(
(re.compile(r'dailymotion.com/video/([A-Za-z0-9]*)_[A-Za-z0-9_-]*'),
re.compile(r'dailymotion.com/embed/video/([A-Za-z0-9]*)'),
re.compile("http://www.dailymotion.com/embed/video/%s")),
- 'http://www.dailymotion.com/embed/video/%s'),
+ 'http://www.dailymotion.com/embed/video/%s'),
'vimeo':((re.compile(r'vimeo.com/([A-Za-z0-9]*)'),
re.compile(r'vimeo.com/video/([A-Za-z0-9]*)')),
- "http://player.vimeo.com/video/%s")
+ "http://player.vimeo.com/video/%s")
}
+class MultimediaExtension(models.Model):
+ name = models.CharField(_(u"Extension name"), max_length=6)
+ multimedia_type = models.ForeignKey(MultimediaType,
+ verbose_name=_(u"Associated multimedia type"),
+ related_name='extensions')
+
+ class Meta:
+ verbose_name = _(u"Multimedia extension")
+ verbose_name_plural = _(u"Multimedia extensions")
+
+ def __unicode__(self):
+ return self.name
+
class MultimediaFile(models.Model):
name = models.CharField(_(u"Name"), max_length=150)
url = models.URLField(_(u"Url"), max_length=200)
@@ -1286,11 +1392,15 @@ class PropertyModel(models.Model):
TYPE = (('T', _('Text')),
('L', _('Long text')),
('P', _('Password')),
- ('D', _("Date")))
+ ('D', _("Date")),
+ ('C', _("Choices")),
+ )
TYPE_WIDGET = {'T':forms.TextInput,
'L':TextareaWidget,
'P':forms.PasswordInput,
- 'D':DatePickerWidget}
+ 'D':DatePickerWidget,
+ 'C':forms.Select
+ }
type = models.CharField(_(u"Type"), max_length=1, choices=TYPE)
def __unicode__(self):
return self.name
@@ -1308,6 +1418,19 @@ class PropertyModel(models.Model):
'''
return 'property_%d_%d' % (self.order, self.id)
+class PropertyModelChoice(models.Model):
+ '''Choices for property model
+ '''
+ propertymodel = models.ForeignKey(PropertyModel, related_name='choices',
+ verbose_name=_(u"Property model"))
+ value = models.CharField(_(u"Value"), max_length=150)
+ available = models.BooleanField(_(u"Available"), default=True)
+ def __unicode__(self):
+ return unicode(self.value)
+
+ class Meta:
+ verbose_name = _(u"Model property choice")
+
class Property(models.Model):
'''Property for a POI
'''
@@ -1316,7 +1439,14 @@ class Property(models.Model):
verbose_name=_(u"Property model"))
value = models.TextField(_(u"Value"))
def __unicode__(self):
- return "%s : %s" % (str(self.propertymodel), self.value)
+ if self.propertymodel.type == 'C':
+ try:
+ return unicode(PropertyModelChoice.objects.get(
+ pk=self.value).value)
+ except self.DoesNotExist:
+ return ""
+ return unicode(self.value)
+
class Meta:
verbose_name = _(u"Property")
@@ -1327,6 +1457,11 @@ class Property(models.Model):
return datetime.date(*[int(val) for val in self.value.split('-')])
except:
return ""
+ if self.propertymodel.type == 'C':
+ try:
+ return PropertyModelChoice.objects.get(pk=self.value)
+ except self.DoesNotExist:
+ return None
else:
return self.value
diff --git a/chimere/route.py b/chimere/route.py
new file mode 100644
index 0000000..040a7be
--- /dev/null
+++ b/chimere/route.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+#
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+"""
+Routing management
+"""
+
+import os, re, shutil, tempfile
+from BeautifulSoup import BeautifulSoup
+from subprocess import Popen, PIPE
+from django.contrib.gis.gdal import DataSource
+
+from django.conf import settings
+
+class Router:
+ def route(self, lon1, lat1, lon2, lat2, transport='foot'):
+ '''
+ Get a list of geojson polylines
+ '''
+ return []
+
+class RoutinoRouter(Router):
+ re_desc = [re.compile("<tr class='n'>"), re.compile("<tr class='s'>"),
+ re.compile("<tr class='t'>")]
+ def route(self, lon1, lat1, lon2, lat2, steps=[], transport='foot',
+ speed=None):
+ '''
+ Get a list of geojson polylines and route description
+ '''
+ language = settings.LANGUAGE_CODE.split('-')[0]
+ args = [settings.CHIMERE_ROUTING_ENGINE['PATH'],
+ "--dir=%s" % settings.CHIMERE_ROUTING_ENGINE['DB_PATH'],
+ "--transport=%s" % transport,
+ "--language=%s" % language,
+ "--shortest",
+ "--output-html",
+ "--output-gpx-track",
+ "--lat1=%0.15f" % lat1,
+ "--lon1=%0.15f" % lon1,
+ ]
+ if speed:
+ args += ["--speed-%s=%s" % (highway, unicode(speed))
+ for highway in ('motorway', 'trunk', 'primary', 'secondary',
+ 'tertiary', 'unclassified', 'residential', 'service',
+ 'track','cycleway','path','steps')]
+ lonlat_index = 1
+ for lon, lat in steps:
+ lonlat_index += 1
+ args += ["--lat%d=%0.15f" % (lonlat_index, lat),
+ "--lon%d=%0.15f" % (lonlat_index, lon)]
+ lonlat_index += 1
+ args += ["--lat%d=%0.15f" % (lonlat_index, lat2),
+ "--lon%d=%0.15f" % (lonlat_index, lon2)]
+ tmp_dir = tempfile.mkdtemp(prefix='chimere_') + os.sep
+ p = Popen(args, stdout=PIPE, cwd=tmp_dir)
+ p.communicate()
+ ds = DataSource(tmp_dir + 'shortest-track.gpx')
+ if not ds:
+ return [], None, None
+ layer = ds[0]
+ trk_layer = None
+ for layer in ds:
+ if layer.name == 'tracks':
+ trk_layer = layer
+ break
+ multilines = trk_layer.get_geoms()
+ res = []
+ for multiline in multilines:
+ res += [geom.geojson for geom in multiline]
+ desc = []
+ # only keeping interessant lines of the desc
+ for line in open(tmp_dir + 'shortest.html').readlines():
+ if [True for r in self.re_desc if r.match(line)]:
+ desc.append(BeautifulSoup(line).prettify())
+ total = self.webify(desc[-1])
+ desc = desc[1:-2]
+ # very fragile piece of code but only break the numerotation
+ number_tpl = '<tr class="n"><span class="number">%d.</span>'
+ desc = [re.sub('<tr class="n">', number_tpl % (idx/2+1), d)
+ if idx % 2 else d
+ for idx, d in enumerate(desc)]
+ desc = self.webify(BeautifulSoup('\n'.join(desc)).prettify())
+ desc = re.sub(" \[", "", desc)
+ desc = re.sub(" \]", "", desc)
+ shutil.rmtree(tmp_dir)
+ return res, desc, total
+
+ @staticmethod
+ def webify(lbl):
+ lbl = re.sub("<td", "<span", lbl)
+ lbl = re.sub("</td>", "</span>", lbl)
+ lbl = re.sub("</tr>", "</div>", lbl)
+ lbl = re.sub("<tr", "<div", lbl)
+ return lbl
+
+router = None
+if settings.CHIMERE_ROUTING_ENGINE['ENGINE'] == 'routino':
+ router = RoutinoRouter()
+
diff --git a/chimere/static/chimere/css/print.css b/chimere/static/chimere/css/print.css
new file mode 100644
index 0000000..b6b4e68
--- /dev/null
+++ b/chimere/static/chimere/css/print.css
@@ -0,0 +1,36 @@
+#topbar,
+#zoombar, #zoomin, #zoomout, #slidebar,
+#pandown, #panup, #panright, #panleft,
+div#footer p.map-footer{
+ display:none;
+}
+
+#main-map{
+ z-index:10;
+ top:0;
+ bottom:0;
+ height:605pt;
+ max-height:605pt;
+ width:1200pt;
+ right:50%;
+ border:none;
+}
+
+#panel #chimere_itinerary_panel{
+ width:870pt;
+ bottom:auto;
+ left:auto;
+ right:auto;
+ top:605pt;
+ position:absolute;
+ z-index:1000;
+}
+
+#sidebar div#panel{
+ width:900pt;
+ border:none;
+ overflow:visible;
+}
+
+
+
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index ff2e088..43dc3c6 100644
--- a/chimere/static/chimere/css/styles.css
+++ b/chimere/static/chimere/css/styles.css
@@ -15,7 +15,8 @@ a, a:link, a:visited, legend,
h2, h3, th, .action li, .action li a,
.action li li a, #no-js-message,
-#footer a, #footer a:link, #footer a:visited, .ui-widget-header{
+#footer a, #footer a:link, #footer a:visited, .ui-widget-header,
+#chimere_itinerary td.l{
color:#fff;
}
@@ -25,11 +26,23 @@ h2, h3, th, .action li, .action li a,
color:#333;
}
+.nominatim-widget, .disabled{
+ color:#aaa;
+}
+
+#chimere_total_label td.l{
+ color:#000;
+}
+
/* background-color definition */
body, h2, h3, th,
.ui-widget-header,
-.action li.selected, #no-js-message{
+#layer_selection h4,
+.action li.selected, #no-js-message,
+#content .olControlLayerSwitcher .layersDiv,
+#content .olControlLayerSwitcher span,
+#chimere_itinerary td.l{
background-color:#449506;
}
@@ -38,10 +51,12 @@ body, h2, h3, th,
}
fieldset, .action li, #content,
-#map-footer, #panel, #areas,
+#layer_selection #layer_list,
+#map-footer, #panel, #chimere_itinerary_panel, #areas,
#welcome, #detail, .detail_footer a,
#content .olControlLayerSwitcher .layersDiv,
#content .olControlLayerSwitcher span,
+#chimere_total_label td.l,
#main-map, .window{
background-color:#FFF;
}
@@ -58,12 +73,14 @@ div.warning, .errorlist{
border:1px solid #54c200;
}
+#layer_selection h4,
+#layer_selection #layer_list,
#areas, #detail, #main-map,
div.warning,
#content,
.action li.selected,
#content .olControlLayerSwitcher .layersDiv,
-#panel, #map-footer,
+#panel, #map-footer, #chimere_itinerary_panel,
#utils-div{
border:1px solid #327e04;
}
@@ -79,7 +96,7 @@ div.warning,
opacity:0.9;
}
-#panel, #areas, #detail, #category_detail{
+#panel, #areas, #detail, #category_description, #chimere_itinerary_panel{
opacity:0.8;
}
@@ -102,7 +119,7 @@ h2, #action li, .detail_footer{
fieldset, #content, #panel,
#areas, #welcome, #detail,
-#category_detail, div.warning{
+#category_description, div.warning{
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
@@ -153,7 +170,6 @@ h3{
h4, caption{
font-weight:normal;
- font-style:italic;
margin:0;
text-align:left;
}
@@ -174,6 +190,10 @@ fieldset{
margin-top:8px;
}
+.hidden{
+ display:none;
+}
+
.ui-dialog-buttonset{
text-align:center;
}
@@ -192,7 +212,7 @@ fieldset{
}
#topbar{
- z-index:0;
+ z-index:10;
}
ul.action{
@@ -314,28 +334,33 @@ ul#action-2 {
margin:0;
}
-ul#share{
+ul.share{
list-style-type:none;
margin:0;
padding:0;
+ display:inline;
}
-ul#share li{
+ul.share li{
display:inline;
line-height:22px;
vertical-align: bottom;
}
-#share a{
+.share a{
text-decoration:None;
}
-#share img{
+.share img{
border:None;
width:22px;
height:22px;
}
+.share .share-icon img{
+ width:74px;
+}
+
.detail_footer{
text-align:center;
position:absolute;
@@ -360,8 +385,6 @@ ul#share li{
#main-map{
position:absolute;
- margin:0px;
- padding:0px;
height:93%;
margin:0;
padding:0;
@@ -392,6 +415,45 @@ ul#share li{
z-index:0;
}
+#layer_selection{
+ position:absolute;
+ z-index:100;
+ top:80px;
+ left:200px;
+}
+
+#layer_selection h4,
+#layer_selection #layer_list li{
+ padding:2px 5px;
+}
+
+#layer_selection h4{
+ font-weight:normal;
+ border-width:1px;
+ border-style:solid;
+ width:140px;
+ text-align:center;
+}
+
+#layer_selection h4:hover{
+ cursor:pointer;
+}
+
+#layer_selection ul{
+ display:block;
+}
+
+#layer_selection ul#layer_list{
+ width:150px;
+ display:none;
+ list-style:none;
+ margin:0;
+ padding:0;
+ border-width:1px;
+ border-style:solid;
+ border-top:none;
+}
+
.news h3{
padding:0px;
margin:0;
@@ -414,12 +476,110 @@ ul#share li{
top:50px;
right:18px;
width:300px;
- bottom:44px;
+ max-height:300px;
overflow:auto;
padding:0.5em;
padding-top:0;
}
+#chimere_itinerary_panel,
+#chimere_itinerary{
+ display:none;
+}
+
+#chimere_itinerary_panel label{
+ color:#000;
+}
+
+#chimere_itinerary_panel p
+{
+ margin:0.5em;
+}
+
+#total_label_div{
+ margin:5px 0;
+}
+
+.itinerary_label{
+ font-size:0.9em;
+ padding-top:0.5em;
+ font-style:italic;
+}
+
+.itinerary_label .label{
+ font-style:normal;
+ font-weight:bold;
+ padding:3px 8px;
+}
+
+
+#chimere_itinerary_content{
+ overflow:auto;
+ height:190px;
+ margin-top:10px;
+}
+
+#chimere_itinerary_content span.l{
+ padding:5px;
+ width:60px;
+}
+
+#chimere_itinerary_content span.j{
+ font-style:italic;
+}
+
+#chimere_itinerary_content .number{
+ font-weight:bold;
+}
+
+#chimere_itinerary_content span.t,
+#chimere_itinerary_content span.b
+{
+ text-transform: lowercase;
+}
+
+#chimere_map_menu{
+ z-index:4;
+ display:none;
+ position:absolute;
+ padding:0.5em;
+ background-color:#fff;
+ border:1px solid #bbb;
+ -webkit-border-radius: 0 8px 8px 8px;
+ -moz-border-radius: 0 8px 8px 8px;
+ border-radius: 0 8px 8px 8px;
+}
+
+#map_menu_clear{
+ display:none;
+}
+
+#map_menu_zoomin{
+ border-top:1px solid #999;
+}
+
+#chimere_map_menu ul, #chimere_map_menu li{
+ padding:0.2em;
+ margin:0;
+ list-style:none;
+}
+
+#chimere_map_menu li:hover{
+ cursor:pointer;
+ background-color:#ccc;
+}
+
+.nominatim-label{
+ display:block;
+ font-size:0.9em;
+ font-weight:bold;
+ height:2.8em;
+}
+
+.nominatim-widget{
+ font-style:italic;
+}
+
.simple #panel{
top:5px;
bottom:auto;
@@ -545,26 +705,18 @@ p.warning{
}
-#welcome_button,
+a#welcome_button,
+a#routing_button,
#permalink{
display: block;
- text-align:center;
margin:0.3em;
padding:0.2em;
-}
-
-a#welcome_button,
-#permalink{
+ width:100%;
font-size:14px;
text-align:center;
text-decoration:none;
}
-#welcome_button,
-#permalink{
- width:100%;
-}
-
/* forms */
table.inline-table{
@@ -607,6 +759,40 @@ table.inline-table td input[type=file]{
margin-right: auto;
}
+.alert-box .ui-dialog-titlebar {
+ display:none;
+}
+
+ul#multimedia_list_content{
+ padding:0;
+ margin:0;
+ list-style-type:none;
+}
+
+ul#multimedia_list_content li{
+ padding:0.5em 5px 0.5em 35px;
+ margin:0;
+ display:block;
+ list-style-type:none;
+ border-bottom:1px solid;
+}
+
+ul#multimedia_list_content li img{
+ display:block;
+ float:right;
+}
+
+ul#multimedia_list_content li.picture{
+ background-image:url("../img/img_logo.png");
+ background-position:4px center;
+ background-repeat:no-repeat;
+}
+
+ul#multimedia_list_content li.multimedia{
+ background-image:url("../img/film_logo.png");
+ background-position:6px center;
+ background-repeat:no-repeat;
+}
#waiting{ /* Fixed position to provide the vertical offset */
position:fixed;
@@ -776,6 +962,26 @@ div.pp_default .pp_expand{
SimplePanZoom
*/
+#main_map.olMap{
+ z-index:0;
+}
+
+#marker_hover{
+ display:none;
+ position:absolute;
+ z-index:5;
+ background-image: url('../img/bottom-arrow.png');
+ background-repeat: no-repeat;
+ background-position: center bottom;
+}
+
+#marker_hover_content{
+ margin-bottom:6px;
+ background-color:#fff;
+ border:1px solid #000;
+ padding:0.1em 0.5em;
+}
+
.olControlSimplePanZoom {
top: 10px;
right: 10px;
diff --git a/chimere/static/chimere/img/bottom-arrow.png b/chimere/static/chimere/img/bottom-arrow.png
new file mode 100644
index 0000000..7393ffe
--- /dev/null
+++ b/chimere/static/chimere/img/bottom-arrow.png
Binary files differ
diff --git a/chimere/static/chimere/img/close.png b/chimere/static/chimere/img/close.png
new file mode 100644
index 0000000..f9e8d04
--- /dev/null
+++ b/chimere/static/chimere/img/close.png
Binary files differ
diff --git a/chimere/static/chimere/img/empty.png b/chimere/static/chimere/img/empty.png
new file mode 100644
index 0000000..1ad1e19
--- /dev/null
+++ b/chimere/static/chimere/img/empty.png
Binary files differ
diff --git a/chimere/static/chimere/img/feed.png b/chimere/static/chimere/img/feed.png
new file mode 100644
index 0000000..19d2246
--- /dev/null
+++ b/chimere/static/chimere/img/feed.png
Binary files differ
diff --git a/chimere/static/chimere/img/film_logo.png b/chimere/static/chimere/img/film_logo.png
new file mode 100644
index 0000000..1ccdc2e
--- /dev/null
+++ b/chimere/static/chimere/img/film_logo.png
Binary files differ
diff --git a/chimere/static/chimere/img/flag-finish.png b/chimere/static/chimere/img/flag-finish.png
new file mode 100644
index 0000000..04bfa1d
--- /dev/null
+++ b/chimere/static/chimere/img/flag-finish.png
Binary files differ
diff --git a/chimere/static/chimere/img/flag-start.png b/chimere/static/chimere/img/flag-start.png
new file mode 100644
index 0000000..c93f2a3
--- /dev/null
+++ b/chimere/static/chimere/img/flag-start.png
Binary files differ
diff --git a/chimere/static/chimere/img/flag-step.png b/chimere/static/chimere/img/flag-step.png
new file mode 100644
index 0000000..5556c94
--- /dev/null
+++ b/chimere/static/chimere/img/flag-step.png
Binary files differ
diff --git a/chimere/static/chimere/img/images_licences b/chimere/static/chimere/img/images_licences
index 0e732fc..d6d2773 100644
--- a/chimere/static/chimere/img/images_licences
+++ b/chimere/static/chimere/img/images_licences
@@ -1,5 +1,5 @@
-* Upload image credit
+* Upload image credit (upload.png)
* Farm-Fresh layer gps.png in Farm-Fresh Web Icons
Author: FatCow Web Hosting
@@ -16,17 +16,26 @@ Author: The Tango! Desktop Project
Licence: Public domain
Url: http://commons.wikimedia.org/wiki/File:Internet-web-browser.svg
-* Drawing image credit
+* Drawing image credit (drawing.png)
* Icons from the Tango! project set.
Author: The Tango! Desktop Project
Licence: Public domain
Url: http://commons.wikimedia.org/wiki/File:Edit-find-replace.svg
-Url 2: http://commons.wikimedia.org/wiki/File:Internet-web-browser.svg
+ http://commons.wikimedia.org/wiki/File:Internet-web-browser.svg
+ https://commons.wikimedia.org/wiki/File:Document-print.svg
-* Quaver image credit
+* Quaver image credit (8thNote.png)
* An 8th-note.
Author: Sbrools
Licence: Public domain
Url: https://commons.wikimedia.org/wiki/File:8thNote.svg
+
+* Flags image credit (flag-start.png, flag-step.png, flag-finish.png)
+
+Author: FatCow Web Hosting
+Licence: Creative Commons Attribution 3.0 United States license
+Url: https://upload.wikimedia.org/wikipedia/commons/c/cb/Farm-Fresh_flag_1.png
+ https://upload.wikimedia.org/wikipedia/commons/8/81/Farm-Fresh_flag_blue.png
+ https://upload.wikimedia.org/wikipedia/commons/6/64/Farm-Fresh_flag_finish.png
diff --git a/chimere/static/chimere/img/img_logo.png b/chimere/static/chimere/img/img_logo.png
new file mode 100644
index 0000000..b487506
--- /dev/null
+++ b/chimere/static/chimere/img/img_logo.png
Binary files differ
diff --git a/chimere/static/chimere/img/marker-cluster.png b/chimere/static/chimere/img/marker-cluster.png
new file mode 100644
index 0000000..3d15153
--- /dev/null
+++ b/chimere/static/chimere/img/marker-cluster.png
Binary files differ
diff --git a/chimere/static/chimere/img/printer.png b/chimere/static/chimere/img/printer.png
new file mode 100644
index 0000000..5a5dbaf
--- /dev/null
+++ b/chimere/static/chimere/img/printer.png
Binary files differ
diff --git a/chimere/static/chimere/img/share-icon.png b/chimere/static/chimere/img/share-icon.png
new file mode 100644
index 0000000..f21b76e
--- /dev/null
+++ b/chimere/static/chimere/img/share-icon.png
Binary files differ
diff --git a/chimere/static/chimere/img/share-icon.xcf b/chimere/static/chimere/img/share-icon.xcf
new file mode 100644
index 0000000..d149768
--- /dev/null
+++ b/chimere/static/chimere/img/share-icon.xcf
Binary files differ
diff --git a/chimere/static/chimere/js/base.js b/chimere/static/chimere/js/base.js
index 3f9d39d..4482879 100644
--- a/chimere/static/chimere/js/base.js
+++ b/chimere/static/chimere/js/base.js
@@ -107,3 +107,36 @@ function zoomToCurrentExtent(map){
map.zoomToExtent(extent, true);
return true;
}
+
+/* interface */
+function share_link_update(){
+ $('.share_link').click(function(){
+ if (this.share_initialized){
+ return false;
+ }
+ this.share_initialized = true;
+ var href = $(this).attr('href');
+ var url = get_share_url;
+ var classes = $(this).attr('class').split(' ');
+ prefix = 'share_id_';
+ var share_id;
+ for (idx=0;idx<classes.length;idx++){
+ if(classes[idx].substring(0, prefix.length) == prefix){
+ var share_id = classes[idx].substring(prefix.length);
+ }
+ }
+ var params = $('#permalink a').attr('href').split('/');
+ url += share_id + params[params.length-1];
+ $.ajax({url: url,
+ dataType: "html",
+ success: function (url) {
+ window.open(url);
+ return false;
+ },
+ error: function(){
+ return false;
+ }
+ });
+ return false;
+ });
+}
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 3b9f352..e2aa6b2 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -67,6 +67,11 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
lat: null,
lon: null,
simple: false,
+ routing_start_lat: null,
+ routing_start_lon: null,
+ routing_end_lat: null,
+ routing_end_lon: null,
+ routing_steps_lonlat: null,
// Provide this function to make a custom click event on the marker
on_marker_click: null,
// Provide this function to override the feature detail display
@@ -74,24 +79,37 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
// Provide this function for overriding the getSubcategories default
get_subcategories_fx: null,
hide_popup_fx: null,
+ // if leave to false every click on the map hide the pop-up
+ explicit_popup_hide: false,
controls:[new OpenLayers.Control.Navigation(),
new OpenLayers.Control.SimplePanZoom(),
new OpenLayers.Control.ScaleLine()],
+ popupClass: OpenLayers.Popup.FramedCloud,
+ popupContentFull: false, // if true the detail is inside the popup
+ category_accordion: true, // category opening behave like an accordion
maxResolution: 156543.0399,
units: 'm',
projection: new OpenLayers.Projection('EPSG:4326'),
- theme:null,
+ theme: null,
+ enable_clustering: true,
+ routing: false, // enable routing management
+ routing_panel_open: function(){
+ $('#chimere_itinerary_panel').dialog('open');
+ },
current_feature: null, // To store the active POI
current_control: null, // To store the current control
current_popup: null, // To store the current POI popup displayed
current_category: null, // To store the current category clicked in list
+ current_route_feature: null, // To store the current route find by routing
+ itinerary_step_number:0, // current step number
icon_offset: new OpenLayers.Pixel(0, 0),
edition: false, // edition mode
edition_type_is_route: false, // route or POI edition
default_icon: new OpenLayers.Icon(
'http://www.openlayers.org/dev/img/marker-green.png',
new OpenLayers.Size(21, 25),
- new OpenLayers.Pixel(-(21/2), -25))
+ new OpenLayers.Pixel(-(21/2), -25)),
+ cluster_icon: null
};
var settings = {};
/*
@@ -103,6 +121,13 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
*/
init: function ( options ) {
/* Manage parameters */
+ // not staticaly in default because of STATIC_URL init
+ if (defaults.cluster_icon == null && typeof STATIC_URL != 'undefined'){
+ defaults.cluster_icon = new OpenLayers.Icon(
+ STATIC_URL+'chimere/img/marker-cluster.png',
+ new OpenLayers.Size(36, 36),
+ new OpenLayers.Pixel(-(36/2), -(36/2)));
+ }
settings = $.extend({}, defaults);
if ( options ) $.extend(settings, options);
var map_element = $(this).get(0);
@@ -119,6 +144,8 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
map_options['restrictedExtent'] = settings.restricted_extent;
}
+ settings.current_position = null;
+
/* Create map object */
settings.map = map = new OpenLayers.Map(map_element, map_options);
@@ -142,8 +169,29 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
// Make specific params
params.checked_categories = settings.checked_categories;
params.display_submited = settings.display_submited;
- if(settings.current_feature){
+ if(settings.current_feature)
params.current_feature = settings.current_feature.pk;
+ if (settings.routing_start){
+ lonlat = settings.routing_start.lonlat.clone().transform(
+ EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION);
+ params.routing_start_lon = lonlat.lon;
+ params.routing_start_lat = lonlat.lat;
+ }
+ if (settings.routing_end){
+ lonlat = settings.routing_end.lonlat.clone().transform(
+ EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION);
+ params.routing_end_lon = lonlat.lon;
+ params.routing_end_lat = lonlat.lat;
+ }
+ if (settings.routing_steps){
+ var steps = [];
+ for (var i = 0; i < settings.routing_steps.length; i++){
+ lonlat = settings.routing_steps[i].lonlat.clone(
+ ).transform(EPSG_PROJECTION,
+ EPSG_DISPLAY_PROJECTION);
+ steps.push([lonlat.lon, lonlat.lat]);
+ }
+ params.routing_steps = steps;
}
return params;
}
@@ -168,6 +216,40 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
settings.map.setBaseLayer(
settings.map_layers[settings.selected_map_layer]);
+
+ /* manage the context menu */
+ $('#map_menu_zoomin').bind("click", methods.zoomIn);
+ $('#map_menu_zoomout').bind("click", methods.zoomOut);
+ $('#map_menu_center').bind("click", methods.mapCenter);
+ /* manage the routing */
+ if (settings.routing){
+ settings.routing_start = null;
+ settings.routing_steps = new Array();
+ settings.routing_end = null;
+ settings.icon_start = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-start.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ settings.icon_step = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-step.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ settings.icon_end = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-finish.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ $('#map_menu_from').bind("click", methods.routingFrom);
+ $('#map_menu_step').bind("click", methods.routingAddStep);
+ $('#map_menu_to').bind("click", methods.routingTo);
+ $('#map_menu_clear').bind("click", methods.routingClear);
+ settings.layerRoute = new OpenLayers.Layer.Vector("Route Layer");
+ settings.map.addLayer(settings.layerRoute);
+ settings.layerRoute.setOpacity(0.8);
+ settings.layerRouteMarker = new OpenLayers.Layer.Markers(
+ 'Route markers');
+ settings.map.addLayer(settings.layerRouteMarker);
+ settings.layerRouteMarker.setOpacity(0.8);
+ }
/* Vectors layer */
settings.layerVectors = new OpenLayers.Layer.Vector("Vector Layer");
settings.map.addLayer(settings.layerVectors);
@@ -178,10 +260,92 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.map.addControl(new OpenLayers.Control.ModifyFeature(
settings.layerVectors, {clickout:false, toggle:false}));
}
+
+ if (settings.enable_clustering){
+ var style = new OpenLayers.Style({
+ graphicTitle: "${name}",
+ externalGraphic: "${icon}",
+ graphicWidth: "${width}",
+ graphicHeight: "${height}",
+ graphicXOffset: "${offsetx}",
+ graphicYOffset: "${offsety}",
+ graphicOpacity: 1,
+ label: "${label}",
+ fontWeight:'bold',
+ fontSize:'1.3em'
+ }, {
+ context: {
+ name: function(feature) {
+ if(feature.cluster) {
+ feature.attributes.width = settings.cluster_icon.size.w;
+ feature.attributes.height = settings.cluster_icon.size.h;
+ feature.attributes.offsetx = settings.cluster_icon.offset.x;
+ feature.attributes.offsety = settings.cluster_icon.offset.y;
+ } else{
+ var marker = feature.attributes.marker
+ feature.attributes.width = marker.icon.size.w;
+ feature.attributes.height = marker.icon.size.h;
+ feature.attributes.offsetx = settings.icon_offset.x;
+ feature.attributes.offsety = settings.icon_offset.y;
+ }
+ return feature.attributes.name;
+ },
+ label: function(feature) {
+ // clustered features count or blank if feature is not a cluster
+ return feature.cluster ? feature.cluster.length : "";
+ },
+ icon: function(feature) {
+ if (feature.cluster){
+ return settings.cluster_icon.url;
+ } else {
+ return STATIC_URL + 'chimere/img/empty.png';
+ }
+ },
+ width: function(feature) { return feature.attributes.width; },
+ height: function(feature) { return feature.attributes.height; },
+ offsetx: function(feature) { return feature.attributes.offsetx; },
+ offsety: function(feature) { return feature.attributes.offsety; }
+ }});
+
+
+ /* Cluster layer */
+ var strategy = new OpenLayers.Strategy.Cluster({distance: 20,
+ threshold: 3});
+ settings.layerCluster = new OpenLayers.Layer.Vector("Cluster layer",
+ {styleMap: new OpenLayers.StyleMap({'default': style}),
+ strategies: [strategy]});
+ settings.map.addLayer(settings.layerCluster);
+
+ var highlightCtrl = new OpenLayers.Control.SelectFeature(
+ settings.layerCluster, {
+ hover: true,
+ highlightOnly: true,
+ eventListeners: {
+ featurehighlighted: function(e) {
+ e.feature.attributes.marker.events.triggerEvent('mouseover');
+ },
+ featureunhighlighted: function(e) {
+ e.feature.attributes.marker.events.triggerEvent('mouseout');
+ }
+ }
+ });
+
+ var selectCtrl = new OpenLayers.Control.SelectFeature(
+ settings.layerCluster,{
+ onSelect: methods.zoomOnCluster
+ });
+
+ settings.map.addControl(highlightCtrl);
+ settings.map.addControl(selectCtrl);
+
+ highlightCtrl.activate();
+ selectCtrl.activate();
+
+ }
+
/* Markers layer */
settings.layerMarkers = new OpenLayers.Layer.Markers('POIs');
settings.map.addLayer(settings.layerMarkers);
- settings.layerMarkers.setOpacity(0.8);
if (settings.dynamic_categories){
settings.map.events.register('moveend', settings.map,
@@ -207,15 +371,16 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
if (!settings.edition){
+ if (settings.enable_clustering){
+ settings.map.events.register('zoomend', null,
+ methods.cleanCluster);
+ }
methods.loadCategories();
methods.loadGeoObjects();
- // Hide popUp when clicking on map
- settings.map.events.register('click', settings.map,
- methods.hidePopup);
+ methods.activateContextMenu()
} else {
if (!settings.edition_type_is_route){
- map.events.register('click', settings.map,
- methods.setMarker);
+ methods.activateMarkerEdit();
} else {
settings.layerVectors.events.register('featuremodified',
settings.layerVectors, helpers.updateRouteForm);
@@ -223,8 +388,117 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.layerVectors, helpers.featureRouteCreated);
}
}
+ if (settings.routing_start_lon && settings.routing_start_lat){
+ settings.current_position = new OpenLayers.LonLat(
+ settings.routing_start_lon, settings.routing_start_lat
+ ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
+ methods.routingFrom();
+ }
+ if (settings.routing_end_lon && settings.routing_end_lat){
+ settings.current_position = new OpenLayers.LonLat(
+ settings.routing_end_lon, settings.routing_end_lat
+ ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
+ methods.routingTo();
+ }
+ if (settings.routing_steps_lonlat){
+ for (var i = 0; i < settings.routing_steps_lonlat.length/2; i++) {
+ lon = settings.routing_steps_lonlat[i*2];
+ lat = settings.routing_steps_lonlat[i*2+1];
+ settings.current_position = new OpenLayers.LonLat(lon, lat
+ ).transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
+ methods.routingAddStep();
+ }
+ }
}, // end of init
+ activateContextMenu: function(){
+ settings.edition_type_is_route = false;
+ settings.map.events.unregister('click', settings.map,
+ methods.setMarker);
+ settings.map.events.register('click', settings.map,
+ methods.displayMapMenu);
+ },
+
+ activateRouteEdit: function(){
+ settings.edition_type_is_route = true;
+ settings.map.events.unregister('click', settings.map,
+ methods.setMarker);
+ settings.map.events.register('click', settings.map,
+ methods.displayMapMenu);
+ },
+
+ activateMarkerEdit: function(){
+ settings.edition_type_is_route = false;
+ if ($('#chimere_map_menu').length){
+ $('#chimere_map_menu').hide();
+ }
+ if (settings.current_popup != null) {
+ settings.current_popup.hide();
+ }
+ settings.map.events.unregister('click', settings.map,
+ methods.displayMapMenu);
+ settings.map.events.register('click', settings.map,
+ methods.setMarker);
+ },
+ // change map_layer
+ changeMapLayer: function(map_idx){
+ settings.map.setBaseLayer(settings.map_layers[map_idx]);
+ },
+
+ // init the context menu
+ zoomIn: function(){
+ methods.mapCenter();
+ settings.map.zoomIn();
+ },
+
+ // zoom out from the map menu
+ zoomOut: function(){
+ methods.mapCenter();
+ settings.map.zoomOut();
+ },
+
+ // center from the map menu
+ mapCenter: function(){
+ $('#chimere_map_menu').hide();
+ settings.map.setCenter(settings.current_position);
+ },
+
+ // set current position
+ setCurrentPosition: function(lonlat){
+ settings.current_position = lonlat;
+ },
+ zoomOnCluster: function(feature){
+ if(!feature.cluster) // if not cluster
+ {
+ feature.attributes.marker.events.triggerEvent('click');
+ feature.attributes.marker.events.triggerEvent('mouseover');
+ feature.attributes.marker.events.triggerEvent('mouseout');
+ } else {
+ settings.map.setCenter(
+ feature.geometry.getBounds().getCenterLonLat());
+ methods.zoomIn();
+ }
+ },
+
+ /*
+ * Display menu on the map
+ */
+ displayMapMenu: function(e) {
+ if (methods.hidePopup()) return;
+ if ($('#chimere_map_menu').is(":visible")){
+ $('#chimere_map_menu').hide();
+ } else{
+ methods.setCurrentPosition(
+ settings.map.getLonLatFromViewPortPx(e.xy));
+ var offsetX = e.pageX;
+ var offsetY = e.pageY;
+ $('#chimere_map_menu').show('fast');
+ $('#chimere_map_menu').css('display', 'block');
+ $('#chimere_map_menu').css('top', offsetY);
+ $('#chimere_map_menu').css('left', offsetX);
+ }
+ },
+
/*
* Load markers and route from DB
*/
@@ -240,6 +514,9 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
success: function (data) {
settings.layerMarkers.clearMarkers();
settings.layerVectors.removeAllFeatures();
+ if (settings.enable_clustering){
+ settings.cluster_array = [];
+ }
for (var i = 0; i < data.features.length; i++) {
var feature = data.features[i];
if (feature.geometry.type == 'Point'){
@@ -248,6 +525,11 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
methods.addRoute(feature);
}
}
+ if (settings.enable_clustering){
+ settings.layerCluster.addFeatures(
+ settings.cluster_array);
+ methods.cleanCluster();
+ }
},
error: function (data) {
settings.layerMarkers.clearMarkers();
@@ -258,7 +540,6 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
});
},
-
/*
* Update the categories div in ajax
*/
@@ -293,7 +574,13 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
category_element.parent().find("li input").attr("checked", val);
}
var _toggle_categories = function (subcategory_element) {
- var parent = subcategory_element.parent().parent().parent();
+ var parent = subcategory_element.closest('ul');
+ var parent_label = parent.parent().find("> span > label");
+ if (parent.find('input[type=checkbox]:checked').length){
+ parent_label.addClass('category-selected');
+ } else {
+ parent_label.removeClass('category-selected');
+ }
var master_check = parent.find("> input");
if (parent.find('.subcategories input[type=checkbox]').length ==
parent.find('.subcategories input[type=checkbox]:checked').length){
@@ -301,6 +588,14 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
} else {
master_check.removeAttr('checked');
}
+
+ if($('#action-categories').length){
+ if ($('#categories input[type=checkbox]:checked').length){
+ $('#action-categories').addClass('category-selected');
+ } else {
+ $('#action-categories').removeClass('category-selected');
+ }
+ }
return master_check;
};
var _init_categories = function () {
@@ -314,19 +609,37 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.permalink.updateLink();
});
$('.subcategories li input').bind("click", function () {
+ var c_name = $(this).attr('name');
+ c_name = c_name.substr(c_name.lastIndexOf("_")+1);
+ if($(this).is(':checked')){
+ methods.subcategory_detail(c_name);
+ }
methods.hidePopup();
methods.loadGeoObjects();
_toggle_categories($(this));
settings.permalink.updateLink();
+ if ($('#layer_cat_'+c_name).length){
+ $('#layer_cat_'+c_name).prop("checked",
+ this.checked);
+ }
});
$('#display_submited_check').bind("click", function () {
methods.loadGeoObjects();
settings.permalink.updateLink();
});
// Zoom to category
- $(".zoom_to_category").bind("click", function (e) {var id = this.id.substr(this.id.lastIndexOf("_")+1); helpers.zoom_to_category(id);});
- $(".zoom_to_subcategory").bind("click", function (e) {var id = this.id.substr(this.id.lastIndexOf("_")+1); helpers.zoom_to_subcategories([id]);});
- $(".toggle_category").bind("click", function (e) {var id = this.id.substr(this.id.lastIndexOf("_")+1); methods.toggle_category(id); });
+ $(".zoom_to_category").bind("click", function (e) {
+ var id = this.id.substr(this.id.lastIndexOf("_")+1);
+ helpers.zoom_to_category(id);
+ });
+ $(".zoom_to_subcategory").bind("click", function (e) {
+ var id = this.id.substr(this.id.lastIndexOf("_")+1);
+ helpers.zoom_to_subcategories([id]);
+ });
+ $(".toggle_category").bind("click", function (e) {
+ var id = this.id.substr(this.id.lastIndexOf("_")+1);
+ methods.toggle_category(id);
+ });
}
var _reCheckCategories = function (){
/* recheck categories on init or when a redraw occurs */
@@ -349,6 +662,26 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
},
/*
+ * Hide clusterized markers
+ */
+ cleanCluster: function (){
+ var hidden_feature_idx = [];
+ for(var idx=0; idx<settings.layerCluster.features.length; idx++){
+ if(settings.layerCluster.features[idx].cluster){
+ for(var c=0; c < settings.layerCluster.features[idx].cluster.length; c++) {
+ hidden_feature_idx.push(settings.layerCluster.features[idx].cluster[c].attributes.pk);
+ }
+ }
+ }
+ for(j=0; j<settings.layerMarkers.markers.length;j++){
+ if(hidden_feature_idx.indexOf(settings.layerMarkers.markers[j].pk) > -1){
+ settings.layerMarkers.markers[j].display(false);
+ } else {
+ settings.layerMarkers.markers[j].display(true);
+ }
+ }
+ },
+ /*
* Put a marker on the map
*/
addMarker: function (mark) {
@@ -360,24 +693,35 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
var lon = mark.geometry.coordinates[0];
var size = new OpenLayers.Size(mark.properties.icon_width,
mark.properties.icon_height);
- var iconclone = new OpenLayers.Icon(MEDIA_URL + mark.properties.icon_path,
- size, settings.icon_offset);
+ var icon_url = MEDIA_URL + mark.properties.icon_path;
+ var icon_hover_url = '';
+ if (mark.properties.icon_hover_path){
+ var icon_hover_url = MEDIA_URL + mark.properties.icon_hover_path;
+ }
+ var iconclone = new OpenLayers.Icon(icon_url, size,
+ settings.icon_offset);
+
var feature = new OpenLayers.Feature(settings.layerMarkers,
- new OpenLayers.LonLat(lon, lat).transform(EPSG_DISPLAY_PROJECTION,
- EPSG_PROJECTION),
+ new OpenLayers.LonLat(lon, lat).transform(
+ EPSG_DISPLAY_PROJECTION,
+ EPSG_PROJECTION),
{icon:iconclone});
feature.pk = mark.properties.pk;
- feature.popupClass = OpenLayers.Popup.FramedCloud;
+ feature.popupClass = settings.popupClass;
feature.data.popupContentHTML = "<div class='cloud'>";
feature.data.popupContentHTML += mark.properties.name;
feature.data.popupContentHTML += "</div>";
feature.data.overflow = 'hidden';
var marker = feature.createMarker();
+ marker.pk = feature.pk;
+ marker.icon_url = icon_url;
+ marker.icon_hover_url = icon_hover_url;
+ marker.category_name = mark.properties.category_name;
/* manage markers events */
var _popup = function() {
/* show the popup */
if (settings.current_popup != null) {
- settings.current_popup.hide();
+ settings.current_popup.hide();
}
if (feature.popup == null) {
feature.popup = feature.createPopup();
@@ -387,42 +731,94 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
settings.current_popup = feature.popup;
/* hide on click on the cloud */
- settings.current_popup.groupDiv.onclick = methods.hidePopup;
+ if (!settings.explicit_popup_hide){
+ settings.current_popup.groupDiv.onclick = methods.hidePopup;
+ }
settings.permalink.updateLink();
}
+ var _repan_popup = function(){
+ /* re-pan manually */
+
+ // no clean way to detect if all the element are ready
+ // lack of better...
+ setTimeout(
+ function(){
+ settings.current_popup.panIntoView();
+ }, 1000);
+ }
+
var markerClick = function (evt) {
settings.current_feature = feature;
+ methods.setCurrentPosition(feature.lonlat);
if ( settings.on_marker_click ) {
settings.on_marker_click(evt, mark, settings);
}
else
{
+ methods.center_on_feature();
+ $('#chimere_map_menu').hide();
// Default popup
if (feature.popup && feature.popup.visible()) {
if (settings.current_popup == feature.popup) {
feature.popup.hide();
if (!settings.simple){
- $('#panel').removeClass('panel-minified');
$('#detail').hide();
}
} else {
settings.current_popup.hide();
_popup();
methods.display_feature_detail(feature.pk);
+ _repan_popup();
}
} else {
_popup();
methods.display_feature_detail(feature.pk);
+ _repan_popup();
}
}
OpenLayers.Event.stop(evt);
};
var markerOver = function (evt) {
document.body.style.cursor='pointer';
+ var marker = evt.object;
+ if (marker.icon_hover_url){
+ marker.setUrl(marker.icon_hover_url);
+ }
+ px = settings.map.getPixelFromLonLat(marker.lonlat);
+ marker_hover = $('#marker_hover');
+ marker_hover_content = $('#marker_hover_content');
+ marker_hover_content.html(marker.category_name);
+ var map_position = $(settings.map.div).offset();
+
+ var width = marker_hover.width();
+ width += parseInt(marker_hover.css("padding-left"), 10)
+ + parseInt(marker_hover.css("padding-right"), 10)
+ + parseInt(marker_hover.css("margin-left"), 10)
+ + parseInt(marker_hover.css("margin-right"), 10)
+ + parseInt(marker_hover.css("borderLeftWidth"), 10)
+ + parseInt(marker_hover.css("borderRightWidth"), 10);
+ $('#marker_hover').css('left', px.x + map_position.left
+ - width/2 + 1);
+ var height = marker_hover.height();
+ height += parseInt(marker_hover.css("padding-top"), 10)
+ + parseInt(marker_hover.css("padding-bottom"), 10)
+ + parseInt(marker_hover.css("margin-top"), 10)
+ + parseInt(marker_hover.css("margin-bottom"), 10)
+ + parseInt(marker_hover.css("borderBottomWidth"), 10)
+ + parseInt(marker_hover.css("borderTopWidth"), 10);
+ $('#marker_hover').css('top', px.y + map_position.top
+ - height
+ - marker.icon.size.h);
+ $('#marker_hover').show();
OpenLayers.Event.stop(evt);
};
var markerOut = function (evt) {
document.body.style.cursor='auto';
+ var marker = evt.object;
+ if (marker.icon_hover_url){
+ marker.setUrl(marker.icon_url);
+ }
+ $('#marker_hover').hide();
OpenLayers.Event.stop(evt);
};
marker.events.register('click', feature, markerClick);
@@ -431,11 +827,25 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.layerMarkers.addMarker(marker);
/* show the item when designed in the permalink */
if (settings.display_feature == feature.pk){
+ settings.current_feature = feature;
_popup(feature);
methods.display_feature_detail(feature.pk);
- settings.map.setCenter(feature.lonlat, 16);
+ _repan_popup();
methods.loadCategories();
}
+
+ if (settings.enable_clustering){
+ // manage cluster layer
+ var point = new OpenLayers.Geometry.Point(lon, lat).transform(
+ EPSG_DISPLAY_PROJECTION,
+ EPSG_PROJECTION);
+ var feat = new OpenLayers.Feature.Vector(point);
+ feat.attributes = { icon: MEDIA_URL + mark.properties.icon_path,
+ name: "", label:"", pk:mark.properties.pk,
+ marker:marker};
+ settings.cluster_array.push(feat);
+ }
+
return feature;
},
@@ -462,6 +872,241 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.current_feature.geometry = linestring;
settings.layerVectors.addFeatures([settings.current_feature]);
},
+ routingInputChange: function(nominatim_id){
+ $('#map_menu_clear').show();
+ switch(nominatim_id){
+ case 'nominatim_start':
+ settings.routing_start = new OpenLayers.Marker(
+ new OpenLayers.LonLat(
+ $('#'+nominatim_id+'_lon').val(),
+ $('#'+nominatim_id+'_lat').val()
+ ).transform(EPSG_DISPLAY_PROJECTION,
+ settings.map.getProjectionObject()),
+ settings.icon_start);
+ settings.layerRouteMarker.addMarker(settings.routing_start);
+ break;
+ case 'nominatim_end':
+ settings.routing_end = new OpenLayers.Marker(
+ new OpenLayers.LonLat(
+ $('#'+nominatim_id+'_lon').val(),
+ $('#'+nominatim_id+'_lat').val()
+ ).transform(EPSG_DISPLAY_PROJECTION,
+ settings.map.getProjectionObject()),
+ settings.icon_end);
+ settings.layerRouteMarker.addMarker(settings.routing_end);
+ break;
+ default:
+ settings.routing_steps.push(new OpenLayers.Marker(
+ new OpenLayers.LonLat(
+ $('#'+nominatim_id+'_lon').val(),
+ $('#'+nominatim_id+'_lat').val()
+ ).transform(EPSG_DISPLAY_PROJECTION,
+ settings.map.getProjectionObject()),
+ settings.icon_step.clone()));
+ settings.layerRouteMarker.addMarker(
+ settings.routing_steps[settings.routing_steps.length-1]);
+ break;
+ }
+ if (settings.routing_end && settings.routing_start
+ && $('#search_routing').length) {
+ $('#search_routing').button('enable');
+ }
+ },
+
+ // set the start point for routing
+ routingFrom: function(){
+ $('#chimere_map_menu').hide();
+ settings.routing_panel_open();
+ $('#map_menu_clear').show();
+ settings.routing_start = new OpenLayers.Marker(
+ settings.current_position.clone(),
+ settings.icon_start);
+ settings.layerRouteMarker.addMarker(settings.routing_start);
+ if (nominatim_url){
+ helpers.updateNominatimName(settings.current_position.clone()
+ .transform(settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION),
+ 'start_label');
+ }
+ if (settings.routing_end) methods.route();
+ },
+ // add a step point for routing
+ routingAddStep: function(){
+ $('#chimere_map_menu').hide();
+ settings.routing_panel_open();
+ $('#map_menu_clear').show();
+ settings.routing_steps.push(new OpenLayers.Marker(
+ settings.current_position.clone(),
+ settings.icon_step.clone()));
+ settings.layerRouteMarker.addMarker(
+ settings.routing_steps[settings.routing_steps.length-1]);
+
+ if (nominatim_url){
+ var current_itinerary_number = methods.add_step_fx();
+ helpers.updateNominatimName(settings.current_position.clone()
+ .transform(settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION),
+ 'step_'+current_itinerary_number+'_label');
+ }
+ if (settings.routing_end && settings.routing_start) methods.route();
+ },
+
+ // add a step on the interface
+ add_step_fx: function (){
+ settings.itinerary_step_number += 1;
+ var cloned = $("#id_start_div").clone();
+ var c_id = 'step_' + settings.itinerary_step_number;
+ cloned.attr('id', 'id_'+c_id+'_div');
+ cloned.children("#nominatim_start_label").attr('id', c_id+'_label'
+ ).html('');
+ cloned.children('label[for="id_start"]').html(step_label
+ ).attr('for', "");
+ var id_suffixes = ['_lat', '_lon', ''];
+ for (idx=0;idx < id_suffixes.length;idx+=1){
+ var suffix = id_suffixes[idx];
+ val = c_id + suffix;
+ cloned.children("#nominatim_start"+suffix).attr('id', val
+ ).attr('name', val);
+ }
+ if (settings.itinerary_step_number == 1){
+ $("#nominatim_end_label").after(cloned);
+ } else {
+ $("#step_"+(settings.itinerary_step_number-1)+"_label"
+ ).after(cloned);
+ }
+ $('#' + c_id).val(default_nominatim_lbl);
+ $('#' + c_id).click(function(){
+ $('#'+c_id).val('');
+ });
+ $(".nominatim-widget").autocomplete(nominatim_widget_options);
+ return settings.itinerary_step_number;
+ },
+
+ // set the finish point for routing
+ routingTo: function(){
+ $('#chimere_map_menu').hide();
+ settings.routing_panel_open();
+ $('#map_menu_clear').show();
+ settings.routing_end = new OpenLayers.Marker(
+ settings.current_position.clone(),
+ settings.icon_end);
+ settings.layerRouteMarker.addMarker(settings.routing_end);
+ if (nominatim_url){
+ helpers.updateNominatimName(settings.current_position.clone()
+ .transform(settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION),
+ 'end_label');
+ }
+ if (settings.routing_start) methods.route();
+ },
+
+ // clear the current itinerary
+ routingClear: function(){
+ $('#nominatim_start_lon').val('');
+ $('#nominatim_start_lat').val('');
+ $('#nominatim_start_label').html('');
+ $('#chimere_start_label').html('');
+ $('#nominatim_end_lon').val('');
+ $('#nominatim_end_lat').val('');
+ $('#nominatim_end_label').html('');
+ $('#chimere_end_label').html('');
+ $('.nominatim-widget').val(default_nominatim_lbl);
+ $('#chimere_map_menu').hide();
+ $('#map_menu_clear').hide();
+ $('#chimere_itinerary').hide();
+ $('#chimere_itinerary_form').show();
+ $('div[id^="id_step_"]').remove();
+ if($('#search_routing').length) $('#search_routing').button('disable');
+ settings.layerRoute.removeAllFeatures();
+ settings.layerRouteMarker.clearMarkers();
+ settings.routing_start = null;
+ settings.routing_end = null;
+ settings.routing_steps = new Array();
+ settings.current_itinerary_number = 0;
+ settings.current_route_feature = null;
+ settings.permalink.updateLink();
+ },
+ // display a route
+ route: function(){
+ if($('#search_routing').length) $('#search_routing').button('enable');
+ if (!settings.routing_start || !settings.routing_end){
+ return;
+ }
+ var steps = [settings.routing_start.lonlat.clone()]
+ for (var i = 0; i < settings.routing_steps.length; i++) {
+ steps.push(settings.routing_steps[i].lonlat.clone());
+ }
+ steps.push(settings.routing_end.lonlat.clone());
+ // create the appropriate URL
+ var uri = extra_url + "route/"
+ var transport = $('input:radio[name=transport]:checked').val();
+ if(transport){
+ uri += transport + "/"
+ }
+ var speed = $('#id_speed option:selected').val();
+ if(speed){
+ uri += speed.split('_')[1] + "/"
+ }
+ for (var i = 0; i < steps.length; i++) {
+ var step = steps[i].transform(
+ settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION);
+ if (i > 0){
+ uri += '_';
+ }
+ uri += step.lon + '_' + step.lat;
+ }
+ settings.permalink.updateLink();
+ $.ajax({url: uri,
+ dataType: "json",
+ success: function (data) {
+ settings.layerRoute.removeAllFeatures();
+ for (var i = 0; i < data.features.length; i++) {
+ settings.current_route_feature =
+ methods.putRoute(data.features[i]);
+ }
+ settings.map.zoomToExtent(
+ settings.layerRoute.getDataExtent());
+ settings.map.zoomOut();
+ $('#chimere_total_label').html(
+ data.properties.total);
+ $('#chimere_itinerary_content').html(
+ data.properties.description);
+ $('#chimere_itinerary').show();
+ if(!settings.edition_type_is_route){
+ $('#chimere_itinerary_form').hide();
+ settings.routing_panel_open();
+ } else {
+ methods.updateRoutingInput();
+ }
+ },
+ error: function (data) {
+ settings.layerRoute.removeAllFeatures();
+ }
+ });
+
+ },
+ /*
+ Put a route on the map
+ */
+ putRoute: function(polyline) {
+ var point_array = new Array();
+ for (i=0; i<polyline.coordinates.length; i++){
+ var point = new OpenLayers.Geometry.Point(polyline.coordinates[i][0],
+ polyline.coordinates[i][1]);
+ point_array.push(point);
+ }
+ var linestring = new OpenLayers.Geometry.LineString(point_array);
+ linestring.transform(EPSG_DISPLAY_PROJECTION, settings.map.getProjectionObject());
+ current_route = new OpenLayers.Feature.Vector();
+ var style = OpenLayers.Util.extend({},
+ OpenLayers.Feature.Vector.style['default']);
+ style.strokeWidth = 3;
+ current_route.style = style;
+ current_route.geometry = linestring;
+ settings.layerRoute.addFeatures([current_route]);
+ return current_route;
+ },
display_feature_detail: function (pk) {
/*
* update current detail panel with an AJAX request
@@ -471,23 +1116,23 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
uri += "getDetail/" + pk;
var params = {}
if (settings.simple) { params["simple"] = 1; }
- $.ajax({url: uri,
- data: params,
+ $.ajax({url: uri,
+ data: params,
+ dataType: "html",
success: function (data) {
- if ( settings.display_feature_detail_fx ) {
- // Custom function ?
- settings.display_feature_detail_fx(data, settings);
+ if ( settings.display_feature_detail_fx ) {
+ // Custom function ?
+ settings.display_feature_detail_fx(data, settings);
+ }
+ else {
+ if (!settings.popupContentFull) {
+ $('#detail').html(data).show();
}
else {
- if (!settings.simple) {
- $('#panel').addClass('panel-minified');
- $('#detail').html(data).show();
- }
- else {
- settings.current_popup.setContentHTML("<div class='cloud'>" + data + "</div>");
- }
+ settings.current_popup.setContentHTML("<div class='cloud'>" + data + "</div>");
}
}
+ }
});
},
center_on_feature: function(feature) {
@@ -511,20 +1156,42 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
var uri = extra_url + "getDescriptionDetail/" + category_id;
$.ajax({url:uri,
success: function (data) {
- $("#category_detail").html(data).dialog();
- $("#category_detail").dialog( "option", "title",
+ $("#category_description").html(data).dialog();
+ $("#category_description").dialog( "option", "title",
$("#category_title").html());
}
});
},
+ /*
+ * Load the subcategory description if available
+ */
+ subcategory_detail: function(category_id){
+ var uri = extra_url + "getCategory/" + category_id;
+
+ $.ajax({url: uri,
+ dataType: "json",
+ success: function (data) {
+ if (!data.description){return}
+ $('#category_description').html(data.description);
+ $("#category_description").dialog("option", "title",
+ data.name);
+ $('#category_description').dialog('open');
+ },
+ error: function (data) {
+ // fail silently
+ }
+ });
+ },
toggle_category: function (id) {
// TODO make this id DOM element customisable
// Check if element is currently visible or not
var was_visible = $("#maincategory_" + id).is(":visible");
// Close all categories
- $("#categories ul.subcategories").hide();
+ if (settings.category_accordion){
+ $("#categories ul.subcategories").hide();
+ $("#categories img.toggle_category").attr("src", STATIC_URL + "chimere/img/plus.png");
+ }
// Put a minus image
- $("#categories img.toggle_category").attr("src", STATIC_URL + "chimere/img/plus.png");
if (!was_visible)
{
// Show the subcategories
@@ -533,6 +1200,12 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
$("#maincategory_img_" + id).attr("src", STATIC_URL + "chimere/img/minus.png");
settings.current_category = id;
}
+ if (!settings.category_accordion && was_visible)
+ {
+ $("#maincategory_" + id).toggle();
+ // Put a minus image
+ $("#maincategory_img_" + id).attr("src", STATIC_URL + "chimere/img/plus.png");
+ }
},
zoomToCurrentExtent: function(){
/* zoom to current extent */
@@ -564,17 +1237,13 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
},
/* put the marker on the map and update latitude and longitude fields */
putEditMarker: function (lonlat, zoom){
- if (settings.current_feature) {
- settings.layerMarkers.removeMarker(settings.current_feature);
+ if (settings.current_edit_feature) {
+ settings.layerMarkers.removeMarker(settings.current_edit_feature);
}
- settings.current_feature = new OpenLayers.Marker(lonlat.clone(),
+ settings.current_edit_feature = new OpenLayers.Marker(lonlat.clone(),
settings.default_icon);
- settings.layerMarkers.addMarker(settings.current_feature);
- lonlat = lonlat.clone().transform(settings.map.getProjectionObject(),
- EPSG_DISPLAY_PROJECTION);
- $('#id_point').val('POINT(' + lonlat.lon + ' ' + lonlat.lat + ')');
- $('#live_latitude').val(lonlat.lat);
- $('#live_longitude').val(lonlat.lon);
+ settings.layerMarkers.addMarker(settings.current_edit_feature);
+ methods.updateMarkerInput();
/* zoom to the point */
if (zoom){
var bounds = settings.layerMarkers.getDataExtent();
@@ -582,6 +1251,28 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
return;
},
+ updateMarkerInput: function(){
+ if (!settings.current_edit_feature) {
+ return;
+ }
+ lonlat = settings.current_edit_feature.lonlat.clone().transform(
+ settings.map.getProjectionObject(),
+ EPSG_DISPLAY_PROJECTION);
+ $('#id_point').val('POINT(' + lonlat.lon + ' ' + lonlat.lat + ')');
+ if($('#live_latitude').length){
+ $('#live_latitude').val(lonlat.lat);
+ $('#live_longitude').val(lonlat.lon);
+ }
+
+ },
+ updateRoutingInput: function(){
+ if (!settings.current_route_feature) {
+ return;
+ }
+ var current_geo = settings.current_route_feature.geometry.clone();
+ current_geo.transform(EPSG_PROJECTION, EPSG_DISPLAY_PROJECTION);
+ jQuery('#id_route').val(current_geo);
+ },
activateCurrentControl: function(){
if (settings.current_control){
settings.current_control.activate();
@@ -643,13 +1334,16 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
else { // Default behaviour
if (settings.current_popup)
{
- settings.current_popup.hide();
if (!settings.simple){
- $('#panel').removeClass('panel-minified');
$('#detail').hide();
}
+ if (settings.current_popup.visible()){
+ settings.current_popup.hide();
+ return true;
+ }
}
}
+ return false;
},
saveExtent: function(){
var extent_key = 'MAP_EXTENT';
@@ -785,8 +1479,23 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
if (vertices){
jQuery('#id_point').val(vertices);
}
+ },
+ updateNominatimName:function(lonlat, response_id){
+ $.ajax({
+ url: nominatim_url.substring(0, nominatim_url.length-6) + 'reverse',
+ data: {
+ format: "json",
+ lat:lonlat.lat,
+ lon:lonlat.lon
+ },
+ dataType:'json',
+ success: function (vals) {
+ $('#'+response_id).html(vals.display_name);
+ $('#nominatim_'+response_id).html(vals.display_name);
+ $('#chimere_'+response_id).html(vals.display_name);
+ }
+ });
}
-
}; // End of helpers
$.fn.chimere = function (thing) {
diff --git a/chimere/static/chimere/js/nominatim-widget.js b/chimere/static/chimere/js/nominatim-widget.js
new file mode 100644
index 0000000..80aa03a
--- /dev/null
+++ b/chimere/static/chimere/js/nominatim-widget.js
@@ -0,0 +1,45 @@
+var default_nominatim_lbl = '';
+var nominatim_widget_options = {
+ source: function (request, response) {
+ $.ajax({
+ url: nominatim_url,
+ data: {
+ format: "json",
+ q: request.term,
+ },
+ dataType:'json',
+ success: function ( data ) {
+ response ( $.map(data, function(item) {
+ return {
+ label: item.display_name,
+ value: item.display_name,
+ lat: item.lat,
+ lon: item.lon
+ }
+ }));
+
+ }
+ })
+ },
+ minLength: 6,
+ delay: 1000,
+ select: function ( event, ui ) {
+ $('#'+$(this).attr('id')+'_lat').val(ui.item.lat);
+ $('#'+$(this).attr('id')+'_lon').val(ui.item.lon);
+ $('#'+$(this).attr('id')+'_label').html(ui.item.label);
+ $('#chimere_'+$(this).attr('id').substring(10)+'_label').html(ui.item.label);
+ $('#'+$(this).attr('id')).val(default_nominatim_lbl);
+ jQuery("#map").chimere("routingInputChange", $(this).attr('id'));
+ return false;
+ },
+ open: function() {
+ $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+ },
+ close: function() {
+ $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ }
+}
+
+$(function(){
+ $(".nominatim-widget").autocomplete(nominatim_widget_options);
+});
diff --git a/chimere/static/chimere/js/routing-widget.js b/chimere/static/chimere/js/routing-widget.js
new file mode 100644
index 0000000..043c957
--- /dev/null
+++ b/chimere/static/chimere/js/routing-widget.js
@@ -0,0 +1,47 @@
+var step_label = "Step";
+var add_step = null;
+
+$(document).ready(function() {
+ var itinerary_step_number = 0;
+ $("#add_step_link").click(function(){
+ $('#main-map').chimere('add_step_fx');
+ return false;
+ });
+ $('#search_routing').button({'disabled':true});
+ $('#routing_button').click(function(){
+ $('#chimere_itinerary_panel').dialog('open');
+ });
+ $('#chimere_itinerary_modify').click(function(){
+ $('#chimere_itinerary').hide();
+ $('#chimere_itinerary_form').show();
+ });
+ $('#chimere_itinerary_new').click(function(){
+ $('#map').chimere('routingClear');
+ });
+ $('#search_routing').click(function(){
+ $('#map').chimere('route');
+ });
+
+ var detached_speeds = Array();
+ function filter_speed(transport){
+ $("#id_speed_div").show();
+ for (i=0;i<detached_speeds.length;i+=1){
+ $("#id_speed").append(detached_speeds[i]);
+ }
+ detached_speeds = Array();
+ $("#id_speed option").each(function(){
+ if(!$(this).val().match(transport) && $(this).val()){
+ detached_speeds.push($(this).detach());
+ }
+ });
+ $('#id_speed').val('');
+ if($("#id_speed option").length == 1){
+ $("#id_speed_div").hide();
+ }
+ }
+ $('#id_transport label').click(function(){
+ checked_item = $("#"+$(this).attr('for'));
+ filter_speed(checked_item.val());
+ });
+ filter_speed($('#id_transport :checked').val());
+});
diff --git a/chimere/static/chimere/js/utils.js b/chimere/static/chimere/js/utils.js
index 80ab91a..460e843 100644
--- a/chimere/static/chimere/js/utils.js
+++ b/chimere/static/chimere/js/utils.js
@@ -236,6 +236,12 @@ function has_index(index, arr) {
function get_or_set(v, d){
return typeof v === "undefined" ? d : v;}
+/* email validity */
+function isValidEmailAddress(emailAddress) {
+ var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
+ return pattern.test(emailAddress);
+};
+
/* remove multiple, leading or trailing spaces */
function trim(s) {
s = s.replace(/(^\s*)|(\s*$)/gi,"");
diff --git a/chimere/templates/base.html b/chimere/templates/base.html
index 2a50fc3..149cc71 100644
--- a/chimere/templates/base.html
+++ b/chimere/templates/base.html
@@ -7,25 +7,25 @@
{% endblock %}
</head>
<body {% block body_id %}{% endblock %} {% block body_class %}{% endblock %}>
- {% block extrabody %}
+{% block extrabody %}
+{% endblock %}
+{% block body %}
+<div id="header">
+ {% block header %}
{% endblock %}
- {% block body %}
- <div id="header">
- {% block header %}
- {% endblock %}
- </div>
- <div id="sidebar">
- {% block sidebar %}
- {% endblock %}
- </div>
- <div id="content">
- {% block content %}
- {% endblock %}
- </div>
- <div id="footer">
- {% block footer %}
- {% endblock %}
- </div>
+</div>
+<div id="sidebar">
+ {% block sidebar %}
{% endblock %}
+</div>
+<div id="content">
+ {% block content %}
+ {% endblock %}
+</div>
+<div id="footer">
+ {% block footer %}
+ {% endblock %}
+</div>
+{% endblock %}
</body>
</html>
diff --git a/chimere/templates/chimere/base.html b/chimere/templates/chimere/base.html
index 709ff9c..e4d514a 100644
--- a/chimere/templates/chimere/base.html
+++ b/chimere/templates/chimere/base.html
@@ -2,6 +2,7 @@
{% load chimere_tags i18n %}
{% block extra_head %}
<link rel="stylesheet" href="{{ STATIC_URL }}chimere/css/styles.css" />
+<link rel="stylesheet" href="{{ STATIC_URL }}chimere/css/print.css" media='print'/>
{% if css_area %}
<link rel="stylesheet" href="{{ css_area }}" />{% endif %}
{% endblock %}
diff --git a/chimere/templates/chimere/blocks/actions.html b/chimere/templates/chimere/blocks/actions.html
index 2806321..93debb0 100644
--- a/chimere/templates/chimere/blocks/actions.html
+++ b/chimere/templates/chimere/blocks/actions.html
@@ -2,7 +2,7 @@
<ul id='action' class='action'>
{% for action, subactions in actions %}
<li class='ui-widget ui-button ui-state-default ui-corner-all {% ifequal action.id action_selected.0 %} ui-state-active{% endifequal %}'>
- <a href='{{extra_url}}{{ action.path }}' onclick='jQuery("#map").chimere("saveExtent");'>{{ action.label }}</a>
+ <a href='{{ action.url }}' onclick='jQuery("#map").chimere("saveExtent");'>{{ action.label }}</a>
</li>
{% endfor %}
</ul>
@@ -11,7 +11,7 @@
{% ifequal action.id action_selected.0 %}{% if subactions %}
{% for subaction in subactions %}
<li class='ui-widget ui-button ui-state-default ui-corner-all{% ifequal subaction.id action_selected.1 %} ui-state-active{% endifequal %}'>
- <a href='{{extra_url}}{{ subaction.path }}' onclick='saveExtent();'>{{ subaction.label }}</a>
+ <a href='{{ subaction.url }}' onclick='saveExtent();'>{{ subaction.label }}</a>
</li>
{% endfor %}
{% endif %}{% endifequal %}
diff --git a/chimere/templates/chimere/blocks/alternate_multimedia.html b/chimere/templates/chimere/blocks/alternate_multimedia.html
new file mode 100644
index 0000000..ccee804
--- /dev/null
+++ b/chimere/templates/chimere/blocks/alternate_multimedia.html
@@ -0,0 +1,151 @@
+{% load i18n %}
+ <div id='multimedia_list'>
+ {% for formset in formsets %}
+ {{ formset.management_form }}
+ {% if formset.errors %}<div class='errors'>
+ {% for dict in formset.errors %}
+ {% for error in dict.values %}
+ {{ error }}
+ {% endfor %}
+ {% endfor %}
+ </div>{% endif %}
+ {% endfor %}
+ <ul id='multimedia_list_content'>
+ {% for formset in formsets %}
+ {% for frm in formset%}
+ {% if not forloop.last %}
+ <li class='{% if forloop.parentloop.counter0 %}picture{%else%}multimedia{%endif%}'>
+ {%if forloop.first %}{% for hidden in frm.hidden_fields %}
+ {{ hidden }}
+ {% endfor %}{% endif %}
+ {% for field in frm.visible_fields %}
+ {% if field.name == "name" %}
+ <span class='value'>{{ field.value }}</span>
+ <img class='remove-media' src='{{STATIC_URL}}chimere/img/close.png'/>
+ {% endif %}
+ <span class='hidden'>{{field}}</span>
+ {% endfor %}
+ </li>
+ {% endif %}
+ {% endfor %}
+ {% endfor %}
+ </ul>
+ <button id='add_multimedia_list'>{% trans "Add" %}</button>
+ </div>
+ <div id='multimedia_form' title="{% trans "Add multimedia from your computer or a website"%}">
+ <div class='notice'>{% trans "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu luctus ipsum. Donec vel urna a turpis consectetur consectetur. Vestibulum ut enim vel odio porta vulputate." %}
+ </div>
+ <div class="fieldWrapper">
+ <label for="multimedia_name">{% trans "Name" %}</label>
+ <input type='text' id='multimedia_name' name='multimedia_name'>
+ </div>
+ <div class="fieldWrapper">
+ <input type='radio' value='image' id='media_type_image' name="multimedia_type"> {% trans "Image" %}
+ <input type='radio' value='other' id='media_type_other' name="multimedia_type"> {% trans "Audio, video, other..." %}
+ </div>
+ <div class="fieldWrapper">
+ <label id="multimedia_file_label">{% trans "Download"%}</label> <input type='file' name='picture-0-picture' id='picture-0-picture' class='multimedia_file'>
+ <p class='notice'>{% trans "Or" %}</p>
+ <label for='multimedia_url'>{% trans "Web address"%}</label> <input type='text' name='multimedia_url' id='multimedia_url'>
+ </div>
+ <button id='add_media'>{% trans "Add" %}</button>
+ </div>
+ <script text='text/javascript'>
+ $(function(){
+ $(".remove-media").click(function(){
+ $(this).parents('li').remove();
+ });
+ var current_image_number = 0;
+ var current_multi_number = 0;
+ $("#multimedia_form").dialog({autoOpen:false,
+ modal:true,
+ resizable:false,
+ width:400,
+ height:250});
+ $('#add_multimedia_list').click(function(){
+ $("#multimedia_form").dialog("open");
+ return false;
+ });
+ $('#media_type_image').click(function(){
+ $("#multimedia_file_label").removeClass('disabled');
+ $("#multimedia_file").removeAttr('disabled');
+ });
+ $('#media_type_other').click(function(){
+ $("#multimedia_file_label").addClass('disabled');
+ $("#multimedia_file").attr('disabled', 'disabled');
+ });
+ $('#add_media').click(function(){
+ // test the validity
+ if (!$('#multimedia_name').val()){
+ alert("{% trans "You must provide a name." %}")
+ return false;
+ }
+ if (!$('#media_type_image:checked').val() &&
+ !$('#media_type_other:checked').val()){
+ alert("{% trans "You must choose a media type." %}")
+ return false;
+ }
+ if ($('#media_type_image:checked').val()
+ && !$("#picture-"+current_image_number+"-picture").val()
+ && !$("#multimedia_url").val()){
+ alert("{% trans "You must provide a file or a web address." %}")
+ return false;
+ }
+ if ($('#media_type_other:checked').val()
+ && !$("#multimedia_url").val()){
+ alert("{% trans "You must provide a web address." %}")
+ return false;
+ }
+ // recopy field in the main form
+ var prefix = '';
+ var contener = $("#multimedia_list_content")
+ content = '<li';
+ if ($('#media_type_image:checked').val()){
+ content += ' class="picture">';
+ prefix = 'picture-' + current_image_number;
+ } else {
+ content += ' class="multimedia">';
+ prefix = 'multimedia-' + current_multi_number;
+ content += '<input type="hidden" name="'+prefix+'-multimedia_type" value="{{auto_type_id}}" />\n';
+ content += '<input type="hidden" name="'+prefix+'-url" value="'+$("#multimedia_url").val()+'" />\n';
+ }
+ content += '<input type="hidden" name="'+prefix+'-id"/>\n';
+ content += '<input type="hidden" name="'+prefix+'-miniature" value="1"/>\n';
+ content += '<input type="hidden" name="'+prefix+'-DELETE" value=""/>\n';
+ content += '<input type="hidden" name="'+prefix+'-name" value="'+ $("#multimedia_name").val() +'"/>\n';
+ content += $("#multimedia_name").val();
+ content += " <img class='remove-media' src='{{STATIC_URL}}chimere/img/close.png'/>";
+ content += '</li>';
+ contener.append(content);
+ if ($('#media_type_image:checked').val()
+ && $("#picture-"+current_image_number+"-picture").val()){
+ // the file field cannot be recopied - security issue
+ // so it is moved
+ var file_item = $('#picture-'+current_image_number+'-picture');
+ var cloned = file_item.clone(true);
+ file_item.hide();
+ cloned.insertAfter(file_item);
+ file_item.appendTo($("#multimedia_list_content li").last());
+ current_image_number += 1;
+ cloned.attr('id', 'picture-'+current_image_number+'-picture');
+ cloned.attr('name', 'picture-'+current_image_number+'-picture');
+ cloned.val('');
+ $('#id_picture-TOTAL_FORMS').val(current_image_number + 1);
+ } else {
+ current_multi_number += 1;
+ $('#id_multimedia-TOTAL_FORMS').val(current_multi_number + 1);
+ }
+ // empty the fields
+ $("#multimedia_name").val('');
+ $("#multimedia_url").val('');
+ $("#media_type_image").prop('checked', '');
+ $("#media_type_other").prop('checked', '');
+ $("#multimedia_form").dialog("close");
+ $(".remove-media").click(function(){
+ $(this).parents('li').remove();
+ });
+ return false;
+ });
+ });
+ </script>
+
diff --git a/chimere/templates/chimere/blocks/categories.html b/chimere/templates/chimere/blocks/categories.html
index 5ba89fc..9c5ffd6 100644
--- a/chimere/templates/chimere/blocks/categories.html
+++ b/chimere/templates/chimere/blocks/categories.html
@@ -1,29 +1,29 @@
{% load i18n %}
-<ul id='ul_categories'>
- {% for category, lst_sub_categories in sub_categories %}
- <li>
- <img class="control_image toggle_category" id="maincategory_img_{{category.id}}" alt="control" src="{{ STATIC_URL }}chimere/img/{% if category.selected %}minus.png{% else %}plus.png{% endif %}" />
- <input type="checkbox" id='checkall_{{category.id}}'>
- {% trans category.name %}
- <img id="zoom_to_category_{{category.id}}" class="zoom_image zoom_to_category" alt='{% trans "Zoom to" %} {{category.name}}' src='{{ STATIC_URL }}chimere/img/zoom.png' />
- <ul class='subcategories' id='maincategory_{{category.id}}'{% if not category.selected %} style='display:None'{% endif %}>
- {% for sub_category in lst_sub_categories %}
- <li id='li_sub_{{sub_category.id}}'>
- <input type='checkbox' name='category_{{sub_category.id}}' id='category_{{sub_category.id}}'{% if sub_category.selected %} checked='checked'{% endif %}/>
- <label for='category_{{sub_category.id}}'>
- <img alt='{{ sub_category.name }}' src='{{ MEDIA_URL }}{{sub_category.icon.image}}'/>
- {% trans sub_category.name %}
- </label>
- <img id="zoom_to_subcategory_{{sub_category.id}}" class="zoom_image zoom_to_subcategory" alt='{% trans "Zoom to" %} {{sub_category.name}}' src='{{ STATIC_URL }}chimere/img/zoom.png' />
- </li>
- {% endfor %}
- {% if category.description %}
- <li><a href="#" onclick="$('#map').chimere('category_detail', {{category.id}});">{% trans "Tell me more..." %}</a></li>
- {% endif %}
- </ul>
- </li>
- {% endfor %}
- <li id='display_submited'>
- <input type='checkbox' name='display_submited' id='display_submited_check'/> {% trans "Display markers and routes waiting for validation"%}
- </li>
-</ul>
+ <ul id='ul_categories'>
+ {% for category, lst_sub_categories in sub_categories %}
+ <li>
+ <img class="control_image toggle_category" id="maincategory_img_{{category.id}}" alt="control" src="{{ STATIC_URL }}chimere/img/{% if category.selected %}minus.png{% else %}plus.png{% endif %}" />
+ <input type="checkbox" id='checkall_{{category.id}}'>
+ {% trans category.name %}
+ <img id="zoom_to_category_{{category.id}}" class="zoom_image zoom_to_category" alt='{% trans "Zoom to" %} {{category.name}}' src='{{ STATIC_URL }}chimere/img/zoom.png' />
+ <ul class='subcategories' id='maincategory_{{category.id}}'{% if not category.selected %} style='display:None'{% endif %}>
+ {% for sub_category in lst_sub_categories %}
+ <li id='li_sub_{{sub_category.id}}'>
+ <input type='checkbox' name='category_{{sub_category.id}}' id='category_{{sub_category.id}}'{% if sub_category.selected %} checked='checked'{% endif %}/>
+ <label for='category_{{sub_category.id}}'>
+ <img alt='{{ sub_category.name }}' src='{{ MEDIA_URL }}{{sub_category.icon.image}}'/>
+ {% trans sub_category.name %}
+ </label>
+ <img id="zoom_to_subcategory_{{sub_category.id}}" class="zoom_image zoom_to_subcategory" alt='{% trans "Zoom to" %} {{sub_category.name}}' src='{{ STATIC_URL }}chimere/img/zoom.png' />
+ </li>
+ {% endfor %}
+ {% if category.description %}
+ <li><a href="#" onclick="$('#map').chimere('category_detail', {{category.id}});">{% trans "Tell me more..." %}</a></li>
+ {% endif %}
+ </ul>
+ </li>
+ {% endfor %}
+ <li id='display_submited'>
+ <input type='checkbox' name='display_submited' id='display_submited_check'/> {% trans "Display markers and routes waiting for validation"%}
+ </li>
+ </ul>
diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html
index 4031ac4..29a1be4 100644
--- a/chimere/templates/chimere/blocks/head_chimere.html
+++ b/chimere/templates/chimere/blocks/head_chimere.html
@@ -2,6 +2,7 @@
<link rel="stylesheet" href="{{ css_url }}" />{% endfor %}
{% for js_url in OSM_JS_URLS %}
<script src="{{ js_url }}"></script>{% endfor %}
+{% if routing %}<script src="{{ STATIC_URL }}chimere/js/routing-widget.js"></script>{% endif %}
<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script>
<script type="text/javascript">
/* Global variables */
@@ -23,6 +24,7 @@
var area_name = '{{ area_name }}';{% endif %}
$(function() {$( ".draggable" ).draggable({handle:"h2"});});
+ var get_share_url = '{% url chimere:get-share-url %}';
</script>
<style>
.olControlPanPanel div {
diff --git a/chimere/templates/chimere/blocks/head_form.html b/chimere/templates/chimere/blocks/head_form.html
new file mode 100644
index 0000000..2485c1a
--- /dev/null
+++ b/chimere/templates/chimere/blocks/head_form.html
@@ -0,0 +1,2 @@
+
+<script src="{{ TINYMCE_URL }}tiny_mce.js"></script>
diff --git a/chimere/templates/chimere/blocks/map.html b/chimere/templates/chimere/blocks/map.html
index 886c50b..ff77593 100644
--- a/chimere/templates/chimere/blocks/map.html
+++ b/chimere/templates/chimere/blocks/map.html
@@ -9,6 +9,12 @@
<p>{% trans "Loading of the map in progress" %}</p>
</div>
</div>
+<div id="layer_selection">
+ <h4>{% trans "Display options" %}</h4>
+ <ul id='layer_list'>
+ <li class='head layer_map_type'>{% trans "Map type"%}</li>
+ </ul>
+</div>
<script type="text/javascript">
{% if single_category %}
$(function() {$('#panel').hide()});{% endif %}
@@ -17,6 +23,7 @@
chimere_init_options["map_layers"] = [{{map_layers|safe|escape}}];
chimere_init_options['permalink_label'] = '{%trans "Permalink"%}';
chimere_init_options['permalink_element'] = document.getElementById('permalink');
+ chimere_init_options['routing'] = {{routing}};
{% if dynamic_categories %}chimere_init_options['dynamic_categories'] = true;{% endif %}
{% if default_area %}
chimere_init_options["default_area"] = new Array({{default_area.upper_left_corner.x}}, {{default_area.upper_left_corner.y}}, {{default_area.lower_right_corner.x}}, {{default_area.lower_right_corner.y}});
@@ -24,11 +31,16 @@
{% if p_zoom %}chimere_init_options["zoom"] = {{ p_zoom }};{% endif %}
{% if p_lat %}chimere_init_options["lat"] = {{ p_lat }};{% endif %}
{% if p_lon %}chimere_init_options["lon"] = {{ p_lon }};{% endif %}
+ {% if p_routing_start_lon %}chimere_init_options["routing_start_lon"] = {{ p_routing_start_lon }};{% endif %}
+ {% if p_routing_start_lat %}chimere_init_options["routing_start_lat"] = {{ p_routing_start_lat }};{% endif %}
+ {% if p_routing_end_lon %}chimere_init_options["routing_end_lon"] = {{ p_routing_end_lon }};{% endif %}
+ {% if p_routing_end_lat %}chimere_init_options["routing_end_lat"] = {{ p_routing_end_lat }};{% endif %}
+ {% if p_routing_steps %}chimere_init_options["routing_steps_lonlat"] = [{{ p_routing_steps }}];{% endif %}
chimere_init_options["icon_offset"] = new OpenLayers.Pixel({{icon_offset_x}},
{{icon_offset_y}});
chimere_init_options["dynamic_categories"] = {{ dynamic_categories }};
{% if p_display_submited %}chimere_init_options["display_submited"] = {{ p_display_submited }};{% endif %}
- chimere_init_options["checked_categories"] = {{ p_checked_categories }};
+ chimere_init_options["checked_categories"] = [{% for cc in checked_categories %}{% if forloop.counter0 > 0 %}, {% endif %}{{cc}}{% endfor %}];
{% if area_id %}chimere_init_options['area_id'] = "{{area_id}}";{% endif %}
{% if p_current_feature %}
chimere_init_options["display_feature"] = {{ p_current_feature }};
@@ -43,5 +55,28 @@
{% if zoom %}
$('#maps').chimere('zoom', {'area':{{zoom}} });
{% endif %}
-</script>
+ // init layer selection
+ $(function() {
+ {% for layer_name, js, def in map_layers %}
+ $('#layer_list').append("<li><input type='radio' value='{{forloop.counter0}}' name='layer_type' id='layer_{{forloop.counter}}'{% if def %} checked='checked'{% endif %}><label for='layer_{{forloop.counter}}'>{{layer_name}}</li>");{% endfor %}
+ {% for subcat in subcat_layer %}
+ {% if not subcat.category %}
+ $('#layer_list').append("<li class='head layer_category'>{{subcat.name}}</li>");{% else %}
+ $('#layer_list').append("<li><input type='checkbox' name='layer_cat' value='category_{{subcat.pk}}' id='layer_cat_{{subcat.pk}}'{% if subcat.pk in checked_categories %} checked='checked'{% endif %}><label for='layer_cat_{{subcat.pk}}'>{{subcat.name}}</li>");{%endif%}{% endfor %}
+ $('#layer_selection h4').click(function(){
+ $('#layer_list').toggle();
+ });
+ $('#layer_list input[name=layer_type]').change(function(){
+ $('#{{map_id}}').chimere('changeMapLayer', $(this).val());
+ });
+ $('#layer_list input[name=layer_cat]').change(function(){
+ // the prop has to be called twice not to mess up with the triggered
+ // click
+ $('#'+$(this).val()).prop("checked", this.checked);
+ $('#'+$(this).val()).trigger('click');
+ $('#'+$(this).val()).prop("checked", this.checked);
+ });
+ });
+</script>
+<div id='marker_hover'><div id='marker_hover_content'></div></div>
diff --git a/chimere/templates/chimere/blocks/map_menu.html b/chimere/templates/chimere/blocks/map_menu.html
new file mode 100644
index 0000000..38fb4a8
--- /dev/null
+++ b/chimere/templates/chimere/blocks/map_menu.html
@@ -0,0 +1,14 @@
+{% load i18n %}
+<div id='chimere_map_menu'>
+ <ul>
+ {% if routing %}
+ <li id='map_menu_from' class='routing_item'>{% trans "From" context "routing" %}</li>
+ <li id='map_menu_step' class='routing_item'>{% trans "Add a step" context "routing" %}</li>
+ <li id='map_menu_to' class='routing_item'>{% trans "To" context "routing" %}</li>
+ <li id='map_menu_clear' class='routing_item'>{% trans "Clear the itinerary" context "routing" %}</li>
+ {% endif%}
+ <li id='map_menu_zoomin'>{% trans "Zoom in" %}</li>
+ <li id='map_menu_zoomout'>{% trans "Zoom out" %}</li>
+ <li id='map_menu_center'>{% trans "Center the map here" %}</li>
+ </ul>
+</div>
diff --git a/chimere/templates/chimere/blocks/multimedia_file.html b/chimere/templates/chimere/blocks/multimedia_file.html
index a1e9868..d659348 100644
--- a/chimere/templates/chimere/blocks/multimedia_file.html
+++ b/chimere/templates/chimere/blocks/multimedia_file.html
@@ -1,6 +1,6 @@
{% load i18n %}
{% if multimedia_item.picture %}
-<a rel="prettyPhoto" href='{{multimedia_item.picture.url}}' ><img alt="{{multimedia_item.name}}" src='{{multimedia_item.thumbnailfile.url}}'/></a>{% endif %}
+<a rel="prettyPhoto" href='{{multimedia_item.picture.url}}' ><img class='thumbnail' alt="{{multimedia_item.name}}" src='{{multimedia_item.thumbnailfile.url}}'/></a>{% endif %}
{% if multimedia_item.url %}
{% if multimedia_item.multimedia_type.iframe %}
diff --git a/chimere/templates/chimere/blocks/news.html b/chimere/templates/chimere/blocks/news.html
new file mode 100644
index 0000000..fa581f7
--- /dev/null
+++ b/chimere/templates/chimere/blocks/news.html
@@ -0,0 +1,53 @@
+{% load i18n sanitize chimere_tags %}
+{% if news_lst %}
+<a href='#' id='news_button' class='ui-widget ui-button ui-state-default ui-corner-all'>{% trans "News"%}</a>
+<script type='text/javascript'>
+function display_news(){$("#welcome").dialog({title:"{% trans "News"%}",
+ width:360});}
+$("#news_button").bind('click', display_welcome);
+$(function(){
+ $('#news div.media-player').jmeEmbedControls();
+ $('#news video').each(function(index){$(this).pause()});
+ $('#news audio').each(function(index){$(this).pause()});
+ {% if display %}display_news();{%endif%}
+});
+</script>
+<div id='news' style='display:none'>
+ <div id='detail_content'>
+ <div class='news'>
+ {% if news_lst %}
+ {% for news in news_lst %}
+ <div class='info'>
+ {% if news.title %}
+ <h3>{{news.title}} &ndash; {{ news.date }}</h3>
+ <p>{{news.content|safe}}</p>
+ {% else %}
+ <h3>{{news.name}} &ndash; {{ news.start_date }}{% if news.end_date %} - {{ news.end_date }}{% endif %}</h3>
+ {% if news.default_pictures or news.default_pictures or news.default_multimedia_items%}
+ <div class='small-gallery'>
+ {% for picture in news.default_pictures %}
+ {% multimedia_render picture %}
+ {%endfor%}
+ {% for multimedia_item in news.default_multimedia_items %}
+ {% multimedia_render multimedia_item %}
+ {%endfor%}
+ </div>
+ {%endif%}
+ {% if news.description %}
+ <p class='description'>{{news.description|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe}}</p>
+ {% endif %}
+ {% for property in news.getProperties %}
+ <p class='{{news.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4 table td th tr"|safe }}</p>
+ {% endfor %}
+ <p class='marker_link'><a href='{% get_tinyfied_url news area_name %}'>{% trans "See it on the map"%}</a></p>
+ {% endif %}
+ </div>
+ {%endfor%}
+ {% endif %}
+ <div class='info'>
+ </div>
+ </div>
+ </div>
+</div>
+{% endif %}
+
diff --git a/chimere/templates/chimere/blocks/routing.html b/chimere/templates/chimere/blocks/routing.html
new file mode 100644
index 0000000..15aee04
--- /dev/null
+++ b/chimere/templates/chimere/blocks/routing.html
@@ -0,0 +1,45 @@
+{% load i18n %}
+{# Don't forget to include routing-widget.js in your main template #}
+{% if routing %}
+{{itinerary_form.media}}
+<a href='#' id='routing_button' class='ui-widget ui-button ui-state-default ui-corner-all'>{% trans "Itinerary"%}</a>
+<div id='chimere_itinerary_panel'>
+ <div id='chimere_itinerary_form'>
+ {% for hidden in itinerary_form.hidden_fields %}
+ {{ hidden }}
+ {% endfor %}
+ {% for field in itinerary_form.visible_fields %}
+ <div id='{{field.auto_id}}_div'>
+ {% if field.label %}<label for='{{field.auto_id}}'>{{ field.label }}</label>{%endif%}
+ {{field}}</div>
+ {% endfor %}
+ <a id='add_step_link' href='#'>{% trans "Add a step" %}</a>
+ <span id='search_routing'>{% trans "Search" %}</span>
+ </div>
+ <div id='chimere_itinerary'>
+ <div id='chimere_itinerary_action'>
+ <ul class='action'>
+ <li class='ui-widget ui-button ui-state-default ui-corner-all'>
+ <a href='#' id='chimere_itinerary_modify'>{% trans "Modify" %}</a>
+ </li>
+ <li class='ui-widget ui-button ui-state-default ui-corner-all'>
+ <a href='#' id='chimere_itinerary_new'>{% trans "New search" %}</a>
+ </li>
+ </ul>
+ </div>
+ <div class='itinerary_label' id='total_label_div'>
+ <span id='chimere_total_label'></span>
+ </div>
+ <div class='itinerary_label'>
+ <span class='label'>{% trans "Start:"%}</span> <span id='chimere_start_label'></span></div>
+ <div id='chimere_itinerary_content'>
+ </div>
+ <div class='itinerary_label'>
+ <span class='label'>{% trans "Finish:"%}</span> <span id='chimere_end_label'></span>
+ </div>
+ </div>
+</div>
+<script language='javascript' type='text/javascript'>
+step_label = "{% trans "Step" %}";
+</script>
+{% endif%}
diff --git a/chimere/templates/chimere/blocks/share_bar.html b/chimere/templates/chimere/blocks/share_bar.html
new file mode 100644
index 0000000..e421a0f
--- /dev/null
+++ b/chimere/templates/chimere/blocks/share_bar.html
@@ -0,0 +1,39 @@
+{% load i18n %}
+ {% if share_networks %}
+ {% if simple %}{% trans "Share on"%}{% for share_network in share_networks %}
+ <a href='{{share_network.1}}'>{{share_network.0}}</a>
+ {% endfor %}{%else%}
+ <ul class='share'>
+ <li>{% trans "Share"%}</li>{% for share_network in share_networks %}
+ <li><a class='share_link share_id_{{share_network.0}}' href='{{share_network.1}}'><img src="{{share_network.2}}" alt="{{share_network.0}}"/></a></li>
+ {% endfor %}</ul>{% endif %}
+ <script language='text/javascript'>
+ $(function(){
+ $('.share_link').click(function(){
+ var href = $(this).attr('href');
+ var url = '{% url chimere:get-share-url %}';
+ var classes = $(this).attr('class').split(' ');
+ prefix = 'share_id_';
+ var share_id;
+ for (idx=0;idx<classes.length;idx++){
+ if(classes[idx].substring(0, prefix.length) == prefix){
+ var share_id = classes[idx].substring(prefix.length);
+ }
+ }
+ var params = $('#permalink a').attr('href').split('/');
+ url += share_id + params[params.length-1];
+ $.ajax({url: url,
+ dataType: "html",
+ success: function (url) {
+ window.open(url);
+ return false;
+ },
+ error: function(){
+ return false;
+ }
+ });
+ return false;
+ });
+ });
+ </script>
+ {% endif %}
diff --git a/chimere/templates/chimere/default_extra_page.html b/chimere/templates/chimere/default_extra_page.html
new file mode 100644
index 0000000..884d4cc
--- /dev/null
+++ b/chimere/templates/chimere/default_extra_page.html
@@ -0,0 +1,15 @@
+{% extends "chimere/base.html" %}
+{% load i18n chimere_tags %}
+{% block extra_head %}
+ {{ block.super }}
+ {{ form.media }}
+ {% head_jquery %}
+{% endblock %}
+{% block message_map %}{% endblock %}
+{% block message_edit%}{% endblock %}
+{% block content %}
+ {{ block.super }}
+ <h3>{{title}}</h3>
+ {{content|safe}}
+{% endblock %}
+
diff --git a/chimere/templates/chimere/detail.html b/chimere/templates/chimere/detail.html
index c195fbe..858a7ae 100644
--- a/chimere/templates/chimere/detail.html
+++ b/chimere/templates/chimere/detail.html
@@ -28,23 +28,11 @@
<a href='#' id='show_gallery_link'>{% trans "Show multimedia gallery" %}</a>
{% endif %}
</div>
- {% comment %}
- <a href='{% if marker.route %}{% url chimere:editroute-item area_name_slash|default_if_none:"" marker.route.pk "" %}{%else%}{% url chimere:edit-item area_name_slash|default_if_none:"" marker.pk "" %}{%endif%}'>
- {% trans "Submit a modification" %}
- </a>
- {% endcomment %}
{% if moderator_emails %}
<a href="mailto:?from={{moderator_emails}}&subject={% trans "Propose amendment" %}&body={% trans "I would like to propose an amendment for this item:"%} {{share_url}}">
{% trans "Propose amendment" %}
</a>{%endif%}
- {% if share_networks %}
- {% if simple %}{% trans "Share on"%}{% for share_network in share_networks %}
- <a href='{{share_network.1}}'>{{share_network.0}}</a>
- {% endfor %}{%else%}
- <ul id='share'>
- <li>{% trans "Share"%}</li>{% for share_network in share_networks %}
- <li><a href='{{share_network.1}}'><img src="{{share_network.2}}" alt="{{share_network.0}}"/></a></li>
- {% endfor %}</ul>{% endif %}
+ {% share_bar marker.name %}
{% endif %}
</div>
{% if marker.multimedia_items %}
diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html
index 66862cd..867437e 100644
--- a/chimere/templates/chimere/edit.html
+++ b/chimere/templates/chimere/edit.html
@@ -139,7 +139,8 @@
modal: true,
resizable:false,
height:110,
- autoOpen:false
+ autoOpen:false,
+ dialogClass:'alert-box'
}
);
$(".ui-dialog-titlebar").hide();
diff --git a/chimere/templates/chimere/main_map.html b/chimere/templates/chimere/main_map.html
index b87c31e..70e8850 100644
--- a/chimere/templates/chimere/main_map.html
+++ b/chimere/templates/chimere/main_map.html
@@ -18,18 +18,30 @@
</form>
</div>
+ <div id='category_description'>
+ </div>
+ <script type='text/javascript'>
+ $(function(){$('#category_description').dialog({'autoOpen':false});});
+ </script>
+
<div id='utils-div' class='ui-widget ui-state-default ui-corner-all'>
{% if areas_visible %}
{% display_areas %}
{% endif %}
+ {% routing %}
+ {% display_welcome %}
{% display_news news_visible %}
<div id='permalink' class='ui-widget ui-button ui-state-default ui-corner-all'></div>
</div>
<div id='detail' class='ui-widget ui-corner-all'></div>
- <div id='category_detail'></div>
{% endblock %}
{% block content %}
{{block.super}}
+ <div id='main-map'></div>
+<script type="text/javascript">
+ $("#main-map").show();
+</script>
+ {% map_menu %}
{% map 'main-map' %}
{% endblock %}
{% block footer %}
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index 854e0de..084904f 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -10,8 +10,10 @@ from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
from django.db.models import Q, Count
+from django.template import defaultfilters
+from django.utils.translation import ugettext as _
-from chimere.models import Marker, Area, News, SubCategory
+from chimere.models import Marker, Area, News, SubCategory, MultimediaType
from chimere.widgets import get_map_layers
log = getLogger(__name__)
@@ -38,13 +40,29 @@ def submited(context):
return {"edit_url":reverse('chimere:edit'),
"index_url":reverse('chimere:index')}
+def get_news(area=None):
+ # Retrieve news
+ news = News.objects.filter(available=True, is_front_page=True)
+ if area:
+ news = news.filter(Q(areas__isnull=True)|Q(areas__in=[area.pk]))
+ news = list(news.all())
+ if settings.CHIMERE_DAYS_BEFORE_EVENT:
+ # Retrieve active markers
+ today = date.today()
+ after = today + timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT)
+ q = Q(end_date__gte=today) | Q(end_date__isnull=True)
+ news += list(Marker.objects.filter(status='A',
+ start_date__lte=after, is_front_page=True).filter(q))
+ news.sort(key=lambda x:x.date, reverse=True)
+ return news
+
@register.inclusion_tag('chimere/blocks/welcome.html', takes_context=True)
-def display_news(context, display=False):
+def display_welcome(context, display=False, title=''):
"""
Welcome message and active news.
"""
- area = None
context_data = {'display':display}
+ area = None
if "area_name" in context:
try:
area = Area.objects.get(urn=context["area_name"])
@@ -52,19 +70,27 @@ def display_news(context, display=False):
context_data['welcome_message'] = area.welcome_message
except ObjectDoesNotExist:
pass
- # Retrieve news
- news = News.objects.filter(available=True)
- if area:
- news = news.filter(Q(areas__isnull=True)|Q(areas__in=[area.pk]))
- news = list(news.all())
- if settings.CHIMERE_DAYS_BEFORE_EVENT:
- # Retrieve active markers
- today = date.today()
- after = today + timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT)
- news += list(Marker.objects.filter(status='A', end_date__gte=today,
- start_date__lte=after))
- news.sort(key=lambda x:x.date, reverse=True)
- context_data['news_lst'] = news
+ context_data['news_lst'] = get_news(area)[:3]
+ context_data['STATIC_URL'] = settings.STATIC_URL
+ context_data['title'] = title if title \
+ else _(u"Welcome to the %s") % settings.PROJECT_NAME
+ return context_data
+
+@register.inclusion_tag('chimere/blocks/news.html', takes_context=True)
+def display_news(context, title=''):
+ """
+ All news.
+ """
+ area = None
+ if "area_name" in context:
+ try:
+ area = Area.objects.get(urn=context["area_name"])
+ context_data['area_name'] = context['area_name']
+ context_data['welcome_message'] = area.welcome_message
+ except ObjectDoesNotExist:
+ pass
+ context_data = {'news_lst': get_news(area),
+ 'STATIC_URL':settings.STATIC_URL}
return context_data
@register.inclusion_tag('chimere/blocks/head_jquery.html', takes_context=True)
@@ -113,9 +139,32 @@ def head_chimere(context):
"MAP_LAYER": settings.CHIMERE_DEFAULT_MAP_LAYER,
"OSM_CSS_URLS": settings.OSM_CSS_URLS,
"OSM_JS_URLS": settings.OSM_JS_URLS,
+ 'routing':settings.CHIMERE_ENABLE_ROUTING
+ }
+ return context_data
+
+@register.inclusion_tag('chimere/blocks/head_form.html')
+def head_form():
+ """
+ Manualy add forms header (necessary in case of ajax load)
+ """
+ context_data = {
+ "TINYMCE_URL": settings.TINYMCE_URL,
}
return context_data
+@register.inclusion_tag('chimere/blocks/map_menu.html', takes_context=True)
+def map_menu(context):
+ context_data = {'routing':settings.CHIMERE_ENABLE_ROUTING}
+ return context_data
+
+@register.inclusion_tag('chimere/blocks/routing.html', takes_context=True)
+def routing(context):
+ context_data = {'routing':settings.CHIMERE_ENABLE_ROUTING,
+ 'itinerary_form':context['itinerary_form']}
+ context_data['STATIC_URL'] = settings.STATIC_URL
+ return context_data
+
@register.inclusion_tag('chimere/blocks/map.html', takes_context=True)
def map(context, map_id='map'):
context_data = {'map_id':map_id,
@@ -124,12 +173,16 @@ def map(context, map_id='map'):
context_data['icon_offset_y'] = settings.CHIMERE_ICON_OFFSET_Y
context_data['icon_width'] = settings.CHIMERE_ICON_WIDTH
context_data['icon_height'] = settings.CHIMERE_ICON_HEIGHT
+ context_data['routing'] = 'true' if settings.CHIMERE_ENABLE_ROUTING \
+ else 'none'
area_name = context['area_name'] if 'area_name' in context else 'area_name'
map_layers, default_area = get_map_layers(area_name)
- context_data['map_layers'] = ", ".join(map_layers)
+ context_data['js_map_layers'] = ", ".join(
+ [js for name, js, default in map_layers])
+ context_data['map_layers'] = map_layers
if default_area:
context_data['selected_map_layer'] = default_area
- context_data['p_checked_categories'] = None
+ context_data['checked_categories'] = []
area = None
if area_name:
try:
@@ -141,7 +194,10 @@ def map(context, map_id='map'):
area = Area.objects.get(default=True)
except ObjectDoesNotExist:
pass
+ subcat_layer = SubCategory.objects.filter(as_layer=True, available=True)
if area:
+ if area.subcategories.count():
+ subcat_layer = subcat_layer.filter(areas__pk=area.pk)
context_data['area_id'] = area_name
if 'zoomout' in context and context['zoomout']:
context_data['zoom'] = "[%s]" % ",".join((
@@ -151,11 +207,10 @@ def map(context, map_id='map'):
unicode(area.lower_right_corner.y)))
if area.subcategories.filter(available=True).count() == 1:
context_data['single_category'] = True
- context_data['p_checked_categories'] = "[%d]" % \
- area.subcategories.all()[0].pk
+ context_data['checked_categories'] = area.subcategories.all()[0].pk
elif area.default_subcategories.count():
- context_data['p_checked_categories'] = unicode([subcategory.pk
- for subcategory in area.default_subcategories.all()])
+ context_data['checked_categories'] = [s.pk
+ for s in area.default_subcategories.all()]
if area.restrict_to_extent:
context_data['restricted_extent'] = """
var bounds = new OpenLayers.Bounds();
@@ -163,17 +218,20 @@ bounds.extend(new OpenLayers.LonLat(%f, %f));
bounds.extend(new OpenLayers.LonLat(%f, %f));
""" % (area.upper_left_corner.x, area.upper_left_corner.y,
area.lower_right_corner.x, area.lower_right_corner.y)
-
+ context_data['subcat_layer'], c_cat = [], None
+ for subcat in subcat_layer.order_by('category__order', 'category').all():
+ if subcat.category != c_cat:
+ context_data['subcat_layer'].append(subcat.category)
+ c_cat = subcat.category
+ context_data['subcat_layer'].append(subcat)
if SubCategory.objects.filter(available=True).count() <= 1:
context_data['single_category'] = True
- if not context_data['p_checked_categories']:
+ if not context_data['checked_categories']:
cat = ''
if SubCategory.objects.filter(available=True).count():
cat = unicode(SubCategory.objects.filter(available=True
).all()[0].pk)
- context_data['p_checked_categories'] = "[%s]" % cat
- if not context_data['p_checked_categories']:
- context_data['p_checked_categories'] = "[]"
+ context_data['checked_categories'] = cat
context_data['dynamic_categories'] = 'true' \
if area and area.dynamic_categories else 'false'
if 'request' not in context:
@@ -182,7 +240,8 @@ bounds.extend(new OpenLayers.LonLat(%f, %f));
# Default values
if request.GET:
for key in ('zoom', 'lon', 'lat', 'display_submited',
- 'current_feature'):
+ 'current_feature', 'routing_start_lon', 'routing_start_lat',
+ 'routing_end_lon', 'routing_end_lat', 'routing_steps'):
if key in request.GET and request.GET[key]:
context_data['p_'+key] = request.GET[key]
else:
@@ -190,7 +249,7 @@ bounds.extend(new OpenLayers.LonLat(%f, %f));
if 'checked_categories' in request.GET \
and request.GET['checked_categories']:
cats = request.GET['checked_categories'].split('_')
- context_data['p_checked_categories'] = "[%s]" % ",".join(cats)
+ context_data['checked_categories'] = cats
return context_data
@register.inclusion_tag('chimere/blocks/multimedia_file.html',
@@ -199,9 +258,24 @@ def multimedia_render(context, multimedia_file):
context['multimedia_item'] = multimedia_file
return context
+@register.inclusion_tag('chimere/blocks/alternate_multimedia.html')
+def alternate_multimedia(formset_multi, formset_picture):
+ return {'formsets':[formset_multi, formset_picture],
+ "STATIC_URL": settings.STATIC_URL,
+ 'auto_type_id':MultimediaType.objects.get(name='auto').pk}
+
@register.simple_tag
def get_tinyfied_url(marker, area_name=''):
if not marker or not hasattr(marker, 'get_absolute_url'):
return ""
url = marker.get_absolute_url(area_name)
return url
+
+@register.inclusion_tag('chimere/blocks/share_bar.html',
+ takes_context=True)
+def share_bar(context, name=''):
+ context['STATIC_URL'] = settings.STATIC_URL
+ context['name'] = name
+ context['share_networks'] = [(defaultfilters.slugify(name), url, icon)
+ for name, url, icon in settings.CHIMERE_SHARE_NETWORKS]
+ return context
diff --git a/chimere/urls.py b/chimere/urls.py
index a232382..d6ef9b9 100644
--- a/chimere/urls.py
+++ b/chimere/urls.py
@@ -51,9 +51,21 @@ if settings.CHIMERE_FEEDS:
LatestPOIsByZoneID(), name='feeds-areaid'),
)
+if settings.CHIMERE_ENABLE_ROUTING:
+ urlpatterns += patterns('chimere.views',
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?route/'\
+ r'(?P<transport>(%s))/((?P<speed>[0-9][0-9]*)/)?'
+ r'(?P<lon1>[-]?[0-9]+[.]?[0-9]*)_(?P<lat1>[-]?[0-9]+[.]?[0-9]*)_'\
+ r'(?P<lonlat_steps>([-]?[0-9]+[.]?[0-9]*_[-]?[0-9]+[.]?[0-9]*_)*)'\
+ r'(?P<lon2>[-]?[0-9]+[.]?[0-9]*)_(?P<lat2>[-]?[0-9]+[.]?[0-9]*)$' %
+ ('|'.join([key for key, lbl in settings.CHIMERE_ROUTING_TRANSPORT])),
+ 'route', name="route"),
+ )
+
urlpatterns += patterns('chimere.views',
url(r'^charte/?$', 'charte', name="charte"),
- url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?contact/?$', 'contactus', name="contact"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?contact/?$', 'contactus',
+ name="contact"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit/$', 'edit',
name="edit"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit/(?P<item_id>\w+)/(?P<submited>\w+)?$',
@@ -71,12 +83,18 @@ 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_-]+/)?getCategory/(?P<category_id>\d+)/?$',
+ 'getCategory', name="get_category"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?get-share-url/(?P<network>\w+)?$',
+ 'getShareUrl', name="get-share-url"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?ty/(?P<tiny_urn>\w+)$',
'redirectFromTinyURN', name="tiny"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?upload_file/((?P<category_id>\w+)/)?$',
'uploadFile', name='upload_file'),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?process_route_file/(?P<file_id>\d+)/$',
'processRouteFile', name='process_route_file'),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?dyn/(?P<page_id>\w+)/$',
+ 'extraPage', name='extra_page'),
# At the end, because it catches large
url(r'^(?P<area_name>[a-zA-Z0-9_-]+)?', 'index', name="index"),
)
diff --git a/chimere/views.py b/chimere/views.py
index a1f22c3..fdc4da0 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -35,21 +35,22 @@ from django.core.urlresolvers import reverse
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
+from django.template import loader, RequestContext, defaultfilters
from django.utils import simplejson
from django.utils.http import urlquote
from django.utils.translation import ugettext as _
from chimere.actions import actions
-from chimere.models import Category, SubCategory, PropertyModel, \
- Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile, \
- get_users_by_area
+from chimere.models import Category, SubCategory, PropertyModel, Page,\
+ Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile
from chimere.widgets import getMapJS, PointChooserWidget, \
RouteChooserWidget, AreaWidget
from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \
FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\
- notifyStaff, AreaForm
+ notifyStaff, AreaForm, RoutingForm, getStaffEmails
+
+from chimere.route import router
def get_base_uri(request):
base_uri = 'http://'
@@ -103,6 +104,31 @@ def get_base_response(area_name=""):
base_response_dct['JQUERY_CSS_URLS'] = settings.JQUERY_CSS_URLS
return base_response_dct, None
+def getShareUrl(request, area_name='', network=''):
+ """
+ Get a share url
+ """
+ data = getTinyfiedUrl(request, request.GET.urlencode(), area_name)
+ for name, url, img in settings.CHIMERE_SHARE_NETWORKS:
+ if defaultfilters.slugify(name) == network:
+ return HttpResponse(url % {'text':data['text'], 'url':data['url']})
+ return HttpResponse('')
+
+def getShareNetwork(request, area_name='', marker=None):
+ """
+ Get URLs to share items
+ """
+ parameters = ""
+ if marker:
+ parameters = u'current_feature=%d' % marker.pk
+ parameters += u"&checked_categories=%s" % "_".join([str(m.id) \
+ for m in marker.categories.all()])
+ net_dct = getTinyfiedUrl(request, parameters, area_name)
+ share_networks = []
+ for network in settings.CHIMERE_SHARE_NETWORKS:
+ share_networks.append((network[0], network[1] % net_dct, network[2]))
+ return share_networks, net_dct
+
def index(request, area_name=None, default_area=None, simple=False):
"""
Main page
@@ -123,15 +149,21 @@ def index(request, area_name=None, default_area=None, simple=False):
if request.GET and 'lat' in request.GET \
and 'lon' in request.GET:
zoomout = None
+ if settings.CHIMERE_ENABLE_ROUTING:
+ response_dct['itinerary_form'] = RoutingForm()
response_dct.update({
- 'actions':actions, 'action_selected':('view',),
+ 'actions':actions(response_dct['area_name']),
+ 'action_selected':('view',),
'error_message':'',
'news_visible': news_visible,
'areas_visible': settings.CHIMERE_DISPLAY_AREAS,
'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER,
'dynamic_categories':response_dct['dynamic_categories'],
- 'zoomout':zoomout
+ 'zoomout':zoomout,
+ 'contact_email':settings.CONTACT_EMAIL
})
+ response_dct['share_networks'], net_dct = \
+ getShareNetwork(request, response_dct['area_name'])
tpl = 'chimere/main_map.html'
if simple:
tpl = 'chimere/main_map_simple.html'
@@ -266,7 +298,7 @@ def edit(request, area_name="", item_id=None, submited=False):
if request.POST and request.POST.get('point'):
point_value = request.POST.get('point')
response_dct.update({
- 'actions':actions,
+ 'actions':actions(response_dct['area_name']),
'action_selected':('contribute', 'edit'),
'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER,
'form':form,
@@ -374,7 +406,7 @@ def editRoute(request, area_name="", item_id=None, submited=False):
if request.POST and request.POST.get('route'):
route_value = request.POST.get('route')
response_dct.update({
- 'actions':actions,
+ 'actions':actions(response_dct['area_name']),
'action_selected':('contribute', 'edit-route'),
'error_message':'',
'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER,
@@ -402,7 +434,8 @@ def submited(request, area_name="", action=""):
response_dct, redir = get_base_response(area_name)
if redir:
return redir
- response_dct.update({'actions':actions, 'action_selected':action,})
+ response_dct.update({'actions':actions(response_dct['area_name']),
+ 'action_selected':action,})
return render_to_response('chimere/submited.html', response_dct,
context_instance=RequestContext(request))
@@ -413,7 +446,8 @@ def charte(request, area_name=""):
response_dct, redir = get_base_response(area_name)
if redir:
return redir
- response_dct.update({'actions':actions, 'action_selected':('charte',)})
+ response_dct.update({'actions':actions(response_dct['area_name']),
+ 'action_selected':('charte',)})
return render_to_response('chimere/charte.html', response_dct,
context_instance=RequestContext(request))
@@ -441,11 +475,32 @@ def contactus(request, area_name=""):
response_dct, redir = get_base_response(area_name)
if redir:
return redir
- response_dct.update({'actions':actions, 'action_selected':('contact',),
+ response_dct.update({'actions':actions(response_dct['area_name']),
+ 'action_selected':('contact',),
'contact_form':form, 'message':msg})
return render_to_response('chimere/contactus.html', response_dct,
context_instance=RequestContext(request))
+def extraPage(request, area_name="", page_id=""):
+ """
+ Extra dynamic pages
+ """
+ try:
+ page = Page.objects.get(available=True, mnemonic=page_id)
+ except ObjectDoesNotExist:
+ return redirect(reverse('chimere:index'))
+ response_dct, redir = get_base_response(area_name)
+ if redir:
+ return redir
+ response_dct.update({'actions':actions(response_dct['area_name']),
+ 'action_selected':(page_id,),
+ 'content':page.content,
+ 'title':page.title})
+ tpl = page.template_path if page.template_path \
+ else 'chimere/default_extra_page.html'
+ return render_to_response(tpl, response_dct,
+ context_instance=RequestContext(request))
+
def getDetail(request, area_name, marker_id):
'''
Get the detail for a marker
@@ -462,15 +517,14 @@ def getDetail(request, area_name, marker_id):
if request.method == 'GET':
if 'simple' in request.GET and request.GET['simple']:
response_dct['simple'] = True
- parameters = u'current_feature=%s' % marker_id
- parameters += u"&checked_categories=%s" % "_".join([str(m.id) \
- for m in marker.categories.all()])
- net_dct = getTinyfiedUrl(request, parameters, response_dct['area_name'])
- share_networks = []
+ response_dct['share_networks'], net_dct = \
+ getShareNetwork(request, response_dct['area_name'], marker)
response_dct['share_url'] = net_dct['url']
- for network in settings.CHIMERE_SHARE_NETWORKS:
- share_networks.append((network[0], network[1] % net_dct, network[2]))
- response_dct['share_networks'] = share_networks
+ net_dct['to'] = ";".join(getStaffEmails())
+ if net_dct['to']:
+ net_dct["body"] = _(settings.CHIMERE_MODIF_EMAIL)
+ response_dct['modif_by_email'] = 'mailto:?to=%(to)s&subject='\
+ '%(text)s&body=%(body)s%(url)s' % net_dct
response_dct['dated'] = settings.CHIMERE_DAYS_BEFORE_EVENT \
and marker.start_date
return render_to_response('chimere/detail.html', response_dct,
@@ -592,6 +646,16 @@ def get_available_categories(request, area_name=None, area=None, status='A',
return render_to_response('chimere/blocks/categories.html', context_data,
context_instance=RequestContext(request))
+def getCategory(request, area_name='', category_id=0):
+ '''
+ Get the JSON for a category (mainly in order to get the description)
+ '''
+ try:
+ category = SubCategory.objects.get(pk=category_id)
+ except ObjectDoesNotExist:
+ return HttpResponse('no results')
+ return HttpResponse(category.getJSON())
+
def getTinyfiedUrl(request, parameters, area_name=''):
'''
Get the tinyfied version of parameters
@@ -632,6 +696,31 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''):
return redir
return HttpResponseRedirect(response_dct['extra_url'] + parameters)
+def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2,
+ transport='foot', speed=''):
+ '''
+ Get the JSON for a route
+ '''
+ try:
+ lon1, lat1 = float(lon1), float(lat1)
+ lon2, lat2 = float(lon2), float(lat2)
+ steps = [float(lonlat) for lonlat in lonlat_steps.split('_') if lonlat]
+ # regroup by 2
+ steps = [(steps[i*2], steps[i*2+1]) for i in range(len(steps)/2)]
+ except ValueError:
+ return HttpResponse('no results')
+ jsons, desc, total = router.route(lon1, lat1, lon2, lat2, steps=steps,
+ transport=transport, speed=speed)
+ if not jsons:
+ return HttpResponse('no results')
+ jsonencoder = simplejson.JSONEncoder()
+ total = jsonencoder.encode(total)
+ desc = jsonencoder.encode(desc)
+ data = '{"properties":{"total":%s, "description":%s}, '\
+ '"type": "FeatureCollection", "features":[%s]}' % (total, desc,
+ ",".join(jsons))
+ return HttpResponse(data)
+
def rss(request, area_name=''):
'''
Redirect to RSS subscription page
@@ -639,7 +728,8 @@ def rss(request, area_name=''):
response_dct, redir = get_base_response(area_name)
if redir:
return redir
- response_dct.update({'actions':actions, 'action_selected':('rss',),
+ response_dct.update({'actions':actions(response_dct['area_name']),
+ 'action_selected':('rss',),
'category_rss_feed':'',})
# If the form has been submited
if request.method == "POST":
diff --git a/chimere/widgets.py b/chimere/widgets.py
index e107237..41b2f92 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -27,6 +27,9 @@ from django.contrib.gis.db import models
from django.contrib.gis.geos import fromstr
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
+from django.forms.widgets import RadioInput, RadioFieldRenderer
+from django.utils.encoding import force_unicode
+from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
@@ -68,18 +71,23 @@ def get_map_layers(area_name=''):
pass
map_layers, default = [], None
if area and area.layers.count():
- map_layers = [layer.layer_code
+ map_layers = [[layer.name, layer.layer_code, False]
for layer in area.layers.order_by('arealayers__order').all()]
def_layer = area.layers.filter(arealayers__default=True)
if def_layer.count():
def_layer = def_layer.all()[0]
for order, map_layer in enumerate(map_layers):
- if map_layer == def_layer.layer_code:
+ if map_layer[1] == def_layer.layer_code:
default = order
+ map_layers[order][2] = True
+ else:
+ map_layers[0][2] = True
elif settings.CHIMERE_DEFAULT_MAP_LAYER:
- map_layers = [settings.CHIMERE_DEFAULT_MAP_LAYER]
+ map_layers = [(_(u"Default layer"), settings.CHIMERE_DEFAULT_MAP_LAYER,
+ True)]
else:
- map_layers = ["new OpenLayers.Layer.OSM.Mapnik('Mapnik')"]
+ map_layers = [(u"Mapnik", "new OpenLayers.Layer.OSM.Mapnik('Mapnik')",
+ True)]
return map_layers, default
class ChosenSelectWidget(forms.Select):
@@ -101,6 +109,41 @@ class ChosenSelectWidget(forms.Select):
u"</script>\n" % kwargs['attrs']['id']
return mark_safe(rendered)
+"""
+JQuery UI button select widget.
+"""
+class ButtonRadioInput(RadioInput):
+ def render(self, name=None, value=None, attrs=None, choices=()):
+ name = name or self.name
+ value = value or self.value
+ attrs = attrs or self.attrs
+ if 'id' in self.attrs:
+ label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
+ else:
+ label_for = ''
+ choice_label = conditional_escape(force_unicode(self.choice_label))
+ return mark_safe(u'%s <label%s>%s</label>' % (self.tag(), label_for,
+ choice_label))
+class ButtonRadioFieldRenderer(RadioFieldRenderer):
+ def __iter__(self):
+ for i, choice in enumerate(self.choices):
+ yield ButtonRadioInput(self.name, self.value, self.attrs.copy(),
+ choice, i)
+ def render(self):
+ return mark_safe(u'\n'.join([force_unicode(w) for w in self]))
+class ButtonSelectWidget(forms.RadioSelect):
+ def __init__(self, *args, **kwargs):
+ self.renderer = ButtonRadioFieldRenderer
+ super(ButtonSelectWidget, self).__init__(*args, **kwargs)
+
+ def render(self, *args, **kwargs):
+ rendered = "<div id='%s'>\n" % kwargs['attrs']['id']
+ rendered += super(ButtonSelectWidget, self).render(*args, **kwargs)
+ rendered += u"\n<script type='text/javascript'>\n"\
+ u" $('#%s').buttonset();\n"\
+ u"</script>\n</div>\n" % kwargs['attrs']['id']
+ return mark_safe(rendered)
+
class TextareaWidgetBase(forms.Textarea):
"""
Manage the edition of a text using TinyMCE
@@ -113,7 +156,46 @@ class TextareaWidgetBase(forms.Textarea):
else:
kwargs['attrs']['class'] += ' '
kwargs['attrs']['class'] += 'mceEditor'
- rendered = super(TextareaWidgetBase, self).render(*args, **kwargs)
+ rendered = super(TextareaWidget, self).render(*args, **kwargs)
+ rendered += u"""<script type='text/javascript'>
+tinyMCE.init({
+ mode : "textareas",
+ theme : "advanced",
+ relative_urls : false,
+ editor_selector : "mceEditor",
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,hr,separator,link",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : ""
+});
+</script>
+"""
+ return mark_safe(rendered)
+
+class FullTextareaWidget(TextareaWidgetBase):
+ """
+ Manage the edition of a text using TinyMCE
+ """
+ class Media:
+ js = ["%stiny_mce.js" % settings.TINYMCE_URL]
+
+ def render(self, *args, **kwargs):
+ if 'attrs' not in kwargs:
+ kwargs['attrs'] = {}
+ if 'class' not in kwargs['attrs']:
+ kwargs['attrs']['class'] = ''
+ else:
+ kwargs['attrs']['class'] += ' '
+ kwargs['attrs']['class'] += 'mceEditor'
+ rendered = super(FullTextareaWidget, self).render(*args, **kwargs)
+ rendered += u"""<script type='text/javascript'>
+tinyMCE.init({
+ mode : "textareas",
+ theme : "advanced",
+ relative_urls : false,
+ editor_selector : "mceEditor"
+});
+</script>
+"""
return mark_safe(rendered)
class TextareaWidget(TextareaWidgetBase):
@@ -142,6 +224,27 @@ class DatePickerWidget(forms.TextInput):
u"</script>\n" % kwargs['attrs']['id']
return mark_safe(rendered)
+class NominatimWidget(forms.TextInput):
+ class Media:
+ js = ["%schimere/js/nominatim-widget.js" % settings.STATIC_URL]
+ def render(self, name, value, attrs=None, area_name=''):
+ tpl = u"""
+<input type='hidden' name='nominatim_%(id)s_lat' id='nominatim_%(id)s_lat'/>
+<input type='hidden' name='nominatim_%(id)s_lon' id='nominatim_%(id)s_lon'/>
+<input type='text' class='nominatim-widget' name='nominatim_%(id)s' id='nominatim_%(id)s' value=""/>
+<label class='nominatim-label' id='nominatim_%(id)s_label'>&nbsp;</label>
+<script type='text/javascript'>
+var default_nominatim_lbl = "%(label)s";
+var nominatim_url = "%(nominatim_url)s";
+$("#nominatim_%(id)s").val(default_nominatim_lbl);
+$("#nominatim_%(id)s").click(function(){
+ $("#nominatim_%(id)s").val('');
+});
+</script>
+""" % {'id':name, 'nominatim_url':settings.NOMINATIM_URL,
+ 'label':_(u"Street, City, Country")}
+ return mark_safe(tpl)
+
class PointChooserWidget(forms.TextInput):
"""
Manage the edition of point on a map
@@ -173,6 +276,7 @@ class PointChooserWidget(forms.TextInput):
else:
value = None
map_layers, default_area = get_map_layers(area_name)
+ map_layers = [js for name, js, default in map_layers]
js = """
OpenLayers.ImgPath = '%schimere/img/';
var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s');
@@ -252,6 +356,7 @@ class RouteChooserWidget(forms.TextInput):
'''
tpl = getMapJS(area_name)
map_layers, default_area = get_map_layers(area_name)
+ map_layers = [js for name, js, default in map_layers]
js = """
var extra_url = "%s";
OpenLayers.ImgPath = '%schimere/img/';
diff --git a/example_project/locale/fr/LC_MESSAGES/django.po b/example_project/locale/fr/LC_MESSAGES/django.po
new file mode 100644
index 0000000..ac36871
--- /dev/null
+++ b/example_project/locale/fr/LC_MESSAGES/django.po
@@ -0,0 +1,47 @@
+# Chimère
+# Copyright (C) 2012
+# This file is distributed under the same license as the Chimère package.
+# Étienne Loks <etienne.loks@peacefrogs.net>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-08-26 17:11+0200\n"
+"Last-Translator: Étienne Loks <etienne.loks@peacefrogs.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: settings.py:79
+msgid "Foot"
+msgstr "Marche"
+
+#: settings.py:80
+msgid "Bicycle"
+msgstr "À vélo"
+
+#: settings.py:81
+msgid "Motorcar"
+msgstr "En voiture"
+
+#: settings.py:84
+msgid "You are walking slowly"
+msgstr "Vous marchez lentement"
+
+#: settings.py:85
+msgid "You are walking pretty quickly"
+msgstr "Vous marchez plutôt vite"
+
+#: settings.py:86
+msgid "You are riding pretty slowly"
+msgstr "Vous conduisez plutôt lentement"
+
+#: settings.py:87
+msgid "You are riding pretty quickly"
+msgstr "Vous conduisez plutôt rapidement"
+
+#: settings.py:106
+msgid "Hello, I would like to propose you a modification about this item: "
+msgstr "Bonjour, je voudrais vous proposer une modification à propos de cet élément : "
diff --git a/example_project/settings.py b/example_project/settings.py
index e6e0430..45c7af2 100644
--- a/example_project/settings.py
+++ b/example_project/settings.py
@@ -5,6 +5,7 @@
# overload all theses settings in your local_settings.py file
import os
+_ = lambda s: s
DEBUG = False
TEMPLATE_DEBUG = DEBUG
@@ -14,6 +15,7 @@ PROJECT_NAME = u'Chimère'
ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) + "/"
EMAIL_HOST = 'localhost'
+CONTACT_EMAIL = ''
STATIC_URL = '/static/'
STATIC_ROOT = ROOT_PATH + 'static/'
@@ -72,10 +74,37 @@ CHIMERE_OSM_PASSWORD = 'test'
# encoding for shapefile import
CHIMERE_SHAPEFILE_ENCODING = 'ISO-8859-1'
+# enable routing in Chimère
+CHIMERE_ENABLE_ROUTING = False
+
+CHIMERE_ROUTING_TRANSPORT = (('foot', _(u"Foot")),
+ ('bicycle', _(u"Bicycle")),
+ ('motorcar', _(u"Motorcar")),
+ )
+
+CHIMERE_ROUTING_SPEEDS = {'foot':((3, _(u"You are walking slowly")),
+ (6, _(u"You are walking pretty quickly")),),
+ 'bicycle':((16, _(u"You are riding pretty slowly")),
+ (22, _(u"You are riding pretty quickly")),)
+ }
+
+# available routing engine: 'routino'
+CHIMERE_ROUTING_ENGINE = {
+ 'ENGINE': 'routino',
+ 'PATH': '/usr/local/src/web/bin/router',
+ 'DB_PATH': '/var/local/routino/',
+}
+
+NOMINATIM_URL = 'http://nominatim.openstreetmap.org/search'
+
# thumbnail
CHIMERE_THUMBS_SCALE_HEIGHT=250
CHIMERE_THUMBS_SCALE_WIDTH=None
+# length of short description
+CHIMERE_SHORT_DESC_LENGTH = 400
+
+CHIMERE_MODIF_EMAIL = _(u"""Hello, I would like to propose you a modification about this item: """)
CHIMERE_CSV_ENCODING = 'ISO-8859-1'
ADMINS = (