initial commit

initial commit - full source
This commit is contained in:
Andrew Trice 2012-06-18 12:52:48 -04:00
parent ce3e727e83
commit 365542dda2
97 changed files with 21990 additions and 1 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store

View File

@ -1,4 +1,25 @@
Fresh-Food-Finder
=================
Fresh Foor Finder PhoneGap application
The Fresh Food Finder is an open source mobile application built using PhoneGap (Apache Cordova). It is written entirely using HTML, CSS, and JavaScript, and runs on numerous platforms.
Check out a video of it in action at:
* http://youtu.be/QjDD1l_37B8
Learn how it was built at:
* http://www.tricedesigns.com/?p=2156
The Fresh Food Finder uses:
* PhoneGap: http://www.phonegap.com
* App-UI: http://triceam.github.com/app-UI/
* Mustache: https://github.com/janl/mustache.js
* jQuery: http://jquery.com/
All data obtained through:
* https://explore.data.gov/Agriculture/Farmers-Markets-Geographic-Data/wfna-38ey
The Fresh Food Finder is available in the following markets:
* iTunes: http://itunes.apple.com/us/app/fresh-food-finder/id524261275?mt=8
* Google Play: https://play.google.com/store/apps/details?id=com.tricedesigns.FreshFood&hl=en
* Amazon Market: http://www.amazon.com/Andrew-Trice-Fresh-Food-Finder/dp/B0089FRKCY
* Windows Marketplace (pending approval)

View File

