Changeset 2851
- Timestamp:
- 04/02/08 13:25:41 (9 months ago)
- Files:
-
- trunk/projects/bos/web/contract-tree.lisp (modified) (4 diffs)
- trunk/projects/bos/web/webserver.lisp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/projects/bos/web/contract-tree.lisp
r2849 r2851 26 26 (defclass contract-tree-node () 27 27 ((id :accessor id) 28 (timestamp :accessor timestamp :initform (get-universal-time)) 28 29 (geo-location :initarg :geo-location :reader geo-location) 29 30 (children :initarg :children :reader children) … … 66 67 (pixelize 1) 67 68 (max-pixel-per-meter 5)) 68 (labels ((stick-on-last (list) 69 (labels ((ensure-square (rectangle) 70 (geometry:with-rectangle rectangle 71 (if (= width height) 72 rectangle 73 (let ((size (max width height))) 74 (list left top size size))))) 75 (stick-on-last (list) 69 76 (let* ((list (copy-list list)) 70 77 (last (last list))) … … 93 100 (incf safe-top h))) 94 101 (incf left w)))))) 95 (children-setf-root (node &optionalroot)102 (children-setf-root (node root) 96 103 (setf (root node) root) 97 (mapc #'(lambda (child) (children-setf-root child (if root root node))) (children node))104 (mapc #'(lambda (child) (children-setf-root child root)) (children node)) 98 105 node) 99 106 (setf-root-slots (root) … … 114 121 :pixelize (car pixelize))))) 115 122 (let ((tree (rec (stick-on-last '(contract-tree contract-tree-node)) 116 geo-location123 (ensure-square geo-location) 117 124 (stick-on-last (alexandria:ensure-list pixelize))))) 118 (setf-root-slots (children-setf-root tree )))))125 (setf-root-slots (children-setf-root tree tree))))) 119 126 127 ;;; handlers 128 (defclass contract-tree-handler (object-handler) 129 () 130 (:documentation "A simple html inspector for contract-trees. Mainly 131 used for debugging.")) 132 133 (defun img-contract-tree (object) 134 (html 135 ((:a :href (website-make-path *website* 136 (format nil "contract-tree/~d" (id object)))) 137 ((:img :src (website-make-path *website* 138 (format nil "contract-tree-image/~d" (id object)))))))) 139 140 (defmethod object-handler-get-object ((handler contract-tree-handler)) 141 (let ((id (parse-url))) 142 (when id 143 (let ((object (find-contract-tree-node (parse-integer id)))) 144 (when (typep object 'contract-tree-node) 145 object))))) 146 147 (defmethod handle-object ((contract-tree-handler contract-tree-handler) (object contract-tree-node)) 148 (with-bknr-page (:title (prin1-to-string object)) 149 (:pre 150 (:princ 151 (arnesi:escape-as-html 152 (with-output-to-string (*standard-output*) 153 (describe object))))) 154 (img-contract-tree object) 155 (when (root object) 156 (html 157 (:p 158 ((:a :href (website-make-path *website* 159 (format nil "contract-tree/~d" (id (root object))))) 160 "go to root")))) 161 ;; (:p "depth: " (:princ (depth object)) "lod-min:" (:princ (lod-min object)) "lod-max:" (:princ (lod-max object))) 162 (:table 163 (dolist (row (group-on (children object) :key #'(lambda (obj) (second (geo-location obj))) :include-key nil)) 164 (html (:tr 165 (dolist (child row) 166 (html (:td (img-contract-tree child)))))))) 167 )) 168 169 (defclass contract-tree-image-handler (contract-tree-handler) 170 ()) 171 172 (defmethod handle-object ((handler contract-tree-image-handler) (object contract-tree-node)) 173 (hunchentoot:handle-if-modified-since (timestamp object)) 174 (let ((image-size (output-images-size (root object)))) 175 (cl-gd:with-image (image image-size image-size t) 176 (draw-contract-image image image-size (geo-location object) (pixelize object)) 177 (emit-image-to-browser image :png :date (timestamp object))))) 178 trunk/projects/bos/web/webserver.lisp
r2775 r2851 203 203 ("/image-tree-kml-latest" image-tree-kml-latest-handler) 204 204 ("/image-tree-kml" image-tree-kml-handler) 205 ("/image-tree" image-tree-handler) 205 ("/image-tree" image-tree-handler) 206 ("/contract-tree-image" contract-tree-image-handler) 207 ("/contract-tree" contract-tree-handler) 206 208 ("/contract-image" contract-image-handler) 207 209 ("/contract" contract-handler)
