summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/actions.py39
-rw-r--r--chimere/admin.py26
-rw-r--r--chimere/forms.py90
-rw-r--r--chimere/locale/fr/LC_MESSAGES/django.po631
-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)30
-rw-r--r--chimere/migrations/0045_auto__add_field_subcategory_routing_warn__add_field_subcategory_routin.py275
-rw-r--r--chimere/migrations/0046_auto__del_field_subcategory_routing_available.py (renamed from chimere/migrations/0038_osm_import_filtr.py)61
-rw-r--r--chimere/migrations/0047_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py (renamed from chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py)6
-rw-r--r--chimere/migrations/0048_auto__add_propertymodelchoice__add_multimediaextension__add_page__chg_.py368
-rw-r--r--chimere/migrations/0049_auto__chg_field_multimediafile_multimedia_type.py (renamed from chimere/migrations/0039_auto__add_multimediaextension__chg_field_multimediafile_multimedia_typ.py)36
-rw-r--r--chimere/models.py169
-rw-r--r--chimere/route.py120
-rw-r--r--chimere/static/chimere/css/admin.css6
-rw-r--r--chimere/static/chimere/css/print.css40
-rw-r--r--chimere/static/chimere/css/styles.css246
-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 -> 1211 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/clustering.js278
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js967
-rw-r--r--chimere/static/chimere/js/nominatim-widget.js46
-rw-r--r--chimere/static/chimere/js/routing-widget.js47
-rw-r--r--chimere/static/chimere/js/utils.js6
-rw-r--r--chimere/tasks.py2
-rw-r--r--chimere/templates/base.html38
-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.html37
-rw-r--r--chimere/templates/chimere/blocks/categories.html6
-rw-r--r--chimere/templates/chimere/blocks/head_chimere.html13
-rw-r--r--chimere/templates/chimere/blocks/head_form.html2
-rw-r--r--chimere/templates/chimere/blocks/head_jme.html12
-rw-r--r--chimere/templates/chimere/blocks/map.html41
-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.html48
-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.html9
-rw-r--r--chimere/templates/chimere/edit.html5
-rw-r--r--chimere/templates/chimere/main_map.html20
-rw-r--r--chimere/templatetags/chimere_tags.py135
-rw-r--r--chimere/tests.py26
-rw-r--r--chimere/urls.py22
-rw-r--r--chimere/utils.py13
-rw-r--r--chimere/views.py207
-rw-r--r--chimere/widgets.py109
-rw-r--r--example_project/locale/fr/LC_MESSAGES/django.po47
-rw-r--r--example_project/settings.py33
77 files changed, 6082 insertions, 592 deletions
diff --git a/chimere/actions.py b/chimere/actions.py
index 0363d54..8ef5338 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 + '/' if area_name else ''] + 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 0f17d30..3c24de0 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -37,15 +37,15 @@ except ImportError:
pass
from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
- NewsAdminForm, CategoryAdminForm, ImporterAdminForm, \
- PictureFileAdminForm, MultimediaFileAdminForm, OSMForm
+ NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \
+ 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 disable(modeladmin, request, queryset):
for item in queryset:
@@ -184,9 +184,9 @@ class MarkerAdmin(admin.ModelAdmin):
actions = [validate, disable, managed_modified, 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', 'route']
+ 'submiter_name', 'ref_item', 'modified_since_import', 'route']
form = MarkerAdminForm
fieldsets = ((None, {
'fields': ['point', 'name', 'status', 'categories',
@@ -382,11 +382,17 @@ class ImporterAdmin(admin.ModelAdmin):
form = ImporterAdminForm
list_display = ('display_categories', 'default_name', 'importer_type',
'source', 'state', 'filtr')
- list_filter = ('importer_type',)
+ list_filter = ('importer_type', 'categories')
readonly_fields = ('state',)
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 PropertyModelAdmin(admin.ModelAdmin):
list_display = ('name', 'order', 'available')
@@ -416,8 +422,16 @@ class ColorThemeAdmin(admin.ModelAdmin):
class IconAdmin(admin.ModelAdmin):
exclude = ['height', 'width']
+ list_display = ['name']
+
+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)
diff --git a/chimere/forms.py b/chimere/forms.py
index 0d4bba6..1d403c8 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -33,10 +33,11 @@ from django.core.mail import EmailMessage, BadHeaderError
from chimere.models import Marker, Route, PropertyModel, Property, Area,\
News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
- PictureFile, Importer, IMPORTER_CHOICES, IFRAME_LINKS, MultimediaExtension
+ PictureFile, Importer, PropertyModelChoice, IFRAME_LINKS, \
+ MultimediaExtension, Page, IMPORTER_CHOICES
from chimere.widgets import AreaField, PointField, TextareaWidget, \
- ImportFiltrWidget, TextareaAdminWidget, DatePickerWidget, \
- ImporterChoicesWidget, RE_XAPI
+ FullTextareaWidget, DatePickerWidget, ButtonSelectWidget, NominatimWidget, \
+ TextareaAdminWidget, ImportFiltrWidget, ImporterChoicesWidget, RE_XAPI
from datetime import timedelta, datetime, tzinfo
@@ -54,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
@@ -90,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 OSMForm(forms.Form):
"""
OSM export form
@@ -163,6 +183,9 @@ class CategoryAdminForm(forms.ModelForm):
js = list(settings.JQUERY_JS_URLS) + [
'%schimere/js/menu-sort.js' % settings.STATIC_URL,
]
+ css = {
+ 'all': ('chimere/css/admin.css',)
+ }
class Meta:
model = Category
@@ -246,16 +269,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
"""
@@ -562,3 +601,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, widget=forms.RadioSelect)
+
+ 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 64ed511..d15aa9a 100644
--- a/chimere/locale/fr/LC_MESSAGES/django.po
+++ b/chimere/locale/fr/LC_MESSAGES/django.po
@@ -7,42 +7,42 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-12-08 00:17+0100\n"
+"POT-Creation-Date: 2012-12-13 15:52+0100\n"
"PO-Revision-Date: 2010-03-20 20:00+0100\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:649
+#: __init__.py:8 models.py:768
msgid "Multimedia files"
msgstr "Fichiers multimedias"
-#: __init__.py:9 models.py:721
+#: __init__.py:9 models.py:840
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"
@@ -149,50 +149,50 @@ 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:77
+#: forms.py:83
msgid "New submission for"
msgstr "Nouvelle proposition pour"
-#: forms.py:78
+#: 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:80
+#: forms.py:86
msgid "To valid, precise or unvalid this item: "
msgstr "Pour valider, préciser ou rejeter cet élément : "
-#: forms.py:90
+#: forms.py:96
msgid "Email (optional)"
msgstr "Courriel (optionnel) "
-#: forms.py:91
+#: forms.py:97
msgid "Object"
msgstr "Objet"
-#: forms.py:97
+#: forms.py:117
msgid "OSM user"
msgstr "Utilisateur OSM"
-#: forms.py:98 models.py:1338
+#: forms.py:118 models.py:1457
msgid "Password"
msgstr "Mot de passe"
-#: forms.py:102
+#: forms.py:122
msgid "API"
msgstr "API"
-#: forms.py:105
+#: forms.py:125
#, python-format
msgid "Test API - %s"
msgstr "API de test - %s"
-#: forms.py:107
+#: forms.py:127
#, python-format
msgid "Main API - %s"
msgstr "API principale - %s"
-#: forms.py:136 forms.py:140
+#: forms.py:156 forms.py:160
msgid ""
"For OSM import you must be provide a filter. Select an area and node/way "
"filter."
@@ -200,469 +200,514 @@ msgstr ""
"Pour les imports OSM vous devez fournir un filtre. Sélectionnez une zone et "
"un filtre sur les nœuds/routes."
-#: forms.py:144
+#: forms.py:164
msgid "Shapefiles must be provided in a zipped archive."
msgstr ""
"Les fichiers Shapefiles doivent être fournis regroupés dans une archive zip."
-#: forms.py:148
+#: forms.py:168
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:153
+#: forms.py:173
msgid "You have to set \"source\" or \"source file\"."
msgstr "Vous devez spécifier le champ « Source » ou « Fichier source »."
-#: forms.py:211
+#: forms.py:234
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:215
+#: forms.py:238
msgid "End date can't be before start date"
msgstr "La date de fin ne peut pas être antérieure à la date de début"
-#: forms.py:225
+#: forms.py:248
msgid "This field is mandatory for the selected categories"
msgstr "Ce champ est obligatoire pour les catégories sélectionnées"
-#: forms.py:460
+#: forms.py:499
msgid "File"
msgstr "Fichier"
-#: forms.py:466
+#: forms.py:505
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:471 models.py:51 models.py:106 models.py:127 models.py:140
-#: models.py:155 models.py:273 models.py:583 models.py:639 models.py:698
-#: models.py:814 models.py:1143 models.py:1155 models.py:1328 utils.py:469
-#: templates/admin/chimere/managed_modified.html:23
+#: forms.py:510 models.py:53 models.py:101 models.py:163 models.py:184
+#: models.py:197 models.py:212 models.py:364 models.py:702 models.py:758
+#: models.py:817 models.py:933 models.py:1262 models.py:1274 models.py:1447
+#: utils.py:470 templates/admin/chimere/managed_modified.html:23
#: templates/chimere/edit.html:39 templates/chimere/edit_route.html:36
-#: templates/chimere/blocks/alternate_multimedia.html:38
+#: templates/chimere/blocks/alternate_multimedia.html:39
msgid "Name"
msgstr "Nom"
-#: forms.py:480 models.py:1192
+#: forms.py:519 models.py:1311
msgid "Area"
msgstr "Zone"
-#: forms.py:520
+#: forms.py:559
msgid "No area selected."
msgstr "Pas de zone sélectionnée."
-#: forms.py:527
+#: forms.py:566
#, python-format
msgid "The area \"%s\" has the same order, you need to choose another one."
msgstr ""
"La zone « %s » a le même numéro d'ordre, vous devez un choisir un autre."
-#: models.py:52 models.py:128 models.py:156 models.py:284 models.py:587
-#: models.py:1161 models.py:1330
+#: forms.py:611
+msgid "Start"
+msgstr "Départ"
+
+#: forms.py:612
+msgid "Finish"
+msgstr "Arrivée"
+
+#: forms.py:613
+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:375
+#: models.py:706 models.py:1280 models.py:1449 models.py:1490
msgid "Available"
msgstr "Disponible"
-#: models.py:53 models.py:1339
+#: models.py:57 models.py:173 models.py:186 models.py:230 models.py:760
+#: models.py:832 models.py:1279 models.py:1436 models.py:1448
+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:457
+msgid "Is front page"
+msgstr "Est en page principale"
+
+#: models.py:105 models.py:1458
msgid "Date"
msgstr "Date"
-#: models.py:55
+#: models.py:107 models.py:759
+msgid "Url"
+msgstr "Url"
+
+#: models.py:108
msgid "Associated areas"
msgstr "Zones associées"
-#: models.py:61 models.py:62
+#: models.py:114 models.py:115 templates/chimere/blocks/news.html:3
+#: templates/chimere/blocks/news.html:5
msgid "News"
msgstr "Nouvelle"
-#: models.py:67
+#: models.py:124
msgid "Parameters"
msgstr "Paramètres"
-#: models.py:71
+#: models.py:128
msgid "TinyUrl"
msgstr "Mini-url"
-#: models.py:110 models.py:117 models.py:160
+#: models.py:167 models.py:174 models.py:225
msgid "Color theme"
msgstr "Thème de couleur"
-#: models.py:115
+#: models.py:172
msgid "Code"
msgstr "Code"
-#: models.py:116 models.py:129 models.py:162 models.py:641 models.py:713
-#: models.py:1160 models.py:1317 models.py:1329
-msgid "Order"
-msgstr "Ordre"
-
-#: models.py:122
+#: models.py:179
msgid "Color"
msgstr "Couleur"
-#: models.py:135 models.py:153
+#: models.py:192 models.py:210
msgid "Category"
msgstr "Catégorie"
-#: models.py:141 models.py:579 models.py:699 models.py:880
-#: templates/chimere/blocks/alternate_multimedia.html:42
+#: models.py:198 models.py:698 models.py:818 models.py:999
+#: templates/chimere/blocks/alternate_multimedia.html:43
msgid "Image"
msgstr "Image"
-#: models.py:143 models.py:701 models.py:882
+#: models.py:200 models.py:820 models.py:1001
msgid "Height"
msgstr "Hauteur"
-#: models.py:144 models.py:702 models.py:883
+#: models.py:201 models.py:821 models.py:1002
msgid "Width"
msgstr "Largeur"
-#: models.py:148 models.py:159
+#: models.py:205 models.py:222
msgid "Icon"
msgstr "Icône"
-#: models.py:157
+#: models.py:214
msgid "Available for submission"
msgstr "Disponible pour soumission"
-#: models.py:163
+#: models.py:216
msgid "Marker"
msgstr "Point d'intérêt"
-#: models.py:164 models.py:876 models.py:893
+#: models.py:217 models.py:995 models.py:1012
#: templates/chimere/edit_route.html:27
msgid "Route"
msgstr "Trajet"
-#: models.py:165
+#: models.py:218
msgid "Both"
msgstr "Mixte"
-#: models.py:166
+#: models.py:219
msgid "Item type"
msgstr "Type d'élément"
-#: models.py:171
+#: models.py:220
+msgid "Is dated"
+msgstr "Est daté"
+
+#: models.py:223
+msgid "Hover icon"
+msgstr "Icône en survol"
+
+#: models.py:227
+msgid "Displayed in the layer menu"
+msgstr "Apparaît dans le menu des couches ?"
+
+#: models.py:229
+msgid "Routing warn"
+msgstr "Avertissement sur les itinéraires"
+
+#: models.py:235
msgid "Sub-category"
msgstr "Sous-catégorie"
-#: models.py:172
+#: models.py:236
msgid "Sub-categories"
msgstr "Sous-catégories"
-#: models.py:230
+#: models.py:320
msgid "Importer type"
msgstr "Type d'import"
-#: models.py:232
+#: models.py:322
msgid "Filter"
msgstr "Filtre"
-#: models.py:234 templates/chimere/blocks/alternate_multimedia.html:48
+#: models.py:324 templates/chimere/blocks/alternate_multimedia.html:49
msgid "Web address"
msgstr "Adresse web"
-#: models.py:236
+#: models.py:326
msgid "Source file"
msgstr "Fichier source"
-#: models.py:238
+#: models.py:328
msgid "Name by default"
msgstr "Nom par défaut"
-#: models.py:240
+#: models.py:330
msgid "SRID"
msgstr "SRID"
-#: models.py:241
+#: models.py:331
msgid "Zipped file"
msgstr "Fichier zippé"
-#: models.py:242
+#: models.py:332
msgid "Overwrite existing data"
msgstr "Écraser les données existantes"
-#: models.py:243 models.py:300
+#: models.py:334 models.py:391
msgid "Origin"
msgstr "Origine"
-#: models.py:245 models.py:302
+#: models.py:336 models.py:393
msgid "License"
msgstr "Licence"
-#: models.py:248
+#: models.py:339
msgid "Associated subcategories"
msgstr "Sous-catégories associées"
-#: models.py:249 utils.py:473
+#: models.py:340 utils.py:474
msgid "State"
msgstr "État"
-#: models.py:251
+#: models.py:342
msgid "Automatically associate a marker to a way"
msgstr "Associer automatiquement un marqueur à une route"
-#: models.py:255
+#: models.py:346
msgid "Importer"
msgstr "Import"
-#: models.py:275
+#: models.py:366
msgid "Submitter session key"
msgstr "Clé de session du demandeur"
-#: models.py:277
+#: models.py:368
msgid "Submitter name or nickname"
msgstr "Nom ou pseudo du demandeur"
-#: models.py:279
+#: models.py:370
msgid "Submitter email"
msgstr "Courriel du demandeur"
-#: models.py:281
+#: models.py:372
msgid "Submitter comment"
msgstr "Commentaire du demandeur"
-#: models.py:283
+#: models.py:374
msgid "Submited"
msgstr "Soumis"
-#: models.py:285
+#: models.py:376
msgid "Modified"
msgstr "Modifié"
-#: models.py:286
+#: models.py:377
msgid "Disabled"
msgstr "Désactivé"
-#: models.py:287
+#: models.py:378
msgid "Imported"
msgstr "Importé"
-#: models.py:289
+#: models.py:380
msgid "Status"
msgstr "État"
-#: models.py:290
+#: models.py:381
msgid "Import key"
msgstr "Clé d'import"
-#: models.py:292
+#: models.py:383
msgid "Import version"
msgstr "Version de l'import"
-#: models.py:294
+#: models.py:385
msgid "Source"
msgstr "Source"
-#: models.py:296
+#: models.py:387
msgid "Modified since last import"
msgstr "Modifié depuis le dernier import"
-#: models.py:298
+#: models.py:389
msgid "Not to be exported to OSM"
msgstr "À ne pas exporter vers OSM"
-#: models.py:304 templates/chimere/edit.html:56
+#: models.py:395 templates/chimere/edit.html:56
#: templates/chimere/edit_route.html:52
msgid "Start date"
msgstr "Date de début"
-#: models.py:305
+#: models.py:396
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:307 templates/chimere/edit.html:62
+#: models.py:398 templates/chimere/edit.html:62
#: templates/chimere/edit_route.html:58
msgid "End date"
msgstr "Date de fin"
-#: models.py:308
+#: models.py:399
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:354
+#: models.py:449
msgid "Reference marker"
msgstr "Point d'intérêt de référence"
-#: models.py:355 utils.py:475
+#: models.py:450 utils.py:476
msgid "Localisation"
msgstr "Localisation"
-#: models.py:357
+#: models.py:452
msgid "Available Date"
msgstr "Date de mise en disponibilité"
-#: models.py:361 utils.py:474 templates/admin/chimere/managed_modified.html:31
+#: models.py:456 utils.py:475 templates/admin/chimere/managed_modified.html:31
#: templates/chimere/edit.html:49 templates/chimere/edit_route.html:46
msgid "Description"
msgstr "Description"
-#: models.py:423 models.py:1364
+#: models.py:524 models.py:1500
msgid "Point of interest"
msgstr "Point d'intérêt"
-#: models.py:577
+#: models.py:696
msgid "Audio"
msgstr "Audio"
-#: models.py:578
+#: models.py:697
msgid "Video"
msgstr "Vidéo"
-#: models.py:580
+#: models.py:699
msgid "Other"
msgstr "Autre"
-#: models.py:581
+#: models.py:700
msgid "Media type"
msgstr "Type de media"
-#: models.py:584
+#: models.py:703
msgid "Mime type"
msgstr "Type mime"
-#: models.py:586
+#: models.py:705
msgid "Inside an iframe"
msgstr "À l'intérieur d'un iframe"
-#: models.py:590
+#: models.py:709
msgid "Multimedia type"
msgstr "Type de multimedia"
-#: models.py:591
+#: models.py:710
msgid "Multimedia types"
msgstr "Types de multimedia"
-#: models.py:600
+#: models.py:719
msgid "Automatic recognition"
msgstr "Reconnaissance automatique"
-#: models.py:626
+#: models.py:745
msgid "Extension name"
msgstr "Nom de l'extension"
-#: models.py:628
+#: models.py:747
msgid "Associated multimedia type"
msgstr "Type de multimedia associé"
-#: models.py:632
+#: models.py:751
msgid "Multimedia extension"
msgstr "Extension multimedia"
-#: models.py:633
+#: models.py:752
msgid "Multimedia extensions"
msgstr "Extensions multimedia"
-#: models.py:640
-msgid "Url"
-msgstr "Url"
-
-#: models.py:643 models.py:703
+#: models.py:762 models.py:822
msgid "Display inside the description?"
msgstr "Apparaît dans la description ?"
-#: models.py:648
+#: models.py:767
msgid "Multimedia file"
msgstr "Fichier multimedia"
-#: models.py:705
+#: models.py:824
msgid "Thumbnail"
msgstr "Miniature"
-#: models.py:709
+#: models.py:828
msgid "Thumbnail height"
msgstr "Hauteur de la miniature"
-#: models.py:711
+#: models.py:830
msgid "Thumbnail width"
msgstr "Largeur de la miniature"
-#: models.py:720
+#: models.py:839
msgid "Picture file"
msgstr "Fichier d'image"
-#: models.py:815
+#: models.py:934
msgid "Raw file (gpx or kml)"
msgstr "Fichier brut (gpx ou kml)"
-#: models.py:817
+#: models.py:936
msgid "Simplified file"
msgstr "Fichier simplifié"
-#: models.py:819
+#: models.py:938
msgid "KML"
msgstr "KML"
-#: models.py:819
+#: models.py:938
msgid "GPX"
msgstr "GPX"
-#: models.py:824
+#: models.py:943
msgid "Route file"
msgstr "Fichier de trajet"
-#: models.py:825
+#: models.py:944
msgid "Route files"
msgstr "Fichiers de trajet"
-#: models.py:875
+#: models.py:994
msgid "Reference route"
msgstr "Trajet de référence"
-#: models.py:879
+#: models.py:998
msgid "Associated file"
msgstr "Fichier associé"
-#: models.py:884
+#: models.py:1003
msgid "Has an associated marker"
msgstr "Dispose d'un marqueur associé"
-#: models.py:1144
+#: models.py:1263
msgid "Layer code"
msgstr "Code pour la couche"
-#: models.py:1150
+#: models.py:1269
msgid "Layer"
msgstr "Couche"
-#: models.py:1156
+#: models.py:1275
msgid "Area urn"
msgstr "Urn de la zone"
-#: models.py:1158 templates/chimere/blocks/welcome.html:3
+#: models.py:1277 templates/chimere/blocks/welcome.html:3
msgid "Welcome message"
msgstr "Message d'accueil"
-#: models.py:1162
+#: models.py:1281
msgid "Upper left corner"
msgstr "Coin en haut à gauche"
-#: models.py:1164
+#: models.py:1283
msgid "Lower right corner"
msgstr "Coin en bas à droite"
-#: models.py:1166
+#: models.py:1285
msgid "Default area"
msgstr "Zone par défaut"
-#: models.py:1167
+#: models.py:1286
msgid "Only one area is set by default"
msgstr "Seule une zone est définie par défaut"
-#: models.py:1171
+#: models.py:1290
msgid "Sub-categories checked by default"
msgstr "Sous-catégories cochées par défaut"
-#: models.py:1173
+#: models.py:1292
msgid "Sub-categories dynamicaly displayed"
msgstr "Sous-categories affichées dynamiquement"
-#: models.py:1174
+#: models.py:1293
msgid ""
"If checked, categories are only displayed in the menu if they are available "
"on the current extent."
@@ -670,64 +715,72 @@ msgstr ""
"Si coché, les catégories sont disponibles sur le menu seulement si elles "
"apparaissent sur la zone affichée."
-#: models.py:1178 models.py:1333
+#: models.py:1297 models.py:1452
msgid "Restricted to theses sub-categories"
msgstr "Restreindre à ces sous-categories"
-#: models.py:1179
+#: models.py:1298
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:1181
+#: models.py:1300
msgid "Link to an external CSS"
msgstr "Lien vers une feuille de style externe"
-#: models.py:1183
+#: models.py:1302
msgid "Restrict to the area extent"
msgstr "Restreindre à l'étendue de la zone"
-#: models.py:1318
+#: models.py:1437 widgets.py:88
msgid "Default layer"
msgstr "Couche par défaut"
-#: models.py:1322 models.py:1323
+#: models.py:1441 models.py:1442
msgid "Layers"
msgstr "Couches"
-#: models.py:1331
+#: models.py:1450
msgid "Mandatory"
msgstr "Obligatoire"
-#: models.py:1334
+#: models.py:1453
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:1336
+#: models.py:1455
msgid "Text"
msgstr "Texte"
-#: models.py:1337
+#: models.py:1456
msgid "Long text"
msgstr "Texte long"
-#: models.py:1344
+#: models.py:1459
+msgid "Choices"
+msgstr "Choix"
+
+#: models.py:1467
msgid "Type"
msgstr "Type"
-#: models.py:1349 models.py:1366
+#: models.py:1472 models.py:1488 models.py:1502
msgid "Property model"
msgstr "Modèle de propriété"
-#: models.py:1367
+#: models.py:1489 models.py:1503
msgid "Value"
msgstr "Valeur"
-#: models.py:1371
+#: models.py:1495
+msgid "Model property choice"
+msgstr "Choix pour les modèles de propriété"
+
+#: models.py:1514
msgid "Property"
msgstr "Propriété"
@@ -781,69 +834,69 @@ msgstr "Export échoué"
msgid "Export canceled"
msgstr "Export annulé"
-#: utils.py:134 utils.py:183
+#: utils.py:135 utils.py:184
msgid "Bad zip file"
msgstr "Mauvais fichier zip"
-#: utils.py:186
+#: utils.py:187
msgid "Missing file(s) inside the zip file"
msgstr "Fichier(s) manquant(s) dans l'archive zip"
-#: utils.py:227
+#: utils.py:228
msgid "Bad XML file"
msgstr "Mauvais fichier XML"
-#: utils.py:312
+#: utils.py:313
msgid "Error while reading the data source."
msgstr "Erreur lors de la lecture de la source."
-#: utils.py:330
+#: utils.py:331
#, python-format
msgid "SRID cannot be guessed. The default SRID (%s) has been used."
msgstr "Le SRID n'a pu être trouvé. Le SRID par défaut (%s) a été utilisé."
-#: utils.py:351
+#: utils.py:352
msgid "Type of geographic item of this shapefile is not managed by Chimère."
msgstr ""
"Les types des éléments géographiques de ce fichier Shapefile ne sont pas "
"gérés par Chimère."
-#: utils.py:371
+#: utils.py:372
msgid "Bad Shapefile"
msgstr "Mauvais fichier Shapefile"
-#: utils.py:413
+#: utils.py:414
msgid "Could not create file!"
msgstr "Ne peut pas créer le fichier !"
-#: utils.py:424
+#: utils.py:425
msgid "Failed to create field"
msgstr "Ne peut pas créer un champ"
-#: utils.py:470 templates/admin/chimere/managed_modified.html:25
+#: utils.py:471 templates/admin/chimere/managed_modified.html:25
#: templates/chimere/edit.html:44 templates/chimere/edit_route.html:41
#: templates/chimere/main_map.html:13
#: templates/chimere/main_map_simple.html:10
msgid "Categories"
msgstr "Catégories"
-#: utils.py:503
+#: utils.py:504
msgid "Invalid CSV format"
msgstr "Fichier CSV non valide"
-#: utils.py:578
+#: utils.py:579
msgid "RSS feed is not well formed"
msgstr "Flux RSS non valide"
-#: utils.py:653
+#: utils.py:654
msgid "Nothing to import"
msgstr "Rien à importer"
-#: utils.py:741
+#: utils.py:742
msgid "New items imported - validate them before exporting"
msgstr "Nouveaux éléments importés - valider ceux-ci avant d'exporter"
-#: utils.py:743
+#: utils.py:744
msgid ""
"There are items from a former import not yet validated - validate them "
"before exporting"
@@ -851,19 +904,19 @@ msgstr ""
"Il y a des éléments d'un import précédent pas encore validé - Validez les "
"avant d'exporter"
-#: utils.py:755
+#: utils.py:756
msgid "Bad params - programming error"
msgstr "Mauvais paramètres - erreur de programmation"
-#: utils.py:765
+#: utils.py:766
msgid "Bad param"
msgstr "Mauvais paramètre"
-#: utils.py:780
+#: utils.py:781
msgid "No non ambigious tag is defined in the XAPI request"
msgstr "Pas de tag non ambigü définis dans la requête XAPI"
-#: utils.py:782
+#: utils.py:783
msgid ""
"No bounding box is defined in the XAPI request.If you are sure to manage the "
"entire planet set the bounding box to -180,-90,180,90"
@@ -872,19 +925,19 @@ msgstr ""
"vouloir lancer la requête sur la planète entière fixez la « bounding box » "
"à -180,-90,180,90"
-#: views.py:238
+#: views.py:278
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:323
+#: views.py:363
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:433
+#: views.py:475
msgid "Comments/request on the map"
msgstr "Commentaires/requètes sur la carte"
-#: views.py:436
+#: views.py:478
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."
@@ -893,48 +946,56 @@ msgstr ""
"laissé votre courriel vous serez peut-être contacté bientôt pour plus de "
"détails."
-#: views.py:440
+#: views.py:482
msgid "Temporary error. Renew your message later."
msgstr "Erreur temporaire. Réenvoyez votre message plus tard."
-#: views.py:576
+#: views.py:656
msgid "No category available in this area."
msgstr "Pas de catégorie disponible sur cette zone."
-#: views.py:684
+#: views.py:756
+msgid "Bad geometry"
+msgstr "Géométrie incorrecte"
+
+#: views.py:841
msgid "Incorrect choice in the list"
msgstr "Choix incorrect dans la liste"
-#: widgets.py:216
+#: widgets.py:242
+msgid "Street, City, Country"
+msgstr "Rue, Commune, Pays"
+
+#: widgets.py:311
msgid "Latitude"
msgstr "Latitude"
-#: widgets.py:216
+#: widgets.py:311
msgid "Longitude"
msgstr "Longitude"
-#: widgets.py:240
+#: widgets.py:335
msgid "Invalid point"
msgstr "Point invalide"
-#: widgets.py:292
+#: widgets.py:391
msgid "Creation mode"
msgstr "Mode création"
-#: widgets.py:293
+#: widgets.py:392
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:295
+#: widgets.py:394
msgid "Then click on the map to begin the drawing."
msgstr "Puis cliquez sur la carte pour commencer le dessin."
-#: widgets.py:296
+#: widgets.py:395
msgid "You can add points by clicking again."
msgstr "Vous pouvez ajouter des points en cliquant de nouveau."
-#: widgets.py:297
+#: widgets.py:396
msgid ""
"To finish the drawing double click. When the drawing is finished you can "
"edit it."
@@ -942,7 +1003,7 @@ msgstr ""
"Pour finir le tracé double-cliquez. Quand le tracé est fini vous pouvez "
"toujours l'éditer."
-#: widgets.py:299
+#: widgets.py:398
msgid ""
"While creating to undo a drawing click again on the toggle button \"Stop "
"drawing\"."
@@ -950,17 +1011,17 @@ msgstr ""
"En mode création vous pouvez annuler un tracé en appuyant sur le bouton "
"«&nbsp;Arrêter le tracé&nbsp;»."
-#: widgets.py:304
+#: widgets.py:403
msgid "Modification mode"
msgstr "Mode modification"
-#: widgets.py:305
+#: widgets.py:404
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:306
+#: widgets.py:405
msgid ""
"To delete a point move the mouse cursor over it and press the \"d\" or \"Del"
"\" key."
@@ -968,7 +1029,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:308
+#: widgets.py:407
msgid ""
"To add a point click in the middle of a segment and drag the new point to "
"the desired position"
@@ -977,51 +1038,51 @@ msgstr ""
"maintenez le bouton appuyé et déplacez le nouveau point à la position "
"désirée."
-#: widgets.py:315
+#: widgets.py:414
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:318
+#: widgets.py:417
msgid "Upload a route file (GPX or KML)"
msgstr "Déposer un trajet (fichier GPX ou KML)"
-#: widgets.py:319
+#: widgets.py:418
msgid "or"
msgstr "ou"
-#: widgets.py:324
+#: widgets.py:423
msgid "Start \"hand\" drawing"
msgstr "Commencer le tracé manuellement"
-#: widgets.py:347
+#: widgets.py:446
msgid "Move on the map"
msgstr "Se déplacer"
-#: widgets.py:347
+#: widgets.py:446
msgid "Draw"
msgstr "Tracer"
-#: widgets.py:437
+#: widgets.py:536
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:494
+#: widgets.py:593
msgid "Type:"
msgstr "Type :"
-#: widgets.py:494
+#: widgets.py:593
msgid "Node"
msgstr "Nœud"
-#: widgets.py:495
+#: widgets.py:594
msgid "Way"
msgstr "Route"
-#: widgets.py:506
+#: widgets.py:605
msgid ""
"Enter an OSM \"tag=value\" string such as \"amenity=pub\". A list of common "
"tag is available <a href='https://wiki.openstreetmap.org/wiki/Map_Features' "
@@ -1031,39 +1092,39 @@ msgstr ""
"liste des clés est disponible <a href='https://wiki.openstreetmap.org/wiki/"
"FR:Map_Features' target='_blank'>ici</a>."
-#: widgets.py:513
+#: widgets.py:612
msgid "Tag:"
msgstr "Clé/valeur :"
-#: widgets.py:517
+#: widgets.py:616
msgid "You have to select an area."
msgstr "Vous devez sélectionner une zone."
-#: widgets.py:519
+#: widgets.py:618
msgid "You have to select a type."
msgstr "Vous devez sélectionner un type."
-#: widgets.py:521
+#: widgets.py:620
msgid "You have to insert a filter tag."
msgstr "Vous devez saisir une clé=valeur."
-#: widgets.py:523
+#: widgets.py:622
msgid "If you change the above form don't forget to refresh before submit!"
msgstr ""
"Si vous modifiez le formulaire ci-dessus n'oubliez pas de rafraîchir avant "
"de valider !"
-#: widgets.py:526
+#: widgets.py:625
msgid "You can put a Folder name of the KML file to filter on it."
msgstr ""
"Vous pouvez saisir le nom d'un « Folder » du fichier KML pour filter sur "
"celui-ci."
-#: widgets.py:534
+#: widgets.py:633
msgid "Refresh"
msgstr "Rafraîchir"
-#: widgets.py:600
+#: widgets.py:699
msgid "Select..."
msgstr "Sélectionner..."
@@ -1147,8 +1208,8 @@ msgid ""
"<a href='%(rapprochement_form)s'>rapprochement form</a>.\n"
msgstr ""
"\n"
-"Cet élément a un élément de référence associé. Vous devriez le traiter via le "
-"<a href='%(rapprochement_form)s'>formulaire de rapprochement</a>.\n"
+"Cet élément a un élément de référence associé. Vous devriez le traiter via "
+"le <a href='%(rapprochement_form)s'>formulaire de rapprochement</a>.\n"
#: templates/admin/chimere/propertymodel/change_form.html:5
msgid ""
@@ -1158,7 +1219,7 @@ msgstr ""
"Après ajout/modification de modèle de propriété vous aurez à recharger le "
"serveur web."
-#: templates/chimere/base.html:11
+#: templates/chimere/base.html:12
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."
@@ -1202,14 +1263,6 @@ msgstr "Proposer une modification"
msgid "I would like to propose an amendment for this item:"
msgstr "Je souhaiterais proposer une modification pour cet élément :"
-#: templates/chimere/detail.html:39
-msgid "Share on"
-msgstr "Partager sur"
-
-#: templates/chimere/detail.html:43
-msgid "Share"
-msgstr "Partager"
-
#: templates/chimere/edit.html:20
msgid "Error"
msgstr "Erreur"
@@ -1259,7 +1312,7 @@ msgstr "Commentaires au sujet de votre proposition"
msgid "Upload in progress. Please wait..."
msgstr "Dépôt 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"
@@ -1267,7 +1320,7 @@ msgstr "Proposez"
msgid "Add/modify a route"
msgstr "Ajout ou modifier un trajet"
-#: templates/chimere/main_map.html:27
+#: templates/chimere/main_map.html:35
msgid "Simple map"
msgstr "Carte simple"
@@ -1283,17 +1336,17 @@ msgstr "Déposer un fichier"
msgid "Upload"
msgstr "Déposer"
-#: templates/chimere/blocks/alternate_multimedia.html:32
-#: templates/chimere/blocks/alternate_multimedia.html:50
+#: templates/chimere/blocks/alternate_multimedia.html:33
+#: templates/chimere/blocks/alternate_multimedia.html:51
#: templates/chimere/blocks/inline_formset.html:22
msgid "Add"
msgstr "Ajouter"
-#: templates/chimere/blocks/alternate_multimedia.html:34
-msgid "Add multimedia from your computer or a site"
+#: templates/chimere/blocks/alternate_multimedia.html:35
+msgid "Add multimedia from your computer or a website"
msgstr "Ajoutez du multimedia depuis votre ordinateur ou un site web"
-#: templates/chimere/blocks/alternate_multimedia.html:35
+#: 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 "
@@ -1303,31 +1356,31 @@ msgstr ""
"ipsum. Donec vel urna a turpis consectetur consectetur. Vestibulum ut enim "
"vel odio porta vulputate."
-#: templates/chimere/blocks/alternate_multimedia.html:43
+#: templates/chimere/blocks/alternate_multimedia.html:44
msgid "Audio, video, other..."
msgstr "Audio, vidéo, autre..."
-#: templates/chimere/blocks/alternate_multimedia.html:46
+#: templates/chimere/blocks/alternate_multimedia.html:47
msgid "Download"
msgstr "Télécharger"
-#: templates/chimere/blocks/alternate_multimedia.html:47
+#: templates/chimere/blocks/alternate_multimedia.html:48
msgid "Or"
msgstr "Ou"
-#: templates/chimere/blocks/alternate_multimedia.html:76
+#: templates/chimere/blocks/alternate_multimedia.html:80
msgid "You must provide a name."
msgstr "Vous devez renseigner le nom."
-#: templates/chimere/blocks/alternate_multimedia.html:81
+#: templates/chimere/blocks/alternate_multimedia.html:85
msgid "You must choose a media type."
msgstr "Vous devez renseigner un type de fichier média."
-#: templates/chimere/blocks/alternate_multimedia.html:87
+#: templates/chimere/blocks/alternate_multimedia.html:91
msgid "You must provide a file or a web address."
msgstr "Vous devez renseigner un fichier ou une adresse web."
-#: templates/chimere/blocks/alternate_multimedia.html:92
+#: templates/chimere/blocks/alternate_multimedia.html:96
msgid "You must provide a web address."
msgstr "Vous devez fournir une adresse web."
@@ -1366,16 +1419,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:52
+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:44
+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 "
@@ -1404,10 +1542,6 @@ msgstr "Retourner à la carte"
msgid "Welcome"
msgstr "Accueil"
-#: templates/chimere/blocks/welcome.html:52
-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"
@@ -1448,6 +1582,11 @@ msgstr "Description :"
msgid ":"
msgstr " :"
+#: templatetags/chimere_tags.py:80
+#, python-format
+msgid "Welcome to the %s"
+msgstr "Bienvenue sur %s"
+
#~ msgid "Advanced options"
#~ msgstr "Options avancées"
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..e536b3f 100644
--- a/chimere/migrations/0036_auto.py
+++ b/chimere/migrations/0044_auto.py
@@ -108,6 +108,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'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
@@ -123,6 +124,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'}),
@@ -149,6 +156,18 @@ class Migration(SchemaMigration):
'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': {
@@ -182,6 +201,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'}),
@@ -218,9 +244,13 @@ class Migration(SchemaMigration):
},
'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', [], {'related_name': "'subcategories'", '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'}),
diff --git a/chimere/migrations/0045_auto__add_field_subcategory_routing_warn__add_field_subcategory_routin.py b/chimere/migrations/0045_auto__add_field_subcategory_routing_warn__add_field_subcategory_routin.py
new file mode 100644
index 0000000..e43c50c
--- /dev/null
+++ b/chimere/migrations/0045_auto__add_field_subcategory_routing_warn__add_field_subcategory_routin.py
@@ -0,0 +1,275 @@
+# -*- 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.routing_warn'
+ db.add_column('chimere_subcategory', 'routing_warn',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'SubCategory.routing_available'
+ db.add_column('chimere_subcategory', 'routing_available',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'SubCategory.routing_warn'
+ db.delete_column('chimere_subcategory', 'routing_warn')
+
+ # Deleting field 'SubCategory.routing_available'
+ db.delete_column('chimere_subcategory', 'routing_available')
+
+
+ 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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', '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'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ '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'},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}),
+ '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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', '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'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ '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', [], {'related_name': "'subcategories'", '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'}),
+ 'routing_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'routing_warn': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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/0038_osm_import_filtr.py b/chimere/migrations/0046_auto__del_field_subcategory_routing_available.py
index 2b8666b..c682e0e 100644
--- a/chimere/migrations/0038_osm_import_filtr.py
+++ b/chimere/migrations/0046_auto__del_field_subcategory_routing_available.py
@@ -1,24 +1,23 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
-from south.v2 import DataMigration
+from south.v2 import SchemaMigration
from django.db import models
-class Migration(DataMigration):
+
+class Migration(SchemaMigration):
def forwards(self, orm):
- for importer in orm['chimere.Importer'].objects.filter(
- importer_type='OSM').all():
- if importer.filtr:
- continue
- splited_url = importer.source.split('/')
- importer.filtr = splited_url[-1]
- importer.source = "/".join(splited_url[:-1])+"/"
- importer.save()
+ # Deleting field 'SubCategory.routing_available'
+ db.delete_column('chimere_subcategory', 'routing_available')
+
def backwards(self, orm):
- # no backward necessary
- pass
+ # Adding field 'SubCategory.routing_available'
+ db.add_column('chimere_subcategory', 'routing_available',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
models = {
'chimere.area': {
@@ -32,7 +31,7 @@ class Migration(DataMigration):
'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', [], {'unique': 'True'}),
+ '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)'"}),
@@ -77,7 +76,6 @@ class Migration(DataMigration):
},
'chimere.importer': {
'Meta': {'object_name': 'Importer'},
- 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'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'}),
@@ -107,6 +105,7 @@ class Migration(DataMigration):
'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'}),
'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
@@ -122,6 +121,12 @@ class Migration(DataMigration):
'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'}),
@@ -148,6 +153,18 @@ class Migration(DataMigration):
'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': {
@@ -181,12 +198,18 @@ class Migration(DataMigration):
'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'}),
- 'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': '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'}),
@@ -218,14 +241,19 @@ class Migration(DataMigration):
},
'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', [], {'related_name': "'subcategories'", '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'}),
+ 'routing_warn': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'chimere.tinyurl': {
@@ -235,5 +263,4 @@ class Migration(DataMigration):
}
}
- complete_apps = ['chimere']
- symmetrical = True
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py b/chimere/migrations/0047_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
index 5269e8b..4b40fb9 100644
--- a/chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
+++ b/chimere/migrations/0047_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py
@@ -8,10 +8,6 @@ from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
- for idx, area in enumerate(orm['chimere.Area'].objects.order_by('order'
- ).all()):
- area.order = (idx + 1)*5
- area.save()
# Adding unique constraint on 'Area', fields ['order']
db.create_unique('chimere_area', ['order'])
@@ -252,4 +248,4 @@ class Migration(SchemaMigration):
}
}
- complete_apps = ['chimere']
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0048_auto__add_propertymodelchoice__add_multimediaextension__add_page__chg_.py b/chimere/migrations/0048_auto__add_propertymodelchoice__add_multimediaextension__add_page__chg_.py
new file mode 100644
index 0000000..acc2fce
--- /dev/null
+++ b/chimere/migrations/0048_auto__add_propertymodelchoice__add_multimediaextension__add_page__chg_.py
@@ -0,0 +1,368 @@
+# -*- 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 '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'])
+
+ # 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'])
+
+ # 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'])
+
+
+ # Changing field 'MultimediaFile.multimedia_type'
+ db.alter_column('chimere_multimediafile', 'multimedia_type_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.MultimediaType']))
+ # Adding field 'SubCategory.dated'
+ db.add_column('chimere_subcategory', 'dated',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'SubCategory.description'
+ db.add_column('chimere_subcategory', 'description',
+ self.gf('django.db.models.fields.TextField')(null=True, blank=True),
+ keep_default=False)
+
+ # 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)
+
+ # Adding field 'SubCategory.as_layer'
+ db.add_column('chimere_subcategory', 'as_layer',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'SubCategory.routing_warn'
+ db.add_column('chimere_subcategory', 'routing_warn',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ 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)
+
+ # 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)
+
+
+ def backwards(self, orm):
+ # Deleting model 'PropertyModelChoice'
+ db.delete_table('chimere_propertymodelchoice')
+
+ # Deleting model 'MultimediaExtension'
+ db.delete_table('chimere_multimediaextension')
+
+ # Deleting model 'Page'
+ db.delete_table('chimere_page')
+
+
+ # User chose to not deal with backwards NULL issues for 'MultimediaFile.multimedia_type'
+ raise RuntimeError("Cannot reverse this migration. 'MultimediaFile.multimedia_type' and its values cannot be restored.")
+ # Deleting field 'SubCategory.dated'
+ db.delete_column('chimere_subcategory', 'dated')
+
+ # Deleting field 'SubCategory.description'
+ db.delete_column('chimere_subcategory', 'description')
+
+ # Deleting field 'SubCategory.hover_icon'
+ db.delete_column('chimere_subcategory', 'hover_icon_id')
+
+ # Deleting field 'SubCategory.as_layer'
+ db.delete_column('chimere_subcategory', 'as_layer')
+
+ # Deleting field 'SubCategory.routing_warn'
+ db.delete_column('chimere_subcategory', 'routing_warn')
+
+ # Deleting field 'News.is_front_page'
+ db.delete_column('chimere_news', 'is_front_page')
+
+ # Deleting field 'News.url'
+ db.delete_column('chimere_news', 'url')
+
+ # Deleting field 'Marker.is_front_page'
+ db.delete_column('chimere_marker', 'is_front_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', [], {'unique': 'True'}),
+ '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'},
+ 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ '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'},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}),
+ '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'}),
+ 'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': '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'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ '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', [], {'related_name': "'subcategories'", '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'}),
+ 'routing_warn': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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/0039_auto__add_multimediaextension__chg_field_multimediafile_multimedia_typ.py b/chimere/migrations/0049_auto__chg_field_multimediafile_multimedia_type.py
index 0b26a27..4e34d0b 100644
--- a/chimere/migrations/0039_auto__add_multimediaextension__chg_field_multimediafile_multimedia_typ.py
+++ b/chimere/migrations/0049_auto__chg_field_multimediafile_multimedia_type.py
@@ -8,22 +8,11 @@ from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
- # 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'])
-
# Changing field 'MultimediaFile.multimedia_type'
db.alter_column('chimere_multimediafile', 'multimedia_type_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.MultimediaType'], null=True))
def backwards(self, orm):
- # Deleting model 'MultimediaExtension'
- db.delete_table('chimere_multimediaextension')
-
# User chose to not deal with backwards NULL issues for 'MultimediaFile.multimedia_type'
raise RuntimeError("Cannot reverse this migration. 'MultimediaFile.multimedia_type' and its values cannot be restored.")
@@ -115,6 +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'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
@@ -162,6 +152,18 @@ class Migration(SchemaMigration):
'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': {
@@ -195,6 +197,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'}),
@@ -232,14 +241,19 @@ class Migration(SchemaMigration):
},
'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', [], {'related_name': "'subcategories'", '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'}),
+ 'routing_warn': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'chimere.tinyurl': {
diff --git a/chimere/models.py b/chimere/models.py
index 827a0e7..c393cba 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,21 @@ class SubCategory(models.Model):
available = models.BooleanField(_(u"Available"), default=True)
submission = models.BooleanField(_(u"Available for submission"),
default=True)
- icon = models.ForeignKey(Icon, verbose_name=_(u"Icon"))
- color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"),
- blank=True, null=True)
- order = models.IntegerField(_(u"Order"), default=1000)
TYPE = (('M', _(u'Marker')),
('R', _(u'Route')),
('B', _(u'Both')),)
item_type = models.CharField(_(u"Item type"), max_length=1, choices=TYPE)
+ dated = models.BooleanField(_(u"Is dated"), default=False)
+ description = models.TextField(blank=True, null=True)
+ 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)
+ as_layer = models.BooleanField(_(u"Displayed in the layer menu"),
+ default=False)
+ routing_warn = models.BooleanField(_(u"Routing warn"), default=False)
+ order = models.IntegerField(_(u"Order"), default=1000)
def __unicode__(self):
return u"%s / %s" % (self.category.name, self.name)
class Meta:
@@ -207,6 +271,32 @@ 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 getJSONDict(self):
+ items = {'id':self.pk, 'name':self.name,
+ 'description':self.description if self.description\
+ else '',
+ 'icon':{'url':self.icon.image.url,
+ 'width':self.icon.image.width,
+ 'height':self.icon.image.height}
+ }
+ if self.hover_icon:
+ items['icon_hover'] = {'url':self.hover_icon.image.url}
+ return items
+
+ def getJSON(self, categories_id=[]):
+ '''Return a JSON string - mainly used to get description
+ '''
+ json_string = json.dumps(self.getJSONDict())
+ return json_string
+
IMPORTERS = {'KML':KMLManager,
'OSM':OSMManager,
'SHP':ShapefileManager,
@@ -338,6 +428,10 @@ class GeographicItem(models.Model):
def properties(cls):
return [pm for pm in PropertyModel.objects.filter(available=True)]
+ @classmethod
+ def all_properties(cls):
+ return [pm for pm in PropertyModel.objects.all()]
+
def property_setter(cls, propertymodel):
def setter(self, value):
marker = self
@@ -360,6 +454,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):
@@ -368,7 +464,7 @@ class Marker(GeographicItem):
def __init__(self, *args, **kwargs):
super(Marker, self).__init__(*args, **kwargs)
# add read attributes for properties
- for pm in self.properties():
+ for pm in self.all_properties():
attr_name = pm.getAttrName()
if not hasattr(self, attr_name):
val = ''
@@ -412,6 +508,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
@@ -467,6 +567,18 @@ class Marker(GeographicItem):
if len(properties) > 1:
for property in properties[1:]:
property.delete()
+ if pm.type == 'C' and value:
+ try:
+ value = str(int(value))
+ except ValueError:
+ choice = PropertyModelChoice.objects.filter(propertymodel=pm,
+ value=value)
+ if choice.count():
+ value = choice.all()[0].pk
+ else:
+ choice = PropertyModelChoice.objects.create(value=value,
+ propertymodel=pm)
+ value = choice.pk
# new property
if not properties:
new_property = Property.objects.create(marker=self,
@@ -498,12 +610,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
@@ -1337,11 +1455,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
@@ -1359,6 +1481,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
'''
@@ -1367,7 +1502,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")
@@ -1378,6 +1520,11 @@ class Property(models.Model):
return datetime.date(*[int(val) for val in self.value.split('-')])
except:
return ""
+ if self.propertymodel.type == 'C' and self.value:
+ 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..eaa762a
--- /dev/null
+++ b/chimere/route.py
@@ -0,0 +1,120 @@
+#!/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.contrib.gis.gdal.error import OGRException
+
+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()
+ try:
+ ds = DataSource(tmp_dir + 'shortest-track.gpx')
+ except OGRException:
+ return [], None, None
+ 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/admin.css b/chimere/static/chimere/css/admin.css
new file mode 100644
index 0000000..931d139
--- /dev/null
+++ b/chimere/static/chimere/css/admin.css
@@ -0,0 +1,6 @@
+.vTextField{
+ width:150px;
+}
+.vLargeTextField{
+ width:200px;
+}
diff --git a/chimere/static/chimere/css/print.css b/chimere/static/chimere/css/print.css
new file mode 100644
index 0000000..8dda0b8
--- /dev/null
+++ b/chimere/static/chimere/css/print.css
@@ -0,0 +1,40 @@
+#topbar, .no-titlebar-simple.ui-dialog,
+#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;
+}
+
+#chimere_start_label,
+#chimere_end_label{
+ width:auto;
+ overflow:auto;
+}
+
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 3b835af..67a28a4 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{
@@ -324,6 +344,7 @@ ul.share{
list-style-type:none;
margin:0;
padding:0;
+ display:inline;
}
ul.share li{
@@ -342,6 +363,10 @@ ul.share li{
height:22px;
}
+.share .share-icon img{
+ width:74px;
+}
+
.detail_footer{
text-align:center;
position:absolute;
@@ -366,8 +391,6 @@ ul.share li{
#main-map{
position:absolute;
- margin:0px;
- padding:0px;
height:93%;
margin:0;
padding:0;
@@ -398,6 +421,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;
@@ -420,12 +482,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;
@@ -504,6 +664,11 @@ ul.subcategories label img{
height:20px;
}
+li.main_category > span:hover,
+li.main_category label:hover{
+ cursor:pointer;
+}
+
#categories li#display_submited{
font-variant:normal;
}
@@ -556,11 +721,10 @@ p.warning{
}
-#welcome_button,
-#simple_button,
+a#welcome_button,
+a#routing_button,
#permalink{
display: block;
- text-align:center;
margin:0.3em;
padding:0.2em;
width:100%;
@@ -615,6 +779,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;
@@ -813,6 +1011,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..73b4146
--- /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 e76fe76..ba2ffc2 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/clustering.js b/chimere/static/chimere/js/clustering.js
new file mode 100644
index 0000000..b3a142c
--- /dev/null
+++ b/chimere/static/chimere/js/clustering.js
@@ -0,0 +1,278 @@
+/*
+ Add a recluster to Cluster class.
+ probably part of OpenLayers 2.13
+*/
+
+
+OpenLayers.Strategy.Cluster = OpenLayers.Class(OpenLayers.Strategy, {
+
+ /**
+ * APIProperty: distance
+ * {Integer} Pixel distance between features that should be considered a
+ * single cluster. Default is 20 pixels.
+ */
+ distance: 20,
+
+ /**
+ * APIProperty: threshold
+ * {Integer} Optional threshold below which original features will be
+ * added to the layer instead of clusters. For example, a threshold
+ * of 3 would mean that any time there are 2 or fewer features in
+ * a cluster, those features will be added directly to the layer instead
+ * of a cluster representing those features. Default is null (which is
+ * equivalent to 1 - meaning that clusters may contain just one feature).
+ */
+ threshold: null,
+
+ /**
+ * Property: features
+ * {Array(<OpenLayers.Feature.Vector>)} Cached features.
+ */
+ features: null,
+
+ /**
+ * Property: clusters
+ * {Array(<OpenLayers.Feature.Vector>)} Calculated clusters.
+ */
+ clusters: null,
+
+ /**
+ * Property: clustering
+ * {Boolean} The strategy is currently clustering features.
+ */
+ clustering: false,
+
+ /**
+ * Property: resolution
+ * {Float} The resolution (map units per pixel) of the current cluster set.
+ */
+ resolution: null,
+
+ /**
+ * Constructor: OpenLayers.Strategy.Cluster
+ * Create a new clustering strategy.
+ *
+ * Parameters:
+ * options - {Object} Optional object whose properties will be set on the
+ * instance.
+ */
+
+ /**
+ * APIMethod: activate
+ * Activate the strategy. Register any listeners, do appropriate setup.
+ *
+ * Returns:
+ * {Boolean} The strategy was successfully activated.
+ */
+ activate: function() {
+ var activated = OpenLayers.Strategy.prototype.activate.call(this);
+ if(activated) {
+ this.layer.events.on({
+ "beforefeaturesadded": this.cacheFeatures,
+ "moveend": this.cluster,
+ scope: this
+ });
+ }
+ return activated;
+ },
+
+ /**
+ * APIMethod: deactivate
+ * Deactivate the strategy. Unregister any listeners, do appropriate
+ * tear-down.
+ *
+ * Returns:
+ * {Boolean} The strategy was successfully deactivated.
+ */
+ deactivate: function() {
+ var deactivated = OpenLayers.Strategy.prototype.deactivate.call(this);
+ if(deactivated) {
+ this.clearCache();
+ this.layer.events.un({
+ "beforefeaturesadded": this.cacheFeatures,
+ "moveend": this.cluster,
+ scope: this
+ });
+ }
+ return deactivated;
+ },
+
+ /**
+ * Method: cacheFeatures
+ * Cache features before they are added to the layer.
+ *
+ * Parameters:
+ * event - {Object} The event that this was listening for. This will come
+ * with a batch of features to be clustered.
+ *
+ * Returns:
+ * {Boolean} False to stop features from being added to the layer.
+ */
+ cacheFeatures: function(event) {
+ var propagate = true;
+ if(!this.clustering) {
+ this.clearCache();
+ this.features = event.features;
+ this.cluster();
+ propagate = false;
+ }
+ return propagate;
+ },
+
+ /**
+ * Method: clearCache
+ * Clear out the cached features.
+ */
+ clearCache: function() {
+ this.features = null;
+ },
+
+ /**
+ * Method: cluster
+ * Cluster features based on some threshold distance.
+ *
+ * Parameters:
+ * event - {Object} The event received when cluster is called as a
+ * result of a moveend event.
+ */
+ cluster: function(event) {
+ if((!event || event.zoomChanged || (event && event.recluster)) && this.features) {
+ var resolution = this.layer.map.getResolution();
+ if(resolution != this.resolution || !this.clustersExist() || (event && event.recluster)) {
+ this.resolution = resolution;
+ var clusters = [];
+ var feature, clustered, cluster;
+ for(var i=0; i<this.features.length; ++i) {
+ feature = this.features[i];
+ if(feature.geometry) {
+ clustered = false;
+ for(var j=clusters.length-1; j>=0; --j) {
+ cluster = clusters[j];
+ if(this.shouldCluster(cluster, feature)) {
+ this.addToCluster(cluster, feature);
+ clustered = true;
+ break;
+ }
+ }
+ if(!clustered) {
+ clusters.push(this.createCluster(this.features[i]));
+ }
+ }
+ }
+ this.layer.removeAllFeatures();
+ if(clusters.length > 0) {
+ if(this.threshold > 1) {
+ var clone = clusters.slice();
+ clusters = [];
+ var candidate;
+ for(var i=0, len=clone.length; i<len; ++i) {
+ candidate = clone[i];
+ if(candidate.attributes.count < this.threshold) {
+ Array.prototype.push.apply(clusters, candidate.cluster);
+ } else {
+ clusters.push(candidate);
+ }
+ }
+ }
+ this.clustering = true;
+ // A legitimate feature addition could occur during this
+ // addFeatures call. For clustering to behave well, features
+ // should be removed from a layer before requesting a new batch.
+ this.layer.addFeatures(clusters);
+ this.clustering = false;
+ }
+ this.clusters = clusters;
+ }
+ }
+ },
+
+ /**
+ * Method: recluster
+ * User-callable function to recluster features
+ * Useful for instances where a clustering attribute (distance, threshold, ...)
+ * has changed
+ */
+ recluster: function(){
+ var event={"recluster":true};
+ this.cluster(event);
+ },
+
+ /**
+ * Method: clustersExist
+ * Determine whether calculated clusters are already on the layer.
+ *
+ * Returns:
+ * {Boolean} The calculated clusters are already on the layer.
+ */
+ clustersExist: function() {
+ var exist = false;
+ if(this.clusters && this.clusters.length > 0 &&
+ this.clusters.length == this.layer.features.length) {
+ exist = true;
+ for(var i=0; i<this.clusters.length; ++i) {
+ if(this.clusters[i] != this.layer.features[i]) {
+ exist = false;
+ break;
+ }
+ }
+ }
+ return exist;
+ },
+
+ /**
+ * Method: shouldCluster
+ * Determine whether to include a feature in a given cluster.
+ *
+ * Parameters:
+ * cluster - {<OpenLayers.Feature.Vector>} A cluster.
+ * feature - {<OpenLayers.Feature.Vector>} A feature.
+ *
+ * Returns:
+ * {Boolean} The feature should be included in the cluster.
+ */
+ shouldCluster: function(cluster, feature) {
+ var cc = cluster.geometry.getBounds().getCenterLonLat();
+ var fc = feature.geometry.getBounds().getCenterLonLat();
+ var distance = (
+ Math.sqrt(
+ Math.pow((cc.lon - fc.lon), 2) + Math.pow((cc.lat - fc.lat), 2)
+ ) / this.resolution
+ );
+ return (distance <= this.distance);
+ },
+
+ /**
+ * Method: addToCluster
+ * Add a feature to a cluster.
+ *
+ * Parameters:
+ * cluster - {<OpenLayers.Feature.Vector>} A cluster.
+ * feature - {<OpenLayers.Feature.Vector>} A feature.
+ */
+ addToCluster: function(cluster, feature) {
+ cluster.cluster.push(feature);
+ cluster.attributes.count += 1;
+ },
+
+ /**
+ * Method: createCluster
+ * Given a feature, create a cluster.
+ *
+ * Parameters:
+ * feature - {<OpenLayers.Feature.Vector>}
+ *
+ * Returns:
+ * {<OpenLayers.Feature.Vector>} A cluster.
+ */
+ createCluster: function(feature) {
+ var center = feature.geometry.getBounds().getCenterLonLat();
+ var cluster = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Point(center.lon, center.lat),
+ {count: 1}
+ );
+ cluster.cluster = [feature];
+ return cluster;
+ },
+
+ CLASS_NAME: "OpenLayers.Strategy.Cluster"
+});
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 3168c24..7dd9f4d 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,44 @@ 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.PanPanel(),
+ new OpenLayers.Control.ZoomPanel(),
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,
+ marker_hover_id:'marker_hover',
+ marker_hover_content_id:'marker_hover_content',
+ marker_hover_offset: null,
+ icon_start: null,
+ icon_step: null,
+ icon_end: null
};
var settings = {};
/*
@@ -103,6 +128,31 @@ 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, 39),
+ new OpenLayers.Pixel(-(36/2), -(39/2)));
+ }
+ if (defaults.icon_start == null && typeof STATIC_URL != 'undefined'){
+ defaults.icon_start = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-start.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ }
+ if (defaults.icon_step == null && typeof STATIC_URL != 'undefined'){
+ defaults.icon_step = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-step.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ }
+ if (defaults.icon_end == null && typeof STATIC_URL != 'undefined'){
+ defaults.icon_end = new OpenLayers.Icon(
+ STATIC_URL + "chimere/img/flag-finish.png",
+ new OpenLayers.Size(32, 32),
+ new OpenLayers.Pixel(0, -32));
+ }
settings = $.extend({}, defaults);
if ( options ) $.extend(settings, options);
var map_element = $(this).get(0);
@@ -119,6 +169,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 +194,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 +241,26 @@ 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;
+ $('#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.layerRouteMarker = new OpenLayers.Layer.Markers(
+ 'Route markers');
+ settings.map.addLayer(settings.layerRouteMarker);
+ }
/* Vectors layer */
settings.layerVectors = new OpenLayers.Layer.Vector("Vector Layer");
settings.map.addLayer(settings.layerVectors);
@@ -178,10 +271,94 @@ 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}",
+ labelYOffset: "2",
+ 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 */
+ settings.clustering = new OpenLayers.Strategy.Cluster({
+ distance: 10,
+ threshold: 2});
+ settings.layerCluster = new OpenLayers.Layer.Vector("Cluster layer",
+ {styleMap: new OpenLayers.StyleMap({'default': style}),
+ strategies: [settings.clustering]});
+ settings.map.addLayer(settings.layerCluster);
+
+ var highlightCtrl = new OpenLayers.Control.SelectFeature(
+ settings.layerCluster, {
+ hover: true,
+ highlightOnly: true,
+ eventListeners: {
+ featurehighlighted: function(e) {
+ if(e.feature.attributes.marker)
+ e.feature.attributes.marker.events.triggerEvent('mouseover');
+ },
+ featureunhighlighted: function(e) {
+ if(e.feature.attributes.marker)
+ 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 +384,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 +401,137 @@ 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();
+ }
+ }
+ methods.preload_images();
}, // end of init
+ /* Preload icons */
+ preload_images: function(){
+ if (typeof extra_url == 'undefined') return;
+ var uri = extra_url + "getAllCategories/";
+ $.ajax({url: uri,
+ dataType: "json",
+ success: function (data) {
+ if (!data.categories){return}
+ for(var idx=0; idx<data.categories.length; idx++){
+ new Image().src = data.categories[idx].icon.url;
+ if(data.categories[idx].icon_hover){
+ new Image().src = data.categories[idx].icon_hover.url;
+ }
+ }
+ },
+ error: function (data) {
+ // fail silently
+ }
+ });
+ },
+
+ activateContextMenu: function(){
+ settings.edition_type_is_route = false;
+ 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 {
+ methods.zoomIn();
+ settings.map.setCenter(
+ feature.geometry.getBounds().getCenterLonLat());
+ }
+ },
+
+ /*
+ * Display menu on the map
+ */
+ displayMapMenu: function(e) {
+ if (methods.hidePopup(e)) 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 +547,10 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
success: function (data) {
settings.layerMarkers.clearMarkers();
settings.layerVectors.removeAllFeatures();
+ if (settings.enable_clustering){
+ settings.cluster_array = [];
+ settings.layerCluster.removeAllFeatures();
+ }
for (var i = 0; i < data.features.length; i++) {
var feature = data.features[i];
if (feature.geometry.type == 'Point'){
@@ -248,17 +559,25 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
methods.addRoute(feature);
}
}
+ if (settings.enable_clustering){
+ settings.layerCluster.addFeatures(
+ settings.cluster_array);
+ methods.cleanCluster();
+ }
+ settings.map.resetLayersZIndex();
},
error: function (data) {
settings.layerMarkers.clearMarkers();
settings.layerVectors.removeAllFeatures();
+ if (settings.enable_clustering){
+ settings.layerCluster.removeAllFeatures();
+ }
},
complete: function () {
if($('#waiting').length){$('#waiting').hide();}
}
});
},
-
/*
* Update the categories div in ajax
*/
@@ -276,7 +595,9 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
if (settings.display_submited) params["status"] = "A_S";
$.ajax({url: uri,
data: params,
+ cache: false,
success: function (data) {
+ $('#categories').empty();
$('#categories').html(data);
_init_categories();
_reCheckCategories();
@@ -293,7 +614,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");
+ 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,32 +628,66 @@ 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 () {
/*
* Add event listener in categories DOM elements
*/
- $('#categories #ul_categories > li > input').bind("click", function () {
- methods.hidePopup();
+ $('#categories #ul_categories > li > input').bind("click",
+ function (e) {
+ methods.hidePopup(e);
_toggle_subcategories($(this));
methods.loadGeoObjects();
settings.permalink.updateLink();
});
- $('.subcategories li input').bind("click", function () {
- methods.hidePopup();
+ $('.subcategories li input').bind("click", function (e) {
+ var c_name = $(this).attr('name');
+ c_name = c_name.substr(c_name.lastIndexOf("_")+1);
+ if($(this).is(':checked')){
+ methods.subcategory_detail(c_name);
+ }
+ var par = $(this).parent();
+ if ($(this).attr('checked')){
+ par.addClass('selected');
+ } else {
+ par.removeClass('selected');
+ }
+ methods.hidePopup(e);
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").parent().bind("click", function (e) {
+ var item = $(this).children('.toggle_category');
+ var id = item.attr('id').substr(item.attr('id').lastIndexOf("_")+1);
+ methods.toggle_category(id);
+ });
}
var _reCheckCategories = function (){
/* recheck categories on init or when a redraw occurs */
@@ -349,6 +710,37 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
}
},
/*
+ * Hide clusterized markers
+ */
+ cleanCluster: function (){
+ if (settings.map.getZoom() === 18) {
+ // Don't cluster at this level. No matter what.
+ settings.clustering.threshold = 1000;
+ } else {
+ settings.clustering.threshold = 2;
+ }
+ //settings.layerCluster.refresh({force:true});
+ settings.clustering.recluster();
+ var hidden_feature_idx = [];
+ if (settings.map.getZoom() != 18) {
+ 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 +752,37 @@ 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;
+ if (!settings.popupContentFull) {
+ 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 +792,101 @@ 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';
+ if (settings.current_feature && settings.current_feature.popup
+ && settings.current_feature.popup.visible()) return;
+ var marker = evt.object;
+ if (marker.icon_hover_url){
+ marker.setUrl(marker.icon_hover_url);
+ }
+ px = settings.map.getPixelFromLonLat(marker.lonlat);
+ marker_hover = $('#'+settings.marker_hover_id);
+ marker_hover_content = $('#'+settings.marker_hover_content_id);
+ 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);
+ var pos_x = px.x + map_position.left
+ - width/2 + 1;
+ if (settings.marker_hover_offset)
+ pos_x += settings.marker_hover_offset.x;
+ $('#'+settings.marker_hover_id).css('left', pos_x);
+ 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);
+ var pos_y = px.y + map_position.top
+ - height - marker.icon.size.h;
+ if (settings.marker_hover_offset)
+ pos_y += settings.marker_hover_offset.y;
+ $('#'+settings.marker_hover_id).css('top', pos_y);
+ $('#'+settings.marker_hover_id).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);
+ }
+ $('#'+settings.marker_hover_id).hide();
OpenLayers.Event.stop(evt);
};
marker.events.register('click', feature, markerClick);
@@ -431,11 +895,26 @@ 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);
- methods.loadCategories();
+ _repan_popup();
+ settings.display_feature = null;
+ //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 +941,291 @@ 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');
+ }
+ },
+
+ redrawRoutingIcons: function(){
+ settings.layerRouteMarker.clearMarkers();
+ settings.layerRouteMarker.addMarker(settings.routing_start);
+ settings.layerRouteMarker.addMarker(settings.routing_end);
+ for (var k=0;k<settings.routing_steps.length;k++){
+ settings.layerRouteMarker.addMarker(settings.routing_steps[k]);
+ }
+ },
+
+ // 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('label').html(step_label).addClass('step_label');
+ cloned.children("#nominatim_start_label").attr('id', c_id+'_label'
+ ).html('');
+ cloned.children('label.nominatim-label').attr('for', ""
+ ).removeClass('step_label');
+ 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[name=transport]:checked').val();
+ if(transport){
+ uri += transport + "/"
+ }
+ var speed = $('#id_speed option:selected').val();
+ if(!speed){
+ var speed = $('input[name=speed]:checked').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();
+ methods.redrawRoutingIcons();
+ methods.hideMessage();
+ if (!data.features.length){
+ methods.displayMessage(routing_fail_message);
+ return;
+ }
+ for (var i = 0; i < data.features.length; i++) {
+ var feat = data.features[i];
+ if(feat.type == 'LineString'){
+ settings.current_route_feature =
+ methods.putRoute(feat);
+ } else {
+ var lonlat = new OpenLayers.LonLat(
+ feat.geometry.coordinates[0],
+ feat.geometry.coordinates[1]);
+ lonlat.transform(EPSG_DISPLAY_PROJECTION,
+ settings.map.getProjectionObject());
+ var icon_height = feat.properties.icon_height;
+ var icon_width = feat.properties.icon_width;
+ var marker = new OpenLayers.Marker(lonlat,
+ new OpenLayers.Icon(
+ feat.properties.icon_path,
+ new OpenLayers.Size(icon_width,
+ icon_height),
+ new OpenLayers.Pixel(
+ -(icon_width/2),
+ -icon_height))
+ );
+ settings.layerRouteMarker.addMarker(marker);
+ }
+ }
+ if (data.message) methods.displayMessage(data.message);
+ settings.map.zoomToExtent(
+ settings.layerRoute.getDataExtent());
+ settings.map.zoomOut();
+ $('#id_transport_it').find('span'
+ ).removeClass('selected');
+ $('#id_transport_it_'+data.properties.transport
+ ).addClass('selected');
+ $('#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 (jqXHR, textStatus, errorThrown) {
+ methods.redrawRoutingIcons();
+ methods.hideMessage();
+ console.log(errorThrown);
+ console.log(textStatus);
+ settings.layerRoute.removeAllFeatures();
+ methods.displayMessage(routing_fail_message);
+ }
+ });
+
+ },
+ /*
+ 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,25 +1235,34 @@ 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>");
}
}
+ }
});
},
+ displayMessage: function(message){
+ if (!$('#chimere_message').length) return;
+ $('#chimere_message').html(message);
+ $('#chimere_message').dialog('open');
+ },
+ hideMessage: function(message){
+ if (!$('#chimere_message').length) return;
+ $('#chimere_message').dialog('close');
+ },
center_on_feature: function(feature) {
var f = get_or_set(feature, settings.current_feature);
if (f)
@@ -511,28 +1284,64 @@ 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();
+ var category_plus = STATIC_URL + "chimere/img/plus.png";
+ var category_minus = STATIC_URL + "chimere/img/minus.png";
+ if (settings.category_accordion){
+ $("#categories ul.subcategories").hide();
+ $("#categories img.toggle_category").attr("src", category_plus);
+ $("#categories .main_category").addClass("toggle_plus");
+ $("#categories .main_category").removeClass("toggle_minus");
+ }
// Put a minus image
- $("#categories img.toggle_category").attr("src", STATIC_URL + "chimere/img/plus.png");
if (!was_visible)
{
// Show the subcategories
$("#maincategory_" + id).toggle();
+ $("#maincategory_" + id).parent().addClass("toggle_minus");
+ $("#maincategory_" + id).parent().removeClass("toggle_plus");
// Put a plus image
- $("#maincategory_img_" + id).attr("src", STATIC_URL + "chimere/img/minus.png");
+ $("#maincategory_img_" + id).attr("src", category_minus);
settings.current_category = id;
}
+ if (!settings.category_accordion && was_visible)
+ {
+ $("#maincategory_" + id).toggle();
+ $("#maincategory_" + id).parent().addClass("toggle_plus");
+ $("#maincategory_" + id).parent().removeClass("toggle_minus");
+ // Put a minus image
+ $("#maincategory_img_" + id).attr("src", category_plus);
+ }
},
zoomToCurrentExtent: function(){
/* zoom to current extent */
@@ -564,17 +1373,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 +1387,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();
@@ -637,19 +1464,25 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
if (bounds) settings.map.zoomToExtent(bounds);
},
hidePopup: function (evt) {
+ $('#'+settings.marker_hover_id).hide();
if (settings.hide_popup_fx) {
settings.hide_popup_fx(evt, settings)
}
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();
+ if(evt)
+ settings.map.events.triggerEvent('click', evt);
+ return true;
+ }
}
}
+ return false;
},
saveExtent: function(){
var extent_key = 'MAP_EXTENT';
@@ -785,8 +1618,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) {
@@ -813,7 +1661,6 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
else {
$.error( 'Method ' + thing + ' does not exist on jQuery.chimere' );
}
-
return this;
};
})( jQuery );
diff --git a/chimere/static/chimere/js/nominatim-widget.js b/chimere/static/chimere/js/nominatim-widget.js
new file mode 100644
index 0000000..99f7034
--- /dev/null
+++ b/chimere/static/chimere/js/nominatim-widget.js
@@ -0,0 +1,46 @@
+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..34ca46c
--- /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_div ul").append(detached_speeds[i]);
+ }
+ detached_speeds = Array();
+ $("#id_speed_div input[type=radio]").each(function(){
+ if(!$(this).val().match(transport) && $(this).val()){
+ detached_speeds.push($(this).parent().parent().detach());
+ }
+ });
+ $('#id_speed_div').val('');
+ if($("#id_speed_div input[type=radio]").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/tasks.py b/chimere/tasks.py
index a74dce8..02e32a4 100644
--- a/chimere/tasks.py
+++ b/chimere/tasks.py
@@ -33,7 +33,7 @@ from external_utils import OsmApi
def single_instance_task(timeout):
def task_exc(func):
def wrapper(*args, **kwargs):
- return func()
+ return func(*args, **kwargs)
return wrapper
return task_exc
diff --git a/chimere/templates/base.html b/chimere/templates/base.html
index 2a50fc3..619aa0b 100644
--- a/chimere/templates/base.html
+++ b/chimere/templates/base.html
@@ -2,30 +2,30 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
- <title>{% block title %}Chimère{% endblock %}</title>
+ <title>{% block title %}{{PROJECT_NAME}}{% endblock %}</title>
{% block extra_head %}
{% 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 a1a0b39..620c84f 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
index 0662750..50bddd5 100644
--- a/chimere/templates/chimere/blocks/alternate_multimedia.html
+++ b/chimere/templates/chimere/blocks/alternate_multimedia.html
@@ -14,13 +14,14 @@
{% for formset in formsets %}
{% for frm in formset%}
{% if not forloop.last %}
- <li>
+ <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.field.value }}</span>
+ <span class='value'>{{ field.value }}</span>
+ <img class='remove-media' alt='Remove media' src='{{STATIC_URL}}chimere/img/close.png'/>
{% endif %}
<span class='hidden'>{{field}}</span>
{% endfor %}
@@ -31,7 +32,7 @@
</ul>
<button id='add_multimedia_list'>{% trans "Add" %}</button>
</div>
- <div id='multimedia_form' title="{% trans "Add multimedia from your computer or a site"%}">
+ <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">
@@ -51,6 +52,9 @@
</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,
@@ -110,20 +114,33 @@
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 += " <img class='remove-media' alt='Remove media' src='{{STATIC_URL}}chimere/img/close.png'/>";
+ content += " <img class='remove-media' alt='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 item cannot be recopied - security issue
- // so it is hiden then a new one is added
- //$('#picture-'+current_image_number+'-picture').hide();
+ // 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);
+ 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();
diff --git a/chimere/templates/chimere/blocks/categories.html b/chimere/templates/chimere/blocks/categories.html
index 8c8a8f8..d87fe4d 100644
--- a/chimere/templates/chimere/blocks/categories.html
+++ b/chimere/templates/chimere/blocks/categories.html
@@ -1,14 +1,14 @@
{% load i18n %}
<ul id='ul_categories'>
{% for category, lst_sub_categories in sub_categories %}
- <li>
+ <li class='main_category'>
<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}}'>
+ <li id='li_sub_{{sub_category.id}}' class='subcategory'>
<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}}'/>
@@ -27,5 +27,5 @@
<li id='display_submited'>
<input type='checkbox' name='display_submited' id='display_submited_check'/> {% trans "Display markers and routes waiting for validation"%}
</li>
- {% endif %}
+ {% endfor %}
</ul>
diff --git a/chimere/templates/chimere/blocks/head_chimere.html b/chimere/templates/chimere/blocks/head_chimere.html
index 4031ac4..147d05b 100644
--- a/chimere/templates/chimere/blocks/head_chimere.html
+++ b/chimere/templates/chimere/blocks/head_chimere.html
@@ -1,16 +1,18 @@
{% for css_url in OSM_CSS_URLS %}
<link rel="stylesheet" href="{{ css_url }}" />{% endfor %}
{% for js_url in OSM_JS_URLS %}
-<script src="{{ js_url }}"></script>{% endfor %}
-<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script>
+<script src="{{ js_url }}" type="text/javascript"></script>{% endfor %}
+{% if routing %}<script src="{{ STATIC_URL }}chimere/js/routing-widget.js" type="text/javascript"></script>{% endif %}
+<script src="{{ STATIC_URL }}chimere/js/clustering.js" type="text/javascript"></script>
+<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js" type="text/javascript"></script>
<script type="text/javascript">
/* Global variables */
var STATIC_URL = static_url = "{{ STATIC_URL }}";
var MEDIA_URL = media_path = "{{ MEDIA_URL }}";
var extra_url = "{{ EXTRA_URL }}";
</script>
-<script src="{{ STATIC_URL }}chimere/js/utils.js"></script>
-<script src="{{ STATIC_URL }}chimere/js/base.js"></script>
+<script src="{{ STATIC_URL }}chimere/js/utils.js" type="text/javascript"></script>
+<script src="{{ STATIC_URL }}chimere/js/base.js" type="text/javascript"></script>
<script type="text/javascript">
var DEFAULT_ZOOM = {{ DEFAULT_ZOOM }};
var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:{{ EPSG_DISPLAY_PROJECTION }}');
@@ -23,8 +25,9 @@
var area_name = '{{ area_name }}';{% endif %}
$(function() {$( ".draggable" ).draggable({handle:"h2"});});
+ var get_share_url = '{% url chimere:get-share-url %}';
</script>
-<style>
+<style type="text/css">
.olControlPanPanel div {
background-image: url({{STATIC_URL}}chimere/img/pan-panel.png);
}
diff --git a/chimere/templates/chimere/blocks/head_form.html b/chimere/templates/chimere/blocks/head_form.html
new file mode 100644
index 0000000..032a711
--- /dev/null
+++ b/chimere/templates/chimere/blocks/head_form.html
@@ -0,0 +1,2 @@
+
+<script src="{{ TINYMCE_URL }}tiny_mce.js" type="text/javascript"></script>
diff --git a/chimere/templates/chimere/blocks/head_jme.html b/chimere/templates/chimere/blocks/head_jme.html
index a3fe683..bf31e6f 100644
--- a/chimere/templates/chimere/blocks/head_jme.html
+++ b/chimere/templates/chimere/blocks/head_jme.html
@@ -1,16 +1,16 @@
<script class="jwPlayer" type="application/swf" src="{{STATIC_URL}}jme/packages/player.swf"></script>
-<script src="{{STATIC_URL}}jme/packages/mm.full.min.js"></script>
-<script src="{{STATIC_URL}}jme/utils/jmeEmbedControls.js"></script>
+<script src="{{STATIC_URL}}jme/packages/mm.full.min.js" type="text/javascript"></script>
+<script src="{{STATIC_URL}}jme/utils/jmeEmbedControls.js" type="text/javascript"></script>
<link rel="stylesheet" href="{{STATIC_URL}}jme/css/player-controls.css" />
<!-- a11y-slider -->
-<script src="{{STATIC_URL}}jme/utils/a11y-slider.ext.js"></script>
+<script src="{{STATIC_URL}}jme/utils/a11y-slider.ext.js" type="text/javascript"></script>
<!-- workaround for flash bug in ie -->
-<script src="{{STATIC_URL}}jme/utils/reinitjme.js"></script>
+<script src="{{STATIC_URL}}jme/utils/reinitjme.js" type="text/javascript"></script>
<!-- fullwindow plugin -->
<script class="jme-jwPlayer" type="application/swf" src="{{STATIC_URL}}jme/packages/jmefs.swf"></script>
-<script src="{{STATIC_URL}}jme/plugins/fullwindow.js"></script>
+<script src="{{STATIC_URL}}jme/plugins/fullwindow.js" type="text/javascript"></script>
<!-- useractivity -->
-<script src="{{STATIC_URL}}jme/utils/useractivity.js"></script>
+<script src="{{STATIC_URL}}jme/utils/useractivity.js" type="text/javascript"></script>
<!-- prettyPhoto not jme but media -->
<link rel="stylesheet" href="{{STATIC_URL}}prettyPhoto/css/prettyPhoto.css" />
diff --git a/chimere/templates/chimere/blocks/map.html b/chimere/templates/chimere/blocks/map.html
index 886c50b..6304e13 100644
--- a/chimere/templates/chimere/blocks/map.html
+++ b/chimere/templates/chimere/blocks/map.html
@@ -5,10 +5,16 @@
</script>
<div id="waiting">
<div id="waiting-content">
- <img src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/>
+ <img alt='Ajax loader' src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/>
<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 cc7c5d3..a360a9e 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 class='media-img' alt="{{multimedia_item.name}}" src='{{multimedia_item.thumbnailfile.url}}'/></a>{% endif %}
+<a rel="prettyPhoto" href='{{multimedia_item.picture.url}}' ><img class='media-img 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..db97191
--- /dev/null
+++ b/chimere/templates/chimere/blocks/routing.html
@@ -0,0 +1,48 @@
+{% 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'>
+<!--
+var step_label = "{% trans "Step" %}";
+var routing_fail_message = "{{routing_fail_message|safe}}";
+// -->
+</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 33ddfd1..134c03e 100644
--- a/chimere/templates/chimere/detail.html
+++ b/chimere/templates/chimere/detail.html
@@ -35,14 +35,7 @@
<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 class='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..9732005 100644
--- a/chimere/templates/chimere/edit.html
+++ b/chimere/templates/chimere/edit.html
@@ -132,14 +132,15 @@
</div>
<div id='upload_in_progress'>
<p>{% trans "Upload in progress. Please wait..." %}</p>
- <p><img src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/></p>
+ <p><img alt='Ajax loader' src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/></p>
</div>
<script text='text/javascript'>
$( "#upload_in_progress" ).dialog({
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 76f796d..b7aa868 100644
--- a/chimere/templates/chimere/main_map.html
+++ b/chimere/templates/chimere/main_map.html
@@ -4,7 +4,7 @@
{% head_jquery %}
{% head_chimere %}
{% head_jme %}
-<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js"></script>
+<script src="{{ STATIC_URL }}chimere/js/jquery.chimere.js" type="text/javascript"></script>
{{ block.super }}
{% endblock %}
{% block message_edit %}{% endblock %}
@@ -18,20 +18,36 @@
</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>
<a id='simple_button' class='ui-widget ui-button ui-state-default ui-corner-all' href='{% url chimere:simple_index area_name_slash %}'>{% trans "Simple map" %}</a>
</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' %}
+ <div id='chimere_message'></div>
+ <script type='text/javascript'>
+ $(function(){$('#chimere_message').dialog({'autoOpen':false});});
+ </script>
{% endblock %}
{% block footer %}
<p class='map-footer'>{% include "chimere/blocks/footer.html" %}</p>
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index 2b806ca..b73413a 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -10,6 +10,8 @@ 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 django.template.loader import render_to_string
from chimere.models import Marker, Area, News, SubCategory, MultimediaType
@@ -39,22 +41,9 @@ def submited(context):
return {"edit_url":reverse('chimere:edit'),
"index_url":reverse('chimere:index')}
-@register.inclusion_tag('chimere/blocks/welcome.html', takes_context=True)
-def display_news(context, display=False):
- """
- Welcome message and active news.
- """
- area = None
- context_data = {'display':display}
- 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
+def get_news(area=None):
# Retrieve news
- news = News.objects.filter(available=True)
+ 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())
@@ -62,13 +51,50 @@ def display_news(context, display=False):
# Retrieve active markers
today = date.today()
after = today + timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT)
- q = Marker.objects.filter(status='A', start_date__lte=after
- ).filter(Q(end_date__gte=today)|Q(end_date__isnull=True))
+ q = Q(end_date__gte=today) | Q(end_date__isnull=True)
+ q = Marker.objects.filter(status='A', start_date__lte=after,
+ is_front_page=True).filter(q)
if area:
q = q.filter(area.getIncludeMarker())
news += list(q)
news.sort(key=lambda x:x.date, reverse=True)
- context_data['news_lst'] = news
+ return news
+
+@register.inclusion_tag('chimere/blocks/welcome.html', takes_context=True)
+def display_welcome(context, display=False, title=''):
+ """
+ Welcome message and active news.
+ """
+ context_data = {'display':display}
+ 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)[: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
+ context_data = {'STATIC_URL':settings.STATIC_URL}
+ 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)
return context_data
@register.inclusion_tag('chimere/blocks/head_jquery.html', takes_context=True)
@@ -117,9 +143,36 @@ 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'],
+ 'routing_fail_message':_(settings.CHIMERE_ROUTING_FAIL_MESSAGE
+ ).replace('\n', '\\n'),
+ 'routing_transport':context['routing_transport']}
+ 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,
@@ -128,12 +181,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:
@@ -145,7 +202,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((
@@ -155,11 +215,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();
@@ -167,17 +226,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:
@@ -186,7 +248,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:
@@ -194,7 +257,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',
@@ -216,6 +279,16 @@ def get_tinyfied_url(marker, area_name=''):
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='', email_only=False):
+ context['STATIC_URL'] = settings.STATIC_URL
+ context['name'] = name
+ context['email_only'] = email_only
+ context['share_networks'] = [(defaultfilters.slugify(name), url, icon)
+ for name, url, icon in settings.CHIMERE_SHARE_NETWORKS]
+ return context
+
@register.filter(name='ol_map')
def ol_map(item, arg='map_id'):
geom, geom_type = None, None
diff --git a/chimere/tests.py b/chimere/tests.py
index d3dc3de..af342c5 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -4,6 +4,7 @@
import datetime
import lxml.etree
import os
+import simplejson as json
test_path = os.path.abspath(__file__)
test_dir_path = os.path.dirname(test_path) + os.sep
@@ -90,12 +91,14 @@ def marker_setup(sub_categories=[]):
markers.append(marker_1)
marker_2 = Marker.objects.create(name="Marker 2", status='A',
point='SRID=4326;POINT(-3.5 48.4)',
+ is_front_page=True,
available_date=current_date,
start_date=current_date)
marker_2.categories.add(sub_categories[1])
markers.append(marker_2)
marker_3 = Marker.objects.create(name="Marker 3", status='A',
point='SRID=4326;POINT(-4.5 48.45)',
+ is_front_page=True,
available_date=current_date - datetime.timedelta(days=60),
start_date=current_date - datetime.timedelta(days=60),
end_date=current_date - datetime.timedelta(days=30))
@@ -240,8 +243,14 @@ class OSMImporterTest(TestCase, ImporterTest):
importer2 = Importer.objects.create(importer_type='OSM',
source=test_dir_path+'tests/sample_ways.osm')
importer2.categories.add(subcategories[1])
+ importer3 = Importer.objects.create(importer_type='OSM',
+ source='http://open.mapquestapi.com/xapi/api/0.6/way'\
+ '[highway=motorway]'\
+ '[bbox=2.0393839939136975,48.68908639634696,'\
+ '2.3140421970277316,48.790972349390415]')
- self.marker_importers = [(importer1, 19), (importer2, 8)]
+ self.marker_importers = [(importer1, 19), (importer2, 8),
+ (importer3, None)]
class GeoRSSImporterTest(TestCase, ImporterTest):
def setUp(self):
@@ -381,15 +390,22 @@ class DynamicCategoryTest(TestCase):
cats = self.areas[2].getCategories(status='A', filter_available=True)
self.assertEqual(len(cats), 2)
+ def test_get_all_categories(self):
+ url = reverse('chimere:get_all_categories')
+ response = self.client.get(url)
+ self.assertEqual(200, response.status_code)
+ cats = json.loads(response.content)['categories']
+ self.assertEqual(len(cats), 2)
+
class NewsTest(TestCase):
def setUp(self):
self.areas = areas_setup()
self.markers = marker_setup()
self.news = []
- self.news.append(News.objects.create(title=u"Test news 1",
- available=True))
- self.news.append(News.objects.create(title=u"Test news 2",
- available=False))
+ self.news.append(News.objects.create(is_front_page=True,
+ title=u"Test news 1", available=True))
+ self.news.append(News.objects.create(is_front_page=True,
+ title=u"Test news 2", available=False))
def test_news_display(self):
context = display_news(Context({}))
diff --git a/chimere/urls.py b/chimere/urls.py
index 9d4018a..aa95921 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,20 @@ urlpatterns += patterns('chimere.views',
name="getgeoobjects"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getAvailableCategories/$',
'get_available_categories', name="get_categories"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getAllCategories/$',
+ 'get_all_categories', name="get_all_categories"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getCategory/(?P<category_id>\d+)/?$',
+ 'getCategory', name="get_category"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?get-share-url/(?P<network>\w+)?$',
+ '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/utils.py b/chimere/utils.py
index 8a9855a..0d97757 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -81,6 +81,7 @@ class ImportManager:
'import_key__icontains':'%s:%s;' % (key, import_key),
'import_source':self.importer_instance.source}
try:
+ item = None
if pk:
ref_item = cls.objects.get(pk=pk)
else:
@@ -490,10 +491,10 @@ class CSVManager(ImportManager):
return (0, 0, msg)
reader = csv.reader(source, delimiter=';', quotechar='"')
prop_cols = []
- for pm in Marker.properties():
+ for pm in Marker.all_properties():
prop_cols.append((pm.name, pm.getAttrName(),
pm.getAttrName()+'_set'))
- cols = self.COLS + prop_cols
+ cols = list(self.COLS) + prop_cols
datas = []
for idx, row in enumerate(reader):
if not idx: # first row
@@ -505,7 +506,7 @@ class CSVManager(ImportManager):
if len(row) < len(cols):
continue
pk, name, cats, state = row[0], row[1], row[2], row[3]
- description, geom = row[4], row[5]
+ description, geom = row[4], row[5].upper()
COL_INDEX = 6
dct = {'description':description,
'name':name,
@@ -520,7 +521,7 @@ class CSVManager(ImportManager):
dct['route'] = geom
else:
continue
- import_key = pk if pk else name
+ import_key = pk if pk else name.decode('utf-8')
item, updated, created = self.create_or_update_item(cls, dct,
import_key, pk=pk)
if updated:
@@ -538,8 +539,8 @@ class CSVManager(ImportManager):
def export(cls, queryset):
dct = {'description':unicode(datetime.date.today()), 'data':[]}
cls_name = queryset.model.__name__.lower()
- cols = cls.COLS
- for pm in queryset.model.properties():
+ cols = list(cls.COLS)
+ for pm in queryset.model.all_properties():
cols.append((pm.name, pm.getAttrName(), pm.getAttrName()+'_set'))
header = [col[0] for col in cols]
dct['data'].append(header)
diff --git a/chimere/views.py b/chimere/views.py
index db63809..b40e58a 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -29,27 +29,31 @@ from itertools import groupby
import re
from django.conf import settings
+from django.contrib.gis.geos import GEOSGeometry
+from django.contrib.gis.gdal.error import OGRException
+from django.contrib.gis.measure import D
from django.core import serializers
from django.core.exceptions import ObjectDoesNotExist
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.utils import simplejson
+from django.template import loader, RequestContext, defaultfilters
+from django.utils import simplejson as json
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://'
@@ -101,9 +105,36 @@ def get_base_response(area_name=""):
if area and area.dynamic_categories else False
base_response_dct['JQUERY_JS_URLS'] = settings.JQUERY_JS_URLS
base_response_dct['JQUERY_CSS_URLS'] = settings.JQUERY_CSS_URLS
+ base_response_dct['PROJECT_NAME'] = settings.PROJECT_NAME
return base_response_dct, None
-def index(request, area_name=None, default_area=None, simple=False):
+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,
+ get_response=False):
"""
Main page
"""
@@ -123,18 +154,27 @@ 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['routing_transport'] = settings.CHIMERE_ROUTING_TRANSPORT
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'
+ if get_response:
+ return tpl, response_dct
return render_to_response(tpl, response_dct,
context_instance=RequestContext(request))
@@ -268,7 +308,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,
@@ -347,7 +387,7 @@ def processRouteFile(request, area_name='', file_id=None):
route = route_file.route
if not route:
return HttpResponse(status=500)
- return HttpResponse('('+simplejson.dumps({'wkt':route,
+ return HttpResponse('(' + json.dumps({'wkt':route,
'file_id':file_id})+')',
'application/javascript', status=200)
except OSError as e:
@@ -376,7 +416,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,
@@ -404,7 +444,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))
@@ -415,7 +456,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))
@@ -443,11 +485,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
@@ -464,15 +527,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'] = settings.CONTACT_EMAIL
+ 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
# to be sure there is unique IDs during a browsing
response_dct['time_now'] = datetime.datetime.now().strftime('%H%M%S')
response_dct['dated'] = settings.CHIMERE_DAYS_BEFORE_EVENT \
@@ -550,10 +612,28 @@ def getGeoObjects(request, area_name, category_ids, status):
data = '{"type": "FeatureCollection", "features":[%s]}' % ",".join(jsons)
return HttpResponse(data)
+def get_all_categories(request, area_name=None):
+ '''
+ Get all available categories in JSON
+ '''
+ context_data, redir = get_base_response(area_name)
+ area = context_data["area"]
+ subcategories = []
+ if area:
+ subcategories = list(area.getCategories('A',
+ area_name=context_data['area_name']))
+ else:
+ categories = SubCategory.getAvailable()
+ for cat, subcats in categories:
+ subcategories += subcats
+ subcats = [subcat.getJSONDict() for subcat in subcategories]
+ jsons = json.dumps({'categories':subcats})
+ return HttpResponse(jsons)
+
def get_available_categories(request, area_name=None, area=None, status='A',
force=None):
'''
- Get categories for a designed area
+ Get category menu for a designed area
'''
context_data, redir = get_base_response(area_name)
area = context_data["area"]
@@ -598,6 +678,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
@@ -638,6 +728,72 @@ 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 = json.JSONEncoder()
+ total = jsonencoder.encode(total)
+ desc = jsonencoder.encode(desc)
+
+ # get associated POIs
+ try:
+ route = GEOSGeometry(jsons[0])
+ except OGRException:
+ return HttpResponse(_(u"Bad geometry"), status=500)
+ cats = SubCategory.objects.filter(routing_warn=True)
+ message = ''
+ if cats.count():
+ st_string = '{"type":"Feature", "geometry":{ "type": "Point", '\
+ '"coordinates": [ %f, %f ] }, "properties":{"icon_path":"%s",'\
+ '"icon_width":%d, "icon_height":%d}}'
+ points = [(m.point, m.categories.all()[0].icon)
+ for m in list(Marker.objects.filter(status='A',
+ categories__in=cats, point__distance_lte=(route, D(m=15))
+ ).all())]
+ for pt, icon in points:
+ st = st_string % (pt.x, pt.y, icon.image.url, icon.image.width,
+ icon.image.height)
+ jsons.append(st)
+ routes = Route.objects.filter(status='A', categories__in=cats,
+ route__crosses=route)
+ intersect = False
+ for rout in routes.intersection(route):
+ pts = rout.intersection
+ icon = rout.categories.all()[0].icon
+ if hasattr(pts, 'x'):
+ pts = [pts]
+ if pts:
+ pt = pts[0]
+ st = st_string % (pt.x, pt.y, icon.image.url, icon.image.width,
+ icon.image.height)
+ jsons.append(st)
+ if points or intersect:
+ message = getattr(settings, 'CHIMERE_ROUTING_WARN_MESSAGE', '')
+ if message:
+ message = ', "message":%s' % jsonencoder.encode(
+ "%s" % _(message))
+ else:
+ message = ''
+ data = '{"properties":{"transport":%s, "total":%s, "description":%s}, '\
+ '"type": "FeatureCollection", "features":[%s]%s}' % (
+ jsonencoder.encode(transport), total, desc, ",".join(jsons),
+ message)
+ return HttpResponse(data)
+
def rss(request, area_name=''):
'''
Redirect to RSS subscription page
@@ -645,7 +801,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 4cccf32..481a5c9 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 _
@@ -70,18 +73,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):
@@ -103,6 +111,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 ImporterChoicesWidget(forms.Select):
'''
Importer select widget.
@@ -125,6 +168,33 @@ class TextareaWidgetBase(forms.Textarea):
rendered = super(TextareaWidgetBase, self).render(*args, **kwargs)
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):
"""
Manage the edition of a text using TinyMCE
@@ -151,6 +221,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
@@ -182,7 +273,11 @@ class PointChooserWidget(forms.TextInput):
else:
value = None
map_layers, default_area = get_map_layers(area_name)
+ map_layers = [js for n, js, default in map_layers]
js = """
+ var resolutions;
+ var zoomOffset;
+
OpenLayers.ImgPath = '%schimere/img/';
var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s');
var EPSG_PROJECTION = epsg_projection = new OpenLayers.Projection('EPSG:%s');
@@ -259,7 +354,11 @@ class RouteChooserWidget(forms.TextInput):
'''
tpl = getMapJS(area_name)
map_layers, default_area = get_map_layers(area_name)
+ map_layers = [js for nm, js, default in map_layers]
js = """
+ var resolutions;
+ var zoomOffset;
+
var extra_url = "%s";
OpenLayers.ImgPath = '%schimere/img/';
var EPSG_DISPLAY_PROJECTION = epsg_display_projection = new OpenLayers.Projection('EPSG:%s');
@@ -272,7 +371,7 @@ class RouteChooserWidget(forms.TextInput):
chimere_init_options['edition'] = true;
chimere_init_options['edition_type_is_route'] = true;
chimere_init_options["checked_categories"] = [];
- """ % ( reverse("chimere:index"), settings.STATIC_URL,
+ """ % (reverse("chimere:index"), settings.STATIC_URL,
settings.CHIMERE_EPSG_DISPLAY_PROJECTION,
settings.CHIMERE_EPSG_PROJECTION, settings.CHIMERE_DEFAULT_CENTER,
settings.CHIMERE_DEFAULT_ZOOM, ", ".join(map_layers))
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 c48a847..f89a9b8 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/'
@@ -76,10 +78,41 @@ CHIMERE_HIDE_PROPERTYMODEL = False
# 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/',
+}
+
+CHIMERE_ROUTING_FAIL_MESSAGE = _(u"Routing engine has failed to find an "
+ u"appropriate route. Start point or end point may be too far from "
+ u"an existing path.")
+
+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 = (