@ -0,0 +1,18 @@
Sansation - freeware font family
Version 1.3
Bernd Montag © 2011 - All Rights Reserved
This font family is freeware and can be used for personal and commercial purposes.
Although a PayPal donation is much appreciated.
You may but this font on CDs, websites,... with the following restrictions:
-Editing is only allowed for personal use, don´t distribute an modiefied version of the font files!
-Do not rename the font files!
-Do not sell the font files!
-Do not pass the font files without this textfile!
-Make sure you have downloaded the latest update from www.dafont.com for best optical results.
If you have further questions - please contact me.
berndmontag@gmx.de

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationBold" horiz-adv-x="700" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="450" />
<glyph unicode=" " horiz-adv-x="450" />
<glyph unicode="&#x09;" horiz-adv-x="450" />
<glyph unicode="&#xa0;" horiz-adv-x="450" />
<glyph unicode="!" horiz-adv-x="565" d="M150 0v245h265v-245h-265zM150 370v1060h265v-1060h-265z" />
<glyph unicode="&#x22;" horiz-adv-x="815" d="M100 1430h245l-30 -435h-185zM470 1430h245l-30 -435h-185z" />
<glyph unicode="#" horiz-adv-x="1893" d="M100 344l30 154h402l89 378h-401l30 154h412l100 395h180l-100 -395h378l102 400h180l-101 -400h392l-30 -154h-402l-89 -378h401l-30 -154h-412l-90 -349h-180l90 349h-378l-90 -349h-180l89 349h-392zM713 498h377l90 378h-377z" />
<glyph unicode="$" horiz-adv-x="1025" d="M75 910q0 275 324 321v199h255v-195q136 -12 261 -55v-220q-175 70 -380 70q-215 0 -215 -110q0 -105 125 -105h170q350 0 350 -315q0 -276 -311 -321v-179h-255v175q-148 12 -274 55v220q175 -70 404 -70q171 0 171 110q0 105 -115 105h-190q-320 0 -320 315z" />
<glyph unicode="%" horiz-adv-x="1502" d="M100 0l1017 1430h265l-1017 -1430h-265zM100 1140q0 300 328 300q324 0 324 -300q0 -319 -324 -319q-328 0 -328 319zM290 1142q0 -147 138 -147q134 0 134 147q0 124 -134 124q-138 0 -138 -124zM750 299q0 310 328 310q324 0 324 -310q0 -309 -324 -309 q-328 0 -328 309zM940 301q0 -137 138 -137q134 0 134 137q0 134 -134 134q-138 0 -138 -134z" />
<glyph unicode="&#x26;" horiz-adv-x="1335" d="M100 414q0 227 183 313q-183 85 -183 308q0 395 510 395q185 0 360 -50v-210q-175 50 -347 50q-258 0 -258 -180q0 -210 205 -210h338v142h143l102 -142h182v-210h-162v-130q0 -493 -548 -493q-525 0 -525 417zM365 419q0 -209 261 -209q282 0 282 282v128h-336 q-207 0 -207 -201z" />
<glyph unicode="'" horiz-adv-x="445" d="M100 1430h245l-30 -435h-185z" />
<glyph unicode="(" horiz-adv-x="640" d="M100 525q0 453 200 905h265q-200 -452 -200 -905t200 -905h-265q-200 452 -200 905z" />
<glyph unicode=")" horiz-adv-x="640" d="M75 -380q200 452 200 905t-200 905h265q200 -452 200 -905t-200 -905h-265z" />
<glyph unicode="*" horiz-adv-x="810" d="M100 1150l48 150l211 -103l-31 233h156l-30 -232l209 101l48 -147l-228 -43l159 -170l-123 -92l-113 205l-113 -204l-124 89l161 171z" />
<glyph unicode="+" horiz-adv-x="950" d="M100 420v210h270v270h210v-270h270v-210h-270v-270h-210v270h-270z" />
<glyph unicode="," horiz-adv-x="465" d="M25 -250l150 435h265l-150 -435h-265z" />
<glyph unicode="-" d="M100 420v210h500v-210h-500z" />
<glyph unicode="." horiz-adv-x="465" d="M100 0v245h265v-245h-265z" />
<glyph unicode="/" horiz-adv-x="1060" d="M25 0l725 1430h285l-725 -1430h-285z" />
<glyph unicode="0" horiz-adv-x="1445" d="M90 713q0 727 638 727q627 0 627 -727q0 -723 -627 -723q-638 0 -638 723zM365 719q0 -499 363 -499q352 0 352 499q0 491 -352 491q-363 0 -363 -491z" />
<glyph unicode="1" horiz-adv-x="690" d="M100 1211v109l415 140v-1460h-265v1211h-150z" />
<glyph unicode="2" horiz-adv-x="1180" d="M100 0v200q715 497 715 820q0 190 -260 190q-220 0 -415 -110v240q195 100 415 100q525 0 525 -420q0 -370 -573 -790h573v-230h-980z" />
<glyph unicode="3" horiz-adv-x="1115" d="M100 50v240q200 -70 420 -70q270 0 270 180q0 210 -192 210h-348v230h345q195 0 195 210q0 160 -270 160q-220 0 -420 -70v240q200 60 420 60q535 0 535 -390q0 -236 -188 -325q188 -85 188 -325q0 -410 -535 -410q-220 0 -420 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M60 310v200l585 920h284l-566 -910h419v478h265v-478l148 -136v-74h-148v-310h-265v310h-722z" />
<glyph unicode="5" horiz-adv-x="1160" d="M125 50v220q200 -70 410 -70q285 0 285 250q0 230 -275 230q-225 0 -420 -50l50 800h854v-210h-626l-24 -352q57 22 166 22q540 0 540 -440q0 -460 -560 -460q-200 0 -400 60z" />
<glyph unicode="6" horiz-adv-x="1250" d="M100 550q0 556 688 923l126 -207q-352 -161 -484 -389q121 43 246 43q524 0 524 -440q0 -490 -563 -490q-537 0 -537 560zM355 556q0 -356 291 -356q293 0 293 280q0 230 -272 230q-154 0 -294 -48q-18 -40 -18 -106z" />
<glyph unicode="7" horiz-adv-x="1170" d="M100 1200v230h1020v-210l-642 -1220h-291l652 1200h-739z" />
<glyph unicode="8" horiz-adv-x="1280" d="M80 424q0 223 212 331q-172 95 -172 323q0 366 520 366t520 -366q0 -228 -177 -323q217 -108 217 -331q0 -434 -550 -434q-570 0 -570 434zM345 418q0 -198 310 -198q280 0 280 198q0 212 -293 212q-297 0 -297 -212zM385 1048q0 -188 260 -188q250 0 250 188 q0 162 -253 162q-257 0 -257 -162z" />
<glyph unicode="9" horiz-adv-x="1265" d="M100 963q0 480 563 480q537 0 537 -560q0 -556 -688 -923l-126 207q342 161 484 399q-121 -53 -246 -53q-524 0 -524 450zM361 963q0 -240 272 -240q154 0 294 48q18 40 18 106q0 356 -291 356q-293 0 -293 -270z" />
<glyph unicode=":" horiz-adv-x="490" d="M125 0v245h265v-245h-265zM125 805v245h265v-245h-265z" />
<glyph unicode=";" horiz-adv-x="615" d="M100 -250l150 435h265l-150 -435h-265zM250 805v245h265v-245h-265z" />
<glyph unicode="&#x3c;" horiz-adv-x="1100" d="M100 430v190l900 380v-250l-573 -229l573 -221v-250z" />
<glyph unicode="=" horiz-adv-x="950" d="M100 240v210h750v-210h-750zM100 600v210h750v-210h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1100" d="M100 50v250l573 221l-573 229v250l900 -380v-190z" />
<glyph unicode="?" horiz-adv-x="1115" d="M100 1170v210q210 50 400 50q515 0 515 -390q0 -440 -500 -440v-230h-265v440h265q255 0 255 230q0 180 -270 180q-190 0 -400 -50zM250 0v245h265v-245h-265z" />
<glyph unicode="@" horiz-adv-x="2130" d="M100 540q0 900 964 900q966 0 966 -900q0 -690 -447 -690q-281 0 -291 244q-137 -94 -302 -94q-385 0 -385 327q0 313 456 313q107 0 214 -20v79q0 141 -203 141q-172 0 -382 -50v210q210 50 382 50q468 0 468 -346v-586q0 -58 80 -58q145 0 145 480q0 690 -686 690 q-714 0 -714 -690q0 -710 645 -710v-210q-910 0 -910 920zM870 330q0 -140 160 -140q132 0 245 82v168q-100 20 -214 20q-191 0 -191 -130z" />
<glyph unicode="A" horiz-adv-x="1562" d="M25 0l607 1430h285l620 -1430h-285l-163 390h-475l91 230h288l-225 537l-471 -1157h-272z" />
<glyph unicode="B" horiz-adv-x="1321" d="M150 0v1430h670q408 0 408 -333q0 -244 -266 -349q284 -53 284 -325q0 -423 -447 -423h-649zM415 230h373q176 0 176 180q0 223 -263 223h-80v171q330 55 330 276q0 120 -148 120h-388v-970z" />
<glyph unicode="C" horiz-adv-x="1390" d="M100 735q0 705 770 705q235 0 420 -70v-240q-185 80 -400 80q-515 0 -515 -475q0 -515 515 -515q215 0 400 80v-240q-185 -70 -420 -70q-770 0 -770 745z" />
<glyph unicode="D" horiz-adv-x="1495" d="M150 0v1430h560q710 0 710 -676q0 -754 -710 -754h-560zM415 230h295q445 0 445 524q0 446 -445 446h-295v-970z" />
<glyph unicode="E" horiz-adv-x="1238" d="M150 0v1430h979v-228h-716v-360h682v-237h-685v-375h733v-230h-993z" />
<glyph unicode="F" horiz-adv-x="1164" d="M150 0v1430h939v-228h-676v-360h642v-237h-645v-605h-260z" />
<glyph unicode="G" horiz-adv-x="1390" d="M100 735q0 705 770 705q235 0 420 -70v-240q-185 80 -400 80q-515 0 -515 -475q0 -515 486 -515q72 0 164 24v416h265v-594q-173 -76 -433 -76q-757 0 -757 745z" />
<glyph unicode="H" horiz-adv-x="1535" d="M150 0v1430h265v-590h705v590h265v-1430h-265v610h-705v-610h-265z" />
<glyph unicode="I" horiz-adv-x="565" d="M150 0v1430h265v-1430h-265z" />
<glyph unicode="J" horiz-adv-x="740" d="M25 0v230q300 0 300 182v1018h265v-1018q0 -412 -565 -412z" />
<glyph unicode="K" horiz-adv-x="1435" d="M150 0v1430h265v-1430h-265zM565 668v172l532 590h324l-610 -667l674 -763h-367z" />
<glyph unicode="L" horiz-adv-x="1083" d="M150 0v1430h265v-1200h568v-230h-833z" />
<glyph unicode="M" horiz-adv-x="1800" d="M150 0v1430h275l485 -1085l475 1085h265v-1430h-245v996l-388 -996h-226l-396 996v-996h-245z" />
<glyph unicode="N" horiz-adv-x="1575" d="M150 0v1430h265l755 -1042v1042h255v-1430h-265l-755 1064v-1064h-255z" />
<glyph unicode="O" horiz-adv-x="1625" d="M100 713q0 727 718 727q707 0 707 -727q0 -723 -707 -723q-686 0 -718 723zM375 719q0 -499 443 -499q432 0 432 499q0 491 -432 491q-443 0 -443 -491z" />
<glyph unicode="P" horiz-adv-x="1253" d="M150 0v1430h640q438 0 438 -403q0 -437 -599 -529l-38 236q360 65 360 285q0 178 -178 178h-358v-1197h-265z" />
<glyph unicode="Q" horiz-adv-x="1625" d="M100 713q0 727 718 727q707 0 707 -727q0 -598 -445 -706l232 -270l-209 -159l-325 412q-646 0 -678 723zM375 719q0 -499 443 -499q432 0 432 499q0 491 -432 491q-443 0 -443 -491z" />
<glyph unicode="R" horiz-adv-x="1325" d="M150 2v1428h650q438 0 438 -383q0 -259 -341 -429l453 -618h-334l-435 623v121q380 65 380 295q0 158 -178 158h-363v-1195h-270z" />
<glyph unicode="S" horiz-adv-x="1280" d="M75 1000q0 440 625 440q240 0 455 -70v-240q-215 80 -455 80q-360 0 -360 -210q0 -160 174 -160h224q467 0 467 -400q0 -450 -594 -450q-271 0 -486 70v240q215 -80 486 -80q329 0 329 220q0 160 -202 160h-224q-439 0 -439 400z" />
<glyph unicode="T" horiz-adv-x="1085" d="M0 1200v230h1085v-230h-410v-1200h-265v1200h-410z" />
<glyph unicode="U" horiz-adv-x="1530" d="M150 562v868h265v-868q0 -342 350 -342t350 342v868h265v-868q0 -572 -615 -572t-615 572z" />
<glyph unicode="V" horiz-adv-x="1512" d="M0 1430h315l443 -1095l442 1095h312l-627 -1430h-285z" />
<glyph unicode="W" horiz-adv-x="1890" d="M35 1430h269l153 -1027l372 1027h255l348 -987l162 987h261l-269 -1430h-252l-393 1122l-422 -1122h-249z" />
<glyph unicode="X" horiz-adv-x="1502" d="M25 0l563 715l-563 715h335l395 -522l395 522h335l-562 -715l562 -715h-335l-395 522l-395 -522h-335z" />
<glyph unicode="Y" horiz-adv-x="1300" d="M25 1430h285l402 -689l378 689h275l-526 -930v-500h-265v500z" />
<glyph unicode="Z" horiz-adv-x="1250" d="M125 0v230l794 970h-774v230h1040v-230l-761 -970h761v-230h-1060z" />
<glyph unicode="[" horiz-adv-x="680" d="M100 -380v1810h530v-210h-265v-1390h265v-210h-530z" />
<glyph unicode="\" horiz-adv-x="1060" d="M25 1430h285l725 -1430h-285z" />
<glyph unicode="]" horiz-adv-x="680" d="M50 -170h265v1390h-265v210h530v-1810h-530v210z" />
<glyph unicode="^" horiz-adv-x="1050" d="M50 700l400 730h150l400 -730h-230l-249 473l-241 -473h-230z" />
<glyph unicode="_" horiz-adv-x="1050" d="M25 0h1000v-210h-1000v210z" />
<glyph unicode="`" horiz-adv-x="663" d="M100 1430h319l144 -259h-224z" />
<glyph unicode="a" horiz-adv-x="1135" d="M75 327q0 313 456 313q107 0 214 -20v79q0 141 -203 141q-172 0 -382 -50v210q210 50 382 50q468 0 468 -346v-704h-154l-94 94q-137 -94 -302 -94q-385 0 -385 327zM340 330q0 -140 160 -140q132 0 245 82v168q-100 20 -214 20q-191 0 -191 -130z" />
<glyph unicode="b" horiz-adv-x="1178" d="M125 43v1387h265v-460q119 80 265 80q448 0 448 -504q0 -546 -513 -546q-216 0 -465 43zM390 243q91 -29 211 -29q240 0 240 339q0 277 -207 277q-134 0 -244 -54v-533z" />
<glyph unicode="c" horiz-adv-x="950" d="M70 545q0 505 560 505q140 0 270 -30v-210q-130 30 -250 30q-315 0 -315 -295q0 -335 315 -335q120 0 250 30v-210q-130 -30 -270 -30q-560 0 -560 545z" />
<glyph unicode="d" horiz-adv-x="1180" d="M75 546q0 504 498 504q106 0 217 -50v430h265v-1367q-241 -63 -471 -63q-509 0 -509 546zM337 553q0 -329 257 -329q104 0 196 29v523q-82 54 -206 54q-247 0 -247 -277z" />
<glyph unicode="e" horiz-adv-x="1120" d="M75 537q0 513 493 513q478 0 478 -488q0 -65 -9 -130h-697q0 -222 326 -222q159 0 318 30v-210q-139 -30 -338 -30q-571 0 -571 537zM340 616h448v8q0 218 -220 218q-210 0 -228 -226z" />
<glyph unicode="f" horiz-adv-x="671" d="M125 0v1050q0 432 472 432q129 0 234 -40v-210q-99 40 -215 40q-226 0 -226 -222h315v-210h-315v-840h-265z" />
<glyph unicode="g" horiz-adv-x="1187" d="M75 531q0 519 545 519q183 0 442 -43v-927q0 -460 -553 -460q-194 0 -344 50v210q153 -50 346 -50q286 0 286 240q-118 -50 -254 -50q-468 0 -468 511zM337 533q0 -293 237 -293q114 0 223 54v518q-65 24 -185 24q-275 0 -275 -303z" />
<glyph unicode="h" horiz-adv-x="1205" d="M125 0v1430h265v-514q124 134 317 134q373 0 373 -388v-662h-265v662q0 174 -173 174q-129 0 -252 -103v-733h-265z" />
<glyph unicode="i" horiz-adv-x="515" d="M125 0v1050h265v-1050h-265zM125 1220v210h265v-210h-265z" />
<glyph unicode="j" horiz-adv-x="515" d="M0 -293q125 135 125 373v970h265v-970q0 -318 -182 -518zM125 1220v210h265v-210h-265z" />
<glyph unicode="k" horiz-adv-x="1206" d="M125 0v1430h265v-462q163 82 343 82q402 0 402 -303q0 -220 -280 -344l326 -403h-324l-274 375v123q287 61 287 200q0 142 -190 142q-133 0 -290 -84v-756h-265z" />
<glyph unicode="l" horiz-adv-x="515" d="M125 0v1430h265v-1430h-265z" />
<glyph unicode="m" horiz-adv-x="1795" d="M125 0v1050h205l31 -152q141 152 339 152t271 -144q161 144 337 144q362 0 362 -399v-651h-265v661q0 175 -158 175q-118 0 -227 -106v-730h-265v658q0 178 -146 178q-116 0 -219 -106v-730h-265z" />
<glyph unicode="n" horiz-adv-x="1205" d="M125 0v1050h205l33 -154q151 154 344 154q373 0 373 -388v-662h-265v662q0 174 -173 174q-129 0 -252 -103v-733h-265z" />
<glyph unicode="o" horiz-adv-x="1190" d="M75 525q0 528 520 528t520 -528q0 -527 -520 -527q-518 0 -520 527zM340 529q0 -329 255 -329t255 329q0 321 -255 321t-255 -321z" />
<glyph unicode="p" horiz-adv-x="1177" d="M125 -380v1387q209 43 442 43q535 0 535 -499q0 -551 -498 -551q-106 0 -214 50v-430h-265zM390 274q99 -54 213 -54q237 0 237 333q0 283 -262 283q-113 0 -188 -14v-548z" />
<glyph unicode="q" horiz-adv-x="1187" d="M75 531q0 519 545 519q203 0 442 -43v-1387h-265v430q-108 -50 -244 -50q-478 0 -478 531zM337 533q0 -313 247 -313q124 0 213 54v538q-95 24 -175 24q-285 0 -285 -303z" />
<glyph unicode="r" horiz-adv-x="680" d="M125 0v1050h205l33 -134q138 134 292 134v-214q-148 0 -265 -123v-713h-265z" />
<glyph unicode="s" horiz-adv-x="1025" d="M75 730q0 330 467 330q198 0 373 -60v-220q-175 70 -380 70q-215 0 -215 -110q0 -105 125 -105h170q350 0 350 -315q0 -330 -446 -330q-219 0 -394 60v220q175 -70 404 -70q171 0 171 110q0 105 -115 105h-190q-320 0 -320 315z" />
<glyph unicode="t" horiz-adv-x="665" d="M110 283v937h196l40 -170h264v-210h-235v-483q0 -147 127 -147h108v-210h-236q-264 0 -264 283z" />
<glyph unicode="u" horiz-adv-x="1195" d="M125 381v669h265v-662q0 -174 152 -174q129 0 263 103v733h265v-1050h-207l-32 134q-181 -134 -384 -134q-322 0 -322 381z" />
<glyph unicode="v" horiz-adv-x="1080" d="M0 1050h280l255 -734l265 734h280l-427 -1050h-252z" />
<glyph unicode="w" horiz-adv-x="1599" d="M35 1050h267l136 -731l243 731h227l262 -731l118 731h276l-274 -1050h-249l-247 745l-250 -745h-253z" />
<glyph unicode="x" horiz-adv-x="1080" d="M0 0l393 525l-393 525h295l245 -328l245 328h295l-392 -525l392 -525h-295l-245 328l-245 -328h-295z" />
<glyph unicode="y" horiz-adv-x="1081" d="M0 1050h281l265 -756l259 756h276l-436 -1081q-116 -286 -371 -407l-128 181q176 77 256 251z" />
<glyph unicode="z" horiz-adv-x="990" d="M100 0v200l545 640h-525v210h810v-210l-537 -640h517v-200h-810z" />
<glyph unicode="{" horiz-adv-x="755" d="M100 410v230q210 0 210 312q0 302 130 478h265q-130 -176 -130 -478q0 -352 -250 -427q250 -75 250 -427q0 -302 130 -478h-265q-130 176 -130 478q0 312 -210 312z" />
<glyph unicode="|" horiz-adv-x="565" d="M150 -380v1810h265v-1810h-265z" />
<glyph unicode="}" horiz-adv-x="755" d="M50 -380q130 176 130 478q0 352 170 427q-170 75 -170 427q0 302 -130 478h265q130 -176 130 -478q0 -312 210 -312v-230q-210 0 -210 -312q0 -302 -130 -478h-265z" />
<glyph unicode="~" horiz-adv-x="950" d="M100 400v210q58 61 162 61q86 0 203 -41q117 -40 207 -40q109 0 178 60v-210q-58 -60 -162 -60q-86 0 -203 40q-117 41 -207 41q-109 0 -178 -61z" />
<glyph unicode="&#xa2;" horiz-adv-x="980" d="M60 735q0 435 430 495v200h255v-193q99 -7 185 -27v-210q-130 30 -270 30q-335 0 -335 -295q0 -335 335 -335q140 0 270 30v-210q-86 -20 -185 -27v-193h-255v201q-430 65 -430 534z" />
<glyph unicode="&#xa3;" horiz-adv-x="1217" d="M100 -30v212q186 75 186 231q0 117 -77 291t-77 323q0 413 558 413q270 0 427 -100v-240q-158 130 -434 130q-274 0 -274 -201q0 -144 35 -199h386v-210h-314q39 -104 39 -204q0 -137 -64 -178q22 4 49 4q84 0 213 -43q49 -17 101 -17q125 0 263 98v-230 q-120 -84 -284 -84q-94 0 -201 28q-129 32 -246 32q-153 0 -286 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1250" d="M50 1430h275l292 -510l298 510h285l-413 -660h283v-210h-326v-111h326v-210h-326v-239h-265v239h-319v210h319v111h-319v210h277z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M150 723q0 717 748 717q737 0 737 -717q0 -733 -737 -733q-748 0 -748 733zM255 719q0 -639 623 -639q652 0 652 639q0 631 -632 631q-643 0 -643 -631zM477 728q0 416 416 416q165 0 290 -51v-98q-125 58 -276 58q-325 0 -325 -325q0 -352 325 -352q151 0 276 58v-98 q-125 -51 -290 -51q-416 0 -416 443z" />
<glyph unicode="&#xad;" d="M100 420v210h500v-210h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1163" d="M150 1023q0 427 430 427q433 0 433 -427q0 -415 -433 -415q-418 0 -430 415zM223 1025q0 -361 357 -361q360 0 360 361q0 369 -360 369q-357 0 -357 -369zM404 756v536h229q153 0 153 -128q0 -105 -150 -155l184 -253h-91l-171 241v45q154 25 154 119q0 74 -86 74h-153 v-479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="663" d="M100 1171l144 259h319l-239 -259h-224z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" d="M100 420v210h500v-210h-500z" />
<glyph unicode="&#x2011;" d="M100 420v210h500v-210h-500z" />
<glyph unicode="&#x2012;" d="M100 420v210h500v-210h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1200" d="M100 420v210h1000v-210h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1700" d="M100 420v210h1500v-210h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="495" d="M50 995l150 435h245l-150 -435h-245z" />
<glyph unicode="&#x2019;" horiz-adv-x="495" d="M50 995l150 435h245l-150 -435h-245z" />
<glyph unicode="&#x201c;" horiz-adv-x="925" d="M50 995l150 435h245l-150 -435h-245zM480 995l150 435h245l-150 -435h-245z" />
<glyph unicode="&#x201d;" horiz-adv-x="925" d="M50 995l150 435h245l-150 -435h-245zM480 995l150 435h245l-150 -435h-245z" />
<glyph unicode="&#x2022;" horiz-adv-x="630" d="M100 725q0 215 215 215t215 -215t-215 -215t-215 215z" />
<glyph unicode="&#x2026;" horiz-adv-x="1465" d="M100 0v245h265v-245h-265zM600 0v245h265v-245h-265zM1100 0v245h265v-245h-265z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1385" d="M100 735q0 705 750 705q215 0 400 -60v-240q-185 70 -380 70q-418 0 -485 -228h673v-210h-693v-70h693v-210h-673q57 -272 485 -272q195 0 380 70v-240q-185 -60 -400 -60q-750 0 -750 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1606" d="M150 1359v71h511v-71h-212v-602h-87v602h-212zM750 757v673h110l248 -561l242 561h106v-673h-78v543l-239 -543h-69l-243 543v-543h-77z" />
<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationBoldItalic" horiz-adv-x="700" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="450" />
<glyph unicode=" " horiz-adv-x="450" />
<glyph unicode="&#x09;" horiz-adv-x="450" />
<glyph unicode="&#xa0;" horiz-adv-x="450" />
<glyph unicode="!" horiz-adv-x="565" d="M8 0l49 245h265l-49 -245h-265zM82 370l212 1060h265l-212 -1060h-265z" />
<glyph unicode="&#x22;" horiz-adv-x="815" d="M187 995l57 435h245l-117 -435h-185zM557 995l57 435h245l-117 -435h-185z" />
<glyph unicode="#" horiz-adv-x="1893" d="M27 344l61 154h402l164 378h-401l61 154h412l179 395h180l-179 -395h378l182 400h180l-181 -400h392l-61 -154h-402l-164 -378h401l-61 -154h-412l-160 -349h-180l160 349h-378l-160 -349h-180l159 349h-392zM671 498h377l165 378h-377z" />
<glyph unicode="$" horiz-adv-x="1025" d="M29 230l44 220q161 -70 390 -70q171 0 193 110q20 100 -95 100h-190q-320 0 -256 320q55 275 388 321l40 199h255l-39 -195q134 -12 250 -55l-44 -220q-161 70 -366 70q-215 0 -237 -110q-20 -100 105 -100h170q350 0 286 -320q-55 -276 -375 -321l-36 -179h-255l35 175 q-146 12 -263 55z" />
<glyph unicode="%" horiz-adv-x="1502" d="M-42 0l1303 1430h265l-1303 -1430h-265zM186 1140q60 300 388 300q324 0 264 -300q-64 -319 -388 -319q-328 0 -264 319zM376 1142q-29 -147 109 -147q134 0 163 147q25 124 -109 124q-138 0 -163 -124zM668 299q62 310 390 310q324 0 262 -310q-62 -309 -386 -309 q-328 0 -266 309zM858 301q-27 -137 111 -137q134 0 161 137q27 134 -107 134q-138 0 -165 -134z" />
<glyph unicode="&#x26;" horiz-adv-x="1335" d="M40 414q46 227 246 313q-166 85 -121 308q79 395 589 395q185 0 350 -50l-42 -210q-165 50 -337 50q-258 0 -294 -180q-42 -210 163 -210h338l28 142h143l74 -142h182l-42 -210h-162l-26 -130q-99 -493 -647 -493q-525 0 -442 417zM306 419q-41 -209 220 -209 q282 0 338 282l26 128h-336q-207 0 -248 -201z" />
<glyph unicode="'" horiz-adv-x="445" d="M187 995l57 435h245l-117 -435h-185z" />
<glyph unicode="(" horiz-adv-x="640" d="M63 525q90 453 381 905h265q-291 -452 -381 -905q-91 -453 19 -905h-265q-110 452 -19 905z" />
<glyph unicode=")" horiz-adv-x="640" d="M-143 -380q290 452 381 905t-19 905h265q110 -452 19 -905t-381 -905h-265z" />
<glyph unicode="*" horiz-adv-x="810" d="M188 1150l78 150l190 -103l16 233h156l-76 -232l229 101l18 -147l-236 -43l125 -170l-142 -92l-72 205l-153 -204l-107 89l196 171z" />
<glyph unicode="+" horiz-adv-x="950" d="M42 420l42 210h270l54 270h210l-54 -270h270l-42 -210h-270l-54 -270h-210l54 270h-270z" />
<glyph unicode="," horiz-adv-x="465" d="M-167 -250l237 435h265l-237 -435h-265z" />
<glyph unicode="-" d="M42 420l42 210h500l-42 -210h-500z" />
<glyph unicode="." horiz-adv-x="465" d="M-42 0l49 245h265l-49 -245h-265z" />
<glyph unicode="/" horiz-adv-x="1060" d="M-117 0l1011 1430h285l-1011 -1430h-285z" />
<glyph unicode="0" horiz-adv-x="1445" d="M91 713q145 727 783 727q627 0 482 -727q-145 -723 -772 -723q-638 0 -493 723zM367 719q-100 -499 263 -499q352 0 452 499q98 491 -254 491q-363 0 -461 -491z" />
<glyph unicode="1" horiz-adv-x="690" d="M108 0l242 1211h-150l22 109l443 140l-292 -1460h-265z" />
<glyph unicode="2" horiz-adv-x="1180" d="M-42 0l40 200q814 497 879 820q38 190 -222 190q-220 0 -437 -110l48 240q215 100 435 100q525 0 441 -420q-74 -370 -731 -790h573l-46 -230h-980z" />
<glyph unicode="3" horiz-adv-x="1115" d="M-32 50l48 240q186 -70 406 -70q270 0 306 180q42 210 -150 210h-348l46 230h345q195 0 237 210q32 160 -238 160q-220 0 -434 -70l48 240q212 60 432 60q535 0 457 -390q-47 -236 -253 -325q171 -85 123 -325q-82 -410 -617 -410q-220 0 -408 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M-20 310l40 200l769 920h284l-748 -910h419l96 478h265l-96 -478l121 -136l-15 -74h-148l-62 -310h-265l62 310h-722z" />
<glyph unicode="5" horiz-adv-x="1160" d="M-7 50l44 220q186 -70 396 -70q285 0 335 250q46 230 -229 230q-225 0 -430 -50l210 800h854l-42 -210h-626l-94 -352q61 22 170 22q540 0 452 -440q-92 -460 -652 -460q-200 0 -388 60z" />
<glyph unicode="6" horiz-adv-x="1250" d="M68 550q111 556 873 923l84 -207q-384 -161 -562 -389q130 43 255 43q524 0 436 -440q-98 -490 -661 -490q-537 0 -425 560zM324 556q-71 -356 220 -356q293 0 349 280q46 230 -226 230q-154 0 -304 -48q-26 -40 -39 -106z" />
<glyph unicode="7" horiz-adv-x="1170" d="M45 0l892 1200h-739l46 230h1020l-42 -210l-886 -1220h-291z" />
<glyph unicode="8" horiz-adv-x="1280" d="M23 424q44 223 278 331q-153 95 -107 323q73 366 593 366t447 -366q-46 -228 -242 -323q195 -108 151 -331q-87 -434 -637 -434q-570 0 -483 434zM287 418q-40 -198 270 -198q280 0 320 198q42 212 -251 212q-297 0 -339 -212zM453 1048q-38 -188 222 -188q250 0 288 188 q32 162 -221 162q-257 0 -289 -162z" />
<glyph unicode="9" horiz-adv-x="1265" d="M151 963q96 480 659 480q537 0 425 -560q-111 -556 -873 -923l-84 207q374 161 564 399q-132 -53 -257 -53q-524 0 -434 450zM412 963q-48 -240 224 -240q154 0 304 48q26 40 39 106q71 356 -220 356q-293 0 -347 -270z" />
<glyph unicode=":" horiz-adv-x="490" d="M-17 0l49 245h265l-49 -245h-265zM144 805l49 245h265l-49 -245h-265z" />
<glyph unicode=";" horiz-adv-x="615" d="M-92 -250l237 435h265l-237 -435h-265zM269 805l49 245h265l-49 -245h-265z" />
<glyph unicode="&#x3c;" horiz-adv-x="1100" d="M44 430l38 190l976 380l-50 -250l-619 -229l529 -221l-50 -250z" />
<glyph unicode="=" horiz-adv-x="950" d="M6 240l42 210h750l-42 -210h-750zM78 600l42 210h750l-42 -210h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1100" d="M-32 50l50 250l617 221l-527 229l50 250l824 -380l-38 -190z" />
<glyph unicode="?" horiz-adv-x="1115" d="M108 0l49 245h265l-49 -245h-265zM182 370l88 440h265q255 0 301 230q36 180 -234 180q-190 0 -410 -50l42 210q220 50 410 50q515 0 437 -390q-88 -440 -588 -440l-46 -230h-265z" />
<glyph unicode="@" horiz-adv-x="2190" d="M66 540q180 900 1174 900q996 0 816 -900q-138 -690 -615 -690q-301 0 -256 224l28 150l4 46q-172 -270 -408 -270q-368 0 -266 511q108 539 653 539q183 0 433 -43l-177 -889q-12 -58 68 -58q175 0 271 480q138 690 -578 690q-744 0 -882 -690q-142 -710 533 -710 l-42 -210q-940 0 -756 920zM806 513q-59 -293 98 -293q194 0 358 274l63 318q-60 24 -200 24q-255 0 -319 -323z" />
<glyph unicode="A" horiz-adv-x="1562" d="M-117 0l893 1430h285l334 -1430h-275l-85 390h-475l137 230h288l-118 537l-702 -1157h-282z" />
<glyph unicode="B" horiz-adv-x="1321" d="M8 0l286 1430h670q350 0 350 -246q0 -40 -9 -87q-48 -244 -335 -349q228 -44 228 -241q0 -39 -9 -84q-85 -423 -532 -423h-649zM319 230h373q176 0 212 180q7 33 7 60q0 163 -225 163h-80l34 171q341 55 385 276q3 17 3 31q0 89 -127 89h-388z" />
<glyph unicode="C" horiz-adv-x="1390" d="M105 735q141 705 911 705q235 0 406 -70l-48 -240q-169 80 -384 80q-515 0 -610 -475q-17 -86 -17 -157q0 -358 429 -358q215 0 416 80l-48 -240q-199 -70 -434 -70q-645 0 -645 523q0 101 24 222z" />
<glyph unicode="D" horiz-adv-x="1495" d="M8 0l286 1430h560q597 0 597 -477q0 -91 -22 -199q-151 -754 -861 -754h-560zM319 230h295q445 0 550 524q15 74 15 136q0 310 -371 310h-295z" />
<glyph unicode="E" horiz-adv-x="1238" d="M8 0l286 1430h979l-46 -228h-716l-72 -360h682l-47 -237h-685l-75 -375h733l-46 -230h-993z" />
<glyph unicode="F" horiz-adv-x="1164" d="M8 0l286 1430h939l-46 -228h-676l-72 -360h642l-47 -237h-645l-121 -605h-260z" />
<glyph unicode="G" horiz-adv-x="1390" d="M105 735q141 705 911 705q235 0 406 -70l-48 -240q-169 80 -384 80q-515 0 -610 -475q-18 -90 -18 -164q0 -351 401 -351q72 0 169 24l83 416h265l-119 -594q-188 -76 -448 -76q-633 0 -633 520q0 102 25 225z" />
<glyph unicode="H" horiz-adv-x="1535" d="M8 0l286 1430h265l-118 -590h705l118 590h265l-286 -1430h-265l122 610h-705l-122 -610h-265z" />
<glyph unicode="I" horiz-adv-x="565" d="M8 0l286 1430h265l-286 -1430h-265z" />
<glyph unicode="J" horiz-adv-x="740" d="M-117 0l46 230q300 0 336 182l204 1018h265l-204 -1018q-82 -412 -647 -412z" />
<glyph unicode="K" horiz-adv-x="1450" d="M8 0l286 1430h265l-286 -1430h-265zM487 668l34 172l670 590h334l-793 -694l581 -736h-347z" />
<glyph unicode="L" horiz-adv-x="1083" d="M8 0l286 1430h265l-240 -1200h568l-46 -230h-833z" />
<glyph unicode="M" horiz-adv-x="1800" d="M8 0l286 1430h275l268 -1085l692 1085h265l-286 -1430h-245l199 996l-587 -996h-226l-197 996l-199 -996h-245z" />
<glyph unicode="N" horiz-adv-x="1575" d="M8 0l286 1430h265l551 -1022l204 1022h255l-286 -1430h-265l-546 1044l-209 -1044h-255z" />
<glyph unicode="O" horiz-adv-x="1625" d="M101 713q145 727 863 727q587 0 587 -501q0 -103 -25 -226q-145 -723 -852 -723q-589 0 -589 533q0 88 16 190zM377 719q-18 -92 -18 -167q0 -332 361 -332q432 0 532 499q18 91 18 165q0 326 -352 326q-443 0 -541 -491z" />
<glyph unicode="P" horiz-adv-x="1253" d="M8 0l286 1430h640q370 0 370 -287q0 -53 -13 -116q-87 -437 -704 -529l9 236q373 65 417 285q6 29 6 54q0 124 -149 124h-358l-239 -1197h-265z" />
<glyph unicode="Q" horiz-adv-x="1625" d="M101 713q145 727 863 727q587 0 587 -501q0 -102 -25 -226q-132 -657 -729 -717q39 -173 260 -176q130 0 216 30l-42 -210q-86 -30 -216 -30q-447 0 -447 375v10q-483 46 -483 528q0 88 16 190zM377 719q-18 -92 -18 -167q0 -332 361 -332q432 0 532 499q18 91 18 165 q0 326 -352 326q-443 0 -541 -491z" />
<glyph unicode="R" horiz-adv-x="1315" d="M8 2l286 1428h650q373 0 373 -277q0 -49 -12 -106q-61 -303 -427 -429l330 -618h-309l-311 623l24 121q368 65 414 295q5 24 5 44q0 114 -151 114h-363l-239 -1195h-270z" />
<glyph unicode="S" horiz-adv-x="1280" d="M-5 60l48 240q199 -80 470 -80q329 0 373 220q4 22 4 41q0 119 -174 119h-224q-371 0 -371 286q0 52 12 114q88 440 713 440q240 0 441 -70l-48 -240q-199 80 -439 80q-360 0 -402 -210q-5 -25 -5 -46q0 -114 147 -114h224q399 0 398 -292q0 -50 -11 -108 q-90 -450 -684 -450q-271 0 -472 70z" />
<glyph unicode="T" horiz-adv-x="1085" d="M98 1200l46 230h1085l-46 -230h-410l-240 -1200h-265l240 1200h-410z" />
<glyph unicode="U" horiz-adv-x="1530" d="M120 562l174 868h265l-174 -868q-11 -56 -11 -102q0 -240 293 -240q350 0 418 342l174 868h265l-174 -868q-114 -572 -729 -572q-519 0 -519 407q0 76 18 165z" />
<glyph unicode="V" horiz-adv-x="1512" d="M144 1430h305l224 -1095l661 1095h322l-913 -1430h-285z" />
<glyph unicode="W" horiz-adv-x="1890" d="M128 0l51 1430h259l-52 -1027l577 1027h255l151 -987l359 987h271l-555 -1430h-252l-169 1122l-646 -1122h-249z" />
<glyph unicode="X" horiz-adv-x="1502" d="M-117 0l706 715l-420 715h325l291 -532l499 532h345l-705 -715l419 -715h-325l-291 532l-499 -532h-345z" />
<glyph unicode="Y" horiz-adv-x="1300" d="M169 1430h275l264 -689l516 689h285l-712 -930l-100 -500h-265l100 500z" />
<glyph unicode="Z" horiz-adv-x="1250" d="M-17 0l46 230l968 970h-754l46 230h1040l-46 -230l-955 -970h761l-46 -230h-1060z" />
<glyph unicode="[" horiz-adv-x="680" d="M-118 -380l362 1810h530l-42 -210h-265l-278 -1390h265l-42 -210h-530z" />
<glyph unicode="\" horiz-adv-x="1050" d="M169 1430h275l439 -1430h-275z" />
<glyph unicode="]" horiz-adv-x="680" d="M-168 -380l42 210h265l278 1390h-265l42 210h530l-362 -1810h-530z" />
<glyph unicode="^" horiz-adv-x="1050" d="M48 700l546 730h150l254 -730h-230l-154 473l-336 -473h-230z" />
<glyph unicode="_" horiz-adv-x="1050" d="M-159 -210l42 210h1000l-42 -210h-1000z" />
<glyph unicode="`" horiz-adv-x="663" d="M244 1430h319l92 -259h-224z" />
<glyph unicode="a" horiz-adv-x="1187" d="M35 511q108 539 653 539q183 0 433 -43l-201 -1007h-235l24 270q-172 -270 -408 -270q-288 0 -288 313q0 87 22 198zM298 513q-16 -80 -16 -138q0 -155 114 -155q194 0 358 274l63 318q-60 24 -200 24q-255 0 -319 -323z" />
<glyph unicode="b" horiz-adv-x="1178" d="M-8 43l277 1387h265l-126 -630q169 250 415 250q273 0 273 -297q0 -82 -21 -187q-114 -566 -627 -566q-216 0 -456 43zM297 243q85 -29 205 -29q240 0 310 349q12 62 12 109q0 158 -136 158q-164 0 -324 -254z" />
<glyph unicode="c" horiz-adv-x="940" d="M25 535q103 515 643 515q150 0 274 -30l-42 -210q-124 30 -254 30q-295 0 -356 -305q-13 -66 -13 -119q0 -206 203 -206q170 0 326 130l-42 -210q-156 -130 -346 -130q-412 0 -412 363q0 78 19 172z" />
<glyph unicode="d" horiz-adv-x="1187" d="M35 511q108 539 653 539q81 0 175 -8l78 388h265l-286 -1430h-235l24 270q-172 -270 -408 -270q-288 0 -288 313q0 87 22 198zM298 513q-16 -80 -16 -138q0 -155 114 -155q194 0 358 274l63 318q-60 24 -200 24q-255 0 -319 -323z" />
<glyph unicode="e" horiz-adv-x="1081" d="M25 537q103 513 606 513q393 0 393 -241q0 -34 -8 -73q-63 -314 -486 -314h-263q-6 -28 -5 -52q0 -160 239 -160q209 0 394 130l-42 -210q-165 -130 -414 -130q-432 0 -432 370q0 76 18 167zM306 616h265q165 0 188 113q2 12 2 22q0 91 -172 91q-220 0 -283 -226z" />
<glyph unicode="f" horiz-adv-x="692" d="M-201 -293q152 135 200 373l194 970q86 432 558 432q129 0 226 -40l-42 -210q-91 40 -207 40q-226 0 -270 -222h315l-42 -210h-315l-152 -760q-64 -318 -286 -518z" />
<glyph unicode="g" horiz-adv-x="1187" d="M-53 -330l42 210q143 -50 336 -50q296 0 330 170l54 270q-172 -270 -408 -270q-288 0 -288 313q0 87 22 198q108 539 653 539q183 0 433 -43l-201 -1007q-76 -380 -639 -380q-194 0 -334 50zM298 513q-16 -80 -16 -138q0 -155 114 -155q194 0 358 274l63 318 q-60 24 -200 24q-255 0 -319 -323z" />
<glyph unicode="h" horiz-adv-x="1235" d="M-17 0l286 1430h265l-143 -714q191 334 484 334q247 0 248 -227q0 -51 -13 -114l-142 -709h-265l142 712q4 18 4 34q0 90 -122 90q-189 0 -378 -333l-101 -503h-265z" />
<glyph unicode="i" horiz-adv-x="515" d="M-17 0l210 1050h265l-210 -1050h-265zM227 1220l42 210h265l-42 -210h-265z" />
<glyph unicode="j" horiz-adv-x="515" d="M-201 -293q152 135 200 373l194 970h265l-194 -970q-64 -318 -286 -518zM227 1220l42 210h265l-42 -210h-265z" />
<glyph unicode="k" horiz-adv-x="1211" d="M-17 0l286 1430h265l-132 -662q219 282 479 282q274 0 273 -204q0 -36 -8 -79q-40 -200 -356 -341l239 -426h-304l-203 396l17 83q311 80 347 259q2 13 2 24q0 78 -122 78q-183 0 -409 -294l-109 -546h-265z" />
<glyph unicode="l" horiz-adv-x="515" d="M-17 0l286 1430h265l-286 -1430h-265z" />
<glyph unicode="m" horiz-adv-x="1835" d="M-17 0l210 1050h235l-38 -342q180 342 408 342q244 0 244 -227q0 -52 -13 -117q201 344 427 344q258 0 258 -256q0 -64 -16 -143l-130 -651h-265l132 661q8 40 8 71q0 104 -91 104q-168 0 -344 -336l-100 -500h-265l132 658q8 41 8 73q0 105 -89 105q-176 0 -346 -336 l-100 -500h-265z" />
<glyph unicode="n" horiz-adv-x="1235" d="M-17 0l210 1050h235l-41 -354q195 354 488 354q247 0 248 -227q0 -51 -13 -114l-142 -709h-265l142 712q4 18 4 34q0 90 -122 90q-189 0 -378 -333l-101 -503h-265z" />
<glyph unicode="o" horiz-adv-x="1170" d="M38 525q107 535 617 535q422 0 421 -366q0 -77 -18 -169q-107 -534 -617 -534q-421 0 -421 367q0 76 18 167zM304 529q-14 -70 -14 -125q0 -204 193 -204q245 0 311 329q13 66 13 119q0 202 -194 202q-245 0 -309 -321z" />
<glyph unicode="p" horiz-adv-x="1178" d="M-93 -380l286 1430h235l-20 -250q169 250 415 250q272 0 272 -296q0 -82 -21 -188q-113 -566 -626 -566q-97 0 -198 9l-78 -389h-265zM297 243q85 -29 205 -29q240 0 310 349q12 62 12 109q0 158 -136 158q-164 0 -325 -254z" />
<glyph unicode="q" horiz-adv-x="1187" d="M35 511q108 539 653 539q183 0 433 -43l-277 -1387h-265l130 650q-172 -270 -408 -270q-288 0 -288 313q0 87 22 198zM298 513q-16 -80 -16 -138q0 -155 114 -155q194 0 358 274l63 318q-60 24 -200 24q-255 0 -319 -323z" />
<glyph unicode="r" horiz-adv-x="730" d="M-17 0l210 1050h235l-37 -334q178 334 382 334l-45 -224q-198 0 -379 -323l-101 -503h-265z" />
<glyph unicode="s" horiz-adv-x="1025" d="M-7 50l44 220q161 -70 390 -70q171 0 193 110q3 15 3 27q0 73 -98 73h-190q-267 0 -267 222q0 44 11 98q66 330 533 330q198 0 361 -60l-44 -220q-161 70 -366 70q-215 0 -237 -110q-3 -14 -3 -26q0 -74 108 -74h170q296 0 296 -229q0 -42 -10 -91q-66 -330 -512 -330 q-219 0 -382 60z" />
<glyph unicode="t" horiz-adv-x="680" d="M40 283l187 937h196l6 -170h244l-42 -210h-215l-97 -483q-5 -27 -5 -50q0 -97 103 -97h88l-42 -210h-216q-217 0 -217 191q0 42 10 92z" />
<glyph unicode="u" horiz-adv-x="1235" d="M51 341l142 709h265l-142 -712q-4 -18 -3 -34q0 -90 121 -90q189 0 378 333l101 503h265l-210 -1050h-235l41 354q-195 -354 -488 -354q-247 0 -247 227q0 51 12 114z" />
<glyph unicode="v" horiz-adv-x="1080" d="M68 1050h280l108 -734l412 734h280l-637 -1050h-252z" />
<glyph unicode="w" horiz-adv-x="1585" d="M43 550q55 275 200 500h265q-145 -225 -200 -500q-21 -103 -21 -173q0 -147 92 -147q185 0 249 320l100 500h265l-100 -500q-16 -82 -16 -143q0 -177 137 -177q135 0 199 320q28 138 27.5 262.5t-27.5 237.5h265q28 -112 27.5 -237t-27.5 -263q-110 -550 -510 -550 q-235 0 -262 289q-138 -289 -373 -289q-314 0 -314 338q0 93 24 212z" />
<glyph unicode="x" horiz-adv-x="1080" d="M-142 0l498 525l-288 525h285l179 -338l311 338h305l-497 -525l287 -525h-285l-179 338l-311 -338h-305z" />
<glyph unicode="y" horiz-adv-x="1235" d="M-5 -330l42 210q143 -50 336 -50q296 0 330 170l71 354q-195 -354 -488 -354q-247 0 -247 227q0 51 12 114l142 709h265l-142 -712q-4 -18 -4 -34q0 -90 122 -90q189 0 378 333l101 503h265l-210 -1050q-76 -380 -639 -380q-194 0 -334 50z" />
<glyph unicode="z" horiz-adv-x="960" d="M-62 0l40 200l633 640h-485l42 210h780l-42 -210l-635 -640h487l-40 -200h-780z" />
<glyph unicode="{" horiz-adv-x="755" d="M40 410l46 230q210 0 272 312q61 302 226 478h265q-165 -176 -226 -478q-70 -352 -335 -427q235 -75 165 -427q-61 -302 34 -478h-265q-95 176 -34 478q62 312 -148 312z" />
<glyph unicode="|" horiz-adv-x="565" d="M-68 -380l362 1810h265l-362 -1810h-265z" />
<glyph unicode="}" horiz-adv-x="755" d="M-168 -380q165 176 226 478q70 352 255 427q-155 75 -85 427q61 302 -34 478h265q95 -176 34 -478q-62 -312 148 -312l-46 -230q-210 0 -272 -312q-61 -302 -226 -478h-265z" />
<glyph unicode="~" horiz-adv-x="950" d="M38 400l42 210q70 61 174 61q86 0 195 -41q109 -40 199 -40q109 0 190 60l-42 -210q-70 -60 -174 -60q-86 0 -195 40q-109 41 -199 41q-109 0 -190 -61z" />
<glyph unicode="&#xa2;" horiz-adv-x="940" d="M64 729q86 431 479 501l40 200h255l-37 -189q96 -7 180 -27l-42 -210q-124 30 -254 30q-295 0 -356 -305q-65 -325 190 -325q170 0 326 130l-42 -210q-97 -81 -208 -112l-43 -212h-255l41 203q-367 60 -274 526z" />
<glyph unicode="&#xa3;" horiz-adv-x="1217" d="M-48 -30l42 212q201 75 233 231q23 117 -19 291t-13 323q83 413 641 413q270 0 407 -100l-48 -240q-132 130 -408 130q-274 0 -314 -201q-29 -144 -5 -199h386l-42 -210h-314q18 -104 -2 -204q-27 -137 -99 -178q22 4 49 4q84 0 205 -43q45 -17 97 -17q125 0 283 98 l-46 -230q-137 -84 -301 -84q-94 0 -195 28q-123 32 -240 32q-153 0 -297 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1250" d="M66 239l42 210h319l22 111h-319l42 210h277l-255 660h265l190 -510l400 510h295l-545 -660h283l-42 -210h-326l-22 -111h326l-42 -210h-326l-48 -239h-265l48 239h-319z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M153 723q143 717 891 717q737 0 594 -717q-147 -733 -884 -733q-748 0 -601 733zM257 719q-128 -639 495 -639q652 0 780 639q126 631 -506 631q-643 0 -769 -631zM481 728q83 416 499 416q165 0 280 -51l-20 -98q-113 58 -264 58q-325 0 -390 -325q-71 -352 254 -352 q151 0 288 58l-20 -98q-135 -51 -300 -51q-416 0 -327 443z" />
<glyph unicode="&#xad;" d="M42 420l42 210h500l-42 -210h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1163" d="M213 1023q85 427 515 427q433 0 348 -427q-83 -415 -516 -415q-418 0 -347 415zM286 1025q-72 -361 285 -361q360 0 432 361q74 369 -286 369q-357 0 -431 -369zM414 756l107 536h229q153 0 127 -128q-21 -105 -181 -155l134 -253h-91l-123 241l9 45q159 25 178 119 q14 74 -72 74h-153l-95 -479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="663" d="M192 1171l196 259h319l-291 -259h-224z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" d="M42 420l42 210h500l-42 -210h-500z" />
<glyph unicode="&#x2011;" d="M42 420l42 210h500l-42 -210h-500z" />
<glyph unicode="&#x2012;" d="M42 420l42 210h500l-42 -210h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1200" d="M42 420l42 210h1000l-42 -210h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1700" d="M42 420l42 210h1500l-42 -210h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="495" d="M107 995l237 435h245l-237 -435h-245z" />
<glyph unicode="&#x2019;" horiz-adv-x="495" d="M107 995l237 435h245l-237 -435h-245z" />
<glyph unicode="&#x201c;" horiz-adv-x="925" d="M107 995l237 435h245l-237 -435h-245zM537 995l237 435h245l-237 -435h-245z" />
<glyph unicode="&#x201d;" horiz-adv-x="925" d="M107 995l237 435h245l-237 -435h-245zM537 995l237 435h245l-237 -435h-245z" />
<glyph unicode="&#x2022;" horiz-adv-x="630" d="M103 725q43 215 258 215t172 -215t-258 -215t-172 215z" />
<glyph unicode="&#x2026;" horiz-adv-x="1465" d="M-42 0l49 245h265l-49 -245h-265zM458 0l49 245h265l-49 -245h-265zM958 0l49 245h265l-49 -245h-265z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1385" d="M105 735q141 705 891 705q215 0 388 -60l-48 -240q-171 70 -366 70q-418 0 -531 -228h673l-42 -210h-693l-14 -70h693l-42 -210h-673q3 -272 431 -272q195 0 394 70l-48 -240q-197 -60 -412 -60q-750 0 -601 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1606" d="M280 1359l14 71h511l-14 -71h-212l-120 -602h-87l120 602h-212zM760 757l134 673h110l136 -561l354 561h106l-134 -673h-78l108 543l-347 -543h-69l-135 543l-108 -543h-77z" />
<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationItalic" horiz-adv-x="700" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph unicode=" " horiz-adv-x="500" />
<glyph unicode="&#x09;" horiz-adv-x="500" />
<glyph unicode="&#xa0;" horiz-adv-x="500" />
<glyph unicode="!" horiz-adv-x="485" d="M8 0l37 185h185l-37 -185h-185zM82 370l212 1060h185l-212 -1060h-185z" />
<glyph unicode="&#x22;" horiz-adv-x="755" d="M187 995l57 435h185l-117 -435h-125zM557 995l57 435h185l-117 -435h-125z" />
<glyph unicode="#" horiz-adv-x="1893" d="M27 344l61 154h402l164 378h-401l61 154h412l179 395h180l-179 -395h378l182 400h180l-181 -400h392l-61 -154h-402l-164 -378h401l-61 -154h-412l-160 -349h-180l160 349h-378l-160 -349h-180l159 349h-392zM671 498h377l165 378h-377z" />
<glyph unicode="$" horiz-adv-x="1050" d="M46 240l32 160q173 -60 362 -60q251 0 281 150q28 140 -147 140h-150q-340 0 -278 310q55 276 429 298l38 192h175l-39 -194q132 -10 257 -46l-32 -160q-173 60 -361 60q-262 0 -292 -150q-28 -140 137 -140h150q360 0 298 -310q-50 -251 -364 -292l-40 -198h-175l38 191 q-165 5 -319 49z" />
<glyph unicode="%" horiz-adv-x="1422" d="M-42 0l1303 1430h205l-1303 -1430h-205zM194 1180q52 260 330 260q274 0 222 -260q-52 -259 -326 -259q-278 0 -226 259zM324 1182q-29 -147 119 -147q144 0 173 147q29 144 -115 144q-148 0 -177 -144zM678 249q52 260 330 260q274 0 222 -260q-52 -259 -326 -259 q-278 0 -226 259zM808 251q-29 -147 119 -147q144 0 173 147q29 144 -115 144q-148 0 -177 -144z" />
<glyph unicode="&#x26;" horiz-adv-x="1275" d="M36 394q50 247 260 333q-176 85 -129 318q77 385 587 385q185 0 350 -50l-30 -150q-165 50 -337 50q-338 0 -384 -230q-50 -250 205 -250h388l28 142h63l74 -142h182l-30 -150h-162l-32 -160q-99 -493 -617 -493q-495 0 -416 397zM222 399q-49 -249 252 -249 q342 0 410 342l32 158h-386q-257 0 -308 -251z" />
<glyph unicode="'" horiz-adv-x="385" d="M187 995l57 435h185l-117 -435h-125z" />
<glyph unicode="(" horiz-adv-x="585" d="M63 525q90 453 381 905h185q-291 -452 -381 -905q-91 -453 19 -905h-185q-110 452 -19 905z" />
<glyph unicode=")" horiz-adv-x="585" d="M-118 -380q290 452 381 905t-19 905h185q110 -452 19 -905t-381 -905h-185z" />
<glyph unicode="*" horiz-adv-x="810" d="M188 1150l78 150l190 -103l16 233h156l-76 -232l229 101l18 -147l-236 -43l125 -170l-142 -92l-72 205l-153 -204l-107 89l196 171z" />
<glyph unicode="+" horiz-adv-x="950" d="M48 450l30 150h300l60 300h150l-60 -300h300l-30 -150h-300l-60 -300h-150l60 300h-300z" />
<glyph unicode="," horiz-adv-x="385" d="M-167 -250l237 435h185l-237 -435h-185z" />
<glyph unicode="-" d="M48 450l30 150h500l-30 -150h-500z" />
<glyph unicode="." horiz-adv-x="385" d="M-42 0l37 185h185l-37 -185h-185z" />
<glyph unicode="/" horiz-adv-x="980" d="M-117 0l1011 1430h205l-1011 -1430h-205z" />
<glyph unicode="0" horiz-adv-x="1445" d="M111 713q145 727 763 727q607 0 462 -727q-145 -723 -752 -723q-618 0 -473 723zM307 719q-116 -579 307 -579q412 0 528 579q114 571 -298 571q-423 0 -537 -571z" />
<glyph unicode="1" horiz-adv-x="645" d="M108 0l250 1251h-150l18 89l355 100l-288 -1440h-185z" />
<glyph unicode="2" horiz-adv-x="1145" d="M-82 0l30 150q904 547 969 870q54 270 -286 270q-220 0 -437 -110l32 160q215 100 435 100q525 0 441 -420q-74 -370 -889 -870h715l-30 -150h-980z" />
<glyph unicode="3" horiz-adv-x="1150" d="M-32 50l32 160q186 -70 386 -70q330 0 382 260q50 250 -202 250h-328l30 150h325q255 0 305 250q48 240 -282 240q-200 0 -414 -70l32 160q212 60 412 60q515 0 437 -390q-47 -236 -253 -325q171 -85 123 -325q-82 -410 -597 -410q-200 0 -388 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M-14 340l30 150l763 940h194l-764 -940h559l102 508h185l-102 -508l133 -76l-15 -74h-148l-68 -340h-185l68 340h-752z" />
<glyph unicode="5" horiz-adv-x="1175" d="M-7 50l32 160q186 -70 386 -70q365 0 427 310q52 260 -303 260q-225 0 -418 -40l182 760h864l-30 -150h-706l-112 -442q121 22 250 22q540 0 458 -410q-92 -460 -652 -460q-190 0 -378 60z" />
<glyph unicode="6" horiz-adv-x="1260" d="M68 550q111 556 843 923l70 -127q-397 -176 -610 -479q142 53 327 53q514 0 424 -450q-96 -480 -639 -480q-527 0 -415 560zM244 556q-83 -416 278 -416q353 0 419 330q60 300 -282 300q-214 0 -354 -48q-40 -60 -61 -166z" />
<glyph unicode="7" horiz-adv-x="1090" d="M70 0l878 1280h-769l30 150h950l-30 -150l-858 -1280h-201z" />
<glyph unicode="8" horiz-adv-x="1240" d="M43 424q44 223 276 321q-151 105 -105 333q73 366 553 366t407 -366q-46 -228 -244 -333q197 -98 153 -321q-87 -434 -607 -434t-433 434zM227 418q-56 -278 284 -278q330 0 386 278q50 252 -293 252q-327 0 -377 -252zM395 1058q-48 -238 252 -238q290 0 338 238 q46 232 -257 232q-287 0 -333 -232z" />
<glyph unicode="9" horiz-adv-x="1260" d="M149 953q96 480 639 480q527 0 415 -560q-111 -556 -843 -923l-70 127q397 176 610 479q-144 -63 -329 -63q-514 0 -422 460zM330 953q-60 -300 282 -300q214 0 354 48q40 60 61 166q83 416 -278 416q-353 0 -419 -330z" />
<glyph unicode=":" horiz-adv-x="435" d="M8 0l37 185h185l-37 -185h-185zM181 865l37 185h185l-37 -185h-185z" />
<glyph unicode=";" horiz-adv-x="535" d="M-92 -250l237 435h185l-237 -435h-185zM281 865l37 185h185l-37 -185h-185z" />
<glyph unicode="&#x3c;" horiz-adv-x="1100" d="M48 450l30 150l980 400l-30 -150l-809 -329l679 -321l-30 -150z" />
<glyph unicode="=" horiz-adv-x="950" d="M18 300l30 150h750l-30 -150h-750zM78 600l30 150h750l-30 -150h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1100" d="M-32 50l30 150l807 321l-677 329l30 150l820 -400l-30 -150z" />
<glyph unicode="?" horiz-adv-x="1115" d="M108 0l37 185h185l-37 -185h-185zM182 370l86 430h265q315 0 363 240t-282 240q-190 0 -410 -50l30 150q220 50 410 50q515 0 437 -390t-575 -390h-83l-56 -280h-185z" />
<glyph unicode="@" horiz-adv-x="2150" d="M116 540q180 900 1104 900q926 0 746 -900q-138 -690 -535 -690q-288 0 -235 264l25 126q-171 -240 -402 -240q-358 0 -256 511q108 539 633 539q213 0 363 -43l-177 -889q-24 -118 86 -118q205 0 313 540q150 750 -576 750q-754 0 -904 -750q-154 -770 531 -770 l-30 -150q-870 0 -686 920zM746 513q-71 -353 136 -353q214 0 374 254l91 458q-50 24 -190 24q-335 0 -411 -383z" />
<glyph unicode="A" horiz-adv-x="1472" d="M-117 0l893 1430h205l324 -1430h-195l-95 450h-473l81 150h360l-137 648l-761 -1248h-202z" />
<glyph unicode="B" horiz-adv-x="1330" d="M28 0l286 1430h610q350 0 350 -246q0 -40 -9 -87q-48 -244 -335 -349q228 -44 228 -241q0 -39 -9 -84q-85 -423 -532 -423h-589zM243 150h393q256 0 308 260q7 33 7 61q0 192 -299 192h-80l24 121q421 55 469 296q6 30 6 55q0 145 -194 145h-408z" />
<glyph unicode="C" horiz-adv-x="1385" d="M105 735q141 705 891 705q215 0 388 -60l-32 -160q-171 70 -366 70q-585 0 -696 -555q-20 -101 -20 -184q0 -411 486 -411q195 0 394 70l-32 -160q-197 -60 -412 -60q-626 0 -626 519q0 103 25 226z" />
<glyph unicode="D" horiz-adv-x="1500" d="M28 0l286 1430h520q597 0 597 -477q0 -91 -22 -199q-151 -754 -861 -754h-520zM243 150h335q525 0 646 604q18 88 18 161q0 365 -438 365h-335z" />
<glyph unicode="E" horiz-adv-x="1230" d="M28 0l286 1430h935l-30 -150h-750l-96 -480h715l-30 -150h-715l-100 -500h765l-30 -150h-950z" />
<glyph unicode="F" horiz-adv-x="1155" d="M28 0l286 1430h935l-30 -150h-750l-96 -480h715l-30 -150h-715l-130 -650h-185z" />
<glyph unicode="G" horiz-adv-x="1385" d="M105 735q141 705 891 705q215 0 388 -60l-32 -160q-171 70 -366 70q-585 0 -696 -555q-20 -102 -20 -186q0 -409 477 -409q92 0 209 24l97 486h185l-119 -594q-186 -66 -386 -66q-652 0 -652 525q0 100 24 220z" />
<glyph unicode="H" horiz-adv-x="1555" d="M28 0l286 1430h185l-126 -630h845l126 630h185l-286 -1430h-185l130 650h-845l-130 -650h-185z" />
<glyph unicode="I" horiz-adv-x="585" d="M58 0l286 1430h185l-286 -1430h-185z" />
<glyph unicode="J" horiz-adv-x="690" d="M-117 0l30 150q300 0 352 262l204 1018h185l-204 -1018q-82 -412 -567 -412z" />
<glyph unicode="K" horiz-adv-x="1435" d="M28 0l286 1430h185l-286 -1430h-185zM513 698l22 112l706 620h244l-790 -681l568 -749h-247z" />
<glyph unicode="L" horiz-adv-x="1153" d="M28 0l286 1430h185l-256 -1280h748l-30 -150h-933z" />
<glyph unicode="M" horiz-adv-x="1840" d="M28 0l286 1430h235l286 -1193l754 1193h225l-286 -1430h-165l231 1153l-739 -1153h-146l-285 1153l-231 -1153h-165z" />
<glyph unicode="N" horiz-adv-x="1575" d="M28 0l286 1430h185l641 -1169l234 1169h175l-286 -1430h-185l-638 1189l-237 -1189h-175z" />
<glyph unicode="O" horiz-adv-x="1665" d="M121 713q145 727 863 727q587 0 587 -501q0 -103 -25 -226q-145 -723 -852 -723q-597 0 -597 500q0 102 24 223zM317 719q-21 -105 -21 -191q0 -388 428 -388q512 0 628 579q21 104 21 189q0 382 -419 382q-523 0 -637 -571z" />
<glyph unicode="P" horiz-adv-x="1263" d="M28 0l286 1430h580q373 0 372 -277q0 -49 -11 -106q-83 -417 -700 -509l-7 156q453 65 509 345q7 37 7 68q0 170 -218 170h-378l-255 -1277h-185z" />
<glyph unicode="Q" horiz-adv-x="1665" d="M121 713q145 727 863 727q587 0 587 -501q0 -102 -25 -226q-135 -673 -764 -719q26 -231 283 -234q110 0 196 30l-30 -150q-86 -30 -186 -30q-443 0 -445 383q-504 34 -504 495q0 102 25 225zM317 719q-21 -105 -21 -191q0 -388 428 -388q512 0 628 579q21 104 21 189 q0 382 -419 382q-523 0 -637 -571z" />
<glyph unicode="R" horiz-adv-x="1305" d="M28 0l286 1430h610q349 0 349 -251q0 -42 -10 -92q-55 -279 -481 -433l356 -654h-224l-326 643l24 121q403 65 453 315q6 29 6 54q0 144 -195 144h-408l-255 -1277h-185z" />
<glyph unicode="S" horiz-adv-x="1290" d="M18 50l34 170q209 -80 470 -80q369 0 423 270q7 33 7 62q0 168 -233 168h-184q-383 0 -383 283q0 49 12 107q82 410 657 410q250 0 453 -60l-34 -170q-199 80 -449 80q-390 0 -442 -260q-7 -34 -7 -63q0 -167 225 -167h184q390 0 391 -285q0 -49 -12 -105 q-84 -420 -638 -420q-261 0 -474 60z" />
<glyph unicode="T" horiz-adv-x="1185" d="M164 1280l30 150h1085l-30 -150h-450l-256 -1280h-185l256 1280h-450z" />
<glyph unicode="U" horiz-adv-x="1510" d="M128 552l176 878h185l-176 -878q-14 -69 -14 -126q0 -286 342 -286q410 0 492 412l176 878h185l-176 -878q-112 -562 -707 -562q-501 0 -501 398q0 75 18 164z" />
<glyph unicode="V" horiz-adv-x="1472" d="M169 1430h185l276 -1238l759 1238h202l-893 -1430h-205z" />
<glyph unicode="W" horiz-adv-x="1900" d="M143 0l51 1430h179l-48 -1244l653 1244h185l184 -1244l476 1244h171l-555 -1430h-252l-164 1198l-631 -1198h-249z" />
<glyph unicode="X" horiz-adv-x="1410" d="M-117 0l706 715l-420 715h215l336 -572l564 572h235l-705 -715l419 -715h-215l-336 572l-564 -572h-235z" />
<glyph unicode="Y" horiz-adv-x="1300" d="M169 1430h198l263 -747l567 747h222l-732 -930l-100 -500h-185l100 500z" />
<glyph unicode="Z" horiz-adv-x="1330" d="M-17 0l30 150l1090 1130h-844l30 150h1060l-30 -150l-1083 -1130h837l-30 -150h-1060z" />
<glyph unicode="[" horiz-adv-x="650" d="M-68 -380l362 1810h450l-30 -150h-265l-302 -1510h265l-30 -150h-450z" />
<glyph unicode="\" horiz-adv-x="970" d="M169 1430h195l439 -1430h-195z" />
<glyph unicode="]" horiz-adv-x="650" d="M-168 -380l30 150h265l302 1510h-265l30 150h450l-362 -1810h-450z" />
<glyph unicode="^" horiz-adv-x="1050" d="M48 700l546 730h150l254 -730h-150l-208 603l-442 -603h-150z" />
<glyph unicode="_" horiz-adv-x="1050" d="M-147 -150l30 150h1000l-30 -150h-1000z" />
<glyph unicode="`" horiz-adv-x="603" d="M244 1430h239l116 -239h-164z" />
<glyph unicode="a" horiz-adv-x="1147" d="M60 511q108 539 633 539q213 0 363 -43l-201 -1007h-165l30 250q-168 -250 -404 -250q-279 0 -279 310q0 88 23 201zM243 513q-18 -90 -19 -157q0 -196 155 -196q214 0 374 254l91 458q-50 24 -190 24q-335 0 -411 -383z" />
<glyph unicode="b" horiz-adv-x="1148" d="M17 43l277 1387h185l-126 -630q169 250 405 250q282 0 283 -301q0 -81 -21 -183q-114 -566 -637 -566q-226 0 -366 43zM230 183q45 -29 175 -29q350 0 432 409q16 78 16 138q0 189 -158 189q-214 0 -374 -254z" />
<glyph unicode="c" horiz-adv-x="965" d="M65 535q103 515 603 515q150 0 274 -30l-30 -150q-124 30 -284 30q-305 0 -378 -365q-17 -87 -17 -154q0 -231 205 -231q200 0 356 130l-30 -150q-156 -130 -366 -130q-354 0 -354 346q0 84 21 189z" />
<glyph unicode="d" horiz-adv-x="1147" d="M60 511q108 539 633 539q99 0 185 -9l78 389h185l-286 -1430h-165l30 250q-168 -250 -404 -250q-279 0 -279 310q0 88 23 201zM243 513q-18 -90 -19 -157q0 -196 155 -196q214 0 374 254l91 458q-50 24 -190 24q-335 0 -411 -383z" />
<glyph unicode="e" horiz-adv-x="1085" d="M65 537q103 513 586 513q360 0 359 -228q0 -33 -7 -71q-58 -289 -433 -289h-335q-11 -54 -10 -99q0 -213 244 -213q229 0 394 130l-30 -150q-165 -130 -394 -130q-393 0 -393 359q0 80 19 178zM266 616h335q190 0 218 138q3 17 3 32q0 116 -201 116q-280 0 -355 -286z " />
<glyph unicode="f" horiz-adv-x="660" d="M-176 -293q152 135 200 373l204 1021q76 381 488 381q129 0 236 -40l-30 -150q-101 40 -237 40q-226 0 -271 -223l-11 -59h325l-30 -150h-325l-164 -820q-64 -318 -251 -478z" />
<glyph unicode="g" horiz-adv-x="1147" d="M-38 -330l30 150q143 -50 336 -50q296 0 342 230l50 250q-168 -250 -404 -250q-279 0 -279 310q0 88 23 201q108 539 633 539q213 0 363 -43l-201 -1007q-76 -380 -559 -380q-194 0 -334 50zM243 513q-18 -90 -18 -157q0 -196 154 -196q214 0 374 254l91 458 q-50 24 -190 24q-335 0 -411 -383z" />
<glyph unicode="h" horiz-adv-x="1205" d="M8 0l286 1430h185l-137 -684q195 304 488 304q238 0 238 -225q0 -52 -13 -116l-142 -709h-185l142 712q6 31 6 57q0 127 -152 127q-209 0 -418 -333l-113 -563h-185z" />
<glyph unicode="i" horiz-adv-x="525" d="M28 0l210 1050h185l-210 -1050h-185zM279 1255l35 175h185l-35 -175h-185z" />
<glyph unicode="j" horiz-adv-x="525" d="M-156 -293q152 135 200 373l194 970h185l-194 -970q-64 -318 -251 -478zM279 1255l35 175h185l-35 -175h-185z" />
<glyph unicode="k" horiz-adv-x="1176" d="M8 0l286 1430h185l-132 -662q209 282 479 282q272 0 272 -209q0 -38 -9 -84q-44 -220 -381 -358l266 -399h-234l-227 385l19 93q333 81 371 270q5 24 5 44q0 108 -135 108q-233 0 -459 -294l-121 -606h-185z" />
<glyph unicode="l" horiz-adv-x="505" d="M18 0l286 1430h185l-286 -1430h-185z" />
<glyph unicode="m" horiz-adv-x="1805" d="M8 0l210 1050h165l-42 -312q184 312 462 312q201 0 200 -196q0 -48 -11 -108q193 304 469 304q208 0 208 -213q0 -55 -14 -125l-142 -712h-185l142 712q7 37 7 66q0 118 -118 118q-198 0 -393 -333l-113 -563h-185l142 712q7 37 7 67q0 117 -116 117q-206 0 -395 -333 l-113 -563h-185z" />
<glyph unicode="n" horiz-adv-x="1205" d="M8 0l210 1050h165l-45 -324q199 324 492 324q238 0 238 -225q0 -52 -13 -116l-142 -709h-185l142 712q6 31 6 57q0 127 -152 127q-209 0 -418 -333l-113 -563h-185z" />
<glyph unicode="o" horiz-adv-x="1160" d="M63 525q105 525 585 525q394 0 394 -353q0 -77 -19 -172q-105 -524 -585 -524q-393 0 -393 355q0 76 18 169zM249 529q-16 -78 -15 -139q0 -240 234 -240q295 0 371 379q15 74 15 134q0 237 -236 237q-295 0 -369 -371z" />
<glyph unicode="p" horiz-adv-x="1148" d="M-68 -380l286 1430h165l-30 -250q169 250 405 250q282 0 282 -300q0 -81 -21 -184q-113 -566 -636 -566q-103 0 -188 9l-78 -389h-185zM230 183q45 -29 175 -29q350 0 432 409q16 78 16 138q0 189 -158 189q-214 0 -375 -254z" />
<glyph unicode="q" horiz-adv-x="1147" d="M60 511q108 539 633 539q213 0 363 -43l-277 -1387h-185l126 630q-168 -250 -404 -250q-279 0 -279 310q0 88 23 201zM243 513q-18 -90 -18 -157q0 -196 154 -196q214 0 374 254l91 458q-50 24 -190 24q-335 0 -411 -383z" />
<glyph unicode="r" horiz-adv-x="710" d="M8 0l210 1050h165l-47 -334q178 334 422 334l-33 -164q-238 0 -419 -323l-113 -563h-185z" />
<glyph unicode="s" horiz-adv-x="1020" d="M-12 50l32 160q173 -60 362 -60q251 0 281 150q4 19 4 36q0 104 -151 104h-140q-288 0 -288 222q0 40 10 88q60 300 497 300q188 0 363 -50l-32 -160q-173 60 -361 60q-262 0 -292 -150q-4 -20 -4 -38q0 -102 141 -102h140q307 0 307 -226q0 -39 -9 -84 q-60 -300 -496 -300q-189 0 -364 50z" />
<glyph unicode="t" horiz-adv-x="675" d="M65 283l187 937h116l6 -170h284l-30 -150h-255l-121 -603q-5 -27 -5 -50q0 -97 103 -97h128l-30 -150h-176q-217 0 -217 191q0 42 10 92z" />
<glyph unicode="u" horiz-adv-x="1205" d="M76 341l142 709h185l-142 -712q-6 -31 -6 -57q0 -127 152 -127q209 0 418 333l113 563h185l-210 -1050h-165l45 324q-199 -324 -492 -324q-238 0 -238 225q0 52 13 116z" />
<glyph unicode="v" horiz-adv-x="1000" d="M68 1050h200l136 -823l464 823h200l-637 -1050h-172z" />
<glyph unicode="w" horiz-adv-x="1675" d="M88 550q55 275 200 500h185q-145 -225 -200 -500q-22 -108 -22 -188q0 -212 157 -212q225 0 305 400l100 500h185l-100 -500q-21 -105 -21 -182q0 -218 166 -218q215 0 295 400q28 138 28 262.5t-28 237.5h185q28 -112 28 -237t-28 -263q-110 -550 -510 -550 q-235 0 -268 259q-132 -259 -367 -259q-314 0 -314 338q0 93 24 212z" />
<glyph unicode="x" horiz-adv-x="1050" d="M-117 0l498 535l-288 515h205l219 -411l361 411h215l-497 -535l287 -515h-205l-219 401l-361 -401h-215z" />
<glyph unicode="y" horiz-adv-x="1205" d="M20 -330l30 150q143 -50 336 -50q296 0 342 230l65 324q-199 -324 -492 -324q-238 0 -238 225q0 52 13 116l142 709h185l-142 -712q-6 -31 -6 -57q0 -127 152 -127q209 0 418 333l113 563h185l-210 -1050q-76 -380 -559 -380q-194 0 -334 50z" />
<glyph unicode="z" horiz-adv-x="1000" d="M-42 0l28 140l747 760h-575l30 150h780l-30 -150l-739 -760h577l-28 -140h-790z" />
<glyph unicode="{" horiz-adv-x="675" d="M48 450l30 150q210 0 280 352q61 302 226 478h185q-165 -176 -226 -478q-70 -352 -295 -427q195 -75 125 -427q-61 -302 34 -478h-185q-95 176 -34 478q70 352 -140 352z" />
<glyph unicode="|" horiz-adv-x="485" d="M-68 -380l362 1810h185l-362 -1810h-185z" />
<glyph unicode="}" horiz-adv-x="675" d="M-168 -380q165 176 226 478q70 352 295 427q-195 75 -125 427q61 302 -34 478h185q95 -176 34 -478q-70 -352 140 -352l-30 -150q-210 0 -280 -352q-61 -302 -226 -478h-185z" />
<glyph unicode="~" horiz-adv-x="950" d="M44 430l30 150q70 61 174 61q86 0 195 -41q109 -40 199 -40q109 0 190 60l-30 -150q-70 -60 -174 -60q-86 0 -195 40q-109 41 -199 41q-109 0 -190 -61z" />
<glyph unicode="&#xa2;" horiz-adv-x="980" d="M102 723q92 457 496 509l40 198h175l-39 -194q110 -5 205 -28l-30 -150q-124 30 -284 30q-305 0 -378 -365q-77 -385 188 -385q200 0 356 130l-30 -150q-104 -87 -234 -116l-40 -202h-175l38 190q-389 27 -288 533z" />
<glyph unicode="&#xa3;" horiz-adv-x="1217" d="M-48 -30l30 152q201 75 245 291q23 117 -19 291t-13 323q83 413 641 413q270 0 407 -100l-36 -180q-132 130 -408 130q-354 0 -406 -261q-29 -144 -1 -229h376l-30 -150h-324q22 -134 2 -234q-27 -137 -111 -238q22 4 51 4q91 0 243 -43q57 -17 117 -17q145 0 303 98 l-34 -170q-137 -84 -301 -84q-94 0 -195 28q-123 32 -240 32q-153 0 -297 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1250" d="M92 319l30 150h349l22 111h-349l30 150h287l-267 700h198l237 -627l493 627h222l-573 -700h313l-30 -150h-376l-22 -111h376l-30 -150h-376l-64 -319h-185l64 319h-349z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M153 723q143 717 891 717q737 0 594 -717q-147 -733 -884 -733q-748 0 -601 733zM257 719q-128 -639 495 -639q652 0 780 639q126 631 -506 631q-643 0 -769 -631zM481 728q83 416 499 416q165 0 280 -51l-20 -98q-113 58 -264 58q-325 0 -390 -325q-71 -352 254 -352 q151 0 288 58l-20 -98q-135 -51 -300 -51q-416 0 -327 443z" />
<glyph unicode="&#xad;" d="M48 450l30 150h500l-30 -150h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1163" d="M213 1023q85 427 515 427q433 0 348 -427q-83 -415 -516 -415q-418 0 -347 415zM286 1025q-72 -361 285 -361q360 0 432 361q74 369 -286 369q-357 0 -431 -369zM414 756l107 536h229q153 0 127 -128q-21 -105 -181 -155l134 -253h-91l-123 241l9 45q159 25 178 119 q14 74 -72 74h-153l-95 -479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="603" d="M196 1191l212 239h239l-287 -239h-164z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" d="M48 450l30 150h500l-30 -150h-500z" />
<glyph unicode="&#x2011;" d="M48 450l30 150h500l-30 -150h-500z" />
<glyph unicode="&#x2012;" d="M48 450l30 150h500l-30 -150h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1200" d="M48 450l30 150h1000l-30 -150h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1700" d="M48 450l30 150h1500l-30 -150h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="410" d="M107 995l237 435h185l-237 -435h-185z" />
<glyph unicode="&#x2019;" horiz-adv-x="435" d="M107 995l237 435h185l-237 -435h-185z" />
<glyph unicode="&#x201c;" horiz-adv-x="780" d="M107 995l237 435h185l-237 -435h-185zM477 995l237 435h185l-237 -435h-185z" />
<glyph unicode="&#x201d;" horiz-adv-x="780" d="M107 995l237 435h185l-237 -435h-185zM477 995l237 435h185l-237 -435h-185z" />
<glyph unicode="&#x2022;" horiz-adv-x="630" d="M103 725q43 215 258 215t172 -215t-258 -215t-172 215z" />
<glyph unicode="&#x2026;" horiz-adv-x="1185" d="M-42 0l37 185h185l-37 -185h-185zM358 0l37 185h185l-37 -185h-185zM758 0l37 185h185l-37 -185h-185z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1385" d="M105 735q141 705 891 705q215 0 388 -60l-32 -160q-171 70 -366 70q-498 0 -655 -348h773l-30 -150h-793l-22 -110h793l-30 -150h-773q-1 -392 507 -392q195 0 394 70l-32 -160q-197 -60 -412 -60q-750 0 -601 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1606" d="M280 1359l14 71h511l-14 -71h-212l-120 -602h-87l120 602h-212zM760 757l134 673h110l136 -561l354 561h106l-134 -673h-78l108 543l-347 -543h-69l-135 543l-108 -543h-77z" />
<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationLight" horiz-adv-x="720" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph unicode=" " horiz-adv-x="500" />
<glyph unicode="&#x09;" horiz-adv-x="500" />
<glyph unicode="&#xa0;" horiz-adv-x="500" />
<glyph unicode="!" horiz-adv-x="425" d="M160 0v105h105v-105h-105zM160 370v1060h105v-1060h-105z" />
<glyph unicode="&#x22;" horiz-adv-x="625" d="M110 1430h115l-30 -435h-55zM400 1430h115l-30 -435h-55z" />
<glyph unicode="#" horiz-adv-x="1903" d="M110 374l20 94h392l109 438h-401l20 94h402l110 425h100l-110 -425h458l112 430h100l-111 -430h482l-20 -94h-482l-109 -438h491l-20 -94h-492l-100 -379h-100l100 379h-458l-100 -379h-100l99 379h-392zM623 468h457l110 438h-457z" />
<glyph unicode="$" horiz-adv-x="1030" d="M110 940q0 276 369 298v192h95v-190q155 -4 316 -50v-100q-175 60 -343 60q-332 0 -332 -210q0 -180 225 -180h130q350 0 350 -270q0 -267 -346 -296v-194h-95v190q-167 1 -339 50v100q175 -60 344 -60q331 0 331 210q0 170 -245 170h-130q-330 0 -330 280z" />
<glyph unicode="%" horiz-adv-x="1362" d="M110 0l1017 1430h125l-1017 -1430h-125zM110 1180q0 260 278 260q274 0 274 -260q0 -259 -274 -259q-278 0 -278 259zM210 1182q0 -177 178 -177q174 0 174 177q0 174 -174 174q-178 0 -178 -174zM700 249q0 260 278 260q274 0 274 -260q0 -259 -274 -259 q-278 0 -278 259zM800 251q0 -177 178 -177q174 0 174 177q0 174 -174 174q-178 0 -178 -174z" />
<glyph unicode="&#x26;" horiz-adv-x="1295" d="M110 394q0 247 223 333q-223 65 -223 318q0 385 510 385q185 0 360 -50v-90q-185 50 -357 50q-408 0 -408 -290q0 -280 335 -280h468v172h73l22 -172h172v-90h-162v-190q0 -493 -518 -493q-495 0 -495 397zM215 399q0 -309 381 -309q422 0 422 402v188h-466 q-337 0 -337 -281z" />
<glyph unicode="'" horiz-adv-x="335" d="M110 1430h115l-30 -435h-55z" />
<glyph unicode="(" horiz-adv-x="525" d="M110 525q0 453 200 905h105q-200 -452 -200 -905t200 -905h-105q-200 452 -200 905z" />
<glyph unicode=")" horiz-adv-x="525" d="M110 -380q200 452 200 905t-200 905h105q200 -452 200 -905t-200 -905h-105z" />
<glyph unicode="*" horiz-adv-x="830" d="M110 1150l48 150l211 -103l-31 233h156l-30 -232l209 101l48 -147l-228 -43l159 -170l-123 -92l-113 205l-113 -204l-124 89l161 171z" />
<glyph unicode="+" horiz-adv-x="970" d="M110 480v90h330v330h100v-330h320v-90h-320v-330h-100v330h-330z" />
<glyph unicode="," horiz-adv-x="305" d="M25 -250l150 435h105l-150 -435h-105z" />
<glyph unicode="-" d="M110 480v90h500v-90h-500z" />
<glyph unicode="." horiz-adv-x="355" d="M110 0v125h135v-125h-135z" />
<glyph unicode="/" horiz-adv-x="985" d="M35 0l725 1430h115l-725 -1430h-115z" />
<glyph unicode="0" horiz-adv-x="1445" d="M110 713q0 727 618 727q607 0 607 -727q0 -723 -607 -723q-586 0 -618 723zM225 719q0 -639 503 -639q492 0 492 639q0 631 -492 631q-503 0 -503 -631z" />
<glyph unicode="1" horiz-adv-x="605" d="M110 1311v59l255 70v-1440h-105v1311h-150z" />
<glyph unicode="2" horiz-adv-x="1230" d="M110 0v90q875 607 875 930q0 330 -420 330q-220 0 -415 -110v100q195 100 415 100q525 0 525 -420q0 -370 -824 -930h824v-90h-980z" />
<glyph unicode="3" horiz-adv-x="1160" d="M110 50v100q200 -70 400 -70q410 0 410 320q0 280 -332 280h-328v90h325q335 0 335 280q0 300 -410 300q-200 0 -400 -70v100q200 60 400 60q515 0 515 -390q0 -256 -238 -325q238 -65 238 -325q0 -410 -515 -410q-200 0 -400 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M60 340v90l625 1000h114l-626 -1000h709v568h105v-568l158 -36v-54h-158v-340h-105v340h-822z" />
<glyph unicode="5" horiz-adv-x="1145" d="M115 50v100q200 -70 410 -70q415 0 415 360q0 310 -405 310q-225 0 -420 -50l50 730h824v-90h-736l-34 -522q187 22 316 22q510 0 510 -400q0 -450 -530 -450q-200 0 -400 60z" />
<glyph unicode="6" horiz-adv-x="1250" d="M110 550q0 556 658 923l46 -77q-439 -263 -544 -539q181 63 356 63q524 0 524 -450q0 -480 -513 -480q-527 0 -527 560zM205 556q0 -476 441 -476q403 0 403 390q0 360 -422 360q-214 0 -384 -68q-38 -70 -38 -206z" />
<glyph unicode="7" horiz-adv-x="1135" d="M110 1340v90h970v-90l-662 -1340h-121l672 1340h-859z" />
<glyph unicode="8" horiz-adv-x="1260" d="M110 424q0 243 252 321q-212 85 -212 333q0 366 480 366t480 -366q0 -248 -217 -333q257 -78 257 -321q0 -434 -520 -434t-520 434zM215 418q0 -338 420 -338q410 0 410 338q0 282 -423 282q-407 0 -407 -282zM255 1058q0 -268 380 -268q370 0 370 268q0 292 -383 292 q-367 0 -367 -292z" />
<glyph unicode="9" horiz-adv-x="1210" d="M110 963q0 480 513 480q527 0 527 -560q0 -556 -658 -923l-56 77q449 263 554 539q-181 -63 -356 -63q-524 0 -524 450zM211 963q0 -360 422 -360q214 0 384 68q38 70 38 206q0 476 -441 476q-403 0 -403 -390z" />
<glyph unicode=":" horiz-adv-x="395" d="M150 0v125h135v-125h-135zM150 925v125h135v-125h-135z" />
<glyph unicode=";" horiz-adv-x="545" d="M110 -250l150 435h105l-150 -435h-105zM250 925v125h135v-125h-135z" />
<glyph unicode="&#x3c;" horiz-adv-x="1120" d="M110 470v110l900 420v-110l-813 -369l813 -361v-110z" />
<glyph unicode="=" horiz-adv-x="970" d="M110 330v90h750v-90h-750zM110 630v90h750v-90h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1120" d="M110 50v110l813 361l-813 369v110l900 -420v-110z" />
<glyph unicode="?" horiz-adv-x="1135" d="M110 1290v90q210 50 400 50q515 0 515 -390t-497 -390h-123v-280h-105v370h225q395 0 395 300t-410 300q-190 0 -400 -50zM300 0v105h105v-105h-105z" />
<glyph unicode="@" horiz-adv-x="2170" d="M160 540q0 900 924 900q926 0 926 -900q0 -690 -377 -690q-248 0 -248 254q-180 -104 -365 -104q-365 0 -365 297q0 313 416 313q147 0 314 -20v129q0 241 -303 241q-172 0 -342 -50v90q170 50 342 50q408 0 408 -326v-626q0 -158 150 -158q265 0 265 600q0 810 -806 810 q-834 0 -834 -810q0 -830 765 -830v-90q-870 0 -870 920zM760 300q0 -210 260 -210q192 0 365 102v308q-167 20 -314 20q-311 0 -311 -220z" />
<glyph unicode="A" horiz-adv-x="1492" d="M35 0l647 1430h125l650 -1430h-125l-212 480h-601l41 90h521l-343 778l-591 -1348h-112z" />
<glyph unicode="B" horiz-adv-x="1330" d="M160 0v1430h610q408 0 408 -333q0 -244 -296 -349q314 -53 314 -335q0 -413 -447 -413h-589zM265 90h473q346 0 346 320q0 283 -433 283h-80v71q500 45 500 326q0 250 -308 250h-498v-1250z" />
<glyph unicode="C" horiz-adv-x="1405" d="M110 735q0 705 750 705q205 0 400 -60v-90q-195 60 -380 60q-665 0 -665 -615q0 -655 665 -655q185 0 380 60v-90q-195 -60 -400 -60q-750 0 -750 745z" />
<glyph unicode="D" horiz-adv-x="1470" d="M160 0v1430h510q700 0 700 -676q0 -754 -710 -754h-500zM265 90h395q595 0 595 664q0 586 -595 586h-395v-1250z" />
<glyph unicode="E" horiz-adv-x="1248" d="M160 0v1430h939v-90h-834v-570h800v-90h-800v-590h848v-90h-953z" />
<glyph unicode="F" horiz-adv-x="1174" d="M160 0v1430h939v-90h-834v-570h800v-90h-800v-680h-105z" />
<glyph unicode="G" horiz-adv-x="1405" d="M110 735q0 705 750 705q205 0 400 -60v-90q-195 60 -380 60q-665 0 -665 -615q0 -655 646 -655q132 0 294 44v526h105v-594q-183 -66 -383 -66q-767 0 -767 745z" />
<glyph unicode="H" horiz-adv-x="1505" d="M160 0v1430h105v-660h975v660h105v-1430h-105v680h-975v-680h-105z" />
<glyph unicode="I" horiz-adv-x="525" d="M210 0v1430h105v-1430h-105z" />
<glyph unicode="J" horiz-adv-x="650" d="M35 0v90q350 0 350 322v1018h105v-1018q0 -412 -455 -412z" />
<glyph unicode="K" horiz-adv-x="1300" d="M160 0v1430h105v-1430h-105zM460 718v62l642 650h144l-681 -677l705 -753h-157z" />
<glyph unicode="L" horiz-adv-x="1143" d="M160 0v1430h105v-1340h828v-90h-933z" />
<glyph unicode="M" horiz-adv-x="1770" d="M160 0v1430h105l645 -1307l605 1307h95v-1430h-95v1237l-568 -1237h-86l-606 1247v-1247h-95z" />
<glyph unicode="N" horiz-adv-x="1505" d="M160 0v1430h135l955 -1252v1252h95v-1430h-85l-1005 1312v-1312h-95z" />
<glyph unicode="O" horiz-adv-x="1645" d="M110 713q0 727 718 727q707 0 707 -727q0 -723 -707 -723q-718 0 -718 723zM225 719q0 -639 603 -639q592 0 592 639q0 631 -592 631q-603 0 -603 -631z" />
<glyph unicode="P" horiz-adv-x="1263" d="M160 0v1430h600q418 0 418 -393q0 -387 -669 -493l-18 96q570 79 570 389q0 308 -318 308h-478v-1337h-105z" />
<glyph unicode="Q" horiz-adv-x="1645" d="M110 713q0 727 718 727q707 0 707 -727q0 -598 -535 -716l262 -300l-94 -68l-310 361q-748 0 -748 723zM225 719q0 -629 603 -629q592 0 592 629q0 631 -592 631q-603 0 -603 -631z" />
<glyph unicode="R" horiz-adv-x="1235" d="M160 0v1430h590q388 0 388 -343q0 -297 -421 -421l483 -666h-144l-475 663v71q440 65 440 345q0 258 -288 258h-468v-1337h-105z" />
<glyph unicode="S" horiz-adv-x="1310" d="M110 1030q0 410 585 410q240 0 465 -60v-100q-225 70 -465 70q-480 0 -480 -320q0 -260 294 -260h294q397 0 397 -350q0 -430 -554 -430q-271 0 -496 60v110q225 -80 496 -80q449 0 449 340q0 250 -292 250h-294q-399 0 -399 360z" />
<glyph unicode="T" horiz-adv-x="1095" d="M10 1340v90h1075v-90h-490v-1340h-105v1340h-480z" />
<glyph unicode="U" horiz-adv-x="1470" d="M160 552v878h105v-878q0 -472 470 -472t470 472v878h105v-878q0 -562 -575 -562t-575 562z" />
<glyph unicode="V" horiz-adv-x="1492" d="M35 1430h115l601 -1349l594 1349h112l-627 -1430h-165z" />
<glyph unicode="W" horiz-adv-x="1869" d="M35 1430h109l233 -1329l462 1329h105l475 -1342l265 1342h101l-289 -1430h-152l-452 1306l-453 -1306h-149z" />
<glyph unicode="X" horiz-adv-x="1320" d="M35 0l563 715l-563 715h125l500 -636l500 636h125l-562 -715l562 -715h-125l-500 636l-500 -636h-125z" />
<glyph unicode="Y" horiz-adv-x="1250" d="M35 1430h125l463 -830l477 830h115l-536 -930v-500h-105v500z" />
<glyph unicode="Z" horiz-adv-x="1270" d="M135 0v80l894 1260h-874v90h980v-90l-867 -1250h847v-90h-980z" />
<glyph unicode="[" horiz-adv-x="565" d="M160 -380v1810h370v-90h-275v-1630h275v-90h-370z" />
<glyph unicode="\" horiz-adv-x="985" d="M35 1430h115l725 -1430h-115z" />
<glyph unicode="]" horiz-adv-x="565" d="M35 -290h275v1630h-275v90h370v-1810h-370v90z" />
<glyph unicode="^" horiz-adv-x="1070" d="M60 700l400 730h150l400 -730h-110l-369 673l-361 -673h-110z" />
<glyph unicode="_" horiz-adv-x="1070" d="M35 0h1000v-90h-1000v90z" />
<glyph unicode="`" horiz-adv-x="523" d="M100 1430h159l164 -239h-84z" />
<glyph unicode="a" horiz-adv-x="1095" d="M100 297q0 313 416 313q147 0 314 -20v129q0 241 -303 241q-172 0 -342 -50v90q170 50 342 50q408 0 408 -326v-724h-64l-24 104q-197 -104 -382 -104q-365 0 -365 297zM205 300q0 -210 260 -210q192 0 365 102v308q-167 20 -314 20q-311 0 -311 -220z" />
<glyph unicode="b" horiz-adv-x="1178" d="M160 43v1387h105v-430q189 50 325 50q478 0 478 -504q0 -546 -503 -546q-226 0 -405 43zM265 123q161 -29 291 -29q410 0 410 459q0 397 -377 397q-144 0 -324 -54v-773z" />
<glyph unicode="c" horiz-adv-x="1005" d="M110 545q0 505 530 505q150 0 280 -30v-90q-140 30 -270 30q-425 0 -425 -415q0 -455 425 -455q130 0 270 30v-90q-130 -30 -280 -30q-530 0 -530 545z" />
<glyph unicode="d" horiz-adv-x="1190" d="M110 546q0 504 498 504q156 0 317 -50v430h105v-1367q-171 -63 -431 -63q-489 0 -489 546zM222 553q0 -459 387 -459q164 0 316 39v773q-152 54 -316 54q-387 0 -387 -407z" />
<glyph unicode="e" horiz-adv-x="1124" d="M110 537q0 513 473 513q431 0 431 -477q0 -34 -2 -71h-797q0 -412 436 -412q179 0 318 50v-90q-139 -50 -318 -50q-541 0 -541 537zM215 596h698q-6 366 -330 366q-350 0 -368 -366z" />
<glyph unicode="f" horiz-adv-x="636" d="M160 0v1101q0 381 422 381q129 0 234 -40v-90q-99 40 -235 40q-316 0 -316 -293v-49h395v-90h-395v-960h-105z" />
<glyph unicode="g" horiz-adv-x="1187" d="M110 531q0 519 535 519q203 0 382 -43v-1007q0 -380 -463 -380q-194 0 -344 50v90q153 -50 346 -50q356 0 356 290v50q-178 -50 -314 -50q-498 0 -498 531zM212 533q0 -433 397 -433q144 0 313 54v778q-145 24 -285 24q-425 0 -425 -423z" />
<glyph unicode="h" horiz-adv-x="1185" d="M160 0v1430h105v-494q184 114 377 114q383 0 383 -391v-659h-105v702q0 254 -283 254q-189 0 -372 -133v-823h-105z" />
<glyph unicode="i" horiz-adv-x="465" d="M170 1310v120h125v-120h-125zM180 0v1050h105v-1050h-105z" />
<glyph unicode="j" horiz-adv-x="465" d="M55 -303q125 115 125 383v970h105v-970q0 -318 -155 -448zM170 1310v120h125v-120h-125z" />
<glyph unicode="k" horiz-adv-x="1106" d="M150 0v1430h105v-472q183 92 403 92q372 0 372 -303q0 -230 -330 -314l356 -433h-154l-334 435v63q357 41 357 250q0 212 -290 212q-193 0 -380 -94v-866h-105z" />
<glyph unicode="l" horiz-adv-x="465" d="M180 0v1430h105v-1430h-105z" />
<glyph unicode="m" horiz-adv-x="1795" d="M160 0v1050h75l11 -132q161 132 349 132q248 0 321 -144q181 144 367 144q352 0 352 -349v-701h-105v701q0 255 -248 255q-198 0 -327 -136v-820h-105v718q0 238 -256 238q-186 0 -329 -136v-820h-105z" />
<glyph unicode="n" horiz-adv-x="1185" d="M160 0v1050h75l13 -134q201 134 394 134q383 0 383 -331v-719h-105v722q0 234 -283 234q-189 0 -372 -133v-823h-105z" />
<glyph unicode="o" horiz-adv-x="1200" d="M110 525q0 535 490 535t490 -535q0 -534 -490 -534q-488 0 -490 534zM215 529q0 -449 385 -449t385 449q0 441 -385 441t-385 -441z" />
<glyph unicode="p" horiz-adv-x="1177" d="M160 -380v1387q179 43 402 43q505 0 505 -499q0 -551 -508 -551q-126 0 -294 50v-430h-105zM265 154q159 -54 293 -54q407 0 407 453q0 403 -405 403q-140 0 -295 -24v-778z" />
<glyph unicode="q" horiz-adv-x="1187" d="M110 531q0 519 525 519q213 0 392 -43v-1387h-105v430q-178 -50 -314 -50q-498 0 -498 531zM212 533q0 -433 397 -433q144 0 313 54v778q-155 24 -295 24q-415 0 -415 -423z" />
<glyph unicode="r" horiz-adv-x="635" d="M160 0v1050h75l13 -174q158 174 352 174v-84q-188 0 -335 -183v-783h-105z" />
<glyph unicode="s" horiz-adv-x="1030" d="M106 750q0 300 437 300q168 0 343 -50v-100q-175 60 -343 60q-332 0 -332 -210q0 -180 225 -180h134q350 0 350 -270q0 -300 -436 -300q-169 0 -344 50v100q175 -60 344 -60q331 0 331 210q0 170 -245 170h-134q-330 0 -330 280z" />
<glyph unicode="t" horiz-adv-x="627" d="M156 283v937h74l19 -170h315v-90h-306v-663q0 -207 152 -207h154v-90h-152q-256 0 -256 283z" />
<glyph unicode="u" horiz-adv-x="1185" d="M160 391v659h105v-662q0 -294 272 -294q199 0 383 133v823h105v-1050h-77l-12 134q-181 -134 -404 -134q-372 0 -372 391z" />
<glyph unicode="v" horiz-adv-x="1030" d="M10 1050h120l384 -959l386 959h120l-447 -1050h-122z" />
<glyph unicode="w" horiz-adv-x="1539" d="M60 1050h107l226 -923l333 923h77l342 -903l231 903h103l-274 -1050h-109l-331 895l-326 -895h-113z" />
<glyph unicode="x" horiz-adv-x="1010" d="M35 0l408 525l-408 525h125l345 -444l345 444h125l-407 -525l407 -525h-125l-345 444l-345 -444h-125z" />
<glyph unicode="y" horiz-adv-x="1081" d="M35 1050h121l390 -948l384 948h116l-456 -1081q-116 -286 -348 -357l-31 84q182 66 278 288z" />
<glyph unicode="z" horiz-adv-x="1020" d="M110 0v90l675 870h-655v90h780v-90l-667 -870h647v-90h-780z" />
<glyph unicode="{" horiz-adv-x="590" d="M110 480v90q210 0 210 382q0 302 130 478h105q-130 -176 -130 -478q0 -352 -190 -427q190 -75 190 -427q0 -302 130 -478h-105q-130 176 -130 478q0 382 -210 382z" />
<glyph unicode="|" horiz-adv-x="425" d="M160 -380v1810h105v-1810h-105z" />
<glyph unicode="}" horiz-adv-x="590" d="M35 -380q130 176 130 478q0 352 190 427q-190 75 -190 427q0 302 -130 478h105q130 -176 130 -478q0 -382 210 -382v-90q-210 0 -210 -382q0 -302 -130 -478h-105z" />
<glyph unicode="~" horiz-adv-x="970" d="M110 460v90q58 61 162 61q86 0 203 -41q117 -40 207 -40q109 0 178 60v-90q-58 -60 -162 -60q-86 0 -203 40q-117 41 -207 41q-109 0 -178 -61z" />
<glyph unicode="&#xa2;" horiz-adv-x="1005" d="M110 735q0 465 450 502v193h115v-190q130 -4 245 -30v-90q-140 30 -270 30q-425 0 -425 -415q0 -455 425 -455q130 0 270 30v-90q-115 -26 -245 -30v-190h-115v193q-450 40 -450 542z" />
<glyph unicode="&#xa3;" horiz-adv-x="1237" d="M110 -30v92q186 75 186 351q0 117 -77 291t-77 323q0 413 538 413q290 0 447 -100v-120q-158 130 -444 130q-424 0 -424 -321q0 -144 55 -259h446v-90h-414q59 -164 59 -264q0 -137 -64 -298q41 4 85 4q137 0 297 -43q61 -17 121 -17q145 0 283 98v-110 q-120 -84 -284 -84q-94 0 -201 28q-129 32 -246 32q-153 0 -286 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1270" d="M60 1430h125l442 -661l448 661h135l-493 -700h373v-90h-416v-171h416v-90h-416v-379h-105v379h-389v90h389v171h-389v90h347z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M150 723q0 717 748 717q737 0 737 -717q0 -733 -737 -733q-748 0 -748 733zM255 719q0 -639 623 -639q652 0 652 639q0 631 -632 631q-643 0 -643 -631zM477 728q0 416 416 416q165 0 290 -51v-98q-125 58 -276 58q-325 0 -325 -325q0 -352 325 -352q151 0 276 58v-98 q-125 -51 -290 -51q-416 0 -416 443z" />
<glyph unicode="&#xad;" d="M110 480v90h500v-90h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1183" d="M160 1023q0 427 430 427q433 0 433 -427q0 -415 -433 -415q-418 0 -430 415zM233 1025q0 -361 357 -361q360 0 360 361q0 369 -360 369q-357 0 -357 -369zM414 756v536h229q153 0 153 -128q0 -105 -150 -155l184 -253h-91l-171 241v45q154 25 154 119q0 74 -86 74h-153 v-479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="523" d="M100 1191l164 239h159l-239 -239h-84z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" d="M110 480v90h500v-90h-500z" />
<glyph unicode="&#x2011;" d="M110 480v90h500v-90h-500z" />
<glyph unicode="&#x2012;" d="M110 480v90h500v-90h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1220" d="M110 480v90h1000v-90h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1720" d="M110 480v90h1500v-90h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="350" d="M60 995l150 435h115l-150 -435h-115z" />
<glyph unicode="&#x2019;" horiz-adv-x="375" d="M60 995l150 435h115l-150 -435h-115z" />
<glyph unicode="&#x201c;" horiz-adv-x="650" d="M60 995l150 435h115l-150 -435h-115zM360 995l150 435h115l-150 -435h-115z" />
<glyph unicode="&#x201d;" horiz-adv-x="650" d="M60 995l150 435h115l-150 -435h-115zM360 995l150 435h115l-150 -435h-115z" />
<glyph unicode="&#x2022;" horiz-adv-x="610" d="M110 725q0 195 195 195t195 -195t-195 -195t-195 195z" />
<glyph unicode="&#x2026;" horiz-adv-x="1055" d="M110 0v125h135v-125h-135zM460 0v125h135v-125h-135zM810 0v125h135v-125h-135z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1405" d="M110 735q0 705 750 705q215 0 400 -60v-100q-185 70 -380 70q-568 0 -645 -438h833v-90h-843v-170h843v-90h-833q77 -482 645 -482q195 0 380 70v-100q-185 -60 -400 -60q-750 0 -750 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1626" d="M160 1359v71h511v-71h-212v-602h-87v602h-212zM760 757v673h110l248 -561l242 561h106v-673h-78v543l-239 -543h-69l-243 543v-543h-77z" />
<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationLightLightItalic" horiz-adv-x="970" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph unicode=" " horiz-adv-x="500" />
<glyph unicode="&#x09;" horiz-adv-x="500" />
<glyph unicode="&#xa0;" horiz-adv-x="500" />
<glyph unicode="!" horiz-adv-x="425" d="M18 0l21 105h105l-21 -105h-105zM92 370l212 1060h105l-212 -1060h-105z" />
<glyph unicode="&#x22;" horiz-adv-x="625" d="M197 995l57 435h115l-117 -435h-55zM487 995l57 435h115l-117 -435h-55z" />
<glyph unicode="#" horiz-adv-x="1903" d="M43 374l39 94h392l196 438h-401l39 94h402l195 425h100l-195 -425h458l198 430h100l-197 -430h482l-39 -94h-482l-196 -438h491l-39 -94h-492l-176 -379h-100l176 379h-458l-176 -379h-100l175 379h-392zM575 468h457l197 438h-457z" />
<glyph unicode="$" horiz-adv-x="1030" d="M46 240l20 100q163 -60 332 -60q331 0 373 210q34 170 -211 170h-130q-330 0 -274 280q55 276 429 298l38 192h95l-38 -190q154 -4 306 -50l-20 -100q-163 60 -331 60q-332 0 -374 -210q-36 -180 189 -180h130q350 0 296 -270q-53 -267 -405 -296l-39 -194h-95l38 190 q-167 1 -329 50z" />
<glyph unicode="%" horiz-adv-x="1362" d="M-32 0l1303 1430h125l-1303 -1430h-125zM204 1180q52 260 330 260q274 0 222 -260q-52 -259 -326 -259q-278 0 -226 259zM304 1182q-35 -177 143 -177q174 0 209 177q35 174 -139 174q-178 0 -213 -174zM608 249q52 260 330 260q274 0 222 -260q-52 -259 -326 -259 q-278 0 -226 259zM708 251q-35 -177 143 -177q174 0 209 177q35 174 -139 174q-178 0 -213 -174z" />
<glyph unicode="&#x26;" horiz-adv-x="1295" d="M46 394q50 247 290 333q-210 65 -159 318q77 385 587 385q185 0 350 -50l-18 -90q-175 50 -347 50q-408 0 -466 -290q-56 -280 279 -280h468l34 172h73l-12 -172h172l-18 -90h-162l-38 -190q-99 -493 -617 -493q-495 0 -416 397zM152 399q-61 -309 320 -309 q422 0 502 402l38 188h-466q-337 0 -394 -281z" />
<glyph unicode="'" horiz-adv-x="335" d="M197 995l57 435h115l-117 -435h-55z" />
<glyph unicode="(" horiz-adv-x="525" d="M73 525q90 453 381 905h105q-291 -452 -381 -905q-91 -453 19 -905h-105q-110 452 -19 905z" />
<glyph unicode=")" horiz-adv-x="525" d="M-108 -380q290 452 381 905t-19 905h105q110 -452 19 -905t-381 -905h-105z" />
<glyph unicode="*" horiz-adv-x="830" d="M198 1150l78 150l190 -103l16 233h156l-76 -232l229 101l18 -147l-236 -43l125 -170l-142 -92l-72 205l-153 -204l-107 89l196 171z" />
<glyph unicode="+" d="M64 480l18 90h330l66 330h100l-66 -330h320l-18 -90h-320l-66 -330h-100l66 330h-330z" />
<glyph unicode="," horiz-adv-x="305" d="M-167 -250l237 435h105l-237 -435h-105z" />
<glyph unicode="-" horiz-adv-x="720" d="M64 480l18 90h500l-18 -90h-500z" />
<glyph unicode="." horiz-adv-x="355" d="M-32 0l25 125h135l-25 -125h-135z" />
<glyph unicode="/" horiz-adv-x="985" d="M-107 0l1011 1430h115l-1011 -1430h-115z" />
<glyph unicode="0" horiz-adv-x="1445" d="M111 713q145 727 763 727q607 0 462 -727q-145 -723 -752 -723q-586 0 -473 723zM227 719q-128 -639 375 -639q492 0 620 639q126 631 -366 631q-503 0 -629 -631z" />
<glyph unicode="1" horiz-adv-x="605" d="M118 0l262 1311h-150l12 59l269 70l-288 -1440h-105z" />
<glyph unicode="2" horiz-adv-x="1230" d="M-32 0l18 90q996 607 1061 930q66 330 -354 330q-220 0 -437 -110l20 100q215 100 435 100q525 0 441 -420q-74 -370 -1010 -930h824l-18 -90h-980z" />
<glyph unicode="3" horiz-adv-x="1160" d="M-22 50l20 100q186 -70 386 -70q410 0 474 320q56 280 -276 280h-328l18 90h325q335 0 391 280q60 300 -350 300q-200 0 -414 -70l20 100q212 60 412 60q515 0 437 -390q-51 -256 -303 -325q225 -65 173 -325q-82 -410 -597 -410q-200 0 -388 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M-14 340l18 90l825 1000h114l-826 -1000h709l114 568h105l-114 -568l151 -36l-11 -54h-158l-68 -340h-105l68 340h-822z" />
<glyph unicode="5" horiz-adv-x="1145" d="M-17 50l20 100q186 -70 396 -70q415 0 487 360q62 310 -343 310q-225 0 -430 -50l196 730h824l-18 -90h-736l-138 -522q191 22 320 22q510 0 430 -400q-90 -450 -620 -450q-200 0 -388 60z" />
<glyph unicode="6" horiz-adv-x="1250" d="M78 550q111 556 843 923l30 -77q-491 -263 -652 -539q194 63 369 63q524 0 434 -450q-96 -480 -609 -480q-527 0 -415 560zM174 556q-95 -476 346 -476q403 0 481 390q72 360 -350 360q-214 0 -398 -68q-52 -70 -79 -206z" />
<glyph unicode="7" horiz-adv-x="1135" d="M155 0l940 1340h-859l18 90h970l-18 -90l-930 -1340h-121z" />
<glyph unicode="8" horiz-adv-x="1260" d="M53 424q48 243 316 321q-195 85 -145 333q73 366 553 366t407 -366q-50 -248 -284 -333q241 -78 193 -321q-87 -434 -607 -434t-433 434zM157 418q-68 -338 352 -338q410 0 478 338q56 282 -367 282q-407 0 -463 -282zM325 1058q-54 -268 326 -268q370 0 424 268 q58 292 -325 292q-367 0 -425 -292z" />
<glyph unicode="9" horiz-adv-x="1210" d="M161 963q96 480 609 480q527 0 415 -560q-111 -556 -843 -923l-40 77q501 263 662 539q-194 -63 -369 -63q-524 0 -434 450zM262 963q-72 -360 350 -360q214 0 398 68q52 70 79 206q95 476 -346 476q-403 0 -481 -390z" />
<glyph unicode=":" horiz-adv-x="395" d="M8 0l25 125h135l-25 -125h-135zM193 925l25 125h135l-25 -125h-135z" />
<glyph unicode=";" horiz-adv-x="545" d="M-82 -250l237 435h105l-237 -435h-105zM293 925l25 125h135l-25 -125h-135z" />
<glyph unicode="&#x3c;" horiz-adv-x="1120" d="M62 470l22 110l984 420l-22 -110l-887 -369l741 -361l-22 -110z" />
<glyph unicode="=" d="M34 330l18 90h750l-18 -90h-750zM94 630l18 90h750l-18 -90h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1120" d="M-22 50l22 110l885 361l-739 369l22 110l816 -420l-22 -110z" />
<glyph unicode="?" horiz-adv-x="1135" d="M158 0l21 105h105l-21 -105h-105zM226 1290l18 90q220 50 410 50q515 0 437 -390t-575 -390h-123l-56 -280h-105l74 370h225q395 0 455 300t-350 300q-190 0 -410 -50z" />
<glyph unicode="@" horiz-adv-x="2170" d="M126 540q180 900 1104 900q926 0 746 -900q-138 -690 -525 -690q-248 0 -203 224l35 176q-208 -250 -444 -250q-358 0 -254 521q106 529 591 529q213 0 363 -43l-183 -919q-30 -148 110 -148q285 0 405 600q162 810 -644 810q-834 0 -996 -810q-166 -830 599 -830 l-18 -90q-870 0 -686 920zM688 523q-85 -423 172 -423q244 0 444 254l115 578q-130 24 -270 24q-375 0 -461 -433z" />
<glyph unicode="A" horiz-adv-x="1492" d="M-107 0l933 1430h125l364 -1430h-118l-116 480h-601l49 90h531l-187 778l-861 -1348h-119z" />
<glyph unicode="B" horiz-adv-x="1330" d="M18 0l286 1430h610q350 0 350 -246q0 -40 -9 -87q-48 -244 -365 -349q256 -45 256 -253q0 -38 -9 -82q-83 -413 -530 -413h-589zM141 90h473q346 0 410 320q7 33 7 62q0 221 -383 221h-80l14 71q509 45 565 326q7 35 7 65q0 185 -265 185h-498z" />
<glyph unicode="C" horiz-adv-x="1405" d="M115 735q141 705 891 705q205 0 388 -60l-18 -90q-183 60 -368 60q-665 0 -788 -615q-22 -108 -22 -198q0 -457 556 -457q185 0 392 60l-18 -90q-207 -60 -412 -60q-626 0 -626 519q0 103 25 226z" />
<glyph unicode="D" horiz-adv-x="1470" d="M18 0l286 1430h510q587 0 587 -475q0 -92 -22 -201q-151 -754 -861 -754h-500zM141 90h395q595 0 728 664q19 96 19 177q0 409 -497 409h-395z" />
<glyph unicode="E" horiz-adv-x="1248" d="M18 0l286 1430h939l-18 -90h-834l-114 -570h800l-18 -90h-800l-118 -590h848l-18 -90h-953z" />
<glyph unicode="F" horiz-adv-x="1174" d="M18 0l286 1430h939l-18 -90h-834l-114 -570h800l-18 -90h-800l-136 -680h-105z" />
<glyph unicode="G" horiz-adv-x="1405" d="M115 735q141 705 891 705q205 0 388 -60l-18 -90q-183 60 -368 60q-665 0 -788 -615q-22 -110 -22 -202q0 -453 537 -453q132 0 303 44l105 526h105l-119 -594q-196 -66 -396 -66q-642 0 -642 522q0 102 24 223z" />
<glyph unicode="H" horiz-adv-x="1505" d="M18 0l286 1430h105l-132 -660h975l132 660h105l-286 -1430h-105l136 680h-975l-136 -680h-105z" />
<glyph unicode="I" horiz-adv-x="525" d="M68 0l286 1430h105l-286 -1430h-105z" />
<glyph unicode="J" horiz-adv-x="650" d="M-107 0l18 90q350 0 414 322l204 1018h105l-204 -1018q-82 -412 -537 -412z" />
<glyph unicode="K" horiz-adv-x="1325" d="M18 0l286 1430h105l-286 -1430h-105zM448 698l14 72l774 660h154l-833 -701l601 -729h-147z" />
<glyph unicode="L" horiz-adv-x="1143" d="M18 0l286 1430h105l-268 -1340h828l-18 -90h-933z" />
<glyph unicode="M" horiz-adv-x="1770" d="M18 0l286 1430h105l384 -1307l866 1307h95l-286 -1430h-95l247 1237l-815 -1237h-86l-357 1247l-249 -1247h-95z" />
<glyph unicode="N" horiz-adv-x="1505" d="M18 0l286 1430h115l720 -1276l255 1276h95l-286 -1430h-85l-743 1312l-262 -1312h-95z" />
<glyph unicode="O" horiz-adv-x="1645" d="M111 713q145 727 863 727q587 0 587 -501q0 -103 -25 -226q-145 -723 -852 -723q-597 0 -597 500q0 102 24 223zM227 719q-22 -112 -22 -204q0 -435 497 -435q592 0 720 639q22 111 22 202q0 429 -488 429q-603 0 -729 -631z" />
<glyph unicode="P" horiz-adv-x="1263" d="M18 0l286 1430h600q352 0 352 -278q0 -53 -13 -115q-77 -387 -767 -493l1 96q586 79 648 389q10 50 10 91q0 217 -267 217h-478l-267 -1337h-105z" />
<glyph unicode="Q" horiz-adv-x="1645" d="M110 713q146 727 864 727q586 0 586 -499q0 -104 -25 -228q-141 -704 -814 -723q44 -286 342 -290q100 0 186 30l-18 -90q-86 -30 -186 -30q-405 0 -432 382q-527 29 -527 499q0 101 24 222zM226 719q-22 -111 -22 -203q0 -436 498 -436q592 0 719 639q22 111 22 203 q0 428 -487 428q-603 0 -730 -631z" />
<glyph unicode="R" horiz-adv-x="1235" d="M18 0l286 1430h590q329 0 330 -247q0 -44 -11 -96q-64 -318 -505 -421l350 -666h-124l-342 663l14 73q433 63 489 343q8 39 8 72q0 186 -245 186h-468l-267 -1337h-105z" />
<glyph unicode="S" horiz-adv-x="1310" d="M18 50l22 110q209 -80 480 -80q449 0 517 340q7 37 7 68q0 182 -249 182h-294q-338 0 -338 258q0 47 11 102q82 410 667 410q240 0 453 -60l-20 -100q-211 70 -451 70q-480 0 -544 -320q-8 -39 -8 -72q0 -188 250 -188h294q337 0 337 -253q0 -45 -10 -97 q-86 -430 -640 -430q-271 0 -484 60z" />
<glyph unicode="T" horiz-adv-x="1095" d="M136 1340l18 90h1075l-18 -90h-490l-268 -1340h-105l268 1340h-480z" />
<glyph unicode="U" horiz-adv-x="1470" d="M128 552l176 878h105l-176 -878q-16 -79 -15 -144q0 -328 391 -328q470 0 564 472l176 878h105l-176 -878q-112 -562 -687 -562q-481 0 -481 394q0 76 18 168z" />
<glyph unicode="V" horiz-adv-x="1492" d="M179 1430h108l331 -1349l864 1349h119l-913 -1430h-165z" />
<glyph unicode="W" horiz-adv-x="1869" d="M148 0l31 1430h99l-23 -1329l728 1329h105l207 -1342l543 1342h91l-575 -1430h-152l-191 1306l-714 -1306h-149z" />
<glyph unicode="X" horiz-adv-x="1320" d="M-107 0l706 715l-420 715h120l373 -636l627 636h130l-705 -715l419 -715h-119l-373 636l-627 -636h-131z" />
<glyph unicode="Y" horiz-adv-x="1250" d="M179 1430h125l297 -830l643 830h115l-722 -930l-100 -500h-105l100 500z" />
<glyph unicode="Z" horiz-adv-x="1270" d="M-7 0l16 80l1136 1260h-864l18 90h980l-18 -90l-1117 -1250h847l-18 -90h-980z" />
<glyph unicode="[" horiz-adv-x="565" d="M-58 -380l362 1810h370l-18 -90h-275l-326 -1630h275l-18 -90h-370z" />
<glyph unicode="\" horiz-adv-x="975" d="M179 1430h105l439 -1430h-105z" />
<glyph unicode="]" horiz-adv-x="565" d="M-183 -380l18 90h275l326 1630h-275l18 90h370l-362 -1810h-370z" />
<glyph unicode="^" horiz-adv-x="1070" d="M58 700l546 730h150l254 -730h-110l-234 673l-496 -673h-110z" />
<glyph unicode="_" horiz-adv-x="1070" d="M-125 -90l18 90h1000l-18 -90h-1000z" />
<glyph unicode="`" horiz-adv-x="523" d="M244 1430h159l116 -239h-84z" />
<glyph unicode="a" horiz-adv-x="1127" d="M72 521q106 529 591 529q213 0 363 -43l-201 -1007h-85l30 250q-208 -250 -444 -250q-277 0 -277 313q0 91 23 208zM175 523q-21 -105 -21 -184q0 -239 193 -239q244 0 444 254l115 578q-130 24 -270 24q-375 0 -461 -433z" />
<glyph unicode="b" horiz-adv-x="1128" d="M27 43l277 1387h105l-126 -630q249 250 465 250q262 0 262 -297q0 -86 -22 -197q-112 -556 -555 -556q-226 0 -406 43zM148 123q165 -29 295 -29q350 0 444 469q18 92 18 162q0 225 -188 225q-214 0 -454 -254z" />
<glyph unicode="c" d="M75 535q103 515 593 515q150 0 274 -30l-18 -90q-134 30 -264 30q-385 0 -470 -425q-19 -93 -19 -167q0 -278 265 -278q180 0 348 140l-20 -100q-156 -130 -356 -130q-354 0 -354 346q0 84 21 189z" />
<glyph unicode="d" horiz-adv-x="1127" d="M72 521q106 529 591 529q146 0 263 -20l80 400h105l-286 -1430h-85l30 250q-208 -250 -444 -250q-277 0 -277 313q0 91 23 208zM175 523q-21 -105 -21 -184q0 -239 193 -239q244 0 444 254l115 578q-130 24 -270 24q-375 0 -461 -433z" />
<glyph unicode="e" horiz-adv-x="1075" d="M75 537q103 513 576 513q334 0 334 -209q0 -30 -7 -65q-57 -284 -427 -284h-380q-14 -71 -14 -129q0 -273 310 -273q209 0 376 140l-20 -100q-165 -130 -374 -130q-393 0 -393 359q0 80 19 178zM190 586h378q267 0 306 193q4 21 4 40q0 143 -245 143q-350 0 -443 -376z " />
<glyph unicode="f" horiz-adv-x="612" d="M-168 -303q142 85 202 383l204 1021q76 381 448 381q129 0 226 -40l-18 -90q-91 40 -227 40q-266 0 -325 -293l-9 -49h395l-18 -90h-395l-176 -880q-64 -318 -245 -448z" />
<glyph unicode="g" horiz-adv-x="1127" d="M-48 -330l18 90q143 -50 336 -50q356 0 414 290l50 250q-208 -250 -444 -250q-277 0 -277 313q0 91 23 208q106 529 591 529q213 0 363 -43l-201 -1007q-76 -380 -539 -380q-194 0 -334 50zM175 523q-21 -105 -21 -184q0 -239 193 -239q244 0 444 254l115 578 q-130 24 -270 24q-375 0 -461 -433z" />
<glyph unicode="h" horiz-adv-x="1165" d="M18 0l286 1430h105l-139 -694q247 314 510 314q243 0 243 -209q0 -44 -11 -96l-149 -745h-105l149 745q8 38 8 69q0 142 -159 142q-259 0 -508 -333l-125 -623h-105z" />
<glyph unicode="i" horiz-adv-x="465" d="M38 0l210 1050h105l-210 -1050h-105zM290 1310l24 120h125l-24 -120h-125z" />
<glyph unicode="j" horiz-adv-x="465" d="M-148 -303q142 85 202 383l194 970h105l-194 -970q-64 -318 -245 -448zM290 1310l24 120h125l-24 -120h-125z" />
<glyph unicode="k" horiz-adv-x="1111" d="M8 0l286 1430h105l-132 -662q249 282 519 282q246 0 246 -193q0 -36 -9 -80q-46 -230 -422 -364l293 -413h-129l-265 395l13 63q364 111 404 310q6 29 6 54q0 138 -178 138q-243 0 -499 -294l-133 -666h-105z" />
<glyph unicode="l" horiz-adv-x="465" d="M38 0l286 1430h105l-286 -1430h-105z" />
<glyph unicode="m" horiz-adv-x="1795" d="M18 0l210 1050h85l-42 -312q204 312 452 312q240 0 239 -208q0 -44 -10 -96q213 304 459 304q238 0 238 -222q0 -51 -13 -113l-143 -715h-105l143 715q10 49 10 88q0 153 -150 153q-258 0 -454 -336l-124 -620h-105l143 715q9 47 9 85q0 156 -157 156q-246 0 -456 -336 l-124 -620h-105z" />
<glyph unicode="n" horiz-adv-x="1165" d="M18 0l210 1050h85l-43 -314q247 314 510 314q243 0 243 -209q0 -44 -11 -96l-149 -745h-105l149 745q8 38 8 69q0 142 -159 142q-259 0 -508 -333l-125 -623h-105z" />
<glyph unicode="o" horiz-adv-x="1160" d="M73 525q107 535 577 535q383 0 383 -355q0 -81 -20 -180q-107 -534 -577 -534q-382 0 -382 356q0 80 19 178zM179 529q-18 -89 -18 -160q0 -289 293 -289q365 0 455 449q17 86 17 155q0 286 -294 286q-365 0 -453 -441z" />
<glyph unicode="p" horiz-adv-x="1128" d="M-58 -380l286 1429h85l-30 -249q249 250 465 250q261 0 261 -296q0 -86 -22 -198q-111 -556 -554 -556q-165 0 -305 23l-81 -403h-105zM148 123q165 -29 295 -29q350 0 444 469q18 92 18 162q0 225 -188 225q-214 0 -455 -254z" />
<glyph unicode="q" horiz-adv-x="1127" d="M72 521q106 529 591 529q213 0 363 -43l-277 -1387h-105l126 630q-208 -250 -444 -250q-277 0 -277 313q0 91 23 208zM175 523q-21 -105 -21 -184q0 -239 193 -239q244 0 444 254l115 578q-130 24 -270 24q-375 0 -461 -433z" />
<glyph unicode="r" horiz-adv-x="685" d="M18 0l210 1050h85l-55 -374q216 374 460 374l-21 -104q-238 0 -457 -363l-117 -583h-105z" />
<glyph unicode="s" horiz-adv-x="1030" d="M8 50l20 100q163 -60 332 -60q331 0 373 210q4 21 4 39q0 131 -215 131h-130q-282 0 -282 205q0 35 8 75q60 300 497 300q168 0 333 -50l-20 -100q-163 60 -331 60q-332 0 -374 -210q-5 -25 -5 -46q0 -134 194 -134h130q303 0 303 -203q0 -31 -7 -67q-60 -300 -496 -300 q-169 0 -334 50z" />
<glyph unicode="t" horiz-adv-x="627" d="M71 283l187 937h64l-15 -170h305l-18 -90h-286l-133 -663q-9 -44 -8 -79q0 -128 119 -128h134l-18 -90h-132q-209 0 -209 189q0 42 10 94z" />
<glyph unicode="u" horiz-adv-x="1165" d="M79 305l149 745h105l-149 -745q-8 -41 -8 -74q0 -137 139 -137q279 0 528 333l125 623h105l-210 -1050h-85l43 314q-247 -314 -530 -314q-223 0 -223 204q0 45 11 101z" />
<glyph unicode="v" horiz-adv-x="1030" d="M78 1050h120l192 -959l578 959h120l-657 -1050h-122z" />
<glyph unicode="w" horiz-adv-x="1675" d="M82 520q61 305 206 530h105q-145 -225 -206 -530q-22 -108 -21 -190q0 -240 190 -240q305 0 397 460l100 500h105l-100 -500q-21 -107 -22 -188q0 -272 235 -272q255 0 341 430q32 160 32 299q0 125 -26 231h105q26 -107 26 -231q0 -138 -32 -299q-104 -520 -464 -520 q-293 0 -293 312q0 13 1 27q-118 -339 -423 -339q-279 0 -279 313q0 90 23 207z" />
<glyph unicode="x" horiz-adv-x="1010" d="M-107 0l513 525l-303 525h120l256 -444l434 444h130l-512 -525l302 -525h-120l-256 444l-434 -444h-130z" />
<glyph unicode="y" horiz-adv-x="1165" d="M-10 -330l18 90q143 -50 336 -50q356 0 414 290l63 314q-247 -314 -530 -314q-223 0 -223 204q0 45 11 101l149 745h105l-149 -745q-8 -41 -8 -74q0 -137 139 -137q279 0 528 333l125 623h105l-210 -1050q-76 -380 -539 -380q-194 0 -334 50z" />
<glyph unicode="z" horiz-adv-x="990" d="M-32 0l18 90l819 870h-625l18 90h750l-18 -90l-821 -870h627l-18 -90h-750z" />
<glyph unicode="{" horiz-adv-x="590" d="M64 480l18 90q210 0 286 382q61 302 226 478h105q-165 -176 -226 -478q-70 -352 -275 -427q175 -75 105 -427q-61 -302 34 -478h-105q-95 176 -34 478q76 382 -134 382z" />
<glyph unicode="|" horiz-adv-x="425" d="M-58 -380l362 1810h105l-362 -1810h-105z" />
<glyph unicode="}" horiz-adv-x="590" d="M-183 -380q165 176 226 478q70 352 275 427q-175 75 -105 427q61 302 -34 478h105q95 -176 34 -478q-76 -382 134 -382l-18 -90q-210 0 -286 -382q-61 -302 -226 -478h-105z" />
<glyph unicode="~" d="M60 460l18 90q70 61 174 61q86 0 195 -41q109 -40 199 -40q109 0 190 60l-18 -90q-70 -60 -174 -60q-86 0 -195 40q-109 41 -199 41q-109 0 -190 -61z" />
<glyph unicode="&#xa2;" d="M103 726q95 472 514 511l38 193h115l-38 -189q130 -4 238 -30l-18 -90q-134 30 -264 30q-385 0 -470 -425q-89 -445 246 -445q180 0 348 140l-20 -100q-121 -101 -268 -123l-40 -198h-115l39 192q-408 17 -305 534z" />
<glyph unicode="&#xa3;" horiz-adv-x="1237" d="M-38 -30l18 92q201 75 257 351q23 117 -19 291t-13 323q83 413 621 413q290 0 427 -100l-24 -120q-132 130 -418 130q-424 0 -488 -321q-29 -144 3 -259h446l-18 -90h-414q26 -164 6 -264q-27 -137 -123 -298q41 4 85 4q137 0 289 -43q57 -17 117 -17q145 0 303 98 l-22 -110q-137 -84 -301 -84q-94 0 -195 28q-123 32 -240 32q-153 0 -297 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1270" d="M114 379l18 90h389l34 171h-389l18 90h347l-327 700h125l310 -661l580 661h135l-633 -700h373l-18 -90h-416l-34 -171h416l-18 -90h-416l-76 -379h-105l76 379h-389z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M153 723q143 717 891 717q737 0 594 -717q-147 -733 -884 -733q-748 0 -601 733zM257 719q-128 -639 495 -639q652 0 780 639q126 631 -506 631q-643 0 -769 -631zM481 728q83 416 499 416q165 0 280 -51l-20 -98q-113 58 -264 58q-325 0 -390 -325q-71 -352 254 -352 q151 0 288 58l-20 -98q-135 -51 -300 -51q-416 0 -327 443z" />
<glyph unicode="&#xad;" horiz-adv-x="720" d="M64 480l18 90h500l-18 -90h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1183" d="M223 1023q85 427 515 427q433 0 348 -427q-83 -415 -516 -415q-418 0 -347 415zM296 1025q-72 -361 285 -361q360 0 432 361q74 369 -286 369q-357 0 -431 -369zM424 756l107 536h229q153 0 127 -128q-21 -105 -181 -155l134 -253h-91l-123 241l9 45q159 25 178 119 q14 74 -72 74h-153l-95 -479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="523" d="M196 1191l212 239h159l-287 -239h-84z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" horiz-adv-x="720" d="M64 480l18 90h500l-18 -90h-500z" />
<glyph unicode="&#x2011;" horiz-adv-x="720" d="M64 480l18 90h500l-18 -90h-500z" />
<glyph unicode="&#x2012;" horiz-adv-x="720" d="M64 480l18 90h500l-18 -90h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1220" d="M64 480l18 90h1000l-18 -90h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1720" d="M64 480l18 90h1500l-18 -90h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="350" d="M117 995l237 435h115l-237 -435h-115z" />
<glyph unicode="&#x2019;" horiz-adv-x="375" d="M117 995l237 435h115l-237 -435h-115z" />
<glyph unicode="&#x201c;" horiz-adv-x="650" d="M117 995l237 435h115l-237 -435h-115zM417 995l237 435h115l-237 -435h-115z" />
<glyph unicode="&#x201d;" horiz-adv-x="650" d="M117 995l237 435h115l-237 -435h-115zM417 995l237 435h115l-237 -435h-115z" />
<glyph unicode="&#x2022;" horiz-adv-x="610" d="M113 725q39 195 234 195t156 -195t-234 -195t-156 195z" />
<glyph unicode="&#x2026;" horiz-adv-x="1055" d="M-32 0l25 125h135l-25 -125h-135zM318 0l25 125h135l-25 -125h-135zM668 0l25 125h135l-25 -125h-135z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1405" d="M115 735q141 705 891 705q215 0 388 -60l-20 -100q-171 70 -366 70q-568 0 -733 -438h833l-18 -90h-843l-34 -170h843l-18 -90h-833q-19 -482 549 -482q195 0 394 70l-20 -100q-197 -60 -412 -60q-750 0 -601 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1626" d="M290 1359l14 71h511l-14 -71h-212l-120 -602h-87l120 602h-212zM770 757l134 673h110l136 -561l354 561h106l-134 -673h-78l108 543l-347 -543h-69l-135 543l-108 -543h-77z" />
<glyph unicode="&#xe000;" horiz-adv-x="1050" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

