summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2013-10-29 20:06:11 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2013-10-29 20:12:36 +0100
commit07eff011922affd5733814c13236fe149cd64fd1 (patch)
treea642e391b82ec397e6648e1512281e6171271fe5
parentfda62e9b16ff53c20880bd2ebbe34ce55d633c2d (diff)
downloadChimère-07eff011922affd5733814c13236fe149cd64fd1.tar.bz2
Chimère-07eff011922affd5733814c13236fe149cd64fd1.zip
Importer HTML-XSLT: model - admin
* new fields for Importer model: alt source file (2 XSLT files can be used), default location (these pages doesn't provide adresses) * adapt admin to manage 2 type of hidden OpenLayers maps on the same page
-rw-r--r--chimere/migrations/0004_auto__add_field_importer_source_file_alt__add_field_importer_default_l.py288
-rw-r--r--chimere/models.py18
-rw-r--r--chimere/static/chimere/css/forms.css5
-rw-r--r--chimere/static/chimere/js/edit_area.js23
-rw-r--r--chimere/static/chimere/js/importer_interface.js25
-rw-r--r--chimere/templates/chimere/blocks/live_coordinates.html51
-rw-r--r--chimere/utils.py15
-rw-r--r--chimere/widgets.py27
8 files changed, 397 insertions, 55 deletions
diff --git a/chimere/migrations/0004_auto__add_field_importer_source_file_alt__add_field_importer_default_l.py b/chimere/migrations/0004_auto__add_field_importer_source_file_alt__add_field_importer_default_l.py
new file mode 100644
index 0000000..85ef566
--- /dev/null
+++ b/chimere/migrations/0004_auto__add_field_importer_source_file_alt__add_field_importer_default_l.py
@@ -0,0 +1,288 @@
+# -*- 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.source_file_alt'
+ db.add_column('chimere_importer', 'source_file_alt',
+ self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True, blank=True),
+ keep_default=False)
+
+ # Adding field 'Importer.default_localisation'
+ db.add_column('chimere_importer', 'default_localisation',
+ self.gf('chimere.widgets.PointField')(null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Importer.source_file_alt'
+ db.delete_column('chimere_importer', 'source_file_alt')
+
+ # Deleting field 'Importer.default_localisation'
+ db.delete_column('chimere_importer', 'default_localisation')
+
+
+ models = {
+ 'chimere.aggregatedroute': {
+ 'Meta': {'object_name': 'AggregatedRoute', 'db_table': "'chimere_aggregated_routes'", 'managed': 'False'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'route': ('django.contrib.gis.db.models.fields.MultiLineStringField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'subcategory': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.SubCategory']"})
+ },
+ '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_description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_localisation': ('chimere.widgets.PointField', [], {'null': 'True', 'blank': 'True'}),
+ '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'}),
+ 'get_description': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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'}),
+ 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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'}),
+ 'source_file_alt': ('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']", 'null': 'True', 'blank': 'True'}),
+ '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'] \ No newline at end of file
diff --git a/chimere/models.py b/chimere/models.py
index 2c90d67..952594c 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -41,11 +41,12 @@ from django.db.models.signals import post_save, pre_save, m2m_changed
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
-from chimere.widgets import PointField, RouteField, SelectMultipleField, \
- TextareaWidget, DatePickerWidget
+from chimere.widgets import HiddenPointChooserWidget, PointField, RouteField, \
+ SelectMultipleField, TextareaWidget, \
+ DatePickerWidget
from chimere.managers import BaseGeoManager
from chimere.utils import KMLManager, OSMManager, ShapefileManager, \
- GeoRSSManager, CSVManager
+ GeoRSSManager, CSVManager, HtmlXsltManager
class Page(models.Model):
"""Simple extra pages
@@ -302,14 +303,16 @@ IMPORTERS = {'KML':KMLManager,
'OSM':OSMManager,
'SHP':ShapefileManager,
'RSS':GeoRSSManager,
- 'CSV':CSVManager
+ 'CSV':CSVManager,
+ 'XSLT':HtmlXsltManager
}
IMPORTER_CHOICES = (('KML', 'KML'),
('OSM', 'OSM'),
('SHP', 'Shapefile'),
('RSS', 'GeoRSS'),
- ('CSV', 'CSV')
+ ('CSV', 'CSV'),
+ ('XSLT', 'HTML-XSLT')
)
IMPORTER_CHOICES_DICT = dict(IMPORTER_CHOICES)
@@ -326,6 +329,8 @@ class Importer(models.Model):
blank=True, null=True)
source_file = models.FileField(_(u"Source file"),
upload_to='import_files', blank=True, null=True)
+ source_file_alt = models.FileField(_(u"Alt source file"),
+ upload_to='import_files', blank=True, null=True)
default_name = models.CharField(_(u"Name by default"), max_length=200,
blank=True, null=True)
srid = models.IntegerField(_(u"SRID"), blank=True, null=True)
@@ -346,6 +351,9 @@ class Importer(models.Model):
blank=True, null=True)
associate_marker_to_way = models.BooleanField(_(u"Automatically associate "\
u"a marker to a way"), default=False)
+ default_localisation = PointField(_(u"Default localisation"),
+ srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION,
+ blank=True, null=True, widget=HiddenPointChooserWidget)
class Meta:
verbose_name = _(u"Importer")
diff --git a/chimere/static/chimere/css/forms.css b/chimere/static/chimere/css/forms.css
index 7ceaa58..2c852d7 100644
--- a/chimere/static/chimere/css/forms.css
+++ b/chimere/static/chimere/css/forms.css
@@ -35,14 +35,15 @@ div.bottomform{
width: 100%;
}
-#map_edit{
+#map_edit, #map_edit_area{
margin:0;
border: 1px solid black;
width:100%;
height:350px;
}
-#map_edit #OpenLayers_Control_MaximizeDiv{
+#map_edit #OpenLayers_Control_MaximizeDiv,
+#map_edit_area #OpenLayers_Control_MaximizeDiv{
display:none;
}
diff --git a/chimere/static/chimere/js/edit_area.js b/chimere/static/chimere/js/edit_area.js
index 9c3384f..c2faa11 100644
--- a/chimere/static/chimere/js/edit_area.js
+++ b/chimere/static/chimere/js/edit_area.js
@@ -21,7 +21,7 @@ See the file COPYING for details.
var bbox_style = {fill: true, fillColor: "#FFFFFF", fillOpacity: 0.5,
stroke: true, strokeOpacity: 0.8, strokeColor: "#FF0000", strokeWidth: 2};
-var map;
+var area_map;
var box_layer;
function initForm(bounds){
@@ -44,8 +44,9 @@ function updateForm(bounds){
}
/* main initialisation function */
-function init(){
- map = new OpenLayers.Map ('map_edit', {
+function init(map_edit){
+ map_edit = typeof map_edit !== 'undefined' ? map_edit : 'map_edit';
+ area_map = new OpenLayers.Map (map_edit, {
controls:[new OpenLayers.Control.Navigation(),
new OpenLayers.Control.SimplePanZoom()],
maxResolution: 156543.0399,
@@ -54,7 +55,7 @@ function init(){
displayProjection: epsg_display_projection
} );
box_layer = new OpenLayers.Layer.Vector("Box layer");
- map.addLayers([map_layer, box_layer]);
+ area_map.addLayers([map_layer, box_layer]);
var selectControl = new OpenLayers.Control();
OpenLayers.Util.extend(selectControl, {
draw: function() {
@@ -66,9 +67,9 @@ function init(){
},
notice: function(pxbounds) {
- ltpixel = map.getLonLatFromPixel(
+ ltpixel = area_map.getLonLatFromPixel(
new OpenLayers.Pixel(pxbounds.left, pxbounds.top));
- rbpixel = map.getLonLatFromPixel(
+ rbpixel = area_map.getLonLatFromPixel(
new OpenLayers.Pixel(pxbounds.right, pxbounds.bottom));
if (ltpixel.equals(rbpixel))
return;
@@ -79,12 +80,12 @@ function init(){
updateForm(bounds);
}
});
- map.addControl(selectControl);
+ area_map.addControl(selectControl);
- map.events.register('zoomend', map, updateForm);
- map.events.register('moveend', map, updateForm);
+ area_map.events.register('zoomend', area_map, updateForm);
+ area_map.events.register('moveend', area_map, updateForm);
/* zoom to the appropriate extent */
- if (!zoomToCurrentExtent(map)){
- map.setCenter(centerLonLat, 12);
+ if (!zoomToCurrentExtent(area_map)){
+ area_map.setCenter(centerLonLat, 12);
}
}
diff --git a/chimere/static/chimere/js/importer_interface.js b/chimere/static/chimere/js/importer_interface.js
index b14b986..f66b306 100644
--- a/chimere/static/chimere/js/importer_interface.js
+++ b/chimere/static/chimere/js/importer_interface.js
@@ -15,9 +15,15 @@ django.jQuery(function($) {
CSV:new Array('field-source', 'field-source_file', 'field-default_name',
'field-origin', 'field-srid', 'field-license',
'field-categories', 'field-overwrite',
- 'field-get_description')
+ 'field-get_description'),
+ XSLT:new Array('field-source', 'field-source_file',
+ 'field-source_file_alt', 'field-default_name',
+ 'field-origin', 'field-srid', 'field-license',
+ 'field-categories', 'field-overwrite',
+ 'field-get_description', 'field-default_localisation')
}
- var map_initialized;
+ var osm_map_initialized;
+ var edit_map_initialized;
function refresh_importer_form(){
$('.form-row').not('.field-importer_type').hide();
var importer_val = $('.field-importer_type select').val();
@@ -33,20 +39,29 @@ django.jQuery(function($) {
}
if (importer_val == 'OSM'){
$('.form-row.field-filtr').addClass('field-map');
- $('#map_edit').show();
+ $('#map_edit_area').show();
if(!$('#id_source').val()){
$('#id_source').val(default_xapi);
}
$('#id_filtr').attr('readonly', true);
$('.help-osm').show();
$('.input-osm').show();
- if (!map_initialized){
+ if (!osm_map_initialized){
init_map_form();
- map_initialized = true;
+ osm_map_initialized = true;
+ }
+ }
+ else if (importer_val == 'XSLT'){
+ $('.form-row.field-filtr').addClass('field-map');
+ $('#map_edit').show();
+ if (!edit_map_initialized){
+ init_map_edit();
+ edit_map_initialized = true;
}
} else {
$('.form-row.field-filtr').removeClass('field-map');
$('#id_filtr').attr('readonly', false);
+ $('#map_edit_area').hide();
$('#map_edit').hide();
$('.help-osm').hide();
$('.input-osm').hide();
diff --git a/chimere/templates/chimere/blocks/live_coordinates.html b/chimere/templates/chimere/blocks/live_coordinates.html
index 0199630..efb9d22 100644
--- a/chimere/templates/chimere/blocks/live_coordinates.html
+++ b/chimere/templates/chimere/blocks/live_coordinates.html
@@ -22,36 +22,39 @@
<div id='live_lonlat'>
<p>
<label for='live_latitude'>{{lat}}</label>
- <input type='texte' name='live_latitude' id='live_latitude' size='8' adisabled='true' value='{{value_y|stringformat:"f"}}'/>
+ <input type='text' name='live_latitude' id='live_latitude' size='8' adisabled='true' value='{{value_y|stringformat:"f"}}'/>
</p>
<p>
<label for='live_longitude'>{{lon}}</label>
- <input type='texte' name='live_longitude' id='live_longitude' size='8' adisabled='true' value='{{value_x|stringformat:"f"}}'/>
+ <input type='text' name='live_longitude' id='live_longitude' size='8' adisabled='true' value='{{value_x|stringformat:"f"}}'/>
</p>
<input type='hidden' name='{{name}}' id='id_{{name}}' value='{{val}}'/>
<script type="text/javascript">
- $('#map_edit').chimere(chimere_init_options);
- {% if isvalue %}
- var mylonlat = new OpenLayers.LonLat({{value_x|stringformat:"f"}},
- {{value_y|stringformat:"f"}});
- $("#map_edit").chimere(
- "putEditMarker",
- mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION),
- true);
- {% endif %}
- $('#live_latitude').change(function() {
- var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(),
- $('#live_latitude').val());
- $("#map_edit").chimere("putEditMarker",
- mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false);
- $("#map_edit").chimere("settings").map.setCenter(mylonlat);
- });
- $('#live_longitude').change(function() {
- var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(),
- $('#live_latitude').val());
- $("#map_edit").chimere("putEditMarker",
- mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false);
- $("#map_edit").chimere("settings").map.setCenter(mylonlat);
+ function init_map_edit(){
+ $('#map_edit').chimere(chimere_init_options);
+ {% if isvalue %}
+ var mylonlat = new OpenLayers.LonLat({{value_x|stringformat:"f"}},
+ {{value_y|stringformat:"f"}});
+ $("#map_edit").chimere(
+ "putEditMarker",
+ mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION),
+ true);
+ {% endif %}
+ $('#live_latitude').change(function() {
+ var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(),
+ $('#live_latitude').val());
+ $("#map_edit").chimere("putEditMarker",
+ mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false);
+ $("#map_edit").chimere("settings").map.setCenter(mylonlat);
+ });
+ $('#live_longitude').change(function() {
+ var mylonlat = new OpenLayers.LonLat($('#live_longitude').val(),
+ $('#live_latitude').val());
+ $("#map_edit").chimere("putEditMarker",
+ mylonlat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION), false);
+ $("#map_edit").chimere("settings").map.setCenter(mylonlat);
});
+ }
+ {% if initialized %}init_map_edit();{% endif %}
</script>
diff --git a/chimere/utils.py b/chimere/utils.py
index f5379aa..efaf084 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -67,10 +67,10 @@ class ImportManager(object):
'name').all()])
def get(self):
- pass
+ raise NotImplementedError
def put(self, extra_args={}):
- pass
+ raise NotImplementedError
def create_or_update_item(self, cls, values, import_key, version=None,
key='', pk=None):
@@ -834,3 +834,14 @@ class OSMManager(ImportManager):
item.save()
api.ChangesetClose()
return idx+1, None
+
+class HtmlXsltManager(ImportManager):
+ def get(self):
+ u"""
+ Get data from the source
+
+ Return a tuple with:
+ - new items;
+ - updated items;
+ - error detail on error.
+ """
diff --git a/chimere/widgets.py b/chimere/widgets.py
index 4f09c62..69ba8f5 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -255,7 +255,8 @@ class PointChooserWidget(forms.TextInput):
js = settings.OSM_JS_URLS + list(settings.JQUERY_JS_URLS) + \
["%schimere/js/jquery.chimere.js" % settings.STATIC_URL]
- def render(self, name, value, attrs=None, area_name=''):
+
+ def render(self, name, value, attrs=None, area_name='', initialized=True):
'''
Render a map and latitude, longitude information field
'''
@@ -284,6 +285,7 @@ class PointChooserWidget(forms.TextInput):
'value_x': value_x,
'name': name,
'val': val,
+ 'initialized': initialized,
'isvalue': bool(value),
'default_area': "true" if default_area else "false",
}) % \
@@ -297,12 +299,25 @@ class PointChooserWidget(forms.TextInput):
)
)
+class HiddenPointChooserWidget(PointChooserWidget):
+ """
+ OpenLayers doesn't initialize well on an hidden field so specific JS
+ must be loaded.
+ """
+ def render(self, *args, **kwargs):
+ kwargs['initialized'] = False
+ return super(HiddenPointChooserWidget, self).render(*args, **kwargs)
+
class PointField(models.PointField):
'''
Set the widget for the form field
'''
+ def __init__(self, *args, **kwargs):
+ self.widget = kwargs.pop('widget') if 'widget' in kwargs else PointChooserWidget
+ return super(PointField, self).__init__(*args, **kwargs)
+
def formfield(self, **keys):
- defaults = {'widget': PointChooserWidget}
+ defaults = {'widget': self.widget}
keys.update(defaults)
return super(PointField, self).formfield(**keys)
@@ -512,19 +527,19 @@ class AreaWidget(forms.TextInput):
help_msg = _(u"Hold CTRL, click and drag to select area on the map")
tpl += u"<p class='help-osm'>%s</p>\n" % help_msg
tpl += u"<script type='text/javascript'>\n"
- tpl += u"function init_map_form (){\ninit();\n"
+ tpl += u"function init_map_form (){\ninit('map_edit_area');\n"
if value:
tpl += u"var extent = new OpenLayers.Bounds(%f, %f, %f, %f);\n"\
u"extent.transform(epsg_display_projection, epsg_projection);\n"\
u"updateForm(extent);\n"\
- u"map.zoomToExtent(extent, true);\n"\
- u"map.zoomOut();" % (upper_left_lon, upper_left_lat,
+ u"area_map.zoomToExtent(extent, true);\n"\
+ u"area_map.zoomOut();" % (upper_left_lon, upper_left_lat,
lower_right_lon, lower_right_lat)
tpl += u"}\n"
if initialized:
tpl += u"$(document).ready(function($) {init_map_form()});\n"
tpl += u"</script>\n"
- tpl += u"<div id='map_edit'>\n"
+ tpl += u"<div id='map_edit_area'>\n"
return mark_safe(tpl)
def value_from_datadict(self, data, files, name):