Kaynağa Gözat

Map markers

Innocenty Enikeew 11 yıl önce
ebeveyn
işleme
98d3334a53
1 değiştirilmiş dosya ile 71 ekleme ve 46 silme
  1. 71 46
      src/web.lisp

+ 71 - 46
src/web.lisp

@@ -171,41 +171,38 @@
            *collections (create)
            *views (create)
            :start (lambda ()
-                    (let ((router (new ((@ *timeliner *router))))
-                          (events (new ((@ *timeliner *collections *events)))))
-                      (setf (@ events url) (lisp (restas:genurl 'api/events)))
-                      (new ((@ *timeliner *views *map)
-                            (create :el "#map")))
-                      (new ((@ *timeliner *views *paginator)
-                            (create :el "#paginator")))
-                      (new ((@ *timeliner *views *events)
-                            (create
-                             :el "#events"
-                             :collection events)))
+                    (var router (new ((@ *timeliner *router))))
+                    (var events (new ((@ *timeliner *collections *events))))
+                    (setf (@ events url) (lisp (restas:genurl 'api/events)))
+                    (new ((@ *timeliner *views *paginator)
+                          (create :el "#paginator")))
+                    (new ((@ *timeliner *views *events)
+                          (create
+                           :el "#events"
+                           :collection events)))
+                    (new ((@ *timeliner *views *map)
+                          (create :el "#map"
+                                  :collection events)))
 
-                      (chain router (on "route:home"
-                                        (lambda ()
-                                          (let ((today (chain (moment)
-                                                              (start-of "day")
-                                                              (format "YYYY-MM-DD"))))
-                                            (chain
-                                             router
-                                             (navigate
-                                              (concatenate 'string "day/" today)
-                                              (create :trigger t :replace t)))))))
-                      (chain router (on "route:day"
-                                        (lambda (day)
-                                          (chain events (fetch
-                                                         (create
-                                                          :reset t
-                                                          :data (create
-                                                                 :start (chain
-                                                                         (moment day "YYYY-MM-DD")
-                                                                         (value-of))))))
-                                          (chain console (log "show day" day)))))
-                      (chain *backbone history (start (create push-state t)))
-                      (setf (@ window app) router))
-                    (chain console (log "Timeliner started")))))
+                    (chain router (on "route:home"
+                                      (lambda ()
+                                        (var today (chain (moment)
+                                                          (start-of "day")
+                                                          (format "YYYY-MM-DD")))
+                                        (chain router (navigate
+                                                       (concatenate 'string "day/" today)
+                                                       (create :trigger t :replace t))))))
+                    (chain router (on "route:day"
+                                      (lambda (day)
+                                        (chain events (fetch
+                                                       (create
+                                                        :reset t
+                                                        :data (create
+                                                               :start (chain
+                                                                       (moment day "YYYY-MM-DD")
+                                                                       (value-of)))))))))
+                    (chain *backbone history (start (create push-state t)))
+                    (setf (@ window app) router))))
     ;; * Router
     (setf (@ *timeliner *router)
           (chain *backbone *router
@@ -255,14 +252,15 @@
               initialize (lambda ()
                            (chain this (listen-to (@ this collection) "reset" (@ this render))))
               render-one (lambda (event)
-                           (let ((item-view (new ((@ *timeliner *views *event)
-                                                  (create :model event)))))
-                             (chain this $el (append (@ (chain item-view (render)) $el)))))
+                           (var item-view (new ((@ *timeliner *views *event)
+                                                (create :model event))))
+                           (chain this $el (append (@ (chain item-view (render)) $el))))
               render (lambda ()
                        (chain this $el (empty))
                        (if (> (@ this collection length) 0)
                            (chain this collection (each (@ this render-one) this))
-                           (chain this $el (append (who-ps-html (:li "No data")))))
+                           (chain this $el (append (who-ps-html (:li :class "list-group-item"
+                                                                     "No data")))))
                        this)))))
     ;; ** Paginator
     (setf (@ *timeliner *views *paginator)
@@ -284,14 +282,41 @@
            (extend
             (create
              initialize (lambda ()
-                          (let ((layer (chain *L (tile-layer "http://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png"
-                                                             (create :id "enikesha.icd0bj4k" max-Zoom 18)))))
-                            (setf (@ this map)
-                                  (chain *L (map (@ this el)
-                                                 (create
-                                                  :center '(59.94 30.33)
-                                                  :zoom 10
-                                                  :layers (list layer)))))))))))))
+                          (var tile-layer
+                               (chain *L (tile-layer "http://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png"
+                                                     (create :id "enikesha.icd0bj4k" max-Zoom 18))))
+                          (var events-layer (chain *L (feature-group)))
+                          (setf (@ this map)
+                                (chain *L (map (@ this el)
+                                               (create
+                                                :center '(59.94 30.33)
+                                                :zoom 10
+                                                :layers (list tile-layer events-layer)))))
+                          (setf (@ this events-layer) events-layer)
+                          (chain this (listen-to (@ this collection) "reset"
+                                                 (@ this render))))
+             render (lambda ()
+                      (var new-layer
+                           (chain *L (feature-group
+                                      (chain _ (filter
+                                                (chain this collection
+                                                       (map
+                                                        (lambda (e)
+                                                          (var loc (chain e (get "loc")))
+                                                          (var coords (when loc (@ loc coordinates)))
+                                                          (when coords
+                                                            (chain *L (circle-marker
+                                                                       (list (@ coords 1)
+                                                                             (@ coords 0))))))))
+                                                (lambda (e) e))))))
+                      (chain this map (remove-layer (@ this events-layer)))
+                      (when (chain new-layer (get-layers) length)
+                        (chain this map
+                               (add-layer new-layer)
+                               (fit-bounds (chain new-layer (get-bounds))
+                                           (create :padding '(50 50)))))
+                      (setf (@ this events-layer) new-layer)
+                      this)))))))
 
 (restas:define-route static/js ("js/:file" :content-type "application/x-javascript")
   (cond