View File

@ -0,0 +1,145 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG webfont generated by Font Squirrel.
Copyright : 2011 Bernd Montag
Designer : Bernd Montag
</metadata>
<defs>
<font id="SansationRegular" horiz-adv-x="1050" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="500" />
<glyph unicode=" " horiz-adv-x="500" />
<glyph unicode="&#x09;" horiz-adv-x="500" />
<glyph unicode="&#xa0;" horiz-adv-x="500" />
<glyph unicode="!" horiz-adv-x="485" d="M150 0v185h185v-185h-185zM150 370v1060h185v-1060h-185z" />
<glyph unicode="&#x22;" horiz-adv-x="755" d="M100 1430h185l-30 -435h-125zM470 1430h185l-30 -435h-125z" />
<glyph unicode="#" horiz-adv-x="1893" d="M100 344l30 154h402l89 378h-401l30 154h412l100 395h180l-100 -395h378l102 400h180l-101 -400h392l-30 -154h-402l-89 -378h401l-30 -154h-412l-90 -349h-180l90 349h-378l-90 -349h-180l89 349h-392zM713 498h377l90 378h-377z" />
<glyph unicode="$" d="M100 940q0 276 369 298v192h175v-194q134 -10 266 -46v-160q-185 60 -373 60q-262 0 -262 -150q0 -140 165 -140h150q360 0 360 -310q0 -251 -306 -292v-198h-175v191q-166 5 -329 49v160q185 -60 374 -60q251 0 251 150q0 140 -175 140h-150q-340 0 -340 310z" />
<glyph unicode="%" horiz-adv-x="1422" d="M100 0l1017 1430h205l-1017 -1430h-205zM100 1180q0 260 278 260q274 0 274 -260q0 -259 -274 -259q-278 0 -278 259zM230 1182q0 -147 148 -147q144 0 144 147q0 144 -144 144q-148 0 -148 -144zM770 249q0 260 278 260q274 0 274 -260q0 -259 -274 -259 q-278 0 -278 259zM900 251q0 -147 148 -147q144 0 144 147q0 144 -144 144q-148 0 -148 -144z" />
<glyph unicode="&#x26;" horiz-adv-x="1275" d="M100 394q0 247 193 333q-193 85 -193 318q0 385 510 385q185 0 360 -50v-150q-175 50 -347 50q-338 0 -338 -230q0 -250 255 -250h388v142h63l102 -142h182v-150h-162v-160q0 -493 -518 -493q-495 0 -495 397zM285 399q0 -249 301 -249q342 0 342 342v158h-386 q-257 0 -257 -251z" />
<glyph unicode="'" horiz-adv-x="385" d="M100 1430h185l-30 -435h-125z" />
<glyph unicode="(" horiz-adv-x="585" d="M100 525q0 453 200 905h185q-200 -452 -200 -905t200 -905h-185q-200 452 -200 905z" />
<glyph unicode=")" horiz-adv-x="585" d="M100 -380q200 452 200 905t-200 905h185q200 -452 200 -905t-200 -905h-185z" />
<glyph unicode="*" horiz-adv-x="810" d="M100 1150l48 150l211 -103l-31 233h156l-30 -232l209 101l48 -147l-228 -43l159 -170l-123 -92l-113 205l-113 -204l-124 89l161 171z" />
<glyph unicode="+" horiz-adv-x="950" d="M100 450v150h300v300h150v-300h300v-150h-300v-300h-150v300h-300z" />
<glyph unicode="," horiz-adv-x="385" d="M25 -250l150 435h185l-150 -435h-185z" />
<glyph unicode="-" horiz-adv-x="700" d="M100 450v150h500v-150h-500z" />
<glyph unicode="." horiz-adv-x="385" d="M100 0v185h185v-185h-185z" />
<glyph unicode="/" horiz-adv-x="980" d="M25 0l725 1430h205l-725 -1430h-205z" />
<glyph unicode="0" horiz-adv-x="1445" d="M110 713q0 727 618 727q607 0 607 -727q0 -723 -607 -723q-618 0 -618 723zM305 719q0 -579 423 -579q412 0 412 579q0 571 -412 571q-423 0 -423 -571z" />
<glyph unicode="1" horiz-adv-x="645" d="M100 1251v89l335 100v-1440h-185v1251h-150z" />
<glyph unicode="2" horiz-adv-x="1145" d="M60 0v150q795 547 795 870q0 270 -340 270q-220 0 -415 -110v160q195 100 415 100q525 0 525 -420q0 -370 -715 -870h715v-150h-980z" />
<glyph unicode="3" horiz-adv-x="1150" d="M100 50v160q200 -70 400 -70q330 0 330 260q0 250 -252 250h-328v150h325q255 0 255 250q0 240 -330 240q-200 0 -400 -70v160q200 60 400 60q515 0 515 -390q0 -236 -188 -325q188 -85 188 -325q0 -410 -515 -410q-200 0 -400 60z" />
<glyph unicode="4" horiz-adv-x="1220" d="M60 340v150l575 940h194l-576 -940h559v508h185v-508l148 -76v-74h-148v-340h-185v340h-752z" />
<glyph unicode="5" horiz-adv-x="1175" d="M125 50v160q200 -70 400 -70q365 0 365 310q0 260 -355 260q-225 0 -410 -40l30 760h864v-150h-706l-24 -442q117 22 246 22q540 0 540 -410q0 -460 -560 -460q-190 0 -390 60z" />
<glyph unicode="6" horiz-adv-x="1260" d="M100 550q0 556 658 923l96 -127q-362 -176 -514 -479q131 53 316 53q514 0 514 -450q0 -480 -543 -480q-527 0 -527 560zM275 556q0 -416 361 -416q353 0 353 330q0 300 -342 300q-214 0 -344 -48q-28 -60 -28 -166z" />
<glyph unicode="7" horiz-adv-x="1090" d="M65 1280v150h950v-150l-602 -1280h-201l622 1280h-769z" />
<glyph unicode="8" horiz-adv-x="1240" d="M100 424q0 223 212 321q-172 105 -172 333q0 366 480 366t480 -366q0 -228 -177 -333q217 -98 217 -321q0 -434 -520 -434t-520 434zM285 418q0 -278 340 -278q330 0 330 278q0 252 -343 252q-327 0 -327 -252zM325 1058q0 -238 300 -238q290 0 290 238q0 232 -303 232 q-287 0 -287 -232z" />
<glyph unicode="9" horiz-adv-x="1260" d="M100 953q0 480 543 480q527 0 527 -560q0 -556 -658 -923l-96 127q362 176 514 479q-131 -63 -316 -63q-514 0 -514 460zM281 953q0 -300 342 -300q214 0 344 48q28 60 28 166q0 416 -361 416q-353 0 -353 -330z" />
<glyph unicode=":" horiz-adv-x="435" d="M150 0v185h185v-185h-185zM150 865v185h185v-185h-185z" />
<glyph unicode=";" horiz-adv-x="535" d="M100 -250l150 435h185l-150 -435h-185zM250 865v185h185v-185h-185z" />
<glyph unicode="&#x3c;" horiz-adv-x="1100" d="M100 450v150l900 400v-150l-743 -329l743 -321v-150z" />
<glyph unicode="=" horiz-adv-x="950" d="M100 300v150h750v-150h-750zM100 600v150h750v-150h-750z" />
<glyph unicode="&#x3e;" horiz-adv-x="1100" d="M100 50v150l743 321l-743 329v150l900 -400v-150z" />
<glyph unicode="?" horiz-adv-x="1115" d="M100 1230v150q210 50 400 50q515 0 515 -390t-497 -390h-83v-280h-185v430h265q315 0 315 240t-330 240q-190 0 -400 -50zM250 0v185h185v-185h-185z" />
<glyph unicode="@" horiz-adv-x="2150" d="M150 540q0 900 924 900q926 0 926 -900q0 -690 -427 -690q-241 0 -241 244q-147 -94 -332 -94q-375 0 -375 317q0 323 426 323q157 0 274 -20v109q0 171 -283 171q-162 0 -332 -50v150q170 50 332 50q468 0 468 -336v-626q0 -88 100 -88q205 0 205 540q0 750 -726 750 q-754 0 -754 -750q0 -770 685 -770v-150q-870 0 -870 920zM810 320q0 -170 190 -170q192 0 325 102v218q-110 20 -274 20q-241 0 -241 -170z" />
<glyph unicode="A" horiz-adv-x="1472" d="M25 0l607 1430h205l610 -1430h-205l-185 450h-473l51 150h360l-267 648l-511 -1248h-192z" />
<glyph unicode="B" horiz-adv-x="1330" d="M170 0v1430h610q408 0 408 -333q0 -244 -266 -349q284 -53 284 -325q0 -423 -447 -423h-589zM355 150h393q256 0 256 260q0 253 -343 253h-80v121q410 55 410 296q0 200 -228 200h-408v-1130z" />
<glyph unicode="C" horiz-adv-x="1385" d="M100 735q0 705 750 705q215 0 400 -60v-160q-185 70 -380 70q-585 0 -585 -555q0 -595 585 -595q195 0 380 70v-160q-185 -60 -400 -60q-750 0 -750 745z" />
<glyph unicode="D" horiz-adv-x="1500" d="M170 0v1430h520q710 0 710 -676q0 -754 -710 -754h-520zM355 150h335q525 0 525 604q0 526 -525 526h-335v-1130z" />
<glyph unicode="E" horiz-adv-x="1230" d="M170 0v1430h935v-150h-750v-480h715v-150h-715v-500h765v-150h-950z" />
<glyph unicode="F" horiz-adv-x="1155" d="M170 0v1430h935v-150h-750v-480h715v-150h-715v-650h-185z" />
<glyph unicode="G" horiz-adv-x="1385" d="M100 735q0 705 750 705q215 0 400 -60v-160q-185 70 -380 70q-585 0 -585 -555q0 -595 576 -595q92 0 204 24v486h185v-594q-173 -66 -373 -66q-777 0 -777 745z" />
<glyph unicode="H" horiz-adv-x="1555" d="M170 0v1430h185v-630h845v630h185v-1430h-185v650h-845v-650h-185z" />
<glyph unicode="I" horiz-adv-x="585" d="M200 0v1430h185v-1430h-185z" />
<glyph unicode="J" horiz-adv-x="690" d="M25 0v150q300 0 300 262v1018h185v-1018q0 -412 -485 -412z" />
<glyph unicode="K" horiz-adv-x="1400" d="M170 0v1430h185v-1430h-185zM535 688v112l592 630h234l-644 -675l658 -755h-257z" />
<glyph unicode="L" horiz-adv-x="1153" d="M170 0v1430h185v-1280h748v-150h-933z" />
<glyph unicode="M" horiz-adv-x="1840" d="M170 0v1430h235l525 -1193l515 1193h225v-1430h-165v1173l-508 -1173h-146l-516 1173v-1173h-165z" />
<glyph unicode="N" horiz-adv-x="1575" d="M170 0v1430h185l875 -1152v1152h175v-1430h-185l-875 1162v-1162h-175z" />
<glyph unicode="O" horiz-adv-x="1665" d="M120 713q0 727 718 727q707 0 707 -727q0 -723 -707 -723q-718 0 -718 723zM315 719q0 -579 523 -579q512 0 512 579q0 571 -512 571q-523 0 -523 -571z" />
<glyph unicode="P" horiz-adv-x="1263" d="M170 0v1430h580q438 0 438 -383q0 -417 -599 -509l-38 156q440 65 440 345q0 238 -258 238h-378v-1277h-185z" />
<glyph unicode="Q" horiz-adv-x="1665" d="M120 713q0 727 718 727q707 0 707 -727q0 -598 -485 -706l232 -270l-144 -108l-310 361q-718 0 -718 723zM315 719q0 -579 523 -579q512 0 512 579q0 571 -512 571q-523 0 -523 -571z" />
<glyph unicode="R" horiz-adv-x="1305" d="M170 0v1430h610q408 0 408 -343q0 -279 -399 -413l491 -674h-244l-455 643v121q410 65 410 315q0 198 -228 198h-408v-1277h-185z" />
<glyph unicode="S" horiz-adv-x="1290" d="M100 1030q0 410 575 410q250 0 465 -60v-170q-215 80 -465 80q-390 0 -390 -260q0 -230 264 -230h184q457 0 457 -390q0 -420 -554 -420q-261 0 -486 60v170q225 -80 486 -80q369 0 369 270q0 230 -272 230h-184q-449 0 -449 390z" />
<glyph unicode="T" horiz-adv-x="1185" d="M50 1280v150h1085v-150h-450v-1280h-185v1280h-450z" />
<glyph unicode="U" horiz-adv-x="1510" d="M160 552v878h185v-878q0 -412 410 -412t410 412v878h185v-878q0 -562 -595 -562t-595 562z" />
<glyph unicode="V" horiz-adv-x="1472" d="M25 1430h195l524 -1238l511 1238h192l-607 -1430h-205z" />
<glyph unicode="W" horiz-adv-x="1900" d="M50 1430h179l201 -1244l404 1244h185l433 -1244l227 1244h171l-269 -1430h-252l-404 1198l-391 -1198h-249z" />
<glyph unicode="X" horiz-adv-x="1410" d="M25 0l563 715l-563 715h225l450 -572l450 572h225l-562 -715l562 -715h-225l-450 572l-450 -572h-225z" />
<glyph unicode="Y" horiz-adv-x="1300" d="M25 1430h205l412 -747l418 747h215l-546 -930v-500h-185v500z" />
<glyph unicode="Z" horiz-adv-x="1330" d="M125 0v150l884 1130h-864v150h1060v-150l-857 -1130h837v-150h-1060z" />
<glyph unicode="[" horiz-adv-x="650" d="M150 -380v1810h450v-150h-265v-1510h265v-150h-450z" />
<glyph unicode="\" horiz-adv-x="980" d="M25 1430h205l725 -1430h-205z" />
<glyph unicode="]" horiz-adv-x="650" d="M50 -230h265v1510h-265v150h450v-1810h-450v150z" />
<glyph unicode="^" d="M50 700l400 730h150l400 -730h-150l-329 603l-321 -603h-150z" />
<glyph unicode="_" d="M25 0h1000v-150h-1000v150z" />
<glyph unicode="`" horiz-adv-x="603" d="M100 1430h239l164 -239h-164z" />
<glyph unicode="a" horiz-adv-x="1135" d="M100 317q0 323 426 323q137 0 274 -20v99q0 181 -283 181q-162 0 -332 -50v150q170 50 332 50q468 0 468 -326v-724h-104l-64 104q-157 -104 -342 -104q-375 0 -375 317zM285 320q0 -170 190 -170q192 0 325 102v218q-137 20 -274 20q-241 0 -241 -170z" />
<glyph unicode="b" horiz-adv-x="1188" d="M150 43v1387h185v-430q119 50 255 50q498 0 498 -504q0 -546 -523 -546q-226 0 -415 43zM335 183q91 -29 221 -29q350 0 350 399q0 337 -317 337q-144 0 -254 -54v-653z" />
<glyph unicode="c" horiz-adv-x="1025" d="M100 545q0 505 560 505q150 0 280 -30v-150q-130 30 -290 30q-365 0 -365 -355q0 -395 365 -395q160 0 290 30v-150q-130 -30 -280 -30q-560 0 -560 545z" />
<glyph unicode="d" horiz-adv-x="1190" d="M100 546q0 504 498 504q136 0 257 -50v430h185v-1367q-191 -63 -471 -63q-469 0 -469 546zM282 553q0 -399 317 -399q144 0 256 39v643q-112 54 -256 54q-317 0 -317 -337z" />
<glyph unicode="e" horiz-adv-x="1130" d="M100 537q0 513 483 513q448 0 448 -443q0 -63 -9 -135h-737q0 -322 376 -322q179 0 318 40v-150q-139 -40 -338 -40q-541 0 -541 537zM285 626h568q-6 276 -270 276q-280 0 -298 -276z" />
<glyph unicode="f" horiz-adv-x="661" d="M150 0v1101q0 381 432 381q119 0 224 -40v-150q-99 40 -225 40q-246 0 -246 -223v-59h325v-150h-325v-900h-185z" />
<glyph unicode="g" horiz-adv-x="1187" d="M100 531q0 519 525 519q213 0 412 -43v-1007q0 -380 -483 -380q-194 0 -344 50v150q153 -50 346 -50q296 0 296 230v50q-118 -50 -254 -50q-498 0 -498 531zM282 533q0 -373 317 -373q144 0 253 54v658q-95 24 -235 24q-335 0 -335 -363z" />
<glyph unicode="h" horiz-adv-x="1205" d="M150 0v1430h185v-494q134 114 327 114q393 0 393 -391v-659h-185v662q0 234 -233 234q-159 0 -302 -133v-763h-185z" />
<glyph unicode="i" horiz-adv-x="525" d="M170 0v1050h185v-1050h-185zM170 1255v175h185v-175h-185z" />
<glyph unicode="j" horiz-adv-x="525" d="M45 -293q125 135 125 373v970h185v-970q0 -318 -155 -478zM170 1255v175h185v-175h-185z" />
<glyph unicode="k" horiz-adv-x="1181" d="M150 0v1430h185v-462q153 82 353 82q392 0 392 -303q0 -220 -300 -304l336 -443h-234l-334 445v83q347 31 347 220q0 152 -220 152q-173 0 -340 -94v-806h-185z" />
<glyph unicode="l" horiz-adv-x="505" d="M160 0v1430h185v-1430h-185z" />
<glyph unicode="m" horiz-adv-x="1805" d="M150 0v1050h125l31 -132q151 132 329 132q228 0 311 -144q171 144 347 144q362 0 362 -399v-651h-185v661q0 235 -198 235q-148 0 -277 -136v-760h-185v658q0 238 -196 238q-156 0 -279 -136v-760h-185z" />
<glyph unicode="n" horiz-adv-x="1205" d="M150 0v1050h125l33 -134q161 134 354 134q393 0 393 -391v-659h-185v662q0 234 -233 234q-159 0 -302 -133v-763h-185z" />
<glyph unicode="o" horiz-adv-x="1200" d="M100 525q0 525 500 525t500 -525q0 -524 -500 -524q-498 0 -500 524zM285 529q0 -379 315 -379t315 379q0 371 -315 371t-315 -371z" />
<glyph unicode="p" horiz-adv-x="1187" d="M150 -380v1387q209 43 432 43q505 0 505 -499q0 -551 -508 -551q-126 0 -244 50v-430h-185zM335 214q109 -54 243 -54q327 0 327 393q0 343 -325 343q-140 0 -245 -24v-658z" />
<glyph unicode="q" horiz-adv-x="1187" d="M100 531q0 519 525 519q213 0 412 -43v-1387h-185v430q-118 -50 -254 -50q-498 0 -498 531zM282 533q0 -373 317 -373q144 0 253 54v658q-95 24 -235 24q-335 0 -335 -363z" />
<glyph unicode="r" horiz-adv-x="675" d="M150 0v1050h125l33 -134q138 134 332 134v-154q-188 0 -305 -133v-763h-185z" />
<glyph unicode="s" d="M100 750q0 300 437 300q188 0 373 -50v-160q-185 60 -373 60q-262 0 -262 -150q0 -140 165 -140h150q360 0 360 -310q0 -300 -436 -300q-189 0 -374 50v160q185 -60 374 -60q251 0 251 150q0 140 -175 140h-150q-340 0 -340 310z" />
<glyph unicode="t" horiz-adv-x="675" d="M150 283v937h116l40 -170h284v-150h-255v-603q0 -147 127 -147h128v-150h-176q-264 0 -264 283z" />
<glyph unicode="u" horiz-adv-x="1205" d="M150 391v659h185v-662q0 -234 232 -234q159 0 303 133v763h185v-1050h-127l-32 134q-191 -134 -384 -134q-362 0 -362 391z" />
<glyph unicode="v" horiz-adv-x="1000" d="M0 1050h200l301 -823l299 823h200l-427 -1050h-172z" />
<glyph unicode="w" horiz-adv-x="1539" d="M35 1050h187l186 -823l273 823h167l292 -823l168 823h196l-274 -1050h-169l-301 785l-286 -785h-173z" />
<glyph unicode="x" d="M25 0l393 525l-393 525h215l285 -381l285 381h215l-392 -525l392 -525h-215l-285 381l-285 -381h-215z" />
<glyph unicode="y" d="M25 1050h201l297 -820l307 820h196l-436 -1081q-116 -286 -348 -357l-71 131q176 77 256 251z" />
<glyph unicode="z" horiz-adv-x="1040" d="M100 0v140l635 760h-615v150h820v-150l-627 -760h607v-140h-820z" />
<glyph unicode="{" horiz-adv-x="675" d="M100 450v150q210 0 210 352q0 302 130 478h185q-130 -176 -130 -478q0 -352 -210 -427q210 -75 210 -427q0 -302 130 -478h-185q-130 176 -130 478q0 352 -210 352z" />
<glyph unicode="|" horiz-adv-x="485" d="M150 -380v1810h185v-1810h-185z" />
<glyph unicode="}" horiz-adv-x="675" d="M50 -380q130 176 130 478q0 352 210 427q-210 75 -210 427q0 302 -130 478h185q130 -176 130 -478q0 -352 210 -352v-150q-210 0 -210 -352q0 -302 -130 -478h-185z" />
<glyph unicode="~" horiz-adv-x="950" d="M100 430v150q58 61 162 61q86 0 203 -41q117 -40 207 -40q109 0 178 60v-150q-58 -60 -162 -60q-86 0 -203 40q-117 41 -207 41q-109 0 -178 -61z" />
<glyph unicode="&#xa2;" d="M100 735q0 459 470 501v194h175v-192q108 -6 205 -28v-150q-130 30 -260 30q-405 0 -405 -355q0 -395 405 -395q130 0 260 30v-150q-97 -22 -205 -28v-192h-175v195q-470 45 -470 540z" />
<glyph unicode="&#xa3;" horiz-adv-x="1217" d="M100 -30v152q186 75 186 291q0 117 -77 291t-77 323q0 413 558 413q270 0 427 -100v-180q-158 130 -434 130q-354 0 -354 -261q0 -144 45 -229h376v-150h-324q49 -134 49 -234q0 -137 -64 -238q22 4 51 4q91 0 251 -43q61 -17 121 -17q145 0 283 98v-170 q-120 -84 -284 -84q-94 0 -201 28q-129 32 -246 32q-153 0 -286 -56z" />
<glyph unicode="&#xa5;" horiz-adv-x="1250" d="M50 1430h205l362 -627l368 627h215l-433 -700h313v-150h-376v-111h376v-150h-376v-319h-185v319h-349v150h349v111h-349v150h287z" />
<glyph unicode="&#xa9;" horiz-adv-x="1785" d="M150 723q0 717 748 717q737 0 737 -717q0 -733 -737 -733q-748 0 -748 733zM255 719q0 -639 623 -639q652 0 652 639q0 631 -632 631q-643 0 -643 -631zM477 728q0 416 416 416q165 0 290 -51v-98q-125 58 -276 58q-325 0 -325 -325q0 -352 325 -352q151 0 276 58v-98 q-125 -51 -290 -51q-416 0 -416 443z" />
<glyph unicode="&#xad;" horiz-adv-x="700" d="M100 450v150h500v-150h-500z" />
<glyph unicode="&#xae;" horiz-adv-x="1163" d="M150 1023q0 427 430 427q433 0 433 -427q0 -415 -433 -415q-418 0 -430 415zM223 1025q0 -361 357 -361q360 0 360 361q0 369 -360 369q-357 0 -357 -369zM404 756v536h229q153 0 153 -128q0 -105 -150 -155l184 -253h-91l-171 241v45q154 25 154 119q0 74 -86 74h-153 v-479h-69z" />
<glyph unicode="&#xb4;" horiz-adv-x="603" d="M100 1191l164 239h239l-239 -239h-164z" />
<glyph unicode="&#x2000;" horiz-adv-x="741" />
<glyph unicode="&#x2001;" horiz-adv-x="1482" />
<glyph unicode="&#x2002;" horiz-adv-x="741" />
<glyph unicode="&#x2003;" horiz-adv-x="1482" />
<glyph unicode="&#x2004;" horiz-adv-x="494" />
<glyph unicode="&#x2005;" horiz-adv-x="370" />
<glyph unicode="&#x2006;" horiz-adv-x="247" />
<glyph unicode="&#x2007;" horiz-adv-x="247" />
<glyph unicode="&#x2008;" horiz-adv-x="185" />
<glyph unicode="&#x2009;" horiz-adv-x="296" />
<glyph unicode="&#x200a;" horiz-adv-x="82" />
<glyph unicode="&#x2010;" horiz-adv-x="700" d="M100 450v150h500v-150h-500z" />
<glyph unicode="&#x2011;" horiz-adv-x="700" d="M100 450v150h500v-150h-500z" />
<glyph unicode="&#x2012;" horiz-adv-x="700" d="M100 450v150h500v-150h-500z" />
<glyph unicode="&#x2013;" horiz-adv-x="1200" d="M100 450v150h1000v-150h-1000z" />
<glyph unicode="&#x2014;" horiz-adv-x="1700" d="M100 450v150h1500v-150h-1500z" />
<glyph unicode="&#x2018;" horiz-adv-x="410" d="M50 995l150 435h185l-150 -435h-185z" />
<glyph unicode="&#x2019;" horiz-adv-x="435" d="M50 995l150 435h185l-150 -435h-185z" />
<glyph unicode="&#x201c;" horiz-adv-x="780" d="M50 995l150 435h185l-150 -435h-185zM420 995l150 435h185l-150 -435h-185z" />
<glyph unicode="&#x201d;" horiz-adv-x="780" d="M50 995l150 435h185l-150 -435h-185zM420 995l150 435h185l-150 -435h-185z" />
<glyph unicode="&#x2022;" horiz-adv-x="630" d="M100 725q0 215 215 215t215 -215t-215 -215t-215 215z" />
<glyph unicode="&#x2026;" horiz-adv-x="1185" d="M100 0v185h185v-185h-185zM500 0v185h185v-185h-185zM900 0v185h185v-185h-185z" />
<glyph unicode="&#x202f;" horiz-adv-x="296" />
<glyph unicode="&#x205f;" horiz-adv-x="370" />
<glyph unicode="&#x20ac;" horiz-adv-x="1385" d="M100 735q0 705 750 705q215 0 400 -60v-160q-185 70 -380 70q-498 0 -585 -348h773v-150h-793v-110h793v-150h-773q77 -392 585 -392q195 0 380 70v-160q-185 -60 -400 -60q-750 0 -750 745z" />
<glyph unicode="&#x2122;" horiz-adv-x="1606" d="M150 1359v71h511v-71h-212v-602h-87v602h-212zM750 757v673h110l248 -561l242 561h106v-673h-78v543l-239 -543h-69l-243 543v-543h-77z" />
<glyph unicode="&#xe000;" d="M0 1050h1050v-1050h-1050v1050z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,58 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Font Face Demo</title>
<link rel="stylesheet" href="stylesheet.css" type="text/css" charset="utf-8">
<style type="text/css" media="screen">
h1.fontface {font: 60px/68px 'SansationRegular', Arial, sans-serif;letter-spacing: 0;}
p.style1 {font: 18px/27px 'SansationRegular', Arial, sans-serif;}
p.style2 {font: 18px/27px 'SansationLight', Arial, sans-serif;}
p.style3 {font: 18px/27px 'SansationBold', Arial, sans-serif;}
p.style4 {font: 18px/27px 'SansationLightLightItalic', Arial, sans-serif;}
p.style5 {font: 18px/27px 'SansationItalic', Arial, sans-serif;}
p.style6 {font: 18px/27px 'SansationBoldItalic', Arial, sans-serif;}
#container {
width: 800px;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<div id="container">
<h1 class="fontface">Font-face Demo for the Sansation Font</h1>
<p class="style1">Sansation Regular - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p class="style2">Sansation Light - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p class="style3">Sansation Bold - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p class="style4">Sansation Light Light Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p class="style5">Sansation Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p class="style6">Sansation Bold Italic - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
</body>
</html>

