#!/usr/bin/env python # -*- coding: utf-8 -*- """ Extra widgets and fields """ from django import forms from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from chimere import settings from django.contrib.gis.db import models URL_OSM_JS = ["http://www.openlayers.org/api/OpenLayers.js", "http://openstreetmap.org/openlayers/OpenStreetMap.js"] def getMapJS(): '''Variable initialization for drawing the map ''' # projection, center and bounds definitions js = u"epsg_display_projection = new OpenLayers.Projection('EPSG:%d');\n" %\ settings.EPSG_DISPLAY_PROJECTION js += u"epsg_projection = new OpenLayers.Projection('EPSG:%d');\n" % \ settings.EPSG_PROJECTION js += u"var centerLonLat = new OpenLayers.LonLat(%f,\ %f).transform(epsg_display_projection, epsg_projection);\n" % \ settings.DEFAULT_CENTER js += u"var maxExtent = new OpenLayers.Bounds(%f, %f, %f, %f);\n" % \ settings.MAP_BOUNDS js += u"var media_path = '%s';\n" % settings.MEDIA_URL js = u""" """ % js return js class PointChooserWidget(forms.TextInput): """ Manage the edition of point on a map """ class Media: css = { "all": ("%sforms.css" % settings.MEDIA_URL,) } js = ["%sedit_map.js" % settings.MEDIA_URL] + URL_OSM_JS def render(self, name, value, attrs=None): ''' Render a map and latitude, longitude information field ''' val = '0' value_x, value_y = 0, 0 if value: val = str(value) if hasattr(value, 'x') and hasattr(value, 'y'): value_x, value_y = value.x, value.y elif isinstance(value, unicode) and value.startswith('POINT('): try: value_x, value_y = value.split('(')[1][:-1].split(' ') value_x, value_y = float(value_x), float(value_y) except: value = None else: value = None tpl = getMapJS() tpl += u'\n' % settings.MEDIA_URL tpl += u"""
\