Changeset 14915 in project


Ignore:
Timestamp:
06/06/09 18:58:39 (10 years ago)
Author:
azul
Message:

Letting the user change the location through the edit form with the use of a clickable map.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/3/svnwiki-googlemap/trunk/svnwiki-googlemap.scm

    r12772 r14915  
    2828           (svnwiki-repository-path env)
    2929           "Map"))
    30        ((script src (format #f "http://maps.google.com/maps?file=api&v=2&key=~A"
     30       ((script src (format #f "http://www.google.com/jsapi?key=~A"
    3131                            (svnwiki-repository-property-get
    3232                              "svnwiki:googlemap:key"
     
    3838      ((div id "map" style "width: 100%; height: 600px"))))))
    3939
    40 (define *map-js*
     40(define (googlemap-javascript env)
    4141#<<EOJS
    42 //<![CDATA[
     42svnwikiGooglemap = new Object();
     43
    4344function addMarker( point, data ) {
    4445  var file = data.getAttribute("file");
     
    6869  }
    6970}
    70 //]]>
     71
     72svnwikiGooglemap.editInitialize = function (property, id, latitude, longitude) {
     73  var mapOptions = {
     74    mapTypeId: google.maps.MapTypeId.ROADMAP,
     75    zoom: latitude && longitude ? 4 : 1,
     76    center: new google.maps.LatLng(latitude || 0, longitude || 0)
     77  };
     78  var div = svnwikiJavascript.cleanContent(document.getElementById('googlemap-' + id))
     79  div.style.height = '400px';
     80  var map = new google.maps.Map(div, mapOptions);
     81  var marker = new google.maps.Marker({map: map});
     82  if (latitude && longitude)
     83    svnwikiGooglemap.moveMarker(property, id, new google.maps.LatLng(latitude, longitude), marker);
     84  google.maps.event.addListener(map, 'click', function(event) {
     85    svnwikiGooglemap.moveMarker(property, id, event.latLng, marker);
     86  });
     87}
     88
     89svnwikiGooglemap.moveMarker = function (property, id, location, marker) {
     90  marker.set_position(location);
     91  document.getElementById('xsvnwiki-googlemap:latitude:' + id).value = location.lat().toString();
     92  document.getElementById('xsvnwiki-googlemap:longitude:' + id).value = location.lng().toString();
     93}
    7194EOJS
    7295)
     96
     97(svnwiki-extension-define 'javascript 'googlemap googlemap-javascript)
    7398
    7499(define (map-data env)
     
    83108                                   (svnwiki-make-pathname (list path-in path) file)
    84109                                   #f)
    85                               (list "svnwiki:googlemap:longitude"
     110                              (list "svnwiki:googlemap:latitude"
    86111                                    "svnwiki:googlemap:longitude"))))
    87112              (if (every string? props)
     
    97122      (format #f "</markers>"))))
    98123
    99 (svnwiki-extension-define 'update-notify 'googlemap googlemap-update)
     124;(svnwiki-extension-define 'update-notify 'googlemap googlemap-update)
     125
     126(define (edit-properties-location env property)
     127  (let-from-environment env (path-in path)
     128    (let ((id (random 10000))
     129          (props (map (lambda (name)
     130                        (svnwiki-repository-property-get
     131                          (format #f "~A:~A" (stream->string property) name)
     132                          (svnwiki-make-pathname path-in path)
     133                          #f))
     134                      '("latitude" "longitude"))))
     135      (html-stream
     136        (stream-concatenate
     137          (list->stream
     138            (map (lambda (name value)
     139                   (html-stream
     140                     ((input type "hidden"
     141                             name (svnwiki-format #f "svnwiki-properties-~A:~A" property name)
     142                             id (svnwiki-format #f "xsvnwiki-googlemap:~A:~A" name id)
     143                             value (or value "")))))
     144                 '("latitude" "longitude")
     145                 props)))
     146        ((div id (svnwiki-format #f "googlemap-~A" id) style "margin-top: 0px; padding-top: 0px; width: 100%;")
     147         (let ((link (svnwiki-format #f "javascript:svnwikiGooglemap.editInitialize('~A', ~A~{, ~A~});"
     148                                     property
     149                                     id
     150                                     (map (lambda (x) (or (and x (string->number x)) "null")) props))))
     151           (if (every (conjoin identity string->number) props)
     152             (html-stream
     153               (format #f "Location: ~{~A~^, ~} (" props)
     154               ((a href link) "modify")
     155               ")")
     156             (html-stream
     157               "Unknown location ("
     158               ((a href link) "set")
     159               ")"))))))))
     160
     161(define (save-properties-location env property)
     162  (any identity
     163       ; Must call the map to force the evaluation of the whole thing:
     164       (map (lambda (name)
     165              (save-properties-simple env (svnwiki-format #f "~A:~A" property name)))
     166            '("latitude" "longitude"))))
     167
     168(define (metadata-edit-type-register env)
     169  (let-from-environment env (return)
     170    (return `(googlemap-location ,edit-properties-location ,save-properties-location))))
     171
     172(svnwiki-extension-define 'metadata-edit-type-register 'googlemap metadata-edit-type-register)
     173
     174(define (html-head-data env)
     175  (let-from-environment env (return)
     176    (return
     177      (html-stream
     178        ((script src "http://maps.google.com/maps/api/js?sensor=false"
     179                             ;(svnwiki-repository-property-get
     180                               ;"svnwiki:googlemap:key"
     181                               ;(svnwiki-repository-path env)
     182                               ;"")
     183                 type "text/javascript"))))))
     184
     185(svnwiki-extension-define 'html-head-data 'googlemap html-head-data)
Note: See TracChangeset for help on using the changeset viewer.