View File

@ -0,0 +1,76 @@
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on May 11, 2012 12:44:10 PM America/New_York */
@font-face {
font-family: 'SansationRegular';
src: url('Sansation_Regular-webfont.eot');
src: url('Sansation_Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Regular-webfont.woff') format('woff'),
url('Sansation_Regular-webfont.ttf') format('truetype'),
url('Sansation_Regular-webfont.svg#SansationRegular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SansationLight';
src: url('Sansation_Light-webfont.eot');
src: url('Sansation_Light-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Light-webfont.woff') format('woff'),
url('Sansation_Light-webfont.ttf') format('truetype'),
url('Sansation_Light-webfont.svg#SansationLight') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SansationBold';
src: url('Sansation_Bold-webfont.eot');
src: url('Sansation_Bold-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Bold-webfont.woff') format('woff'),
url('Sansation_Bold-webfont.ttf') format('truetype'),
url('Sansation_Bold-webfont.svg#SansationBold') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SansationLightLightItalic';
src: url('Sansation_Light_Italic-webfont.eot');
src: url('Sansation_Light_Italic-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Light_Italic-webfont.woff') format('woff'),
url('Sansation_Light_Italic-webfont.ttf') format('truetype'),
url('Sansation_Light_Italic-webfont.svg#SansationLightLightItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SansationItalic';
src: url('Sansation_Italic-webfont.eot');
src: url('Sansation_Italic-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Italic-webfont.woff') format('woff'),
url('Sansation_Italic-webfont.ttf') format('truetype'),
url('Sansation_Italic-webfont.svg#SansationItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'SansationBoldItalic';
src: url('Sansation_Bold_Italic-webfont.eot');
src: url('Sansation_Bold_Italic-webfont.eot?#iefix') format('embedded-opentype'),
url('Sansation_Bold_Italic-webfont.woff') format('woff'),
url('Sansation_Bold_Italic-webfont.ttf') format('truetype'),
url('Sansation_Bold_Italic-webfont.svg#SansationBoldItalic') format('svg');
font-weight: normal;
font-style: normal;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
www/assets/map/shadow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

496
www/assets/styles.css Executable file
View File

@ -0,0 +1,496 @@
* {
-webkit-touch-callout: none;
-webkit-user-select: none;
}
input,
textarea {
-webkit-touch-callout: auto;
-webkit-user-select: auto;
}
body {
position:absolute;
top:0px;
bottom:0px;
left:0px;
right:0px;
overflow: hidden;
padding: 0px;
margin: 0px;
background-color:#555;
}
* {
font-family:'SansationRegular', Arial, sans-serif;
letter-spacing: 0;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.subtext {
font-size:0.85em;
font-color: #888;
}
.data-list {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
overflow: hidden;
position:relative;
background-color: #EDEDED;
min-height:100%;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
.data-list ul,
.data-list li {
padding:0;
margin:0;
border:none;
}
.data-list ul {
display:block;
width:100%;
width:100%;
max-width:100%;
}
.data-list li {
cursor:pointer;
font-size:1em;
padding:1em;
padding-left:1em;
padding-right:1px;
display:block;
border-top:1px solid #fff;
border-bottom:1px solid #CCC;
background-image:url('graphics/more_disclosure.png');
background-position:right center;
background-repeat:no-repeat;
}
.listSelected {
color:#333;
border-top:1px solid #094C99;
background-color: #D9D900;
}
/*ViewNavigator Styles*/
.viewNavigator_header {
background:#444;
color:#444;
}
.viewNavigator_header_title {
color:#white;
font-size:1.5em;
max-width:65%;
}
.viewNavigator_backButton {
position:absolute;
top:5px;
left:5px;
width:40px;
color: rgba(0,0,0,0);
height:35px;
box-shadow: 0 0 0 0;
background: #DEDEDE;
border:1px solid #999;
padding:0px;
border-radius:0px;
background-image:url('graphics/back_arrow.png');
background-position: 3px center;
background-repeat:no-repeat;
}
@media only screen and (min-width:760px) {
.viewNavigator_backButton {
text-align:right;
vertical-align:middle;
padding-right:10px;
padding-left:50px;
padding-top:9px;
height:26px;
color: #444;
}
}
.viewNavigator_backButton:active {
background-color: #D9D900;
}
.viewNavigator_content {
border-top:1px solid #999;
background:#999;
color:#444;
}
.viewNavigator_contentHolder {
color:#444;
background:#999;
border-left:1px solid #999;
border-right:1px solid #999;
}
.viewNavigator_contentHolder > div:first-child {
min-height:100%;
background:#EDEDED;
/*background-image:url('graphics/wheat_bg.png');
background-position: top left;
background-repeat:repeat;*/
border-bottom:1px solid #444;
border-top:1px solid #444;
}
/*APPLICATION VIEWS*/
.right {
position:absolute;
right:0.75em;
top:0.5em;
}
.padded {
padding:1em;
}
.button {
padding:.5em;
cursor:pointer;
border:1px solid #999;
background-color: #AAA;
color: white;
text-decoration:none;
}
.button:active {
background-color: #D9D900;
}
.heading {
background-color: #fff;
color:#444;
border-bottom:1px solid #999;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
-webkit-transform:translate3d(0,0,0);
}
.warning {
background-color: #F2DEDE;
color:#B94A48;
border:1px solid #EED3D7;
}
#defaultView {
background-image:url('graphics/wheat_bg_nocolor.png');
background-position: bottom center;
background-repeat:no-repeat;
}
@media only screen and (min-width:760px) {
#defaultView {
background-image:url('graphics/wheat_bg.png');
}
}
#aboutView h2,
#defaultView h2 {
display:block;
padding:0em;
text-align:center;
}
#aboutView div,
#defaultView div {
display:block;
padding:1em;
padding-top:0em;
}
#defaultView a {
height:100%;
display:block;
border:1px solid #999;
padding:1.25em;
text-decoration: none;
color:#444;
font-size:1em;
background:rgba(230,230,230,0.85);
}
#defaultView a:active {
background-color:#D9D900;
}
#defaultView #nearMe {
padding-left:75px;
background-image:url('graphics/map_marker.png');
background-position: 15px center;
background-repeat:no-repeat;
}
#defaultView #search {
padding-left:75px;
background-image:url('graphics/search.png');
background-position: 5px center;
background-repeat:no-repeat;
}
#defaultView #about {
padding-left:75px;
background-image:url('graphics/info.png');
background-position: 10px center;
background-repeat:no-repeat;
}
#findMarketsNearMeView {
}
#aboutView {
padding:1em;
padding-top:0em;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
}
#searchView {
padding:1.25em;
}
.leaflet-popup-content {
font-size:1em;
margin:05.em;
text-align:center;
}
.leaflet-popup-content a {
background:none;
border:none;
text-align:center;
}
#marketDetailsView {
padding:1.0em;
}
#marketDetailsView h2 {
padding:0em;
margin:0em;
}
.paragraph {
margin:0px;
margin-bottom:1em;
border-top:1px solid #CCC;
padding-top:1em;
}
.paragraph_noborder {
margin:0px;
margin-bottom:1em;
border: none;
padding-top:1em;
}
.amenities {
min-height:30px;
font-size: 1.25em;
padding-top:0.25em;
padding-left:62px;
background-repeat:no-repeat;
}
#credit_cards {
background-image:url('graphics/credit_card.png');
background-position: 10px center;
}
#wic_accepted {
background-image:url('graphics/family.png');
background-position: 15px center;
}
#senior {
background-image:url('graphics/senior.png');
background-position: 24px center;
}
#snap {
background-image:url('graphics/snap.png');
background-position: 20px center;
}
#bakedgoods {
background-image:url('graphics/bread.png');
background-position: 10px center;
}
#cheese {
background-image:url('graphics/cheese.png');
background-position: 7px center;
}
#arts {
background-image:url('graphics/arts.png');
background-position: 12px center;
}
#flowers {
background-image:url('graphics/flower.png');
background-position: 15px center;
}
#seafood {
background-image:url('graphics/fish.png');
background-position: 7px center;
}
#fruit {
background-image:url('graphics/fruit.png');
background-position: 15px center;
}
#herbs {
background-image:url('graphics/herb.png');
background-position: 15px center;
}
#vegetables {
background-image:url('graphics/vegetables.png');
background-position: 16px center;
}
#honey {
background-image:url('graphics/honey.png');
background-position: 17px center;
}
#jams {
background-image:url('graphics/jams.png');
background-position: 17px center;
}
#maple {
background-image:url('graphics/maple.png');
background-position: 17px center;
}
#nuts {
background-image:url('graphics/nuts.png');
background-position: 15px center;
}
#meat {
background-image:url('graphics/meat.png');
background-position: 10px center;
}
#plants {
background-image:url('graphics/plants.png');
background-position: 18px center;
}
#prepared {
background-image:url('graphics/prepared.png');
background-position: 15px center;
}
#soap {
background-image:url('graphics/soap.png');
background-position: 10px center;
}
#marketMapView {
width:100%;
height:100%;
position:absolute;
}
#marketMapView #marketMapContainer{
top:0px;
bottom:0px;
left:0px;
right:0px;
position:absolute;
}
#marketMapView #footer{
top:0px;
height:18px;
right:0px;
position:absolute;
padding:1em;
padding-right:0.5em;
z-index:99;
}
#search_state {
font-size:1.25em;
width:100%;
}
#search_searchPhrase {
width:96%;
font-size:1.25em;
}
#searchButton {
padding-left:2em;
padding-right:2em;
}
input[type='checkbox'] {
width:2em;
height:2em;
}
label {
font-size: .8em;
padding:.25em;
}
.searchfilter{
padding:.25em;
}
.searchfilter .amenities {
font-size: 1em;
}
#geoError{
padding:1.25em;
}
#geoError div {
padding:1.25em;
padding-top:0px;
}

