diff options
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 |
commit | 07eff011922affd5733814c13236fe149cd64fd1 (patch) | |
tree | a642e391b82ec397e6648e1512281e6171271fe5 | |
parent | fda62e9b16ff53c20880bd2ebbe34ce55d633c2d (diff) | |
download | Chimè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.py | 288 | ||||
-rw-r--r-- | chimere/models.py | 18 | ||||
-rw-r--r-- | chimere/static/chimere/css/forms.css | 5 | ||||
-rw-r--r-- | chimere/static/chimere/js/edit_area.js | 23 | ||||
-rw-r--r-- | chimere/static/chimere/js/importer_interface.js | 25 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/live_coordinates.html | 51 | ||||
-rw-r--r-- | chimere/utils.py | 15 | ||||
-rw-r--r-- | chimere/widgets.py | 27 |
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): |