Revision: 4102 Author: hans URL: http://bknr.net/trac/changeset/4102
Improve map handling. Add infrastructure for sponsor queries.
U trunk/projects/bos/m2/m2.lisp U trunk/projects/bos/m2/packages.lisp U trunk/projects/bos/payment-website/static/poi-ms.css U trunk/projects/bos/payment-website/static/poi-ms.js U trunk/projects/bos/web/packages.lisp U trunk/projects/bos/web/sponsor-handlers.lisp U trunk/projects/bos/web/webserver.lisp
Modified: trunk/projects/bos/m2/m2.lisp =================================================================== --- trunk/projects/bos/m2/m2.lisp 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/m2/m2.lisp 2008-11-30 10:29:40 UTC (rev 4102) @@ -712,8 +712,6 @@ (json:encode-object-elements "name" (user-full-name sponsor) "country" (or (sponsor-country sponsor) "sponsor-country-unknown") - "sqmCount" (reduce #'+ (mapcar (alexandria:compose #'length #'contract-m2s) (sponsor-contracts sponsor)) - :initial-value 0) "infoText" (sponsor-info-text sponsor)) (unless (user-full-name sponsor) (json:encode-object-element "anonymous" t)) @@ -723,10 +721,10 @@ (json:with-object () (json-encode contract))))))
-(defun last-sponsors-as-json () - "Render the last sponsors as JSON" +(defun sponsors-as-json (sponsors) + "Render the SPONSORS as JSON" (json:with-array () - (dolist (sponsor (mapcar #'contract-sponsor (last-paid-contracts))) + (dolist (sponsor sponsors) (json:with-object () (json-encode sponsor)))))
Modified: trunk/projects/bos/m2/packages.lisp =================================================================== --- trunk/projects/bos/m2/packages.lisp 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/m2/packages.lisp 2008-11-30 10:29:40 UTC (rev 4102) @@ -171,7 +171,7 @@ #:contract-stats-for-country #:last-paid-contracts #:do-sponsor-countries - #:last-sponsors-as-json + #:sponsors-as-json
#:make-m2-javascript #:recolorize-contracts
Modified: trunk/projects/bos/payment-website/static/poi-ms.css =================================================================== --- trunk/projects/bos/payment-website/static/poi-ms.css 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/payment-website/static/poi-ms.css 2008-11-30 10:29:40 UTC (rev 4102) @@ -23,10 +23,14 @@ font-size: 180%; }
+.map img { + vertical-align: bottom; /* align images without space for character descenders */ +} + .map { position: relative; }
-.map .icon { +.map .icon, .map .contract { position: absolute; }
Modified: trunk/projects/bos/payment-website/static/poi-ms.js =================================================================== --- trunk/projects/bos/payment-website/static/poi-ms.js 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/payment-website/static/poi-ms.js 2008-11-30 10:29:40 UTC (rev 4102) @@ -72,7 +72,7 @@ function showMedium(e) { var medium = e.data;
- /* work around jQuery bug when trying to remove applet from dom with IE */ + /* Work around jQuery bug when trying to remove applet from DOM with IE. */ var applet = $("#applet")[0]; if (applet) { applet.parentNode.removeChild(applet); @@ -105,28 +105,36 @@ rows.push(DIV(null, tiles)); }
- return DIV({ 'class': 'map' }, rows); + return DIV(null, rows); }
+function positionMapIcon(img, x, y) { + img.style.left = (x - (Math.floor(x / 90) - 1) * 90) + 'px'; + img.style.top = (y - (Math.floor(y / 90) - 1) * 90) + 'px'; + return img; +} + function loadMainInfo(poi) { - var map = []; - map.push(makeMap(poi.x, poi.y)); - map.push(IMG({ 'class': 'icon', - src: '/images/' + poi.icon + '.gif', - width: 16, height: 16, - style: 'left: ' + (poi.x - ((Math.floor(poi.x / 90) - 1) * 90) - 8) + 'px; ' - + 'top: ' + (poi.y - ((Math.floor(poi.y / 90) - 1) * 90) - 8) + 'px'}));
- $('#content').empty().append(H2(null, poi.subtitle), - DIV({ 'class': 'map' }, map), - P(null, poi.description)); + $('#content') + .empty() + .append(H2(null, poi.subtitle), + DIV({ 'class': 'map' }, + makeMap(poi.x, poi.y), + positionMapIcon(IMG({ 'class': 'icon', + src: '/images/' + poi.icon + '.gif', + width: 16, height: 16}), + poi.x - 8, poi.y - 8)), + P(null, poi.description)); }
function showPOI(e) { var poi = pois[(e.target && e.target.value) || e.data];
- $('#left-bar').empty().append(UL({ id: 'media-list' })); + $('#left-bar') + .empty() + .append(UL({ id: 'media-list' })); if (!poi) { showOverview(); } else { @@ -152,10 +160,17 @@
function showSponsor(e) { var sponsor = e.data; + var contract = sponsor.contracts[0]; $('#content') .empty() .append(H2(null, sponsor.name), - makeMap(sponsor.contracts[0].left, sponsor.contracts[0].top)); + DIV({ 'class': 'map' }, + makeMap(contract.left, contract.top), + positionMapIcon(IMG({ 'class': 'contract', + src: '/contract-image/' + contract.id, + width: contract.width, height: contract.height}), + contract.left, contract.top)) + ); }
function showOverview() { @@ -228,7 +243,7 @@ } $('#poi-selector').bind('change', null, showPOI);
- loadJSONDoc('/last-sponsors-json').addCallback(loadSponsors); + loadJSONDoc('/sponsors-json').addCallback(loadSponsors); } catch (e) { alert(e);
Modified: trunk/projects/bos/web/packages.lisp =================================================================== --- trunk/projects/bos/web/packages.lisp 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/web/packages.lisp 2008-11-30 10:29:40 UTC (rev 4102) @@ -7,6 +7,7 @@ :cl-user :cl-interpol :cl-ppcre + :alexandria :xhtml-generator :cxml :puri @@ -22,4 +23,5 @@ :bos.m2 :bos.m2.config) (:shadowing-import-from :cl-interpol #:quote-meta-chars) + (:shadowing-import-from :alexandria #:array-index) (:export))
Modified: trunk/projects/bos/web/sponsor-handlers.lisp =================================================================== --- trunk/projects/bos/web/sponsor-handlers.lisp 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/web/sponsor-handlers.lisp 2008-11-30 10:29:40 UTC (rev 4102) @@ -348,12 +348,32 @@ (cmslink #?"edit-sponsor/$((store-object-id sponsor))" "return to sponsor")))))
-;;; last-sponsors-json-handler -(defclass last-sponsors-json-handler (page-handler) +;;; sponsors-json-handler +(defclass sponsors-json-handler (page-handler) ())
-(defmethod handle ((handler last-sponsors-json-handler)) +(defun sponsors-matching (query) + (when (< 2 (length query)) + (remove-if-not (curry #'search (string-downcase query)) + (class-instances 'sponsor) + :key (compose #'string-downcase #'user-full-name)))) + +(defun largest-sponsors () + (mapcar #'contract-sponsor + (subseq (sort (copy-list (class-instances 'contract)) + #'> + :key (compose #'length #'contract-m2s)) + 0 20))) + +(defmethod handle ((handler sponsors-json-handler)) (last-contracts-handle-if-modified-since) (with-json-response () (json:with-object-element ("sponsors") - (bos.m2:last-sponsors-as-json)))) \ No newline at end of file + (bos.m2:sponsors-as-json + (cond + ((query-param "q") + (sponsors-matching (query-param "q"))) + ((query-param "largest") + (largest-sponsors)) + (t + (mapcar #'contract-sponsor (last-paid-contracts)))))))) \ No newline at end of file
Modified: trunk/projects/bos/web/webserver.lisp =================================================================== --- trunk/projects/bos/web/webserver.lisp 2008-11-29 21:55:51 UTC (rev 4101) +++ trunk/projects/bos/web/webserver.lisp 2008-11-30 10:29:40 UTC (rev 4102) @@ -185,7 +185,7 @@ ("/poi-javascript" poi-javascript-handler) ("/m2-javascript" m2-javascript-handler) ("/poi-json" poi-json-handler) - ("/last-sponsors-json" last-sponsors-json-handler) + ("/sponsors-json" sponsors-json-handler) ("/sponsor-login" sponsor-login-handler) ("/create-allocation-area" create-allocation-area-handler) ("/allocation-area" allocation-area-handler)