1
www/data.js Normal file

File diff suppressed because one or more lines are too long

38
www/index.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<title>Fresh Food Finder</title>
<meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no;" />
<script src="js/libs/jquery-1.7.1.js"></script>
<script src="js/libs/jquery.animate-enhanced.js"></script>
<script src="js/libs/iscroll.js"></script>
<script src="js/libs/noClickDelay.js"></script>
<script src="js/libs/mustache.js"></script>
<link rel="stylesheet" href="js/libs/leaflet/leaflet.css" />
<!--[if lte IE 8]>
<link rel="stylesheet" href="js/libs/leaflet/leaflet.ie.css" />
<![endif]-->
<script src="js/libs/leaflet/leaflet.js"></script>
<link rel="stylesheet" href="js/viewnavigator/viewnavigator.css" type="text/css" />
<script src="js/viewnavigator/viewnavigator.js"></script>
<link rel="stylesheet" href="js/libs/css/activityIndicator.css" type="text/css" />
<script src="cordova-1.7.0rc1.js"></script>
<script src="js/viewAssembler.js"></script>
<script src="js/application.js"></script>
<link rel="stylesheet" href="assets/fonts/sansation/stylesheet.css" type="text/css" charset="utf-8">
<link rel="stylesheet" href="assets/styles.css" type="text/css" charset="utf-8">
</head>
<body></body>
</html>

428
www/js/application.js Normal file
View File

@ -0,0 +1,428 @@
/*HTMLElement.prototype.originalRemoveEventListener
= HTMLElement.prototype.removeEventListener;
HTMLElement.prototype.removeEventListener = function(type, listener, useCapture)
{
console.log('remove: ' + type);
this.originalRemoveEventListener(type, listener, useCapture);
};
*/
var markets = [];
var viewAssembler = new ViewAssembler();
$(document).ready( function(){
loadTemplates( setupDefaultView );
} );
function setupDefaultView() {
var bodyView = viewAssembler.defaultView();
//Setup the default view
var defaultView = { title: "Welcome!",
view: bodyView,
};
//Setup the ViewNavigator
window.viewNavigator = new ViewNavigator( 'body' );
window.viewNavigator.pushView( defaultView );
$.getScript("data.js", scriptSuccess);
}
function onMapButtonClick( event ) {
var view = { title: "Map",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.mapView(),
scroll:false
};
window.viewNavigator.pushView( view );
event.stopPropagation();
return false;
}
function onSearchResultMapButtonClick( event ) {
var centerPoint = {x:0,y:0};
var len = 0;
for( var i = 0; i<window.filteredMarkesList.length; i++ ){
var _x = parseFloat(window.filteredMarkesList[i].x);
var _y = parseFloat(window.filteredMarkesList[i].y);
if ( !isNaN( _x ) && !isNaN( _y ) ) {
//console.log( i, len, _x, _y );
centerPoint.x += _x;
centerPoint.y += _y;
len ++;
}
}
//console.log( centerPoint.x, centerPoint.y );
centerPoint.x = centerPoint.x / len;
centerPoint.y = centerPoint.y / len;
//console.log( centerPoint.x, centerPoint.y );
centerPoint = new L.LatLng(centerPoint.y, centerPoint.x);
var view = { title: "Map",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.mapView(centerPoint),
scroll:false
};
window.viewNavigator.pushView( view );
event.stopPropagation();
return false;
}
function onAboutViewClick( event ) {
var view = { title: "About",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.aboutView()
};
window.viewNavigator.pushView( view );
event.stopPropagation();
return false;
}
function onSearchViewClick( event ) {
var view = { title: "List",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.searchView(),
};
window.viewNavigator.pushView( view );
event.stopPropagation();
return false;
}
function onNearbyViewClick( event ) {
var view = { title: "Nearby",
view: viewAssembler.findNearbyView()
};
window.viewNavigator.pushView( view );
//acquire location
navigator.geolocation.getCurrentPosition(onGeoSuccess, onGeoError, { maximumAge: 60000, timeout: 5000, enableHighAccuracy: true });
event.stopPropagation();
return false;
}
var onGeoSuccess = function(position) {
/* console.log('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n' +
'Altitude: ' + position.coords.altitude + '\n' +
'Accuracy: ' + position.coords.accuracy + '\n' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
'Heading: ' + position.coords.heading + '\n' +
'Speed: ' + position.coords.speed + '\n' +
'Timestamp: ' + new Date(position.timestamp) + '\n');
*/
var latitude = parseFloat( position.coords.latitude );
var longitude = parseFloat( position.coords.longitude );
//set a delay to allow transition to complete before requesting data
setTimeout( function () {
var filtered = filterMarketsByGeo( latitude, longitude );
var view = { title: "Nearby",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.findNearbyView()
};
view.view.children().remove();
view.view.append( viewAssembler.nearbyMarketsView( latitude, longitude, filtered ) );
window.viewNavigator.replaceView( view );
}, 600 );
};
// onError Callback receives a PositionError object
//
function onGeoError(error) {
/* alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
*/
//wait for transition complete
setTimeout( function() {
var view = { title: "Nearby",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.geoPermissionDenied()
};
window.viewNavigator.replaceView( view );
}, 500);
}
//find the all markets within 100 miles
function filterMarketsByGeo( latitude, longitude ) {
var result = [];
var startTime = new Date().getTime();
for ( var i =0; i < markets.length; i++ )
{
var lat1 = parseFloat(markets[i][9]);
var lon1 = parseFloat(markets[i][8]);
var lat2 = parseFloat(latitude);
var lon2 = parseFloat(longitude);
//console.log( lat1, lon1, lat2, lon2 );
var d = distance( lat1, lon1, lat2, lon2 );
if ( d < 100 ){
result.push( markets[i] );
}
}
//console.log( new Date().getTime() - startTime );
return result;
}
function distance( lat1, lon1, lat2, lon2 ) {
var R = 6371; // Radius of the earth in km
var dLat = toRad(lat2-lat1); // Javascript functions in radians
var dLon = toRad(lon2-lon1);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
var m = 6 / 1.609344; // Distance in miles
return d;
}
function toRad(degree)
{
rad = degree* Math.PI/ 180;
return rad;
}
function scriptSuccess(data, textStatus, jqXHR) {
for ( var i=0; i<markets.length; i++ ) {
markets[i].push( i.toString() );
}
//console.log( "scriptSuccess: " + markets.length );
}
function onNearbyListItemClick( event ) {
$( "li" ).removeClass( "listSelected" );
var target = $( event.target )
if (target.get(0).nodeName.toUpperCase() != "LI") {
target=target.parent();
}
target.addClass( "listSelected" );
var index = target.attr( "index" );
index = parseInt( index );
showMarketDetails( markets[index] );
}
function showMarketDetailsFromMapClick( index ) {
setTimeout( function() {
showMarketDetails( markets[index] );
}, 50 );
}
function showMarketDetails( item ) {
var market = arrayToMarketObject(item);
var view = { title: "Market Detail",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.marketDetailsView( market )
};
window.viewNavigator.pushView( view );
}
function onSearchButtonClick( event ) {
var criteria = {};
var fields = ["state", "searchPhrase",
"credit", "wiccash", "sfmnp", "snap",
"bakedGoods", "cheese", "crafts",
"flowers", "seafood", "fruit", "herbs", "vegetables", "honey", "jams", "maple",
"meat", "nuts", "plants", "soap"];
for ( var index in fields ) {
var field = fields[ index ];
var $input = $("#search_" + field);
var value;
if ( index <= 1 ){
value = $input.val();
if ( value != undefined && value.length > 0 ) {
criteria[field] = value;
}
}
else {
value = $input.is(":checked");
if ( value == true ) {
criteria[field] = value;
}
}
}
var markets = filterMarketsBySearchCriteria( criteria );
var view = { title: "Search Results",
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.searchResultsView( markets, criteria )
};
window.viewNavigator.pushView( view );
}
function filterMarketsBySearchCriteria( criteria ) {
var result = [];
var startTime = new Date().getTime();
for ( var i =0; i < markets.length; i++ )
{
if ( marketRowMatchesCriteria( markets[i], criteria ) ) {
result.push( markets[i] );
}
}
//console.log( new Date().getTime() - startTime );
return result;
}
function marketRowMatchesCriteria( row, criteria ) {
//state
if ( row[6] != criteria.state ) { return false; }
if ( criteria.credit == true ) { if ( row[11] != "Y" ) return false; };
if ( criteria.wic == true ) { if ( row[12] != "Y" ) return false; };
if ( criteria.wiccash == true ) { if ( row[13] != "Y" ) return false; };
if ( criteria.sfmnp == true ) { if ( row[14] != "Y" ) return false; };
if ( criteria.snap == true ) { if ( row[15] != "Y" ) return false; };
if ( criteria.bakedGoods == true ) { if ( row[16] != "Y" ) return false; };
if ( criteria.cheese == true ) { if ( row[17] != "Y" ) return false; };
if ( criteria.crafts == true ) { if ( row[18] != "Y" ) return false; };
if ( criteria.flowers == true ) { if ( row[19] != "Y" ) return false; };
if ( criteria.seafood == true ) { if ( row[20] != "Y" ) return false; };
if ( criteria.fruit == true ) { if ( row[21] != "Y" ) return false; };
if ( criteria.herbs == true ) { if ( row[22] != "Y" ) return false; };
if ( criteria.vegetables == true ) { if ( row[23] != "Y" ) return false; };
if ( criteria.honey == true ) { if ( row[24] != "Y" ) return false; };
if ( criteria.jams == true ) { if ( row[25] != "Y" ) return false; };
if ( criteria.maple == true ) { if ( row[26] != "Y" ) return false; };
if ( criteria.meat == true ) { if ( row[27] != "Y" ) return false; };
if ( criteria.nuts == true ) { if ( row[28] != "Y" ) return false; };
if ( criteria.plants == true ) { if ( row[29] != "Y" ) return false; };
if ( criteria.soap == true ) { if ( row[31] != "Y" ) return false; };
//searchString last
if ( criteria.searchPhrase != undefined && criteria.searchPhrase.length > 0 ) {
var tokens = criteria.searchPhrase.split(" ");
var result = true;
for ( var i=0; i<tokens.length; i++) {
if (!result) {
break;
}
var regexp = new RegExp(tokens[i], "i");
var iterationResult = false;
if ( regexp.test( row[1] ) ) { iterationResult = true; };
if ( regexp.test( row[4] ) ) { iterationResult = true; };
if ( regexp.test( row[5] ) ) { iterationResult = true; };
if ( regexp.test( row[7] ) ) { iterationResult = true; };
if ( regexp.test( row[10] ) ) { iterationResult = true; };
result = iterationResult && result;
}
return result;
}
return true;
}
function criteriaToString( criteria ) {
var result = criteria.state;
if (criteria.searchPhrase) {
result += ", '" + criteria.searchPhrase + "'";
}
return result;
}
function arrayToMarketObject( arr ) {
var fields=["fmid","marketName","website","street","city","county","state","zip","x","y","location","credit","wic","wiccash","sfmnp","snap","bakedgoods","cheese","crafts","flowers","seafood","fruit","herbs","vegetables","honey","jams","maple","meat","nuts","plants","prepared","soap","index"];
var result = {};
for ( var index in arr ) {
if ( index <= 10 || index >= 32 ) {
result[ fields[index] ] = arr[ index ];
}
else {
result[ fields[index] ] = (arr[ index ] == "Y");
}
}
result.paymentDetail = result.credit || result.wic || result.wicash || result.sfmnp || result.snap;
result.productDetail = result.bakedgoods || result.cheese || result.crafts || result.flowers || result.seafood || result.fruit || result.herbs || result.vegetables || result.honey || result.jams || result.maple || result.meat || result.nuts || result.plants || result.prepared || result.soap;
return result;
}
function openExternalURL( url ) {
var result=confirm("You will leave the Farmers Market Finder App. Continue?");
if (result==true) {
window.open( url, '_blank' );
}
}
function viewInMap( index ) {
var market = arrayToMarketObject( markets[index] );
var view = { title: market.marketName,
backLabel: (isTablet() ? "Back" : " "),
view: viewAssembler.marketMapView( market ),
scroll:false
};
window.viewNavigator.pushView( view );
}
function getDirections( index ) {
var market = arrayToMarketObject( markets[index] );
var result=confirm("You will leave the Farmers Market Finder App. Continue?");
if (result==true) {
var win = navigator.userAgent.search( "Windows Phone" ) >= 0;
var android = navigator.userAgent.search( "Android" ) >= 0;
/*if (win) {
window.open( ('maps:' + market.y + ',' + market.x), '_blank' );
}
else
*/
if (android) {
navigator.app.loadUrl( 'http://maps.google.com/maps?q=' + market.y + ',' + market.x);
}
else {
window.open( ('http://maps.google.com/maps?q=' + market.y + ',' + market.x), '_blank' );
}
}
}
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
document.addEventListener("backbutton", onBackKey, false);
}
function onBackKey( event ) {
if ( window.viewNavigator.history.length > 1 ){
event.preventDefault();
window.viewNavigator.popView();
return false;
}
navigator.app.exitApp();
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);

