Changeset 14932 in project


Ignore:
Timestamp:
06/07/09 18:16:03 (11 years ago)
Author:
azul
Message:

Make markers clickable.

Location:
release/3/svnwiki-googlemap/trunk
Files:
2 edited

Legend:

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

    r12772 r14932  
    66 (synopsis "Generates a map of pages, based on the svnwiki:location:latitude and svnwiki:location:longitude properties.")
    77 (category web)
    8  (needs svnwiki-extensions stream-ext srfi-40 html-stream svn-post-commit-hooks orders format-modular srfi-1 orders svn-client)
     8 (needs svnwiki-extensions stream-ext srfi-40 html-stream svn-post-commit-hooks orders format-modular srfi-1 orders svn-client embedded-test)
    99 (license "GPL-3"))
  • release/3/svnwiki-googlemap/trunk/svnwiki-googlemap.scm

    r14931 r14932  
    1 (use html-stream svnwiki-extensions-support stream-ext srfi-40 format-modular posix srfi-1)
     1(use html-stream svnwiki-extensions-support stream-ext srfi-40 format-modular posix srfi-1 embedded-test)
    22
    33;(define (googlemap-update env)
     
    7070}
    7171
    72 svnwikiGooglemap.createMap = function (id, latitude, longitude) {
     72svnwikiGooglemap.createMap = function (id, latitude, longitude, zoom) {
    7373  var mapOptions = {
    7474    mapTypeId: google.maps.MapTypeId.ROADMAP,
    75     zoom: latitude && longitude ? 4 : 1,
     75    zoom: zoom || (latitude && longitude ? 4 : 1),
    7676    center: new google.maps.LatLng(latitude || 0, longitude || 0)
    7777  };
     
    101101svnwikiGooglemap.markers = {}
    102102
    103 svnwikiGooglemap.displayMap = function () {
    104   svnwikiTagsLoader.hideAll()
    105   var map = svnwikiGooglemap.createMap('tag-list-googlemap');
     103svnwikiGooglemap.tagsDisplayMap = function (id) {
     104  svnwikiTagsLoader.hideAll();
     105  svnwikiGooglemap.displayMap(id);
     106}
     107
     108svnwikiGooglemap.displayMap = function (id) {
     109  if (svnwikiGooglemap.markers.length == 0) {
     110    var map = svnwikiGooglemap.createMap(id);
     111  } else if (svnwikiGooglemap.markers.length == 1) {
     112    var map = svnwikiGooglemap.createMap(id, svnwikiGooglemap.markers[0][1], svnwikiGooglemap.markers[0][2]);
     113  } else {
     114    var map = svnwikiGooglemap.createMap(id);
     115    var south, west, east, north;
     116    south = north = svnwikiGooglemap.markers[0][1];
     117    west = east = svnwikiGooglemap.markers[0][2];
     118    for (var i in svnwikiGooglemap.markers) {
     119      south = Math.min(south, svnwikiGooglemap.markers[i][1]);
     120      north = Math.max(north, svnwikiGooglemap.markers[i][1]);
     121      west = Math.min(west, svnwikiGooglemap.markers[i][2]);
     122      east = Math.max(east, svnwikiGooglemap.markers[i][2]);
     123    }
     124    map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(south - 5, west - 5), new google.maps.LatLng(north + 5, east + 5)));
     125  }
    106126  for (var i in svnwikiGooglemap.markers) {
    107     var position = new google.maps.LatLng(svnwikiGooglemap.markers[i][0], svnwikiGooglemap.markers[i][1]);
    108     var marker = new google.maps.Marker({map: map, position: position});
     127    var file = svnwikiGooglemap.markers[i][0];
     128    var title = svnwikiGooglemap.markers[i][3];
     129    var position = new google.maps.LatLng(svnwikiGooglemap.markers[i][1], svnwikiGooglemap.markers[i][2]);
     130    var marker = new google.maps.Marker({
     131      map: map,
     132      position: position,
     133      title: title});
     134    svnwikiGooglemap.addInfoWindow(map, marker, svnwikiGooglemap.markers[i]);
    109135  }
     136}
     137
     138svnwikiGooglemap.addInfoWindow = function (map, marker, data) {
     139  var infowindow = (data[4] || svnwikiGooglemap.defaultInfoWindow)(data);
     140  google.maps.event.addListener(marker, 'click', function() {
     141    infowindow.open(map, marker);
     142  });
     143}
     144
     145svnwikiGooglemap.defaultInfoWindow = function (data) {
     146  var file = data[0];
     147  var title = data[3];
     148  return new google.maps.InfoWindow({
     149      content: '<a target="_blank" href="../' + file + '">' + title + '</a>',
     150      size: new google.maps.Size(50, 50)
     151    });
    110152}
    111153EOJS
     
    225267  (test (boolean-decode 'yes 'yes 'no))
    226268  (test (not (boolean-decode 'no 'yes 'no)))
    227   (test (condition-case (begin (boolean-decode 'x 'y 'z) #f) ((exn) #t)a)))
     269  (test (condition-case (begin (boolean-decode 'x 'y 'z) #f) ((exn) #t))))
    228270
    229271(define (boolean-decode bool value-true value-false)
     
    232274           (error "Invalid value received" bool value-true value-fase))))
    233275
    234 (define (draw-map-with-markers env paths visibility)
    235   (let ((visibility (boolean-decode visibility 'hidden 'visible)))
    236     (html-stream
    237       ((div id "tag-list-googlemap" style (if visibility "" "display:none;")))
    238       ((script type "text/javascript")
    239        (format #f "svnwikiGooglemap.markers = { ~:{'~A' : [ ~A, ~A ], ~}};"
    240                (stream->list
    241                  (stream-filter
    242                    (disjoin cadr caddr)
    243                    (stream-map
    244                      (lambda (path)
    245                        (let ((env (environment env ((path path)))))
    246                          (list
    247                            path
    248                            (get-location-coordinate env "latitude")
    249                            (get-location-coordinate env "longitude"))))
    250                      paths))))
    251        (if visibility
    252          "svnwikiGooglemap.displayMap();"
    253          "")))))
     276(define (draw-map-with-markers env paths visibility id)
     277  (let ((visibility (boolean-decode visibility 'visible 'hidden)))
     278    (let-from-environment env (path-in path-out-real)
     279      (assert (and 'draw-map-with-markers (string? path-out-real)))
     280      (html-stream
     281        ((div id id style (if visibility "" "display:none;")))
     282        ((script type "text/javascript")
     283         (format #f "svnwikiGooglemap.markers = [~:{ ['~A', ~A, ~A, '~A' ], ~}];"
     284                 (stream->list
     285                   (stream-filter
     286                     (disjoin cadr caddr)
     287                     (stream-map
     288                       (lambda (path)
     289                         (assert (and 'draw-map-with-markers (string? path)))
     290                         (let ((env (environment env ((path path)))))
     291                           (list
     292                             (make-link-url path-out-real path #f)
     293                             (get-location-coordinate env "latitude")
     294                             (get-location-coordinate env "longitude")
     295                             (get-title path-in path))))
     296                       paths))))
     297         (if visibility
     298           (format #f "svnwikiGooglemap.displayMap('~A');" id)
     299           ""))))))
    254300
    255301(define (tags-view env)
     
    259305        'googlemap
    260306        "Map"
    261         "svnwikiGooglemap.displayMap()"
     307        "svnwikiGooglemap.tagsDisplayMap('tag-list-googlemap')"
    262308        (lambda (env)
    263309          (let-from-environment env (tag-files)
    264310            (draw-map-with-markers
    265311              env
    266               (stream-map cadr tag-files)
    267               'hidden)))))))
     312              (stream-map car tag-files)
     313              'hidden
     314              "tag-list-googlemap")))))))
    268315
    269316(svnwiki-extension-define 'tags-view 'googlemap tags-view)
     
    276323      (let* ((path-out-real (make-location-path path))
    277324             (new-env (environment env ((path-out-real path-out-real)))))
     325        (svnwiki-report-progress env "Updating location file: ~A~%" path-out-real)
    278326        (write-file-with-tmp
    279327          path-out-real
     
    287335      env
    288336      (stream path)
    289       'visible)))
    290 
    291 (svnwiki-extension-define 'update-notify 'googlemap googlemap-update)
     337      'visible
     338      "googlemap-div")))
     339
     340(svnwiki-extension-define 'update-notify-recursive 'googlemap googlemap-update)
    292341
    293342(define (location-actions-links env)
    294   (let-from-environment env (path)
     343  (let-from-environment env (path path-out-real)
    295344    (when (has-location-set? env)
    296345      (svnwiki-file-action-link
    297346        env
    298         (make-location-path path)
     347        (make-link-url path-out-real (make-location-path path) #f)
    299348        "Location"))))
    300349
Note: See TracChangeset for help on using the changeset viewer.