487
www/js/libs/JSON2.js Normal file
View File

@ -0,0 +1,487 @@
/*
json2.js
2011-10-19
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This code should be minified before deployment.
See http://javascript.crockford.com/jsmin.html
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
NOT CONTROL.
This file creates a global JSON object containing two methods: stringify
and parse.
JSON.stringify(value, replacer, space)
value any JavaScript value, usually an object or array.
replacer an optional parameter that determines how object
values are stringified for objects. It can be a
function or an array of strings.
space an optional parameter that specifies the indentation
of nested structures. If it is omitted, the text will
be packed without extra whitespace. If it is a number,
it will specify the number of spaces to indent at each
level. If it is a string (such as '\t' or '&nbsp;'),
it contains the characters used to indent at each level.
This method produces a JSON text from a JavaScript value.
When an object value is found, if the object contains a toJSON
method, its toJSON method will be called and the result will be
stringified. A toJSON method does not serialize: it returns the
value represented by the name/value pair that should be serialized,
or undefined if nothing should be serialized. The toJSON method
will be passed the key associated with the value, and this will be
bound to the value
For example, this would serialize Dates as ISO strings.
Date.prototype.toJSON = function (key) {
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
You can provide an optional replacer method. It will be passed the
key and value of each member, with this bound to the containing
object. The value that is returned from your method will be
serialized. If your method returns undefined, then the member will
be excluded from the serialization.
If the replacer parameter is an array of strings, then it will be
used to select the members to be serialized. It filters the results
such that only members with keys listed in the replacer array are
stringified.
Values that do not have JSON representations, such as undefined or
functions, will not be serialized. Such values in objects will be
dropped; in arrays they will be replaced with null. You can use
a replacer function to replace those with JSON values.
JSON.stringify(undefined) returns undefined.
The optional space parameter produces a stringification of the
value that is filled with line breaks and indentation to make it
easier to read.
If the space parameter is a non-empty string, then that string will
be used for indentation. If the space parameter is a number, then
the indentation will be that many spaces.
Example:
text = JSON.stringify(['e', {pluribus: 'unum'}]);
// text is '["e",{"pluribus":"unum"}]'
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
text = JSON.stringify([new Date()], function (key, value) {
return this[key] instanceof Date ?
'Date(' + this[key] + ')' : value;
});
// text is '["Date(---current time---)"]'
JSON.parse(text, reviver)
This method parses a JSON text to produce an object or array.
It can throw a SyntaxError exception.
The optional reviver parameter is a function that can filter and
transform the results. It receives each of the keys and values,
and its return value is used instead of the original value.
If it returns what it received, then the structure is not modified.
If it returns undefined then the member is deleted.
Example:
// Parse the text. Values that look like ISO date strings will
// be converted to Date objects.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
});
myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
var d;
if (typeof value === 'string' &&
value.slice(0, 5) === 'Date(' &&
value.slice(-1) === ')') {
d = new Date(value.slice(5, -1));
if (d) {
return d;
}
}
return value;
});
This is a reference implementation. You are free to copy, modify, or
redistribute.
*/
/*jslint evil: true, regexp: true */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
lastIndex, length, parse, prototype, push, replace, slice, stringify,
test, toJSON, toString, valueOf
*/
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
var JSON;
if (!JSON) {
JSON = {};
}
(function () {
'use strict';
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
if (typeof Date.prototype.toJSON !== 'function') {
Date.prototype.toJSON = function (key) {
return isFinite(this.valueOf())
? this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z'
: null;
};
String.prototype.toJSON =
Number.prototype.toJSON =
Boolean.prototype.toJSON = function (key) {
return this.valueOf();
};
}
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap,
indent,
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
rep;
function quote(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string'
? c
: '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
function str(key, holder) {
// Produce a string from holder[key].
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case 'object':
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if (!value) {
return 'null';
}
// Make an array to hold the partial results of stringifying this object value.
gap += indent;
partial = [];
// Is the value an array?
if (Object.prototype.toString.apply(value) === '[object Array]') {
// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v = partial.length === 0
? '[]'
: gap
? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
: '[' + partial.join(',') + ']';
gap = mind;
return v;
}
// If the replacer is an array, use it to select the members to be stringified.
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
if (typeof rep[i] === 'string') {
k = rep[i];
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
} else {
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0
? '{}'
: gap
? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
: '{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
// If the JSON object does not yet have a stringify method, give it one.
if (typeof JSON.stringify !== 'function') {
JSON.stringify = function (value, replacer, space) {
// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.
var i;
gap = '';
indent = '';
// If the space parameter is a number, make an indent string containing that
// many spaces.
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
// If the space parameter is a string, it will be used as the indent string.
} else if (typeof space === 'string') {
indent = space;
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep = replacer;
if (replacer && typeof replacer !== 'function' &&
(typeof replacer !== 'object' ||
typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {'': value});
};
}
// If the JSON object does not yet have a parse method, give it one.
if (typeof JSON.parse !== 'function') {
JSON.parse = function (text, reviver) {
// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.
var j;
function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.
text = String(text);
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' +
('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
if (/^[\],:{}\s]*$/
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
return typeof reviver === 'function'
? walk({'': j}, '')
: j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw new SyntaxError('JSON.parse');
};
}
}());

File diff suppressed because one or more lines are too long

1078
www/js/libs/iscroll.js Executable file

File diff suppressed because it is too large Load Diff

9266
www/js/libs/jquery-1.7.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,779 @@
/*
jquery.animate-enhanced plugin v0.91
---
http://github.com/benbarnett/jQuery-Animate-Enhanced
http://benbarnett.net
@benpbarnett
---
Copyright (c) 2012 Ben Barnett
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
---
Extends jQuery.animate() to automatically use CSS3 transformations where applicable.
Tested with jQuery 1.3.2+
Supports -moz-transition, -webkit-transition, -o-transition, transition
Targetted properties (for now):
- left
- top
- opacity
- width
- height
Usage (exactly the same as it would be normally):
jQuery(element).animate({left: 200}, 500, function() {
// callback
});
Changelog:
0.91 (2/4/2012):
- Merge Pull Request #74 - Unit Management
0.90 (7/3/2012):
- Adding public $.toggleDisabledByDefault() feature to disable entire plugin by default (Issue #73)
0.89 (24/1/2012):
- Adding 'avoidCSSTransitions' property. Set to true to disable entire plugin. (Issue #47)
0.88 (24/1/2012):
- Fix Issue #67 for HighchartsJS compatibility
0.87 (24/1/2012):
- Fix Issue #66 selfCSSData.original is undefined
0.86 (9/1/2012):
- Strict JS fix for undefined variable
0.85 (20/12/2011):
- Merge Pull request #57 from Kronuz
- Codebase cleaned and now passes jshint.
- Fixed a few bugs (it now saves and restores the original css transition properties).
- fadeOut() is fixed, it wasn't restoring the opacity after hiding it.
0.80 (13/09/2011):
- Issue #28 - Report $(el).is(':animated') fix
0.79 (06/09/2011):
- Issue #42 - Right negative position animation: please see issue notes on Github.
0.78 (02/09/2011):
- Issue #18 - jQuery/$ reference joys
0.77 (02/09/2011):
- Adding feature on Github issue #44 - Use 3D Transitions by default
0.76 (28/06/2011):
- Fixing issue #37 - fixed stop() method (with gotoEnd == false)
0.75 (15/06/2011):
- Fixing issue #35 to pass actual object back as context for callback
0.74 (28/05/2011):
- Fixing issue #29 to play nice with 1.6+
0.73 (05/03/2011):
- Merged Pull Request #26: Fixed issue with fadeOut() / "hide" shortcut
0.72 (05/03/2011):
- Merged Pull Request #23: Added Penner equation approximations from Matthew Lein's Ceaser, and added failsafe fallbacks
0.71 (05/03/2011):
- Merged Pull Request #24: Changes translation object to integers instead of strings to fix relative values bug with leaveTransforms = true
0.70 (17/03/2011):
- Merged Pull Request from amlw-nyt to add bottom/right handling
0.68 (15/02/2011):
- width/height fixes & queue issues resolved.
0.67 (15/02/2011):
- Code cleanups & file size improvements for compression.
0.66 (15/02/2011):
- Zero second fadeOut(), fadeIn() fixes
0.65 (01/02/2011):
- Callbacks with queue() support refactored to support element arrays
0.64 (27/01/2011):
- BUGFIX #13: .slideUp(), .slideToggle(), .slideDown() bugfixes in Webkit
0.63 (12/01/2011):
- BUGFIX #11: callbacks not firing when new value == old value
0.62 (10/01/2011):
- BUGFIX #11: queue is not a function issue fixed
0.61 (10/01/2011):
- BUGFIX #10: Negative positions converting to positive
0.60 (06/01/2011):
- Animate function rewrite in accordance with new queue system
- BUGFIX #8: Left/top position values always assumed relative rather than absolute
- BUGFIX #9: animation as last item in a chain - the chain is ignored?
- BUGFIX: width/height CSS3 transformation with left/top working
0.55 (22/12/2010):
- isEmptyObject function for <jQuery 1.4 (requires 1.3.2)
0.54a (22/12/2010):
- License changed to MIT (http://www.opensource.org/licenses/mit-license.php)
0.54 (22/12/2010):
- Removed silly check for 'jQuery UI' bailouts. Sorry.
- Scoping issues fixed - Issue #4: $(this) should give you a reference to the selector being animated.. per jquery's core animation funciton.
0.53 (17/11/2010):
- New $.translate() method to easily calculate current transformed translation
- Repeater callback bug fix for leaveTransforms:true (was constantly appending properties)
0.52 (16/11/2010):
- leaveTransforms: true bug fixes
- 'Applying' user callback function to retain 'this' context
0.51 (08/11/2010):
- Bailing out with jQuery UI. This is only so the plugin plays nice with others and is TEMPORARY.
0.50 (08/11/2010):
- Support for $.fn.stop()
- Fewer jQuery.fn entries to preserve namespace
- All references $ converted to jQuery
- jsDoc Toolkit style commenting for docs (coming soon)
0.49 (19/10/2010):
- Handling of 'undefined' errors for secondary CSS objects
- Support to enhance 'width' and 'height' properties (except shortcuts involving jQuery.fx.step, e.g slideToggle)
- Bugfix: Positioning when using avoidTransforms: true (thanks Ralf Santbergen reports)
- Bugfix: Callbacks and Scope issues
0.48 (13/10/2010):
- Checks for 3d support before applying
0.47 (12/10/2010);
- Compatible with .fadeIn(), .fadeOut()
- Use shortcuts, no duration for jQuery default or "fast" and "slow"
- Clean up callback event listeners on complete (preventing multiple callbacks)
0.46 (07/10/2010);
- Compatible with .slideUp(), .slideDown(), .slideToggle()
0.45 (06/10/2010):
- 'Zero' position bug fix (was originally translating by 0 zero pixels, i.e. no movement)
0.4 (05/10/2010):
- Iterate over multiple elements and store transforms in jQuery.data per element
- Include support for relative values (+= / -=)
- Better unit sanitization
- Performance tweaks
- Fix for optional callback function (was required)
- Applies data[translateX] and data[translateY] to elements for easy access
- Added 'easeInOutQuint' easing function for CSS transitions (requires jQuery UI for JS anims)
- Less need for leaveTransforms = true due to better position detections
*/
(function(jQuery, originalAnimateMethod, originalStopMethod) {
// ----------
// Plugin variables
// ----------
var cssTransitionProperties = ['top', 'right', 'bottom', 'left', 'opacity', 'height', 'width'],
directions = ['top', 'right', 'bottom', 'left'],
cssPrefixes = ['', '-webkit-', '-moz-', '-o-'],
pluginOptions = ['avoidTransforms', 'useTranslate3d', 'leaveTransforms'],
rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
rupper = /([A-Z])/g,
defaultEnhanceData = {
secondary: {},
meta: {
top : 0,
right : 0,
bottom : 0,
left : 0
}
},
valUnit = 'px',
DATA_KEY = 'jQe',
CUBIC_BEZIER_OPEN = 'cubic-bezier(',
CUBIC_BEZIER_CLOSE = ')',
originalAnimatedFilter = null,
pluginDisabledDefault = false;
// ----------
// Check if this browser supports CSS3 transitions
// ----------
var thisBody = document.body || document.documentElement,
thisStyle = thisBody.style,
transitionEndEvent = (thisStyle.WebkitTransition !== undefined) ? 'webkitTransitionEnd' : (thisStyle.OTransition !== undefined) ? 'oTransitionEnd' : 'transitionend',
cssTransitionsSupported = thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.OTransition !== undefined || thisStyle.transition !== undefined,
has3D = ('WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix()),
use3DByDefault = has3D;
// ----------
// Extended :animated filter
// ----------
if ( jQuery.expr && jQuery.expr.filters ) {
originalAnimatedFilter = jQuery.expr.filters.animated;
jQuery.expr.filters.animated = function(elem) {
return jQuery(elem).data('events') && jQuery(elem).data('events')[transitionEndEvent] ? true : originalAnimatedFilter.call(this, elem);
};
}
/**
@private
@name _getUnit
@function
@description Return unit value ("px", "%", "em" for re-use correct one when translating)
@param {variant} [val] Target value
*/
function _getUnit(val){
return val.match(/\D+$/);
}
/**
@private
@name _interpretValue
@function
@description Interpret value ("px", "+=" and "-=" sanitisation)
@param {object} [element] The Element for current CSS analysis
@param {variant} [val] Target value
@param {string} [prop] The property we're looking at
@param {boolean} [isTransform] Is this a CSS3 transform?
*/
function _interpretValue(e, val, prop, isTransform) {
// this is a nasty fix, but we check for prop == 'd' to see if we're dealing with SVG, and abort
if (prop == "d") return;
var parts = rfxnum.exec(val),
start = e.css(prop) === 'auto' ? 0 : e.css(prop),
cleanCSSStart = typeof start == 'string' ? _cleanValue(start) : start,
cleanTarget = typeof val == 'string' ? _cleanValue(val) : val,
cleanStart = isTransform === true ? 0 : cleanCSSStart,
hidden = e.is(':hidden'),
translation = e.translation();
if (prop == 'left') cleanStart = parseInt(cleanCSSStart, 10) + translation.x;
if (prop == 'right') cleanStart = parseInt(cleanCSSStart, 10) + translation.x;
if (prop == 'top') cleanStart = parseInt(cleanCSSStart, 10) + translation.y;
if (prop == 'bottom') cleanStart = parseInt(cleanCSSStart, 10) + translation.y;
// deal with shortcuts
if (!parts && val == 'show') {
cleanStart = 1;
if (hidden) e.css({'display':'block', 'opacity': 0});
} else if (!parts && val == "hide") {
cleanStart = 0;
}
if (parts) {
var end = parseFloat(parts[2]);
// If a +=/-= token was provided, we're doing a relative animation
if (parts[1]) end = ((parts[1] === '-=' ? -1 : 1) * end) + parseInt(cleanStart, 10);
return end;
} else {
return cleanStart;
}
}
/**
@private
@name _getTranslation
@function
@description Make a translate or translate3d string
@param {integer} [x]
@param {integer} [y]
@param {boolean} [use3D] Use translate3d if available?
*/
function _getTranslation(x, y, use3D) {
return ((use3D === true || (use3DByDefault === true && use3D !== false)) && has3D) ? 'translate3d(' + x + 'px, ' + y + 'px, 0)' : 'translate(' + x + 'px,' + y + 'px)';
}
/**
@private
@name _applyCSSTransition
@function
@description Build up the CSS object
@param {object} [e] Element
@param {string} [property] Property we're dealing with
@param {integer} [duration] Duration
@param {string} [easing] Easing function
@param {variant} [value] String/integer for target value
@param {boolean} [isTransform] Is this a CSS transformation?
@param {boolean} [isTranslatable] Is this a CSS translation?
@param {boolean} [use3D] Use translate3d if available?
*/
function _applyCSSTransition(e, property, duration, easing, value, isTransform, isTranslatable, use3D) {
var eCSSData = e.data(DATA_KEY),
enhanceData = eCSSData && !_isEmptyObject(eCSSData) ? eCSSData : jQuery.extend(true, {}, defaultEnhanceData),
offsetPosition = value,
isDirection = jQuery.inArray(property, directions) > -1;
if (isDirection) {
var meta = enhanceData.meta,
cleanPropertyValue = _cleanValue(e.css(property)) || 0,
stashedProperty = property + '_o';
offsetPosition = value - cleanPropertyValue;
meta[property] = offsetPosition;
meta[stashedProperty] = e.css(property) == 'auto' ? 0 + offsetPosition : cleanPropertyValue + offsetPosition || 0;
enhanceData.meta = meta;
// fix 0 issue (transition by 0 = nothing)
if (isTranslatable && offsetPosition === 0) {
offsetPosition = 0 - meta[stashedProperty];
meta[property] = offsetPosition;
meta[stashedProperty] = 0;
}
}
// reapply data and return
return e.data(DATA_KEY, _applyCSSWithPrefix(e, enhanceData, property, duration, easing, offsetPosition, isTransform, isTranslatable, use3D));
}
/**
@private
@name _applyCSSWithPrefix
@function
@description Helper function to build up CSS properties using the various prefixes
@param {object} [cssProperties] Current CSS object to merge with
@param {string} [property]
@param {integer} [duration]
@param {string} [easing]
@param {variant} [value]
@param {boolean} [isTransform] Is this a CSS transformation?
@param {boolean} [isTranslatable] Is this a CSS translation?
@param {boolean} [use3D] Use translate3d if available?
*/
function _applyCSSWithPrefix(e, cssProperties, property, duration, easing, value, isTransform, isTranslatable, use3D) {
var saveOriginal = false,
transform = isTransform === true && isTranslatable === true;
cssProperties = cssProperties || {};
if (!cssProperties.original) {
cssProperties.original = {};
saveOriginal = true;
}
cssProperties.properties = cssProperties.properties || {};
cssProperties.secondary = cssProperties.secondary || {};
var meta = cssProperties.meta,
original = cssProperties.original,
properties = cssProperties.properties,
secondary = cssProperties.secondary;
for (var i = cssPrefixes.length - 1; i >= 0; i--) {
var tp = cssPrefixes[i] + 'transition-property',
td = cssPrefixes[i] + 'transition-duration',
tf = cssPrefixes[i] + 'transition-timing-function';
property = (transform ? cssPrefixes[i] + 'transform' : property);
if (saveOriginal) {
original[tp] = e.css(tp) || '';
original[td] = e.css(td) || '';
original[tf] = e.css(tf) || '';
}
secondary[property] = transform ? _getTranslation(meta.left, meta.top, use3D) : value;
properties[tp] = (properties[tp] ? properties[tp] + ',' : '') + property;
properties[td] = (properties[td] ? properties[td] + ',' : '') + duration + 'ms';
properties[tf] = (properties[tf] ? properties[tf] + ',' : '') + easing;
}
return cssProperties;
}
/**
@private
@name _isBoxShortcut
@function
@description Shortcut to detect if we need to step away from slideToggle, CSS accelerated transitions (to come later with fx.step support)
@param {object} [prop]
*/
function _isBoxShortcut(prop) {
for (var property in prop) {
if ((property == 'width' || property == 'height') && (prop[property] == 'show' || prop[property] == 'hide' || prop[property] == 'toggle')) {
return true;
}
}
return false;
}
/**
@private
@name _isEmptyObject
@function
@description Check if object is empty (<1.4 compatibility)
@param {object} [obj]
*/
function _isEmptyObject(obj) {
for (var i in obj) {
return false;
}
return true;
}
/**
@private
@name _cleanValue
@function
@description Remove 'px' and other artifacts
@param {variant} [val]
*/
function _cleanValue(val) {
valUnit = _getUnit(val);
return parseFloat(val.replace(/px/i, ''));
}
/**
@private
@name _appropriateProperty
@function
@description Function to check if property should be handled by plugin
@param {string} [prop]
@param {variant} [value]
*/
function _appropriateProperty(prop, value, element) {
var is = jQuery.inArray(prop, cssTransitionProperties) > -1;
if ((prop == 'width' || prop == 'height') && (value === parseFloat(element.css(prop)))) is = false;
return is;
}
jQuery.extend({
/**
@public
@name toggle3DByDefault
@function
@description Toggle for plugin settings to automatically use translate3d (where available). Usage: $.toggle3DByDefault
*/
toggle3DByDefault: function() {
return use3DByDefault = !use3DByDefault;
},
/**
@public
@name toggleEnabledByDefault
@function
@description Toggle the plugin to be disabled by default (can be overridden per animation with avoidCSSTransitions)
*/
toggleDisabledByDefault: function() {
return pluginDisabledDefault = !pluginDisabledDefault;
}
});
/**
@public
@name translation
@function
@description Get current X and Y translations
*/
jQuery.fn.translation = function() {
if (!this[0]) {
return null;
}
var elem = this[0],
cStyle = window.getComputedStyle(elem, null),
translation = {
x: 0,
y: 0
};
if (cStyle) {
for (var i = cssPrefixes.length - 1; i >= 0; i--) {
var transform = cStyle.getPropertyValue(cssPrefixes[i] + 'transform');
if (transform && (/matrix/i).test(transform)) {
var explodedMatrix = transform.replace(/^matrix\(/i, '').split(/, |\)$/g);
translation = {
x: parseInt(explodedMatrix[4], 10),
y: parseInt(explodedMatrix[5], 10)
};
break;
}
}
}
return translation;
};
/**
@public
@name jQuery.fn.animate
@function
@description The enhanced jQuery.animate function
@param {string} [property]
@param {string} [speed]
@param {string} [easing]
@param {function} [callback]
*/
jQuery.fn.animate = function(prop, speed, easing, callback) {
prop = prop || {};
var isTranslatable = !(typeof prop['bottom'] !== 'undefined' || typeof prop['right'] !== 'undefined'),
optall = jQuery.speed(speed, easing, callback),
elements = this,
callbackQueue = 0,
propertyCallback = function() {
callbackQueue--;
if (callbackQueue === 0) {
// we're done, trigger the user callback
if (typeof optall.complete === 'function') {
optall.complete.apply(elements[0], arguments);
}
}
},
bypassPlugin = (typeof prop['avoidCSSTransitions'] !== 'undefined') ? prop['avoidCSSTransitions'] : pluginDisabledDefault;
if (bypassPlugin === true || !cssTransitionsSupported || _isEmptyObject(prop) || _isBoxShortcut(prop) || optall.duration <= 0 || (jQuery.fn.animate.defaults.avoidTransforms === true && prop['avoidTransforms'] !== false)) {
return originalAnimateMethod.apply(this, arguments);
}
return this[ optall.queue === true ? 'queue' : 'each' ](function() {
var self = jQuery(this),
opt = jQuery.extend({}, optall),
cssCallback = function() {
var selfCSSData = self.data(DATA_KEY) || { original: {} },
restore = {};
// convert translations to left & top for layout
if (prop.leaveTransforms !== true) {
for (var i = cssPrefixes.length - 1; i >= 0; i--) {
restore[cssPrefixes[i] + 'transform'] = '';
}
if (isTranslatable && typeof selfCSSData.meta !== 'undefined') {
for (var j = 0, dir; (dir = directions[j]); ++j) {
restore[dir] = selfCSSData.meta[dir + '_o'] + valUnit;
}
}
}
// remove transition timing functions
self.
unbind(transitionEndEvent).
css(selfCSSData.original).
css(restore).
data(DATA_KEY, null);
// if we used the fadeOut shortcut make sure elements are display:none
if (prop.opacity === 'hide') {
self.css({'display': 'none', 'opacity': ''});
}
// run the main callback function
propertyCallback.call(self);
},
easings = {
bounce: CUBIC_BEZIER_OPEN + '0.0, 0.35, .5, 1.3' + CUBIC_BEZIER_CLOSE,
linear: 'linear',
swing: 'ease-in-out',
// Penner equation approximations from Matthew Lein's Ceaser: http://matthewlein.com/ceaser/
easeInQuad: CUBIC_BEZIER_OPEN + '0.550, 0.085, 0.680, 0.530' + CUBIC_BEZIER_CLOSE,
easeInCubic: CUBIC_BEZIER_OPEN + '0.550, 0.055, 0.675, 0.190' + CUBIC_BEZIER_CLOSE,
easeInQuart: CUBIC_BEZIER_OPEN + '0.895, 0.030, 0.685, 0.220' + CUBIC_BEZIER_CLOSE,
easeInQuint: CUBIC_BEZIER_OPEN + '0.755, 0.050, 0.855, 0.060' + CUBIC_BEZIER_CLOSE,
easeInSine: CUBIC_BEZIER_OPEN + '0.470, 0.000, 0.745, 0.715' + CUBIC_BEZIER_CLOSE,
easeInExpo: CUBIC_BEZIER_OPEN + '0.950, 0.050, 0.795, 0.035' + CUBIC_BEZIER_CLOSE,
easeInCirc: CUBIC_BEZIER_OPEN + '0.600, 0.040, 0.980, 0.335' + CUBIC_BEZIER_CLOSE,
easeInBack: CUBIC_BEZIER_OPEN + '0.600, -0.280, 0.735, 0.045' + CUBIC_BEZIER_CLOSE,
easeOutQuad: CUBIC_BEZIER_OPEN + '0.250, 0.460, 0.450, 0.940' + CUBIC_BEZIER_CLOSE,
easeOutCubic: CUBIC_BEZIER_OPEN + '0.215, 0.610, 0.355, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutQuart: CUBIC_BEZIER_OPEN + '0.165, 0.840, 0.440, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutQuint: CUBIC_BEZIER_OPEN + '0.230, 1.000, 0.320, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutSine: CUBIC_BEZIER_OPEN + '0.390, 0.575, 0.565, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutExpo: CUBIC_BEZIER_OPEN + '0.190, 1.000, 0.220, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutCirc: CUBIC_BEZIER_OPEN + '0.075, 0.820, 0.165, 1.000' + CUBIC_BEZIER_CLOSE,
easeOutBack: CUBIC_BEZIER_OPEN + '0.175, 0.885, 0.320, 1.275' + CUBIC_BEZIER_CLOSE,
easeInOutQuad: CUBIC_BEZIER_OPEN + '0.455, 0.030, 0.515, 0.955' + CUBIC_BEZIER_CLOSE,
easeInOutCubic: CUBIC_BEZIER_OPEN + '0.645, 0.045, 0.355, 1.000' + CUBIC_BEZIER_CLOSE,
easeInOutQuart: CUBIC_BEZIER_OPEN + '0.770, 0.000, 0.175, 1.000' + CUBIC_BEZIER_CLOSE,
easeInOutQuint: CUBIC_BEZIER_OPEN + '0.860, 0.000, 0.070, 1.000' + CUBIC_BEZIER_CLOSE,
easeInOutSine: CUBIC_BEZIER_OPEN + '0.445, 0.050, 0.550, 0.950' + CUBIC_BEZIER_CLOSE,
easeInOutExpo: CUBIC_BEZIER_OPEN + '1.000, 0.000, 0.000, 1.000' + CUBIC_BEZIER_CLOSE,
easeInOutCirc: CUBIC_BEZIER_OPEN + '0.785, 0.135, 0.150, 0.860' + CUBIC_BEZIER_CLOSE,
easeInOutBack: CUBIC_BEZIER_OPEN + '0.680, -0.550, 0.265, 1.550' + CUBIC_BEZIER_CLOSE
},
domProperties = {},
cssEasing = easings[opt.easing || 'swing'] ? easings[opt.easing || 'swing'] : opt.easing || 'swing';
// seperate out the properties for the relevant animation functions
for (var p in prop) {
if (jQuery.inArray(p, pluginOptions) === -1) {
var isDirection = jQuery.inArray(p, directions) > -1,
cleanVal = _interpretValue(self, prop[p], p, (isDirection && prop.avoidTransforms !== true));
if (prop.avoidTransforms !== true && _appropriateProperty(p, cleanVal, self)) {
_applyCSSTransition(
self,
p,
opt.duration,
cssEasing,
isDirection && prop.avoidTransforms === true ? cleanVal + valUnit : cleanVal,
isDirection && prop.avoidTransforms !== true,
isTranslatable,
prop.useTranslate3d === true);
}
else {
domProperties[p] = prop[p];
}
}
}
self.unbind(transitionEndEvent);
var selfCSSData = self.data(DATA_KEY);
if (selfCSSData && !_isEmptyObject(selfCSSData) && !_isEmptyObject(selfCSSData.secondary)) {
callbackQueue++;
self.css(selfCSSData.properties);
// store in a var to avoid any timing issues, depending on animation duration
var secondary = selfCSSData.secondary;
// has to be done in a timeout to ensure transition properties are set
setTimeout(function() {
self.bind(transitionEndEvent, cssCallback).css(secondary);
});
}
else {
// it won't get fired otherwise
opt.queue = false;
}
// fire up DOM based animations
if (!_isEmptyObject(domProperties)) {
callbackQueue++;
originalAnimateMethod.apply(self, [domProperties, {
duration: opt.duration,
easing: jQuery.easing[opt.easing] ? opt.easing : (jQuery.easing.swing ? 'swing' : 'linear'),
complete: propertyCallback,
queue: opt.queue
}]);
}
// strict JS compliance
return true;
});
};
jQuery.fn.animate.defaults = {};
/**
@public
@name jQuery.fn.stop
@function
@description The enhanced jQuery.stop function (resets transforms to left/top)
@param {boolean} [clearQueue]
@param {boolean} [gotoEnd]
@param {boolean} [leaveTransforms] Leave transforms/translations as they are? Default: false (reset translations to calculated explicit left/top props)
*/
jQuery.fn.stop = function(clearQueue, gotoEnd, leaveTransforms) {
if (!cssTransitionsSupported) return originalStopMethod.apply(this, [clearQueue, gotoEnd]);
// clear the queue?
if (clearQueue) this.queue([]);
// route to appropriate stop methods
this.each(function() {
var self = jQuery(this),
selfCSSData = self.data(DATA_KEY);
// is this a CSS transition?
if (selfCSSData && !_isEmptyObject(selfCSSData)) {
var i, restore = {};
if (gotoEnd) {
// grab end state properties
restore = selfCSSData.secondary;
if (!leaveTransforms && typeof selfCSSData.meta['left_o'] !== undefined || typeof selfCSSData.meta['top_o'] !== undefined) {
restore['left'] = typeof selfCSSData.meta['left_o'] !== undefined ? selfCSSData.meta['left_o'] : 'auto';
restore['top'] = typeof selfCSSData.meta['top_o'] !== undefined ? selfCSSData.meta['top_o'] : 'auto';
// remove the transformations
for (i = cssPrefixes.length - 1; i >= 0; i--) {
restore[cssPrefixes[i]+'transform'] = '';
}
}
} else if (!_isEmptyObject(selfCSSData.secondary)) {
var cStyle = window.getComputedStyle(self[0], null);
if (cStyle) {
// grab current properties
for (var prop in selfCSSData.secondary) {
if(selfCSSData.secondary.hasOwnProperty(prop)) {
prop = prop.replace(rupper, '-$1').toLowerCase();
restore[prop] = cStyle.getPropertyValue(prop);
// is this a matrix property? extract left and top and apply
if (!leaveTransforms && (/matrix/i).test(restore[prop])) {
var explodedMatrix = restore[prop].replace(/^matrix\(/i, '').split(/, |\)$/g);
// apply the explicit left/top props
restore['left'] = (parseFloat(explodedMatrix[4]) + parseFloat(self.css('left')) + valUnit) || 'auto';
restore['top'] = (parseFloat(explodedMatrix[5]) + parseFloat(self.css('top')) + valUnit) || 'auto';
// remove the transformations
for (i = cssPrefixes.length - 1; i >= 0; i--) {
restore[cssPrefixes[i]+'transform'] = '';
}
}
}
}
}
}
// remove transition timing functions
self.
unbind(transitionEndEvent).
css(selfCSSData.original).
css(restore).
data(DATA_KEY, null);
}
else {
// dom transition
originalStopMethod.apply(self, [clearQueue, gotoEnd]);
}
});
return this;
};
})(jQuery, jQuery.fn.animate, jQuery.fn.stop);

View File

@ -0,0 +1,248 @@
/**
* jQuery-csv (jQuery Plugin)
* version: 0.51 (2012-04-26)
*
* This document is licensed as free software under the terms of the
* MIT License: http://www.opensource.org/licenses/mit-license.php
*
* This plugin was originally designed to assist in parsing CSV files loaded
* from client-side javascript. It's influenced by jQuery.json and the original
* core RegEx comes directly from the following answer posted by a
* StackOverflow.com user named Ridgerunner.
* Source:
* - http://stackoverflow.com/q/8493195/290340
*
* For legal purposes I'll include the "NO WARRANTY EXPRESSED OR IMPLIED.
* USE AT YOUR OWN RISK.". Which, in 'layman's terms' means, by using this
* library you are accepting responsability if it breaks your code.
*
* Legal jargon aside, I will do my best to provide a useful and stable core
* that can effectively be built on.
*
* Copyrighted 2012 by Evan Plaice.
*/
(function( $ ) {
/**
* jQuery.csv.defaults
* Encapsulates the method paramater defaults for the CSV plugin module.
*/
$.csvDefaults = {
separator:',',
delimiter:'"',
skip:0,
headerLine:1,
dataLine:2
};
/**
* jQuery.csvEntry2Array(csv)
* Converts a CSV string to a javascript array.
*
* @param {Array} csv The string containing the CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
*
* This method deals with simple CSV strings only. It's useful if you only
* need to parse a single entry. If you need to parse more than one line,
* use $.csv2Array instead.
*/
$.csvEntry2Array = function(csv, meta) {
var meta = (meta !== undefined ? meta : {});
var separator = 'separator' in meta ? meta.separator : $.csvDefaults.separator;
var delimiter = 'delimiter' in meta ? meta.delimiter : $.csvDefaults.delimiter;
// build the CSV validator regex
var reValid = /^\s*(?:D[^D\\]*(?:\\[\S\s][^D\\]*)*D|[^SD\s\\]*(?:\s+[^SD\s\\]+)*)\s*(?:S\s*(?:D[^D\\]*(?:\\[\S\s][^D\\]*)*D|[^SD\s\\]*(?:\s+[^SD\s\\]+)*)\s*)*$/;
reValid = RegExp(reValid.source.replace(/S/g, separator));
reValid = RegExp(reValid.source.replace(/D/g, delimiter));
// build the CSV line parser regex
var reValue = /(?!\s*$)\s*(?:D([^D\\]*(?:\\[\S\s][^D\\]*)*)D|([^SD\s\\]*(?:\s+[^SD\s\\]+)*))\s*(?:S|$)/g;
reValue = RegExp(reValue.source.replace(/S/g, separator), 'g');
reValue = RegExp(reValue.source.replace(/D/g, delimiter), 'g');
// Return NULL if input string is not well formed CSV string.
if (!reValid.test(csv)) {
return null;
}
// "Walk" the string using replace with callback.
var output = [];
csv.replace(reValue, function(m0, m1, m2) {
// Remove backslash from any delimiters in the value
if (m1 !== undefined) {
var reDelimiterUnescape = /\\D/g;
reDelimiterUnescape = RegExp(reDelimiterUnescape.source.replace(/D/, delimiter), 'g');
output.push(m1.replace(reDelimiterUnescape, delimiter));
} else if (m2 !== undefined) {
output.push(m2);
}
return '';
});
// Handle special case of empty last value.
var reEmptyLast = /S\s*$/;
reEmptyLast = RegExp(reEmptyLast.source.replace(/S/, separator));
if (reEmptyLast.test(csv)) {
output.push('');
}
return output;
};
/**
* jQuery.array2CSVEntry(array)
* Converts a javascript array to a CSV String.
*
* @param {Array} array The array containing the CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
*
* This method deals with simple CSV arrays only. It's useful if you only
* need to convert a single entry. If you need to convert more than one line,
* use $.csv2Array instead.
*/
$.array2CSVEntry = function(array, meta) {
var meta = (meta !== undefined ? meta : {});
var separator = 'separator' in meta ? meta.separator : $.csvDefaults.separator;
var delimiter = 'delimiter' in meta ? meta.delimiter : $.csvDefaults.delimiter;
var output = []
for(i in array) {
output.push(array[i]);
}
return output;
};
/**
* jQuery.csv2Array(csv)
* Converts a CSV string to a javascript array.
*
* @param {String} csv The string containing the raw CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter, skip) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
* @param {Integer} [skip] The number of lines that need to be skipped before the parser starts. Defaults to 0.
*
* This method deals with multi-line CSV. The breakdown is simple. The first
* dimension of the array represents the line (or entry/row) while the second
* dimension contains the values (or values/columns).
*/
$.csv2Array = function(csv, meta) {
var meta = (meta !== undefined ? meta : {});
var separator = 'separator' in meta ? meta.separator : $.csvDefaults.separator;
var delimiter = 'delimiter' in meta ? meta.delimiter : $.csvDefaults.delimiter;
var skip = 'skip' in meta ? meta.skip : $.csvDefaults.skip;
// process by line
var lines = csv.split(/\r\n|\r|\n/g);
var output = [];
for(var i in lines) {
if(i < skip) {
continue;
}
// process each value
var line = $.csvEntry2Array(lines[i], {
delimiter: delimiter,
separator: separator
});
output.push(line);
}
return output;
};
/**
* jQuery.array2CSV(array)
* Converts a CSV array to a javascript string.
*
* @param {Array} csv The array containing the CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter, skip) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
* @param {Integer} [skip] The number of lines that need to be skipped before the parser starts. Defaults to 0.
*
* This method dimensional multi-line CSV arrays. The breakdown is simple.
* The first dimension of the array gets mapped to rows, the second dimension
* gets mapped to data within those rows.
*/
//$.array2CSV = function(array, meta) {
// alert('Not implemented yet'); // TODO: implement this
//};
/**
* jQuery.csv2Dictionary(csv)
* Converts a CSV string to a javascript dictionary.
* @param {String} csv The string containing the raw CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter, headerLine, dataLine) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
* @param {Integer} [headerLine] The line in the file that contains the header data. Defaults to 1 (1-based counting).
* @param {Integer} [dataLine] The line where the data values start. Defaults to 2 (1-based counting).
*
* This method deals with multi-line CSV strings. Where the headers line is
* used as the key for each value per entry.
*/
$.csv2Dictionary = function(csv, meta) {
var meta = (meta !== undefined ? meta : {});
var separator = 'separator' in meta ? meta.separator : $.csvDefaults.separator;
var delimiter = 'delimiter' in meta ? meta.delimiter : $.csvDefaults.delimiter;
var headerLine = 'headerLine' in meta ? meta.headerLine : $.csvDefaults.headerLine;
var dataLine = 'dataLine' in meta ? meta.dataLine : $.csvDefaults.dataLine;
// process data into lines
var lines = csv.split(/\r\n|\r|\n/g);
// fetch the headers
var headers = $.csvEntry2Array(lines[(headerLine - 1)]);
// process the data
var output = [];
for(var i in lines) {
if(i < (dataLine - 1)) {
continue;
}
// process each value
if ( i == 20 ){
console.log( i );
}
var line = $.csvEntry2Array(lines[i], {
delimiter: delimiter,
separator: separator
});
var lineDict = {};
for(var j in headers) {
try{
lineDict[headers[j]] = line[j];
} catch( e ) {
console.log( e );
}
}
output.push(lineDict);
}
return output;
};
/**
* jQuery.dictionary2CSV(dictionary)
* Converts a javascript dictionary to a CSV string.
* @param {Object} dictionary The dictionary containing the CSV data.
* @param {Object} [meta] The dictionary where the meta variables (ie separator, delimiter, headerLine, dataLine) are defined. Defaults to an empty object ({}).
* @param {Character} [separator] An override for the separator character. Defaults to a comma(,).
* @param {Character} [delimiter] An override for the delimiter character. Defaults to a quote(').
* @param {Integer} [headerLine] The line in the file that contains the header data. Defaults to 1 (1-based counting).
* @param {Integer} [dataLine] The line where the data values start. Defaults to 2 (1-based counting).
*
* This method generates a CSV file from a javascript dictionary structure.
* It starts by detecting the headers and adding them as the first line of
* the CSV file, followed by a structured dump of the data.
*/
//$.dictionary2CSV = function(dictionary, meta) {
// alert('Not implemented yet'); // TODO: implement this
//};
})( jQuery );

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

5670
www/js/libs/leaflet/leaflet-src.js Executable file

File diff suppressed because it is too large Load Diff

323
www/js/libs/leaflet/leaflet.css Executable file
View File

@ -0,0 +1,323 @@
/* required styles */
.leaflet-map-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-pane,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
.leaflet-popup-pane,
.leaflet-overlay-pane svg,
.leaflet-zoom-box,
.leaflet-image-layer { /* TODO optimize classes */
position: absolute;
}
.leaflet-container {
overflow: hidden;
}
.leaflet-tile-pane, .leaflet-container {
-webkit-transform: translate3d(0,0,0);
}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
display: block;
}
.leaflet-clickable {
cursor: pointer;
}
.leaflet-container img {
max-width: none !important;
}
.leaflet-tile-pane { z-index: 2; }
.leaflet-objects-pane { z-index: 3; }
.leaflet-overlay-pane { z-index: 4; }
.leaflet-shadow-pane { z-index: 5; }
.leaflet-marker-pane { z-index: 6; }
.leaflet-popup-pane { z-index: 7; }
.leaflet-zoom-box {
width: 0;
height: 0;
}
.leaflet-tile {
visibility: hidden;
}
.leaflet-tile-loaded {
visibility: inherit;
}
a.leaflet-active {
outline: 2px solid orange;
}
/* Leaflet controls */
.leaflet-control {
position: relative;
z-index: 7;
}
.leaflet-top,
.leaflet-bottom {
position: absolute;
}
.leaflet-top {
top: 0;
}
.leaflet-right {
right: 0;
}
.leaflet-bottom {
bottom: 0;
}
.leaflet-left {
left: 0;
}
.leaflet-control {
float: left;
clear: both;
}
.leaflet-right .leaflet-control {
float: right;
}
.leaflet-top .leaflet-control {
margin-top: 10px;
}
.leaflet-bottom .leaflet-control {
margin-bottom: 10px;
}
.leaflet-left .leaflet-control {
margin-left: 10px;
}
.leaflet-right .leaflet-control {
margin-right: 10px;
}
.leaflet-control-zoom, .leaflet-control-layers {
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
.leaflet-control-zoom {
padding: 5px;
background: rgba(0, 0, 0, 0.25);
}
.leaflet-control-zoom a {
background-color: rgba(255, 255, 255, 0.75);
}
.leaflet-control-zoom a, .leaflet-control-layers a {
background-position: 50% 50%;
background-repeat: no-repeat;
display: block;
}
.leaflet-control-zoom a {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
width: 19px;
height: 19px;
}
.leaflet-control-zoom a:hover {
background-color: #fff;
}
.leaflet-big-buttons .leaflet-control-zoom a {
width: 27px;
height: 27px;
}
.leaflet-control-zoom-in {
background-image: url(images/zoom-in.png);
margin-bottom: 5px;
}
.leaflet-control-zoom-out {
background-image: url(images/zoom-out.png);
}
.leaflet-control-layers {
-moz-box-shadow: 0 0 7px #999;
-webkit-box-shadow: 0 0 7px #999;
box-shadow: 0 0 7px #999;
background: #f8f8f9;
}
.leaflet-control-layers a {
background-image: url(images/layers.png);
width: 36px;
height: 36px;
}
.leaflet-big-buttons .leaflet-control-layers a {
width: 44px;
height: 44px;
}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
display: none;
}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
display: block;
position: relative;
}
.leaflet-control-layers-expanded {
padding: 6px 10px 6px 6px;
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
color: #333;
background: #fff;
}
.leaflet-control-layers input {
margin-top: 2px;
position: relative;
top: 1px;
}
.leaflet-control-layers label {
display: block;
}
.leaflet-control-layers-separator {
height: 0;
border-top: 1px solid #ddd;
margin: 5px -10px 5px -6px;
}
.leaflet-container .leaflet-control-attribution {
margin: 0;
padding: 0 5px;
font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
color: #333;
background-color: rgba(255, 255, 255, 0.7);
-moz-box-shadow: 0 0 7px #ccc;
-webkit-box-shadow: 0 0 7px #ccc;
box-shadow: 0 0 7px #ccc;
}
/* Fade animations */
.leaflet-fade-anim .leaflet-tile {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-tile-loaded {
opacity: 1;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1;
}
.leaflet-zoom-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
-o-transition: none;
transition: none;
}
.leaflet-zoom-anim .leaflet-objects-pane {
visibility: hidden;
}
/* Popup layout */
.leaflet-popup {
position: absolute;
text-align: center;
-webkit-transform: translate3d(0,0,0);
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
}
.leaflet-popup-content {
margin: 19px;
}
.leaflet-popup-tip-container {
margin: 0 auto;
width: 40px;
height: 16px;
position: relative;
overflow: hidden;
}
.leaflet-popup-tip {
width: 15px;
height: 15px;
padding: 1px;
margin: -8px auto 0;
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.leaflet-popup-close-button {
position: absolute;
top: 9px;
right: 9px;
width: 10px;
height: 10px;
overflow: hidden;
}
.leaflet-popup-content p {
margin: 18px 0;
}
/* Visual appearance */
.leaflet-container {
background: #ddd;
}
.leaflet-container a {
color: #0078A8;
}
.leaflet-zoom-box {
border: 2px dotted #05f;
background: white;
opacity: 0.5;
}
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
background: white;
box-shadow: 0 1px 10px #888;
-moz-box-shadow: 0 1px 10px #888;
-webkit-box-shadow: 0 1px 14px #999;
}
.leaflet-popup-content-wrapper {
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
}
.leaflet-popup-content {
font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif;
}
.leaflet-popup-close-button {
background: white url(images/popup-close.png);
}

View File

@ -0,0 +1,48 @@
.leaflet-tile {
filter: inherit;
}
.leaflet-vml-shape {
width: 1px;
height: 1px;
}
.lvml {
behavior: url(#default#VML);
display: inline-block;
position: absolute;
}
.leaflet-control {
display: inline;
}
.leaflet-popup-tip {
width: 21px;
_width: 27px;
margin: 0 auto;
_margin-top: -3px;
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
}
.leaflet-popup-tip-container {
margin-top: -1px;
}
.leaflet-popup-content-wrapper, .leaflet-popup-tip {
border: 1px solid #bbb;
}
.leaflet-control-zoom {
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#3F000000',EndColorStr='#3F000000');
}
.leaflet-control-zoom a {
background-color: #eee;
}
.leaflet-control-zoom a:hover {
background-color: #fff;
}
.leaflet-control-layers-toggle {
}
.leaflet-control-attribution, .leaflet-control-layers {
background: white;
}

6
www/js/libs/leaflet/leaflet.js Executable file

File diff suppressed because one or more lines are too long

536
www/js/libs/mustache.js Executable file
View File

@ -0,0 +1,536 @@
/*!
* mustache.js - Logic-less {{mustache}} templates with JavaScript
* http://github.com/janl/mustache.js
*/
var Mustache = (typeof module !== "undefined" && module.exports) || {};
(function (exports) {
exports.name = "mustache.js";
exports.version = "0.5.0-dev";
exports.tags = ["{{", "}}"];
exports.parse = parse;
exports.compile = compile;
exports.render = render;
exports.clearCache = clearCache;
// This is here for backwards compatibility with 0.4.x.
exports.to_html = function (template, view, partials, send) {
var result = render(template, view, partials);
if (typeof send === "function") {
send(result);
} else {
return result;
}
};
var _toString = Object.prototype.toString;
var _isArray = Array.isArray;
var _forEach = Array.prototype.forEach;
var _trim = String.prototype.trim;
var isArray;
if (_isArray) {
isArray = _isArray;
} else {
isArray = function (obj) {
return _toString.call(obj) === "[object Array]";
};
}
var forEach;
if (_forEach) {
forEach = function (obj, callback, scope) {
return _forEach.call(obj, callback, scope);
};
} else {
forEach = function (obj, callback, scope) {
for (var i = 0, len = obj.length; i < len; ++i) {
callback.call(scope, obj[i], i, obj);
}
};
}
var spaceRe = /^\s*$/;
function isWhitespace(string) {
return spaceRe.test(string);
}
var trim;
if (_trim) {
trim = function (string) {
return string == null ? "" : _trim.call(string);
};
} else {
var trimLeft, trimRight;
if (isWhitespace("\xA0")) {
trimLeft = /^\s+/;
trimRight = /\s+$/;
} else {
// IE doesn't match non-breaking spaces with \s, thanks jQuery.
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
}
trim = function (string) {
return string == null ? "" :
String(string).replace(trimLeft, "").replace(trimRight, "");
};
}
var escapeMap = {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': '&quot;',
"'": '&#39;'
};
function escapeHTML(string) {
return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
return escapeMap[s] || s;
});
}
/**
* Adds the `template`, `line`, and `file` properties to the given error
* object and alters the message to provide more useful debugging information.
*/
function debug(e, template, line, file) {
file = file || "<template>";
var lines = template.split("\n"),
start = Math.max(line - 3, 0),
end = Math.min(lines.length, line + 3),
context = lines.slice(start, end);
var c;
for (var i = 0, len = context.length; i < len; ++i) {
c = i + start + 1;
context[i] = (c === line ? " >> " : " ") + context[i];
}
e.template = template;
e.line = line;
e.file = file;
e.message = [file + ":" + line, context.join("\n"), "", e.message].join("\n");
return e;
}
/**
* Looks up the value of the given `name` in the given context `stack`.
*/
function lookup(name, stack, defaultValue) {
if (name === ".") {
return stack[stack.length - 1];
}
var names = name.split(".");
var lastIndex = names.length - 1;
var target = names[lastIndex];
var value, context, i = stack.length, j, localStack;
while (i) {
localStack = stack.slice(0);
context = stack[--i];
j = 0;
while (j < lastIndex) {
context = context[names[j++]];
if (context == null) {
break;
}
localStack.push(context);
}
if (context && typeof context === "object" && target in context) {
value = context[target];
break;
}
}
// If the value is a function, call it in the current context.
if (typeof value === "function") {
value = value.call(localStack[localStack.length - 1]);
}
if (value == null) {
return defaultValue;
}
return value;
}
function renderSection(name, stack, callback, inverted) {
var buffer = "";
var value = lookup(name, stack);
if (inverted) {
// From the spec: inverted sections may render text once based on the
// inverse value of the key. That is, they will be rendered if the key
// doesn't exist, is false, or is an empty list.
if (value == null || value === false || (isArray(value) && value.length === 0)) {
buffer += callback();
}
} else if (isArray(value)) {
forEach(value, function (value) {
stack.push(value);
buffer += callback();
stack.pop();
});
} else if (typeof value === "object") {
stack.push(value);
buffer += callback();
stack.pop();
} else if (typeof value === "function") {
var scope = stack[stack.length - 1];
var scopedRender = function (template) {
return render(template, scope);
};
buffer += value.call(scope, callback(), scopedRender) || "";
} else if (value) {
buffer += callback();
}
return buffer;
}
/**
* Parses the given `template` and returns the source of a function that,
* with the proper arguments, will render the template. Recognized options
* include the following:
*
* - file The name of the file the template comes from (displayed in
* error messages)
* - tags An array of open and close tags the `template` uses. Defaults
* to the value of Mustache.tags
* - debug Set `true` to log the body of the generated function to the
* console
* - space Set `true` to preserve whitespace from lines that otherwise
* contain only a {{tag}}. Defaults to `false`
*/
function parse(template, options) {
options = options || {};
var tags = options.tags || exports.tags,
openTag = tags[0],
closeTag = tags[tags.length - 1];
var code = [
'var buffer = "";', // output buffer
"\nvar line = 1;", // keep track of source line number
"\ntry {",
'\nbuffer += "'
];
var spaces = [], // indices of whitespace in code on the current line
hasTag = false, // is there a {{tag}} on the current line?
nonSpace = false; // is there a non-space char on the current line?
// Strips all space characters from the code array for the current line
// if there was a {{tag}} on it and otherwise only spaces.
var stripSpace = function () {
if (hasTag && !nonSpace && !options.space) {
while (spaces.length) {
code.splice(spaces.pop(), 1);
}
} else {
spaces = [];
}
hasTag = false;
nonSpace = false;
};
var sectionStack = [], updateLine, nextOpenTag, nextCloseTag;
var setTags = function (source) {
tags = trim(source).split(/\s+/);
nextOpenTag = tags[0];
nextCloseTag = tags[tags.length - 1];
};
var includePartial = function (source) {
code.push(
'";',
updateLine,
'\nvar partial = partials["' + trim(source) + '"];',
'\nif (partial) {',
'\n buffer += render(partial,stack[stack.length - 1],partials);',
'\n}',
'\nbuffer += "'
);
};
var openSection = function (source, inverted) {
var name = trim(source);
if (name === "") {
throw debug(new Error("Section name may not be empty"), template, line, options.file);
}
sectionStack.push({name: name, inverted: inverted});
code.push(
'";',
updateLine,
'\nvar name = "' + name + '";',
'\nvar callback = (function () {',
'\n return function () {',
'\n var buffer = "";',
'\nbuffer += "'
);
};
var openInvertedSection = function (source) {
openSection(source, true);
};
var closeSection = function (source) {
var name = trim(source);
var openName = sectionStack.length != 0 && sectionStack[sectionStack.length - 1].name;
if (!openName || name != openName) {
throw debug(new Error('Section named "' + name + '" was never opened'), template, line, options.file);
}
var section = sectionStack.pop();
code.push(
'";',
'\n return buffer;',
'\n };',
'\n})();'
);
if (section.inverted) {
code.push("\nbuffer += renderSection(name,stack,callback,true);");
} else {
code.push("\nbuffer += renderSection(name,stack,callback);");
}
code.push('\nbuffer += "');
};
var sendPlain = function (source) {
code.push(
'";',
updateLine,
'\nbuffer += lookup("' + trim(source) + '",stack,"");',
'\nbuffer += "'
);
};
var sendEscaped = function (source) {
code.push(
'";',
updateLine,
'\nbuffer += escapeHTML(lookup("' + trim(source) + '",stack,""));',
'\nbuffer += "'
);
};
var line = 1, c, callback;
for (var i = 0, len = template.length; i < len; ++i) {
if (template.slice(i, i + openTag.length) === openTag) {
i += openTag.length;
c = template.substr(i, 1);
updateLine = '\nline = ' + line + ';';
nextOpenTag = openTag;
nextCloseTag = closeTag;
hasTag = true;
switch (c) {
case "!": // comment
i++;
callback = null;
break;
case "=": // change open/close tags, e.g. {{=<% %>=}}
i++;
closeTag = "=" + closeTag;
callback = setTags;
break;
case ">": // include partial
i++;
callback = includePartial;
break;
case "#": // start section
i++;
callback = openSection;
break;
case "^": // start inverted section
i++;
callback = openInvertedSection;
break;
case "/": // end section
i++;
callback = closeSection;
break;
case "{": // plain variable
closeTag = "}" + closeTag;
// fall through
case "&": // plain variable
i++;
nonSpace = true;
callback = sendPlain;
break;
default: // escaped variable
nonSpace = true;
callback = sendEscaped;
}
var end = template.indexOf(closeTag, i);
if (end === -1) {
throw debug(new Error('Tag "' + openTag + '" was not closed properly'), template, line, options.file);
}
var source = template.substring(i, end);
if (callback) {
callback(source);
}
// Maintain line count for \n in source.
var n = 0;
while (~(n = source.indexOf("\n", n))) {
line++;
n++;
}
i = end + closeTag.length - 1;
openTag = nextOpenTag;
closeTag = nextCloseTag;
} else {
c = template.substr(i, 1);
switch (c) {
case '"':
case "\\":
nonSpace = true;
code.push("\\" + c);
break;
case "\r":
// Ignore carriage returns.
break;
case "\n":
spaces.push(code.length);
code.push("\\n");
stripSpace(); // Check for whitespace on the current line.
line++;
break;
default:
if (isWhitespace(c)) {
spaces.push(code.length);
} else {
nonSpace = true;
}
code.push(c);
}
}
}
if (sectionStack.length != 0) {
throw debug(new Error('Section "' + sectionStack[sectionStack.length - 1].name + '" was not closed properly'), template, line, options.file);
}
// Clean up any whitespace from a closing {{tag}} that was at the end
// of the template without a trailing \n.
stripSpace();
code.push(
'";',
"\nreturn buffer;",
"\n} catch (e) { throw {error: e, line: line}; }"
);
// Ignore `buffer += "";` statements.
var body = code.join("").replace(/buffer \+= "";\n/g, "");
if (options.debug) {
if (typeof console != "undefined" && console.log) {
console.log(body);
} else if (typeof print === "function") {
print(body);
}
}
return body;
}
/**
* Used by `compile` to generate a reusable function for the given `template`.
*/
function _compile(template, options) {
var args = "view,partials,stack,lookup,escapeHTML,renderSection,render";
var body = parse(template, options);
var fn = new Function(args, body);
// This anonymous function wraps the generated function so we can do
// argument coercion, setup some variables, and handle any errors
// encountered while executing it.
return function (view, partials) {
partials = partials || {};
var stack = [view]; // context stack
try {
return fn(view, partials, stack, lookup, escapeHTML, renderSection, render);
} catch (e) {
throw debug(e.error, template, e.line, options.file);
}
};
}
// Cache of pre-compiled templates.
var _cache = {};
/**
* Clear the cache of compiled templates.
*/
function clearCache() {
_cache = {};
}
/**
* Compiles the given `template` into a reusable function using the given
* `options`. In addition to the options accepted by Mustache.parse,
* recognized options include the following:
*
* - cache Set `false` to bypass any pre-compiled version of the given
* template. Otherwise, a given `template` string will be cached
* the first time it is parsed
*/
function compile(template, options) {
options = options || {};
// Use a pre-compiled version from the cache if we have one.
if (options.cache !== false) {
if (!_cache[template]) {
_cache[template] = _compile(template, options);
}
return _cache[template];
}
return _compile(template, options);
}
/**
* High-level function that renders the given `template` using the given
* `view` and `partials`. If you need to use any of the template options (see
* `compile` above), you must compile in a separate step, and then call that
* compiled function.
*/
function render(template, view, partials) {
return compile(template)(view, partials);
}
})(Mustache);

View File

@ -0,0 +1,54 @@
/*!
* http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone
* Released under MIT license, http://cubiq.org/license
*/
function NoClickDelay(el) {
this.element = typeof el == 'object' ? el : document.getElementById(el);
var self = this;
if( 'ontouchstart' in window )
this.element.addEventListener('touchstart', self, true);
}
NoClickDelay.prototype = {
handleEvent: function(e) {
switch(e.type) {
case 'touchstart': this.onTouchStart(e); break;
case 'touchmove': this.onTouchMove(e); break;
case 'touchend': this.onTouchEnd(e); break;
}
},
onTouchStart: function(e) {
e.preventDefault();
this.moved = false;
this.theTarget = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
if(this.theTarget.nodeType == 3) this.theTarget = theTarget.parentNode;
this.theTarget.className+= ' pressed';
//alert( this.theTarget.className );
this.element.addEventListener('touchmove', this, false);
this.element.addEventListener('touchend', this, false);
},
onTouchMove: function(e) {
this.moved = true;
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
},
onTouchEnd: function(e) {
this.element.removeEventListener('touchmove', this, false);
this.element.removeEventListener('touchend', this, false);
if( !this.moved && this.theTarget ) {
this.theTarget.className = this.theTarget.className.replace(/ ?pressed/gi, '');
var theEvent = document.createEvent('MouseEvents');
theEvent.initEvent('click', true, true);
this.theTarget.dispatchEvent(theEvent);
}
this.theTarget = undefined;
}
};

View File

@ -0,0 +1,83 @@
/*
THIS SOFTWARE IS PROVIDED BY ANDREW M. TRICE ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREW M. TRICE OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
.splitViewNavigator_root {
position:absolute;
top:0px;
bottom:0px;
left:0px;
right:0px;
}
.splitViewNavigator_sidebar {
position:absolute;
overflow:hidden;
-webkit-backface-visibility: hidden;
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
border-right:1px solid #999;
}
.splitViewNavigator_body {
position:absolute;
background:white;
overflow:hidden;
-webkit-backface-visibility: hidden;
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
}
.content_overlay_visible {
position:absolute;
top:0px;
bottom:0px;
left:0px;
right:0px;
}
.content_overlay_hidden {
position:absolute;
top:-1px;
left:-1px;
width:0px;
height:0px;
display:none;
}
.sidebar_portrait {
top:0px;
bottom:0px;
left:-240px;
width:240px;
}
.body_portrait {
top:0px;
bottom:0px;
right:0px;
left:0px;
}
.sidebar_landscape {
top:0px;
bottom:0px;
left:0px;
width:240px;
}
.body_landscape {
top:0px;
bottom:0px;
right:0px;
left:240px;
}

View File

@ -0,0 +1,185 @@
/*
THIS SOFTWARE IS PROVIDED BY ANDREW M. TRICE ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREW M. TRICE OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
var SplitViewNavigator = function( target, toggleButtonLabel, backLinkCSS, bindToWindow ) {
this.animating = false;
this.animationDuration = 350;
this.animationPerformed = false;
this.uniqueId = this.guid();
this.parent = $( target );
var regexp = new RegExp("Windows Phone OS 7");
this.winPhone = (navigator.userAgent.search(regexp) >= 0);
this.rootElement = $('<div class="splitViewNavigator_root"></div>');
this.sidebarContainer = $('<div class="splitViewNavigator_sidebar"></div>');
this.contentOverlay = $('<div class="content_overlay_hidden" id="overlay'+this.uniqueId+'"></div>');
this.bodyContainer = $('<div class="splitViewNavigator_body"></div>');
this.sidebarViewNavigator = new ViewNavigator( this.sidebarContainer.get()[0], backLinkCSS, false );
this.bodyViewNavigator = new ViewNavigator( this.bodyContainer.get()[0], backLinkCSS, false );
this.backLinkCSS = backLinkCSS ? backLinkCSS : "viewNavigator_backButton";
this.toggleSidebarButton = $('<li class="viewNavigator_backButton viewNavigator_backButtonPosition ' + backLinkCSS + '" id="toggle' + this.uniqueId + '" onclick="window.splitViewNavigator.showSidebar()">'+toggleButtonLabel+'</li>');
this.rootElement.append( this.bodyContainer );
this.rootElement.append( this.contentOverlay );
this.rootElement.append( this.sidebarContainer );
var self = this;
/*if ( "onorientationchange" in window ) {
$(window).bind( "orientationchange", function(event){ self.resizeContent() } )
}
else {*/
//$(window).resize( function(event){ self.resizeContent() } );
//alert( this.parent.attr( "id" ) );
this.parent.resize( function(event){ self.resizeContent() } );
//}
if ( bindToWindow != false ) {
$(window).resize( function(event){ self.resizeContent() } );
}
else {
this.parent.resize( function(event){ self.resizeContent() } );
}
this.resizeContent();
this.parent.append( this.rootElement );
this.contentOverlay.click( function(event){ self.hideSidebar() } );
new NoClickDelay( this.contentOverlay.get()[0] );
new NoClickDelay( this.toggleSidebarButton.get()[0] );
window.splitViewNavigator = this;
}
SplitViewNavigator.prototype.resizeContent = function() {
this.applyStylesByOrientation();
this.sidebarViewNavigator.resizeContent();
this.bodyViewNavigator.resizeContent()
}
SplitViewNavigator.prototype.applyStylesByOrientation = function() {
var $window = $(window)
var w = $window.width();
var h = $window.height();
var orientation = (w >= h) ? "landscape" : "portrait";
this.contentOverlay.removeClass( "content_overlay_visible" ).addClass( "content_overlay_hidden" );
//landscape
if ( orientation == "landscape" && this.orientation != orientation ) {
this.sidebarContainer.removeClass( "sidebar_portrait" ).addClass( "sidebar_landscape" );
this.bodyViewNavigator.setHeaderPadding( 0 );
this.toggleSidebarButton.remove();
if ( this.animationPerformed ) {
this.sidebarContainer.css( "left", 0 );
}
this.bodyContainer.removeClass( "body_portrait" ).addClass( "body_landscape" );
}
//portrait
else if ( this.orientation != orientation ) {
this.sidebarContainer.removeClass( "sidebar_landscape" ).addClass( "sidebar_portrait" );
this.bodyViewNavigator.setHeaderPadding( "70px" );
this.bodyContainer.append( this.toggleSidebarButton );
if ( this.animationPerformed ) {
this.sidebarContainer.css( "left", -this.sidebarContainer.width() );
}
this.bodyContainer.removeClass( "body_landscape" ).addClass( "body_portrait" );
}
this.orientation = orientation;
}
SplitViewNavigator.prototype.showSidebar = function() {
this.animationPerformed = true;
if ( this.orientation == "portrait" ) {
this.contentOverlay.removeClass( "content_overlay_hidden" ).addClass( "content_overlay_visible" );
this.animating = true;
this.sidebarContainer.animate({
left:0,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration, this.animationCompleteHandler());
}
}
SplitViewNavigator.prototype.hideSidebar = function() {
if ( this.orientation == "portrait" ) {
this.contentOverlay.removeClass( "content_overlay_visible" ).addClass( "content_overlay_hidden" );
this.animating = true;
this.sidebarContainer.animate({
left:-this.sidebarContainer.width(),
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration, this.animationCompleteHandler());
}
}
SplitViewNavigator.prototype.animationCompleteHandler = function() {
var self = this;
return function() {
self.animating = false;
//self.resetScroller();
}
}
SplitViewNavigator.prototype.pushSidebarView = function( viewDescriptor ) {
this.sidebarViewNavigator.pushView( viewDescriptor );
}
SplitViewNavigator.prototype.popSidebarView = function() {
this.sidebarViewNavigator.popView();
}
SplitViewNavigator.prototype.replaceSidebarView = function( viewDescriptor ) {
this.sidebarViewNavigator.replaceView( viewDescriptor );
}
SplitViewNavigator.prototype.pushBodyView = function( viewDescriptor ) {
this.bodyViewNavigator.pushView( viewDescriptor );
}
SplitViewNavigator.prototype.popBodyView = function() {
this.bodyViewNavigator.popView();
}
SplitViewNavigator.prototype.replaceBodyView = function( viewDescriptor ) {
this.bodyViewNavigator.replaceView( viewDescriptor );
}
//GUID logic from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
SplitViewNavigator.prototype.S4 = function() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
SplitViewNavigator.prototype.guid = function() {
return (this.S4() + this.S4() + "-" + this.S4() + "-4" + this.S4().substr(0,3) + "-" + this.S4() + "-" + this.S4() + this.S4() + this.S4()).toLowerCase();
}

382
www/js/viewAssembler.js Normal file
View File

@ -0,0 +1,382 @@
var templates = {
aboutViewTemplate:"views/aboutViewTemplate.html",
defaultViewTemplate:"views/defaultViewTemplate.html",
findMarketsNearMeViewTemplate:"views/findMarketsNearMeViewTemplate.html",
geoPermissionDeniedViewTemplate:"views/geoPermissionDeniedViewTemplate.html",
mapViewTemplate:"views/mapViewTemplate.html",
marketDetailsViewTemplate:"views/marketDetailsViewTemplate.html",
marketMapViewTemplate:"views/marketMapViewTemplate.html",
marketsNearMeViewTemplate:"views/marketsNearMeViewTemplate.html",
searchResultsViewTemplate:"views/searchResultsViewTemplate.html",
searchViewTemplate:"views/searchViewTemplate.html",
loaded: 0,
requested: 0
};
var ___templatesLoadedCallback;
function loadTemplates(callback) {
___templatesLoadedCallback = callback;
//load Mousetache HTML templates
for (var key in templates) {
(function() {
var _key = key.toString();
if ( _key != "loaded" && _key != "requested" ){
templates.requested ++;
var templateLoaded = function( template ){
onTemplateLoaded( template, _key );
}
$.get( templates[ _key ], templateLoaded, "html" );
}
})();
}
}
function onTemplateLoaded(template, key) {
//alert( key + ": " + template);
templates[ key ] = template;
templates.loaded ++;
if ( templates.loaded == templates.requested ) {
___templatesLoadedCallback();
}
}
function isTablet() {
var _w = $(window).width();
var _h = $(window).height();
return (Math.min(_w,_h) >= 600);
}
function ViewAssembler() {
this.touchSupported = 'ontouchstart' in window;
//this.CLICK_EVENT = this.touchSupported ? 'touchend' : 'click';
this.CLICK_EVENT = 'click';
return this;
}
ViewAssembler.prototype.defaultView = function() {
var el = $( templates.defaultViewTemplate );
el.find("#nearMe").on( this.CLICK_EVENT, onNearbyViewClick );
el.find("#search").on( this.CLICK_EVENT, onSearchViewClick );
el.find("#about").on( this.CLICK_EVENT, onAboutViewClick );
return el;
}
ViewAssembler.prototype.aboutView = function() {
var el = $( templates.aboutViewTemplate );
return el;
}
ViewAssembler.prototype.findNearbyView = function() {
var el = $( templates.findMarketsNearMeViewTemplate );
return el;
}
ViewAssembler.prototype.nearbyMarketsView = function( latitude, longitude, marketsArr ) {
var result = [];
for ( var i=0; i< marketsArr.length; i++ ) {
var market = arrayToMarketObject( marketsArr[i] );
var lat1 = parseFloat(market.y);
var lon1 = parseFloat(market.x);
var lat2 = parseFloat(latitude);
var lon2 = parseFloat(longitude);
market.distance = Math.round( distance( lat1, lon1, lat2, lon2 ) );
result.push( market );
}
result.sort( function(a, b){
if ( a.distance < b.distance ) { return -1; }
else if (a.distance > b.distance ) { return 1; }
else return 0;
});
window.filteredMarkesList = result;
var viewModel = { latitude: latitude,
longitude: longitude,
mapWidth: $(window).width(),
mapHeight: 100,
markets: result
};
var template = templates.marketsNearMeViewTemplate;
var el = $( Mustache.to_html(template, viewModel) );
el.find( "li" ).on( this.CLICK_EVENT, onNearbyListItemClick );
el.find( "#mapButton" ).on( this.CLICK_EVENT, onMapButtonClick );
return el;
}
ViewAssembler.prototype.marketDetailsView = function( market ) {
var template = templates.marketDetailsViewTemplate;
return $( Mustache.to_html(template, market) );
}
ViewAssembler.prototype.searchView = function () {
var el = $( templates.searchViewTemplate );
var $state = el.find( "#search_state" );
var states = ["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Puerto Rico","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virgin Islands","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];
for ( var i in states ) {
$state.append($("<option></option>").text(states[i]));
}
el.find( "#searchButton" ).on( this.CLICK_EVENT, onSearchButtonClick );
return el;
}
ViewAssembler.prototype.searchResultsView = function( marketsArr, criteria ) {
var viewModel = {markets:[]};
for ( var i=0; i< marketsArr.length; i++ ) {
var market = arrayToMarketObject( marketsArr[i] );
viewModel.markets.push( market );
}
viewModel.markets.sort( function(a, b){
if ( a.marketName < b.marketName ) { return -1; }
else if (a.marketName > b.marketName ) { return 1; }
else return 0;
});
viewModel.overLength = viewModel.markets.length > 50;
viewModel.markets = viewModel.markets.slice( 0, Math.min(49, viewModel.markets.length-1));
viewModel.criteria = criteriaToString(criteria);
window.filteredMarkesList = viewModel.markets;
var template = templates.searchResultsViewTemplate;
var el = $( Mustache.to_html(template, viewModel) );
el.find( "li" ).on( this.CLICK_EVENT, onNearbyListItemClick );
el.find( "#mapButton" ).on( this.CLICK_EVENT, onSearchResultMapButtonClick );
return el;
}
ViewAssembler.prototype.geoPermissionDenied = function() {
var el = $( templates.geoPermissionDeniedViewTemplate );
return el;
}
ViewAssembler.prototype.mapView = function(centerLatLng) {
var el = $( templates.mapViewTemplate );
setTimeout( function(){
var map = new L.Map('map');
//cloudmadeUrl = 'http://{s}.tile.cloudmade.com/YOUR-API-KEY/997/256/{z}/{x}/{y}.png',
var cloudmadeUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
cloudmadeAttribution = 'Map data &copy; 2011 OpenStreetMap',
cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution});
map.addLayer(cloudmade);
var blueMarkerIcon = L.Icon.extend({
iconUrl: 'assets/map/marker-lightblue.png',
shadowUrl: 'assets/map/shadow.png',
iconSize: new L.Point(26, 40),
shadowSize: new L.Point(32, 39),
iconAnchor: new L.Point(14, 39),
popupAnchor: new L.Point(0, -35)
});
var yellowMarkerIcon = L.Icon.extend({
iconUrl: 'assets/map/marker-yellow.png',
shadowUrl: 'assets/map/shadow.png',
iconSize: new L.Point(26, 40),
shadowSize: new L.Point(32, 39),
iconAnchor: new L.Point(14, 40),
popupAnchor: new L.Point(13, 12)
});
var blueIcon = new blueMarkerIcon();
var yellowIcon = new yellowMarkerIcon();
var markersLayer = new L.LayerGroup();
var southWestBounds, northEastBounds, bounds;
if ( window.filteredMarkesList ) {
for ( var x=0; x<window.filteredMarkesList.length; x++ ) {
var market = window.filteredMarkesList[x];
if ( market.x != "" && market.y != "" ) {
var latLng = new L.LatLng(market.y, market.x);
var marker = new L.Marker(latLng, {icon: yellowIcon});
var popupContent = "<a class='button' href='javascript:showMarketDetailsFromMapClick(" + market.index + ");'>" + market.marketName + "</a>";
var popup = marker.bindPopup( popupContent, {offset:new L.Point(0,-35)} );
markersLayer.addLayer(marker);
if ( !southWestBounds ) {
southWestBounds = { lat:market.y, lon:market.x};
northEastBounds = { lat:market.y, lon:market.x};
}
else {
southWestBounds.lat = Math.min( southWestBounds.lat, market.y );
southWestBounds.lon = Math.min( southWestBounds.lon, market.x );
northEastBounds.lat = Math.max( northEastBounds.lat, market.y );
northEastBounds.lon = Math.max( northEastBounds.lon, market.x );
}
}
}
if ( southWestBounds ) {
//console.log(southWestBounds, northEastBounds);
var southWest = new L.LatLng(southWestBounds.lat,southWestBounds.lon),
northEast = new L.LatLng(northEastBounds.lat,northEastBounds.lon),
bounds = new L.LatLngBounds(southWest, northEast);
}
map.addLayer(markersLayer);
}
var onLocationFound = function (e) {
var radius = e.accuracy / 2;
var marker = new L.Marker(e.latlng, {icon: blueIcon});
markersLayer.addLayer(marker);
marker.bindPopup("You are within " + radius + " meters from this point");
var circle = new L.Circle(e.latlng, radius);
markersLayer.addLayer(circle);
}
var onLocationError = function (e) {
alert(e.message);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
if ( centerLatLng == undefined ){
if ( bounds ) {
map.fitBounds(bounds);
map.locate();
}
else {
map.locateAndSetView(7);
}
}
else {
if ( bounds ) {
map.fitBounds(bounds);
map.locate();
}
else {
map.setView( centerLatLng, (isTablet() ? 7 : 6) );
}
}
var currentViewDescriptor = window.viewNavigator.history[ window.viewNavigator.history.length-1 ];
currentViewDescriptor.showCallback = function() {
//this is to work around a weird issue in Leaflet maps in iOS, where
//dragging stops working after a new view has been pushed onto the stack
var latLng = map.getCenter();
var zoom = map.getZoom();
map.removeLayer( cloudmade );
map.removeLayer( markersLayer );
$('#mapContainer').children().remove();
$('#mapContainer').append( $("<div id='map' style='width:100%; height:100%'></div>") );
map = new L.Map('map');
map.addLayer( cloudmade );
map.addLayer( markersLayer );
map.setView( latLng, zoom, true );
}
}, 150 );
return el;
}
ViewAssembler.prototype.marketMapView = function(market) {
var template = templates.marketMapViewTemplate;
var el = $( Mustache.to_html(template, market) );
setTimeout( function(){
var map = new L.Map('map');
//cloudmadeUrl = 'http://{s}.tile.cloudmade.com/YOUR-API-KEY/997/256/{z}/{x}/{y}.png',
var cloudmadeUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
cloudmadeAttribution = 'Map data &copy; 2011 OpenStreetMap',
cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution});
map.addLayer(cloudmade);
var blueMarkerIcon = L.Icon.extend({
iconUrl: 'assets/map/marker-lightblue.png',
shadowUrl: 'assets/map/shadow.png',
iconSize: new L.Point(26, 40),
shadowSize: new L.Point(32, 39),
iconAnchor: new L.Point(14, 39),
popupAnchor: new L.Point(0, -35)
});
var yellowMarkerIcon = L.Icon.extend({
iconUrl: 'assets/map/marker-yellow.png',
shadowUrl: 'assets/map/shadow.png',
iconSize: new L.Point(26, 40),
shadowSize: new L.Point(32, 39),
iconAnchor: new L.Point(14, 40),
popupAnchor: new L.Point(13, 12)
});
var blueIcon = new blueMarkerIcon();
var yellowIcon = new yellowMarkerIcon();
var markersLayer = new L.LayerGroup();;
if ( market ) {
var latLng = new L.LatLng(market.y, market.x);
var marker = new L.Marker(latLng, {icon: yellowIcon});
var popupContent = "<a class='button' href='javascript:showMarketDetailsFromMapClick(" + market.index + ");'>" + market.marketName + "</a>";
marker.bindPopup( popupContent, {offset:new L.Point(0,-35)} );
markersLayer.addLayer(marker);
map.addLayer(markersLayer);
}
var onLocationFound = function (e) {
var radius = e.accuracy / 2;
var marker = new L.Marker(e.latlng, {icon: blueIcon});
markersLayer.addLayer(marker);
marker.bindPopup("You are within " + radius + " meters from this point");
var circle = new L.Circle(e.latlng, radius);
markersLayer.addLayer(circle);
}
var onLocationError = function (e) {
alert(e.message);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
map.locate();
map.setView( new L.LatLng( market.y, market.x ), 14 );
}, 150 );
return el;
}

View File

@ -0,0 +1,149 @@
/*
THIS SOFTWARE IS PROVIDED BY ANDREW M. TRICE ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREW M. TRICE OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
.viewNavigator_root {
width:100%;
height:100%;
background-color:666666;
overflow:hidden;
}
.viewNavigator_header {
position:absolute;
width:100%;
height:46px;
overflow:hide;
padding:0px;
}
.viewNavigator_header_backlink {
position:absolute;
top:0px;
left:0px;
z-index:2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
max-width:30%;
}
.viewNavigator_header_title {
position:absolute;
top:12px;
left:0%;
right:0%;
margin-left:auto;
margin-right:auto;
text-align:center;
font-weight: bold;
color: #FFFFFF;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
max-width:48%;
}
.viewNavigator_headerContent {
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
position:absolute;
}
.viewNavigator_content {
position:absolute;
top:46px;
left:0px;
right:0px;
bottom:0px;
overflow:hidden;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
-webkit-transform:translate3d(0,0,0);
}
/* ANDROID BUG WORKAROUND */
.viewNavigator_content select {
overflow:auto;
position:relative;
backface-visibility: auto;
-webkit-backface-visibility: auto;
}
/*
.viewNavigator_content div {
backface-visibility: visible;
-webkit-backface-visibility: visible;
-webkit-transform: translate3d(0,0,0);
}*/
.viewNavigator_contentHolder {
position:absolute;
top:0px;
left:0px;
right:0px;
bottom:0px;
background-color:white;
overflow:auto;
padding:0px;
margin:0px;
overflow: hidden;
-webkit-overflow-scrolling : touch;
min-width:100%;
min-height:100%
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
.viewNavigator_backface {
/* backface-visibility: hidden;
-webkit-backface-visibility: hidden;
*/
}
.viewNavigator_backButtonPosition {
position:absolute;
left: 5px;
top: .6em;
}
.viewNavigator_backButton
{
cursor:pointer;
display: inline-block;
white-space: nowrap;
background-color: #ccc;
border-radius: .2em;
padding: 4px 10px;
box-shadow: 0 0 1px 1px rgba(255,255,255,.8) inset, 0 1px 0 rgba(0,0,0,.3);
}
.viewNavigator_backButton:active
{
background-color: #ddd;
}

View File

@ -0,0 +1,377 @@
/*
THIS SOFTWARE IS PROVIDED BY ANDREW M. TRICE ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREW M. TRICE OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
var ViewNavigator = function( target, backLinkCSS, bindToWindow ) {
this.supportsBackKey = true; //phonegap on android only
this.animating = false;
this.animationX = 150;
this.animationDuration = 400;
this.history = [];
this.scroller = null;
this.headerPadding = 5;
this.uniqueId = this.guid();
var regexp = new RegExp("Windows Phone OS 7");
this.winPhone = (navigator.userAgent.search(regexp) >= 0);
this.rootElement = $('<div class="viewNavigator_root"></div>');
this.header = $('<div class="viewNavigator_header"></div>');
this.content = $('<div class="viewNavigator_content" id="contentRoot"></div>');
this.rootElement.append( this.header );
this.rootElement.append( this.content );
this.parent = $( target );
this.backLinkCSS = backLinkCSS ? backLinkCSS : "viewNavigator_backButton";
var self = this;
//$(window).resize( function(event){ self.resizeContent() } );
//alert( this.parent.toString() );
//this.parent.resize( function(event){ self.resizeContent() } );
if ( bindToWindow != false ) {
$(window).resize( function(event){ self.resizeContent() } );
}
else {
this.parent.resize( function(event){ self.resizeContent() } );
}
this.parent.append( this.rootElement );
if ( window.viewNavigators == null || window.viewNavigators == undefined ) {
window.viewNavigators = {};
}
window.viewNavigators[ this.uniqueId ] = this;
}
ViewNavigator.prototype.replaceView = function( viewDescriptor ) {
if (this.animating)
return;
viewDescriptor.animation = "pushEffect"
//this is a hack to mimic behavior of pushView, then pop off the "current" from the history
this.history.push( viewDescriptor );
this.updateView( viewDescriptor );
this.history.pop();
this.history.pop();
this.history.push( viewDescriptor );
}
ViewNavigator.prototype.pushView = function( viewDescriptor ) {
if (this.animating)
return;
viewDescriptor.animation = "pushEffect"
this.history.push( viewDescriptor );
this.updateView( viewDescriptor );
}
ViewNavigator.prototype.popView = function() {
if (this.animating || this.history.length <= 1 )
return;
var currentViewDescriptor = this.history[ this.history.length-1];
if ( currentViewDescriptor.backCallback ) {
currentViewDescriptor.backCallback();
}
this.history.pop();
var viewDescriptor = this.history[ this.history.length-1 ];
viewDescriptor.animation = "popEffect"
this.updateView( viewDescriptor );
}
ViewNavigator.prototype.setHeaderPadding = function( amount ) {
this.headerPadding = amount;
if ( this.headerBacklink ) {
this.headerBacklink.css("left", amount);
}
}
ViewNavigator.prototype.updateView = function( viewDescriptor ) {
this.animating = true;
this.contentPendingRemove = this.contentViewHolder;
this.headerContentPendingRemove = this.headerContent;
this.headerContent = $('<div class="viewNavigator_headerContent"></div>');
this.headerTitle = $("<div class='viewNavigator_header_title'>" + viewDescriptor.title + "</div>");
this.headerContent.append( this.headerTitle );
var linkGuid = this.guid();
if ( viewDescriptor.backLabel ) {
this.headerBacklink = $('<li class="viewNavigator_header_backlink viewNavigator_backButtonPosition ' + this.backLinkCSS +'" id="link' + linkGuid + '" onclick="window.viewNavigators[\'' + this.uniqueId + '\'].popView()">'+ viewDescriptor.backLabel + '</li>');
this.headerContent.append( this.headerBacklink );
//this is for proper handling in splitviewnavigator
this.setHeaderPadding( this.headerPadding );
}
var id = this.guid();
this.contentViewHolder = $('<div class="viewNavigator_contentHolder" id="' + id + '"></div>');
this.contentViewHolder.append( viewDescriptor.view );
this.resizeContent();
if ( this.contentPendingRemove ){
this.contentPendingRemove.stop()
}
if ( this.headerContentPendingRemove ) {
this.headerContentPendingRemove.stop()
}
this.headerContent.stop()
this.contentViewHolder.stop()
if ( this.scroller != null ) {
var scrollY = this.scroller.y;
this.scroller.destroy();
this.scroller = null;
if (this.contentPendingRemove) {
//console.log( scrollY );
//use this to mantain scroll position when scroller is destroyed
var children = $( this.contentPendingRemove.children()[0] );
children.attr( "scrollY", scrollY );
var originalTopMargin = children.css( "margin-top" );
children.attr( "originalTopMargin", originalTopMargin );
var cssString = "translate3d(0px, "+(parseInt( scrollY ) + parseInt( originalTopMargin )).toString()+"px, 0px)";
children.css( "-webkit-transform", cssString );
// children.css( "margin-top", (parseInt( scrollY ) + parseInt( originalTopMargin )).toString() + "px" );
}
}
$(this.contentPendingRemove).click(function(){ return false; });
if ( viewDescriptor.animation == "popEffect" ) {
this.contentViewHolder.css( "left", -this.contentViewHolder.width() );
this.contentViewHolder.css( "opacity", 1 );
this.content.prepend( this.contentViewHolder );
this.headerContent.css( "left", -this.animationX );
this.headerContent.css( "opacity", 0 );
this.header.append( this.headerContent );
var func = this.animationCompleteHandler(this.contentPendingRemove, this.headerContentPendingRemove, this.headerContent, this.contentViewHolder );
this.contentPendingRemove.animate({
left:this.contentViewHolder.width(),
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration*0.8);
//remove this to change back
this.contentViewHolder.animate({
left:0,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration/2);
this.headerContentPendingRemove.animate({
left:this.animationX,
opacity:0,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration, func );
this.headerContent.animate({
left:0,
opacity:1,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration/2 );
//using a timeout to get around inconsistent response times for webkittransitionend event
//var func = this.animationCompleteHandler(this.contentPendingRemove, this.headerContentPendingRemove, this.headerContent, this.contentViewHolder );
//setTimeout( func, this.animationDuration+90 );
}
else if ( this.history.length > 1 ) {
this.contentViewHolder.css( "left", this.contentViewHolder.width() );
this.contentViewHolder.css( "opacity", 1 );
this.content.append( this.contentViewHolder );
this.headerContent.css( "left", this.animationX );
this.headerContent.css( "opacity", 0 );
this.header.append( this.headerContent );
var func = this.animationCompleteHandler(this.contentPendingRemove, this.headerContentPendingRemove, this.headerContent, this.contentViewHolder );
this.contentViewHolder.animate({
left:0,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration*0.75);
this.contentPendingRemove.animate({
left:-this.contentViewHolder.width()/2,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration, func);
this.headerContent.animate({
left:0,
opacity:1,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration*0.75);
this.headerContentPendingRemove.animate({
left:-this.animationX,
opacity:0,
avoidTransforms:false,
useTranslate3d: true
}, this.animationDuration );
//using a timeout to get around inconsistent response times for webkittransitionend event
//var func = this.animationCompleteHandler(this.contentPendingRemove, this.headerContentPendingRemove, this.headerContent, this.contentViewHolder );
//setTimeout( func, this.animationDuration+90 );
}
else {
this.contentViewHolder.css( "left", 0 );
this.contentViewHolder.css( "opacity", 1 );
this.content.append( this.contentViewHolder );
this.headerContent.css( "left", 0 );
this.headerContent.css( "opacity", 1 );
this.header.append( this.headerContent );
this.animating = false;
this.resetScroller();
}
if ( viewDescriptor.backLabel ) {
new NoClickDelay( this.headerBacklink.get()[0] );
}
if ( viewDescriptor.showCallback ) {
viewDescriptor.showCallback();
}
}
ViewNavigator.prototype.resetScroller = function() {
var id = this.contentViewHolder.attr( "id" );
var currentViewDescriptor = this.history[ this.history.length-1];
if ( !this.winPhone ) {
if ( this.scroller != null ) {
this.scroller.destroy();
this.scroller = null;
}
if ( id && !(currentViewDescriptor && currentViewDescriptor.scroll === false)) {
var self = this;
setTimeout( function() {
//use this to mantain scroll position when scroller is destroyed
var targetDiv = $( $("#"+id ).children()[0] );
var scrollY= targetDiv.attr( "scrollY" );
var originalTopMargin = targetDiv.attr( "originalTopMargin" );
if ( scrollY != undefined && scrollY != "" ){
// console.log( "resetScroller scrollY: " + scrollY)
// targetDiv.css( "margin-top", originalTopMargin );
var cssString = "translate3d(0px, "+(originalTopMargin).toString()+"px, 0px)";
targetDiv.css( "-webkit-transform", cssString );
}
self.scroller = new iScroll( id );
if ( scrollY != undefined && scrollY != "" ) {
self.scroller.scrollTo( 0, parseInt( scrollY ) );
}
}, 10 );
//this.scroller = new iScroll( id );
}
}
}
ViewNavigator.prototype.refreshScroller = function() {
if ( !this.winPhone ) {
if ( this.scroller != null ) {
this.scroller.refresh();
}
}
}
ViewNavigator.prototype.animationCompleteHandler = function(removalTarget, headerRemovalTarget, headerView, contentView) {
var self = this;
return function() {
self.animating = false;
self.resetScroller();
if ( removalTarget ) {
removalTarget.unbind( "click" );
removalTarget.detach();
}
if ( headerRemovalTarget ) {
headerRemovalTarget.unbind( "click" );
headerRemovalTarget.detach();
}
}
}
ViewNavigator.prototype.resizeContent = function(event) {
var targetWidth = this.parent.width();
if ( this.headerContent )
this.headerContent.width( targetWidth );
if ( this.contentViewHolder )
this.contentViewHolder.width( targetWidth );
}
//GUID logic from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
ViewNavigator.prototype.S4 = function() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
ViewNavigator.prototype.guid = function() {
return (this.S4() + this.S4() + "-" + this.S4() + "-4" + this.S4().substr(0,3) + "-" + this.S4() + "-" + this.S4() + this.S4() + this.S4()).toLowerCase();
}
/* PHONEGAP INTEGRATION */
/*
//android+phonegap specific back button support - will only work if phonegap is used on android (www.phonegap.com)
if ( typeof PhoneGap != 'undefined' ) {
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
document.addEventListener("backbutton", onBackKey, false);
}
function onBackKey( event ) {
event.preventDefault();
window.viewNavigator.popView();
for ( var x=0; x<window.backKeyViewNavigators.length; x++ ) {
window.backKeyViewNavigators[x].popView();
}
}
*/

View File

@ -0,0 +1,35 @@
<div id="aboutView">
<h2>Fresh Food Finder</h2>
The <strong>Fresh Food Finder</strong> is the easiest way to locate farmers markets wherever you may be. The Fresh Food Finder allows you to easily find farmers markets near your current location, or easily search for farmers markets within a state, city, or zipcode.
<br/> <br/>
All of the information displayed within the <strong>Fresh Food Finder</strong> is freely available from the <a href="javascript:openExternalURL('http://www.ams.usda.gov/AMSv1.0/farmersmarkets')">US Department of Agriculture</a> through <a href="javascript:openExternalURL('https://explore.data.gov/Agriculture/Farmers-Markets-Geographic-Data/wfna-38ey')">data.gov</a>. This data set was last updated on April 25, 2012. The Fresh Food Finder is not responsible for the quality or accuracy of this data.
<br/> <br/>
Should you encounter any errors or discover inaccurate data, please <a href="javascript:openExternalURL('http://www.tricedesigns.com/fresh-food-finder/')">contact us and let us know so we can fix it</a>!
<hr/><strong>Fresh Food Finder</strong> was created using the following free &amp; open source software:
<ul>
<li><a href="javascript:openExternalURL('http://www.phonegap.com')">PhoneGap</a></li>
<li><a href="javascript:openExternalURL('http://www.jquery.com')">jQuery</a></li>
<li><a href="javascript:openExternalURL('https://github.com/janl/mustache.js')">Mustache.js</a></li>
<li><a href="javascript:openExternalURL('http://triceam.github.com/app-UI')">app-UI</a></li>
<li><a href="javascript:openExternalURL('http://leaflet.cloudmade.com/')">Leaflet</a></li>
<li><a href="javascript:openExternalURL('http://appicontemplate.com')">App Icon Template</a></li>
</ul>
Map imagery &copy; 2011 <a href="javascript:openExternalURL('http://openstreetmap.org/')">OpenStreetMap</a>
<hr/><strong>Fresh Food Finder</strong> is an open source application intended to not only be useful, but to demonstrate how to build natively installed applications using web technologies. You can learn more and download the source code from <a href="javascript:openExternalURL('http://www.tricedesigns.com/fresh-food-finder/')">http://www.tricedesigns.com/fresh-food-finder/</a>.
<hr/>THIS SOFTWARE IS PROVIDED BY ANDREW M. TRICE ''AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDREW M. TRICE OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<hr/>All graphics used within this application obtained through <a href="javascript:openExternalURL('http://thenounproject.com/')">thenounproject.com</a>. "Map Marker" symbol by P.J. Onori. "Paint" symbol by Okan Benn. "Cherries" by Christian Michael Witternigg. "Leaf" by Fellipe Silva. "Jar" by Connor Cesa. "Information" by Sven Hofmann. "Chicken", "Hazelnuts", by Kate Vogel. "Acorn" by Proletkult Graphik. "Plant" by Umbra7 Design. "Soap" by Proletkult Graphik.
"Sansation" font available through <a href="javascript:openExternalURL('http://www.fontsquirrel.com/fonts/Sansation')">fontsquirrel.com</a>.
</div>

View File

@ -0,0 +1,25 @@
<div id="defaultView">
<h2>Fresh Food Finder</h2>
<div><a id="nearMe" href="#">Find Markets Near Me</a></div>
<div><a id="search" href="#">Search For a Market</a></div>
<div><a id="about" href="#">About This App</a></div>
<div id="preload" style="display:none">
<div id="bakedgoods" class="amenities">Baked Goods</div>
<div id="cheese" class="amenities">Cheese</div>
<div id="arts" class="amenities">Arts &amp; Crafts</div>
<div id="flowers" class="amenities">Flowers</div>
<div id="seafood" class="amenities">Seafood</div>
<div id="fruit" class="amenities">Fruit</div>
<div id="herbs" class="amenities">Herbs</div>
<div id="vegetables" class="amenities">Vegetables</div>
<div id="honey" class="amenities">Honey</div>
<div id="jams" class="amenities">Jams</div>
<div id="maple" class="amenities">Maple</div>
<div id="nuts" class="amenities">Nuts</div>
<div id="meat" class="amenities">Meats</div>
<div id="plants" class="amenities">Plants</div>
<div id="prepared" class="amenities">Prepared Foods</div>
<div id="soap" class="amenities">Soap</div>
</div>
</div>

View File

@ -0,0 +1,5 @@
<div id="findMarketsNearMeView">
<div class="padded">acquiring location...</div>
<div class="activityIndicator"></div>
</div>

View File

@ -0,0 +1,8 @@
<div id="geoError">
<div class="warning">
<h1 >Warning!</h1>
We were unable to determine your location. Please ensure that location services are enabled on your device and try again.
</div>
</div>

View File

@ -0,0 +1,2 @@
<div id="listParent" style="width:100%;height:100%"><div id="list" class="list"/></div>

View File

@ -0,0 +1,4 @@
<div id="mapContainer" style="width:100%;height:100%">
<div id="map" style="width:100%;height:100%"></div>
</div>

View File

@ -0,0 +1,121 @@
<div id="marketDetailsView">
<h2>{{marketName}}</h2>
<!-- website -->
{{#website}}
<div class="paragraph">
<strong>Website: </strong>
<a href="javascript:openExternalURL('{{website}}')" target="_blank">{{website}}</a>
</div>
{{/website}}
<!-- address -->
<div class="paragraph">
<strong>Location: </strong><br/>
{{#street}}
{{street}},<br/>
{{/street}}
{{city}}, {{state}}, {{zip}}<br/><br/>
<!-- <a class="button">Search The Web For This Address</a> -->
{{#county}}
<strong>County: </strong><br/>
{{county}}<br/><br/>
{{/county}}
<!-- location details --->
{{#location}}
<strong>Notes: </strong><br/>
{{location}}<br/><br/>
{{/location}}
<!-- map location --->
{{#y}}
Lat: {{y}}, Lng: {{x}}<br/><br/>
<a class="button" href="javascript:viewInMap({{index}})">View in Map</a>
<a class="button" href="javascript:getDirections({{index}})">Get Directions</a>
<!-- <a href="http://maps.google.com/maps?q={{y}},{{x}}" target="_blank">{{y}},{{x}}</a> -->
{{/y}}
</div>
{{#paymentDetail}}
<div class="paragraph">
<strong>Payment Options: </strong><br/>
{{#credit}}
<div id="credit_cards" class="amenities">Credit Cards Accepted</div>
{{/credit}}
{{#wic}}
<div id="wic_accepted" class="amenities">WIC Accepted</div>
{{/wic}}
{{#wiccash}}
<div id="wic_accepted" class="amenities">WIC Cash Accepted</div>
{{/wiccash}}
{{#sfmnp}}
<div id="senior" class="amenities">SFMNP Accepted</div>
{{/sfmnp}}
{{#snap}}
<div id="snap" class="amenities">SNAP Accepted</div>
{{/snap}}
</div>
{{/paymentDetail}}
{{#productDetail}}
<div class="paragraph">
<strong>Available Goods: </strong><br/>
{{#bakedgoods}}
<div id="bakedgoods" class="amenities">Baked Goods</div>
{{/bakedgoods}}
{{#cheese}}
<div id="cheese" class="amenities">Cheese</div>
{{/cheese}}
{{#crafts}}
<div id="arts" class="amenities">Arts &amp; Crafts</div>
{{/crafts}}
{{#flowers}}
<div id="flowers" class="amenities">Flowers</div>
{{/flowers}}
{{#seafood}}
<div id="seafood" class="amenities">Seafood</div>
{{/seafood}}
{{#fruit}}
<div id="fruit" class="amenities">Fruit</div>
{{/fruit}}
{{#herbs}}
<div id="herbs" class="amenities">Herbs</div>
{{/herbs}}
{{#vegetables}}
<div id="vegetables" class="amenities">Vegetables</div>
{{/vegetables}}
{{#honey}}
<div id="honey" class="amenities">Honey</div>
{{/honey}}
{{#jams}}
<div id="jams" class="amenities">Jams</div>
{{/jams}}
{{#maple}}
<div id="maple" class="amenities">Maple</div>
{{/maple}}
{{#nuts}}
<div id="nuts" class="amenities">Nuts</div>
{{/nuts}}
{{#meat}}
<div id="meat" class="amenities">Meats</div>
{{/meat}}
{{#plants}}
<div id="plants" class="amenities">Plants</div>
{{/plants}}
{{#prepared}}
<div id="prepared" class="amenities">Prepared Foods</div>
{{/prepared}}
{{#soap}}
<div id="soap" class="amenities">Soap</div>
{{/soap}}
<div class="subtext">(icons may not reflect actual products available)</div>
</div>
{{/productDetail}}
</div>

View File

@ -0,0 +1,9 @@
<div id="marketMapView">
<div id="marketMapContainer" >
<div id="map" style="width:100%;height:100%"></div>
</div>
<div id="footer">
<a class="button" href="javascript:getDirections({{index}})">Get Directions</a>
</div>
</div>

View File

@ -0,0 +1,14 @@
<div id="marketsNearMeView">
<div class="padded heading">
Markets within 100 miles:
<a id="mapButton" class="button right">MAP VIEW</a>
</div>
<div class="data-list">
<ul>
{{#markets}}
<li index="{{index}}"><strong>{{marketName}}</strong><div class="subtext">{{distance}} miles</div></li>
{{/markets}}
</ul>
</div>
</div>

View File

@ -0,0 +1,24 @@
<div id="searchResultsView" class="data-list" >
<div class="padded heading">
<a id="mapButton" class="button right">MAP VIEW</a>
Results for criteria: <br/>{{criteria}}
</div>
{{#overLength}}
<div class="padded warning">Please refine your search results, only the first 50 results are displayed.</div>
{{/overLength}}
<ul>
{{#markets}}
<li index="{{index}}">
<strong>{{marketName}}</strong><br/>
{{#street}}
{{street}}<br/>
{{/street}}
{{city}}, {{state}}, {{zip}}
</li>
{{/markets}}
</ul>
</div>

View File

@ -0,0 +1,48 @@
<div id="searchView" >
<div class="paragraph_noborder">
<strong>State:</strong><br/>
<select id="search_state" ></select>
</div>
<div class="paragraph">
<strong>Search Phrase:</strong><br/>
<input type="text" id="search_searchPhrase" prompt="Search Phrase" />
<div class="subtext">You may enter a city name, zip code, county name, or market name in the search phrase field.</div>
<div class="paragraph_noborder"><a class="button" id="searchButton" href="#">Search</a></div>
<div class="paragraph">
<strong>Filter By Product:</strong><br/><br/>
<div class="searchfilter"><input type="checkbox" id="search_bakedGoods" /><label for="search_bakedGoods" id="bakedgoods" class="amenities">Baked Goods</label></div>
<div class="searchfilter"><input type="checkbox" id="search_cheese" /><label for="search_cheese" id="cheese" class="amenities">Cheese</label></div>
<div class="searchfilter"><input type="checkbox" id="search_crafts" /><label for="search_crafts" id="arts" class="amenities">Arts &amp; Crafts</label></div>
<div class="searchfilter"><input type="checkbox" id="search_flowers" /><label for="search_flowers" id="flowers" class="amenities">Flowers</label></div>
<div class="searchfilter"><input type="checkbox" id="search_seafood" /><label for="search_seafood" id="seafood" class="amenities">Seafood</label></div>
<div class="searchfilter"><input type="checkbox" id="search_fruit" /><label for="search_fruit" id="fruit" class="amenities">Fruits</label></div>
<div class="searchfilter"><input type="checkbox" id="search_herbs" /><label for="search_herbs" id="herbs" class="amenities">Herbs</label></div>
<div class="searchfilter"><input type="checkbox" id="search_vegetables" /><label for="search_vegetables" id="vegetables" class="amenities">Vegetables</label></div>
<div class="searchfilter"><input type="checkbox" id="search_honey" /><label for="search_honey" id="honey" class="amenities">Honey</label></div>
<div class="searchfilter"><input type="checkbox" id="search_jams" /><label for="search_jams" id="jams" class="amenities">Jams</label></div>
<div class="searchfilter"><input type="checkbox" id="search_maple" /><label for="search_maple" id="maple" class="amenities">Maple</label></div>
<div class="searchfilter"><input type="checkbox" id="search_meat" /><label for="search_meat" id="meat" class="amenities">Meat</label></div>
<div class="searchfilter"><input type="checkbox" id="search_nuts" /><label for="search_nuts" id="nuts" class="amenities">Nuts</label></div>
<div class="searchfilter"><input type="checkbox" id="search_plants" /><label for="search_plants" id="plants" class="amenities">Plants</label></div>
<div class="searchfilter"><input type="checkbox" id="search_soap" /><label for="search_soap" id="soap" class="amenities">Soap</label></div>
<br/><br/>
<strong>Filter By Payment:</strong><br/><br/>
<div class="searchfilter"><input type="checkbox" id="search_credit" /><label id="credit_cards" class="amenities"for="search_credit">Credit Cards Accepted</label></div>
<div class="searchfilter"><input type="checkbox" id="search_wic" /><label for="search_wic" id="wic_accepted" class="amenities">WIC Accepted</label></div>
<div class="searchfilter"><input type="checkbox" id="search_wiccash" /><label for="search_wiccash" id="wic_accepted" class="amenities">WIC Cash Accepted</label></div>
<div class="searchfilter"><input type="checkbox" id="search_sfmnp" /><label for="search_sfmnp" id="senior" class="amenities">SFMNP Accepted</label></div>
<div class="searchfilter"><input type="checkbox" id="search_snap" /><label for="search_snap" id="snap" class="amenities">SNAP Accepted</label></div>
<br/><br/>
<a class="button" id="searchButton" href="#">Search</a>
</div>
</div>
</div>