From: Chuck Scott Date: Tue, 13 Dec 2016 18:26:13 +0000 (-0500) Subject: Added support for Near Me searches X-Git-Tag: v2.8.5^2~13 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=cb49c6163a6f736e65fcca50f83edfbd2521c01e;p=WP-Plugins%2Fglm-member-db.git Added support for Near Me searches adminHooks has hook to return quick lat/lon and text search results memberDataByLatLon.php model added to do these searches Added the following libraries to js directory googMapsMarkerClusterer js-cookie-master for cookie management from JAVAScript js-storage-master for browser data storage from JAVAScript Added map icon sets to assets directory --- diff --git a/assets/MapIcons/blackIcons/00_reference.html b/assets/MapIcons/blackIcons/00_reference.html new file mode 100644 index 00000000..bbf71389 --- /dev/null +++ b/assets/MapIcons/blackIcons/00_reference.html @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abseiling.svg
accounting.svg
airport.svg
amusement-park.svg
aquarium.svg
archery.svg
art-gallery.svg
assistive-listening-system.svg
atm.svg
audio-description.svg
bakery.svg
bank.svg
bar.svg
baseball.svg
beauty-salon.svg
bicycle-store.svg
bicycling.svg
boating.svg
boat-ramp.svg
boat-tour.svg
book-store.svg
bowling-alley.svg
braille.svg
bus-station.svg
cafe.svg
campground.svg
canoe.svg
car-dealer.svg
car-rental.svg
car-repair.svg
car-wash.svg
casino.svg
cemetery.svg
chairlift.svg
church.svg
circle.svg
city-hall.svg
climbing.svg
closed-captioning.svg
clothing-store.svg
compass.svg
convenience-store.svg
courthouse.svg
cross-country-skiing.svg
crosshairs.svg
dentist.svg
department-store.svg
diving.svg
doctor.svg
electrician.svg
electronics-store.svg
embassy.svg
expand.svg
female.svg
finance.svg
fire-station.svg
fish-cleaning.svg
fishing-pier.svg
fishing.svg
florist.svg
food.svg
fullscreen.svg
funeral-home.svg
furniture-store.svg
gas-station.svg
general-contractor.svg
golf.svg
grocery-or-supermarket.svg
gym.svg
hair-care.svg
hang-gliding.svg
hardware-store.svg
health.svg
hindu-temple.svg
horse-riding.svg
hospital.svg
ice-fishing.svg
ice-skating.svg
inline-skating.svg
insurance-agency.svg
jet-skiing.svg
jewelry-store.svg
kayaking.svg
laundry.svg
lawyer.svg
library.svg
liquor-store.svg
local-government.svg
location-arrow.svg
locksmith.svg
lodging.svg
low-vision-access.svg
male.svg
map-pin.svg
marina.svg
mosque.svg
motobike-trail.svg
movie-rental.svg
movie-theater.svg
moving-company.svg
museum.svg
natural-feature.svg
night-club.svg
open-captioning.svg
painter.svg
parking.svg
park.svg
pet-store.svg
pharmacy.svg
physiotherapist.svg
place-of-worship.svg
playground.svg
plumber.svg
point-of-interest.svg
police.svg
political.svg
postal-code-prefix.svg
postal-code.svg
post-box.svg
post-office.svg
rafting.svg
real-estate-agency.svg
restaurant.svg
roofing-contractor.svg
route-pin.svg
route.svg
rv-park.svg
sailing.svg
school.svg
scuba-diving.svg
search.svg
sheild.svg
shopping-mall.svg
sign-language.svg
skateboarding.svg
skiing.svg
ski-jumping.svg
sledding.svg
snowboarding.svg
snowmobile.svg
snow-shoeing.svg
snow.svg
spa.svg
square-pin.svg
square-rounded.svg
square.svg
stadium.svg
storage.svg
store.svg
subway-station.svg
surfing.svg
swimming.svg
synagogue.svg
taxi-stand.svg
tennis.svg
toilet.svg
trail-walking.svg
train-station.svg
transit-station.svg
travel-agency.svg
unisex.svg
university.svg
veterinary-care.svg
viewing.svg
volume-control-telephone.svg
walking.svg
waterskiing.svg
whale-watching.svg
wheelchair.svg
wind-surfing.svg
zoom-in-alt.svg
zoom-in.svg
zoom-out-alt.svg
zoom-out.svg
zoo.svg
\ No newline at end of file diff --git a/assets/MapIcons/blackIcons/abseiling.svg b/assets/MapIcons/blackIcons/abseiling.svg new file mode 100644 index 00000000..5f48712b --- /dev/null +++ b/assets/MapIcons/blackIcons/abseiling.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/accounting.svg b/assets/MapIcons/blackIcons/accounting.svg new file mode 100644 index 00000000..8e24414d --- /dev/null +++ b/assets/MapIcons/blackIcons/accounting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/airport.svg b/assets/MapIcons/blackIcons/airport.svg new file mode 100644 index 00000000..e7adebd8 --- /dev/null +++ b/assets/MapIcons/blackIcons/airport.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/amusement-park.svg b/assets/MapIcons/blackIcons/amusement-park.svg new file mode 100644 index 00000000..534ee1fc --- /dev/null +++ b/assets/MapIcons/blackIcons/amusement-park.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/aquarium.svg b/assets/MapIcons/blackIcons/aquarium.svg new file mode 100644 index 00000000..99bfe2c7 --- /dev/null +++ b/assets/MapIcons/blackIcons/aquarium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/archery.svg b/assets/MapIcons/blackIcons/archery.svg new file mode 100644 index 00000000..972cc675 --- /dev/null +++ b/assets/MapIcons/blackIcons/archery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/art-gallery.svg b/assets/MapIcons/blackIcons/art-gallery.svg new file mode 100644 index 00000000..69771a24 --- /dev/null +++ b/assets/MapIcons/blackIcons/art-gallery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/assistive-listening-system.svg b/assets/MapIcons/blackIcons/assistive-listening-system.svg new file mode 100644 index 00000000..00248fd9 --- /dev/null +++ b/assets/MapIcons/blackIcons/assistive-listening-system.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/atm.svg b/assets/MapIcons/blackIcons/atm.svg new file mode 100644 index 00000000..db8121dc --- /dev/null +++ b/assets/MapIcons/blackIcons/atm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/audio-description.svg b/assets/MapIcons/blackIcons/audio-description.svg new file mode 100644 index 00000000..00d9c99d --- /dev/null +++ b/assets/MapIcons/blackIcons/audio-description.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bakery.svg b/assets/MapIcons/blackIcons/bakery.svg new file mode 100644 index 00000000..c1af96ce --- /dev/null +++ b/assets/MapIcons/blackIcons/bakery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bank.svg b/assets/MapIcons/blackIcons/bank.svg new file mode 100644 index 00000000..8ac44dd4 --- /dev/null +++ b/assets/MapIcons/blackIcons/bank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bar.svg b/assets/MapIcons/blackIcons/bar.svg new file mode 100644 index 00000000..7a733a6c --- /dev/null +++ b/assets/MapIcons/blackIcons/bar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/baseball.svg b/assets/MapIcons/blackIcons/baseball.svg new file mode 100644 index 00000000..4431e7ca --- /dev/null +++ b/assets/MapIcons/blackIcons/baseball.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/beauty-salon.svg b/assets/MapIcons/blackIcons/beauty-salon.svg new file mode 100644 index 00000000..5510fb69 --- /dev/null +++ b/assets/MapIcons/blackIcons/beauty-salon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bicycle-store.svg b/assets/MapIcons/blackIcons/bicycle-store.svg new file mode 100644 index 00000000..2526124f --- /dev/null +++ b/assets/MapIcons/blackIcons/bicycle-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bicycling.svg b/assets/MapIcons/blackIcons/bicycling.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/bicycling.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/boat-ramp.svg b/assets/MapIcons/blackIcons/boat-ramp.svg new file mode 100644 index 00000000..9444a3b9 --- /dev/null +++ b/assets/MapIcons/blackIcons/boat-ramp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/boat-tour.svg b/assets/MapIcons/blackIcons/boat-tour.svg new file mode 100644 index 00000000..100ad05c --- /dev/null +++ b/assets/MapIcons/blackIcons/boat-tour.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/boating.svg b/assets/MapIcons/blackIcons/boating.svg new file mode 100644 index 00000000..8f6b4599 --- /dev/null +++ b/assets/MapIcons/blackIcons/boating.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/book-store.svg b/assets/MapIcons/blackIcons/book-store.svg new file mode 100644 index 00000000..7b5c887e --- /dev/null +++ b/assets/MapIcons/blackIcons/book-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bowling-alley.svg b/assets/MapIcons/blackIcons/bowling-alley.svg new file mode 100644 index 00000000..0cc8b676 --- /dev/null +++ b/assets/MapIcons/blackIcons/bowling-alley.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/braille.svg b/assets/MapIcons/blackIcons/braille.svg new file mode 100644 index 00000000..9f2aefb6 --- /dev/null +++ b/assets/MapIcons/blackIcons/braille.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/bus-station.svg b/assets/MapIcons/blackIcons/bus-station.svg new file mode 100644 index 00000000..4255b6a2 --- /dev/null +++ b/assets/MapIcons/blackIcons/bus-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/cafe.svg b/assets/MapIcons/blackIcons/cafe.svg new file mode 100644 index 00000000..bbbe9a79 --- /dev/null +++ b/assets/MapIcons/blackIcons/cafe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/campground.svg b/assets/MapIcons/blackIcons/campground.svg new file mode 100644 index 00000000..41cde05d --- /dev/null +++ b/assets/MapIcons/blackIcons/campground.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/canoe.svg b/assets/MapIcons/blackIcons/canoe.svg new file mode 100644 index 00000000..bc3e059f --- /dev/null +++ b/assets/MapIcons/blackIcons/canoe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/car-dealer.svg b/assets/MapIcons/blackIcons/car-dealer.svg new file mode 100644 index 00000000..9b39007f --- /dev/null +++ b/assets/MapIcons/blackIcons/car-dealer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/car-rental.svg b/assets/MapIcons/blackIcons/car-rental.svg new file mode 100644 index 00000000..1e647b4b --- /dev/null +++ b/assets/MapIcons/blackIcons/car-rental.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/car-repair.svg b/assets/MapIcons/blackIcons/car-repair.svg new file mode 100644 index 00000000..2e960b91 --- /dev/null +++ b/assets/MapIcons/blackIcons/car-repair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/car-wash.svg b/assets/MapIcons/blackIcons/car-wash.svg new file mode 100644 index 00000000..c6e5ba7a --- /dev/null +++ b/assets/MapIcons/blackIcons/car-wash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/casino.svg b/assets/MapIcons/blackIcons/casino.svg new file mode 100644 index 00000000..2781b651 --- /dev/null +++ b/assets/MapIcons/blackIcons/casino.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/cemetery.svg b/assets/MapIcons/blackIcons/cemetery.svg new file mode 100644 index 00000000..39eb3b13 --- /dev/null +++ b/assets/MapIcons/blackIcons/cemetery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/chairlift.svg b/assets/MapIcons/blackIcons/chairlift.svg new file mode 100644 index 00000000..7e6be254 --- /dev/null +++ b/assets/MapIcons/blackIcons/chairlift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/church.svg b/assets/MapIcons/blackIcons/church.svg new file mode 100644 index 00000000..a3262a00 --- /dev/null +++ b/assets/MapIcons/blackIcons/church.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/circle.svg b/assets/MapIcons/blackIcons/circle.svg new file mode 100644 index 00000000..73297108 --- /dev/null +++ b/assets/MapIcons/blackIcons/circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/city-hall.svg b/assets/MapIcons/blackIcons/city-hall.svg new file mode 100644 index 00000000..2687d543 --- /dev/null +++ b/assets/MapIcons/blackIcons/city-hall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/climbing.svg b/assets/MapIcons/blackIcons/climbing.svg new file mode 100644 index 00000000..5bfd2241 --- /dev/null +++ b/assets/MapIcons/blackIcons/climbing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/closed-captioning.svg b/assets/MapIcons/blackIcons/closed-captioning.svg new file mode 100644 index 00000000..b7ec201b --- /dev/null +++ b/assets/MapIcons/blackIcons/closed-captioning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/clothing-store.svg b/assets/MapIcons/blackIcons/clothing-store.svg new file mode 100644 index 00000000..6c4ba2d7 --- /dev/null +++ b/assets/MapIcons/blackIcons/clothing-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/compass.svg b/assets/MapIcons/blackIcons/compass.svg new file mode 100644 index 00000000..5006f46c --- /dev/null +++ b/assets/MapIcons/blackIcons/compass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/convenience-store.svg b/assets/MapIcons/blackIcons/convenience-store.svg new file mode 100644 index 00000000..a184ba97 --- /dev/null +++ b/assets/MapIcons/blackIcons/convenience-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/courthouse.svg b/assets/MapIcons/blackIcons/courthouse.svg new file mode 100644 index 00000000..cb1d1faa --- /dev/null +++ b/assets/MapIcons/blackIcons/courthouse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/cross-country-skiing.svg b/assets/MapIcons/blackIcons/cross-country-skiing.svg new file mode 100644 index 00000000..cb81a0c3 --- /dev/null +++ b/assets/MapIcons/blackIcons/cross-country-skiing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/crosshairs.svg b/assets/MapIcons/blackIcons/crosshairs.svg new file mode 100644 index 00000000..a6a3c189 --- /dev/null +++ b/assets/MapIcons/blackIcons/crosshairs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/dentist.svg b/assets/MapIcons/blackIcons/dentist.svg new file mode 100644 index 00000000..0470c6dd --- /dev/null +++ b/assets/MapIcons/blackIcons/dentist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/department-store.svg b/assets/MapIcons/blackIcons/department-store.svg new file mode 100644 index 00000000..8e8625a6 --- /dev/null +++ b/assets/MapIcons/blackIcons/department-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/diving.svg b/assets/MapIcons/blackIcons/diving.svg new file mode 100644 index 00000000..07a72c7f --- /dev/null +++ b/assets/MapIcons/blackIcons/diving.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/doctor.svg b/assets/MapIcons/blackIcons/doctor.svg new file mode 100644 index 00000000..8d8ac46d --- /dev/null +++ b/assets/MapIcons/blackIcons/doctor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/electrician.svg b/assets/MapIcons/blackIcons/electrician.svg new file mode 100644 index 00000000..7aed199f --- /dev/null +++ b/assets/MapIcons/blackIcons/electrician.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/electronics-store.svg b/assets/MapIcons/blackIcons/electronics-store.svg new file mode 100644 index 00000000..9f848a5a --- /dev/null +++ b/assets/MapIcons/blackIcons/electronics-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/embassy.svg b/assets/MapIcons/blackIcons/embassy.svg new file mode 100644 index 00000000..a90331d2 --- /dev/null +++ b/assets/MapIcons/blackIcons/embassy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/expand.svg b/assets/MapIcons/blackIcons/expand.svg new file mode 100644 index 00000000..a384f957 --- /dev/null +++ b/assets/MapIcons/blackIcons/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/female.svg b/assets/MapIcons/blackIcons/female.svg new file mode 100644 index 00000000..169de5f1 --- /dev/null +++ b/assets/MapIcons/blackIcons/female.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/finance.svg b/assets/MapIcons/blackIcons/finance.svg new file mode 100644 index 00000000..bea8745f --- /dev/null +++ b/assets/MapIcons/blackIcons/finance.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/fire-station.svg b/assets/MapIcons/blackIcons/fire-station.svg new file mode 100644 index 00000000..4cd8f2cf --- /dev/null +++ b/assets/MapIcons/blackIcons/fire-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/fish-cleaning.svg b/assets/MapIcons/blackIcons/fish-cleaning.svg new file mode 100644 index 00000000..b2823435 --- /dev/null +++ b/assets/MapIcons/blackIcons/fish-cleaning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/fishing-pier.svg b/assets/MapIcons/blackIcons/fishing-pier.svg new file mode 100644 index 00000000..a811717d --- /dev/null +++ b/assets/MapIcons/blackIcons/fishing-pier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/fishing.svg b/assets/MapIcons/blackIcons/fishing.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/fishing.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/florist.svg b/assets/MapIcons/blackIcons/florist.svg new file mode 100644 index 00000000..57a86416 --- /dev/null +++ b/assets/MapIcons/blackIcons/florist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/food.svg b/assets/MapIcons/blackIcons/food.svg new file mode 100644 index 00000000..879bbf13 --- /dev/null +++ b/assets/MapIcons/blackIcons/food.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/fullscreen.svg b/assets/MapIcons/blackIcons/fullscreen.svg new file mode 100644 index 00000000..2fb9b3d8 --- /dev/null +++ b/assets/MapIcons/blackIcons/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/funeral-home.svg b/assets/MapIcons/blackIcons/funeral-home.svg new file mode 100644 index 00000000..e9cac1c1 --- /dev/null +++ b/assets/MapIcons/blackIcons/funeral-home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/furniture-store.svg b/assets/MapIcons/blackIcons/furniture-store.svg new file mode 100644 index 00000000..58776c27 --- /dev/null +++ b/assets/MapIcons/blackIcons/furniture-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/gas-station.svg b/assets/MapIcons/blackIcons/gas-station.svg new file mode 100644 index 00000000..c9e4ebc7 --- /dev/null +++ b/assets/MapIcons/blackIcons/gas-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/general-contractor.svg b/assets/MapIcons/blackIcons/general-contractor.svg new file mode 100644 index 00000000..d368a2fb --- /dev/null +++ b/assets/MapIcons/blackIcons/general-contractor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/golf.svg b/assets/MapIcons/blackIcons/golf.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/golf.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/grocery-or-supermarket.svg b/assets/MapIcons/blackIcons/grocery-or-supermarket.svg new file mode 100644 index 00000000..6a0f7ccf --- /dev/null +++ b/assets/MapIcons/blackIcons/grocery-or-supermarket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/gym.svg b/assets/MapIcons/blackIcons/gym.svg new file mode 100644 index 00000000..c7284166 --- /dev/null +++ b/assets/MapIcons/blackIcons/gym.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/hair-care.svg b/assets/MapIcons/blackIcons/hair-care.svg new file mode 100644 index 00000000..140a9245 --- /dev/null +++ b/assets/MapIcons/blackIcons/hair-care.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/hang-gliding.svg b/assets/MapIcons/blackIcons/hang-gliding.svg new file mode 100644 index 00000000..23343098 --- /dev/null +++ b/assets/MapIcons/blackIcons/hang-gliding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/hardware-store.svg b/assets/MapIcons/blackIcons/hardware-store.svg new file mode 100644 index 00000000..0e7ce9fb --- /dev/null +++ b/assets/MapIcons/blackIcons/hardware-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/health.svg b/assets/MapIcons/blackIcons/health.svg new file mode 100644 index 00000000..e961991a --- /dev/null +++ b/assets/MapIcons/blackIcons/health.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/hindu-temple.svg b/assets/MapIcons/blackIcons/hindu-temple.svg new file mode 100644 index 00000000..c910237c --- /dev/null +++ b/assets/MapIcons/blackIcons/hindu-temple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/horse-riding.svg b/assets/MapIcons/blackIcons/horse-riding.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/horse-riding.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/hospital.svg b/assets/MapIcons/blackIcons/hospital.svg new file mode 100644 index 00000000..ac11886d --- /dev/null +++ b/assets/MapIcons/blackIcons/hospital.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/ice-fishing.svg b/assets/MapIcons/blackIcons/ice-fishing.svg new file mode 100644 index 00000000..a4bd3711 --- /dev/null +++ b/assets/MapIcons/blackIcons/ice-fishing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/ice-skating.svg b/assets/MapIcons/blackIcons/ice-skating.svg new file mode 100644 index 00000000..b1645c4d --- /dev/null +++ b/assets/MapIcons/blackIcons/ice-skating.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/inline-skating.svg b/assets/MapIcons/blackIcons/inline-skating.svg new file mode 100644 index 00000000..b2d84e1b --- /dev/null +++ b/assets/MapIcons/blackIcons/inline-skating.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/insurance-agency.svg b/assets/MapIcons/blackIcons/insurance-agency.svg new file mode 100644 index 00000000..0251623a --- /dev/null +++ b/assets/MapIcons/blackIcons/insurance-agency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/jet-skiing.svg b/assets/MapIcons/blackIcons/jet-skiing.svg new file mode 100644 index 00000000..154329a4 --- /dev/null +++ b/assets/MapIcons/blackIcons/jet-skiing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/jewelry-store.svg b/assets/MapIcons/blackIcons/jewelry-store.svg new file mode 100644 index 00000000..0ad4dc57 --- /dev/null +++ b/assets/MapIcons/blackIcons/jewelry-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/kayaking.svg b/assets/MapIcons/blackIcons/kayaking.svg new file mode 100644 index 00000000..1e5414a6 --- /dev/null +++ b/assets/MapIcons/blackIcons/kayaking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/laundry.svg b/assets/MapIcons/blackIcons/laundry.svg new file mode 100644 index 00000000..9f1f8f3a --- /dev/null +++ b/assets/MapIcons/blackIcons/laundry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/lawyer.svg b/assets/MapIcons/blackIcons/lawyer.svg new file mode 100644 index 00000000..f5f954de --- /dev/null +++ b/assets/MapIcons/blackIcons/lawyer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/library.svg b/assets/MapIcons/blackIcons/library.svg new file mode 100644 index 00000000..9cbb0bad --- /dev/null +++ b/assets/MapIcons/blackIcons/library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/liquor-store.svg b/assets/MapIcons/blackIcons/liquor-store.svg new file mode 100644 index 00000000..99ef90b5 --- /dev/null +++ b/assets/MapIcons/blackIcons/liquor-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/local-government.svg b/assets/MapIcons/blackIcons/local-government.svg new file mode 100644 index 00000000..38f75070 --- /dev/null +++ b/assets/MapIcons/blackIcons/local-government.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/location-arrow.svg b/assets/MapIcons/blackIcons/location-arrow.svg new file mode 100644 index 00000000..fcaabafa --- /dev/null +++ b/assets/MapIcons/blackIcons/location-arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/locksmith.svg b/assets/MapIcons/blackIcons/locksmith.svg new file mode 100644 index 00000000..ca55997a --- /dev/null +++ b/assets/MapIcons/blackIcons/locksmith.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/lodging.svg b/assets/MapIcons/blackIcons/lodging.svg new file mode 100644 index 00000000..4be626e9 --- /dev/null +++ b/assets/MapIcons/blackIcons/lodging.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/low-vision-access.svg b/assets/MapIcons/blackIcons/low-vision-access.svg new file mode 100644 index 00000000..a1041b0c --- /dev/null +++ b/assets/MapIcons/blackIcons/low-vision-access.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/male.svg b/assets/MapIcons/blackIcons/male.svg new file mode 100644 index 00000000..201777d3 --- /dev/null +++ b/assets/MapIcons/blackIcons/male.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/map-pin.svg b/assets/MapIcons/blackIcons/map-pin.svg new file mode 100644 index 00000000..81f83b6e --- /dev/null +++ b/assets/MapIcons/blackIcons/map-pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/marina.svg b/assets/MapIcons/blackIcons/marina.svg new file mode 100644 index 00000000..732cc8e4 --- /dev/null +++ b/assets/MapIcons/blackIcons/marina.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/mosque.svg b/assets/MapIcons/blackIcons/mosque.svg new file mode 100644 index 00000000..1373ae2d --- /dev/null +++ b/assets/MapIcons/blackIcons/mosque.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/motobike-trail.svg b/assets/MapIcons/blackIcons/motobike-trail.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/motobike-trail.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/movie-rental.svg b/assets/MapIcons/blackIcons/movie-rental.svg new file mode 100644 index 00000000..dd3cfd7b --- /dev/null +++ b/assets/MapIcons/blackIcons/movie-rental.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/movie-theater.svg b/assets/MapIcons/blackIcons/movie-theater.svg new file mode 100644 index 00000000..2365dd16 --- /dev/null +++ b/assets/MapIcons/blackIcons/movie-theater.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/moving-company.svg b/assets/MapIcons/blackIcons/moving-company.svg new file mode 100644 index 00000000..80c6aa07 --- /dev/null +++ b/assets/MapIcons/blackIcons/moving-company.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/museum.svg b/assets/MapIcons/blackIcons/museum.svg new file mode 100644 index 00000000..79994267 --- /dev/null +++ b/assets/MapIcons/blackIcons/museum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/natural-feature.svg b/assets/MapIcons/blackIcons/natural-feature.svg new file mode 100644 index 00000000..b7176b33 --- /dev/null +++ b/assets/MapIcons/blackIcons/natural-feature.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/night-club.svg b/assets/MapIcons/blackIcons/night-club.svg new file mode 100644 index 00000000..4ab36b0a --- /dev/null +++ b/assets/MapIcons/blackIcons/night-club.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/open-captioning.svg b/assets/MapIcons/blackIcons/open-captioning.svg new file mode 100644 index 00000000..a3d7da2d --- /dev/null +++ b/assets/MapIcons/blackIcons/open-captioning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/painter.svg b/assets/MapIcons/blackIcons/painter.svg new file mode 100644 index 00000000..ca54f45b --- /dev/null +++ b/assets/MapIcons/blackIcons/painter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/park.svg b/assets/MapIcons/blackIcons/park.svg new file mode 100644 index 00000000..5bef4951 --- /dev/null +++ b/assets/MapIcons/blackIcons/park.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/parking.svg b/assets/MapIcons/blackIcons/parking.svg new file mode 100644 index 00000000..b586bb52 --- /dev/null +++ b/assets/MapIcons/blackIcons/parking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/pet-store.svg b/assets/MapIcons/blackIcons/pet-store.svg new file mode 100644 index 00000000..ace272da --- /dev/null +++ b/assets/MapIcons/blackIcons/pet-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/pharmacy.svg b/assets/MapIcons/blackIcons/pharmacy.svg new file mode 100644 index 00000000..36b83bed --- /dev/null +++ b/assets/MapIcons/blackIcons/pharmacy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/physiotherapist.svg b/assets/MapIcons/blackIcons/physiotherapist.svg new file mode 100644 index 00000000..06ea0683 --- /dev/null +++ b/assets/MapIcons/blackIcons/physiotherapist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/place-of-worship.svg b/assets/MapIcons/blackIcons/place-of-worship.svg new file mode 100644 index 00000000..3c9c5e1f --- /dev/null +++ b/assets/MapIcons/blackIcons/place-of-worship.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/playground.svg b/assets/MapIcons/blackIcons/playground.svg new file mode 100644 index 00000000..f31cf959 --- /dev/null +++ b/assets/MapIcons/blackIcons/playground.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/plumber.svg b/assets/MapIcons/blackIcons/plumber.svg new file mode 100644 index 00000000..c1c47d99 --- /dev/null +++ b/assets/MapIcons/blackIcons/plumber.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/point-of-interest.svg b/assets/MapIcons/blackIcons/point-of-interest.svg new file mode 100644 index 00000000..490bba90 --- /dev/null +++ b/assets/MapIcons/blackIcons/point-of-interest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/police.svg b/assets/MapIcons/blackIcons/police.svg new file mode 100644 index 00000000..f844bfed --- /dev/null +++ b/assets/MapIcons/blackIcons/police.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/political.svg b/assets/MapIcons/blackIcons/political.svg new file mode 100644 index 00000000..925806e5 --- /dev/null +++ b/assets/MapIcons/blackIcons/political.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/post-box.svg b/assets/MapIcons/blackIcons/post-box.svg new file mode 100644 index 00000000..506f2588 --- /dev/null +++ b/assets/MapIcons/blackIcons/post-box.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/post-office.svg b/assets/MapIcons/blackIcons/post-office.svg new file mode 100644 index 00000000..769c3a95 --- /dev/null +++ b/assets/MapIcons/blackIcons/post-office.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/postal-code-prefix.svg b/assets/MapIcons/blackIcons/postal-code-prefix.svg new file mode 100644 index 00000000..fb1b495f --- /dev/null +++ b/assets/MapIcons/blackIcons/postal-code-prefix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/postal-code.svg b/assets/MapIcons/blackIcons/postal-code.svg new file mode 100644 index 00000000..fb1b495f --- /dev/null +++ b/assets/MapIcons/blackIcons/postal-code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/rafting.svg b/assets/MapIcons/blackIcons/rafting.svg new file mode 100644 index 00000000..abae6d28 --- /dev/null +++ b/assets/MapIcons/blackIcons/rafting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/real-estate-agency.svg b/assets/MapIcons/blackIcons/real-estate-agency.svg new file mode 100644 index 00000000..a693d4ed --- /dev/null +++ b/assets/MapIcons/blackIcons/real-estate-agency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/restaurant.svg b/assets/MapIcons/blackIcons/restaurant.svg new file mode 100644 index 00000000..42ca1a46 --- /dev/null +++ b/assets/MapIcons/blackIcons/restaurant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/roofing-contractor.svg b/assets/MapIcons/blackIcons/roofing-contractor.svg new file mode 100644 index 00000000..73a386f7 --- /dev/null +++ b/assets/MapIcons/blackIcons/roofing-contractor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/route-pin.svg b/assets/MapIcons/blackIcons/route-pin.svg new file mode 100644 index 00000000..bbe3cacb --- /dev/null +++ b/assets/MapIcons/blackIcons/route-pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/route.svg b/assets/MapIcons/blackIcons/route.svg new file mode 100644 index 00000000..4ee046d5 --- /dev/null +++ b/assets/MapIcons/blackIcons/route.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/rv-park.svg b/assets/MapIcons/blackIcons/rv-park.svg new file mode 100644 index 00000000..07c8c905 --- /dev/null +++ b/assets/MapIcons/blackIcons/rv-park.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/sailing.svg b/assets/MapIcons/blackIcons/sailing.svg new file mode 100644 index 00000000..74ed8457 --- /dev/null +++ b/assets/MapIcons/blackIcons/sailing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/school.svg b/assets/MapIcons/blackIcons/school.svg new file mode 100644 index 00000000..77b6a3a4 --- /dev/null +++ b/assets/MapIcons/blackIcons/school.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/scuba-diving.svg b/assets/MapIcons/blackIcons/scuba-diving.svg new file mode 100644 index 00000000..f08bf515 --- /dev/null +++ b/assets/MapIcons/blackIcons/scuba-diving.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/search.svg b/assets/MapIcons/blackIcons/search.svg new file mode 100644 index 00000000..4cbb2a08 --- /dev/null +++ b/assets/MapIcons/blackIcons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/sheild.svg b/assets/MapIcons/blackIcons/sheild.svg new file mode 100644 index 00000000..0b6ccb32 --- /dev/null +++ b/assets/MapIcons/blackIcons/sheild.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/shopping-mall.svg b/assets/MapIcons/blackIcons/shopping-mall.svg new file mode 100644 index 00000000..71b2e1ab --- /dev/null +++ b/assets/MapIcons/blackIcons/shopping-mall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/sign-language.svg b/assets/MapIcons/blackIcons/sign-language.svg new file mode 100644 index 00000000..f6fa169c --- /dev/null +++ b/assets/MapIcons/blackIcons/sign-language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/skateboarding.svg b/assets/MapIcons/blackIcons/skateboarding.svg new file mode 100644 index 00000000..b3f95450 --- /dev/null +++ b/assets/MapIcons/blackIcons/skateboarding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/ski-jumping.svg b/assets/MapIcons/blackIcons/ski-jumping.svg new file mode 100644 index 00000000..0087b2c5 --- /dev/null +++ b/assets/MapIcons/blackIcons/ski-jumping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/skiing.svg b/assets/MapIcons/blackIcons/skiing.svg new file mode 100644 index 00000000..b3cb6110 --- /dev/null +++ b/assets/MapIcons/blackIcons/skiing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/sledding.svg b/assets/MapIcons/blackIcons/sledding.svg new file mode 100644 index 00000000..039c563c --- /dev/null +++ b/assets/MapIcons/blackIcons/sledding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/snow-shoeing.svg b/assets/MapIcons/blackIcons/snow-shoeing.svg new file mode 100644 index 00000000..660eb695 --- /dev/null +++ b/assets/MapIcons/blackIcons/snow-shoeing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/snow.svg b/assets/MapIcons/blackIcons/snow.svg new file mode 100644 index 00000000..4a239a4f --- /dev/null +++ b/assets/MapIcons/blackIcons/snow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/snowboarding.svg b/assets/MapIcons/blackIcons/snowboarding.svg new file mode 100644 index 00000000..a4acc5f6 --- /dev/null +++ b/assets/MapIcons/blackIcons/snowboarding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/snowmobile.svg b/assets/MapIcons/blackIcons/snowmobile.svg new file mode 100644 index 00000000..d10b5769 --- /dev/null +++ b/assets/MapIcons/blackIcons/snowmobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/spa.svg b/assets/MapIcons/blackIcons/spa.svg new file mode 100644 index 00000000..f545ff0d --- /dev/null +++ b/assets/MapIcons/blackIcons/spa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/square-pin.svg b/assets/MapIcons/blackIcons/square-pin.svg new file mode 100644 index 00000000..fd68e9c9 --- /dev/null +++ b/assets/MapIcons/blackIcons/square-pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/square-rounded.svg b/assets/MapIcons/blackIcons/square-rounded.svg new file mode 100644 index 00000000..ad681c59 --- /dev/null +++ b/assets/MapIcons/blackIcons/square-rounded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/square.svg b/assets/MapIcons/blackIcons/square.svg new file mode 100644 index 00000000..12a56907 --- /dev/null +++ b/assets/MapIcons/blackIcons/square.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/stadium.svg b/assets/MapIcons/blackIcons/stadium.svg new file mode 100644 index 00000000..44fa2f17 --- /dev/null +++ b/assets/MapIcons/blackIcons/stadium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/storage.svg b/assets/MapIcons/blackIcons/storage.svg new file mode 100644 index 00000000..8fc4bbf3 --- /dev/null +++ b/assets/MapIcons/blackIcons/storage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/store.svg b/assets/MapIcons/blackIcons/store.svg new file mode 100644 index 00000000..5807dd1a --- /dev/null +++ b/assets/MapIcons/blackIcons/store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/subway-station.svg b/assets/MapIcons/blackIcons/subway-station.svg new file mode 100644 index 00000000..ae6580e7 --- /dev/null +++ b/assets/MapIcons/blackIcons/subway-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/surfing.svg b/assets/MapIcons/blackIcons/surfing.svg new file mode 100644 index 00000000..a4fd24b5 --- /dev/null +++ b/assets/MapIcons/blackIcons/surfing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/swimming.svg b/assets/MapIcons/blackIcons/swimming.svg new file mode 100644 index 00000000..8db10c13 --- /dev/null +++ b/assets/MapIcons/blackIcons/swimming.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/synagogue.svg b/assets/MapIcons/blackIcons/synagogue.svg new file mode 100644 index 00000000..5f54ea3a --- /dev/null +++ b/assets/MapIcons/blackIcons/synagogue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/taxi-stand.svg b/assets/MapIcons/blackIcons/taxi-stand.svg new file mode 100644 index 00000000..42d94cd8 --- /dev/null +++ b/assets/MapIcons/blackIcons/taxi-stand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/tennis.svg b/assets/MapIcons/blackIcons/tennis.svg new file mode 100644 index 00000000..2c3bb05a --- /dev/null +++ b/assets/MapIcons/blackIcons/tennis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/toilet.svg b/assets/MapIcons/blackIcons/toilet.svg new file mode 100644 index 00000000..422ed3f0 --- /dev/null +++ b/assets/MapIcons/blackIcons/toilet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/trail-walking.svg b/assets/MapIcons/blackIcons/trail-walking.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/trail-walking.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/train-station.svg b/assets/MapIcons/blackIcons/train-station.svg new file mode 100644 index 00000000..5e62b54c --- /dev/null +++ b/assets/MapIcons/blackIcons/train-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/transit-station.svg b/assets/MapIcons/blackIcons/transit-station.svg new file mode 100644 index 00000000..f50e02bd --- /dev/null +++ b/assets/MapIcons/blackIcons/transit-station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/travel-agency.svg b/assets/MapIcons/blackIcons/travel-agency.svg new file mode 100644 index 00000000..85be5839 --- /dev/null +++ b/assets/MapIcons/blackIcons/travel-agency.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/unisex.svg b/assets/MapIcons/blackIcons/unisex.svg new file mode 100644 index 00000000..1c6b00a6 --- /dev/null +++ b/assets/MapIcons/blackIcons/unisex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/university.svg b/assets/MapIcons/blackIcons/university.svg new file mode 100644 index 00000000..4463e02b --- /dev/null +++ b/assets/MapIcons/blackIcons/university.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/veterinary-care.svg b/assets/MapIcons/blackIcons/veterinary-care.svg new file mode 100644 index 00000000..b30f2f5f --- /dev/null +++ b/assets/MapIcons/blackIcons/veterinary-care.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/viewing.svg b/assets/MapIcons/blackIcons/viewing.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/viewing.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/volume-control-telephone.svg b/assets/MapIcons/blackIcons/volume-control-telephone.svg new file mode 100644 index 00000000..d57b20b2 --- /dev/null +++ b/assets/MapIcons/blackIcons/volume-control-telephone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/walking.svg b/assets/MapIcons/blackIcons/walking.svg new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/assets/MapIcons/blackIcons/walking.svg @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/waterskiing.svg b/assets/MapIcons/blackIcons/waterskiing.svg new file mode 100644 index 00000000..a45aaf76 --- /dev/null +++ b/assets/MapIcons/blackIcons/waterskiing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/whale-watching.svg b/assets/MapIcons/blackIcons/whale-watching.svg new file mode 100644 index 00000000..55834ccd --- /dev/null +++ b/assets/MapIcons/blackIcons/whale-watching.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/wheelchair.svg b/assets/MapIcons/blackIcons/wheelchair.svg new file mode 100644 index 00000000..bbaa7e55 --- /dev/null +++ b/assets/MapIcons/blackIcons/wheelchair.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/wind-surfing.svg b/assets/MapIcons/blackIcons/wind-surfing.svg new file mode 100644 index 00000000..fc7b5124 --- /dev/null +++ b/assets/MapIcons/blackIcons/wind-surfing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/zoo.svg b/assets/MapIcons/blackIcons/zoo.svg new file mode 100644 index 00000000..8ea845f3 --- /dev/null +++ b/assets/MapIcons/blackIcons/zoo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/zoom-in-alt.svg b/assets/MapIcons/blackIcons/zoom-in-alt.svg new file mode 100644 index 00000000..ddc3196e --- /dev/null +++ b/assets/MapIcons/blackIcons/zoom-in-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/zoom-in.svg b/assets/MapIcons/blackIcons/zoom-in.svg new file mode 100644 index 00000000..87b238ba --- /dev/null +++ b/assets/MapIcons/blackIcons/zoom-in.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/zoom-out-alt.svg b/assets/MapIcons/blackIcons/zoom-out-alt.svg new file mode 100644 index 00000000..fade492d --- /dev/null +++ b/assets/MapIcons/blackIcons/zoom-out-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/blackIcons/zoom-out.svg b/assets/MapIcons/blackIcons/zoom-out.svg new file mode 100644 index 00000000..c40a2293 --- /dev/null +++ b/assets/MapIcons/blackIcons/zoom-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/MapIcons/colorNumbers/00_reference.html b/assets/MapIcons/colorNumbers/00_reference.html new file mode 100644 index 00000000..cc65213a --- /dev/null +++ b/assets/MapIcons/colorNumbers/00_reference.html @@ -0,0 +1,1226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
marker_black100.png
marker_black10.png
marker_black11.png
marker_black12.png
marker_black13.png
marker_black14.png
marker_black15.png
marker_black16.png
marker_black17.png
marker_black18.png
marker_black19.png
marker_black1.png
marker_black20.png
marker_black21.png
marker_black22.png
marker_black23.png
marker_black24.png
marker_black25.png
marker_black26.png
marker_black27.png
marker_black28.png
marker_black29.png
marker_black2.png
marker_black30.png
marker_black31.png
marker_black32.png
marker_black33.png
marker_black34.png
marker_black35.png
marker_black36.png
marker_black37.png
marker_black38.png
marker_black39.png
marker_black3.png
marker_black40.png
marker_black41.png
marker_black42.png
marker_black43.png
marker_black44.png
marker_black45.png
marker_black46.png
marker_black47.png
marker_black48.png
marker_black49.png
marker_black4.png
marker_black50.png
marker_black51.png
marker_black52.png
marker_black53.png
marker_black54.png
marker_black55.png
marker_black56.png
marker_black57.png
marker_black58.png
marker_black59.png
marker_black5.png
marker_black60.png
marker_black61.png
marker_black62.png
marker_black63.png
marker_black64.png
marker_black65.png
marker_black66.png
marker_black67.png
marker_black68.png
marker_black69.png
marker_black6.png
marker_black70.png
marker_black71.png
marker_black72.png
marker_black73.png
marker_black74.png
marker_black75.png
marker_black76.png
marker_black77.png
marker_black78.png
marker_black79.png
marker_black7.png
marker_black80.png
marker_black81.png
marker_black82.png
marker_black83.png
marker_black84.png
marker_black85.png
marker_black86.png
marker_black87.png
marker_black88.png
marker_black89.png
marker_black8.png
marker_black90.png
marker_black91.png
marker_black92.png
marker_black93.png
marker_black94.png
marker_black95.png
marker_black96.png
marker_black97.png
marker_black98.png
marker_black99.png
marker_black9.png
marker_blackA.png
marker_blackB.png
marker_blackC.png
marker_blackD.png
marker_blackE.png
marker_blackF.png
marker_blackG.png
marker_blackH.png
marker_blackI.png
marker_blackJ.png
marker_blackK.png
marker_blackL.png
marker_blackM.png
marker_blackN.png
marker_blackO.png
marker_black=.png
marker_black-.png
marker_black!.png
marker_black.png
marker_black@.png
marker_black$.png
marker_black&.png
marker_black#.png
marker_black%.png
marker_black+.png
marker_blackP.png
marker_blackQ.png
marker_blackR.png
marker_blackS.png
marker_blackT.png
marker_blackU.png
marker_blackV.png
marker_blackW.png
marker_blackX.png
marker_blackY.png
marker_blackZ.png
marker_blue100.png
marker_blue10.png
marker_blue11.png
marker_blue12.png
marker_blue13.png
marker_blue14.png
marker_blue15.png
marker_blue16.png
marker_blue17.png
marker_blue18.png
marker_blue19.png
marker_blue1.png
marker_blue20.png
marker_blue21.png
marker_blue22.png
marker_blue23.png
marker_blue24.png
marker_blue25.png
marker_blue26.png
marker_blue27.png
marker_blue28.png
marker_blue29.png
marker_blue2.png
marker_blue30.png
marker_blue31.png
marker_blue32.png
marker_blue33.png
marker_blue34.png
marker_blue35.png
marker_blue36.png
marker_blue37.png
marker_blue38.png
marker_blue39.png
marker_blue3.png
marker_blue40.png
marker_blue41.png
marker_blue42.png
marker_blue43.png
marker_blue44.png
marker_blue45.png
marker_blue46.png
marker_blue47.png
marker_blue48.png
marker_blue49.png
marker_blue4.png
marker_blue50.png
marker_blue51.png
marker_blue52.png
marker_blue53.png
marker_blue54.png
marker_blue55.png
marker_blue56.png
marker_blue57.png
marker_blue58.png
marker_blue59.png
marker_blue5.png
marker_blue60.png
marker_blue61.png
marker_blue62.png
marker_blue63.png
marker_blue64.png
marker_blue65.png
marker_blue66.png
marker_blue67.png
marker_blue68.png
marker_blue69.png
marker_blue6.png
marker_blue70.png
marker_blue71.png
marker_blue72.png
marker_blue73.png
marker_blue74.png
marker_blue75.png
marker_blue76.png
marker_blue77.png
marker_blue78.png
marker_blue79.png
marker_blue7.png
marker_blue80.png
marker_blue81.png
marker_blue82.png
marker_blue83.png
marker_blue84.png
marker_blue85.png
marker_blue86.png
marker_blue87.png
marker_blue88.png
marker_blue89.png
marker_blue8.png
marker_blue90.png
marker_blue91.png
marker_blue92.png
marker_blue93.png
marker_blue94.png
marker_blue95.png
marker_blue96.png
marker_blue97.png
marker_blue98.png
marker_blue99.png
marker_blue9.png
marker_blueA.png
marker_blueB.png
marker_blueC.png
marker_blueD.png
marker_blueE.png
marker_blueF.png
marker_blueG.png
marker_blueH.png
marker_blueI.png
marker_blueJ.png
marker_blueK.png
marker_blueL.png
marker_blueM.png
marker_blueN.png
marker_blueO.png
marker_blue=.png
marker_blue-.png
marker_blue!.png
marker_blue.png
marker_blue@.png
marker_blue$.png
marker_blue&.png
marker_blue#.png
marker_blue%.png
marker_blue+.png
marker_blueP.png
marker_blueQ.png
marker_blueR.png
marker_blueS.png
marker_blueT.png
marker_blueU.png
marker_blueV.png
marker_blueW.png
marker_blueX.png
marker_blueY.png
marker_blueZ.png
marker_green100.png
marker_green10.png
marker_green11.png
marker_green12.png
marker_green13.png
marker_green14.png
marker_green15.png
marker_green16.png
marker_green17.png
marker_green18.png
marker_green19.png
marker_green1.png
marker_green20.png
marker_green21.png
marker_green22.png
marker_green23.png
marker_green24.png
marker_green25.png
marker_green26.png
marker_green27.png
marker_green28.png
marker_green29.png
marker_green2.png
marker_green30.png
marker_green31.png
marker_green32.png
marker_green33.png
marker_green34.png
marker_green35.png
marker_green36.png
marker_green37.png
marker_green38.png
marker_green39.png
marker_green3.png
marker_green40.png
marker_green41.png
marker_green42.png
marker_green43.png
marker_green44.png
marker_green45.png
marker_green46.png
marker_green47.png
marker_green48.png
marker_green49.png
marker_green4.png
marker_green50.png
marker_green51.png
marker_green52.png
marker_green53.png
marker_green54.png
marker_green55.png
marker_green56.png
marker_green57.png
marker_green58.png
marker_green59.png
marker_green5.png
marker_green60.png
marker_green61.png
marker_green62.png
marker_green63.png
marker_green64.png
marker_green65.png
marker_green66.png
marker_green67.png
marker_green68.png
marker_green69.png
marker_green6.png
marker_green70.png
marker_green71.png
marker_green72.png
marker_green73.png
marker_green74.png
marker_green75.png
marker_green76.png
marker_green77.png
marker_green78.png
marker_green79.png
marker_green7.png
marker_green80.png
marker_green81.png
marker_green82.png
marker_green83.png
marker_green84.png
marker_green85.png
marker_green86.png
marker_green87.png
marker_green88.png
marker_green89.png
marker_green8.png
marker_green90.png
marker_green91.png
marker_green92.png
marker_green93.png
marker_green94.png
marker_green95.png
marker_green96.png
marker_green97.png
marker_green98.png
marker_green99.png
marker_green9.png
marker_greenA.png
marker_greenB.png
marker_greenC.png
marker_greenD.png
marker_greenE.png
marker_greenF.png
marker_greenG.png
marker_greenH.png
marker_greenI.png
marker_greenJ.png
marker_greenK.png
marker_greenL.png
marker_greenM.png
marker_greenN.png
marker_greenO.png
marker_green=.png
marker_green-.png
marker_green!.png
marker_green.png
marker_green@.png
marker_green$.png
marker_green&.png
marker_green#.png
marker_green%.png
marker_green+.png
marker_greenP.png
marker_greenQ.png
marker_greenR.png
marker_greenS.png
marker_greenT.png
marker_greenU.png
marker_greenV.png
marker_greenW.png
marker_greenX.png
marker_greenY.png
marker_greenZ.png
marker_grey100.png
marker_grey10.png
marker_grey11.png
marker_grey12.png
marker_grey13.png
marker_grey14.png
marker_grey15.png
marker_grey16.png
marker_grey17.png
marker_grey18.png
marker_grey19.png
marker_grey1.png
marker_grey20.png
marker_grey21.png
marker_grey22.png
marker_grey23.png
marker_grey24.png
marker_grey25.png
marker_grey26.png
marker_grey27.png
marker_grey28.png
marker_grey29.png
marker_grey2.png
marker_grey30.png
marker_grey31.png
marker_grey32.png
marker_grey33.png
marker_grey34.png
marker_grey35.png
marker_grey36.png
marker_grey37.png
marker_grey38.png
marker_grey39.png
marker_grey3.png
marker_grey40.png
marker_grey41.png
marker_grey42.png
marker_grey43.png
marker_grey44.png
marker_grey45.png
marker_grey46.png
marker_grey47.png
marker_grey48.png
marker_grey49.png
marker_grey4.png
marker_grey50.png
marker_grey51.png
marker_grey52.png
marker_grey53.png
marker_grey54.png
marker_grey55.png
marker_grey56.png
marker_grey57.png
marker_grey58.png
marker_grey59.png
marker_grey5.png
marker_grey60.png
marker_grey61.png
marker_grey62.png
marker_grey63.png
marker_grey64.png
marker_grey65.png
marker_grey66.png
marker_grey67.png
marker_grey68.png
marker_grey69.png
marker_grey6.png
marker_grey70.png
marker_grey71.png
marker_grey72.png
marker_grey73.png
marker_grey74.png
marker_grey75.png
marker_grey76.png
marker_grey77.png
marker_grey78.png
marker_grey79.png
marker_grey7.png
marker_grey80.png
marker_grey81.png
marker_grey82.png
marker_grey83.png
marker_grey84.png
marker_grey85.png
marker_grey86.png
marker_grey87.png
marker_grey88.png
marker_grey89.png
marker_grey8.png
marker_grey90.png
marker_grey91.png
marker_grey92.png
marker_grey93.png
marker_grey94.png
marker_grey95.png
marker_grey96.png
marker_grey97.png
marker_grey98.png
marker_grey99.png
marker_grey9.png
marker_greyA.png
marker_greyB.png
marker_greyC.png
marker_greyD.png
marker_greyE.png
marker_greyF.png
marker_greyG.png
marker_greyH.png
marker_greyI.png
marker_greyJ.png
marker_greyK.png
marker_greyL.png
marker_greyM.png
marker_greyN.png
marker_greyO.png
marker_grey=.png
marker_grey-.png
marker_grey!.png
marker_grey.png
marker_grey@.png
marker_grey$.png
marker_grey&.png
marker_grey#.png
marker_grey%.png
marker_grey+.png
marker_greyP.png
marker_greyQ.png
marker_greyR.png
marker_greyS.png
marker_greyT.png
marker_greyU.png
marker_greyV.png
marker_greyW.png
marker_greyX.png
marker_greyY.png
marker_greyZ.png
marker_orange10.png
marker_orange11.png
marker_orange12.png
marker_orange13.png
marker_orange14.png
marker_orange15.png
marker_orange16.png
marker_orange17.png
marker_orange18.png
marker_orange19.png
marker_orange1.png
marker_orange20.png
marker_orange21.png
marker_orange22.png
marker_orange23.png
marker_orange24.png
marker_orange25.png
marker_orange26.png
marker_orange27.png
marker_orange28.png
marker_orange29.png
marker_orange2.png
marker_orange30.png
marker_orange31.png
marker_orange32.png
marker_orange33.png
marker_orange34.png
marker_orange35.png
marker_orange36.png
marker_orange37.png
marker_orange38.png
marker_orange39.png
marker_orange3.png
marker_orange40.png
marker_orange41.png
marker_orange42.png
marker_orange43.png
marker_orange44.png
marker_orange45.png
marker_orange46.png
marker_orange47.png
marker_orange48.png
marker_orange49.png
marker_orange4.png
marker_orange50.png
marker_orange51.png
marker_orange52.png
marker_orange53.png
marker_orange54.png
marker_orange55.png
marker_orange56.png
marker_orange57.png
marker_orange58.png
marker_orange59.png
marker_orange5.png
marker_orange60.png
marker_orange61.png
marker_orange62.png
marker_orange63.png
marker_orange64.png
marker_orange65.png
marker_orange66.png
marker_orange67.png
marker_orange68.png
marker_orange69.png
marker_orange6.png
marker_orange70.png
marker_orange71.png
marker_orange72.png
marker_orange73.png
marker_orange74.png
marker_orange75.png
marker_orange76.png
marker_orange77.png
marker_orange78.png
marker_orange79.png
marker_orange7.png
marker_orange80.png
marker_orange81.png
marker_orange82.png
marker_orange83.png
marker_orange84.png
marker_orange85.png
marker_orange86.png
marker_orange87.png
marker_orange88.png
marker_orange89.png
marker_orange8.png
marker_orange90.png
marker_orange91.png
marker_orange92.png
marker_orange93.png
marker_orange94.png
marker_orange95.png
marker_orange96.png
marker_orange97.png
marker_orange98.png
marker_orange99.png
marker_orange9.png
marker_orangeA.png
marker_orangeB.png
marker_orangeC.png
marker_orangeD.png
marker_orangeE.png
marker_orangeF.png
marker_orangeG.png
marker_orangeH.png
marker_orangeI.png
marker_orangeJ.png
marker_orangeK.png
marker_orangeL.png
marker_orangeM.png
marker_orangeN.png
marker_orangeO.png
marker_orange=.png
marker_orange-.png
marker_orange!.png
marker_orange.png
marker_orange@.png
marker_orange$.png
marker_orange&.png
marker_orange#.png
marker_orange%.png
marker_orange+.png
marker_orangeP.png
marker_orangeQ.png
marker_orangeR.png
marker_orangeS.png
marker_orangeT.png
marker_orangeU.png
marker_orangeV.png
marker_orangeW.png
marker_orangeX.png
marker_orangeY.png
marker_orangeZ.png
marker_purple100.png
marker_purple10.png
marker_purple11.png
marker_purple12.png
marker_purple13.png
marker_purple14.png
marker_purple15.png
marker_purple16.png
marker_purple17.png
marker_purple18.png
marker_purple19.png
marker_purple1.png
marker_purple20.png
marker_purple21.png
marker_purple22.png
marker_purple23.png
marker_purple24.png
marker_purple25.png
marker_purple26.png
marker_purple27.png
marker_purple28.png
marker_purple29.png
marker_purple2.png
marker_purple30.png
marker_purple31.png
marker_purple32.png
marker_purple33.png
marker_purple34.png
marker_purple35.png
marker_purple36.png
marker_purple37.png
marker_purple38.png
marker_purple39.png
marker_purple3.png
marker_purple40.png
marker_purple41.png
marker_purple42.png
marker_purple43.png
marker_purple44.png
marker_purple45.png
marker_purple46.png
marker_purple47.png
marker_purple48.png
marker_purple49.png
marker_purple4.png
marker_purple50.png
marker_purple51.png
marker_purple52.png
marker_purple53.png
marker_purple54.png
marker_purple55.png
marker_purple56.png
marker_purple57.png
marker_purple58.png
marker_purple59.png
marker_purple5.png
marker_purple60.png
marker_purple61.png
marker_purple62.png
marker_purple63.png
marker_purple64.png
marker_purple65.png
marker_purple66.png
marker_purple67.png
marker_purple68.png
marker_purple69.png
marker_purple6.png
marker_purple70.png
marker_purple71.png
marker_purple72.png
marker_purple73.png
marker_purple74.png
marker_purple75.png
marker_purple76.png
marker_purple77.png
marker_purple78.png
marker_purple79.png
marker_purple7.png
marker_purple80.png
marker_purple81.png
marker_purple82.png
marker_purple83.png
marker_purple84.png
marker_purple85.png
marker_purple86.png
marker_purple87.png
marker_purple88.png
marker_purple89.png
marker_purple8.png
marker_purple90.png
marker_purple91.png
marker_purple92.png
marker_purple93.png
marker_purple94.png
marker_purple95.png
marker_purple96.png
marker_purple97.png
marker_purple98.png
marker_purple99.png
marker_purple9.png
marker_purpleA.png
marker_purpleB.png
marker_purpleC.png
marker_purpleD.png
marker_purpleE.png
marker_purpleF.png
marker_purpleG.png
marker_purpleH.png
marker_purpleI.png
marker_purpleJ.png
marker_purpleK.png
marker_purpleL.png
marker_purpleM.png
marker_purpleN.png
marker_purpleO.png
marker_purple=.png
marker_purple-.png
marker_purple!.png
marker_purple.png
marker_purple@.png
marker_purple$.png
marker_purple&.png
marker_purple#.png
marker_purple%.png
marker_purple+.png
marker_purpleP.png
marker_purpleQ.png
marker_purpleR.png
marker_purpleS.png
marker_purpleT.png
marker_purpleU.png
marker_purpleV.png
marker_purpleW.png
marker_purpleX.png
marker_purpleY.png
marker_purpleZ.png
marker_red100.png
marker_red10.png
marker_red11.png
marker_red12.png
marker_red13.png
marker_red14.png
marker_red15.png
marker_red16.png
marker_red17.png
marker_red18.png
marker_red19.png
marker_red1.png
marker_red20.png
marker_red21.png
marker_red22.png
marker_red23.png
marker_red24.png
marker_red25.png
marker_red26.png
marker_red27.png
marker_red28.png
marker_red29.png
marker_red2.png
marker_red30.png
marker_red31.png
marker_red32.png
marker_red33.png
marker_red34.png
marker_red35.png
marker_red36.png
marker_red37.png
marker_red38.png
marker_red39.png
marker_red3.png
marker_red40.png
marker_red41.png
marker_red42.png
marker_red43.png
marker_red44.png
marker_red45.png
marker_red46.png
marker_red47.png
marker_red48.png
marker_red49.png
marker_red4.png
marker_red50.png
marker_red51.png
marker_red52.png
marker_red53.png
marker_red54.png
marker_red55.png
marker_red56.png
marker_red57.png
marker_red58.png
marker_red59.png
marker_red5.png
marker_red60.png
marker_red61.png
marker_red62.png
marker_red63.png
marker_red64.png
marker_red65.png
marker_red66.png
marker_red67.png
marker_red68.png
marker_red69.png
marker_red6.png
marker_red70.png
marker_red71.png
marker_red72.png
marker_red73.png
marker_red74.png
marker_red75.png
marker_red76.png
marker_red77.png
marker_red78.png
marker_red79.png
marker_red7.png
marker_red80.png
marker_red81.png
marker_red82.png
marker_red83.png
marker_red84.png
marker_red85.png
marker_red86.png
marker_red87.png
marker_red88.png
marker_red89.png
marker_red8.png
marker_red90.png
marker_red91.png
marker_red92.png
marker_red93.png
marker_red94.png
marker_red95.png
marker_red96.png
marker_red97.png
marker_red98.png
marker_red99.png
marker_red9.png
marker_redA.png
marker_redB.png
marker_redC.png
marker_redD.png
marker_redE.png
marker_redF.png
marker_redG.png
marker_redH.png
marker_redI.png
marker_redJ.png
marker_redK.png
marker_redL.png
marker_redM.png
marker_redN.png
marker_redO.png
marker_red=.png
marker_red-.png
marker_red!.png
marker_red.png
marker_red@.png
marker_red$.png
marker_red&.png
marker_red#.png
marker_red%.png
marker_red+.png
marker_redP.png
marker_redQ.png
marker_redR.png
marker_redS.png
marker_redT.png
marker_redU.png
marker_redV.png
marker_redW.png
marker_redX.png
marker_redY.png
marker_redZ.png
marker_white100.png
marker_white10.png
marker_white11.png
marker_white12.png
marker_white13.png
marker_white14.png
marker_white15.png
marker_white16.png
marker_white17.png
marker_white18.png
marker_white19.png
marker_white1.png
marker_white20.png
marker_white21.png
marker_white22.png
marker_white23.png
marker_white24.png
marker_white25.png
marker_white26.png
marker_white27.png
marker_white28.png
marker_white29.png
marker_white2.png
marker_white30.png
marker_white31.png
marker_white32.png
marker_white33.png
marker_white34.png
marker_white35.png
marker_white36.png
marker_white37.png
marker_white38.png
marker_white39.png
marker_white3.png
marker_white40.png
marker_white41.png
marker_white42.png
marker_white43.png
marker_white44.png
marker_white45.png
marker_white46.png
marker_white47.png
marker_white48.png
marker_white49.png
marker_white4.png
marker_white50.png
marker_white51.png
marker_white52.png
marker_white53.png
marker_white54.png
marker_white55.png
marker_white56.png
marker_white57.png
marker_white58.png
marker_white59.png
marker_white5.png
marker_white60.png
marker_white61.png
marker_white62.png
marker_white63.png
marker_white64.png
marker_white65.png
marker_white66.png
marker_white67.png
marker_white68.png
marker_white69.png
marker_white6.png
marker_white70.png
marker_white71.png
marker_white72.png
marker_white73.png
marker_white74.png
marker_white75.png
marker_white76.png
marker_white77.png
marker_white78.png
marker_white79.png
marker_white7.png
marker_white80.png
marker_white81.png
marker_white82.png
marker_white83.png
marker_white84.png
marker_white85.png
marker_white86.png
marker_white87.png
marker_white88.png
marker_white89.png
marker_white8.png
marker_white90.png
marker_white91.png
marker_white92.png
marker_white93.png
marker_white94.png
marker_white95.png
marker_white96.png
marker_white97.png
marker_white98.png
marker_white99.png
marker_white9.png
marker_whiteA.png
marker_whiteB.png
marker_whiteC.png
marker_whiteD.png
marker_whiteE.png
marker_whiteF.png
marker_whiteG.png
marker_whiteH.png
marker_whiteI.png
marker_whiteJ.png
marker_whiteK.png
marker_whiteL.png
marker_whiteM.png
marker_whiteN.png
marker_whiteO.png
marker_white=.png
marker_white-.png
marker_white!.png
marker_white.png
marker_white@.png
marker_white$.png
marker_white&.png
marker_white#.png
marker_white%.png
marker_white+.png
marker_whiteP.png
marker_whiteQ.png
marker_whiteR.png
marker_whiteS.png
marker_whiteT.png
marker_whiteU.png
marker_whiteV.png
marker_whiteW.png
marker_whiteX.png
marker_whiteY.png
marker_whiteZ.png
marker_yellow100.png
marker_yellow10.png
marker_yellow11.png
marker_yellow12.png
marker_yellow13.png
marker_yellow14.png
marker_yellow15.png
marker_yellow16.png
marker_yellow17.png
marker_yellow18.png
marker_yellow19.png
marker_yellow1.png
marker_yellow20.png
marker_yellow21.png
marker_yellow22.png
marker_yellow23.png
marker_yellow24.png
marker_yellow25.png
marker_yellow26.png
marker_yellow27.png
marker_yellow28.png
marker_yellow29.png
marker_yellow2.png
marker_yellow30.png
marker_yellow31.png
marker_yellow32.png
marker_yellow33.png
marker_yellow34.png
marker_yellow35.png
marker_yellow36.png
marker_yellow37.png
marker_yellow38.png
marker_yellow39.png
marker_yellow3.png
marker_yellow40.png
marker_yellow41.png
marker_yellow42.png
marker_yellow43.png
marker_yellow44.png
marker_yellow45.png
marker_yellow46.png
marker_yellow47.png
marker_yellow48.png
marker_yellow49.png
marker_yellow4.png
marker_yellow50.png
marker_yellow51.png
marker_yellow52.png
marker_yellow53.png
marker_yellow54.png
marker_yellow55.png
marker_yellow56.png
marker_yellow57.png
marker_yellow58.png
marker_yellow59.png
marker_yellow5.png
marker_yellow60.png
marker_yellow61.png
marker_yellow62.png
marker_yellow63.png
marker_yellow64.png
marker_yellow65.png
marker_yellow66.png
marker_yellow67.png
marker_yellow68.png
marker_yellow69.png
marker_yellow6.png
marker_yellow70.png
marker_yellow71.png
marker_yellow72.png
marker_yellow73.png
marker_yellow74.png
marker_yellow75.png
marker_yellow76.png
marker_yellow77.png
marker_yellow78.png
marker_yellow79.png
marker_yellow7.png
marker_yellow80.png
marker_yellow81.png
marker_yellow82.png
marker_yellow83.png
marker_yellow84.png
marker_yellow85.png
marker_yellow86.png
marker_yellow87.png
marker_yellow88.png
marker_yellow89.png
marker_yellow8.png
marker_yellow90.png
marker_yellow91.png
marker_yellow92.png
marker_yellow93.png
marker_yellow94.png
marker_yellow95.png
marker_yellow96.png
marker_yellow97.png
marker_yellow98.png
marker_yellow99.png
marker_yellow9.png
marker_yellowA.png
marker_yellowB.png
marker_yellowC.png
marker_yellowD.png
marker_yellowE.png
marker_yellowF.png
marker_yellowG.png
marker_yellowH.png
marker_yellowI.png
marker_yellowJ.png
marker_yellowK.png
marker_yellowL.png
marker_yellowM.png
marker_yellowN.png
marker_yellowO.png
marker_yellow=.png
marker_yellow-.png
marker_yellow!.png
marker_yellow.png
marker_yellow@.png
marker_yellow$.png
marker_yellow&.png
marker_yellow#.png
marker_yellow%.png
marker_yellow+.png
marker_yellowP.png
marker_yellowQ.png
marker_yellowR.png
marker_yellowS.png
marker_yellowT.png
marker_yellowU.png
marker_yellowV.png
marker_yellowW.png
marker_yellowX.png
marker_yellowY.png
marker_yellowZ.png
\ No newline at end of file diff --git a/assets/MapIcons/colorNumbers/marker_black!.png b/assets/MapIcons/colorNumbers/marker_black!.png new file mode 100644 index 00000000..a32ff3d5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black#.png b/assets/MapIcons/colorNumbers/marker_black#.png new file mode 100644 index 00000000..382e5e69 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black$.png b/assets/MapIcons/colorNumbers/marker_black$.png new file mode 100644 index 00000000..0aca6957 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black%.png b/assets/MapIcons/colorNumbers/marker_black%.png new file mode 100644 index 00000000..4f71e2a8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black&.png b/assets/MapIcons/colorNumbers/marker_black&.png new file mode 100644 index 00000000..0a30fa4d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black+.png b/assets/MapIcons/colorNumbers/marker_black+.png new file mode 100644 index 00000000..6ddbe240 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black-.png b/assets/MapIcons/colorNumbers/marker_black-.png new file mode 100644 index 00000000..05503923 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black.png b/assets/MapIcons/colorNumbers/marker_black.png new file mode 100644 index 00000000..13746327 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black1.png b/assets/MapIcons/colorNumbers/marker_black1.png new file mode 100644 index 00000000..7dd5c3fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black10.png b/assets/MapIcons/colorNumbers/marker_black10.png new file mode 100644 index 00000000..c4175b1d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black100.png b/assets/MapIcons/colorNumbers/marker_black100.png new file mode 100644 index 00000000..7906f292 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black11.png b/assets/MapIcons/colorNumbers/marker_black11.png new file mode 100644 index 00000000..8a42de49 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black12.png b/assets/MapIcons/colorNumbers/marker_black12.png new file mode 100644 index 00000000..c51a36c2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black13.png b/assets/MapIcons/colorNumbers/marker_black13.png new file mode 100644 index 00000000..63dd7bbc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black14.png b/assets/MapIcons/colorNumbers/marker_black14.png new file mode 100644 index 00000000..b9f4fb70 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black15.png b/assets/MapIcons/colorNumbers/marker_black15.png new file mode 100644 index 00000000..7de999ea Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black16.png b/assets/MapIcons/colorNumbers/marker_black16.png new file mode 100644 index 00000000..f3f847cb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black17.png b/assets/MapIcons/colorNumbers/marker_black17.png new file mode 100644 index 00000000..12b34dbc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black18.png b/assets/MapIcons/colorNumbers/marker_black18.png new file mode 100644 index 00000000..3bc8fc42 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black19.png b/assets/MapIcons/colorNumbers/marker_black19.png new file mode 100644 index 00000000..a55a811a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black2.png b/assets/MapIcons/colorNumbers/marker_black2.png new file mode 100644 index 00000000..a83954fc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black20.png b/assets/MapIcons/colorNumbers/marker_black20.png new file mode 100644 index 00000000..47dbc710 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black21.png b/assets/MapIcons/colorNumbers/marker_black21.png new file mode 100644 index 00000000..94dc0582 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black22.png b/assets/MapIcons/colorNumbers/marker_black22.png new file mode 100644 index 00000000..96bf87b1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black23.png b/assets/MapIcons/colorNumbers/marker_black23.png new file mode 100644 index 00000000..b03718b1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black24.png b/assets/MapIcons/colorNumbers/marker_black24.png new file mode 100644 index 00000000..b5393ca6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black25.png b/assets/MapIcons/colorNumbers/marker_black25.png new file mode 100644 index 00000000..1c1798d6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black26.png b/assets/MapIcons/colorNumbers/marker_black26.png new file mode 100644 index 00000000..e4d6ca4d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black27.png b/assets/MapIcons/colorNumbers/marker_black27.png new file mode 100644 index 00000000..75f7e5bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black28.png b/assets/MapIcons/colorNumbers/marker_black28.png new file mode 100644 index 00000000..66b912ea Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black29.png b/assets/MapIcons/colorNumbers/marker_black29.png new file mode 100644 index 00000000..1534e8ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black3.png b/assets/MapIcons/colorNumbers/marker_black3.png new file mode 100644 index 00000000..0e97bc57 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black30.png b/assets/MapIcons/colorNumbers/marker_black30.png new file mode 100644 index 00000000..9c3ca4ba Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black31.png b/assets/MapIcons/colorNumbers/marker_black31.png new file mode 100644 index 00000000..b008ae8b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black32.png b/assets/MapIcons/colorNumbers/marker_black32.png new file mode 100644 index 00000000..696078e7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black33.png b/assets/MapIcons/colorNumbers/marker_black33.png new file mode 100644 index 00000000..71251d6f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black34.png b/assets/MapIcons/colorNumbers/marker_black34.png new file mode 100644 index 00000000..478d2eda Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black35.png b/assets/MapIcons/colorNumbers/marker_black35.png new file mode 100644 index 00000000..c91b1310 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black36.png b/assets/MapIcons/colorNumbers/marker_black36.png new file mode 100644 index 00000000..bc0e7ca2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black37.png b/assets/MapIcons/colorNumbers/marker_black37.png new file mode 100644 index 00000000..8a620eda Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black38.png b/assets/MapIcons/colorNumbers/marker_black38.png new file mode 100644 index 00000000..01851166 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black39.png b/assets/MapIcons/colorNumbers/marker_black39.png new file mode 100644 index 00000000..6c8765cd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black4.png b/assets/MapIcons/colorNumbers/marker_black4.png new file mode 100644 index 00000000..51837e19 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black40.png b/assets/MapIcons/colorNumbers/marker_black40.png new file mode 100644 index 00000000..8ecefba3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black41.png b/assets/MapIcons/colorNumbers/marker_black41.png new file mode 100644 index 00000000..8a0bfce3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black42.png b/assets/MapIcons/colorNumbers/marker_black42.png new file mode 100644 index 00000000..9cea77fc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black43.png b/assets/MapIcons/colorNumbers/marker_black43.png new file mode 100644 index 00000000..0ab7b15a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black44.png b/assets/MapIcons/colorNumbers/marker_black44.png new file mode 100644 index 00000000..f21fd1e6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black45.png b/assets/MapIcons/colorNumbers/marker_black45.png new file mode 100644 index 00000000..a8b03eb5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black46.png b/assets/MapIcons/colorNumbers/marker_black46.png new file mode 100644 index 00000000..ab7c7a82 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black47.png b/assets/MapIcons/colorNumbers/marker_black47.png new file mode 100644 index 00000000..08ebd7c0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black48.png b/assets/MapIcons/colorNumbers/marker_black48.png new file mode 100644 index 00000000..e835b414 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black49.png b/assets/MapIcons/colorNumbers/marker_black49.png new file mode 100644 index 00000000..53c69711 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black5.png b/assets/MapIcons/colorNumbers/marker_black5.png new file mode 100644 index 00000000..058e979d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black50.png b/assets/MapIcons/colorNumbers/marker_black50.png new file mode 100644 index 00000000..8984545b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black51.png b/assets/MapIcons/colorNumbers/marker_black51.png new file mode 100644 index 00000000..efd24236 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black52.png b/assets/MapIcons/colorNumbers/marker_black52.png new file mode 100644 index 00000000..e0419e58 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black53.png b/assets/MapIcons/colorNumbers/marker_black53.png new file mode 100644 index 00000000..9adeb0b2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black54.png b/assets/MapIcons/colorNumbers/marker_black54.png new file mode 100644 index 00000000..cd107d6e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black55.png b/assets/MapIcons/colorNumbers/marker_black55.png new file mode 100644 index 00000000..ede5c72f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black56.png b/assets/MapIcons/colorNumbers/marker_black56.png new file mode 100644 index 00000000..af2dd053 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black57.png b/assets/MapIcons/colorNumbers/marker_black57.png new file mode 100644 index 00000000..4bd2f247 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black58.png b/assets/MapIcons/colorNumbers/marker_black58.png new file mode 100644 index 00000000..084401ba Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black59.png b/assets/MapIcons/colorNumbers/marker_black59.png new file mode 100644 index 00000000..cf77d681 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black6.png b/assets/MapIcons/colorNumbers/marker_black6.png new file mode 100644 index 00000000..18c731a7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black60.png b/assets/MapIcons/colorNumbers/marker_black60.png new file mode 100644 index 00000000..24475f01 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black61.png b/assets/MapIcons/colorNumbers/marker_black61.png new file mode 100644 index 00000000..6464a6b7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black62.png b/assets/MapIcons/colorNumbers/marker_black62.png new file mode 100644 index 00000000..c89a9e80 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black63.png b/assets/MapIcons/colorNumbers/marker_black63.png new file mode 100644 index 00000000..0d9c6138 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black64.png b/assets/MapIcons/colorNumbers/marker_black64.png new file mode 100644 index 00000000..ec1ee82b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black65.png b/assets/MapIcons/colorNumbers/marker_black65.png new file mode 100644 index 00000000..366b23fd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black66.png b/assets/MapIcons/colorNumbers/marker_black66.png new file mode 100644 index 00000000..43b45153 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black67.png b/assets/MapIcons/colorNumbers/marker_black67.png new file mode 100644 index 00000000..8d133267 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black68.png b/assets/MapIcons/colorNumbers/marker_black68.png new file mode 100644 index 00000000..bf002c30 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black69.png b/assets/MapIcons/colorNumbers/marker_black69.png new file mode 100644 index 00000000..22235cb2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black7.png b/assets/MapIcons/colorNumbers/marker_black7.png new file mode 100644 index 00000000..0ad6fa05 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black70.png b/assets/MapIcons/colorNumbers/marker_black70.png new file mode 100644 index 00000000..d18b05df Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black71.png b/assets/MapIcons/colorNumbers/marker_black71.png new file mode 100644 index 00000000..9343b594 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black72.png b/assets/MapIcons/colorNumbers/marker_black72.png new file mode 100644 index 00000000..ce991b31 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black73.png b/assets/MapIcons/colorNumbers/marker_black73.png new file mode 100644 index 00000000..e8dd7138 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black74.png b/assets/MapIcons/colorNumbers/marker_black74.png new file mode 100644 index 00000000..20e61482 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black75.png b/assets/MapIcons/colorNumbers/marker_black75.png new file mode 100644 index 00000000..d2f82777 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black76.png b/assets/MapIcons/colorNumbers/marker_black76.png new file mode 100644 index 00000000..df1cf6ef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black77.png b/assets/MapIcons/colorNumbers/marker_black77.png new file mode 100644 index 00000000..6bbbc5ab Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black78.png b/assets/MapIcons/colorNumbers/marker_black78.png new file mode 100644 index 00000000..30eaebad Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black79.png b/assets/MapIcons/colorNumbers/marker_black79.png new file mode 100644 index 00000000..600c1f8e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black8.png b/assets/MapIcons/colorNumbers/marker_black8.png new file mode 100644 index 00000000..1d298917 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black80.png b/assets/MapIcons/colorNumbers/marker_black80.png new file mode 100644 index 00000000..a1a54058 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black81.png b/assets/MapIcons/colorNumbers/marker_black81.png new file mode 100644 index 00000000..deaf3907 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black82.png b/assets/MapIcons/colorNumbers/marker_black82.png new file mode 100644 index 00000000..744a6912 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black83.png b/assets/MapIcons/colorNumbers/marker_black83.png new file mode 100644 index 00000000..c5752ec9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black84.png b/assets/MapIcons/colorNumbers/marker_black84.png new file mode 100644 index 00000000..861a7ec6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black85.png b/assets/MapIcons/colorNumbers/marker_black85.png new file mode 100644 index 00000000..adeecdbd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black86.png b/assets/MapIcons/colorNumbers/marker_black86.png new file mode 100644 index 00000000..7078c90f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black87.png b/assets/MapIcons/colorNumbers/marker_black87.png new file mode 100644 index 00000000..1fe17bd1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black88.png b/assets/MapIcons/colorNumbers/marker_black88.png new file mode 100644 index 00000000..5d1752f5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black89.png b/assets/MapIcons/colorNumbers/marker_black89.png new file mode 100644 index 00000000..62349366 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black9.png b/assets/MapIcons/colorNumbers/marker_black9.png new file mode 100644 index 00000000..d83a4101 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black90.png b/assets/MapIcons/colorNumbers/marker_black90.png new file mode 100644 index 00000000..69f18c15 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black91.png b/assets/MapIcons/colorNumbers/marker_black91.png new file mode 100644 index 00000000..baa4b9fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black92.png b/assets/MapIcons/colorNumbers/marker_black92.png new file mode 100644 index 00000000..b2c9bbbd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black93.png b/assets/MapIcons/colorNumbers/marker_black93.png new file mode 100644 index 00000000..73089367 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black94.png b/assets/MapIcons/colorNumbers/marker_black94.png new file mode 100644 index 00000000..82b07d66 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black95.png b/assets/MapIcons/colorNumbers/marker_black95.png new file mode 100644 index 00000000..b4330be1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black96.png b/assets/MapIcons/colorNumbers/marker_black96.png new file mode 100644 index 00000000..ed689375 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black97.png b/assets/MapIcons/colorNumbers/marker_black97.png new file mode 100644 index 00000000..dc72479d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black98.png b/assets/MapIcons/colorNumbers/marker_black98.png new file mode 100644 index 00000000..ae2ae898 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black99.png b/assets/MapIcons/colorNumbers/marker_black99.png new file mode 100644 index 00000000..9e906d08 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black=.png b/assets/MapIcons/colorNumbers/marker_black=.png new file mode 100644 index 00000000..ff29318d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_black@.png b/assets/MapIcons/colorNumbers/marker_black@.png new file mode 100644 index 00000000..c768c9ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_black@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackA.png b/assets/MapIcons/colorNumbers/marker_blackA.png new file mode 100644 index 00000000..0b917963 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackB.png b/assets/MapIcons/colorNumbers/marker_blackB.png new file mode 100644 index 00000000..3badb249 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackC.png b/assets/MapIcons/colorNumbers/marker_blackC.png new file mode 100644 index 00000000..6ad2b0d0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackD.png b/assets/MapIcons/colorNumbers/marker_blackD.png new file mode 100644 index 00000000..6d505cb7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackE.png b/assets/MapIcons/colorNumbers/marker_blackE.png new file mode 100644 index 00000000..43243266 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackF.png b/assets/MapIcons/colorNumbers/marker_blackF.png new file mode 100644 index 00000000..affdbca1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackG.png b/assets/MapIcons/colorNumbers/marker_blackG.png new file mode 100644 index 00000000..fa2417ac Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackH.png b/assets/MapIcons/colorNumbers/marker_blackH.png new file mode 100644 index 00000000..17134cbb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackI.png b/assets/MapIcons/colorNumbers/marker_blackI.png new file mode 100644 index 00000000..0aa77c74 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackJ.png b/assets/MapIcons/colorNumbers/marker_blackJ.png new file mode 100644 index 00000000..91fab516 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackK.png b/assets/MapIcons/colorNumbers/marker_blackK.png new file mode 100644 index 00000000..637a3d0c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackL.png b/assets/MapIcons/colorNumbers/marker_blackL.png new file mode 100644 index 00000000..597c4c53 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackM.png b/assets/MapIcons/colorNumbers/marker_blackM.png new file mode 100644 index 00000000..c34d0504 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackN.png b/assets/MapIcons/colorNumbers/marker_blackN.png new file mode 100644 index 00000000..21fe2c28 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackO.png b/assets/MapIcons/colorNumbers/marker_blackO.png new file mode 100644 index 00000000..76727239 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackP.png b/assets/MapIcons/colorNumbers/marker_blackP.png new file mode 100644 index 00000000..df4ebad9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackQ.png b/assets/MapIcons/colorNumbers/marker_blackQ.png new file mode 100644 index 00000000..4de2d736 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackR.png b/assets/MapIcons/colorNumbers/marker_blackR.png new file mode 100644 index 00000000..7e5ba363 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackS.png b/assets/MapIcons/colorNumbers/marker_blackS.png new file mode 100644 index 00000000..7e4573ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackT.png b/assets/MapIcons/colorNumbers/marker_blackT.png new file mode 100644 index 00000000..ce503d7d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackU.png b/assets/MapIcons/colorNumbers/marker_blackU.png new file mode 100644 index 00000000..09527bd7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackV.png b/assets/MapIcons/colorNumbers/marker_blackV.png new file mode 100644 index 00000000..7698ea0b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackW.png b/assets/MapIcons/colorNumbers/marker_blackW.png new file mode 100644 index 00000000..722ed4f6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackX.png b/assets/MapIcons/colorNumbers/marker_blackX.png new file mode 100644 index 00000000..e699c46c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackY.png b/assets/MapIcons/colorNumbers/marker_blackY.png new file mode 100644 index 00000000..79b6a4e5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blackZ.png b/assets/MapIcons/colorNumbers/marker_blackZ.png new file mode 100644 index 00000000..1a54d33d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blackZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue!.png b/assets/MapIcons/colorNumbers/marker_blue!.png new file mode 100644 index 00000000..37c66c84 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue#.png b/assets/MapIcons/colorNumbers/marker_blue#.png new file mode 100644 index 00000000..daa34a7d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue$.png b/assets/MapIcons/colorNumbers/marker_blue$.png new file mode 100644 index 00000000..74533347 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue%.png b/assets/MapIcons/colorNumbers/marker_blue%.png new file mode 100644 index 00000000..f39083a9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue&.png b/assets/MapIcons/colorNumbers/marker_blue&.png new file mode 100644 index 00000000..3800f7f2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue+.png b/assets/MapIcons/colorNumbers/marker_blue+.png new file mode 100644 index 00000000..81147377 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue-.png b/assets/MapIcons/colorNumbers/marker_blue-.png new file mode 100644 index 00000000..6b0c49e2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue.png b/assets/MapIcons/colorNumbers/marker_blue.png new file mode 100644 index 00000000..eb7d65fd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue1.png b/assets/MapIcons/colorNumbers/marker_blue1.png new file mode 100644 index 00000000..66d8a8ca Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue10.png b/assets/MapIcons/colorNumbers/marker_blue10.png new file mode 100644 index 00000000..2d7c47f9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue100.png b/assets/MapIcons/colorNumbers/marker_blue100.png new file mode 100644 index 00000000..88892572 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue11.png b/assets/MapIcons/colorNumbers/marker_blue11.png new file mode 100644 index 00000000..babf59da Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue12.png b/assets/MapIcons/colorNumbers/marker_blue12.png new file mode 100644 index 00000000..f1b725b0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue13.png b/assets/MapIcons/colorNumbers/marker_blue13.png new file mode 100644 index 00000000..7de0dd76 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue14.png b/assets/MapIcons/colorNumbers/marker_blue14.png new file mode 100644 index 00000000..9f32a967 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue15.png b/assets/MapIcons/colorNumbers/marker_blue15.png new file mode 100644 index 00000000..9266f128 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue16.png b/assets/MapIcons/colorNumbers/marker_blue16.png new file mode 100644 index 00000000..66da62c8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue17.png b/assets/MapIcons/colorNumbers/marker_blue17.png new file mode 100644 index 00000000..7b819162 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue18.png b/assets/MapIcons/colorNumbers/marker_blue18.png new file mode 100644 index 00000000..23bcfd9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue19.png b/assets/MapIcons/colorNumbers/marker_blue19.png new file mode 100644 index 00000000..3faf2149 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue2.png b/assets/MapIcons/colorNumbers/marker_blue2.png new file mode 100644 index 00000000..deefdbe5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue20.png b/assets/MapIcons/colorNumbers/marker_blue20.png new file mode 100644 index 00000000..f6d60cdf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue21.png b/assets/MapIcons/colorNumbers/marker_blue21.png new file mode 100644 index 00000000..b495d8e8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue22.png b/assets/MapIcons/colorNumbers/marker_blue22.png new file mode 100644 index 00000000..fb7cb638 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue23.png b/assets/MapIcons/colorNumbers/marker_blue23.png new file mode 100644 index 00000000..b377b559 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue24.png b/assets/MapIcons/colorNumbers/marker_blue24.png new file mode 100644 index 00000000..a3ea06f7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue25.png b/assets/MapIcons/colorNumbers/marker_blue25.png new file mode 100644 index 00000000..9201711a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue26.png b/assets/MapIcons/colorNumbers/marker_blue26.png new file mode 100644 index 00000000..81fe4e42 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue27.png b/assets/MapIcons/colorNumbers/marker_blue27.png new file mode 100644 index 00000000..5ee38e15 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue28.png b/assets/MapIcons/colorNumbers/marker_blue28.png new file mode 100644 index 00000000..9e557285 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue29.png b/assets/MapIcons/colorNumbers/marker_blue29.png new file mode 100644 index 00000000..24bb6faa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue3.png b/assets/MapIcons/colorNumbers/marker_blue3.png new file mode 100644 index 00000000..886db58b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue30.png b/assets/MapIcons/colorNumbers/marker_blue30.png new file mode 100644 index 00000000..3972f79b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue31.png b/assets/MapIcons/colorNumbers/marker_blue31.png new file mode 100644 index 00000000..82f72fd6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue32.png b/assets/MapIcons/colorNumbers/marker_blue32.png new file mode 100644 index 00000000..9c1d5a47 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue33.png b/assets/MapIcons/colorNumbers/marker_blue33.png new file mode 100644 index 00000000..c30487ee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue34.png b/assets/MapIcons/colorNumbers/marker_blue34.png new file mode 100644 index 00000000..6e26d45b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue35.png b/assets/MapIcons/colorNumbers/marker_blue35.png new file mode 100644 index 00000000..68f118ab Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue36.png b/assets/MapIcons/colorNumbers/marker_blue36.png new file mode 100644 index 00000000..7089afe1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue37.png b/assets/MapIcons/colorNumbers/marker_blue37.png new file mode 100644 index 00000000..2a769cc2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue38.png b/assets/MapIcons/colorNumbers/marker_blue38.png new file mode 100644 index 00000000..d15fd08a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue39.png b/assets/MapIcons/colorNumbers/marker_blue39.png new file mode 100644 index 00000000..6b13f156 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue4.png b/assets/MapIcons/colorNumbers/marker_blue4.png new file mode 100644 index 00000000..60188d67 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue40.png b/assets/MapIcons/colorNumbers/marker_blue40.png new file mode 100644 index 00000000..6a9c03be Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue41.png b/assets/MapIcons/colorNumbers/marker_blue41.png new file mode 100644 index 00000000..546b8b0d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue42.png b/assets/MapIcons/colorNumbers/marker_blue42.png new file mode 100644 index 00000000..fe8cad44 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue43.png b/assets/MapIcons/colorNumbers/marker_blue43.png new file mode 100644 index 00000000..13799970 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue44.png b/assets/MapIcons/colorNumbers/marker_blue44.png new file mode 100644 index 00000000..762f15f7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue45.png b/assets/MapIcons/colorNumbers/marker_blue45.png new file mode 100644 index 00000000..98173832 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue46.png b/assets/MapIcons/colorNumbers/marker_blue46.png new file mode 100644 index 00000000..352e4cd8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue47.png b/assets/MapIcons/colorNumbers/marker_blue47.png new file mode 100644 index 00000000..202bf772 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue48.png b/assets/MapIcons/colorNumbers/marker_blue48.png new file mode 100644 index 00000000..70720b7d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue49.png b/assets/MapIcons/colorNumbers/marker_blue49.png new file mode 100644 index 00000000..ee584ec6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue5.png b/assets/MapIcons/colorNumbers/marker_blue5.png new file mode 100644 index 00000000..739b26e7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue50.png b/assets/MapIcons/colorNumbers/marker_blue50.png new file mode 100644 index 00000000..c9801bc4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue51.png b/assets/MapIcons/colorNumbers/marker_blue51.png new file mode 100644 index 00000000..544debe1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue52.png b/assets/MapIcons/colorNumbers/marker_blue52.png new file mode 100644 index 00000000..eceac8ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue53.png b/assets/MapIcons/colorNumbers/marker_blue53.png new file mode 100644 index 00000000..b7d1d421 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue54.png b/assets/MapIcons/colorNumbers/marker_blue54.png new file mode 100644 index 00000000..5bf569fc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue55.png b/assets/MapIcons/colorNumbers/marker_blue55.png new file mode 100644 index 00000000..26e07b68 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue56.png b/assets/MapIcons/colorNumbers/marker_blue56.png new file mode 100644 index 00000000..c8e57ea1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue57.png b/assets/MapIcons/colorNumbers/marker_blue57.png new file mode 100644 index 00000000..ef0fc465 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue58.png b/assets/MapIcons/colorNumbers/marker_blue58.png new file mode 100644 index 00000000..70f9e656 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue59.png b/assets/MapIcons/colorNumbers/marker_blue59.png new file mode 100644 index 00000000..a75e82fb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue6.png b/assets/MapIcons/colorNumbers/marker_blue6.png new file mode 100644 index 00000000..497ba526 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue60.png b/assets/MapIcons/colorNumbers/marker_blue60.png new file mode 100644 index 00000000..3772f4c5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue61.png b/assets/MapIcons/colorNumbers/marker_blue61.png new file mode 100644 index 00000000..db3d07a0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue62.png b/assets/MapIcons/colorNumbers/marker_blue62.png new file mode 100644 index 00000000..ecfc729a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue63.png b/assets/MapIcons/colorNumbers/marker_blue63.png new file mode 100644 index 00000000..31113970 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue64.png b/assets/MapIcons/colorNumbers/marker_blue64.png new file mode 100644 index 00000000..ecc7f9b1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue65.png b/assets/MapIcons/colorNumbers/marker_blue65.png new file mode 100644 index 00000000..e0a32c4b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue66.png b/assets/MapIcons/colorNumbers/marker_blue66.png new file mode 100644 index 00000000..cbd4adb4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue67.png b/assets/MapIcons/colorNumbers/marker_blue67.png new file mode 100644 index 00000000..ceb3d51f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue68.png b/assets/MapIcons/colorNumbers/marker_blue68.png new file mode 100644 index 00000000..524dd5b8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue69.png b/assets/MapIcons/colorNumbers/marker_blue69.png new file mode 100644 index 00000000..80762eb5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue7.png b/assets/MapIcons/colorNumbers/marker_blue7.png new file mode 100644 index 00000000..2bef4610 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue70.png b/assets/MapIcons/colorNumbers/marker_blue70.png new file mode 100644 index 00000000..da8d9ad1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue71.png b/assets/MapIcons/colorNumbers/marker_blue71.png new file mode 100644 index 00000000..0a13de63 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue72.png b/assets/MapIcons/colorNumbers/marker_blue72.png new file mode 100644 index 00000000..b89f8ba5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue73.png b/assets/MapIcons/colorNumbers/marker_blue73.png new file mode 100644 index 00000000..cb99deef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue74.png b/assets/MapIcons/colorNumbers/marker_blue74.png new file mode 100644 index 00000000..59b97cc6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue75.png b/assets/MapIcons/colorNumbers/marker_blue75.png new file mode 100644 index 00000000..dbfd67d3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue76.png b/assets/MapIcons/colorNumbers/marker_blue76.png new file mode 100644 index 00000000..d726e3b9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue77.png b/assets/MapIcons/colorNumbers/marker_blue77.png new file mode 100644 index 00000000..247af5f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue78.png b/assets/MapIcons/colorNumbers/marker_blue78.png new file mode 100644 index 00000000..a7df6ad7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue79.png b/assets/MapIcons/colorNumbers/marker_blue79.png new file mode 100644 index 00000000..2e710db0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue8.png b/assets/MapIcons/colorNumbers/marker_blue8.png new file mode 100644 index 00000000..d70a30d2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue80.png b/assets/MapIcons/colorNumbers/marker_blue80.png new file mode 100644 index 00000000..533ac373 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue81.png b/assets/MapIcons/colorNumbers/marker_blue81.png new file mode 100644 index 00000000..f3bd24fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue82.png b/assets/MapIcons/colorNumbers/marker_blue82.png new file mode 100644 index 00000000..2ad3d144 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue83.png b/assets/MapIcons/colorNumbers/marker_blue83.png new file mode 100644 index 00000000..7128f065 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue84.png b/assets/MapIcons/colorNumbers/marker_blue84.png new file mode 100644 index 00000000..d7669323 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue85.png b/assets/MapIcons/colorNumbers/marker_blue85.png new file mode 100644 index 00000000..911e7a77 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue86.png b/assets/MapIcons/colorNumbers/marker_blue86.png new file mode 100644 index 00000000..d7f1e480 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue87.png b/assets/MapIcons/colorNumbers/marker_blue87.png new file mode 100644 index 00000000..3d23a210 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue88.png b/assets/MapIcons/colorNumbers/marker_blue88.png new file mode 100644 index 00000000..af565fbd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue89.png b/assets/MapIcons/colorNumbers/marker_blue89.png new file mode 100644 index 00000000..294d3577 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue9.png b/assets/MapIcons/colorNumbers/marker_blue9.png new file mode 100644 index 00000000..42230111 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue90.png b/assets/MapIcons/colorNumbers/marker_blue90.png new file mode 100644 index 00000000..36daf4af Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue91.png b/assets/MapIcons/colorNumbers/marker_blue91.png new file mode 100644 index 00000000..6aef0b2f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue92.png b/assets/MapIcons/colorNumbers/marker_blue92.png new file mode 100644 index 00000000..8d46945b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue93.png b/assets/MapIcons/colorNumbers/marker_blue93.png new file mode 100644 index 00000000..c3278b0a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue94.png b/assets/MapIcons/colorNumbers/marker_blue94.png new file mode 100644 index 00000000..6b099fde Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue95.png b/assets/MapIcons/colorNumbers/marker_blue95.png new file mode 100644 index 00000000..3e3a6568 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue96.png b/assets/MapIcons/colorNumbers/marker_blue96.png new file mode 100644 index 00000000..dcc795dd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue97.png b/assets/MapIcons/colorNumbers/marker_blue97.png new file mode 100644 index 00000000..fbc3090b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue98.png b/assets/MapIcons/colorNumbers/marker_blue98.png new file mode 100644 index 00000000..f1cf667e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue99.png b/assets/MapIcons/colorNumbers/marker_blue99.png new file mode 100644 index 00000000..c29ba871 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue=.png b/assets/MapIcons/colorNumbers/marker_blue=.png new file mode 100644 index 00000000..98d68a04 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blue@.png b/assets/MapIcons/colorNumbers/marker_blue@.png new file mode 100644 index 00000000..18a758fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blue@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueA.png b/assets/MapIcons/colorNumbers/marker_blueA.png new file mode 100644 index 00000000..b617f764 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueB.png b/assets/MapIcons/colorNumbers/marker_blueB.png new file mode 100644 index 00000000..f0845cce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueC.png b/assets/MapIcons/colorNumbers/marker_blueC.png new file mode 100644 index 00000000..01603fd9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueD.png b/assets/MapIcons/colorNumbers/marker_blueD.png new file mode 100644 index 00000000..afed129b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueE.png b/assets/MapIcons/colorNumbers/marker_blueE.png new file mode 100644 index 00000000..854696ad Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueF.png b/assets/MapIcons/colorNumbers/marker_blueF.png new file mode 100644 index 00000000..57295d89 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueG.png b/assets/MapIcons/colorNumbers/marker_blueG.png new file mode 100644 index 00000000..43a8dfaa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueH.png b/assets/MapIcons/colorNumbers/marker_blueH.png new file mode 100644 index 00000000..79c35d43 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueI.png b/assets/MapIcons/colorNumbers/marker_blueI.png new file mode 100644 index 00000000..53afe8ff Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueJ.png b/assets/MapIcons/colorNumbers/marker_blueJ.png new file mode 100644 index 00000000..25b0c6e2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueK.png b/assets/MapIcons/colorNumbers/marker_blueK.png new file mode 100644 index 00000000..09a6c5b6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueL.png b/assets/MapIcons/colorNumbers/marker_blueL.png new file mode 100644 index 00000000..25e74d19 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueM.png b/assets/MapIcons/colorNumbers/marker_blueM.png new file mode 100644 index 00000000..0188203e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueN.png b/assets/MapIcons/colorNumbers/marker_blueN.png new file mode 100644 index 00000000..87c6112b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueO.png b/assets/MapIcons/colorNumbers/marker_blueO.png new file mode 100644 index 00000000..858dd456 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueP.png b/assets/MapIcons/colorNumbers/marker_blueP.png new file mode 100644 index 00000000..847532e2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueQ.png b/assets/MapIcons/colorNumbers/marker_blueQ.png new file mode 100644 index 00000000..f0715704 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueR.png b/assets/MapIcons/colorNumbers/marker_blueR.png new file mode 100644 index 00000000..5ace8570 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueS.png b/assets/MapIcons/colorNumbers/marker_blueS.png new file mode 100644 index 00000000..e32829f2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueT.png b/assets/MapIcons/colorNumbers/marker_blueT.png new file mode 100644 index 00000000..b663202c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueU.png b/assets/MapIcons/colorNumbers/marker_blueU.png new file mode 100644 index 00000000..611ce71d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueV.png b/assets/MapIcons/colorNumbers/marker_blueV.png new file mode 100644 index 00000000..06594441 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueW.png b/assets/MapIcons/colorNumbers/marker_blueW.png new file mode 100644 index 00000000..adc5127d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueX.png b/assets/MapIcons/colorNumbers/marker_blueX.png new file mode 100644 index 00000000..c01f954d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueY.png b/assets/MapIcons/colorNumbers/marker_blueY.png new file mode 100644 index 00000000..1e6fa8a8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_blueZ.png b/assets/MapIcons/colorNumbers/marker_blueZ.png new file mode 100644 index 00000000..82a51dc3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_blueZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green!.png b/assets/MapIcons/colorNumbers/marker_green!.png new file mode 100644 index 00000000..df9984f7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green#.png b/assets/MapIcons/colorNumbers/marker_green#.png new file mode 100644 index 00000000..4326c047 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green$.png b/assets/MapIcons/colorNumbers/marker_green$.png new file mode 100644 index 00000000..f5206aa6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green%.png b/assets/MapIcons/colorNumbers/marker_green%.png new file mode 100644 index 00000000..ba507e03 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green&.png b/assets/MapIcons/colorNumbers/marker_green&.png new file mode 100644 index 00000000..975a5821 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green+.png b/assets/MapIcons/colorNumbers/marker_green+.png new file mode 100644 index 00000000..16f593cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green-.png b/assets/MapIcons/colorNumbers/marker_green-.png new file mode 100644 index 00000000..224f674e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green.png b/assets/MapIcons/colorNumbers/marker_green.png new file mode 100644 index 00000000..9b829d6f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green1.png b/assets/MapIcons/colorNumbers/marker_green1.png new file mode 100644 index 00000000..fd471427 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green10.png b/assets/MapIcons/colorNumbers/marker_green10.png new file mode 100644 index 00000000..f7986526 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green100.png b/assets/MapIcons/colorNumbers/marker_green100.png new file mode 100644 index 00000000..926415ed Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green11.png b/assets/MapIcons/colorNumbers/marker_green11.png new file mode 100644 index 00000000..548affc6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green12.png b/assets/MapIcons/colorNumbers/marker_green12.png new file mode 100644 index 00000000..e05d4093 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green13.png b/assets/MapIcons/colorNumbers/marker_green13.png new file mode 100644 index 00000000..5053997b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green14.png b/assets/MapIcons/colorNumbers/marker_green14.png new file mode 100644 index 00000000..5126fec1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green15.png b/assets/MapIcons/colorNumbers/marker_green15.png new file mode 100644 index 00000000..63ecc145 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green16.png b/assets/MapIcons/colorNumbers/marker_green16.png new file mode 100644 index 00000000..aea63c72 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green17.png b/assets/MapIcons/colorNumbers/marker_green17.png new file mode 100644 index 00000000..38a9175c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green18.png b/assets/MapIcons/colorNumbers/marker_green18.png new file mode 100644 index 00000000..c93a5d04 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green19.png b/assets/MapIcons/colorNumbers/marker_green19.png new file mode 100644 index 00000000..0171fd89 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green2.png b/assets/MapIcons/colorNumbers/marker_green2.png new file mode 100644 index 00000000..8f8f5707 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green20.png b/assets/MapIcons/colorNumbers/marker_green20.png new file mode 100644 index 00000000..aee5b72d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green21.png b/assets/MapIcons/colorNumbers/marker_green21.png new file mode 100644 index 00000000..3677a2dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green22.png b/assets/MapIcons/colorNumbers/marker_green22.png new file mode 100644 index 00000000..fe343446 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green23.png b/assets/MapIcons/colorNumbers/marker_green23.png new file mode 100644 index 00000000..c1d5380b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green24.png b/assets/MapIcons/colorNumbers/marker_green24.png new file mode 100644 index 00000000..c2ae300c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green25.png b/assets/MapIcons/colorNumbers/marker_green25.png new file mode 100644 index 00000000..0365824e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green26.png b/assets/MapIcons/colorNumbers/marker_green26.png new file mode 100644 index 00000000..27e9d42f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green27.png b/assets/MapIcons/colorNumbers/marker_green27.png new file mode 100644 index 00000000..4f86c540 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green28.png b/assets/MapIcons/colorNumbers/marker_green28.png new file mode 100644 index 00000000..e177cce8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green29.png b/assets/MapIcons/colorNumbers/marker_green29.png new file mode 100644 index 00000000..c3516963 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green3.png b/assets/MapIcons/colorNumbers/marker_green3.png new file mode 100644 index 00000000..069c1df9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green30.png b/assets/MapIcons/colorNumbers/marker_green30.png new file mode 100644 index 00000000..ad103ec9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green31.png b/assets/MapIcons/colorNumbers/marker_green31.png new file mode 100644 index 00000000..5cffde2f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green32.png b/assets/MapIcons/colorNumbers/marker_green32.png new file mode 100644 index 00000000..0c18b34c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green33.png b/assets/MapIcons/colorNumbers/marker_green33.png new file mode 100644 index 00000000..ce8f8afc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green34.png b/assets/MapIcons/colorNumbers/marker_green34.png new file mode 100644 index 00000000..710aeb95 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green35.png b/assets/MapIcons/colorNumbers/marker_green35.png new file mode 100644 index 00000000..5855320c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green36.png b/assets/MapIcons/colorNumbers/marker_green36.png new file mode 100644 index 00000000..ececd565 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green37.png b/assets/MapIcons/colorNumbers/marker_green37.png new file mode 100644 index 00000000..b78240be Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green38.png b/assets/MapIcons/colorNumbers/marker_green38.png new file mode 100644 index 00000000..9ec89a83 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green39.png b/assets/MapIcons/colorNumbers/marker_green39.png new file mode 100644 index 00000000..1b0361cb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green4.png b/assets/MapIcons/colorNumbers/marker_green4.png new file mode 100644 index 00000000..9d01ce55 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green40.png b/assets/MapIcons/colorNumbers/marker_green40.png new file mode 100644 index 00000000..324fe18e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green41.png b/assets/MapIcons/colorNumbers/marker_green41.png new file mode 100644 index 00000000..d783db23 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green42.png b/assets/MapIcons/colorNumbers/marker_green42.png new file mode 100644 index 00000000..54257dde Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green43.png b/assets/MapIcons/colorNumbers/marker_green43.png new file mode 100644 index 00000000..8ce5d7ae Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green44.png b/assets/MapIcons/colorNumbers/marker_green44.png new file mode 100644 index 00000000..7ab2454a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green45.png b/assets/MapIcons/colorNumbers/marker_green45.png new file mode 100644 index 00000000..33f78c0b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green46.png b/assets/MapIcons/colorNumbers/marker_green46.png new file mode 100644 index 00000000..3023db9f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green47.png b/assets/MapIcons/colorNumbers/marker_green47.png new file mode 100644 index 00000000..07076501 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green48.png b/assets/MapIcons/colorNumbers/marker_green48.png new file mode 100644 index 00000000..ef5e2fbd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green49.png b/assets/MapIcons/colorNumbers/marker_green49.png new file mode 100644 index 00000000..d34e95cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green5.png b/assets/MapIcons/colorNumbers/marker_green5.png new file mode 100644 index 00000000..c458254f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green50.png b/assets/MapIcons/colorNumbers/marker_green50.png new file mode 100644 index 00000000..96cec797 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green51.png b/assets/MapIcons/colorNumbers/marker_green51.png new file mode 100644 index 00000000..dbbde770 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green52.png b/assets/MapIcons/colorNumbers/marker_green52.png new file mode 100644 index 00000000..e26bf617 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green53.png b/assets/MapIcons/colorNumbers/marker_green53.png new file mode 100644 index 00000000..0019911d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green54.png b/assets/MapIcons/colorNumbers/marker_green54.png new file mode 100644 index 00000000..2e7b190b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green55.png b/assets/MapIcons/colorNumbers/marker_green55.png new file mode 100644 index 00000000..0a2e0dfa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green56.png b/assets/MapIcons/colorNumbers/marker_green56.png new file mode 100644 index 00000000..e4440d72 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green57.png b/assets/MapIcons/colorNumbers/marker_green57.png new file mode 100644 index 00000000..53dd5474 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green58.png b/assets/MapIcons/colorNumbers/marker_green58.png new file mode 100644 index 00000000..b5810be6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green59.png b/assets/MapIcons/colorNumbers/marker_green59.png new file mode 100644 index 00000000..c1728c84 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green6.png b/assets/MapIcons/colorNumbers/marker_green6.png new file mode 100644 index 00000000..299a2884 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green60.png b/assets/MapIcons/colorNumbers/marker_green60.png new file mode 100644 index 00000000..27aca76e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green61.png b/assets/MapIcons/colorNumbers/marker_green61.png new file mode 100644 index 00000000..e819823b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green62.png b/assets/MapIcons/colorNumbers/marker_green62.png new file mode 100644 index 00000000..72e8ad7e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green63.png b/assets/MapIcons/colorNumbers/marker_green63.png new file mode 100644 index 00000000..7fa86286 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green64.png b/assets/MapIcons/colorNumbers/marker_green64.png new file mode 100644 index 00000000..114f019b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green65.png b/assets/MapIcons/colorNumbers/marker_green65.png new file mode 100644 index 00000000..3a3cdba7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green66.png b/assets/MapIcons/colorNumbers/marker_green66.png new file mode 100644 index 00000000..b9c7b388 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green67.png b/assets/MapIcons/colorNumbers/marker_green67.png new file mode 100644 index 00000000..32f1850a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green68.png b/assets/MapIcons/colorNumbers/marker_green68.png new file mode 100644 index 00000000..ba100f37 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green69.png b/assets/MapIcons/colorNumbers/marker_green69.png new file mode 100644 index 00000000..787851d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green7.png b/assets/MapIcons/colorNumbers/marker_green7.png new file mode 100644 index 00000000..945b17fe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green70.png b/assets/MapIcons/colorNumbers/marker_green70.png new file mode 100644 index 00000000..6a056ad6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green71.png b/assets/MapIcons/colorNumbers/marker_green71.png new file mode 100644 index 00000000..b7ed7188 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green72.png b/assets/MapIcons/colorNumbers/marker_green72.png new file mode 100644 index 00000000..4ec2ad56 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green73.png b/assets/MapIcons/colorNumbers/marker_green73.png new file mode 100644 index 00000000..032b5ddf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green74.png b/assets/MapIcons/colorNumbers/marker_green74.png new file mode 100644 index 00000000..437fc4bf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green75.png b/assets/MapIcons/colorNumbers/marker_green75.png new file mode 100644 index 00000000..a09567a3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green76.png b/assets/MapIcons/colorNumbers/marker_green76.png new file mode 100644 index 00000000..be0f5541 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green77.png b/assets/MapIcons/colorNumbers/marker_green77.png new file mode 100644 index 00000000..b30f1fe7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green78.png b/assets/MapIcons/colorNumbers/marker_green78.png new file mode 100644 index 00000000..754afd87 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green79.png b/assets/MapIcons/colorNumbers/marker_green79.png new file mode 100644 index 00000000..bfb56eb7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green8.png b/assets/MapIcons/colorNumbers/marker_green8.png new file mode 100644 index 00000000..7c8fa2a2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green80.png b/assets/MapIcons/colorNumbers/marker_green80.png new file mode 100644 index 00000000..3f904350 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green81.png b/assets/MapIcons/colorNumbers/marker_green81.png new file mode 100644 index 00000000..be16c6c6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green82.png b/assets/MapIcons/colorNumbers/marker_green82.png new file mode 100644 index 00000000..8829759e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green83.png b/assets/MapIcons/colorNumbers/marker_green83.png new file mode 100644 index 00000000..76005c92 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green84.png b/assets/MapIcons/colorNumbers/marker_green84.png new file mode 100644 index 00000000..5eff4010 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green85.png b/assets/MapIcons/colorNumbers/marker_green85.png new file mode 100644 index 00000000..bf3dcc45 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green86.png b/assets/MapIcons/colorNumbers/marker_green86.png new file mode 100644 index 00000000..7afc5476 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green87.png b/assets/MapIcons/colorNumbers/marker_green87.png new file mode 100644 index 00000000..5a0219ca Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green88.png b/assets/MapIcons/colorNumbers/marker_green88.png new file mode 100644 index 00000000..8bbe5b40 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green89.png b/assets/MapIcons/colorNumbers/marker_green89.png new file mode 100644 index 00000000..b84597fc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green9.png b/assets/MapIcons/colorNumbers/marker_green9.png new file mode 100644 index 00000000..fc2ec7c0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green90.png b/assets/MapIcons/colorNumbers/marker_green90.png new file mode 100644 index 00000000..4ad8391a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green91.png b/assets/MapIcons/colorNumbers/marker_green91.png new file mode 100644 index 00000000..21829132 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green92.png b/assets/MapIcons/colorNumbers/marker_green92.png new file mode 100644 index 00000000..362ce8d8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green93.png b/assets/MapIcons/colorNumbers/marker_green93.png new file mode 100644 index 00000000..c78c56e7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green94.png b/assets/MapIcons/colorNumbers/marker_green94.png new file mode 100644 index 00000000..073a4d16 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green95.png b/assets/MapIcons/colorNumbers/marker_green95.png new file mode 100644 index 00000000..fc7b0691 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green96.png b/assets/MapIcons/colorNumbers/marker_green96.png new file mode 100644 index 00000000..6cfb422d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green97.png b/assets/MapIcons/colorNumbers/marker_green97.png new file mode 100644 index 00000000..583a6a8e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green98.png b/assets/MapIcons/colorNumbers/marker_green98.png new file mode 100644 index 00000000..ade5c7a6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green99.png b/assets/MapIcons/colorNumbers/marker_green99.png new file mode 100644 index 00000000..ec49b96b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green=.png b/assets/MapIcons/colorNumbers/marker_green=.png new file mode 100644 index 00000000..3feaa71d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_green@.png b/assets/MapIcons/colorNumbers/marker_green@.png new file mode 100644 index 00000000..a3fdb48b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_green@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenA.png b/assets/MapIcons/colorNumbers/marker_greenA.png new file mode 100644 index 00000000..50fc10a6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenB.png b/assets/MapIcons/colorNumbers/marker_greenB.png new file mode 100644 index 00000000..a4209b40 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenC.png b/assets/MapIcons/colorNumbers/marker_greenC.png new file mode 100644 index 00000000..ef6ef6c6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenD.png b/assets/MapIcons/colorNumbers/marker_greenD.png new file mode 100644 index 00000000..0d6fe52a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenE.png b/assets/MapIcons/colorNumbers/marker_greenE.png new file mode 100644 index 00000000..64706569 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenF.png b/assets/MapIcons/colorNumbers/marker_greenF.png new file mode 100644 index 00000000..e53d6694 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenG.png b/assets/MapIcons/colorNumbers/marker_greenG.png new file mode 100644 index 00000000..b26f4c1d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenH.png b/assets/MapIcons/colorNumbers/marker_greenH.png new file mode 100644 index 00000000..a1d13bbf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenI.png b/assets/MapIcons/colorNumbers/marker_greenI.png new file mode 100644 index 00000000..5ed45cf6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenJ.png b/assets/MapIcons/colorNumbers/marker_greenJ.png new file mode 100644 index 00000000..bdba42f2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenK.png b/assets/MapIcons/colorNumbers/marker_greenK.png new file mode 100644 index 00000000..e54775dd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenL.png b/assets/MapIcons/colorNumbers/marker_greenL.png new file mode 100644 index 00000000..20262f74 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenM.png b/assets/MapIcons/colorNumbers/marker_greenM.png new file mode 100644 index 00000000..bec30d2b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenN.png b/assets/MapIcons/colorNumbers/marker_greenN.png new file mode 100644 index 00000000..a1c29c4c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenO.png b/assets/MapIcons/colorNumbers/marker_greenO.png new file mode 100644 index 00000000..43c8a34c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenP.png b/assets/MapIcons/colorNumbers/marker_greenP.png new file mode 100644 index 00000000..0628259c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenQ.png b/assets/MapIcons/colorNumbers/marker_greenQ.png new file mode 100644 index 00000000..441a10e8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenR.png b/assets/MapIcons/colorNumbers/marker_greenR.png new file mode 100644 index 00000000..f4008853 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenS.png b/assets/MapIcons/colorNumbers/marker_greenS.png new file mode 100644 index 00000000..b71d9945 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenT.png b/assets/MapIcons/colorNumbers/marker_greenT.png new file mode 100644 index 00000000..bff59bda Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenU.png b/assets/MapIcons/colorNumbers/marker_greenU.png new file mode 100644 index 00000000..752907aa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenV.png b/assets/MapIcons/colorNumbers/marker_greenV.png new file mode 100644 index 00000000..e67d8ed7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenW.png b/assets/MapIcons/colorNumbers/marker_greenW.png new file mode 100644 index 00000000..4b7106bf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenX.png b/assets/MapIcons/colorNumbers/marker_greenX.png new file mode 100644 index 00000000..2056710c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenY.png b/assets/MapIcons/colorNumbers/marker_greenY.png new file mode 100644 index 00000000..9fa84aad Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greenZ.png b/assets/MapIcons/colorNumbers/marker_greenZ.png new file mode 100644 index 00000000..87d8cb07 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greenZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey!.png b/assets/MapIcons/colorNumbers/marker_grey!.png new file mode 100644 index 00000000..4079546f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey#.png b/assets/MapIcons/colorNumbers/marker_grey#.png new file mode 100644 index 00000000..6c429361 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey$.png b/assets/MapIcons/colorNumbers/marker_grey$.png new file mode 100644 index 00000000..2c69231e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey%.png b/assets/MapIcons/colorNumbers/marker_grey%.png new file mode 100644 index 00000000..05353347 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey&.png b/assets/MapIcons/colorNumbers/marker_grey&.png new file mode 100644 index 00000000..bdbd391f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey+.png b/assets/MapIcons/colorNumbers/marker_grey+.png new file mode 100644 index 00000000..048e7ced Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey-.png b/assets/MapIcons/colorNumbers/marker_grey-.png new file mode 100644 index 00000000..7c10a6ab Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey.png b/assets/MapIcons/colorNumbers/marker_grey.png new file mode 100644 index 00000000..2fae2842 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey1.png b/assets/MapIcons/colorNumbers/marker_grey1.png new file mode 100644 index 00000000..1fae735a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey10.png b/assets/MapIcons/colorNumbers/marker_grey10.png new file mode 100644 index 00000000..e66d8ae2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey100.png b/assets/MapIcons/colorNumbers/marker_grey100.png new file mode 100644 index 00000000..fa27ea93 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey11.png b/assets/MapIcons/colorNumbers/marker_grey11.png new file mode 100644 index 00000000..8e0eba96 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey12.png b/assets/MapIcons/colorNumbers/marker_grey12.png new file mode 100644 index 00000000..0aa21ff5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey13.png b/assets/MapIcons/colorNumbers/marker_grey13.png new file mode 100644 index 00000000..6f814da8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey14.png b/assets/MapIcons/colorNumbers/marker_grey14.png new file mode 100644 index 00000000..7e48dabf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey15.png b/assets/MapIcons/colorNumbers/marker_grey15.png new file mode 100644 index 00000000..42f9a4ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey16.png b/assets/MapIcons/colorNumbers/marker_grey16.png new file mode 100644 index 00000000..3495b461 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey17.png b/assets/MapIcons/colorNumbers/marker_grey17.png new file mode 100644 index 00000000..bca5a548 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey18.png b/assets/MapIcons/colorNumbers/marker_grey18.png new file mode 100644 index 00000000..40fea808 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey19.png b/assets/MapIcons/colorNumbers/marker_grey19.png new file mode 100644 index 00000000..2c10116c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey2.png b/assets/MapIcons/colorNumbers/marker_grey2.png new file mode 100644 index 00000000..544c9375 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey20.png b/assets/MapIcons/colorNumbers/marker_grey20.png new file mode 100644 index 00000000..dd470750 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey21.png b/assets/MapIcons/colorNumbers/marker_grey21.png new file mode 100644 index 00000000..fccb8f75 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey22.png b/assets/MapIcons/colorNumbers/marker_grey22.png new file mode 100644 index 00000000..86d75a69 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey23.png b/assets/MapIcons/colorNumbers/marker_grey23.png new file mode 100644 index 00000000..399516c4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey24.png b/assets/MapIcons/colorNumbers/marker_grey24.png new file mode 100644 index 00000000..d056a895 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey25.png b/assets/MapIcons/colorNumbers/marker_grey25.png new file mode 100644 index 00000000..1b94e6a1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey26.png b/assets/MapIcons/colorNumbers/marker_grey26.png new file mode 100644 index 00000000..e6ffd4f2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey27.png b/assets/MapIcons/colorNumbers/marker_grey27.png new file mode 100644 index 00000000..cb452116 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey28.png b/assets/MapIcons/colorNumbers/marker_grey28.png new file mode 100644 index 00000000..5a7f28f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey29.png b/assets/MapIcons/colorNumbers/marker_grey29.png new file mode 100644 index 00000000..192f35bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey3.png b/assets/MapIcons/colorNumbers/marker_grey3.png new file mode 100644 index 00000000..89f6b42a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey30.png b/assets/MapIcons/colorNumbers/marker_grey30.png new file mode 100644 index 00000000..7230dc36 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey31.png b/assets/MapIcons/colorNumbers/marker_grey31.png new file mode 100644 index 00000000..ff57e9d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey32.png b/assets/MapIcons/colorNumbers/marker_grey32.png new file mode 100644 index 00000000..dca97556 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey33.png b/assets/MapIcons/colorNumbers/marker_grey33.png new file mode 100644 index 00000000..4c37addc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey34.png b/assets/MapIcons/colorNumbers/marker_grey34.png new file mode 100644 index 00000000..a661a880 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey35.png b/assets/MapIcons/colorNumbers/marker_grey35.png new file mode 100644 index 00000000..a3cbd6e6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey36.png b/assets/MapIcons/colorNumbers/marker_grey36.png new file mode 100644 index 00000000..bf01d3a2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey37.png b/assets/MapIcons/colorNumbers/marker_grey37.png new file mode 100644 index 00000000..10f202d2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey38.png b/assets/MapIcons/colorNumbers/marker_grey38.png new file mode 100644 index 00000000..f49a4714 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey39.png b/assets/MapIcons/colorNumbers/marker_grey39.png new file mode 100644 index 00000000..9562d991 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey4.png b/assets/MapIcons/colorNumbers/marker_grey4.png new file mode 100644 index 00000000..2b9b2a49 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey40.png b/assets/MapIcons/colorNumbers/marker_grey40.png new file mode 100644 index 00000000..7b38147c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey41.png b/assets/MapIcons/colorNumbers/marker_grey41.png new file mode 100644 index 00000000..9c8215a0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey42.png b/assets/MapIcons/colorNumbers/marker_grey42.png new file mode 100644 index 00000000..52805f30 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey43.png b/assets/MapIcons/colorNumbers/marker_grey43.png new file mode 100644 index 00000000..2022791a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey44.png b/assets/MapIcons/colorNumbers/marker_grey44.png new file mode 100644 index 00000000..3d790e8b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey45.png b/assets/MapIcons/colorNumbers/marker_grey45.png new file mode 100644 index 00000000..0e255cff Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey46.png b/assets/MapIcons/colorNumbers/marker_grey46.png new file mode 100644 index 00000000..b4b38810 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey47.png b/assets/MapIcons/colorNumbers/marker_grey47.png new file mode 100644 index 00000000..19d23cb3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey48.png b/assets/MapIcons/colorNumbers/marker_grey48.png new file mode 100644 index 00000000..8d23a5b5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey49.png b/assets/MapIcons/colorNumbers/marker_grey49.png new file mode 100644 index 00000000..f22c265b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey5.png b/assets/MapIcons/colorNumbers/marker_grey5.png new file mode 100644 index 00000000..49796f95 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey50.png b/assets/MapIcons/colorNumbers/marker_grey50.png new file mode 100644 index 00000000..93e740b4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey51.png b/assets/MapIcons/colorNumbers/marker_grey51.png new file mode 100644 index 00000000..4d6e134c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey52.png b/assets/MapIcons/colorNumbers/marker_grey52.png new file mode 100644 index 00000000..26eca3e7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey53.png b/assets/MapIcons/colorNumbers/marker_grey53.png new file mode 100644 index 00000000..8270fb1d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey54.png b/assets/MapIcons/colorNumbers/marker_grey54.png new file mode 100644 index 00000000..b1c9e598 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey55.png b/assets/MapIcons/colorNumbers/marker_grey55.png new file mode 100644 index 00000000..84a11c5e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey56.png b/assets/MapIcons/colorNumbers/marker_grey56.png new file mode 100644 index 00000000..34d2000e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey57.png b/assets/MapIcons/colorNumbers/marker_grey57.png new file mode 100644 index 00000000..b355e8e6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey58.png b/assets/MapIcons/colorNumbers/marker_grey58.png new file mode 100644 index 00000000..868a20a9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey59.png b/assets/MapIcons/colorNumbers/marker_grey59.png new file mode 100644 index 00000000..71eb4db0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey6.png b/assets/MapIcons/colorNumbers/marker_grey6.png new file mode 100644 index 00000000..d030894f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey60.png b/assets/MapIcons/colorNumbers/marker_grey60.png new file mode 100644 index 00000000..bcbd31b0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey61.png b/assets/MapIcons/colorNumbers/marker_grey61.png new file mode 100644 index 00000000..3aa1a6b6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey62.png b/assets/MapIcons/colorNumbers/marker_grey62.png new file mode 100644 index 00000000..68b8e834 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey63.png b/assets/MapIcons/colorNumbers/marker_grey63.png new file mode 100644 index 00000000..5be27c04 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey64.png b/assets/MapIcons/colorNumbers/marker_grey64.png new file mode 100644 index 00000000..a07afe61 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey65.png b/assets/MapIcons/colorNumbers/marker_grey65.png new file mode 100644 index 00000000..804b269c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey66.png b/assets/MapIcons/colorNumbers/marker_grey66.png new file mode 100644 index 00000000..2ed99214 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey67.png b/assets/MapIcons/colorNumbers/marker_grey67.png new file mode 100644 index 00000000..207ecbf6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey68.png b/assets/MapIcons/colorNumbers/marker_grey68.png new file mode 100644 index 00000000..5e7e48df Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey69.png b/assets/MapIcons/colorNumbers/marker_grey69.png new file mode 100644 index 00000000..92e40683 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey7.png b/assets/MapIcons/colorNumbers/marker_grey7.png new file mode 100644 index 00000000..5b39698e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey70.png b/assets/MapIcons/colorNumbers/marker_grey70.png new file mode 100644 index 00000000..35c7d125 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey71.png b/assets/MapIcons/colorNumbers/marker_grey71.png new file mode 100644 index 00000000..a36c7cf8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey72.png b/assets/MapIcons/colorNumbers/marker_grey72.png new file mode 100644 index 00000000..89de2f17 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey73.png b/assets/MapIcons/colorNumbers/marker_grey73.png new file mode 100644 index 00000000..b9ba7140 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey74.png b/assets/MapIcons/colorNumbers/marker_grey74.png new file mode 100644 index 00000000..ec41fd90 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey75.png b/assets/MapIcons/colorNumbers/marker_grey75.png new file mode 100644 index 00000000..3485c8fd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey76.png b/assets/MapIcons/colorNumbers/marker_grey76.png new file mode 100644 index 00000000..3b6ac4cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey77.png b/assets/MapIcons/colorNumbers/marker_grey77.png new file mode 100644 index 00000000..eaedd280 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey78.png b/assets/MapIcons/colorNumbers/marker_grey78.png new file mode 100644 index 00000000..288510b4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey79.png b/assets/MapIcons/colorNumbers/marker_grey79.png new file mode 100644 index 00000000..11072629 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey8.png b/assets/MapIcons/colorNumbers/marker_grey8.png new file mode 100644 index 00000000..64a03ae3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey80.png b/assets/MapIcons/colorNumbers/marker_grey80.png new file mode 100644 index 00000000..c2347538 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey81.png b/assets/MapIcons/colorNumbers/marker_grey81.png new file mode 100644 index 00000000..3baf41ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey82.png b/assets/MapIcons/colorNumbers/marker_grey82.png new file mode 100644 index 00000000..9865bedd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey83.png b/assets/MapIcons/colorNumbers/marker_grey83.png new file mode 100644 index 00000000..aed027d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey84.png b/assets/MapIcons/colorNumbers/marker_grey84.png new file mode 100644 index 00000000..23f517af Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey85.png b/assets/MapIcons/colorNumbers/marker_grey85.png new file mode 100644 index 00000000..c9287b28 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey86.png b/assets/MapIcons/colorNumbers/marker_grey86.png new file mode 100644 index 00000000..9e68f879 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey87.png b/assets/MapIcons/colorNumbers/marker_grey87.png new file mode 100644 index 00000000..2c9c8420 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey88.png b/assets/MapIcons/colorNumbers/marker_grey88.png new file mode 100644 index 00000000..c57a9e4b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey89.png b/assets/MapIcons/colorNumbers/marker_grey89.png new file mode 100644 index 00000000..8e9c5bda Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey9.png b/assets/MapIcons/colorNumbers/marker_grey9.png new file mode 100644 index 00000000..39df3680 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey90.png b/assets/MapIcons/colorNumbers/marker_grey90.png new file mode 100644 index 00000000..4337eee8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey91.png b/assets/MapIcons/colorNumbers/marker_grey91.png new file mode 100644 index 00000000..93c1d6bb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey92.png b/assets/MapIcons/colorNumbers/marker_grey92.png new file mode 100644 index 00000000..73889875 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey93.png b/assets/MapIcons/colorNumbers/marker_grey93.png new file mode 100644 index 00000000..a1e95c01 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey94.png b/assets/MapIcons/colorNumbers/marker_grey94.png new file mode 100644 index 00000000..a21b91e5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey95.png b/assets/MapIcons/colorNumbers/marker_grey95.png new file mode 100644 index 00000000..a087294a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey96.png b/assets/MapIcons/colorNumbers/marker_grey96.png new file mode 100644 index 00000000..bd50336f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey97.png b/assets/MapIcons/colorNumbers/marker_grey97.png new file mode 100644 index 00000000..98a475a5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey98.png b/assets/MapIcons/colorNumbers/marker_grey98.png new file mode 100644 index 00000000..1985ba6a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey99.png b/assets/MapIcons/colorNumbers/marker_grey99.png new file mode 100644 index 00000000..22f16ec5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey=.png b/assets/MapIcons/colorNumbers/marker_grey=.png new file mode 100644 index 00000000..aa31a37b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_grey@.png b/assets/MapIcons/colorNumbers/marker_grey@.png new file mode 100644 index 00000000..e00fb354 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_grey@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyA.png b/assets/MapIcons/colorNumbers/marker_greyA.png new file mode 100644 index 00000000..28dd222a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyB.png b/assets/MapIcons/colorNumbers/marker_greyB.png new file mode 100644 index 00000000..a975e81c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyC.png b/assets/MapIcons/colorNumbers/marker_greyC.png new file mode 100644 index 00000000..ff28d213 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyD.png b/assets/MapIcons/colorNumbers/marker_greyD.png new file mode 100644 index 00000000..73a6049c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyE.png b/assets/MapIcons/colorNumbers/marker_greyE.png new file mode 100644 index 00000000..7f37feee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyF.png b/assets/MapIcons/colorNumbers/marker_greyF.png new file mode 100644 index 00000000..7530af68 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyG.png b/assets/MapIcons/colorNumbers/marker_greyG.png new file mode 100644 index 00000000..9df5d534 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyH.png b/assets/MapIcons/colorNumbers/marker_greyH.png new file mode 100644 index 00000000..f5fbedca Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyI.png b/assets/MapIcons/colorNumbers/marker_greyI.png new file mode 100644 index 00000000..d033712d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyJ.png b/assets/MapIcons/colorNumbers/marker_greyJ.png new file mode 100644 index 00000000..005dad87 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyK.png b/assets/MapIcons/colorNumbers/marker_greyK.png new file mode 100644 index 00000000..53787615 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyL.png b/assets/MapIcons/colorNumbers/marker_greyL.png new file mode 100644 index 00000000..00785ba3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyM.png b/assets/MapIcons/colorNumbers/marker_greyM.png new file mode 100644 index 00000000..e399c45a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyN.png b/assets/MapIcons/colorNumbers/marker_greyN.png new file mode 100644 index 00000000..c411b5b8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyO.png b/assets/MapIcons/colorNumbers/marker_greyO.png new file mode 100644 index 00000000..15eecbf0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyP.png b/assets/MapIcons/colorNumbers/marker_greyP.png new file mode 100644 index 00000000..05e339f5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyQ.png b/assets/MapIcons/colorNumbers/marker_greyQ.png new file mode 100644 index 00000000..7d94ee37 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyR.png b/assets/MapIcons/colorNumbers/marker_greyR.png new file mode 100644 index 00000000..c832481a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyS.png b/assets/MapIcons/colorNumbers/marker_greyS.png new file mode 100644 index 00000000..dae044fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyT.png b/assets/MapIcons/colorNumbers/marker_greyT.png new file mode 100644 index 00000000..b2503bde Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyU.png b/assets/MapIcons/colorNumbers/marker_greyU.png new file mode 100644 index 00000000..77569754 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyV.png b/assets/MapIcons/colorNumbers/marker_greyV.png new file mode 100644 index 00000000..79991a17 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyW.png b/assets/MapIcons/colorNumbers/marker_greyW.png new file mode 100644 index 00000000..5fe1e1a0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyX.png b/assets/MapIcons/colorNumbers/marker_greyX.png new file mode 100644 index 00000000..63b539d9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyY.png b/assets/MapIcons/colorNumbers/marker_greyY.png new file mode 100644 index 00000000..5ca10634 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_greyZ.png b/assets/MapIcons/colorNumbers/marker_greyZ.png new file mode 100644 index 00000000..979a9192 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_greyZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange!.png b/assets/MapIcons/colorNumbers/marker_orange!.png new file mode 100644 index 00000000..2424b03f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange#.png b/assets/MapIcons/colorNumbers/marker_orange#.png new file mode 100644 index 00000000..0491868a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange$.png b/assets/MapIcons/colorNumbers/marker_orange$.png new file mode 100644 index 00000000..ddcebe42 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange%.png b/assets/MapIcons/colorNumbers/marker_orange%.png new file mode 100644 index 00000000..f01919d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange&.png b/assets/MapIcons/colorNumbers/marker_orange&.png new file mode 100644 index 00000000..739080c1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange+.png b/assets/MapIcons/colorNumbers/marker_orange+.png new file mode 100644 index 00000000..d937e878 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange-.png b/assets/MapIcons/colorNumbers/marker_orange-.png new file mode 100644 index 00000000..eaadffd4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange.png b/assets/MapIcons/colorNumbers/marker_orange.png new file mode 100644 index 00000000..4f9e0f08 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange1.png b/assets/MapIcons/colorNumbers/marker_orange1.png new file mode 100644 index 00000000..7d10555b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange10.png b/assets/MapIcons/colorNumbers/marker_orange10.png new file mode 100644 index 00000000..93b3cea4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange100.png b/assets/MapIcons/colorNumbers/marker_orange100.png new file mode 100644 index 00000000..7f8553b2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange11.png b/assets/MapIcons/colorNumbers/marker_orange11.png new file mode 100644 index 00000000..3add8e69 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange12.png b/assets/MapIcons/colorNumbers/marker_orange12.png new file mode 100644 index 00000000..d2f70d54 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange13.png b/assets/MapIcons/colorNumbers/marker_orange13.png new file mode 100644 index 00000000..b7e238ea Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange14.png b/assets/MapIcons/colorNumbers/marker_orange14.png new file mode 100644 index 00000000..7c41a1f6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange15.png b/assets/MapIcons/colorNumbers/marker_orange15.png new file mode 100644 index 00000000..95b0d0c9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange16.png b/assets/MapIcons/colorNumbers/marker_orange16.png new file mode 100644 index 00000000..80869c2a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange17.png b/assets/MapIcons/colorNumbers/marker_orange17.png new file mode 100644 index 00000000..7fec2261 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange18.png b/assets/MapIcons/colorNumbers/marker_orange18.png new file mode 100644 index 00000000..300fea2c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange19.png b/assets/MapIcons/colorNumbers/marker_orange19.png new file mode 100644 index 00000000..342f768c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange2.png b/assets/MapIcons/colorNumbers/marker_orange2.png new file mode 100644 index 00000000..3de6dbd6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange20.png b/assets/MapIcons/colorNumbers/marker_orange20.png new file mode 100644 index 00000000..a40f9f49 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange21.png b/assets/MapIcons/colorNumbers/marker_orange21.png new file mode 100644 index 00000000..a7a535bb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange22.png b/assets/MapIcons/colorNumbers/marker_orange22.png new file mode 100644 index 00000000..c9b0a306 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange23.png b/assets/MapIcons/colorNumbers/marker_orange23.png new file mode 100644 index 00000000..f69b2cf4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange24.png b/assets/MapIcons/colorNumbers/marker_orange24.png new file mode 100644 index 00000000..7155cf20 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange25.png b/assets/MapIcons/colorNumbers/marker_orange25.png new file mode 100644 index 00000000..801f29d0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange26.png b/assets/MapIcons/colorNumbers/marker_orange26.png new file mode 100644 index 00000000..b5def6f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange27.png b/assets/MapIcons/colorNumbers/marker_orange27.png new file mode 100644 index 00000000..e1daf828 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange28.png b/assets/MapIcons/colorNumbers/marker_orange28.png new file mode 100644 index 00000000..27a9717e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange29.png b/assets/MapIcons/colorNumbers/marker_orange29.png new file mode 100644 index 00000000..839ed5a2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange3.png b/assets/MapIcons/colorNumbers/marker_orange3.png new file mode 100644 index 00000000..ac91f9a0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange30.png b/assets/MapIcons/colorNumbers/marker_orange30.png new file mode 100644 index 00000000..3aa5cfe9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange31.png b/assets/MapIcons/colorNumbers/marker_orange31.png new file mode 100644 index 00000000..44853ebe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange32.png b/assets/MapIcons/colorNumbers/marker_orange32.png new file mode 100644 index 00000000..8942d17b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange33.png b/assets/MapIcons/colorNumbers/marker_orange33.png new file mode 100644 index 00000000..0d289c54 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange34.png b/assets/MapIcons/colorNumbers/marker_orange34.png new file mode 100644 index 00000000..33513946 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange35.png b/assets/MapIcons/colorNumbers/marker_orange35.png new file mode 100644 index 00000000..52084c6b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange36.png b/assets/MapIcons/colorNumbers/marker_orange36.png new file mode 100644 index 00000000..cb15ef4b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange37.png b/assets/MapIcons/colorNumbers/marker_orange37.png new file mode 100644 index 00000000..b339fdd3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange38.png b/assets/MapIcons/colorNumbers/marker_orange38.png new file mode 100644 index 00000000..c5c51782 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange39.png b/assets/MapIcons/colorNumbers/marker_orange39.png new file mode 100644 index 00000000..aca33a9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange4.png b/assets/MapIcons/colorNumbers/marker_orange4.png new file mode 100644 index 00000000..b2bb8f26 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange40.png b/assets/MapIcons/colorNumbers/marker_orange40.png new file mode 100644 index 00000000..fe542965 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange41.png b/assets/MapIcons/colorNumbers/marker_orange41.png new file mode 100644 index 00000000..64b55989 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange42.png b/assets/MapIcons/colorNumbers/marker_orange42.png new file mode 100644 index 00000000..1481e34d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange43.png b/assets/MapIcons/colorNumbers/marker_orange43.png new file mode 100644 index 00000000..a572a257 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange44.png b/assets/MapIcons/colorNumbers/marker_orange44.png new file mode 100644 index 00000000..bfce3f31 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange45.png b/assets/MapIcons/colorNumbers/marker_orange45.png new file mode 100644 index 00000000..0141c73a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange46.png b/assets/MapIcons/colorNumbers/marker_orange46.png new file mode 100644 index 00000000..99f730f9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange47.png b/assets/MapIcons/colorNumbers/marker_orange47.png new file mode 100644 index 00000000..e293672e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange48.png b/assets/MapIcons/colorNumbers/marker_orange48.png new file mode 100644 index 00000000..c8fd3695 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange49.png b/assets/MapIcons/colorNumbers/marker_orange49.png new file mode 100644 index 00000000..8c2024d8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange5.png b/assets/MapIcons/colorNumbers/marker_orange5.png new file mode 100644 index 00000000..952527fe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange50.png b/assets/MapIcons/colorNumbers/marker_orange50.png new file mode 100644 index 00000000..413fc2c8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange51.png b/assets/MapIcons/colorNumbers/marker_orange51.png new file mode 100644 index 00000000..822dfb17 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange52.png b/assets/MapIcons/colorNumbers/marker_orange52.png new file mode 100644 index 00000000..3e5a4efe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange53.png b/assets/MapIcons/colorNumbers/marker_orange53.png new file mode 100644 index 00000000..d346b1ec Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange54.png b/assets/MapIcons/colorNumbers/marker_orange54.png new file mode 100644 index 00000000..a8eda6d6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange55.png b/assets/MapIcons/colorNumbers/marker_orange55.png new file mode 100644 index 00000000..38ad36b3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange56.png b/assets/MapIcons/colorNumbers/marker_orange56.png new file mode 100644 index 00000000..5bfd4be3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange57.png b/assets/MapIcons/colorNumbers/marker_orange57.png new file mode 100644 index 00000000..e7591c05 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange58.png b/assets/MapIcons/colorNumbers/marker_orange58.png new file mode 100644 index 00000000..c35034af Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange59.png b/assets/MapIcons/colorNumbers/marker_orange59.png new file mode 100644 index 00000000..7098840a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange6.png b/assets/MapIcons/colorNumbers/marker_orange6.png new file mode 100644 index 00000000..a9adca44 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange60.png b/assets/MapIcons/colorNumbers/marker_orange60.png new file mode 100644 index 00000000..2b4ca266 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange61.png b/assets/MapIcons/colorNumbers/marker_orange61.png new file mode 100644 index 00000000..fbd907bc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange62.png b/assets/MapIcons/colorNumbers/marker_orange62.png new file mode 100644 index 00000000..a7831c1c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange63.png b/assets/MapIcons/colorNumbers/marker_orange63.png new file mode 100644 index 00000000..d59ed7cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange64.png b/assets/MapIcons/colorNumbers/marker_orange64.png new file mode 100644 index 00000000..a82c2639 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange65.png b/assets/MapIcons/colorNumbers/marker_orange65.png new file mode 100644 index 00000000..887bc82f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange66.png b/assets/MapIcons/colorNumbers/marker_orange66.png new file mode 100644 index 00000000..51ca2f0a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange67.png b/assets/MapIcons/colorNumbers/marker_orange67.png new file mode 100644 index 00000000..b89ae334 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange68.png b/assets/MapIcons/colorNumbers/marker_orange68.png new file mode 100644 index 00000000..ae08e3a1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange69.png b/assets/MapIcons/colorNumbers/marker_orange69.png new file mode 100644 index 00000000..ac5bc371 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange7.png b/assets/MapIcons/colorNumbers/marker_orange7.png new file mode 100644 index 00000000..be0cfdb5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange70.png b/assets/MapIcons/colorNumbers/marker_orange70.png new file mode 100644 index 00000000..9068af82 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange71.png b/assets/MapIcons/colorNumbers/marker_orange71.png new file mode 100644 index 00000000..7c8cf375 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange72.png b/assets/MapIcons/colorNumbers/marker_orange72.png new file mode 100644 index 00000000..80434e7b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange73.png b/assets/MapIcons/colorNumbers/marker_orange73.png new file mode 100644 index 00000000..bac82fa7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange74.png b/assets/MapIcons/colorNumbers/marker_orange74.png new file mode 100644 index 00000000..79e8306a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange75.png b/assets/MapIcons/colorNumbers/marker_orange75.png new file mode 100644 index 00000000..b81e41d2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange76.png b/assets/MapIcons/colorNumbers/marker_orange76.png new file mode 100644 index 00000000..64b98483 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange77.png b/assets/MapIcons/colorNumbers/marker_orange77.png new file mode 100644 index 00000000..88ae5805 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange78.png b/assets/MapIcons/colorNumbers/marker_orange78.png new file mode 100644 index 00000000..d4a3536b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange79.png b/assets/MapIcons/colorNumbers/marker_orange79.png new file mode 100644 index 00000000..2b40e3f2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange8.png b/assets/MapIcons/colorNumbers/marker_orange8.png new file mode 100644 index 00000000..d6986fc4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange80.png b/assets/MapIcons/colorNumbers/marker_orange80.png new file mode 100644 index 00000000..676ab791 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange81.png b/assets/MapIcons/colorNumbers/marker_orange81.png new file mode 100644 index 00000000..db4c2d19 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange82.png b/assets/MapIcons/colorNumbers/marker_orange82.png new file mode 100644 index 00000000..56eaf930 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange83.png b/assets/MapIcons/colorNumbers/marker_orange83.png new file mode 100644 index 00000000..a84742c6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange84.png b/assets/MapIcons/colorNumbers/marker_orange84.png new file mode 100644 index 00000000..8d173624 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange85.png b/assets/MapIcons/colorNumbers/marker_orange85.png new file mode 100644 index 00000000..619238dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange86.png b/assets/MapIcons/colorNumbers/marker_orange86.png new file mode 100644 index 00000000..cb246f2f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange87.png b/assets/MapIcons/colorNumbers/marker_orange87.png new file mode 100644 index 00000000..efd42710 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange88.png b/assets/MapIcons/colorNumbers/marker_orange88.png new file mode 100644 index 00000000..631b4b62 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange89.png b/assets/MapIcons/colorNumbers/marker_orange89.png new file mode 100644 index 00000000..e5934a4b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange9.png b/assets/MapIcons/colorNumbers/marker_orange9.png new file mode 100644 index 00000000..d1cc4972 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange90.png b/assets/MapIcons/colorNumbers/marker_orange90.png new file mode 100644 index 00000000..1a469ea0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange91.png b/assets/MapIcons/colorNumbers/marker_orange91.png new file mode 100644 index 00000000..a9f8adf4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange92.png b/assets/MapIcons/colorNumbers/marker_orange92.png new file mode 100644 index 00000000..45cbd7ed Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange93.png b/assets/MapIcons/colorNumbers/marker_orange93.png new file mode 100644 index 00000000..cec4c965 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange94.png b/assets/MapIcons/colorNumbers/marker_orange94.png new file mode 100644 index 00000000..18219d82 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange95.png b/assets/MapIcons/colorNumbers/marker_orange95.png new file mode 100644 index 00000000..720a1bad Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange96.png b/assets/MapIcons/colorNumbers/marker_orange96.png new file mode 100644 index 00000000..66601a45 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange97.png b/assets/MapIcons/colorNumbers/marker_orange97.png new file mode 100644 index 00000000..c19dc2b5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange98.png b/assets/MapIcons/colorNumbers/marker_orange98.png new file mode 100644 index 00000000..8ebfcf08 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange99.png b/assets/MapIcons/colorNumbers/marker_orange99.png new file mode 100644 index 00000000..a1b98ae9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange=.png b/assets/MapIcons/colorNumbers/marker_orange=.png new file mode 100644 index 00000000..d2bf4689 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orange@.png b/assets/MapIcons/colorNumbers/marker_orange@.png new file mode 100644 index 00000000..3c9d6e94 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orange@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeA.png b/assets/MapIcons/colorNumbers/marker_orangeA.png new file mode 100644 index 00000000..96c566c9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeB.png b/assets/MapIcons/colorNumbers/marker_orangeB.png new file mode 100644 index 00000000..159d27dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeC.png b/assets/MapIcons/colorNumbers/marker_orangeC.png new file mode 100644 index 00000000..65592e0c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeD.png b/assets/MapIcons/colorNumbers/marker_orangeD.png new file mode 100644 index 00000000..e3e87f7b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeE.png b/assets/MapIcons/colorNumbers/marker_orangeE.png new file mode 100644 index 00000000..fd23c094 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeF.png b/assets/MapIcons/colorNumbers/marker_orangeF.png new file mode 100644 index 00000000..33b0c12f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeG.png b/assets/MapIcons/colorNumbers/marker_orangeG.png new file mode 100644 index 00000000..7710c97e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeH.png b/assets/MapIcons/colorNumbers/marker_orangeH.png new file mode 100644 index 00000000..7053a7ae Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeI.png b/assets/MapIcons/colorNumbers/marker_orangeI.png new file mode 100644 index 00000000..6b7e663b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeJ.png b/assets/MapIcons/colorNumbers/marker_orangeJ.png new file mode 100644 index 00000000..2470d9bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeK.png b/assets/MapIcons/colorNumbers/marker_orangeK.png new file mode 100644 index 00000000..317cf88e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeL.png b/assets/MapIcons/colorNumbers/marker_orangeL.png new file mode 100644 index 00000000..c9b94d51 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeM.png b/assets/MapIcons/colorNumbers/marker_orangeM.png new file mode 100644 index 00000000..86c54d0b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeN.png b/assets/MapIcons/colorNumbers/marker_orangeN.png new file mode 100644 index 00000000..5dd7696f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeO.png b/assets/MapIcons/colorNumbers/marker_orangeO.png new file mode 100644 index 00000000..4c2b95bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeP.png b/assets/MapIcons/colorNumbers/marker_orangeP.png new file mode 100644 index 00000000..b4f68917 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeQ.png b/assets/MapIcons/colorNumbers/marker_orangeQ.png new file mode 100644 index 00000000..7144b48c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeR.png b/assets/MapIcons/colorNumbers/marker_orangeR.png new file mode 100644 index 00000000..b310ef44 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeS.png b/assets/MapIcons/colorNumbers/marker_orangeS.png new file mode 100644 index 00000000..baf106cf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeT.png b/assets/MapIcons/colorNumbers/marker_orangeT.png new file mode 100644 index 00000000..61f46372 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeU.png b/assets/MapIcons/colorNumbers/marker_orangeU.png new file mode 100644 index 00000000..6b8e4d5d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeV.png b/assets/MapIcons/colorNumbers/marker_orangeV.png new file mode 100644 index 00000000..5a7e2748 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeW.png b/assets/MapIcons/colorNumbers/marker_orangeW.png new file mode 100644 index 00000000..16b17873 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeX.png b/assets/MapIcons/colorNumbers/marker_orangeX.png new file mode 100644 index 00000000..904df563 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeY.png b/assets/MapIcons/colorNumbers/marker_orangeY.png new file mode 100644 index 00000000..74363159 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_orangeZ.png b/assets/MapIcons/colorNumbers/marker_orangeZ.png new file mode 100644 index 00000000..e59004eb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_orangeZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple!.png b/assets/MapIcons/colorNumbers/marker_purple!.png new file mode 100644 index 00000000..80403151 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple#.png b/assets/MapIcons/colorNumbers/marker_purple#.png new file mode 100644 index 00000000..571a5901 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple$.png b/assets/MapIcons/colorNumbers/marker_purple$.png new file mode 100644 index 00000000..49b7d3ce Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple%.png b/assets/MapIcons/colorNumbers/marker_purple%.png new file mode 100644 index 00000000..2637a888 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple&.png b/assets/MapIcons/colorNumbers/marker_purple&.png new file mode 100644 index 00000000..05e094dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple+.png b/assets/MapIcons/colorNumbers/marker_purple+.png new file mode 100644 index 00000000..1b1d95b2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple-.png b/assets/MapIcons/colorNumbers/marker_purple-.png new file mode 100644 index 00000000..bb30a577 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple.png b/assets/MapIcons/colorNumbers/marker_purple.png new file mode 100644 index 00000000..7cf906f7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple1.png b/assets/MapIcons/colorNumbers/marker_purple1.png new file mode 100644 index 00000000..5b24064d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple10.png b/assets/MapIcons/colorNumbers/marker_purple10.png new file mode 100644 index 00000000..d639a375 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple100.png b/assets/MapIcons/colorNumbers/marker_purple100.png new file mode 100644 index 00000000..7e1d9eb1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple11.png b/assets/MapIcons/colorNumbers/marker_purple11.png new file mode 100644 index 00000000..f0ddc37e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple12.png b/assets/MapIcons/colorNumbers/marker_purple12.png new file mode 100644 index 00000000..1add8f51 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple13.png b/assets/MapIcons/colorNumbers/marker_purple13.png new file mode 100644 index 00000000..e8342bae Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple14.png b/assets/MapIcons/colorNumbers/marker_purple14.png new file mode 100644 index 00000000..19c5e9cf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple15.png b/assets/MapIcons/colorNumbers/marker_purple15.png new file mode 100644 index 00000000..5206fb83 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple16.png b/assets/MapIcons/colorNumbers/marker_purple16.png new file mode 100644 index 00000000..0c1d30cf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple17.png b/assets/MapIcons/colorNumbers/marker_purple17.png new file mode 100644 index 00000000..2c3e53cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple18.png b/assets/MapIcons/colorNumbers/marker_purple18.png new file mode 100644 index 00000000..0afcf7d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple19.png b/assets/MapIcons/colorNumbers/marker_purple19.png new file mode 100644 index 00000000..524b8982 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple2.png b/assets/MapIcons/colorNumbers/marker_purple2.png new file mode 100644 index 00000000..a0cc1757 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple20.png b/assets/MapIcons/colorNumbers/marker_purple20.png new file mode 100644 index 00000000..5d87fd4c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple21.png b/assets/MapIcons/colorNumbers/marker_purple21.png new file mode 100644 index 00000000..e77b1c8b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple22.png b/assets/MapIcons/colorNumbers/marker_purple22.png new file mode 100644 index 00000000..2a76231a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple23.png b/assets/MapIcons/colorNumbers/marker_purple23.png new file mode 100644 index 00000000..91287c61 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple24.png b/assets/MapIcons/colorNumbers/marker_purple24.png new file mode 100644 index 00000000..53f20c3d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple25.png b/assets/MapIcons/colorNumbers/marker_purple25.png new file mode 100644 index 00000000..caa246ee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple26.png b/assets/MapIcons/colorNumbers/marker_purple26.png new file mode 100644 index 00000000..706733d0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple27.png b/assets/MapIcons/colorNumbers/marker_purple27.png new file mode 100644 index 00000000..bc1f0bf8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple28.png b/assets/MapIcons/colorNumbers/marker_purple28.png new file mode 100644 index 00000000..b6cb164d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple29.png b/assets/MapIcons/colorNumbers/marker_purple29.png new file mode 100644 index 00000000..f12bdb6d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple3.png b/assets/MapIcons/colorNumbers/marker_purple3.png new file mode 100644 index 00000000..00821883 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple30.png b/assets/MapIcons/colorNumbers/marker_purple30.png new file mode 100644 index 00000000..d96de44e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple31.png b/assets/MapIcons/colorNumbers/marker_purple31.png new file mode 100644 index 00000000..c1c06738 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple32.png b/assets/MapIcons/colorNumbers/marker_purple32.png new file mode 100644 index 00000000..7a8391f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple33.png b/assets/MapIcons/colorNumbers/marker_purple33.png new file mode 100644 index 00000000..40ff9fdb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple34.png b/assets/MapIcons/colorNumbers/marker_purple34.png new file mode 100644 index 00000000..ab6c1da6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple35.png b/assets/MapIcons/colorNumbers/marker_purple35.png new file mode 100644 index 00000000..b650bef1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple36.png b/assets/MapIcons/colorNumbers/marker_purple36.png new file mode 100644 index 00000000..edca52e7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple37.png b/assets/MapIcons/colorNumbers/marker_purple37.png new file mode 100644 index 00000000..870f52f5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple38.png b/assets/MapIcons/colorNumbers/marker_purple38.png new file mode 100644 index 00000000..115dc542 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple39.png b/assets/MapIcons/colorNumbers/marker_purple39.png new file mode 100644 index 00000000..134ae14f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple4.png b/assets/MapIcons/colorNumbers/marker_purple4.png new file mode 100644 index 00000000..ab08db39 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple40.png b/assets/MapIcons/colorNumbers/marker_purple40.png new file mode 100644 index 00000000..f29ffa61 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple41.png b/assets/MapIcons/colorNumbers/marker_purple41.png new file mode 100644 index 00000000..6425e780 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple42.png b/assets/MapIcons/colorNumbers/marker_purple42.png new file mode 100644 index 00000000..5233b9d4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple43.png b/assets/MapIcons/colorNumbers/marker_purple43.png new file mode 100644 index 00000000..5a7796f8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple44.png b/assets/MapIcons/colorNumbers/marker_purple44.png new file mode 100644 index 00000000..c8bc9d29 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple45.png b/assets/MapIcons/colorNumbers/marker_purple45.png new file mode 100644 index 00000000..af39eb22 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple46.png b/assets/MapIcons/colorNumbers/marker_purple46.png new file mode 100644 index 00000000..d5d24134 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple47.png b/assets/MapIcons/colorNumbers/marker_purple47.png new file mode 100644 index 00000000..044285a8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple48.png b/assets/MapIcons/colorNumbers/marker_purple48.png new file mode 100644 index 00000000..0ee79a8f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple49.png b/assets/MapIcons/colorNumbers/marker_purple49.png new file mode 100644 index 00000000..0d175fd7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple5.png b/assets/MapIcons/colorNumbers/marker_purple5.png new file mode 100644 index 00000000..d6075e26 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple50.png b/assets/MapIcons/colorNumbers/marker_purple50.png new file mode 100644 index 00000000..ae091b04 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple51.png b/assets/MapIcons/colorNumbers/marker_purple51.png new file mode 100644 index 00000000..98d90813 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple52.png b/assets/MapIcons/colorNumbers/marker_purple52.png new file mode 100644 index 00000000..a7c0394d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple53.png b/assets/MapIcons/colorNumbers/marker_purple53.png new file mode 100644 index 00000000..4559954f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple54.png b/assets/MapIcons/colorNumbers/marker_purple54.png new file mode 100644 index 00000000..9b8faa5e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple55.png b/assets/MapIcons/colorNumbers/marker_purple55.png new file mode 100644 index 00000000..ca0be999 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple56.png b/assets/MapIcons/colorNumbers/marker_purple56.png new file mode 100644 index 00000000..ffe9e114 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple57.png b/assets/MapIcons/colorNumbers/marker_purple57.png new file mode 100644 index 00000000..48bca137 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple58.png b/assets/MapIcons/colorNumbers/marker_purple58.png new file mode 100644 index 00000000..fe3e3196 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple59.png b/assets/MapIcons/colorNumbers/marker_purple59.png new file mode 100644 index 00000000..85805a8f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple6.png b/assets/MapIcons/colorNumbers/marker_purple6.png new file mode 100644 index 00000000..3029774c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple60.png b/assets/MapIcons/colorNumbers/marker_purple60.png new file mode 100644 index 00000000..09e13bf7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple61.png b/assets/MapIcons/colorNumbers/marker_purple61.png new file mode 100644 index 00000000..41e17f77 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple62.png b/assets/MapIcons/colorNumbers/marker_purple62.png new file mode 100644 index 00000000..401a0442 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple63.png b/assets/MapIcons/colorNumbers/marker_purple63.png new file mode 100644 index 00000000..e4142949 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple64.png b/assets/MapIcons/colorNumbers/marker_purple64.png new file mode 100644 index 00000000..f313abc1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple65.png b/assets/MapIcons/colorNumbers/marker_purple65.png new file mode 100644 index 00000000..755193e9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple66.png b/assets/MapIcons/colorNumbers/marker_purple66.png new file mode 100644 index 00000000..524b5b4a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple67.png b/assets/MapIcons/colorNumbers/marker_purple67.png new file mode 100644 index 00000000..c1592eac Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple68.png b/assets/MapIcons/colorNumbers/marker_purple68.png new file mode 100644 index 00000000..b1f50cad Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple69.png b/assets/MapIcons/colorNumbers/marker_purple69.png new file mode 100644 index 00000000..e5f2172c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple7.png b/assets/MapIcons/colorNumbers/marker_purple7.png new file mode 100644 index 00000000..61590555 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple70.png b/assets/MapIcons/colorNumbers/marker_purple70.png new file mode 100644 index 00000000..7a202321 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple71.png b/assets/MapIcons/colorNumbers/marker_purple71.png new file mode 100644 index 00000000..efdd28d5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple72.png b/assets/MapIcons/colorNumbers/marker_purple72.png new file mode 100644 index 00000000..cb0e1e64 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple73.png b/assets/MapIcons/colorNumbers/marker_purple73.png new file mode 100644 index 00000000..019c780f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple74.png b/assets/MapIcons/colorNumbers/marker_purple74.png new file mode 100644 index 00000000..82e65601 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple75.png b/assets/MapIcons/colorNumbers/marker_purple75.png new file mode 100644 index 00000000..38264a17 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple76.png b/assets/MapIcons/colorNumbers/marker_purple76.png new file mode 100644 index 00000000..f03f2721 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple77.png b/assets/MapIcons/colorNumbers/marker_purple77.png new file mode 100644 index 00000000..e0837996 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple78.png b/assets/MapIcons/colorNumbers/marker_purple78.png new file mode 100644 index 00000000..c7e27501 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple79.png b/assets/MapIcons/colorNumbers/marker_purple79.png new file mode 100644 index 00000000..4d31fe76 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple8.png b/assets/MapIcons/colorNumbers/marker_purple8.png new file mode 100644 index 00000000..66676799 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple80.png b/assets/MapIcons/colorNumbers/marker_purple80.png new file mode 100644 index 00000000..c5315d96 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple81.png b/assets/MapIcons/colorNumbers/marker_purple81.png new file mode 100644 index 00000000..71eb7d50 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple82.png b/assets/MapIcons/colorNumbers/marker_purple82.png new file mode 100644 index 00000000..62b3cb9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple83.png b/assets/MapIcons/colorNumbers/marker_purple83.png new file mode 100644 index 00000000..cd57ac19 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple84.png b/assets/MapIcons/colorNumbers/marker_purple84.png new file mode 100644 index 00000000..f45eaaf2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple85.png b/assets/MapIcons/colorNumbers/marker_purple85.png new file mode 100644 index 00000000..c599444d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple86.png b/assets/MapIcons/colorNumbers/marker_purple86.png new file mode 100644 index 00000000..b2c1afa7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple87.png b/assets/MapIcons/colorNumbers/marker_purple87.png new file mode 100644 index 00000000..ca90d2f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple88.png b/assets/MapIcons/colorNumbers/marker_purple88.png new file mode 100644 index 00000000..0ebfefe6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple89.png b/assets/MapIcons/colorNumbers/marker_purple89.png new file mode 100644 index 00000000..7485be81 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple9.png b/assets/MapIcons/colorNumbers/marker_purple9.png new file mode 100644 index 00000000..2133b8ff Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple90.png b/assets/MapIcons/colorNumbers/marker_purple90.png new file mode 100644 index 00000000..9bff7ee0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple91.png b/assets/MapIcons/colorNumbers/marker_purple91.png new file mode 100644 index 00000000..64130cae Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple92.png b/assets/MapIcons/colorNumbers/marker_purple92.png new file mode 100644 index 00000000..039d9e0a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple93.png b/assets/MapIcons/colorNumbers/marker_purple93.png new file mode 100644 index 00000000..c0e95b6f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple94.png b/assets/MapIcons/colorNumbers/marker_purple94.png new file mode 100644 index 00000000..53f0123c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple95.png b/assets/MapIcons/colorNumbers/marker_purple95.png new file mode 100644 index 00000000..e29581fe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple96.png b/assets/MapIcons/colorNumbers/marker_purple96.png new file mode 100644 index 00000000..d4fa9cac Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple97.png b/assets/MapIcons/colorNumbers/marker_purple97.png new file mode 100644 index 00000000..02aaa755 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple98.png b/assets/MapIcons/colorNumbers/marker_purple98.png new file mode 100644 index 00000000..20b9bbfe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple99.png b/assets/MapIcons/colorNumbers/marker_purple99.png new file mode 100644 index 00000000..7b047c58 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple=.png b/assets/MapIcons/colorNumbers/marker_purple=.png new file mode 100644 index 00000000..18b9b87f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purple@.png b/assets/MapIcons/colorNumbers/marker_purple@.png new file mode 100644 index 00000000..214e2094 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purple@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleA.png b/assets/MapIcons/colorNumbers/marker_purpleA.png new file mode 100644 index 00000000..e37ff16e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleB.png b/assets/MapIcons/colorNumbers/marker_purpleB.png new file mode 100644 index 00000000..5ebacb3b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleC.png b/assets/MapIcons/colorNumbers/marker_purpleC.png new file mode 100644 index 00000000..f180170c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleD.png b/assets/MapIcons/colorNumbers/marker_purpleD.png new file mode 100644 index 00000000..1354ae7e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleE.png b/assets/MapIcons/colorNumbers/marker_purpleE.png new file mode 100644 index 00000000..b8cb4b2a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleF.png b/assets/MapIcons/colorNumbers/marker_purpleF.png new file mode 100644 index 00000000..2ba34bf5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleG.png b/assets/MapIcons/colorNumbers/marker_purpleG.png new file mode 100644 index 00000000..ec8aef63 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleH.png b/assets/MapIcons/colorNumbers/marker_purpleH.png new file mode 100644 index 00000000..4bf7a10a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleI.png b/assets/MapIcons/colorNumbers/marker_purpleI.png new file mode 100644 index 00000000..eb427c22 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleJ.png b/assets/MapIcons/colorNumbers/marker_purpleJ.png new file mode 100644 index 00000000..a2b45a16 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleK.png b/assets/MapIcons/colorNumbers/marker_purpleK.png new file mode 100644 index 00000000..84bb0253 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleL.png b/assets/MapIcons/colorNumbers/marker_purpleL.png new file mode 100644 index 00000000..d5197a54 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleM.png b/assets/MapIcons/colorNumbers/marker_purpleM.png new file mode 100644 index 00000000..7d4f1bf1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleN.png b/assets/MapIcons/colorNumbers/marker_purpleN.png new file mode 100644 index 00000000..e5d7182c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleO.png b/assets/MapIcons/colorNumbers/marker_purpleO.png new file mode 100644 index 00000000..3e8e6d9d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleP.png b/assets/MapIcons/colorNumbers/marker_purpleP.png new file mode 100644 index 00000000..6989ec37 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleQ.png b/assets/MapIcons/colorNumbers/marker_purpleQ.png new file mode 100644 index 00000000..7a58f45b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleR.png b/assets/MapIcons/colorNumbers/marker_purpleR.png new file mode 100644 index 00000000..4c4afcf4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleS.png b/assets/MapIcons/colorNumbers/marker_purpleS.png new file mode 100644 index 00000000..52b869f4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleT.png b/assets/MapIcons/colorNumbers/marker_purpleT.png new file mode 100644 index 00000000..107904e4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleU.png b/assets/MapIcons/colorNumbers/marker_purpleU.png new file mode 100644 index 00000000..c2806495 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleV.png b/assets/MapIcons/colorNumbers/marker_purpleV.png new file mode 100644 index 00000000..abc750b3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleW.png b/assets/MapIcons/colorNumbers/marker_purpleW.png new file mode 100644 index 00000000..e2f26177 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleX.png b/assets/MapIcons/colorNumbers/marker_purpleX.png new file mode 100644 index 00000000..88f440df Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleY.png b/assets/MapIcons/colorNumbers/marker_purpleY.png new file mode 100644 index 00000000..49958b20 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_purpleZ.png b/assets/MapIcons/colorNumbers/marker_purpleZ.png new file mode 100644 index 00000000..30f280d5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_purpleZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red!.png b/assets/MapIcons/colorNumbers/marker_red!.png new file mode 100644 index 00000000..a18a5d8a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red#.png b/assets/MapIcons/colorNumbers/marker_red#.png new file mode 100644 index 00000000..759013dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red$.png b/assets/MapIcons/colorNumbers/marker_red$.png new file mode 100644 index 00000000..2a1643b8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red%.png b/assets/MapIcons/colorNumbers/marker_red%.png new file mode 100644 index 00000000..ec0df894 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red&.png b/assets/MapIcons/colorNumbers/marker_red&.png new file mode 100644 index 00000000..83292df2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red+.png b/assets/MapIcons/colorNumbers/marker_red+.png new file mode 100644 index 00000000..19a026d1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red-.png b/assets/MapIcons/colorNumbers/marker_red-.png new file mode 100644 index 00000000..f4a55ace Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red.png b/assets/MapIcons/colorNumbers/marker_red.png new file mode 100644 index 00000000..12e71654 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red1.png b/assets/MapIcons/colorNumbers/marker_red1.png new file mode 100644 index 00000000..f720f014 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red10.png b/assets/MapIcons/colorNumbers/marker_red10.png new file mode 100644 index 00000000..15583ba8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red100.png b/assets/MapIcons/colorNumbers/marker_red100.png new file mode 100644 index 00000000..72d5e276 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red11.png b/assets/MapIcons/colorNumbers/marker_red11.png new file mode 100644 index 00000000..847acf33 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red12.png b/assets/MapIcons/colorNumbers/marker_red12.png new file mode 100644 index 00000000..73bec04e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red13.png b/assets/MapIcons/colorNumbers/marker_red13.png new file mode 100644 index 00000000..bf3f363d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red14.png b/assets/MapIcons/colorNumbers/marker_red14.png new file mode 100644 index 00000000..ec07d68b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red15.png b/assets/MapIcons/colorNumbers/marker_red15.png new file mode 100644 index 00000000..b28d87b0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red16.png b/assets/MapIcons/colorNumbers/marker_red16.png new file mode 100644 index 00000000..e9c8f79c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red17.png b/assets/MapIcons/colorNumbers/marker_red17.png new file mode 100644 index 00000000..a87487b3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red18.png b/assets/MapIcons/colorNumbers/marker_red18.png new file mode 100644 index 00000000..2adc13b8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red19.png b/assets/MapIcons/colorNumbers/marker_red19.png new file mode 100644 index 00000000..b69a854b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red2.png b/assets/MapIcons/colorNumbers/marker_red2.png new file mode 100644 index 00000000..a7d74851 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red20.png b/assets/MapIcons/colorNumbers/marker_red20.png new file mode 100644 index 00000000..78e296ff Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red21.png b/assets/MapIcons/colorNumbers/marker_red21.png new file mode 100644 index 00000000..3cd91d8e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red22.png b/assets/MapIcons/colorNumbers/marker_red22.png new file mode 100644 index 00000000..5d4b3dbf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red23.png b/assets/MapIcons/colorNumbers/marker_red23.png new file mode 100644 index 00000000..49151907 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red24.png b/assets/MapIcons/colorNumbers/marker_red24.png new file mode 100644 index 00000000..9b603b8e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red25.png b/assets/MapIcons/colorNumbers/marker_red25.png new file mode 100644 index 00000000..e04efcfb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red26.png b/assets/MapIcons/colorNumbers/marker_red26.png new file mode 100644 index 00000000..5b9af475 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red27.png b/assets/MapIcons/colorNumbers/marker_red27.png new file mode 100644 index 00000000..59d56af1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red28.png b/assets/MapIcons/colorNumbers/marker_red28.png new file mode 100644 index 00000000..036ec631 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red29.png b/assets/MapIcons/colorNumbers/marker_red29.png new file mode 100644 index 00000000..a6e0d4ef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red3.png b/assets/MapIcons/colorNumbers/marker_red3.png new file mode 100644 index 00000000..0283e0bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red30.png b/assets/MapIcons/colorNumbers/marker_red30.png new file mode 100644 index 00000000..4bffd8be Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red31.png b/assets/MapIcons/colorNumbers/marker_red31.png new file mode 100644 index 00000000..699f8252 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red32.png b/assets/MapIcons/colorNumbers/marker_red32.png new file mode 100644 index 00000000..91f08c95 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red33.png b/assets/MapIcons/colorNumbers/marker_red33.png new file mode 100644 index 00000000..0d448d43 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red34.png b/assets/MapIcons/colorNumbers/marker_red34.png new file mode 100644 index 00000000..6aeeb7a5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red35.png b/assets/MapIcons/colorNumbers/marker_red35.png new file mode 100644 index 00000000..b1eff514 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red36.png b/assets/MapIcons/colorNumbers/marker_red36.png new file mode 100644 index 00000000..28347de7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red37.png b/assets/MapIcons/colorNumbers/marker_red37.png new file mode 100644 index 00000000..401e315a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red38.png b/assets/MapIcons/colorNumbers/marker_red38.png new file mode 100644 index 00000000..ebfa8d9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red39.png b/assets/MapIcons/colorNumbers/marker_red39.png new file mode 100644 index 00000000..d1a5ce9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red4.png b/assets/MapIcons/colorNumbers/marker_red4.png new file mode 100644 index 00000000..bc5453af Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red40.png b/assets/MapIcons/colorNumbers/marker_red40.png new file mode 100644 index 00000000..8c02707e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red41.png b/assets/MapIcons/colorNumbers/marker_red41.png new file mode 100644 index 00000000..65898399 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red42.png b/assets/MapIcons/colorNumbers/marker_red42.png new file mode 100644 index 00000000..e2284a4d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red43.png b/assets/MapIcons/colorNumbers/marker_red43.png new file mode 100644 index 00000000..0e5a35f9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red44.png b/assets/MapIcons/colorNumbers/marker_red44.png new file mode 100644 index 00000000..d51aadf6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red45.png b/assets/MapIcons/colorNumbers/marker_red45.png new file mode 100644 index 00000000..6ea7721d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red46.png b/assets/MapIcons/colorNumbers/marker_red46.png new file mode 100644 index 00000000..4cd621b7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red47.png b/assets/MapIcons/colorNumbers/marker_red47.png new file mode 100644 index 00000000..1d20d4b4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red48.png b/assets/MapIcons/colorNumbers/marker_red48.png new file mode 100644 index 00000000..ef72a1a9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red49.png b/assets/MapIcons/colorNumbers/marker_red49.png new file mode 100644 index 00000000..d2a8f25f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red5.png b/assets/MapIcons/colorNumbers/marker_red5.png new file mode 100644 index 00000000..16b5ac91 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red50.png b/assets/MapIcons/colorNumbers/marker_red50.png new file mode 100644 index 00000000..4c351043 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red51.png b/assets/MapIcons/colorNumbers/marker_red51.png new file mode 100644 index 00000000..02bf5664 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red52.png b/assets/MapIcons/colorNumbers/marker_red52.png new file mode 100644 index 00000000..ce6cceb4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red53.png b/assets/MapIcons/colorNumbers/marker_red53.png new file mode 100644 index 00000000..c4a61481 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red54.png b/assets/MapIcons/colorNumbers/marker_red54.png new file mode 100644 index 00000000..ca27efed Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red55.png b/assets/MapIcons/colorNumbers/marker_red55.png new file mode 100644 index 00000000..3ca6c4cc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red56.png b/assets/MapIcons/colorNumbers/marker_red56.png new file mode 100644 index 00000000..edc52599 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red57.png b/assets/MapIcons/colorNumbers/marker_red57.png new file mode 100644 index 00000000..fc926eda Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red58.png b/assets/MapIcons/colorNumbers/marker_red58.png new file mode 100644 index 00000000..6549dbbf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red59.png b/assets/MapIcons/colorNumbers/marker_red59.png new file mode 100644 index 00000000..1c8d6f67 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red6.png b/assets/MapIcons/colorNumbers/marker_red6.png new file mode 100644 index 00000000..27b40f2a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red60.png b/assets/MapIcons/colorNumbers/marker_red60.png new file mode 100644 index 00000000..e45570b6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red61.png b/assets/MapIcons/colorNumbers/marker_red61.png new file mode 100644 index 00000000..7b2cc119 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red62.png b/assets/MapIcons/colorNumbers/marker_red62.png new file mode 100644 index 00000000..0a6f7b26 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red63.png b/assets/MapIcons/colorNumbers/marker_red63.png new file mode 100644 index 00000000..56689e13 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red64.png b/assets/MapIcons/colorNumbers/marker_red64.png new file mode 100644 index 00000000..784e8f80 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red65.png b/assets/MapIcons/colorNumbers/marker_red65.png new file mode 100644 index 00000000..0f06eade Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red66.png b/assets/MapIcons/colorNumbers/marker_red66.png new file mode 100644 index 00000000..011580ed Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red67.png b/assets/MapIcons/colorNumbers/marker_red67.png new file mode 100644 index 00000000..8acbe1b2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red68.png b/assets/MapIcons/colorNumbers/marker_red68.png new file mode 100644 index 00000000..3d15771e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red69.png b/assets/MapIcons/colorNumbers/marker_red69.png new file mode 100644 index 00000000..6737ca9a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red7.png b/assets/MapIcons/colorNumbers/marker_red7.png new file mode 100644 index 00000000..7021b7c7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red70.png b/assets/MapIcons/colorNumbers/marker_red70.png new file mode 100644 index 00000000..e850dfca Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red71.png b/assets/MapIcons/colorNumbers/marker_red71.png new file mode 100644 index 00000000..0b6661b8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red72.png b/assets/MapIcons/colorNumbers/marker_red72.png new file mode 100644 index 00000000..adae5350 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red73.png b/assets/MapIcons/colorNumbers/marker_red73.png new file mode 100644 index 00000000..5964999e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red74.png b/assets/MapIcons/colorNumbers/marker_red74.png new file mode 100644 index 00000000..96f71208 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red75.png b/assets/MapIcons/colorNumbers/marker_red75.png new file mode 100644 index 00000000..f0744d5b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red76.png b/assets/MapIcons/colorNumbers/marker_red76.png new file mode 100644 index 00000000..28d722d2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red77.png b/assets/MapIcons/colorNumbers/marker_red77.png new file mode 100644 index 00000000..61d83e5f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red78.png b/assets/MapIcons/colorNumbers/marker_red78.png new file mode 100644 index 00000000..74afc879 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red79.png b/assets/MapIcons/colorNumbers/marker_red79.png new file mode 100644 index 00000000..c4e98672 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red8.png b/assets/MapIcons/colorNumbers/marker_red8.png new file mode 100644 index 00000000..0f6abe68 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red80.png b/assets/MapIcons/colorNumbers/marker_red80.png new file mode 100644 index 00000000..22bff909 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red81.png b/assets/MapIcons/colorNumbers/marker_red81.png new file mode 100644 index 00000000..0df198b1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red82.png b/assets/MapIcons/colorNumbers/marker_red82.png new file mode 100644 index 00000000..da824fb1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red83.png b/assets/MapIcons/colorNumbers/marker_red83.png new file mode 100644 index 00000000..76a5c1fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red84.png b/assets/MapIcons/colorNumbers/marker_red84.png new file mode 100644 index 00000000..6275a1f3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red85.png b/assets/MapIcons/colorNumbers/marker_red85.png new file mode 100644 index 00000000..f74bc20f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red86.png b/assets/MapIcons/colorNumbers/marker_red86.png new file mode 100644 index 00000000..1b2ff28d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red87.png b/assets/MapIcons/colorNumbers/marker_red87.png new file mode 100644 index 00000000..2db10fe1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red88.png b/assets/MapIcons/colorNumbers/marker_red88.png new file mode 100644 index 00000000..7fbc7229 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red89.png b/assets/MapIcons/colorNumbers/marker_red89.png new file mode 100644 index 00000000..1d279a87 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red9.png b/assets/MapIcons/colorNumbers/marker_red9.png new file mode 100644 index 00000000..bc0a3c64 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red90.png b/assets/MapIcons/colorNumbers/marker_red90.png new file mode 100644 index 00000000..0cfae058 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red91.png b/assets/MapIcons/colorNumbers/marker_red91.png new file mode 100644 index 00000000..ed01f388 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red92.png b/assets/MapIcons/colorNumbers/marker_red92.png new file mode 100644 index 00000000..8deb0201 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red93.png b/assets/MapIcons/colorNumbers/marker_red93.png new file mode 100644 index 00000000..3e388271 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red94.png b/assets/MapIcons/colorNumbers/marker_red94.png new file mode 100644 index 00000000..a3786fb1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red95.png b/assets/MapIcons/colorNumbers/marker_red95.png new file mode 100644 index 00000000..f5d15661 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red96.png b/assets/MapIcons/colorNumbers/marker_red96.png new file mode 100644 index 00000000..638ce87b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red97.png b/assets/MapIcons/colorNumbers/marker_red97.png new file mode 100644 index 00000000..92e34b35 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red98.png b/assets/MapIcons/colorNumbers/marker_red98.png new file mode 100644 index 00000000..8098415a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red99.png b/assets/MapIcons/colorNumbers/marker_red99.png new file mode 100644 index 00000000..dcf3f91e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red=.png b/assets/MapIcons/colorNumbers/marker_red=.png new file mode 100644 index 00000000..d37f5034 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_red@.png b/assets/MapIcons/colorNumbers/marker_red@.png new file mode 100644 index 00000000..392738f7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_red@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redA.png b/assets/MapIcons/colorNumbers/marker_redA.png new file mode 100644 index 00000000..2cfc76dc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redB.png b/assets/MapIcons/colorNumbers/marker_redB.png new file mode 100644 index 00000000..f8c984a1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redC.png b/assets/MapIcons/colorNumbers/marker_redC.png new file mode 100644 index 00000000..cc4fbe8f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redD.png b/assets/MapIcons/colorNumbers/marker_redD.png new file mode 100644 index 00000000..17aea011 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redE.png b/assets/MapIcons/colorNumbers/marker_redE.png new file mode 100644 index 00000000..effe6009 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redF.png b/assets/MapIcons/colorNumbers/marker_redF.png new file mode 100644 index 00000000..5cc3c610 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redG.png b/assets/MapIcons/colorNumbers/marker_redG.png new file mode 100644 index 00000000..69d4b264 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redH.png b/assets/MapIcons/colorNumbers/marker_redH.png new file mode 100644 index 00000000..6bc37165 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redI.png b/assets/MapIcons/colorNumbers/marker_redI.png new file mode 100644 index 00000000..8a7906ee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redJ.png b/assets/MapIcons/colorNumbers/marker_redJ.png new file mode 100644 index 00000000..95851875 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redK.png b/assets/MapIcons/colorNumbers/marker_redK.png new file mode 100644 index 00000000..b6a91de5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redL.png b/assets/MapIcons/colorNumbers/marker_redL.png new file mode 100644 index 00000000..0a139b1a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redM.png b/assets/MapIcons/colorNumbers/marker_redM.png new file mode 100644 index 00000000..91165016 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redN.png b/assets/MapIcons/colorNumbers/marker_redN.png new file mode 100644 index 00000000..5f08383e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redO.png b/assets/MapIcons/colorNumbers/marker_redO.png new file mode 100644 index 00000000..6e0ee558 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redP.png b/assets/MapIcons/colorNumbers/marker_redP.png new file mode 100644 index 00000000..ae30fc88 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redQ.png b/assets/MapIcons/colorNumbers/marker_redQ.png new file mode 100644 index 00000000..ff680642 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redR.png b/assets/MapIcons/colorNumbers/marker_redR.png new file mode 100644 index 00000000..b87abbd7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redS.png b/assets/MapIcons/colorNumbers/marker_redS.png new file mode 100644 index 00000000..abdbebc6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redT.png b/assets/MapIcons/colorNumbers/marker_redT.png new file mode 100644 index 00000000..8b32df27 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redU.png b/assets/MapIcons/colorNumbers/marker_redU.png new file mode 100644 index 00000000..3274080d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redV.png b/assets/MapIcons/colorNumbers/marker_redV.png new file mode 100644 index 00000000..8713d961 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redW.png b/assets/MapIcons/colorNumbers/marker_redW.png new file mode 100644 index 00000000..74b7a719 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redX.png b/assets/MapIcons/colorNumbers/marker_redX.png new file mode 100644 index 00000000..dbca0f4f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redY.png b/assets/MapIcons/colorNumbers/marker_redY.png new file mode 100644 index 00000000..44dbb86f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_redZ.png b/assets/MapIcons/colorNumbers/marker_redZ.png new file mode 100644 index 00000000..e10b201e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_redZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white!.png b/assets/MapIcons/colorNumbers/marker_white!.png new file mode 100644 index 00000000..5cf2120a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white#.png b/assets/MapIcons/colorNumbers/marker_white#.png new file mode 100644 index 00000000..e6beb9fb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white$.png b/assets/MapIcons/colorNumbers/marker_white$.png new file mode 100644 index 00000000..1e13333c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white%.png b/assets/MapIcons/colorNumbers/marker_white%.png new file mode 100644 index 00000000..096d2793 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white&.png b/assets/MapIcons/colorNumbers/marker_white&.png new file mode 100644 index 00000000..4e3b3d45 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white+.png b/assets/MapIcons/colorNumbers/marker_white+.png new file mode 100644 index 00000000..a3e61dc8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white-.png b/assets/MapIcons/colorNumbers/marker_white-.png new file mode 100644 index 00000000..f639e46d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white.png b/assets/MapIcons/colorNumbers/marker_white.png new file mode 100644 index 00000000..46b56067 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white1.png b/assets/MapIcons/colorNumbers/marker_white1.png new file mode 100644 index 00000000..228111a8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white10.png b/assets/MapIcons/colorNumbers/marker_white10.png new file mode 100644 index 00000000..45019933 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white100.png b/assets/MapIcons/colorNumbers/marker_white100.png new file mode 100644 index 00000000..287bdc1b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white11.png b/assets/MapIcons/colorNumbers/marker_white11.png new file mode 100644 index 00000000..00e308f3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white12.png b/assets/MapIcons/colorNumbers/marker_white12.png new file mode 100644 index 00000000..3ff46839 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white13.png b/assets/MapIcons/colorNumbers/marker_white13.png new file mode 100644 index 00000000..b6379d2c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white14.png b/assets/MapIcons/colorNumbers/marker_white14.png new file mode 100644 index 00000000..4c95bcd6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white15.png b/assets/MapIcons/colorNumbers/marker_white15.png new file mode 100644 index 00000000..2efa66de Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white16.png b/assets/MapIcons/colorNumbers/marker_white16.png new file mode 100644 index 00000000..c05edd8a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white17.png b/assets/MapIcons/colorNumbers/marker_white17.png new file mode 100644 index 00000000..f7bdd526 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white18.png b/assets/MapIcons/colorNumbers/marker_white18.png new file mode 100644 index 00000000..c3c2b98e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white19.png b/assets/MapIcons/colorNumbers/marker_white19.png new file mode 100644 index 00000000..1062029e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white2.png b/assets/MapIcons/colorNumbers/marker_white2.png new file mode 100644 index 00000000..df955b83 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white20.png b/assets/MapIcons/colorNumbers/marker_white20.png new file mode 100644 index 00000000..dc1e9ea0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white21.png b/assets/MapIcons/colorNumbers/marker_white21.png new file mode 100644 index 00000000..fdbce249 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white22.png b/assets/MapIcons/colorNumbers/marker_white22.png new file mode 100644 index 00000000..9896a678 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white23.png b/assets/MapIcons/colorNumbers/marker_white23.png new file mode 100644 index 00000000..bf56130a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white24.png b/assets/MapIcons/colorNumbers/marker_white24.png new file mode 100644 index 00000000..3247feb1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white25.png b/assets/MapIcons/colorNumbers/marker_white25.png new file mode 100644 index 00000000..fa8237d8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white26.png b/assets/MapIcons/colorNumbers/marker_white26.png new file mode 100644 index 00000000..2cbf9462 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white27.png b/assets/MapIcons/colorNumbers/marker_white27.png new file mode 100644 index 00000000..ba60c44e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white28.png b/assets/MapIcons/colorNumbers/marker_white28.png new file mode 100644 index 00000000..33ece363 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white29.png b/assets/MapIcons/colorNumbers/marker_white29.png new file mode 100644 index 00000000..55631600 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white3.png b/assets/MapIcons/colorNumbers/marker_white3.png new file mode 100644 index 00000000..0ee2ff61 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white30.png b/assets/MapIcons/colorNumbers/marker_white30.png new file mode 100644 index 00000000..bc19cc5e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white31.png b/assets/MapIcons/colorNumbers/marker_white31.png new file mode 100644 index 00000000..086ad071 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white32.png b/assets/MapIcons/colorNumbers/marker_white32.png new file mode 100644 index 00000000..aaf0d451 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white33.png b/assets/MapIcons/colorNumbers/marker_white33.png new file mode 100644 index 00000000..b8ccfa58 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white34.png b/assets/MapIcons/colorNumbers/marker_white34.png new file mode 100644 index 00000000..f5176224 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white35.png b/assets/MapIcons/colorNumbers/marker_white35.png new file mode 100644 index 00000000..acc5f9be Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white36.png b/assets/MapIcons/colorNumbers/marker_white36.png new file mode 100644 index 00000000..1f459b41 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white37.png b/assets/MapIcons/colorNumbers/marker_white37.png new file mode 100644 index 00000000..16d8defe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white38.png b/assets/MapIcons/colorNumbers/marker_white38.png new file mode 100644 index 00000000..65dc39c7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white39.png b/assets/MapIcons/colorNumbers/marker_white39.png new file mode 100644 index 00000000..6f26d623 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white4.png b/assets/MapIcons/colorNumbers/marker_white4.png new file mode 100644 index 00000000..a170dae3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white40.png b/assets/MapIcons/colorNumbers/marker_white40.png new file mode 100644 index 00000000..59c6dad9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white41.png b/assets/MapIcons/colorNumbers/marker_white41.png new file mode 100644 index 00000000..d0d8aaa5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white42.png b/assets/MapIcons/colorNumbers/marker_white42.png new file mode 100644 index 00000000..0d9a394d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white43.png b/assets/MapIcons/colorNumbers/marker_white43.png new file mode 100644 index 00000000..5000bf6d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white44.png b/assets/MapIcons/colorNumbers/marker_white44.png new file mode 100644 index 00000000..27a445ba Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white45.png b/assets/MapIcons/colorNumbers/marker_white45.png new file mode 100644 index 00000000..c9b8004e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white46.png b/assets/MapIcons/colorNumbers/marker_white46.png new file mode 100644 index 00000000..5cdff5c3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white47.png b/assets/MapIcons/colorNumbers/marker_white47.png new file mode 100644 index 00000000..b306bfca Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white48.png b/assets/MapIcons/colorNumbers/marker_white48.png new file mode 100644 index 00000000..0ef59df4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white49.png b/assets/MapIcons/colorNumbers/marker_white49.png new file mode 100644 index 00000000..70f1fe72 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white5.png b/assets/MapIcons/colorNumbers/marker_white5.png new file mode 100644 index 00000000..4173e8b3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white50.png b/assets/MapIcons/colorNumbers/marker_white50.png new file mode 100644 index 00000000..a78c7a55 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white51.png b/assets/MapIcons/colorNumbers/marker_white51.png new file mode 100644 index 00000000..9642738b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white52.png b/assets/MapIcons/colorNumbers/marker_white52.png new file mode 100644 index 00000000..e7d492bb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white53.png b/assets/MapIcons/colorNumbers/marker_white53.png new file mode 100644 index 00000000..f3db7198 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white54.png b/assets/MapIcons/colorNumbers/marker_white54.png new file mode 100644 index 00000000..0d220a89 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white55.png b/assets/MapIcons/colorNumbers/marker_white55.png new file mode 100644 index 00000000..757c32da Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white56.png b/assets/MapIcons/colorNumbers/marker_white56.png new file mode 100644 index 00000000..b09efba5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white57.png b/assets/MapIcons/colorNumbers/marker_white57.png new file mode 100644 index 00000000..3f1308bf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white58.png b/assets/MapIcons/colorNumbers/marker_white58.png new file mode 100644 index 00000000..aff29fdd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white59.png b/assets/MapIcons/colorNumbers/marker_white59.png new file mode 100644 index 00000000..6d0a5690 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white6.png b/assets/MapIcons/colorNumbers/marker_white6.png new file mode 100644 index 00000000..7e75af41 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white60.png b/assets/MapIcons/colorNumbers/marker_white60.png new file mode 100644 index 00000000..a2809795 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white61.png b/assets/MapIcons/colorNumbers/marker_white61.png new file mode 100644 index 00000000..b1b484b9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white62.png b/assets/MapIcons/colorNumbers/marker_white62.png new file mode 100644 index 00000000..5dab1de8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white63.png b/assets/MapIcons/colorNumbers/marker_white63.png new file mode 100644 index 00000000..f619aa37 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white64.png b/assets/MapIcons/colorNumbers/marker_white64.png new file mode 100644 index 00000000..94e4714c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white65.png b/assets/MapIcons/colorNumbers/marker_white65.png new file mode 100644 index 00000000..9945f1b4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white66.png b/assets/MapIcons/colorNumbers/marker_white66.png new file mode 100644 index 00000000..c0a41ae4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white67.png b/assets/MapIcons/colorNumbers/marker_white67.png new file mode 100644 index 00000000..20d5ba7c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white68.png b/assets/MapIcons/colorNumbers/marker_white68.png new file mode 100644 index 00000000..0c076657 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white69.png b/assets/MapIcons/colorNumbers/marker_white69.png new file mode 100644 index 00000000..fc2dd8b3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white7.png b/assets/MapIcons/colorNumbers/marker_white7.png new file mode 100644 index 00000000..b34fcef3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white70.png b/assets/MapIcons/colorNumbers/marker_white70.png new file mode 100644 index 00000000..861171b2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white71.png b/assets/MapIcons/colorNumbers/marker_white71.png new file mode 100644 index 00000000..300210bc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white72.png b/assets/MapIcons/colorNumbers/marker_white72.png new file mode 100644 index 00000000..6ce12983 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white73.png b/assets/MapIcons/colorNumbers/marker_white73.png new file mode 100644 index 00000000..22081dd9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white74.png b/assets/MapIcons/colorNumbers/marker_white74.png new file mode 100644 index 00000000..0c3d1bf7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white75.png b/assets/MapIcons/colorNumbers/marker_white75.png new file mode 100644 index 00000000..95efb673 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white76.png b/assets/MapIcons/colorNumbers/marker_white76.png new file mode 100644 index 00000000..82518b89 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white77.png b/assets/MapIcons/colorNumbers/marker_white77.png new file mode 100644 index 00000000..f550adf3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white78.png b/assets/MapIcons/colorNumbers/marker_white78.png new file mode 100644 index 00000000..35b01716 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white79.png b/assets/MapIcons/colorNumbers/marker_white79.png new file mode 100644 index 00000000..b969984f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white8.png b/assets/MapIcons/colorNumbers/marker_white8.png new file mode 100644 index 00000000..354124f9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white80.png b/assets/MapIcons/colorNumbers/marker_white80.png new file mode 100644 index 00000000..8d787d24 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white81.png b/assets/MapIcons/colorNumbers/marker_white81.png new file mode 100644 index 00000000..564a0f8f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white82.png b/assets/MapIcons/colorNumbers/marker_white82.png new file mode 100644 index 00000000..52866ce2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white83.png b/assets/MapIcons/colorNumbers/marker_white83.png new file mode 100644 index 00000000..0f138682 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white84.png b/assets/MapIcons/colorNumbers/marker_white84.png new file mode 100644 index 00000000..38bbfe9c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white85.png b/assets/MapIcons/colorNumbers/marker_white85.png new file mode 100644 index 00000000..72a141fb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white86.png b/assets/MapIcons/colorNumbers/marker_white86.png new file mode 100644 index 00000000..ec4da788 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white87.png b/assets/MapIcons/colorNumbers/marker_white87.png new file mode 100644 index 00000000..be424bd7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white88.png b/assets/MapIcons/colorNumbers/marker_white88.png new file mode 100644 index 00000000..ed61e553 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white89.png b/assets/MapIcons/colorNumbers/marker_white89.png new file mode 100644 index 00000000..874b1e53 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white9.png b/assets/MapIcons/colorNumbers/marker_white9.png new file mode 100644 index 00000000..ee948559 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white90.png b/assets/MapIcons/colorNumbers/marker_white90.png new file mode 100644 index 00000000..0fe43d0d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white91.png b/assets/MapIcons/colorNumbers/marker_white91.png new file mode 100644 index 00000000..e48f7aef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white92.png b/assets/MapIcons/colorNumbers/marker_white92.png new file mode 100644 index 00000000..4e602238 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white93.png b/assets/MapIcons/colorNumbers/marker_white93.png new file mode 100644 index 00000000..71cdac11 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white94.png b/assets/MapIcons/colorNumbers/marker_white94.png new file mode 100644 index 00000000..35406c29 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white95.png b/assets/MapIcons/colorNumbers/marker_white95.png new file mode 100644 index 00000000..46db43fb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white96.png b/assets/MapIcons/colorNumbers/marker_white96.png new file mode 100644 index 00000000..57a54d8c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white97.png b/assets/MapIcons/colorNumbers/marker_white97.png new file mode 100644 index 00000000..b5313719 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white98.png b/assets/MapIcons/colorNumbers/marker_white98.png new file mode 100644 index 00000000..fcf146b6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white99.png b/assets/MapIcons/colorNumbers/marker_white99.png new file mode 100644 index 00000000..83498d87 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white=.png b/assets/MapIcons/colorNumbers/marker_white=.png new file mode 100644 index 00000000..0a34140d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_white@.png b/assets/MapIcons/colorNumbers/marker_white@.png new file mode 100644 index 00000000..895cdfe8 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_white@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteA.png b/assets/MapIcons/colorNumbers/marker_whiteA.png new file mode 100644 index 00000000..366ce04c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteB.png b/assets/MapIcons/colorNumbers/marker_whiteB.png new file mode 100644 index 00000000..3edf1d8c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteC.png b/assets/MapIcons/colorNumbers/marker_whiteC.png new file mode 100644 index 00000000..bfbd5c96 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteD.png b/assets/MapIcons/colorNumbers/marker_whiteD.png new file mode 100644 index 00000000..744da81b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteE.png b/assets/MapIcons/colorNumbers/marker_whiteE.png new file mode 100644 index 00000000..abfb8fb6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteF.png b/assets/MapIcons/colorNumbers/marker_whiteF.png new file mode 100644 index 00000000..39050f7c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteG.png b/assets/MapIcons/colorNumbers/marker_whiteG.png new file mode 100644 index 00000000..8d545834 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteH.png b/assets/MapIcons/colorNumbers/marker_whiteH.png new file mode 100644 index 00000000..c296d5ee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteI.png b/assets/MapIcons/colorNumbers/marker_whiteI.png new file mode 100644 index 00000000..1ba27537 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteJ.png b/assets/MapIcons/colorNumbers/marker_whiteJ.png new file mode 100644 index 00000000..c5fc81d3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteK.png b/assets/MapIcons/colorNumbers/marker_whiteK.png new file mode 100644 index 00000000..952865d9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteL.png b/assets/MapIcons/colorNumbers/marker_whiteL.png new file mode 100644 index 00000000..40022d5f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteM.png b/assets/MapIcons/colorNumbers/marker_whiteM.png new file mode 100644 index 00000000..dd9ee9a4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteN.png b/assets/MapIcons/colorNumbers/marker_whiteN.png new file mode 100644 index 00000000..6ff8013b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteO.png b/assets/MapIcons/colorNumbers/marker_whiteO.png new file mode 100644 index 00000000..250170ee Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteP.png b/assets/MapIcons/colorNumbers/marker_whiteP.png new file mode 100644 index 00000000..a886b1aa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteQ.png b/assets/MapIcons/colorNumbers/marker_whiteQ.png new file mode 100644 index 00000000..8146d77a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteR.png b/assets/MapIcons/colorNumbers/marker_whiteR.png new file mode 100644 index 00000000..242d5c8c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteS.png b/assets/MapIcons/colorNumbers/marker_whiteS.png new file mode 100644 index 00000000..71292a60 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteT.png b/assets/MapIcons/colorNumbers/marker_whiteT.png new file mode 100644 index 00000000..35d67366 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteU.png b/assets/MapIcons/colorNumbers/marker_whiteU.png new file mode 100644 index 00000000..90c4e24a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteV.png b/assets/MapIcons/colorNumbers/marker_whiteV.png new file mode 100644 index 00000000..d3207d01 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteW.png b/assets/MapIcons/colorNumbers/marker_whiteW.png new file mode 100644 index 00000000..7775ae8b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteX.png b/assets/MapIcons/colorNumbers/marker_whiteX.png new file mode 100644 index 00000000..3b8761bc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteY.png b/assets/MapIcons/colorNumbers/marker_whiteY.png new file mode 100644 index 00000000..8fd6d63d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_whiteZ.png b/assets/MapIcons/colorNumbers/marker_whiteZ.png new file mode 100644 index 00000000..1d058621 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_whiteZ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow!.png b/assets/MapIcons/colorNumbers/marker_yellow!.png new file mode 100644 index 00000000..d46e792e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow!.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow#.png b/assets/MapIcons/colorNumbers/marker_yellow#.png new file mode 100644 index 00000000..99a4d382 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow#.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow$.png b/assets/MapIcons/colorNumbers/marker_yellow$.png new file mode 100644 index 00000000..a0754ba4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow$.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow%.png b/assets/MapIcons/colorNumbers/marker_yellow%.png new file mode 100644 index 00000000..6f6ca05f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow%.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow&.png b/assets/MapIcons/colorNumbers/marker_yellow&.png new file mode 100644 index 00000000..fb2963f0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow&.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow+.png b/assets/MapIcons/colorNumbers/marker_yellow+.png new file mode 100644 index 00000000..eaf98231 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow+.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow-.png b/assets/MapIcons/colorNumbers/marker_yellow-.png new file mode 100644 index 00000000..9899fefe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow-.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow.png b/assets/MapIcons/colorNumbers/marker_yellow.png new file mode 100644 index 00000000..82e2639c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow1.png b/assets/MapIcons/colorNumbers/marker_yellow1.png new file mode 100644 index 00000000..86a6f040 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow1.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow10.png b/assets/MapIcons/colorNumbers/marker_yellow10.png new file mode 100644 index 00000000..34b92c07 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow10.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow100.png b/assets/MapIcons/colorNumbers/marker_yellow100.png new file mode 100644 index 00000000..0d90048f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow100.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow11.png b/assets/MapIcons/colorNumbers/marker_yellow11.png new file mode 100644 index 00000000..ff5b1aa5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow11.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow12.png b/assets/MapIcons/colorNumbers/marker_yellow12.png new file mode 100644 index 00000000..06e1121e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow12.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow13.png b/assets/MapIcons/colorNumbers/marker_yellow13.png new file mode 100644 index 00000000..0b5224d3 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow13.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow14.png b/assets/MapIcons/colorNumbers/marker_yellow14.png new file mode 100644 index 00000000..91b3c2bd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow14.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow15.png b/assets/MapIcons/colorNumbers/marker_yellow15.png new file mode 100644 index 00000000..7ef2c1c2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow15.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow16.png b/assets/MapIcons/colorNumbers/marker_yellow16.png new file mode 100644 index 00000000..900d0a40 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow16.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow17.png b/assets/MapIcons/colorNumbers/marker_yellow17.png new file mode 100644 index 00000000..cf901142 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow17.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow18.png b/assets/MapIcons/colorNumbers/marker_yellow18.png new file mode 100644 index 00000000..93dfdbc9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow18.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow19.png b/assets/MapIcons/colorNumbers/marker_yellow19.png new file mode 100644 index 00000000..0045126b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow19.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow2.png b/assets/MapIcons/colorNumbers/marker_yellow2.png new file mode 100644 index 00000000..90c9956d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow2.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow20.png b/assets/MapIcons/colorNumbers/marker_yellow20.png new file mode 100644 index 00000000..e31823d7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow20.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow21.png b/assets/MapIcons/colorNumbers/marker_yellow21.png new file mode 100644 index 00000000..3bda902d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow21.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow22.png b/assets/MapIcons/colorNumbers/marker_yellow22.png new file mode 100644 index 00000000..493828f5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow22.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow23.png b/assets/MapIcons/colorNumbers/marker_yellow23.png new file mode 100644 index 00000000..86cf344a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow23.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow24.png b/assets/MapIcons/colorNumbers/marker_yellow24.png new file mode 100644 index 00000000..2633b759 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow24.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow25.png b/assets/MapIcons/colorNumbers/marker_yellow25.png new file mode 100644 index 00000000..aca14727 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow25.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow26.png b/assets/MapIcons/colorNumbers/marker_yellow26.png new file mode 100644 index 00000000..a018f341 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow26.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow27.png b/assets/MapIcons/colorNumbers/marker_yellow27.png new file mode 100644 index 00000000..5ef8c90e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow27.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow28.png b/assets/MapIcons/colorNumbers/marker_yellow28.png new file mode 100644 index 00000000..22437ace Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow28.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow29.png b/assets/MapIcons/colorNumbers/marker_yellow29.png new file mode 100644 index 00000000..8849aebe Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow29.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow3.png b/assets/MapIcons/colorNumbers/marker_yellow3.png new file mode 100644 index 00000000..2c281531 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow3.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow30.png b/assets/MapIcons/colorNumbers/marker_yellow30.png new file mode 100644 index 00000000..0bd38499 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow30.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow31.png b/assets/MapIcons/colorNumbers/marker_yellow31.png new file mode 100644 index 00000000..0a1678fc Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow31.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow32.png b/assets/MapIcons/colorNumbers/marker_yellow32.png new file mode 100644 index 00000000..d4c3ae55 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow32.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow33.png b/assets/MapIcons/colorNumbers/marker_yellow33.png new file mode 100644 index 00000000..de690c4a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow33.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow34.png b/assets/MapIcons/colorNumbers/marker_yellow34.png new file mode 100644 index 00000000..99d9739b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow34.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow35.png b/assets/MapIcons/colorNumbers/marker_yellow35.png new file mode 100644 index 00000000..2c321283 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow35.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow36.png b/assets/MapIcons/colorNumbers/marker_yellow36.png new file mode 100644 index 00000000..09932bf7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow36.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow37.png b/assets/MapIcons/colorNumbers/marker_yellow37.png new file mode 100644 index 00000000..3426f8be Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow37.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow38.png b/assets/MapIcons/colorNumbers/marker_yellow38.png new file mode 100644 index 00000000..66f00e16 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow38.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow39.png b/assets/MapIcons/colorNumbers/marker_yellow39.png new file mode 100644 index 00000000..6c6333da Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow39.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow4.png b/assets/MapIcons/colorNumbers/marker_yellow4.png new file mode 100644 index 00000000..7e1310ef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow4.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow40.png b/assets/MapIcons/colorNumbers/marker_yellow40.png new file mode 100644 index 00000000..2dacdd64 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow40.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow41.png b/assets/MapIcons/colorNumbers/marker_yellow41.png new file mode 100644 index 00000000..548bdc9b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow41.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow42.png b/assets/MapIcons/colorNumbers/marker_yellow42.png new file mode 100644 index 00000000..aa54ca15 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow42.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow43.png b/assets/MapIcons/colorNumbers/marker_yellow43.png new file mode 100644 index 00000000..3a31e865 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow43.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow44.png b/assets/MapIcons/colorNumbers/marker_yellow44.png new file mode 100644 index 00000000..25394e24 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow44.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow45.png b/assets/MapIcons/colorNumbers/marker_yellow45.png new file mode 100644 index 00000000..453e3d3b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow45.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow46.png b/assets/MapIcons/colorNumbers/marker_yellow46.png new file mode 100644 index 00000000..9bb8cf77 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow46.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow47.png b/assets/MapIcons/colorNumbers/marker_yellow47.png new file mode 100644 index 00000000..1daee476 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow47.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow48.png b/assets/MapIcons/colorNumbers/marker_yellow48.png new file mode 100644 index 00000000..1078562b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow48.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow49.png b/assets/MapIcons/colorNumbers/marker_yellow49.png new file mode 100644 index 00000000..0e1b2092 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow49.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow5.png b/assets/MapIcons/colorNumbers/marker_yellow5.png new file mode 100644 index 00000000..8e283549 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow5.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow50.png b/assets/MapIcons/colorNumbers/marker_yellow50.png new file mode 100644 index 00000000..5afe8b91 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow50.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow51.png b/assets/MapIcons/colorNumbers/marker_yellow51.png new file mode 100644 index 00000000..3406fdac Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow51.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow52.png b/assets/MapIcons/colorNumbers/marker_yellow52.png new file mode 100644 index 00000000..51cebda2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow52.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow53.png b/assets/MapIcons/colorNumbers/marker_yellow53.png new file mode 100644 index 00000000..d3552da9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow53.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow54.png b/assets/MapIcons/colorNumbers/marker_yellow54.png new file mode 100644 index 00000000..3b8685db Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow54.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow55.png b/assets/MapIcons/colorNumbers/marker_yellow55.png new file mode 100644 index 00000000..8faf0585 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow55.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow56.png b/assets/MapIcons/colorNumbers/marker_yellow56.png new file mode 100644 index 00000000..f5628286 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow56.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow57.png b/assets/MapIcons/colorNumbers/marker_yellow57.png new file mode 100644 index 00000000..82fd7ea9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow57.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow58.png b/assets/MapIcons/colorNumbers/marker_yellow58.png new file mode 100644 index 00000000..29e9eb87 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow58.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow59.png b/assets/MapIcons/colorNumbers/marker_yellow59.png new file mode 100644 index 00000000..358d7cf9 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow59.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow6.png b/assets/MapIcons/colorNumbers/marker_yellow6.png new file mode 100644 index 00000000..a0305095 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow6.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow60.png b/assets/MapIcons/colorNumbers/marker_yellow60.png new file mode 100644 index 00000000..2ad8343a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow60.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow61.png b/assets/MapIcons/colorNumbers/marker_yellow61.png new file mode 100644 index 00000000..42b37fa2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow61.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow62.png b/assets/MapIcons/colorNumbers/marker_yellow62.png new file mode 100644 index 00000000..a8255e28 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow62.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow63.png b/assets/MapIcons/colorNumbers/marker_yellow63.png new file mode 100644 index 00000000..500141eb Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow63.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow64.png b/assets/MapIcons/colorNumbers/marker_yellow64.png new file mode 100644 index 00000000..a9891c57 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow64.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow65.png b/assets/MapIcons/colorNumbers/marker_yellow65.png new file mode 100644 index 00000000..12e5760f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow65.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow66.png b/assets/MapIcons/colorNumbers/marker_yellow66.png new file mode 100644 index 00000000..29e9d3fd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow66.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow67.png b/assets/MapIcons/colorNumbers/marker_yellow67.png new file mode 100644 index 00000000..3c2a6949 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow67.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow68.png b/assets/MapIcons/colorNumbers/marker_yellow68.png new file mode 100644 index 00000000..b9aae64e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow68.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow69.png b/assets/MapIcons/colorNumbers/marker_yellow69.png new file mode 100644 index 00000000..cff219e1 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow69.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow7.png b/assets/MapIcons/colorNumbers/marker_yellow7.png new file mode 100644 index 00000000..ba72aa2b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow7.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow70.png b/assets/MapIcons/colorNumbers/marker_yellow70.png new file mode 100644 index 00000000..8f250e10 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow70.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow71.png b/assets/MapIcons/colorNumbers/marker_yellow71.png new file mode 100644 index 00000000..b3d4e9d5 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow71.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow72.png b/assets/MapIcons/colorNumbers/marker_yellow72.png new file mode 100644 index 00000000..0733fc1b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow72.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow73.png b/assets/MapIcons/colorNumbers/marker_yellow73.png new file mode 100644 index 00000000..06d2f1ef Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow73.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow74.png b/assets/MapIcons/colorNumbers/marker_yellow74.png new file mode 100644 index 00000000..3d9a0f9e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow74.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow75.png b/assets/MapIcons/colorNumbers/marker_yellow75.png new file mode 100644 index 00000000..d7612c4e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow75.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow76.png b/assets/MapIcons/colorNumbers/marker_yellow76.png new file mode 100644 index 00000000..d246d530 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow76.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow77.png b/assets/MapIcons/colorNumbers/marker_yellow77.png new file mode 100644 index 00000000..5d3f7b08 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow77.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow78.png b/assets/MapIcons/colorNumbers/marker_yellow78.png new file mode 100644 index 00000000..7bbe712f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow78.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow79.png b/assets/MapIcons/colorNumbers/marker_yellow79.png new file mode 100644 index 00000000..f6a5f643 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow79.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow8.png b/assets/MapIcons/colorNumbers/marker_yellow8.png new file mode 100644 index 00000000..212450fa Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow8.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow80.png b/assets/MapIcons/colorNumbers/marker_yellow80.png new file mode 100644 index 00000000..1ca9429d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow80.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow81.png b/assets/MapIcons/colorNumbers/marker_yellow81.png new file mode 100644 index 00000000..63e570d2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow81.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow82.png b/assets/MapIcons/colorNumbers/marker_yellow82.png new file mode 100644 index 00000000..ed051ce6 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow82.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow83.png b/assets/MapIcons/colorNumbers/marker_yellow83.png new file mode 100644 index 00000000..7b9306d0 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow83.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow84.png b/assets/MapIcons/colorNumbers/marker_yellow84.png new file mode 100644 index 00000000..c697a673 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow84.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow85.png b/assets/MapIcons/colorNumbers/marker_yellow85.png new file mode 100644 index 00000000..b30c874e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow85.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow86.png b/assets/MapIcons/colorNumbers/marker_yellow86.png new file mode 100644 index 00000000..9ba4304e Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow86.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow87.png b/assets/MapIcons/colorNumbers/marker_yellow87.png new file mode 100644 index 00000000..54444bcf Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow87.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow88.png b/assets/MapIcons/colorNumbers/marker_yellow88.png new file mode 100644 index 00000000..5cac5615 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow88.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow89.png b/assets/MapIcons/colorNumbers/marker_yellow89.png new file mode 100644 index 00000000..07094498 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow89.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow9.png b/assets/MapIcons/colorNumbers/marker_yellow9.png new file mode 100644 index 00000000..874afac2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow9.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow90.png b/assets/MapIcons/colorNumbers/marker_yellow90.png new file mode 100644 index 00000000..bc226876 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow90.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow91.png b/assets/MapIcons/colorNumbers/marker_yellow91.png new file mode 100644 index 00000000..34771373 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow91.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow92.png b/assets/MapIcons/colorNumbers/marker_yellow92.png new file mode 100644 index 00000000..6d4fd00d Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow92.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow93.png b/assets/MapIcons/colorNumbers/marker_yellow93.png new file mode 100644 index 00000000..6a487941 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow93.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow94.png b/assets/MapIcons/colorNumbers/marker_yellow94.png new file mode 100644 index 00000000..4ebbec77 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow94.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow95.png b/assets/MapIcons/colorNumbers/marker_yellow95.png new file mode 100644 index 00000000..b86343ea Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow95.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow96.png b/assets/MapIcons/colorNumbers/marker_yellow96.png new file mode 100644 index 00000000..9186902a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow96.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow97.png b/assets/MapIcons/colorNumbers/marker_yellow97.png new file mode 100644 index 00000000..52dea196 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow97.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow98.png b/assets/MapIcons/colorNumbers/marker_yellow98.png new file mode 100644 index 00000000..7fc2b8b7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow98.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow99.png b/assets/MapIcons/colorNumbers/marker_yellow99.png new file mode 100644 index 00000000..fde0ceba Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow99.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow=.png b/assets/MapIcons/colorNumbers/marker_yellow=.png new file mode 100644 index 00000000..13d9d531 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow=.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellow@.png b/assets/MapIcons/colorNumbers/marker_yellow@.png new file mode 100644 index 00000000..e0d916fd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellow@.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowA.png b/assets/MapIcons/colorNumbers/marker_yellowA.png new file mode 100644 index 00000000..94463efd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowA.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowB.png b/assets/MapIcons/colorNumbers/marker_yellowB.png new file mode 100644 index 00000000..eb38f68c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowB.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowC.png b/assets/MapIcons/colorNumbers/marker_yellowC.png new file mode 100644 index 00000000..f2f44421 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowC.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowD.png b/assets/MapIcons/colorNumbers/marker_yellowD.png new file mode 100644 index 00000000..f2ebd116 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowD.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowE.png b/assets/MapIcons/colorNumbers/marker_yellowE.png new file mode 100644 index 00000000..ef39d899 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowE.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowF.png b/assets/MapIcons/colorNumbers/marker_yellowF.png new file mode 100644 index 00000000..cd5be52f Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowF.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowG.png b/assets/MapIcons/colorNumbers/marker_yellowG.png new file mode 100644 index 00000000..86a0063b Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowG.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowH.png b/assets/MapIcons/colorNumbers/marker_yellowH.png new file mode 100644 index 00000000..ad46aa1c Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowH.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowI.png b/assets/MapIcons/colorNumbers/marker_yellowI.png new file mode 100644 index 00000000..6caf94da Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowI.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowJ.png b/assets/MapIcons/colorNumbers/marker_yellowJ.png new file mode 100644 index 00000000..346b274a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowJ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowK.png b/assets/MapIcons/colorNumbers/marker_yellowK.png new file mode 100644 index 00000000..34348f2a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowK.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowL.png b/assets/MapIcons/colorNumbers/marker_yellowL.png new file mode 100644 index 00000000..e6298c39 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowL.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowM.png b/assets/MapIcons/colorNumbers/marker_yellowM.png new file mode 100644 index 00000000..d7d4a8cd Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowM.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowN.png b/assets/MapIcons/colorNumbers/marker_yellowN.png new file mode 100644 index 00000000..6daef268 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowN.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowO.png b/assets/MapIcons/colorNumbers/marker_yellowO.png new file mode 100644 index 00000000..ffa63d31 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowO.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowP.png b/assets/MapIcons/colorNumbers/marker_yellowP.png new file mode 100644 index 00000000..856f9771 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowP.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowQ.png b/assets/MapIcons/colorNumbers/marker_yellowQ.png new file mode 100644 index 00000000..2d19e2c4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowQ.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowR.png b/assets/MapIcons/colorNumbers/marker_yellowR.png new file mode 100644 index 00000000..565aff5a Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowR.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowS.png b/assets/MapIcons/colorNumbers/marker_yellowS.png new file mode 100644 index 00000000..455fb626 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowS.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowT.png b/assets/MapIcons/colorNumbers/marker_yellowT.png new file mode 100644 index 00000000..c8da96c4 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowT.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowU.png b/assets/MapIcons/colorNumbers/marker_yellowU.png new file mode 100644 index 00000000..e6a63f34 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowU.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowV.png b/assets/MapIcons/colorNumbers/marker_yellowV.png new file mode 100644 index 00000000..a4995cd2 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowV.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowW.png b/assets/MapIcons/colorNumbers/marker_yellowW.png new file mode 100644 index 00000000..01fb4bc7 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowW.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowX.png b/assets/MapIcons/colorNumbers/marker_yellowX.png new file mode 100644 index 00000000..c8825254 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowX.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowY.png b/assets/MapIcons/colorNumbers/marker_yellowY.png new file mode 100644 index 00000000..67da2034 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowY.png differ diff --git a/assets/MapIcons/colorNumbers/marker_yellowZ.png b/assets/MapIcons/colorNumbers/marker_yellowZ.png new file mode 100644 index 00000000..8f090e68 Binary files /dev/null and b/assets/MapIcons/colorNumbers/marker_yellowZ.png differ diff --git a/assets/MapIcons/index.html b/assets/MapIcons/index.html new file mode 100644 index 00000000..b0dc99df --- /dev/null +++ b/assets/MapIcons/index.html @@ -0,0 +1,3 @@ +Black Icons
+Colored and Numbered Pushpins
+Standard Icons
\ No newline at end of file diff --git a/assets/MapIcons/standard/00_reference.html b/assets/MapIcons/standard/00_reference.html new file mode 100644 index 00000000..7841b6ef --- /dev/null +++ b/assets/MapIcons/standard/00_reference.html @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arts.png
arts.shadow.png
bar.png
bar.shadow.png
blue-dot.png
blue.png
blue-pushpin.png
bus.png
bus.shadow.png
cabs.png
cabs.shadow.png
camera.png
camera.shadow.png
campfire.png
campfire.shadow.png
campground.png
campground.shadow.png
caution.png
caution.shadow.png
coffeehouse.png
coffeehouse.shadow.png
convienancestore.png
convienancestore.shadow.png
cycling.png
cycling.shadow.png
dollar.png
dollar.shadow.png
drinking_water.png
drinking_water.shadow.png
earthquake.png
earthquake.shadow.png
electronics.png
electronics.shadow.png
euro.png
euro.shadow.png
fallingrocks.png
fallingrocks.shadow.png
ferry.png
ferry.shadow.png
firedept.png
firedept.shadow.png
fishing.png
fishing.shadow.png
flag.png
flag.shadow.png
gas.png
gas.shadow.png
golfer.png
golfer.shadow.png
green-dot.png
green.png
grn-pushpin.png
grocerystore.png
grocerystore.shadow.png
groecerystore.png
groecerystore.shadow.png
helicopter.png
helicopter.shadow.png
hiker.png
hiker.shadow.png
homegardenbusiness.png
homegardenbusiness.shadow.png
horsebackriding.png
horsebackriding.shadow.png
hospitals.png
hospitals.shadow.png
hotsprings.png
hotsprings.shadow.png
images.html
info_circle.png
info_circle.shadow.png
info.png
info.shadow.png
landmarks-jp.png
landmarks-jp.shadow.png
lightblue.png
lodging.png
lodging.shadow.png
ltblue-dot.png
ltblu-pushpin.png
man.png
man.shadow.png
marina.png
marina.shadow.png
mechanic.png
mechanic.shadow.png
motorcycling.png
motorcycling.shadow.png
movies.png
movies.shadow.png
msmarker.shadow.png
orange-dot.png
orange.png
parkinglot.png
parkinglot.shadow.png
partly_cloudy.png
partly_cloudy.shadow.png
pharmacy-us.png
pharmacy-us.shadow.png
phone.png
phone.shadow.png
picnic.png
picnic.shadow.png
pink-dot.png
pink.png
pink-pushpin.png
plane.png
plane.shadow.png
POI.png
POI.shadow.png
police.png
police.shadow.png
postoffice-jp.png
postoffice-jp.shadow.png
postoffice-us.png
postoffice-us.shadow.png
purple-dot.png
purple.png
purple-pushpin.png
pushpin_shadow.png
question.png
question.shadow.png
rail.png
rail.shadow.png
rainy.png
rainy.shadow.png
rangerstation.png
rangerstation.shadow.png
realestate.png
realestate.shadow.png
recycle.png
recycle.shadow.png
red-dot.png
red.png
red-pushpin.png
restaurant.png
restaurant.shadow.png
sailing.png
sailing.shadow.png
salon.png
salon.shadow.png
shopping.png
shopping.shadow.png
ski.png
ski.shadow.png
snack_bar.png
snack_bar.shadow.png
snowflake_simple.png
snowflake_simple.shadow.png
sportvenue.png
sportvenue.shadow.png
subway.png
subway.shadow.png
sunny.png
sunny.shadow.png
swimming.png
swimming.shadow.png
toilets.png
toilets.shadow.png
trail.png
trail.shadow.png
tram.png
tram.shadow.png
tree.png
tree.shadow.png
truck.png
truck.shadow.png
volcano.png
volcano.shadow.png
waterfalls.png
waterfalls.shadow.png
water.png
water.shadow.png
webcam.png
webcam.shadow.png
wheel_chair_accessible.png
wheel_chair_accessible.shadow.png
woman.png
woman.shadow.png
yellow-dot.png
yellow.png
yen.png
yen.shadow.png
ylw-pushpin.png
\ No newline at end of file diff --git a/assets/MapIcons/standard/POI.png b/assets/MapIcons/standard/POI.png new file mode 100644 index 00000000..6256627b Binary files /dev/null and b/assets/MapIcons/standard/POI.png differ diff --git a/assets/MapIcons/standard/POI.shadow.png b/assets/MapIcons/standard/POI.shadow.png new file mode 100644 index 00000000..0125f3d4 Binary files /dev/null and b/assets/MapIcons/standard/POI.shadow.png differ diff --git a/assets/MapIcons/standard/arts.png b/assets/MapIcons/standard/arts.png new file mode 100644 index 00000000..950b6792 Binary files /dev/null and b/assets/MapIcons/standard/arts.png differ diff --git a/assets/MapIcons/standard/arts.shadow.png b/assets/MapIcons/standard/arts.shadow.png new file mode 100644 index 00000000..43742bd3 Binary files /dev/null and b/assets/MapIcons/standard/arts.shadow.png differ diff --git a/assets/MapIcons/standard/bar.png b/assets/MapIcons/standard/bar.png new file mode 100644 index 00000000..718408dc Binary files /dev/null and b/assets/MapIcons/standard/bar.png differ diff --git a/assets/MapIcons/standard/bar.shadow.png b/assets/MapIcons/standard/bar.shadow.png new file mode 100644 index 00000000..c443dcbb Binary files /dev/null and b/assets/MapIcons/standard/bar.shadow.png differ diff --git a/assets/MapIcons/standard/blue-dot.png b/assets/MapIcons/standard/blue-dot.png new file mode 100644 index 00000000..98b280d3 Binary files /dev/null and b/assets/MapIcons/standard/blue-dot.png differ diff --git a/assets/MapIcons/standard/blue-pushpin.png b/assets/MapIcons/standard/blue-pushpin.png new file mode 100644 index 00000000..6e010b03 Binary files /dev/null and b/assets/MapIcons/standard/blue-pushpin.png differ diff --git a/assets/MapIcons/standard/blue.png b/assets/MapIcons/standard/blue.png new file mode 100644 index 00000000..69590b92 Binary files /dev/null and b/assets/MapIcons/standard/blue.png differ diff --git a/assets/MapIcons/standard/bus.png b/assets/MapIcons/standard/bus.png new file mode 100644 index 00000000..1763461d Binary files /dev/null and b/assets/MapIcons/standard/bus.png differ diff --git a/assets/MapIcons/standard/bus.shadow.png b/assets/MapIcons/standard/bus.shadow.png new file mode 100644 index 00000000..355043bf Binary files /dev/null and b/assets/MapIcons/standard/bus.shadow.png differ diff --git a/assets/MapIcons/standard/cabs.png b/assets/MapIcons/standard/cabs.png new file mode 100644 index 00000000..af810d8b Binary files /dev/null and b/assets/MapIcons/standard/cabs.png differ diff --git a/assets/MapIcons/standard/cabs.shadow.png b/assets/MapIcons/standard/cabs.shadow.png new file mode 100644 index 00000000..8231f11d Binary files /dev/null and b/assets/MapIcons/standard/cabs.shadow.png differ diff --git a/assets/MapIcons/standard/camera.png b/assets/MapIcons/standard/camera.png new file mode 100644 index 00000000..fed4a918 Binary files /dev/null and b/assets/MapIcons/standard/camera.png differ diff --git a/assets/MapIcons/standard/camera.shadow.png b/assets/MapIcons/standard/camera.shadow.png new file mode 100644 index 00000000..608216b2 Binary files /dev/null and b/assets/MapIcons/standard/camera.shadow.png differ diff --git a/assets/MapIcons/standard/campfire.png b/assets/MapIcons/standard/campfire.png new file mode 100644 index 00000000..d532ffd9 Binary files /dev/null and b/assets/MapIcons/standard/campfire.png differ diff --git a/assets/MapIcons/standard/campfire.shadow.png b/assets/MapIcons/standard/campfire.shadow.png new file mode 100644 index 00000000..4d913317 Binary files /dev/null and b/assets/MapIcons/standard/campfire.shadow.png differ diff --git a/assets/MapIcons/standard/campground.png b/assets/MapIcons/standard/campground.png new file mode 100644 index 00000000..917c9572 Binary files /dev/null and b/assets/MapIcons/standard/campground.png differ diff --git a/assets/MapIcons/standard/campground.shadow.png b/assets/MapIcons/standard/campground.shadow.png new file mode 100644 index 00000000..5286bfb6 Binary files /dev/null and b/assets/MapIcons/standard/campground.shadow.png differ diff --git a/assets/MapIcons/standard/caution.png b/assets/MapIcons/standard/caution.png new file mode 100644 index 00000000..7118e0ab Binary files /dev/null and b/assets/MapIcons/standard/caution.png differ diff --git a/assets/MapIcons/standard/caution.shadow.png b/assets/MapIcons/standard/caution.shadow.png new file mode 100644 index 00000000..7c1abdde Binary files /dev/null and b/assets/MapIcons/standard/caution.shadow.png differ diff --git a/assets/MapIcons/standard/coffeehouse.png b/assets/MapIcons/standard/coffeehouse.png new file mode 100644 index 00000000..d6b4068b Binary files /dev/null and b/assets/MapIcons/standard/coffeehouse.png differ diff --git a/assets/MapIcons/standard/coffeehouse.shadow.png b/assets/MapIcons/standard/coffeehouse.shadow.png new file mode 100644 index 00000000..3089e3b6 Binary files /dev/null and b/assets/MapIcons/standard/coffeehouse.shadow.png differ diff --git a/assets/MapIcons/standard/convienancestore.png b/assets/MapIcons/standard/convienancestore.png new file mode 100644 index 00000000..bbd7e6d1 Binary files /dev/null and b/assets/MapIcons/standard/convienancestore.png differ diff --git a/assets/MapIcons/standard/convienancestore.shadow.png b/assets/MapIcons/standard/convienancestore.shadow.png new file mode 100644 index 00000000..6e9b77a6 Binary files /dev/null and b/assets/MapIcons/standard/convienancestore.shadow.png differ diff --git a/assets/MapIcons/standard/cycling.png b/assets/MapIcons/standard/cycling.png new file mode 100644 index 00000000..678d3bef Binary files /dev/null and b/assets/MapIcons/standard/cycling.png differ diff --git a/assets/MapIcons/standard/cycling.shadow.png b/assets/MapIcons/standard/cycling.shadow.png new file mode 100644 index 00000000..9eb3efec Binary files /dev/null and b/assets/MapIcons/standard/cycling.shadow.png differ diff --git a/assets/MapIcons/standard/dollar.png b/assets/MapIcons/standard/dollar.png new file mode 100644 index 00000000..f30fb89f Binary files /dev/null and b/assets/MapIcons/standard/dollar.png differ diff --git a/assets/MapIcons/standard/dollar.shadow.png b/assets/MapIcons/standard/dollar.shadow.png new file mode 100644 index 00000000..b175867b Binary files /dev/null and b/assets/MapIcons/standard/dollar.shadow.png differ diff --git a/assets/MapIcons/standard/drinking_water.png b/assets/MapIcons/standard/drinking_water.png new file mode 100644 index 00000000..3c7cfa2a Binary files /dev/null and b/assets/MapIcons/standard/drinking_water.png differ diff --git a/assets/MapIcons/standard/drinking_water.shadow.png b/assets/MapIcons/standard/drinking_water.shadow.png new file mode 100644 index 00000000..bce5d438 Binary files /dev/null and b/assets/MapIcons/standard/drinking_water.shadow.png differ diff --git a/assets/MapIcons/standard/earthquake.png b/assets/MapIcons/standard/earthquake.png new file mode 100644 index 00000000..3e26a03d Binary files /dev/null and b/assets/MapIcons/standard/earthquake.png differ diff --git a/assets/MapIcons/standard/earthquake.shadow.png b/assets/MapIcons/standard/earthquake.shadow.png new file mode 100644 index 00000000..119fd243 Binary files /dev/null and b/assets/MapIcons/standard/earthquake.shadow.png differ diff --git a/assets/MapIcons/standard/electronics.png b/assets/MapIcons/standard/electronics.png new file mode 100644 index 00000000..c7b29502 Binary files /dev/null and b/assets/MapIcons/standard/electronics.png differ diff --git a/assets/MapIcons/standard/electronics.shadow.png b/assets/MapIcons/standard/electronics.shadow.png new file mode 100644 index 00000000..6ffae58e Binary files /dev/null and b/assets/MapIcons/standard/electronics.shadow.png differ diff --git a/assets/MapIcons/standard/euro.png b/assets/MapIcons/standard/euro.png new file mode 100644 index 00000000..3c3a2d4a Binary files /dev/null and b/assets/MapIcons/standard/euro.png differ diff --git a/assets/MapIcons/standard/euro.shadow.png b/assets/MapIcons/standard/euro.shadow.png new file mode 100644 index 00000000..dbc185d8 Binary files /dev/null and b/assets/MapIcons/standard/euro.shadow.png differ diff --git a/assets/MapIcons/standard/fallingrocks.png b/assets/MapIcons/standard/fallingrocks.png new file mode 100644 index 00000000..2770cba6 Binary files /dev/null and b/assets/MapIcons/standard/fallingrocks.png differ diff --git a/assets/MapIcons/standard/fallingrocks.shadow.png b/assets/MapIcons/standard/fallingrocks.shadow.png new file mode 100644 index 00000000..aad18a24 Binary files /dev/null and b/assets/MapIcons/standard/fallingrocks.shadow.png differ diff --git a/assets/MapIcons/standard/ferry.png b/assets/MapIcons/standard/ferry.png new file mode 100644 index 00000000..87120263 Binary files /dev/null and b/assets/MapIcons/standard/ferry.png differ diff --git a/assets/MapIcons/standard/ferry.shadow.png b/assets/MapIcons/standard/ferry.shadow.png new file mode 100644 index 00000000..67283423 Binary files /dev/null and b/assets/MapIcons/standard/ferry.shadow.png differ diff --git a/assets/MapIcons/standard/firedept.png b/assets/MapIcons/standard/firedept.png new file mode 100644 index 00000000..4a9aceda Binary files /dev/null and b/assets/MapIcons/standard/firedept.png differ diff --git a/assets/MapIcons/standard/firedept.shadow.png b/assets/MapIcons/standard/firedept.shadow.png new file mode 100644 index 00000000..2b665f14 Binary files /dev/null and b/assets/MapIcons/standard/firedept.shadow.png differ diff --git a/assets/MapIcons/standard/fishing.png b/assets/MapIcons/standard/fishing.png new file mode 100644 index 00000000..8b9980d0 Binary files /dev/null and b/assets/MapIcons/standard/fishing.png differ diff --git a/assets/MapIcons/standard/fishing.shadow.png b/assets/MapIcons/standard/fishing.shadow.png new file mode 100644 index 00000000..cc808789 Binary files /dev/null and b/assets/MapIcons/standard/fishing.shadow.png differ diff --git a/assets/MapIcons/standard/flag.png b/assets/MapIcons/standard/flag.png new file mode 100644 index 00000000..6e5c8ac3 Binary files /dev/null and b/assets/MapIcons/standard/flag.png differ diff --git a/assets/MapIcons/standard/flag.shadow.png b/assets/MapIcons/standard/flag.shadow.png new file mode 100644 index 00000000..e6ac9d35 Binary files /dev/null and b/assets/MapIcons/standard/flag.shadow.png differ diff --git a/assets/MapIcons/standard/gas.png b/assets/MapIcons/standard/gas.png new file mode 100644 index 00000000..52107b7a Binary files /dev/null and b/assets/MapIcons/standard/gas.png differ diff --git a/assets/MapIcons/standard/gas.shadow.png b/assets/MapIcons/standard/gas.shadow.png new file mode 100644 index 00000000..99d8abed Binary files /dev/null and b/assets/MapIcons/standard/gas.shadow.png differ diff --git a/assets/MapIcons/standard/golfer.png b/assets/MapIcons/standard/golfer.png new file mode 100644 index 00000000..e1d1a8b1 Binary files /dev/null and b/assets/MapIcons/standard/golfer.png differ diff --git a/assets/MapIcons/standard/golfer.shadow.png b/assets/MapIcons/standard/golfer.shadow.png new file mode 100644 index 00000000..b8124fbf Binary files /dev/null and b/assets/MapIcons/standard/golfer.shadow.png differ diff --git a/assets/MapIcons/standard/green-dot.png b/assets/MapIcons/standard/green-dot.png new file mode 100644 index 00000000..c6e68366 Binary files /dev/null and b/assets/MapIcons/standard/green-dot.png differ diff --git a/assets/MapIcons/standard/green.png b/assets/MapIcons/standard/green.png new file mode 100644 index 00000000..0f79315e Binary files /dev/null and b/assets/MapIcons/standard/green.png differ diff --git a/assets/MapIcons/standard/grn-pushpin.png b/assets/MapIcons/standard/grn-pushpin.png new file mode 100644 index 00000000..61d29725 Binary files /dev/null and b/assets/MapIcons/standard/grn-pushpin.png differ diff --git a/assets/MapIcons/standard/grocerystore.png b/assets/MapIcons/standard/grocerystore.png new file mode 100644 index 00000000..0543d7d9 Binary files /dev/null and b/assets/MapIcons/standard/grocerystore.png differ diff --git a/assets/MapIcons/standard/grocerystore.shadow.png b/assets/MapIcons/standard/grocerystore.shadow.png new file mode 100644 index 00000000..e85b5d87 Binary files /dev/null and b/assets/MapIcons/standard/grocerystore.shadow.png differ diff --git a/assets/MapIcons/standard/groecerystore.png b/assets/MapIcons/standard/groecerystore.png new file mode 100644 index 00000000..0543d7d9 Binary files /dev/null and b/assets/MapIcons/standard/groecerystore.png differ diff --git a/assets/MapIcons/standard/groecerystore.shadow.png b/assets/MapIcons/standard/groecerystore.shadow.png new file mode 100644 index 00000000..e85b5d87 Binary files /dev/null and b/assets/MapIcons/standard/groecerystore.shadow.png differ diff --git a/assets/MapIcons/standard/helicopter.png b/assets/MapIcons/standard/helicopter.png new file mode 100644 index 00000000..52e586a4 Binary files /dev/null and b/assets/MapIcons/standard/helicopter.png differ diff --git a/assets/MapIcons/standard/helicopter.shadow.png b/assets/MapIcons/standard/helicopter.shadow.png new file mode 100644 index 00000000..3339d3ac Binary files /dev/null and b/assets/MapIcons/standard/helicopter.shadow.png differ diff --git a/assets/MapIcons/standard/hiker.png b/assets/MapIcons/standard/hiker.png new file mode 100644 index 00000000..e59052c6 Binary files /dev/null and b/assets/MapIcons/standard/hiker.png differ diff --git a/assets/MapIcons/standard/hiker.shadow.png b/assets/MapIcons/standard/hiker.shadow.png new file mode 100644 index 00000000..a67cfe10 Binary files /dev/null and b/assets/MapIcons/standard/hiker.shadow.png differ diff --git a/assets/MapIcons/standard/homegardenbusiness.png b/assets/MapIcons/standard/homegardenbusiness.png new file mode 100644 index 00000000..3c91d092 Binary files /dev/null and b/assets/MapIcons/standard/homegardenbusiness.png differ diff --git a/assets/MapIcons/standard/homegardenbusiness.shadow.png b/assets/MapIcons/standard/homegardenbusiness.shadow.png new file mode 100644 index 00000000..5735f94b Binary files /dev/null and b/assets/MapIcons/standard/homegardenbusiness.shadow.png differ diff --git a/assets/MapIcons/standard/horsebackriding.png b/assets/MapIcons/standard/horsebackriding.png new file mode 100644 index 00000000..de690e91 Binary files /dev/null and b/assets/MapIcons/standard/horsebackriding.png differ diff --git a/assets/MapIcons/standard/horsebackriding.shadow.png b/assets/MapIcons/standard/horsebackriding.shadow.png new file mode 100644 index 00000000..388285b6 Binary files /dev/null and b/assets/MapIcons/standard/horsebackriding.shadow.png differ diff --git a/assets/MapIcons/standard/hospitals.png b/assets/MapIcons/standard/hospitals.png new file mode 100644 index 00000000..38dace0a Binary files /dev/null and b/assets/MapIcons/standard/hospitals.png differ diff --git a/assets/MapIcons/standard/hospitals.shadow.png b/assets/MapIcons/standard/hospitals.shadow.png new file mode 100644 index 00000000..ed0f5beb Binary files /dev/null and b/assets/MapIcons/standard/hospitals.shadow.png differ diff --git a/assets/MapIcons/standard/hotsprings.png b/assets/MapIcons/standard/hotsprings.png new file mode 100644 index 00000000..c93cc3c7 Binary files /dev/null and b/assets/MapIcons/standard/hotsprings.png differ diff --git a/assets/MapIcons/standard/hotsprings.shadow.png b/assets/MapIcons/standard/hotsprings.shadow.png new file mode 100644 index 00000000..a47701c4 Binary files /dev/null and b/assets/MapIcons/standard/hotsprings.shadow.png differ diff --git a/assets/MapIcons/standard/info.png b/assets/MapIcons/standard/info.png new file mode 100644 index 00000000..ed9daafe Binary files /dev/null and b/assets/MapIcons/standard/info.png differ diff --git a/assets/MapIcons/standard/info.shadow.png b/assets/MapIcons/standard/info.shadow.png new file mode 100644 index 00000000..b6bb912a Binary files /dev/null and b/assets/MapIcons/standard/info.shadow.png differ diff --git a/assets/MapIcons/standard/info_circle.png b/assets/MapIcons/standard/info_circle.png new file mode 100644 index 00000000..921c2cfb Binary files /dev/null and b/assets/MapIcons/standard/info_circle.png differ diff --git a/assets/MapIcons/standard/info_circle.shadow.png b/assets/MapIcons/standard/info_circle.shadow.png new file mode 100644 index 00000000..0018bc0a Binary files /dev/null and b/assets/MapIcons/standard/info_circle.shadow.png differ diff --git a/assets/MapIcons/standard/landmarks-jp.png b/assets/MapIcons/standard/landmarks-jp.png new file mode 100644 index 00000000..e18c0338 Binary files /dev/null and b/assets/MapIcons/standard/landmarks-jp.png differ diff --git a/assets/MapIcons/standard/landmarks-jp.shadow.png b/assets/MapIcons/standard/landmarks-jp.shadow.png new file mode 100644 index 00000000..e3f4ce58 Binary files /dev/null and b/assets/MapIcons/standard/landmarks-jp.shadow.png differ diff --git a/assets/MapIcons/standard/lightblue.png b/assets/MapIcons/standard/lightblue.png new file mode 100644 index 00000000..03586d7d Binary files /dev/null and b/assets/MapIcons/standard/lightblue.png differ diff --git a/assets/MapIcons/standard/lodging.png b/assets/MapIcons/standard/lodging.png new file mode 100644 index 00000000..a0f43edf Binary files /dev/null and b/assets/MapIcons/standard/lodging.png differ diff --git a/assets/MapIcons/standard/lodging.shadow.png b/assets/MapIcons/standard/lodging.shadow.png new file mode 100644 index 00000000..6c947e91 Binary files /dev/null and b/assets/MapIcons/standard/lodging.shadow.png differ diff --git a/assets/MapIcons/standard/ltblu-pushpin.png b/assets/MapIcons/standard/ltblu-pushpin.png new file mode 100644 index 00000000..64fb9730 Binary files /dev/null and b/assets/MapIcons/standard/ltblu-pushpin.png differ diff --git a/assets/MapIcons/standard/ltblue-dot.png b/assets/MapIcons/standard/ltblue-dot.png new file mode 100644 index 00000000..d21f0c58 Binary files /dev/null and b/assets/MapIcons/standard/ltblue-dot.png differ diff --git a/assets/MapIcons/standard/man.png b/assets/MapIcons/standard/man.png new file mode 100644 index 00000000..a095deb8 Binary files /dev/null and b/assets/MapIcons/standard/man.png differ diff --git a/assets/MapIcons/standard/man.shadow.png b/assets/MapIcons/standard/man.shadow.png new file mode 100644 index 00000000..eef72a7f Binary files /dev/null and b/assets/MapIcons/standard/man.shadow.png differ diff --git a/assets/MapIcons/standard/marina.png b/assets/MapIcons/standard/marina.png new file mode 100644 index 00000000..dc6a7756 Binary files /dev/null and b/assets/MapIcons/standard/marina.png differ diff --git a/assets/MapIcons/standard/marina.shadow.png b/assets/MapIcons/standard/marina.shadow.png new file mode 100644 index 00000000..659f9a71 Binary files /dev/null and b/assets/MapIcons/standard/marina.shadow.png differ diff --git a/assets/MapIcons/standard/mechanic.png b/assets/MapIcons/standard/mechanic.png new file mode 100644 index 00000000..566764a7 Binary files /dev/null and b/assets/MapIcons/standard/mechanic.png differ diff --git a/assets/MapIcons/standard/mechanic.shadow.png b/assets/MapIcons/standard/mechanic.shadow.png new file mode 100644 index 00000000..66e71aae Binary files /dev/null and b/assets/MapIcons/standard/mechanic.shadow.png differ diff --git a/assets/MapIcons/standard/motorcycling.png b/assets/MapIcons/standard/motorcycling.png new file mode 100644 index 00000000..94fc943d Binary files /dev/null and b/assets/MapIcons/standard/motorcycling.png differ diff --git a/assets/MapIcons/standard/motorcycling.shadow.png b/assets/MapIcons/standard/motorcycling.shadow.png new file mode 100644 index 00000000..66a63fd8 Binary files /dev/null and b/assets/MapIcons/standard/motorcycling.shadow.png differ diff --git a/assets/MapIcons/standard/movies.png b/assets/MapIcons/standard/movies.png new file mode 100644 index 00000000..920d721c Binary files /dev/null and b/assets/MapIcons/standard/movies.png differ diff --git a/assets/MapIcons/standard/movies.shadow.png b/assets/MapIcons/standard/movies.shadow.png new file mode 100644 index 00000000..3769af6e Binary files /dev/null and b/assets/MapIcons/standard/movies.shadow.png differ diff --git a/assets/MapIcons/standard/msmarker.shadow.png b/assets/MapIcons/standard/msmarker.shadow.png new file mode 100644 index 00000000..f460f3fd Binary files /dev/null and b/assets/MapIcons/standard/msmarker.shadow.png differ diff --git a/assets/MapIcons/standard/orange-dot.png b/assets/MapIcons/standard/orange-dot.png new file mode 100644 index 00000000..96bcaf37 Binary files /dev/null and b/assets/MapIcons/standard/orange-dot.png differ diff --git a/assets/MapIcons/standard/orange.png b/assets/MapIcons/standard/orange.png new file mode 100644 index 00000000..8bee9da3 Binary files /dev/null and b/assets/MapIcons/standard/orange.png differ diff --git a/assets/MapIcons/standard/parkinglot.png b/assets/MapIcons/standard/parkinglot.png new file mode 100644 index 00000000..b1384358 Binary files /dev/null and b/assets/MapIcons/standard/parkinglot.png differ diff --git a/assets/MapIcons/standard/parkinglot.shadow.png b/assets/MapIcons/standard/parkinglot.shadow.png new file mode 100644 index 00000000..d117b7bb Binary files /dev/null and b/assets/MapIcons/standard/parkinglot.shadow.png differ diff --git a/assets/MapIcons/standard/partly_cloudy.png b/assets/MapIcons/standard/partly_cloudy.png new file mode 100644 index 00000000..74184a5e Binary files /dev/null and b/assets/MapIcons/standard/partly_cloudy.png differ diff --git a/assets/MapIcons/standard/partly_cloudy.shadow.png b/assets/MapIcons/standard/partly_cloudy.shadow.png new file mode 100644 index 00000000..c5f779b6 Binary files /dev/null and b/assets/MapIcons/standard/partly_cloudy.shadow.png differ diff --git a/assets/MapIcons/standard/pharmacy-us.png b/assets/MapIcons/standard/pharmacy-us.png new file mode 100644 index 00000000..891c1590 Binary files /dev/null and b/assets/MapIcons/standard/pharmacy-us.png differ diff --git a/assets/MapIcons/standard/pharmacy-us.shadow.png b/assets/MapIcons/standard/pharmacy-us.shadow.png new file mode 100644 index 00000000..a4a93270 Binary files /dev/null and b/assets/MapIcons/standard/pharmacy-us.shadow.png differ diff --git a/assets/MapIcons/standard/phone.png b/assets/MapIcons/standard/phone.png new file mode 100644 index 00000000..116063aa Binary files /dev/null and b/assets/MapIcons/standard/phone.png differ diff --git a/assets/MapIcons/standard/phone.shadow.png b/assets/MapIcons/standard/phone.shadow.png new file mode 100644 index 00000000..8450886e Binary files /dev/null and b/assets/MapIcons/standard/phone.shadow.png differ diff --git a/assets/MapIcons/standard/picnic.png b/assets/MapIcons/standard/picnic.png new file mode 100644 index 00000000..4344c597 Binary files /dev/null and b/assets/MapIcons/standard/picnic.png differ diff --git a/assets/MapIcons/standard/picnic.shadow.png b/assets/MapIcons/standard/picnic.shadow.png new file mode 100644 index 00000000..2f8a5e59 Binary files /dev/null and b/assets/MapIcons/standard/picnic.shadow.png differ diff --git a/assets/MapIcons/standard/pink-dot.png b/assets/MapIcons/standard/pink-dot.png new file mode 100644 index 00000000..e946fe60 Binary files /dev/null and b/assets/MapIcons/standard/pink-dot.png differ diff --git a/assets/MapIcons/standard/pink-pushpin.png b/assets/MapIcons/standard/pink-pushpin.png new file mode 100644 index 00000000..30649980 Binary files /dev/null and b/assets/MapIcons/standard/pink-pushpin.png differ diff --git a/assets/MapIcons/standard/pink.png b/assets/MapIcons/standard/pink.png new file mode 100644 index 00000000..71a7cd65 Binary files /dev/null and b/assets/MapIcons/standard/pink.png differ diff --git a/assets/MapIcons/standard/plane.png b/assets/MapIcons/standard/plane.png new file mode 100644 index 00000000..0a647d78 Binary files /dev/null and b/assets/MapIcons/standard/plane.png differ diff --git a/assets/MapIcons/standard/plane.shadow.png b/assets/MapIcons/standard/plane.shadow.png new file mode 100644 index 00000000..e2699c68 Binary files /dev/null and b/assets/MapIcons/standard/plane.shadow.png differ diff --git a/assets/MapIcons/standard/police.png b/assets/MapIcons/standard/police.png new file mode 100644 index 00000000..5bd6348b Binary files /dev/null and b/assets/MapIcons/standard/police.png differ diff --git a/assets/MapIcons/standard/police.shadow.png b/assets/MapIcons/standard/police.shadow.png new file mode 100644 index 00000000..9c9088e7 Binary files /dev/null and b/assets/MapIcons/standard/police.shadow.png differ diff --git a/assets/MapIcons/standard/postoffice-jp.png b/assets/MapIcons/standard/postoffice-jp.png new file mode 100644 index 00000000..e8b97594 Binary files /dev/null and b/assets/MapIcons/standard/postoffice-jp.png differ diff --git a/assets/MapIcons/standard/postoffice-jp.shadow.png b/assets/MapIcons/standard/postoffice-jp.shadow.png new file mode 100644 index 00000000..f6ab3419 Binary files /dev/null and b/assets/MapIcons/standard/postoffice-jp.shadow.png differ diff --git a/assets/MapIcons/standard/postoffice-us.png b/assets/MapIcons/standard/postoffice-us.png new file mode 100644 index 00000000..eaeb9a16 Binary files /dev/null and b/assets/MapIcons/standard/postoffice-us.png differ diff --git a/assets/MapIcons/standard/postoffice-us.shadow.png b/assets/MapIcons/standard/postoffice-us.shadow.png new file mode 100644 index 00000000..b315b2d1 Binary files /dev/null and b/assets/MapIcons/standard/postoffice-us.shadow.png differ diff --git a/assets/MapIcons/standard/purple-dot.png b/assets/MapIcons/standard/purple-dot.png new file mode 100644 index 00000000..c0d40cb7 Binary files /dev/null and b/assets/MapIcons/standard/purple-dot.png differ diff --git a/assets/MapIcons/standard/purple-pushpin.png b/assets/MapIcons/standard/purple-pushpin.png new file mode 100644 index 00000000..9fc54ac9 Binary files /dev/null and b/assets/MapIcons/standard/purple-pushpin.png differ diff --git a/assets/MapIcons/standard/purple.png b/assets/MapIcons/standard/purple.png new file mode 100644 index 00000000..b5787389 Binary files /dev/null and b/assets/MapIcons/standard/purple.png differ diff --git a/assets/MapIcons/standard/pushpin_shadow.png b/assets/MapIcons/standard/pushpin_shadow.png new file mode 100644 index 00000000..162aa0fa Binary files /dev/null and b/assets/MapIcons/standard/pushpin_shadow.png differ diff --git a/assets/MapIcons/standard/question.png b/assets/MapIcons/standard/question.png new file mode 100644 index 00000000..2e8ffafc Binary files /dev/null and b/assets/MapIcons/standard/question.png differ diff --git a/assets/MapIcons/standard/question.shadow.png b/assets/MapIcons/standard/question.shadow.png new file mode 100644 index 00000000..3fd89756 Binary files /dev/null and b/assets/MapIcons/standard/question.shadow.png differ diff --git a/assets/MapIcons/standard/rail.png b/assets/MapIcons/standard/rail.png new file mode 100644 index 00000000..b51e6ac3 Binary files /dev/null and b/assets/MapIcons/standard/rail.png differ diff --git a/assets/MapIcons/standard/rail.shadow.png b/assets/MapIcons/standard/rail.shadow.png new file mode 100644 index 00000000..531faad7 Binary files /dev/null and b/assets/MapIcons/standard/rail.shadow.png differ diff --git a/assets/MapIcons/standard/rainy.png b/assets/MapIcons/standard/rainy.png new file mode 100644 index 00000000..161e8785 Binary files /dev/null and b/assets/MapIcons/standard/rainy.png differ diff --git a/assets/MapIcons/standard/rainy.shadow.png b/assets/MapIcons/standard/rainy.shadow.png new file mode 100644 index 00000000..f621c83a Binary files /dev/null and b/assets/MapIcons/standard/rainy.shadow.png differ diff --git a/assets/MapIcons/standard/rangerstation.png b/assets/MapIcons/standard/rangerstation.png new file mode 100644 index 00000000..154e3350 Binary files /dev/null and b/assets/MapIcons/standard/rangerstation.png differ diff --git a/assets/MapIcons/standard/rangerstation.shadow.png b/assets/MapIcons/standard/rangerstation.shadow.png new file mode 100644 index 00000000..d3f0aad9 Binary files /dev/null and b/assets/MapIcons/standard/rangerstation.shadow.png differ diff --git a/assets/MapIcons/standard/realestate.png b/assets/MapIcons/standard/realestate.png new file mode 100644 index 00000000..5fb9c47a Binary files /dev/null and b/assets/MapIcons/standard/realestate.png differ diff --git a/assets/MapIcons/standard/realestate.shadow.png b/assets/MapIcons/standard/realestate.shadow.png new file mode 100644 index 00000000..9a83b76c Binary files /dev/null and b/assets/MapIcons/standard/realestate.shadow.png differ diff --git a/assets/MapIcons/standard/recycle.png b/assets/MapIcons/standard/recycle.png new file mode 100644 index 00000000..787c8d46 Binary files /dev/null and b/assets/MapIcons/standard/recycle.png differ diff --git a/assets/MapIcons/standard/recycle.shadow.png b/assets/MapIcons/standard/recycle.shadow.png new file mode 100644 index 00000000..02658ce8 Binary files /dev/null and b/assets/MapIcons/standard/recycle.shadow.png differ diff --git a/assets/MapIcons/standard/red-dot.png b/assets/MapIcons/standard/red-dot.png new file mode 100644 index 00000000..b0f3f0e9 Binary files /dev/null and b/assets/MapIcons/standard/red-dot.png differ diff --git a/assets/MapIcons/standard/red-pushpin.png b/assets/MapIcons/standard/red-pushpin.png new file mode 100644 index 00000000..203512d5 Binary files /dev/null and b/assets/MapIcons/standard/red-pushpin.png differ diff --git a/assets/MapIcons/standard/red.png b/assets/MapIcons/standard/red.png new file mode 100644 index 00000000..e993751a Binary files /dev/null and b/assets/MapIcons/standard/red.png differ diff --git a/assets/MapIcons/standard/restaurant.png b/assets/MapIcons/standard/restaurant.png new file mode 100644 index 00000000..847056da Binary files /dev/null and b/assets/MapIcons/standard/restaurant.png differ diff --git a/assets/MapIcons/standard/restaurant.shadow.png b/assets/MapIcons/standard/restaurant.shadow.png new file mode 100644 index 00000000..f5defac5 Binary files /dev/null and b/assets/MapIcons/standard/restaurant.shadow.png differ diff --git a/assets/MapIcons/standard/sailing.png b/assets/MapIcons/standard/sailing.png new file mode 100644 index 00000000..d0c32354 Binary files /dev/null and b/assets/MapIcons/standard/sailing.png differ diff --git a/assets/MapIcons/standard/sailing.shadow.png b/assets/MapIcons/standard/sailing.shadow.png new file mode 100644 index 00000000..eaf52a83 Binary files /dev/null and b/assets/MapIcons/standard/sailing.shadow.png differ diff --git a/assets/MapIcons/standard/salon.png b/assets/MapIcons/standard/salon.png new file mode 100644 index 00000000..d8c9d8f4 Binary files /dev/null and b/assets/MapIcons/standard/salon.png differ diff --git a/assets/MapIcons/standard/salon.shadow.png b/assets/MapIcons/standard/salon.shadow.png new file mode 100644 index 00000000..11990937 Binary files /dev/null and b/assets/MapIcons/standard/salon.shadow.png differ diff --git a/assets/MapIcons/standard/shopping.png b/assets/MapIcons/standard/shopping.png new file mode 100644 index 00000000..eab3f935 Binary files /dev/null and b/assets/MapIcons/standard/shopping.png differ diff --git a/assets/MapIcons/standard/shopping.shadow.png b/assets/MapIcons/standard/shopping.shadow.png new file mode 100644 index 00000000..5434dff1 Binary files /dev/null and b/assets/MapIcons/standard/shopping.shadow.png differ diff --git a/assets/MapIcons/standard/ski.png b/assets/MapIcons/standard/ski.png new file mode 100644 index 00000000..691caf95 Binary files /dev/null and b/assets/MapIcons/standard/ski.png differ diff --git a/assets/MapIcons/standard/ski.shadow.png b/assets/MapIcons/standard/ski.shadow.png new file mode 100644 index 00000000..af7cffcf Binary files /dev/null and b/assets/MapIcons/standard/ski.shadow.png differ diff --git a/assets/MapIcons/standard/snack_bar.png b/assets/MapIcons/standard/snack_bar.png new file mode 100644 index 00000000..77c4e9ec Binary files /dev/null and b/assets/MapIcons/standard/snack_bar.png differ diff --git a/assets/MapIcons/standard/snack_bar.shadow.png b/assets/MapIcons/standard/snack_bar.shadow.png new file mode 100644 index 00000000..8fb26f05 Binary files /dev/null and b/assets/MapIcons/standard/snack_bar.shadow.png differ diff --git a/assets/MapIcons/standard/snowflake_simple.png b/assets/MapIcons/standard/snowflake_simple.png new file mode 100644 index 00000000..2615d219 Binary files /dev/null and b/assets/MapIcons/standard/snowflake_simple.png differ diff --git a/assets/MapIcons/standard/snowflake_simple.shadow.png b/assets/MapIcons/standard/snowflake_simple.shadow.png new file mode 100644 index 00000000..712c93fc Binary files /dev/null and b/assets/MapIcons/standard/snowflake_simple.shadow.png differ diff --git a/assets/MapIcons/standard/sportvenue.png b/assets/MapIcons/standard/sportvenue.png new file mode 100644 index 00000000..7025e9e6 Binary files /dev/null and b/assets/MapIcons/standard/sportvenue.png differ diff --git a/assets/MapIcons/standard/sportvenue.shadow.png b/assets/MapIcons/standard/sportvenue.shadow.png new file mode 100644 index 00000000..eb1f7f5a Binary files /dev/null and b/assets/MapIcons/standard/sportvenue.shadow.png differ diff --git a/assets/MapIcons/standard/subway.png b/assets/MapIcons/standard/subway.png new file mode 100644 index 00000000..3bdf7147 Binary files /dev/null and b/assets/MapIcons/standard/subway.png differ diff --git a/assets/MapIcons/standard/subway.shadow.png b/assets/MapIcons/standard/subway.shadow.png new file mode 100644 index 00000000..ccc60bb5 Binary files /dev/null and b/assets/MapIcons/standard/subway.shadow.png differ diff --git a/assets/MapIcons/standard/sunny.png b/assets/MapIcons/standard/sunny.png new file mode 100644 index 00000000..377afafa Binary files /dev/null and b/assets/MapIcons/standard/sunny.png differ diff --git a/assets/MapIcons/standard/sunny.shadow.png b/assets/MapIcons/standard/sunny.shadow.png new file mode 100644 index 00000000..9cda737e Binary files /dev/null and b/assets/MapIcons/standard/sunny.shadow.png differ diff --git a/assets/MapIcons/standard/swimming.png b/assets/MapIcons/standard/swimming.png new file mode 100644 index 00000000..8a2d1c7e Binary files /dev/null and b/assets/MapIcons/standard/swimming.png differ diff --git a/assets/MapIcons/standard/swimming.shadow.png b/assets/MapIcons/standard/swimming.shadow.png new file mode 100644 index 00000000..432f19c3 Binary files /dev/null and b/assets/MapIcons/standard/swimming.shadow.png differ diff --git a/assets/MapIcons/standard/toilets.png b/assets/MapIcons/standard/toilets.png new file mode 100644 index 00000000..06cf74e9 Binary files /dev/null and b/assets/MapIcons/standard/toilets.png differ diff --git a/assets/MapIcons/standard/toilets.shadow.png b/assets/MapIcons/standard/toilets.shadow.png new file mode 100644 index 00000000..0cdf6e34 Binary files /dev/null and b/assets/MapIcons/standard/toilets.shadow.png differ diff --git a/assets/MapIcons/standard/trail.png b/assets/MapIcons/standard/trail.png new file mode 100644 index 00000000..9ef85e8a Binary files /dev/null and b/assets/MapIcons/standard/trail.png differ diff --git a/assets/MapIcons/standard/trail.shadow.png b/assets/MapIcons/standard/trail.shadow.png new file mode 100644 index 00000000..6267a2a0 Binary files /dev/null and b/assets/MapIcons/standard/trail.shadow.png differ diff --git a/assets/MapIcons/standard/tram.png b/assets/MapIcons/standard/tram.png new file mode 100644 index 00000000..e2800e74 Binary files /dev/null and b/assets/MapIcons/standard/tram.png differ diff --git a/assets/MapIcons/standard/tram.shadow.png b/assets/MapIcons/standard/tram.shadow.png new file mode 100644 index 00000000..21139b47 Binary files /dev/null and b/assets/MapIcons/standard/tram.shadow.png differ diff --git a/assets/MapIcons/standard/tree.png b/assets/MapIcons/standard/tree.png new file mode 100644 index 00000000..47117e50 Binary files /dev/null and b/assets/MapIcons/standard/tree.png differ diff --git a/assets/MapIcons/standard/tree.shadow.png b/assets/MapIcons/standard/tree.shadow.png new file mode 100644 index 00000000..b8c45270 Binary files /dev/null and b/assets/MapIcons/standard/tree.shadow.png differ diff --git a/assets/MapIcons/standard/truck.png b/assets/MapIcons/standard/truck.png new file mode 100644 index 00000000..ac8872fd Binary files /dev/null and b/assets/MapIcons/standard/truck.png differ diff --git a/assets/MapIcons/standard/truck.shadow.png b/assets/MapIcons/standard/truck.shadow.png new file mode 100644 index 00000000..91e0da84 Binary files /dev/null and b/assets/MapIcons/standard/truck.shadow.png differ diff --git a/assets/MapIcons/standard/volcano.png b/assets/MapIcons/standard/volcano.png new file mode 100644 index 00000000..85b38c38 Binary files /dev/null and b/assets/MapIcons/standard/volcano.png differ diff --git a/assets/MapIcons/standard/volcano.shadow.png b/assets/MapIcons/standard/volcano.shadow.png new file mode 100644 index 00000000..6c4d7ceb Binary files /dev/null and b/assets/MapIcons/standard/volcano.shadow.png differ diff --git a/assets/MapIcons/standard/water.png b/assets/MapIcons/standard/water.png new file mode 100644 index 00000000..ed6a213a Binary files /dev/null and b/assets/MapIcons/standard/water.png differ diff --git a/assets/MapIcons/standard/water.shadow.png b/assets/MapIcons/standard/water.shadow.png new file mode 100644 index 00000000..f33315ea Binary files /dev/null and b/assets/MapIcons/standard/water.shadow.png differ diff --git a/assets/MapIcons/standard/waterfalls.png b/assets/MapIcons/standard/waterfalls.png new file mode 100644 index 00000000..60c8c1e4 Binary files /dev/null and b/assets/MapIcons/standard/waterfalls.png differ diff --git a/assets/MapIcons/standard/waterfalls.shadow.png b/assets/MapIcons/standard/waterfalls.shadow.png new file mode 100644 index 00000000..e9a78370 Binary files /dev/null and b/assets/MapIcons/standard/waterfalls.shadow.png differ diff --git a/assets/MapIcons/standard/webcam.png b/assets/MapIcons/standard/webcam.png new file mode 100644 index 00000000..6516594a Binary files /dev/null and b/assets/MapIcons/standard/webcam.png differ diff --git a/assets/MapIcons/standard/webcam.shadow.png b/assets/MapIcons/standard/webcam.shadow.png new file mode 100644 index 00000000..2d55eb7c Binary files /dev/null and b/assets/MapIcons/standard/webcam.shadow.png differ diff --git a/assets/MapIcons/standard/wheel_chair_accessible.png b/assets/MapIcons/standard/wheel_chair_accessible.png new file mode 100644 index 00000000..eb5b6c24 Binary files /dev/null and b/assets/MapIcons/standard/wheel_chair_accessible.png differ diff --git a/assets/MapIcons/standard/wheel_chair_accessible.shadow.png b/assets/MapIcons/standard/wheel_chair_accessible.shadow.png new file mode 100644 index 00000000..56ad1ac0 Binary files /dev/null and b/assets/MapIcons/standard/wheel_chair_accessible.shadow.png differ diff --git a/assets/MapIcons/standard/woman.png b/assets/MapIcons/standard/woman.png new file mode 100644 index 00000000..4b094392 Binary files /dev/null and b/assets/MapIcons/standard/woman.png differ diff --git a/assets/MapIcons/standard/woman.shadow.png b/assets/MapIcons/standard/woman.shadow.png new file mode 100644 index 00000000..2ec16200 Binary files /dev/null and b/assets/MapIcons/standard/woman.shadow.png differ diff --git a/assets/MapIcons/standard/yellow-dot.png b/assets/MapIcons/standard/yellow-dot.png new file mode 100644 index 00000000..79974d60 Binary files /dev/null and b/assets/MapIcons/standard/yellow-dot.png differ diff --git a/assets/MapIcons/standard/yellow.png b/assets/MapIcons/standard/yellow.png new file mode 100644 index 00000000..a9d65acc Binary files /dev/null and b/assets/MapIcons/standard/yellow.png differ diff --git a/assets/MapIcons/standard/yen.png b/assets/MapIcons/standard/yen.png new file mode 100644 index 00000000..9e7de687 Binary files /dev/null and b/assets/MapIcons/standard/yen.png differ diff --git a/assets/MapIcons/standard/yen.shadow.png b/assets/MapIcons/standard/yen.shadow.png new file mode 100644 index 00000000..b842710d Binary files /dev/null and b/assets/MapIcons/standard/yen.shadow.png differ diff --git a/assets/MapIcons/standard/ylw-pushpin.png b/assets/MapIcons/standard/ylw-pushpin.png new file mode 100644 index 00000000..c33c5203 Binary files /dev/null and b/assets/MapIcons/standard/ylw-pushpin.png differ diff --git a/classes/data/dataMemberInfo.php b/classes/data/dataMemberInfo.php index c596768c..eabfb30f 100644 --- a/classes/data/dataMemberInfo.php +++ b/classes/data/dataMemberInfo.php @@ -55,6 +55,18 @@ class GlmDataMemberInfo extends GlmDataAbstract * @access public */ public $doPostProcessing = true; + /** + * Individual post processing override + * Leave as false. Make true to force that specific + * post processing if $doPostProcessing is off. + * + * @var boolean + * @access public + */ + public $postProcessAmenity = false; + public $postProcessCategory = false; + public $postProcessShortDescr = false; + public $postProcessCamUrl = false; /** * Post Processing Primary Contact flag * @@ -382,28 +394,28 @@ class GlmDataMemberInfo extends GlmDataAbstract 'list' => $this->config['video_type'], 'use' => 'a' ), - + // Live Cam URL 'live_cam_url' => array ( 'field' => 'live_cam_url', 'type' => 'text', 'use' => 'a' ), - + // Live Cam Title 'live_cam_title' => array ( 'field' => 'live_cam_title', 'type' => 'text', 'use' => 'a' ), - + // Live Cam Description 'live_cam_descr' => array ( 'field' => 'live_cam_descr', 'type' => 'text', 'use' => 'a' ), - + // Live Cam Type 'live_cam_type' => array ( 'field' => 'live_cam_type', @@ -465,73 +477,84 @@ class GlmDataMemberInfo extends GlmDataAbstract } // Only run these tests for 'l' (getList), 'g' (getEntry), 'e' (editEntry), 'u' (updateEntry) - if (!$this->doPostProcessing || ($a != 'l' && $a != 'g' && $a != 'e' && $a != 'u')) { + if ($a != 'l' && $a != 'g' && $a != 'e' && $a != 'u') { return $r; } // Get Amenity Data for this entry - $sql = " - SELECT A.* - FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "amenities AS A, - ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "amenity_ref AS R - WHERE R.ref_type = ".$this->config['ref_type_numb']['MemberInfo']." - AND R.ref_dest = ".$r['id']." - AND A.id = R.amenity - ;"; - - $r['amenities'] = $this->wpdb->get_results($sql, ARRAY_A); + if ($this->doPostProcessing || $this->postProcessAmenity) { + $sql = " + SELECT A.* + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "amenities AS A, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "amenity_ref AS R + WHERE R.ref_type = ".$this->config['ref_type_numb']['MemberInfo']." + AND R.ref_dest = ".$r['id']." + AND A.id = R.amenity + ;"; + + $r['amenities'] = $this->wpdb->get_results($sql, ARRAY_A); + } // Get Member Category data for this entry - $sql = " - SELECT CMI.member_info AS member_info_id, C.id, C.name, C.descr, C.short_descr, - COALESCE ( - ( - SELECT name - FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "categories - WHERE id = C.parent - ), '' - ) AS parent_name - FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "categories AS C, - ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "category_member_info AS CMI - WHERE C.id = CMI.category - AND CMI.member_info = ".$r['id']." - ;"; - $r['categories'] = $this->wpdb->get_results($sql, ARRAY_A); - - if ((strlen($r['short_descr']) == 0) && ($r['descr'] > 0)) { - $r['short_descr'] = $r['descr']; + if ($this->doPostProcessing || $this->postProcessCategory) { + $sql = " + SELECT CMI.member_info AS member_info_id, C.id, C.name, C.descr, C.short_descr, + COALESCE ( + ( + SELECT name + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "categories + WHERE id = C.parent + ), '' + ) AS parent_name + FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "categories AS C, + ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "category_member_info AS CMI + WHERE C.id = CMI.category + AND CMI.member_info = ".$r['id']." + ;"; + $r['categories'] = $this->wpdb->get_results($sql, ARRAY_A); } - $dotdotdot = ''; - if (strlen($r['short_descr']) > 120 ) { - $dotdotdot = ' ...'; + + if ($this->doPostProcessing || $this->postProcessShortDescr) { + if ((strlen($r['short_descr']) == 0) && ($r['descr'] > 0)) { + $r['short_descr'] = $r['descr']; + } + $dotdotdot = ''; + if (strlen($r['short_descr']) > 120 ) { + $dotdotdot = ' ...'; + } + + $formattedStr = trim(preg_replace('/\s\s+/', ' ', $r['short_descr'])); + $r['short_descr'] = substr($formattedStr, 0, 120).$dotdotdot; } - + + /* * This will add a protocol prefix to the live cam url */ - $liveCamUrl = $r['live_cam_url']; - if ($liveCamUrl != "") { - if (!preg_match("~^(?:f|ht)tps?://~i", $liveCamUrl)) { - $r['live_cam_url'] = "http://" . $liveCamUrl; + if ($this->doPostProcessing || $this->postProcessCamUrl) { + $liveCamUrl = $r['live_cam_url']; + if ($liveCamUrl != "") { + if (!preg_match("~^(?:f|ht)tps?://~i", $liveCamUrl)) { + $r['live_cam_url'] = "http://" . $liveCamUrl; + } } } - $formattedStr = trim(preg_replace('/\s\s+/', ' ', $r['short_descr'])); - $r['short_descr'] = substr($formattedStr, 0, 120).$dotdotdot; - // If post processing primary contact - Yes, we're cheating here and referencing an add-on directly - if (isset($this->config['addOns']['glm-member-db-contacts']) && $this->postProcessPrimaryContact) { - - // Get basic primary contact information - $sql = " - SELECT id, fname, lname, email - FROM ".GLM_MEMBERS_CONTACTS_PLUGIN_DB_PREFIX. "contacts - WHERE ref_type = ".$this->config['ref_type_numb']['Member']." - AND ref_dest = ".$r['member_pointer']." - AND primary_contact - "; - $r['primary_contact'] = current($this->wpdb->get_results($sql, ARRAY_A)); + if ($this->doPostProcessing || $this->postProcessPrimaryContact) { + if (isset($this->config['addOns']['glm-member-db-contacts']) && $this->postProcessPrimaryContact) { + + // Get basic primary contact information + $sql = " + SELECT id, fname, lname, email + FROM ".GLM_MEMBERS_CONTACTS_PLUGIN_DB_PREFIX. "contacts + WHERE ref_type = ".$this->config['ref_type_numb']['Member']." + AND ref_dest = ".$r['member_pointer']." + AND primary_contact + "; + $r['primary_contact'] = current($this->wpdb->get_results($sql, ARRAY_A)); + } } return $r; @@ -663,7 +686,7 @@ class GlmDataMemberInfo extends GlmDataAbstract * @return object Class object * */ - public function getSimpleMemberInfoList($where = '') + public function getSimpleMemberInfoList($where = '', $forMapItems = false) { $this->doPostProcessing = false; @@ -686,6 +709,23 @@ class GlmDataMemberInfo extends GlmDataAbstract 'lon' => $f['lon'] ); + if ($forMapItems) { + $this->fields = array_merge($this->fields, array( + 'addr1' => $f['addr1'], + 'addr2' => $f['addr2'], + 'city' => $f['city'], + 'state' => $f['state'], + 'zip' => $f['zip'], + 'phone' => $f['phone'], + 'email' => $f['email'], + 'url' => $f['url'], + 'region'=> $f['region'], + 'descr' => $f['descr'], + 'short_descr' => $f['short_descr'] + )); + } + + // Get the simplified list $list = $this->getList($where); diff --git a/controllers/front.php b/controllers/front.php index 77f15173..43ff11d5 100644 --- a/controllers/front.php +++ b/controllers/front.php @@ -64,7 +64,10 @@ class glmMembersFront extends GlmPluginSupport } /* - * Include any misc add-on hooks and filters in add-on setup folder frontMisc.php file. + * Include the following files in the setup folder of add-ons + * + * * Misc hooks and filters - frontMisc.php + * * Map hooks between add-ons - mapHooks.php * * Note that filter and hook callback functions must be included in-line as shown below... * @@ -83,6 +86,12 @@ class glmMembersFront extends GlmPluginSupport require_once $miscFile; } + // Check for a mapHooks.php file - Maps various add_filters to apply_filters for the add-on + $mapHooksFile = GLM_MEMBERS_WORDPRESS_PLUGIN_PATH.$a['slug'].'/setup/mapHooks.php'; + if (is_file($mapHooksFile)) { + require_once $mapHooksFile; + } + } // Add filters for use anywhere else (apply_filter). Will have to add this to index.php eventually @@ -326,12 +335,12 @@ class glmMembersFront extends GlmPluginSupport $action = $shortcodeData['action']; /* Get any requested "action" from a form submission - Overrides short-code default action - * + * * This has been commented out because it does not appear to be used * and was causing the wrong model to be used after a category-based * search to a page with more than one model.. */ - /* + /* if (isset($_REQUEST['glm_action']) && $_REQUEST['glm_action'] != '') { $a = sanitize_text_field($_REQUEST['glm_action']); if ($a != '') { @@ -411,7 +420,7 @@ class glmMembersFront extends GlmPluginSupport } // check for an invalid model class name - if (! class_exists($className)) { + if (! class_exists($className)) { $errorMsg .= "Model class doesn't exist: ".$className; diff --git a/css/front.css b/css/front.css index f6fcab52..8f2dc56f 100644 --- a/css/front.css +++ b/css/front.css @@ -648,6 +648,15 @@ input[type="submit"].glm-member-button { padding: 10px 20px; border-radius: 5px; } +.glm-member-button-small, +input[type="submit"].glm-member-button { + font-size: 0.9em !important; + padding: .0em .3em 0em .3em !important; + margin-right: 2px !important; + line-height: 1.8em !important; + height: 1.8em !important; + border-radius: 5px; +} .glm-member-entry-container, .glm-member-list-container { background: white none repeat scroll 0 0; @@ -838,6 +847,9 @@ input[type="submit"].glm-member-button { /* margin: 10px 0 10px 0;*/ margin: 0 auto; } +.glm-map-tall { + height: 600px; +} /* overrride whatever was causing the 100% width for images in Google Maps */ .glm-map img { max-width: none !important; diff --git a/js/googleMapsMarkerClusterer/docs/makerClustererPlusReference.html b/js/googleMapsMarkerClusterer/docs/makerClustererPlusReference.html new file mode 100644 index 00000000..077f9442 --- /dev/null +++ b/js/googleMapsMarkerClusterer/docs/makerClustererPlusReference.html @@ -0,0 +1,1087 @@ + + + + + MarkerClustererPlus for Google Maps V3 v2.1.2 [May 28, 2014] Reference + + + + +

MarkerClustererPlus for Google Maps V3

+

+The library creates and manages per-zoom-level clusters for large amounts of markers. +

+This is an enhanced V3 implementation of the +V2 MarkerClusterer by Xiaoxi Wu. It is based on the +V3 MarkerClusterer port by Luke Mahe. MarkerClustererPlus was created by Gary Little. +

+v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It + adds support for the ignoreHidden, title, batchSizeIE, + and calculator properties as well as support for four more events. It also allows + greater control over the styling of the text that appears on the cluster marker. The + documentation has been significantly improved and the overall code has been simplified and + polished. Very large numbers of markers can now be managed without causing Javascript timeout + errors on Internet Explorer. Note that the name of the clusterclick event has been + deprecated. The new name is click, so please change your application code now.

+

For a description and examples of how to use this library, check out the how-to.

+ +

class Cluster

+

+ +

Constructor

+ + + + + + + + + + + + + + + + +
ConstructorDescription
Cluster(mc:MarkerClusterer)Creates a single cluster that manages a group of proximate markers. + Used internally, do not call this constructor directly.
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodsReturn ValueDescription
getCenter()google.maps.LatLngReturns the center of the cluster. You can call this from +a click, mouseover, or mouseout event handler +for the MarkerClusterer object.
getMarkers()ArrayReturns the array of markers managed by the cluster. You can call this from +a click, mouseover, or mouseout event handler +for the MarkerClusterer object.
getSize()numberReturns the number of markers managed by the cluster. You can call this from +a click, mouseover, or mouseout event handler +for the MarkerClusterer object.
+ + +

class ClusterIconInfo

+

This class is an object containing general information about a cluster icon. This is + the object that a calculator function returns.

+ +

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertiesTypeDescription
indexnumberThe index plus 1 of the element in the styles + array to be used to style the cluster icon.
textstringThe text of the label to be shown on the cluster icon.
titlestringThe tooltip to display when the mouse moves over the cluster icon. + If this value is undefined or "", title is set to the + value of the title property passed to the MarkerClusterer.
+ + +

class ClusterIconStyle

+

This class represents the object for values in the styles array passed + to the MarkerClusterer constructor. The element in this array that is used to + style the cluster icon is determined by calling the calculator function.

+ +

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertiesTypeDescription
anchorIconArrayThe anchor position (in pixels) of the cluster icon. This is the + spot on the cluster icon that is to be aligned with the cluster position. The format is + [yoffset, xoffset] where yoffset increases as you go down and + xoffset increases to the right of the top-left corner of the icon. The default + anchor position is the center of the cluster icon.
anchorTextArrayThe position (in pixels) from the center of the cluster icon to + where the text label is to be centered and drawn. The format is [yoffset, xoffset] + where yoffset increases as you go down from center and xoffset + increases to the right of center. The default is [0, 0].
backgroundPositionstringThe position of the cluster icon image + within the image defined by url. The format is "xpos ypos" + (the same format as for the CSS background-position property). You must set + this property appropriately when the image defined by url represents a sprite + containing multiple images. Note that the position must be specified in px units. The default value is "0 0".
fontFamilystringThe value of the CSS font-family + property for the label text shown on the cluster icon. The default value is "Arial,sans-serif".
fontStylestringThe value of the CSS font-style + property for the label text shown on the cluster icon. The default value is "normal".
fontWeightstringThe value of the CSS font-weight + property for the label text shown on the cluster icon. The default value is "bold".
heightnumberThe display height (in pixels) of the cluster icon. Required.
textColorstringThe color of the label text shown on the + cluster icon. The default value is "black".
textDecorationstringThe value of the CSS text-decoration + property for the label text shown on the cluster icon. The default value is "none".
textSizenumberThe size (in pixels) of the label text shown on the + cluster icon. The default value is 11.
urlstringThe URL of the cluster icon image file. Required.
widthnumberThe display width (in pixels) of the cluster icon. Required.
+ + +

class MarkerClusterer

+

This class extends google.maps.OverlayView.

+ +

Constructor

+ + + + + + + + + + + + + + + + +
ConstructorDescription
MarkerClusterer(map:google.maps.Map, opt_markers?:Array.<google.maps.Marker>, opt_options?:MarkerClustererOptions)Creates a MarkerClusterer object with the options specified in MarkerClustererOptions.
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodsReturn ValueDescription
addMarker(marker:google.maps.Marker, opt_nodraw?:boolean)NoneAdds a marker to the clusterer. The clusters are redrawn unless + opt_nodraw is set to true.
addMarkers(markers:Array.<google.maps.Marker>, opt_nodraw?:boolean)NoneAdds an array of markers to the clusterer. The clusters are redrawn unless + opt_nodraw is set to true.
clearMarkers()NoneRemoves all clusters and markers from the map and also removes all markers + managed by the clusterer.
fitMapToMarkers()NoneFits the map to the bounds of the markers managed by the clusterer.
getAverageCenter()booleanReturns the value of the averageCenter property.
getBatchSizeIE()numberReturns the value of the batchSizeIE property.
getCalculator()functionReturns the value of the calculator property.
getClusterClass()stringReturns the value of the clusterClass property.
getClusters()ArrayReturns the current array of clusters formed by the clusterer.
getEnableRetinaIcons()booleanReturns the value of the enableRetinaIcons property.
getGridSize()numberReturns the value of the gridSize property.
getIgnoreHidden()booleanReturns the value of the ignoreHidden property.
getImageExtension()stringReturns the value of the imageExtension property.
getImagePath()stringReturns the value of the imagePath property.
getImageSizes()ArrayReturns the value of the imageSizes property.
getMarkers()ArrayReturns the array of markers managed by the clusterer.
getMaxZoom()numberReturns the value of the maxZoom property.
getMinimumClusterSize()numberReturns the value of the minimumClusterSize property.
getStyles()ArrayReturns the value of the styles property.
getTitle()stringReturns the value of the title property.
getTotalClusters()numberReturns the number of clusters formed by the clusterer.
getTotalMarkers()numberReturns the number of markers managed by the clusterer.
getZoomOnClick()booleanReturns the value of the zoomOnClick property.
removeMarker(marker:google.maps.Marker, opt_nodraw?:boolean)booleanRemoves a marker from the cluster. The clusters are redrawn unless + opt_nodraw is set to true. Returns true if the + marker was removed from the clusterer.
removeMarkers(markers:Array.<google.maps.Marker>, opt_nodraw?:boolean)booleanRemoves an array of markers from the cluster. The clusters are redrawn unless + opt_nodraw is set to true. Returns true if markers + were removed from the clusterer.
repaint()NoneRecalculates and redraws all the marker clusters from scratch. + Call this after changing any properties.
setAverageCenter(averageCenter:boolean)NoneSets the value of the averageCenter property.
setBatchSizeIE(batchSizeIE:number)NoneSets the value of the batchSizeIE property.
setCalculator(calculator:function(Array.<google.maps.Marker>|number))NoneSets the value of the calculator property.
setClusterClass(clusterClass:string)NoneSets the value of the clusterClass property.
setEnableRetinaIcons(enableRetinaIcons:boolean)NoneSets the value of the enableRetinaIcons property.
setGridSize(gridSize:number)NoneSets the value of the gridSize property.
setIgnoreHidden(ignoreHidden:boolean)NoneSets the value of the ignoreHidden property.
setImageExtension(imageExtension:string)NoneSets the value of the imageExtension property.
setImagePath(imagePath:string)NoneSets the value of the imagePath property.
setImageSizes(imageSizes:Array)NoneSets the value of the imageSizes property.
setMaxZoom(maxZoom:number)NoneSets the value of the maxZoom property.
setMinimumClusterSize(minimumClusterSize:number)NoneSets the value of the minimumClusterSize property.
setStyles(styles:Array.<ClusterIconStyle>)NoneSets the value of the styles property.
setTitle(title:string)NoneSets the value of the title property.
setZoomOnClick(zoomOnClick:boolean)NoneSets the value of the zoomOnClick property.
+ +

Events

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventsArgumentsDescription
clickc:ClusterThis event is fired when a cluster marker is clicked.
clusteringbeginmc:MarkerClustererThis event is fired when the MarkerClusterer begins + clustering markers.
clusteringendmc:MarkerClustererThis event is fired when the MarkerClusterer stops + clustering markers.
mouseoutc:ClusterThis event is fired when the mouse moves out of a cluster marker.
mouseoverc:ClusterThis event is fired when the mouse moves over a cluster marker.
+ + +

class MarkerClustererOptions

+

This class represents the optional parameter passed to + the MarkerClusterer constructor. There is no constructor for this class. Instead, this class is instantiated as a javascript object literal.

+ +

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertiesTypeDescription
averageCenterbooleanWhether the position of a cluster marker should be + the average position of all markers in the cluster. If set to false, the + cluster marker is positioned at the location of the first marker added to the cluster. The default value is false.
batchSizenumberSet this property to the + number of markers to be processed in a single batch when using a browser other than + Internet Explorer (for Internet Explorer, use the batchSizeIE property instead). The default value is MarkerClusterer.BATCH_SIZE.
batchSizeIEnumberWhen Internet Explorer is + being used, markers are processed in several batches with a small delay inserted between + each batch in an attempt to avoid Javascript timeout errors. Set this property to the + number of markers to be processed in a single batch; select as high a number as you can + without causing a timeout error in the browser. This number might need to be as low as 100 + if 15,000 markers are being managed, for example. The default value is MarkerClusterer.BATCH_SIZE_IE.
calculatorfunctionThe function used to determine + the text to be displayed on a cluster marker and the index indicating which style to use + for the cluster marker. The input parameters for the function are (1) the array of markers + represented by a cluster marker and (2) the number of cluster icon styles. It returns a + ClusterIconInfo object. The default calculator returns a + text property which is the number of markers in the cluster and an + index property which is one higher than the lowest integer such that + 10^i exceeds the number of markers in the cluster, or the size of the styles + array, whichever is less. The styles array element used has an index of + index minus 1. For example, the default calculator returns a + text value of "125" and an index of 3 + for a cluster icon representing 125 markers so the element used in the styles + array is 2. A calculator may also return a title + property that contains the text of the tooltip to be used for the cluster marker. If + title is not defined, the tooltip is set to the value of the title + property for the MarkerClusterer. The default value is MarkerClusterer.CALCULATOR.
clusterClassstringThe name of the CSS class defining general styles + for the cluster markers. Use this class to define CSS styles that are not set up by the code + that processes the styles array. The default value is "cluster".
enableRetinaIconsbooleanWhether to allow the use of cluster icons that +have sizes that are some multiple (typically double) of their actual display size. Icons such +as these look better when viewed on high-resolution monitors such as Apple's Retina displays. +Note: if this property is true, sprites cannot be used as cluster icons. The default value is false.
gridSizenumberThe grid size of a cluster in pixels. The grid is a square. The default value is 60.
ignoreHiddenbooleanWhether to ignore hidden markers in clusters. You + may want to set this to true to ensure that hidden markers are not included + in the marker count that appears on a cluster marker (this count is the value of the + text property of the result returned by the default calculator). + If set to true and you change the visibility of a marker being clustered, be + sure to also call MarkerClusterer.repaint(). The default value is false.
imageExtensionstringThe extension name for the cluster icon image files (e.g., "png" or + "jpg"). The default value is MarkerClusterer.IMAGE_EXTENSION.
imagePathstringThe full URL of the root name of the group of image files to use for cluster icons. + The complete file name is of the form imagePathn.imageExtension + where n is the image file number (1, 2, etc.). The default value is MarkerClusterer.IMAGE_PATH.
imageSizesArrayAn array of numbers containing the widths of the group of + imagePathn.imageExtension image files. + (The images are assumed to be square.) The default value is MarkerClusterer.IMAGE_SIZES.
maxZoomnumberThe maximum zoom level at which clustering is enabled or + null if clustering is to be enabled at all zoom levels. The default value is null.
minimumClusterSizenumberThe minimum number of markers needed in a cluster + before the markers are hidden and a cluster marker appears. The default value is 2.
stylesArrayAn array of ClusterIconStyle elements defining the styles + of the cluster markers to be used. The element to be used to style a given cluster marker + is determined by the function defined by the calculator property. + The default is an array of ClusterIconStyle elements whose properties are derived + from the values for imagePath, imageExtension, and + imageSizes.
titlestringThe tooltip to display when the mouse moves over a cluster + marker. (Alternatively, you can use a custom calculator function to specify a + different tooltip for each cluster marker.) The default value is "".
zoomOnClickbooleanWhether to zoom the map when a cluster marker is + clicked. You may want to set this to false if you have installed a handler + for the click event and it deals with zooming on its own. The default value is true.
+ + + + + + \ No newline at end of file diff --git a/js/googleMapsMarkerClusterer/docs/markerClustererPlusExamples.html b/js/googleMapsMarkerClusterer/docs/markerClustererPlusExamples.html new file mode 100644 index 00000000..f2dcb437 --- /dev/null +++ b/js/googleMapsMarkerClusterer/docs/markerClustererPlusExamples.html @@ -0,0 +1,127 @@ + + + + + MarkerCluster for v3 Documentation: Examples + + + + + +

MarkerClustererPlus Examples

+ +

API Reference

+ +

+Note: Be sure to include markerclusterer.js in your HTML document. +

+    <script src="/path/to/markerclusterer.js" type="text/javascript"></script>
+
+

+ +

To use a marker clusterer, create a MarkerClusterer object. + In the simplest case, just pass a map to it.

+
+var center = new google.maps.LatLng(37.4419, -122.1419);
+var options = {
+  'zoom': 13,
+  'center': center,
+  'mapTypeId': google.maps.MapTypeId.ROADMAP
+};
+
+var map = new google.maps.Map(document.getElementById("map"), options);
+var mc = new MarkerClusterer(map);
+
+ +

You may also specify a number of options to fine-tune the marker + clusterer's performance. These options are passed via an object. +

+ +
+var center = new google.maps.LatLng(37.4419, -122.1419);
+var options = {
+  'zoom': 13,
+  'center': center,
+  'mapTypeId': google.maps.MapTypeId.ROADMAP
+};
+
+var map = new google.maps.Map(document.getElementById("map"), options);
+
+var mcOptions = {gridSize: 50, maxZoom: 15};
+var mc = new MarkerClusterer(map, [], mcOptions);
+
+ +

Once you create a marker clusterer, you will want to add markers to it. + You can add markers using the + addMarker() or addMarkers()method or by + providing an array of markers to the constructor:

+
+var center = new google.maps.LatLng(37.4419, -122.1419);
+var options = {
+  'zoom': 13,
+  'center': center,
+  'mapTypeId': google.maps.MapTypeId.ROADMAP
+};
+
+var map = new google.maps.Map(document.getElementById("map"), options);
+
+var mcOptions = {gridSize: 50, maxZoom: 15};
+var markers = [...]; // Create the markers you want to add and collect them into an array.
+var mc = new MarkerClusterer(map, markers, mcOptions);
+
+ +

Simple Example

+ +

This example will show 100 markers on a map.

+ +
+var center = new google.maps.LatLng(37.4419, -122.1419);
+var options = {
+  'zoom': 13,
+  'center': center,
+  'mapTypeId': google.maps.MapTypeId.ROADMAP
+};
+
+var map = new google.maps.Map(document.getElementById("map"), options);
+
+var markers = [];
+for (var i = 0; i < 100; i++) {
+  var latLng = new google.maps.LatLng(data.photos[i].latitude,
+      data.photos[i].longitude);
+  var marker = new google.maps.Marker({'position': latLng});
+  markers.push(marker);
+}
+var markerCluster = new MarkerClusterer(map, markers);
+
+ +

View example (simple_example.html)

+ +

+ + Advanced Example +

+

With this example, you can test a marker clusterer with + different maximum zoom levels, grid sizes and styles, all the options.

+

View example + (advanced_example.html)

+ +

+ + Speed Test Example +

+

This example compares adding markers with a + marker clusterer to the normal method of adding markers, and + display the time for each.

+

View example + (speed_test_example.html)

+ +

+ + Event Handling Example +

+

This example shows how to add event listeners to a + marker clusterer.

+

View example + (events_example.html)

+ + \ No newline at end of file diff --git a/js/googleMapsMarkerClusterer/examples/advanced_example.html b/js/googleMapsMarkerClusterer/examples/advanced_example.html new file mode 100644 index 00000000..fcdeb95a --- /dev/null +++ b/js/googleMapsMarkerClusterer/examples/advanced_example.html @@ -0,0 +1,200 @@ + + + + + MarkerClustererPlus V3 Example + + + + + + + + + + +

An example of MarkerClustererPlus

+
+
+
+
+ Max zoom level: + + + Cluster size: + + + Cluster style: + + + + Clear +
+ + \ No newline at end of file diff --git a/js/googleMapsMarkerClusterer/examples/events_example.html b/js/googleMapsMarkerClusterer/examples/events_example.html new file mode 100644 index 00000000..4e7893f7 --- /dev/null +++ b/js/googleMapsMarkerClusterer/examples/events_example.html @@ -0,0 +1,89 @@ + + + + + MarkerClustererPlus V3 Example + + + + + + + + + + +

Event listening example for MarkerClustererPlus

+
+
+ + \ No newline at end of file diff --git a/js/googleMapsMarkerClusterer/images/conv30.png b/js/googleMapsMarkerClusterer/images/conv30.png new file mode 100644 index 00000000..a50f61f0 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/conv30.png differ diff --git a/js/googleMapsMarkerClusterer/images/conv40.png b/js/googleMapsMarkerClusterer/images/conv40.png new file mode 100644 index 00000000..2fe31a57 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/conv40.png differ diff --git a/js/googleMapsMarkerClusterer/images/conv50.png b/js/googleMapsMarkerClusterer/images/conv50.png new file mode 100644 index 00000000..cbab98b3 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/conv50.png differ diff --git a/js/googleMapsMarkerClusterer/images/heart30.png b/js/googleMapsMarkerClusterer/images/heart30.png new file mode 100644 index 00000000..c6067a7e Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/heart30.png differ diff --git a/js/googleMapsMarkerClusterer/images/heart40.png b/js/googleMapsMarkerClusterer/images/heart40.png new file mode 100644 index 00000000..e79ba0a1 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/heart40.png differ diff --git a/js/googleMapsMarkerClusterer/images/heart50.png b/js/googleMapsMarkerClusterer/images/heart50.png new file mode 100644 index 00000000..26c22524 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/heart50.png differ diff --git a/js/googleMapsMarkerClusterer/images/m1.png b/js/googleMapsMarkerClusterer/images/m1.png new file mode 100644 index 00000000..329ff524 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/m1.png differ diff --git a/js/googleMapsMarkerClusterer/images/m2.png b/js/googleMapsMarkerClusterer/images/m2.png new file mode 100644 index 00000000..b999cbcf Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/m2.png differ diff --git a/js/googleMapsMarkerClusterer/images/m3.png b/js/googleMapsMarkerClusterer/images/m3.png new file mode 100644 index 00000000..9f30b309 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/m3.png differ diff --git a/js/googleMapsMarkerClusterer/images/m4.png b/js/googleMapsMarkerClusterer/images/m4.png new file mode 100644 index 00000000..0d3f8263 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/m4.png differ diff --git a/js/googleMapsMarkerClusterer/images/m5.png b/js/googleMapsMarkerClusterer/images/m5.png new file mode 100644 index 00000000..61387d2a Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/m5.png differ diff --git a/js/googleMapsMarkerClusterer/images/people35.png b/js/googleMapsMarkerClusterer/images/people35.png new file mode 100644 index 00000000..6a5a209d Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/people35.png differ diff --git a/js/googleMapsMarkerClusterer/images/people45.png b/js/googleMapsMarkerClusterer/images/people45.png new file mode 100644 index 00000000..219c62e4 Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/people45.png differ diff --git a/js/googleMapsMarkerClusterer/images/people55.png b/js/googleMapsMarkerClusterer/images/people55.png new file mode 100644 index 00000000..6e88d1ef Binary files /dev/null and b/js/googleMapsMarkerClusterer/images/people55.png differ diff --git a/js/googleMapsMarkerClusterer/markerclusterer.js b/js/googleMapsMarkerClusterer/markerclusterer.js new file mode 100644 index 00000000..3db7a06a --- /dev/null +++ b/js/googleMapsMarkerClusterer/markerclusterer.js @@ -0,0 +1,1259 @@ +/** + * @name MarkerClusterer for Google Maps v3 + * @version version 1.0 + * @author Luke Mahe + * @fileoverview + * The library creates and manages per-zoom-level clusters for large amounts of + * markers. + *
+ * This is a v3 implementation of the + * v2 MarkerClusterer. + */ + +/** + * @license + * Copyright 2010 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * A Marker Clusterer that clusters markers. + * + * @param {google.maps.Map} map The Google map to attach to. + * @param {Array.=} opt_markers Optional markers to add to + * the cluster. + * @param {Object=} opt_options support the following options: + * 'gridSize': (number) The grid size of a cluster in pixels. + * 'maxZoom': (number) The maximum zoom level that a marker can be part of a + * cluster. + * 'zoomOnClick': (boolean) Whether the default behaviour of clicking on a + * cluster is to zoom into it. + * 'averageCenter': (boolean) Whether the center of each cluster should be + * the average of all markers in the cluster. + * 'minimumClusterSize': (number) The minimum number of markers to be in a + * cluster before the markers are hidden and a count + * is shown. + * 'styles': (object) An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition': (string) The position of the backgound x, y. + * 'iconAnchor': (Array) The anchor position of the icon x, y. + * @constructor + * @extends google.maps.OverlayView + */ +function MarkerClusterer(map, opt_markers, opt_options) { + // MarkerClusterer implements google.maps.OverlayView interface. We use the + // extend function to extend MarkerClusterer with google.maps.OverlayView + // because it might not always be available when the code is defined so we + // look for it at the last possible moment. If it doesn't exist now then + // there is no point going ahead :) + this.extend(MarkerClusterer, google.maps.OverlayView); + this.map_ = map; + + /** + * @type {Array.} + * @private + */ + this.markers_ = []; + + /** + * @type {Array.} + */ + this.clusters_ = []; + + this.sizes = [53, 56, 66, 78, 90]; + + /** + * @private + */ + this.styles_ = []; + + /** + * @type {boolean} + * @private + */ + this.ready_ = false; + + var options = opt_options || {}; + + /** + * @type {number} + * @private + */ + this.gridSize_ = options['gridSize'] || 60; + + /** + * @private + */ + this.minClusterSize_ = options['minimumClusterSize'] || 2; + + + /** + * @type {?number} + * @private + */ + this.maxZoom_ = options['maxZoom'] || null; + + this.styles_ = options['styles'] || []; + + /** + * @type {string} + * @private + */ + this.imagePath_ = options['imagePath'] || + this.MARKER_CLUSTER_IMAGE_PATH_; + + /** + * @type {string} + * @private + */ + this.imageExtension_ = options['imageExtension'] || + this.MARKER_CLUSTER_IMAGE_EXTENSION_; + + /** + * @type {boolean} + * @private + */ + this.zoomOnClick_ = true; + + if (options['zoomOnClick'] != undefined) { + this.zoomOnClick_ = options['zoomOnClick']; + } + + /** + * @type {boolean} + * @private + */ + this.averageCenter_ = false; + + if (options['averageCenter'] != undefined) { + this.averageCenter_ = options['averageCenter']; + } + + this.setupStyles_(); + + this.setMap(map); + + /** + * @type {number} + * @private + */ + this.prevZoom_ = this.map_.getZoom(); + + // Add the map event listeners + var that = this; + google.maps.event.addListener(this.map_, 'zoom_changed', function() { + var zoom = that.map_.getZoom(); + + if (that.prevZoom_ != zoom) { + that.prevZoom_ = zoom; + that.resetViewport(); + } + }); + + google.maps.event.addListener(this.map_, 'idle', function() { + that.redraw(); + }); + + // Finally, add the markers + if (opt_markers && opt_markers.length) { + this.addMarkers(opt_markers, false); + } +} + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '../images/m'; + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; + + +/** + * Extends a objects prototype by anothers. + * + * @param {Object} obj1 The object to be extended. + * @param {Object} obj2 The object to extend with. + * @return {Object} The new extended object. + * @ignore + */ +MarkerClusterer.prototype.extend = function(obj1, obj2) { + return (function(object) { + for (var property in object.prototype) { + this.prototype[property] = object.prototype[property]; + } + return this; + }).apply(obj1, [obj2]); +}; + + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.onAdd = function() { + this.setReady_(true); +}; + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.draw = function() {}; + +/** + * Sets up the styles object. + * + * @private + */ +MarkerClusterer.prototype.setupStyles_ = function() { + if (this.styles_.length) { + return; + } + + for (var i = 0, size; size = this.sizes[i]; i++) { + this.styles_.push({ + url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, + height: size, + width: size + }); + } +}; + +/** + * Fit the map to the bounds of the markers in the clusterer. + */ +MarkerClusterer.prototype.fitMapToMarkers = function() { + var markers = this.getMarkers(); + var bounds = new google.maps.LatLngBounds(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + + this.map_.fitBounds(bounds); +}; + + +/** + * Sets the styles. + * + * @param {Object} styles The style to set. + */ +MarkerClusterer.prototype.setStyles = function(styles) { + this.styles_ = styles; +}; + + +/** + * Gets the styles. + * + * @return {Object} The styles object. + */ +MarkerClusterer.prototype.getStyles = function() { + return this.styles_; +}; + + +/** + * Whether zoom on click is set. + * + * @return {boolean} True if zoomOnClick_ is set. + */ +MarkerClusterer.prototype.isZoomOnClick = function() { + return this.zoomOnClick_; +}; + +/** + * Whether average center is set. + * + * @return {boolean} True if averageCenter_ is set. + */ +MarkerClusterer.prototype.isAverageCenter = function() { + return this.averageCenter_; +}; + + +/** + * Returns the array of markers in the clusterer. + * + * @return {Array.} The markers. + */ +MarkerClusterer.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the number of markers in the clusterer + * + * @return {Number} The number of markers. + */ +MarkerClusterer.prototype.getTotalMarkers = function() { + return this.markers_.length; +}; + + +/** + * Sets the max zoom for the clusterer. + * + * @param {number} maxZoom The max zoom level. + */ +MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { + this.maxZoom_ = maxZoom; +}; + + +/** + * Gets the max zoom for the clusterer. + * + * @return {number} The max zoom level. + */ +MarkerClusterer.prototype.getMaxZoom = function() { + return this.maxZoom_; +}; + + +/** + * The function for calculating the cluster icon image. + * + * @param {Array.} markers The markers in the clusterer. + * @param {number} numStyles The number of styles available. + * @return {Object} A object properties: 'text' (string) and 'index' (number). + * @private + */ +MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { + var index = 0; + var count = markers.length; + var dv = count; + while (dv !== 0) { + dv = parseInt(dv / 10, 10); + index++; + } + + index = Math.min(index, numStyles); + return { + text: count, + index: index + }; +}; + + +/** + * Set the calculator function. + * + * @param {function(Array, number)} calculator The function to set as the + * calculator. The function should return a object properties: + * 'text' (string) and 'index' (number). + * + */ +MarkerClusterer.prototype.setCalculator = function(calculator) { + this.calculator_ = calculator; +}; + + +/** + * Get the calculator function. + * + * @return {function(Array, number)} the calculator function. + */ +MarkerClusterer.prototype.getCalculator = function() { + return this.calculator_; +}; + + +/** + * Add an array of markers to the clusterer. + * + * @param {Array.} markers The markers to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { + for (var i = 0, marker; marker = markers[i]; i++) { + this.pushMarkerTo_(marker); + } + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Pushes a marker to the clusterer. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { + marker.isAdded = false; + if (marker['draggable']) { + // If the marker is draggable add a listener so we update the clusters on + // the drag end. + var that = this; + google.maps.event.addListener(marker, 'dragend', function() { + marker.isAdded = false; + that.repaint(); + }); + } + this.markers_.push(marker); +}; + + +/** + * Adds a marker to the clusterer and redraws if needed. + * + * @param {google.maps.Marker} marker The marker to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { + this.pushMarkerTo_(marker); + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Removes a marker and returns true if removed, false if not + * + * @param {google.maps.Marker} marker The marker to remove + * @return {boolean} Whether the marker was removed or not + * @private + */ +MarkerClusterer.prototype.removeMarker_ = function(marker) { + var index = -1; + if (this.markers_.indexOf) { + index = this.markers_.indexOf(marker); + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + index = i; + break; + } + } + } + + if (index == -1) { + // Marker is not in our list of markers. + return false; + } + + marker.setMap(null); + + this.markers_.splice(index, 1); + + return true; +}; + + +/** + * Remove a marker from the cluster. + * + * @param {google.maps.Marker} marker The marker to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + * @return {boolean} True if the marker was removed. + */ +MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { + var removed = this.removeMarker_(marker); + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } else { + return false; + } +}; + + +/** + * Removes an array of markers from the cluster. + * + * @param {Array.} markers The markers to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + */ +MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { + var removed = false; + + for (var i = 0, marker; marker = markers[i]; i++) { + var r = this.removeMarker_(marker); + removed = removed || r; + } + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } +}; + + +/** + * Sets the clusterer's ready state. + * + * @param {boolean} ready The state. + * @private + */ +MarkerClusterer.prototype.setReady_ = function(ready) { + if (!this.ready_) { + this.ready_ = ready; + this.createClusters_(); + } +}; + + +/** + * Returns the number of clusters in the clusterer. + * + * @return {number} The number of clusters. + */ +MarkerClusterer.prototype.getTotalClusters = function() { + return this.clusters_.length; +}; + + +/** + * Returns the google map that the clusterer is associated with. + * + * @return {google.maps.Map} The map. + */ +MarkerClusterer.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Sets the google map that the clusterer is associated with. + * + * @param {google.maps.Map} map The map. + */ +MarkerClusterer.prototype.setMap = function(map) { + this.map_ = map; +}; + + +/** + * Returns the size of the grid. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getGridSize = function() { + return this.gridSize_; +}; + + +/** + * Sets the size of the grid. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setGridSize = function(size) { + this.gridSize_ = size; +}; + + +/** + * Returns the min cluster size. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getMinClusterSize = function() { + return this.minClusterSize_; +}; + +/** + * Sets the min cluster size. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setMinClusterSize = function(size) { + this.minClusterSize_ = size; +}; + + +/** + * Extends a bounds object by the grid size. + * + * @param {google.maps.LatLngBounds} bounds The bounds to extend. + * @return {google.maps.LatLngBounds} The extended bounds. + */ +MarkerClusterer.prototype.getExtendedBounds = function(bounds) { + var projection = this.getProjection(); + + // Turn the bounds into latlng. + var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), + bounds.getNorthEast().lng()); + var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), + bounds.getSouthWest().lng()); + + // Convert the points to pixels and the extend out by the grid size. + var trPix = projection.fromLatLngToDivPixel(tr); + trPix.x += this.gridSize_; + trPix.y -= this.gridSize_; + + var blPix = projection.fromLatLngToDivPixel(bl); + blPix.x -= this.gridSize_; + blPix.y += this.gridSize_; + + // Convert the pixel points back to LatLng + var ne = projection.fromDivPixelToLatLng(trPix); + var sw = projection.fromDivPixelToLatLng(blPix); + + // Extend the bounds to contain the new bounds. + bounds.extend(ne); + bounds.extend(sw); + + return bounds; +}; + + +/** + * Determins if a marker is contained in a bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @param {google.maps.LatLngBounds} bounds The bounds to check against. + * @return {boolean} True if the marker is in the bounds. + * @private + */ +MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { + return bounds.contains(marker.getPosition()); +}; + + +/** + * Clears all clusters and markers from the clusterer. + */ +MarkerClusterer.prototype.clearMarkers = function() { + this.resetViewport(true); + + // Set the markers a empty array. + this.markers_ = []; +}; + + +/** + * Clears all existing clusters and recreates them. + * @param {boolean} opt_hide To also hide the marker. + */ +MarkerClusterer.prototype.resetViewport = function(opt_hide) { + // Remove all the clusters + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + cluster.remove(); + } + + // Reset the markers to not be added and to be invisible. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.isAdded = false; + if (opt_hide) { + marker.setMap(null); + } + } + + this.clusters_ = []; +}; + +/** + * + */ +MarkerClusterer.prototype.repaint = function() { + var oldClusters = this.clusters_.slice(); + this.clusters_.length = 0; + this.resetViewport(); + this.redraw(); + + // Remove the old clusters. + // Do it in a timeout so the other clusters have been drawn first. + window.setTimeout(function() { + for (var i = 0, cluster; cluster = oldClusters[i]; i++) { + cluster.remove(); + } + }, 0); +}; + + +/** + * Redraws the clusters. + */ +MarkerClusterer.prototype.redraw = function() { + this.createClusters_(); +}; + + +/** + * Calculates the distance between two latlng locations in km. + * @see http://www.movable-type.co.uk/scripts/latlong.html + * + * @param {google.maps.LatLng} p1 The first lat lng point. + * @param {google.maps.LatLng} p2 The second lat lng point. + * @return {number} The distance between the two points in km. + * @private +*/ +MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { + if (!p1 || !p2) { + return 0; + } + + var R = 6371; // Radius of the Earth in km + var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; + var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return d; +}; + + +/** + * Add a marker to a cluster, or creates a new cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { + var distance = 40000; // Some large number + var clusterToAddTo = null; + var pos = marker.getPosition(); + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + var center = cluster.getCenter(); + if (center) { + var d = this.distanceBetweenPoints_(center, marker.getPosition()); + if (d < distance) { + distance = d; + clusterToAddTo = cluster; + } + } + } + + if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { + clusterToAddTo.addMarker(marker); + } else { + var cluster = new Cluster(this); + cluster.addMarker(marker); + this.clusters_.push(cluster); + } +}; + + +/** + * Creates the clusters. + * + * @private + */ +MarkerClusterer.prototype.createClusters_ = function() { + if (!this.ready_) { + return; + } + + // Get our current map view bounds. + // Create a new bounds object so we don't affect the map. + var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), + this.map_.getBounds().getNorthEast()); + var bounds = this.getExtendedBounds(mapBounds); + + for (var i = 0, marker; marker = this.markers_[i]; i++) { + if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { + this.addToClosestCluster_(marker); + } + } +}; + + +/** + * A cluster that contains markers. + * + * @param {MarkerClusterer} markerClusterer The markerclusterer that this + * cluster is associated with. + * @constructor + * @ignore + */ +function Cluster(markerClusterer) { + this.markerClusterer_ = markerClusterer; + this.map_ = markerClusterer.getMap(); + this.gridSize_ = markerClusterer.getGridSize(); + this.minClusterSize_ = markerClusterer.getMinClusterSize(); + this.averageCenter_ = markerClusterer.isAverageCenter(); + this.center_ = null; + this.markers_ = []; + this.bounds_ = null; + this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), + markerClusterer.getGridSize()); +} + +/** + * Determins if a marker is already added to the cluster. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker is already added. + */ +Cluster.prototype.isMarkerAlreadyAdded = function(marker) { + if (this.markers_.indexOf) { + return this.markers_.indexOf(marker) != -1; + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + return true; + } + } + } + return false; +}; + + +/** + * Add a marker the cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @return {boolean} True if the marker was added. + */ +Cluster.prototype.addMarker = function(marker) { + if (this.isMarkerAlreadyAdded(marker)) { + return false; + } + + if (!this.center_) { + this.center_ = marker.getPosition(); + this.calculateBounds_(); + } else { + if (this.averageCenter_) { + var l = this.markers_.length + 1; + var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; + var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; + this.center_ = new google.maps.LatLng(lat, lng); + this.calculateBounds_(); + } + } + + marker.isAdded = true; + this.markers_.push(marker); + + var len = this.markers_.length; + if (len < this.minClusterSize_ && marker.getMap() != this.map_) { + // Min cluster size not reached so show the marker. + marker.setMap(this.map_); + } + + if (len == this.minClusterSize_) { + // Hide the markers that were showing. + for (var i = 0; i < len; i++) { + this.markers_[i].setMap(null); + } + } + + if (len >= this.minClusterSize_) { + marker.setMap(null); + } + + this.updateIcon(); + return true; +}; + + +/** + * Returns the marker clusterer that the cluster is associated with. + * + * @return {MarkerClusterer} The associated marker clusterer. + */ +Cluster.prototype.getMarkerClusterer = function() { + return this.markerClusterer_; +}; + + +/** + * Returns the bounds of the cluster. + * + * @return {google.maps.LatLngBounds} the cluster bounds. + */ +Cluster.prototype.getBounds = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + var markers = this.getMarkers(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + return bounds; +}; + + +/** + * Removes the cluster + */ +Cluster.prototype.remove = function() { + this.clusterIcon_.remove(); + this.markers_.length = 0; + delete this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {number} The cluster center. + */ +Cluster.prototype.getSize = function() { + return this.markers_.length; +}; + + +/** + * Returns the center of the cluster. + * + * @return {Array.} The cluster center. + */ +Cluster.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {google.maps.LatLng} The cluster center. + */ +Cluster.prototype.getCenter = function() { + return this.center_; +}; + + +/** + * Calculated the extended bounds of the cluster with the grid. + * + * @private + */ +Cluster.prototype.calculateBounds_ = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); +}; + + +/** + * Determines if a marker lies in the clusters bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker lies in the bounds. + */ +Cluster.prototype.isMarkerInClusterBounds = function(marker) { + return this.bounds_.contains(marker.getPosition()); +}; + + +/** + * Returns the map that the cluster is associated with. + * + * @return {google.maps.Map} The map. + */ +Cluster.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Updates the cluster icon + */ +Cluster.prototype.updateIcon = function() { + var zoom = this.map_.getZoom(); + var mz = this.markerClusterer_.getMaxZoom(); + + if (mz && zoom > mz) { + // The zoom is greater than our max zoom so show all the markers in cluster. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.setMap(this.map_); + } + return; + } + + if (this.markers_.length < this.minClusterSize_) { + // Min cluster size not yet reached. + this.clusterIcon_.hide(); + return; + } + + var numStyles = this.markerClusterer_.getStyles().length; + var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); + this.clusterIcon_.setCenter(this.center_); + this.clusterIcon_.setSums(sums); + this.clusterIcon_.show(); +}; + + +/** + * A cluster icon + * + * @param {Cluster} cluster The cluster to be associated with. + * @param {Object} styles An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition: (string) The background postition x, y. + * @param {number=} opt_padding Optional padding to apply to the cluster icon. + * @constructor + * @extends google.maps.OverlayView + * @ignore + */ +function ClusterIcon(cluster, styles, opt_padding) { + cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); + + this.styles_ = styles; + this.padding_ = opt_padding || 0; + this.cluster_ = cluster; + this.center_ = null; + this.map_ = cluster.getMap(); + this.div_ = null; + this.sums_ = null; + this.visible_ = false; + + this.setMap(this.map_); +} + + +/** + * Triggers the clusterclick event and zoom's if the option is set. + * + * @param {google.maps.MouseEvent} event The event to propagate + */ +ClusterIcon.prototype.triggerClusterClick = function(event) { + var markerClusterer = this.cluster_.getMarkerClusterer(); + + // Trigger the clusterclick event. + google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_, event); + + if (markerClusterer.isZoomOnClick()) { + // Zoom into the cluster. + this.map_.fitBounds(this.cluster_.getBounds()); + } +}; + + +/** + * Adding the cluster icon to the dom. + * @ignore + */ +ClusterIcon.prototype.onAdd = function() { + this.div_ = document.createElement('DIV'); + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.innerHTML = this.sums_.text; + } + + var panes = this.getPanes(); + panes.overlayMouseTarget.appendChild(this.div_); + + var that = this; + var isDragging = false; + google.maps.event.addDomListener(this.div_, 'click', function(event) { + // Only perform click when not preceded by a drag + if (!isDragging) { + that.triggerClusterClick(event); + } + }); + google.maps.event.addDomListener(this.div_, 'mousedown', function() { + isDragging = false; + }); + google.maps.event.addDomListener(this.div_, 'mousemove', function() { + isDragging = true; + }); +}; + + +/** + * Returns the position to place the div dending on the latlng. + * + * @param {google.maps.LatLng} latlng The position in latlng. + * @return {google.maps.Point} The position in pixels. + * @private + */ +ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { + var pos = this.getProjection().fromLatLngToDivPixel(latlng); + + if (typeof this.iconAnchor_ === 'object' && this.iconAnchor_.length === 2) { + pos.x -= this.iconAnchor_[0]; + pos.y -= this.iconAnchor_[1]; + } else { + pos.x -= parseInt(this.width_ / 2, 10); + pos.y -= parseInt(this.height_ / 2, 10); + } + return pos; +}; + + +/** + * Draw the icon. + * @ignore + */ +ClusterIcon.prototype.draw = function() { + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.top = pos.y + 'px'; + this.div_.style.left = pos.x + 'px'; + } +}; + + +/** + * Hide the icon. + */ +ClusterIcon.prototype.hide = function() { + if (this.div_) { + this.div_.style.display = 'none'; + } + this.visible_ = false; +}; + + +/** + * Position and show the icon. + */ +ClusterIcon.prototype.show = function() { + if (this.div_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.style.display = ''; + } + this.visible_ = true; +}; + + +/** + * Remove the icon from the map + */ +ClusterIcon.prototype.remove = function() { + this.setMap(null); +}; + + +/** + * Implementation of the onRemove interface. + * @ignore + */ +ClusterIcon.prototype.onRemove = function() { + if (this.div_ && this.div_.parentNode) { + this.hide(); + this.div_.parentNode.removeChild(this.div_); + this.div_ = null; + } +}; + + +/** + * Set the sums of the icon. + * + * @param {Object} sums The sums containing: + * 'text': (string) The text to display in the icon. + * 'index': (number) The style index of the icon. + */ +ClusterIcon.prototype.setSums = function(sums) { + this.sums_ = sums; + this.text_ = sums.text; + this.index_ = sums.index; + if (this.div_) { + this.div_.innerHTML = sums.text; + } + + this.useStyle(); +}; + + +/** + * Sets the icon to the the styles. + */ +ClusterIcon.prototype.useStyle = function() { + var index = Math.max(0, this.sums_.index - 1); + index = Math.min(this.styles_.length - 1, index); + var style = this.styles_[index]; + this.url_ = style['url']; + this.height_ = style['height']; + this.width_ = style['width']; + this.textColor_ = style['textColor']; + this.anchor_ = style['anchor']; + this.textSize_ = style['textSize']; + this.backgroundPosition_ = style['backgroundPosition']; + this.iconAnchor_ = style['iconAnchor']; +}; + + +/** + * Sets the center of the icon. + * + * @param {google.maps.LatLng} center The latlng to set as the center. + */ +ClusterIcon.prototype.setCenter = function(center) { + this.center_ = center; +}; + + +/** + * Create the css text based on the position of the icon. + * + * @param {google.maps.Point} pos The position. + * @return {string} The css style text. + */ +ClusterIcon.prototype.createCss = function(pos) { + var style = []; + style.push('background-image:url(' + this.url_ + ');'); + var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; + style.push('background-position:' + backgroundPosition + ';'); + + if (typeof this.anchor_ === 'object') { + if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && + this.anchor_[0] < this.height_) { + style.push('height:' + (this.height_ - this.anchor_[0]) + + 'px; padding-top:' + this.anchor_[0] + 'px;'); + } else if (typeof this.anchor_[0] === 'number' && this.anchor_[0] < 0 && + -this.anchor_[0] < this.height_) { + style.push('height:' + this.height_ + 'px; line-height:' + (this.height_ + this.anchor_[0]) + + 'px;'); + } else { + style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + + 'px;'); + } + if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && + this.anchor_[1] < this.width_) { + style.push('width:' + (this.width_ - this.anchor_[1]) + + 'px; padding-left:' + this.anchor_[1] + 'px;'); + } else { + style.push('width:' + this.width_ + 'px; text-align:center;'); + } + } else { + style.push('height:' + this.height_ + 'px; line-height:' + + this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); + } + + var txtColor = this.textColor_ ? this.textColor_ : 'black'; + var txtSize = this.textSize_ ? this.textSize_ : 11; + + style.push('cursor:pointer; top:' + pos.y + 'px; left:' + + pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + + txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); + return style.join(''); +}; diff --git a/js/googleMapsMarkerClusterer/markerclustererplus.js b/js/googleMapsMarkerClusterer/markerclustererplus.js new file mode 100644 index 00000000..a3c98e28 --- /dev/null +++ b/js/googleMapsMarkerClusterer/markerclustererplus.js @@ -0,0 +1,1632 @@ +/** + * @name MarkerClustererPlus for Google Maps V3 + * @version 2.1.2 [May 28, 2014] + * @author Gary Little + * @fileoverview + * The library creates and manages per-zoom-level clusters for large amounts of markers. + *

+ * This is an enhanced V3 implementation of the + * V2 MarkerClusterer by Xiaoxi Wu. It is based on the + * V3 MarkerClusterer port by Luke Mahe. MarkerClustererPlus was created by Gary Little. + *

+ * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It + * adds support for the ignoreHidden, title, batchSizeIE, + * and calculator properties as well as support for four more events. It also allows + * greater control over the styling of the text that appears on the cluster marker. The + * documentation has been significantly improved and the overall code has been simplified and + * polished. Very large numbers of markers can now be managed without causing Javascript timeout + * errors on Internet Explorer. Note that the name of the clusterclick event has been + * deprecated. The new name is click, so please change your application code now. + */ + +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @name ClusterIconStyle + * @class This class represents the object for values in the styles array passed + * to the {@link MarkerClusterer} constructor. The element in this array that is used to + * style the cluster icon is determined by calling the calculator function. + * + * @property {string} url The URL of the cluster icon image file. Required. + * @property {number} height The display height (in pixels) of the cluster icon. Required. + * @property {number} width The display width (in pixels) of the cluster icon. Required. + * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to + * where the text label is to be centered and drawn. The format is [yoffset, xoffset] + * where yoffset increases as you go down from center and xoffset + * increases to the right of center. The default is [0, 0]. + * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the + * spot on the cluster icon that is to be aligned with the cluster position. The format is + * [yoffset, xoffset] where yoffset increases as you go down and + * xoffset increases to the right of the top-left corner of the icon. The default + * anchor position is the center of the cluster icon. + * @property {string} [textColor="black"] The color of the label text shown on the + * cluster icon. + * @property {number} [textSize=11] The size (in pixels) of the label text shown on the + * cluster icon. + * @property {string} [textDecoration="none"] The value of the CSS text-decoration + * property for the label text shown on the cluster icon. + * @property {string} [fontWeight="bold"] The value of the CSS font-weight + * property for the label text shown on the cluster icon. + * @property {string} [fontStyle="normal"] The value of the CSS font-style + * property for the label text shown on the cluster icon. + * @property {string} [fontFamily="Arial,sans-serif"] The value of the CSS font-family + * property for the label text shown on the cluster icon. + * @property {string} [backgroundPosition="0 0"] The position of the cluster icon image + * within the image defined by url. The format is "xpos ypos" + * (the same format as for the CSS background-position property). You must set + * this property appropriately when the image defined by url represents a sprite + * containing multiple images. Note that the position must be specified in px units. + */ +/** + * @name ClusterIconInfo + * @class This class is an object containing general information about a cluster icon. This is + * the object that a calculator function returns. + * + * @property {string} text The text of the label to be shown on the cluster icon. + * @property {number} index The index plus 1 of the element in the styles + * array to be used to style the cluster icon. + * @property {string} title The tooltip to display when the mouse moves over the cluster icon. + * If this value is undefined or "", title is set to the + * value of the title property passed to the MarkerClusterer. + */ +/** + * A cluster icon. + * + * @constructor + * @extends google.maps.OverlayView + * @param {Cluster} cluster The cluster with which the icon is to be associated. + * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons + * to use for various cluster sizes. + * @private + */ +function ClusterIcon(cluster, styles) { + cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); + + this.cluster_ = cluster; + this.className_ = cluster.getMarkerClusterer().getClusterClass(); + this.styles_ = styles; + this.center_ = null; + this.div_ = null; + this.sums_ = null; + this.visible_ = false; + + this.setMap(cluster.getMap()); // Note: this causes onAdd to be called +} + + +/** + * Adds the icon to the DOM. + */ +ClusterIcon.prototype.onAdd = function () { + var cClusterIcon = this; + var cMouseDownInCluster; + var cDraggingMapByCluster; + + this.div_ = document.createElement("div"); + this.div_.className = this.className_; + if (this.visible_) { + this.show(); + } + + this.getPanes().overlayMouseTarget.appendChild(this.div_); + + // Fix for Issue 157 + this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), "bounds_changed", function () { + cDraggingMapByCluster = cMouseDownInCluster; + }); + + google.maps.event.addDomListener(this.div_, "mousedown", function () { + cMouseDownInCluster = true; + cDraggingMapByCluster = false; + }); + + google.maps.event.addDomListener(this.div_, "click", function (e) { + cMouseDownInCluster = false; + if (!cDraggingMapByCluster) { + var theBounds; + var mz; + var mc = cClusterIcon.cluster_.getMarkerClusterer(); + /** + * This event is fired when a cluster marker is clicked. + * @name MarkerClusterer#click + * @param {Cluster} c The cluster that was clicked. + * @event + */ + google.maps.event.trigger(mc, "click", cClusterIcon.cluster_); + google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name + + // The default click handler follows. Disable it by setting + // the zoomOnClick property to false. + if (mc.getZoomOnClick()) { + // Zoom into the cluster. + mz = mc.getMaxZoom(); + theBounds = cClusterIcon.cluster_.getBounds(); + mc.getMap().fitBounds(theBounds); + // There is a fix for Issue 170 here: + setTimeout(function () { + mc.getMap().fitBounds(theBounds); + // Don't zoom beyond the max zoom level + if (mz !== null && (mc.getMap().getZoom() > mz)) { + mc.getMap().setZoom(mz + 1); + } + }, 100); + } + + // Prevent event propagation to the map: + e.cancelBubble = true; + if (e.stopPropagation) { + e.stopPropagation(); + } + } + }); + + google.maps.event.addDomListener(this.div_, "mouseover", function () { + var mc = cClusterIcon.cluster_.getMarkerClusterer(); + /** + * This event is fired when the mouse moves over a cluster marker. + * @name MarkerClusterer#mouseover + * @param {Cluster} c The cluster that the mouse moved over. + * @event + */ + google.maps.event.trigger(mc, "mouseover", cClusterIcon.cluster_); + }); + + google.maps.event.addDomListener(this.div_, "mouseout", function () { + var mc = cClusterIcon.cluster_.getMarkerClusterer(); + /** + * This event is fired when the mouse moves out of a cluster marker. + * @name MarkerClusterer#mouseout + * @param {Cluster} c The cluster that the mouse moved out of. + * @event + */ + google.maps.event.trigger(mc, "mouseout", cClusterIcon.cluster_); + }); +}; + + +/** + * Removes the icon from the DOM. + */ +ClusterIcon.prototype.onRemove = function () { + if (this.div_ && this.div_.parentNode) { + this.hide(); + google.maps.event.removeListener(this.boundsChangedListener_); + google.maps.event.clearInstanceListeners(this.div_); + this.div_.parentNode.removeChild(this.div_); + this.div_ = null; + } +}; + + +/** + * Draws the icon. + */ +ClusterIcon.prototype.draw = function () { + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.top = pos.y + "px"; + this.div_.style.left = pos.x + "px"; + } +}; + + +/** + * Hides the icon. + */ +ClusterIcon.prototype.hide = function () { + if (this.div_) { + this.div_.style.display = "none"; + } + this.visible_ = false; +}; + + +/** + * Positions and shows the icon. + */ +ClusterIcon.prototype.show = function () { + if (this.div_) { + var img = ""; + // NOTE: values must be specified in px units + var bp = this.backgroundPosition_.split(" "); + var spriteH = parseInt(bp[0].replace(/^\s+|\s+$/g, ""), 10); + var spriteV = parseInt(bp[1].replace(/^\s+|\s+$/g, ""), 10); + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + img = ""; + this.div_.innerHTML = img + "

" + this.sums_.text + "
"; + if (typeof this.sums_.title === "undefined" || this.sums_.title === "") { + this.div_.title = this.cluster_.getMarkerClusterer().getTitle(); + } else { + this.div_.title = this.sums_.title; + } + this.div_.style.display = ""; + } + this.visible_ = true; +}; + + +/** + * Sets the icon styles to the appropriate element in the styles array. + * + * @param {ClusterIconInfo} sums The icon label text and styles index. + */ +ClusterIcon.prototype.useStyle = function (sums) { + this.sums_ = sums; + var index = Math.max(0, sums.index - 1); + index = Math.min(this.styles_.length - 1, index); + var style = this.styles_[index]; + this.url_ = style.url; + this.height_ = style.height; + this.width_ = style.width; + this.anchorText_ = style.anchorText || [0, 0]; + this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)]; + this.textColor_ = style.textColor || "black"; + this.textSize_ = style.textSize || 11; + this.textDecoration_ = style.textDecoration || "none"; + this.fontWeight_ = style.fontWeight || "bold"; + this.fontStyle_ = style.fontStyle || "normal"; + this.fontFamily_ = style.fontFamily || "Arial,sans-serif"; + this.backgroundPosition_ = style.backgroundPosition || "0 0"; +}; + + +/** + * Sets the position at which to center the icon. + * + * @param {google.maps.LatLng} center The latlng to set as the center. + */ +ClusterIcon.prototype.setCenter = function (center) { + this.center_ = center; +}; + + +/** + * Creates the cssText style parameter based on the position of the icon. + * + * @param {google.maps.Point} pos The position of the icon. + * @return {string} The CSS style text. + */ +ClusterIcon.prototype.createCss = function (pos) { + var style = []; + style.push("cursor: pointer;"); + style.push("position: absolute; top: " + pos.y + "px; left: " + pos.x + "px;"); + style.push("width: " + this.width_ + "px; height: " + this.height_ + "px;"); + return style.join(""); +}; + + +/** + * Returns the position at which to place the DIV depending on the latlng. + * + * @param {google.maps.LatLng} latlng The position in latlng. + * @return {google.maps.Point} The position in pixels. + */ +ClusterIcon.prototype.getPosFromLatLng_ = function (latlng) { + var pos = this.getProjection().fromLatLngToDivPixel(latlng); + pos.x -= this.anchorIcon_[1]; + pos.y -= this.anchorIcon_[0]; + pos.x = parseInt(pos.x, 10); + pos.y = parseInt(pos.y, 10); + return pos; +}; + + +/** + * Creates a single cluster that manages a group of proximate markers. + * Used internally, do not call this constructor directly. + * @constructor + * @param {MarkerClusterer} mc The MarkerClusterer object with which this + * cluster is associated. + */ +function Cluster(mc) { + this.markerClusterer_ = mc; + this.map_ = mc.getMap(); + this.gridSize_ = mc.getGridSize(); + this.minClusterSize_ = mc.getMinimumClusterSize(); + this.averageCenter_ = mc.getAverageCenter(); + this.markers_ = []; + this.center_ = null; + this.bounds_ = null; + this.clusterIcon_ = new ClusterIcon(this, mc.getStyles()); +} + + +/** + * Returns the number of markers managed by the cluster. You can call this from + * a click, mouseover, or mouseout event handler + * for the MarkerClusterer object. + * + * @return {number} The number of markers in the cluster. + */ +Cluster.prototype.getSize = function () { + return this.markers_.length; +}; + + +/** + * Returns the array of markers managed by the cluster. You can call this from + * a click, mouseover, or mouseout event handler + * for the MarkerClusterer object. + * + * @return {Array} The array of markers in the cluster. + */ +Cluster.prototype.getMarkers = function () { + return this.markers_; +}; + + +/** + * Returns the center of the cluster. You can call this from + * a click, mouseover, or mouseout event handler + * for the MarkerClusterer object. + * + * @return {google.maps.LatLng} The center of the cluster. + */ +Cluster.prototype.getCenter = function () { + return this.center_; +}; + + +/** + * Returns the map with which the cluster is associated. + * + * @return {google.maps.Map} The map. + * @ignore + */ +Cluster.prototype.getMap = function () { + return this.map_; +}; + + +/** + * Returns the MarkerClusterer object with which the cluster is associated. + * + * @return {MarkerClusterer} The associated marker clusterer. + * @ignore + */ +Cluster.prototype.getMarkerClusterer = function () { + return this.markerClusterer_; +}; + + +/** + * Returns the bounds of the cluster. + * + * @return {google.maps.LatLngBounds} the cluster bounds. + * @ignore + */ +Cluster.prototype.getBounds = function () { + var i; + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + var markers = this.getMarkers(); + for (i = 0; i < markers.length; i++) { + bounds.extend(markers[i].getPosition()); + } + return bounds; +}; + + +/** + * Removes the cluster from the map. + * + * @ignore + */ +Cluster.prototype.remove = function () { + this.clusterIcon_.setMap(null); + this.markers_ = []; + delete this.markers_; +}; + + +/** + * Adds a marker to the cluster. + * + * @param {google.maps.Marker} marker The marker to be added. + * @return {boolean} True if the marker was added. + * @ignore + */ +Cluster.prototype.addMarker = function (marker) { + var i; + var mCount; + var mz; + + if (this.isMarkerAlreadyAdded_(marker)) { + return false; + } + + if (!this.center_) { + this.center_ = marker.getPosition(); + this.calculateBounds_(); + } else { + if (this.averageCenter_) { + var l = this.markers_.length + 1; + var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l; + var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l; + this.center_ = new google.maps.LatLng(lat, lng); + this.calculateBounds_(); + } + } + + marker.isAdded = true; + this.markers_.push(marker); + + mCount = this.markers_.length; + mz = this.markerClusterer_.getMaxZoom(); + if (mz !== null && this.map_.getZoom() > mz) { + // Zoomed in past max zoom, so show the marker. + if (marker.getMap() !== this.map_) { + marker.setMap(this.map_); + } + } else if (mCount < this.minClusterSize_) { + // Min cluster size not reached so show the marker. + if (marker.getMap() !== this.map_) { + marker.setMap(this.map_); + } + } else if (mCount === this.minClusterSize_) { + // Hide the markers that were showing. + for (i = 0; i < mCount; i++) { + this.markers_[i].setMap(null); + } + } else { + marker.setMap(null); + } + + this.updateIcon_(); + return true; +}; + + +/** + * Determines if a marker lies within the cluster's bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker lies in the bounds. + * @ignore + */ +Cluster.prototype.isMarkerInClusterBounds = function (marker) { + return this.bounds_.contains(marker.getPosition()); +}; + + +/** + * Calculates the extended bounds of the cluster with the grid. + */ +Cluster.prototype.calculateBounds_ = function () { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); +}; + + +/** + * Updates the cluster icon. + */ +Cluster.prototype.updateIcon_ = function () { + var mCount = this.markers_.length; + var mz = this.markerClusterer_.getMaxZoom(); + + if (mz !== null && this.map_.getZoom() > mz) { + this.clusterIcon_.hide(); + return; + } + + if (mCount < this.minClusterSize_) { + // Min cluster size not yet reached. + this.clusterIcon_.hide(); + return; + } + + var numStyles = this.markerClusterer_.getStyles().length; + var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); + this.clusterIcon_.setCenter(this.center_); + this.clusterIcon_.useStyle(sums); + this.clusterIcon_.show(); +}; + + +/** + * Determines if a marker has already been added to the cluster. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker has already been added. + */ +Cluster.prototype.isMarkerAlreadyAdded_ = function (marker) { + var i; + if (this.markers_.indexOf) { + return this.markers_.indexOf(marker) !== -1; + } else { + for (i = 0; i < this.markers_.length; i++) { + if (marker === this.markers_[i]) { + return true; + } + } + } + return false; +}; + + +/** + * @name MarkerClustererOptions + * @class This class represents the optional parameter passed to + * the {@link MarkerClusterer} constructor. + * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square. + * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or + * null if clustering is to be enabled at all zoom levels. + * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is + * clicked. You may want to set this to false if you have installed a handler + * for the click event and it deals with zooming on its own. + * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be + * the average position of all markers in the cluster. If set to false, the + * cluster marker is positioned at the location of the first marker added to the cluster. + * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster + * before the markers are hidden and a cluster marker appears. + * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You + * may want to set this to true to ensure that hidden markers are not included + * in the marker count that appears on a cluster marker (this count is the value of the + * text property of the result returned by the default calculator). + * If set to true and you change the visibility of a marker being clustered, be + * sure to also call MarkerClusterer.repaint(). + * @property {string} [title=""] The tooltip to display when the mouse moves over a cluster + * marker. (Alternatively, you can use a custom calculator function to specify a + * different tooltip for each cluster marker.) + * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine + * the text to be displayed on a cluster marker and the index indicating which style to use + * for the cluster marker. The input parameters for the function are (1) the array of markers + * represented by a cluster marker and (2) the number of cluster icon styles. It returns a + * {@link ClusterIconInfo} object. The default calculator returns a + * text property which is the number of markers in the cluster and an + * index property which is one higher than the lowest integer such that + * 10^i exceeds the number of markers in the cluster, or the size of the styles + * array, whichever is less. The styles array element used has an index of + * index minus 1. For example, the default calculator returns a + * text value of "125" and an index of 3 + * for a cluster icon representing 125 markers so the element used in the styles + * array is 2. A calculator may also return a title + * property that contains the text of the tooltip to be used for the cluster marker. If + * title is not defined, the tooltip is set to the value of the title + * property for the MarkerClusterer. + * @property {string} [clusterClass="cluster"] The name of the CSS class defining general styles + * for the cluster markers. Use this class to define CSS styles that are not set up by the code + * that processes the styles array. + * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles + * of the cluster markers to be used. The element to be used to style a given cluster marker + * is determined by the function defined by the calculator property. + * The default is an array of {@link ClusterIconStyle} elements whose properties are derived + * from the values for imagePath, imageExtension, and + * imageSizes. + * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that + * have sizes that are some multiple (typically double) of their actual display size. Icons such + * as these look better when viewed on high-resolution monitors such as Apple's Retina displays. + * Note: if this property is true, sprites cannot be used as cluster icons. + * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the + * number of markers to be processed in a single batch when using a browser other than + * Internet Explorer (for Internet Explorer, use the batchSizeIE property instead). + * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is + * being used, markers are processed in several batches with a small delay inserted between + * each batch in an attempt to avoid Javascript timeout errors. Set this property to the + * number of markers to be processed in a single batch; select as high a number as you can + * without causing a timeout error in the browser. This number might need to be as low as 100 + * if 15,000 markers are being managed, for example. + * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH] + * The full URL of the root name of the group of image files to use for cluster icons. + * The complete file name is of the form imagePathn.imageExtension + * where n is the image file number (1, 2, etc.). + * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION] + * The extension name for the cluster icon image files (e.g., "png" or + * "jpg"). + * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES] + * An array of numbers containing the widths of the group of + * imagePathn.imageExtension image files. + * (The images are assumed to be square.) + */ +/** + * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}. + * @constructor + * @extends google.maps.OverlayView + * @param {google.maps.Map} map The Google map to attach to. + * @param {Array.} [opt_markers] The markers to be added to the cluster. + * @param {MarkerClustererOptions} [opt_options] The optional parameters. + */ +function MarkerClusterer(map, opt_markers, opt_options) { + // MarkerClusterer implements google.maps.OverlayView interface. We use the + // extend function to extend MarkerClusterer with google.maps.OverlayView + // because it might not always be available when the code is defined so we + // look for it at the last possible moment. If it doesn't exist now then + // there is no point going ahead :) + this.extend(MarkerClusterer, google.maps.OverlayView); + + opt_markers = opt_markers || []; + opt_options = opt_options || {}; + + this.markers_ = []; + this.clusters_ = []; + this.listeners_ = []; + this.activeMap_ = null; + this.ready_ = false; + + this.gridSize_ = opt_options.gridSize || 60; + this.minClusterSize_ = opt_options.minimumClusterSize || 2; + this.maxZoom_ = opt_options.maxZoom || null; + this.styles_ = opt_options.styles || []; + this.title_ = opt_options.title || ""; + this.zoomOnClick_ = true; + if (opt_options.zoomOnClick !== undefined) { + this.zoomOnClick_ = opt_options.zoomOnClick; + } + this.averageCenter_ = false; + if (opt_options.averageCenter !== undefined) { + this.averageCenter_ = opt_options.averageCenter; + } + this.ignoreHidden_ = false; + if (opt_options.ignoreHidden !== undefined) { + this.ignoreHidden_ = opt_options.ignoreHidden; + } + this.enableRetinaIcons_ = false; + if (opt_options.enableRetinaIcons !== undefined) { + this.enableRetinaIcons_ = opt_options.enableRetinaIcons; + } + this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH; + this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION; + this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES; + this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR; + this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE; + this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE; + this.clusterClass_ = opt_options.clusterClass || "cluster"; + + if (navigator.userAgent.toLowerCase().indexOf("msie") !== -1) { + // Try to avoid IE timeout when processing a huge number of markers: + this.batchSize_ = this.batchSizeIE_; + } + + this.setupStyles_(); + + this.addMarkers(opt_markers, true); + this.setMap(map); // Note: this causes onAdd to be called +} + + +/** + * Implementation of the onAdd interface method. + * @ignore + */ +MarkerClusterer.prototype.onAdd = function () { + var cMarkerClusterer = this; + + this.activeMap_ = this.getMap(); + this.ready_ = true; + + this.repaint(); + + // Add the map event listeners + this.listeners_ = [ + google.maps.event.addListener(this.getMap(), "zoom_changed", function () { + cMarkerClusterer.resetViewport_(false); + // Workaround for this Google bug: when map is at level 0 and "-" of + // zoom slider is clicked, a "zoom_changed" event is fired even though + // the map doesn't zoom out any further. In this situation, no "idle" + // event is triggered so the cluster markers that have been removed + // do not get redrawn. Same goes for a zoom in at maxZoom. + if (this.getZoom() === (this.get("minZoom") || 0) || this.getZoom() === this.get("maxZoom")) { + google.maps.event.trigger(this, "idle"); + } + }), + google.maps.event.addListener(this.getMap(), "idle", function () { + cMarkerClusterer.redraw_(); + }) + ]; +}; + + +/** + * Implementation of the onRemove interface method. + * Removes map event listeners and all cluster icons from the DOM. + * All managed markers are also put back on the map. + * @ignore + */ +MarkerClusterer.prototype.onRemove = function () { + var i; + + // Put all the managed markers back on the map: + for (i = 0; i < this.markers_.length; i++) { + if (this.markers_[i].getMap() !== this.activeMap_) { + this.markers_[i].setMap(this.activeMap_); + } + } + + // Remove all clusters: + for (i = 0; i < this.clusters_.length; i++) { + this.clusters_[i].remove(); + } + this.clusters_ = []; + + // Remove map event listeners: + for (i = 0; i < this.listeners_.length; i++) { + google.maps.event.removeListener(this.listeners_[i]); + } + this.listeners_ = []; + + this.activeMap_ = null; + this.ready_ = false; +}; + + +/** + * Implementation of the draw interface method. + * @ignore + */ +MarkerClusterer.prototype.draw = function () {}; + + +/** + * Sets up the styles object. + */ +MarkerClusterer.prototype.setupStyles_ = function () { + var i, size; + if (this.styles_.length > 0) { + return; + } + + for (i = 0; i < this.imageSizes_.length; i++) { + size = this.imageSizes_[i]; + this.styles_.push({ + url: this.imagePath_ + (i + 1) + "." + this.imageExtension_, + height: size, + width: size + }); + } +}; + + +/** + * Fits the map to the bounds of the markers managed by the clusterer. + */ +MarkerClusterer.prototype.fitMapToMarkers = function () { + var i; + var markers = this.getMarkers(); + var bounds = new google.maps.LatLngBounds(); + for (i = 0; i < markers.length; i++) { + bounds.extend(markers[i].getPosition()); + } + + this.getMap().fitBounds(bounds); +}; + + +/** + * Returns the value of the gridSize property. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getGridSize = function () { + return this.gridSize_; +}; + + +/** + * Sets the value of the gridSize property. + * + * @param {number} gridSize The grid size. + */ +MarkerClusterer.prototype.setGridSize = function (gridSize) { + this.gridSize_ = gridSize; +}; + + +/** + * Returns the value of the minimumClusterSize property. + * + * @return {number} The minimum cluster size. + */ +MarkerClusterer.prototype.getMinimumClusterSize = function () { + return this.minClusterSize_; +}; + +/** + * Sets the value of the minimumClusterSize property. + * + * @param {number} minimumClusterSize The minimum cluster size. + */ +MarkerClusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) { + this.minClusterSize_ = minimumClusterSize; +}; + + +/** + * Returns the value of the maxZoom property. + * + * @return {number} The maximum zoom level. + */ +MarkerClusterer.prototype.getMaxZoom = function () { + return this.maxZoom_; +}; + + +/** + * Sets the value of the maxZoom property. + * + * @param {number} maxZoom The maximum zoom level. + */ +MarkerClusterer.prototype.setMaxZoom = function (maxZoom) { + this.maxZoom_ = maxZoom; +}; + + +/** + * Returns the value of the styles property. + * + * @return {Array} The array of styles defining the cluster markers to be used. + */ +MarkerClusterer.prototype.getStyles = function () { + return this.styles_; +}; + + +/** + * Sets the value of the styles property. + * + * @param {Array.} styles The array of styles to use. + */ +MarkerClusterer.prototype.setStyles = function (styles) { + this.styles_ = styles; +}; + + +/** + * Returns the value of the title property. + * + * @return {string} The content of the title text. + */ +MarkerClusterer.prototype.getTitle = function () { + return this.title_; +}; + + +/** + * Sets the value of the title property. + * + * @param {string} title The value of the title property. + */ +MarkerClusterer.prototype.setTitle = function (title) { + this.title_ = title; +}; + + +/** + * Returns the value of the zoomOnClick property. + * + * @return {boolean} True if zoomOnClick property is set. + */ +MarkerClusterer.prototype.getZoomOnClick = function () { + return this.zoomOnClick_; +}; + + +/** + * Sets the value of the zoomOnClick property. + * + * @param {boolean} zoomOnClick The value of the zoomOnClick property. + */ +MarkerClusterer.prototype.setZoomOnClick = function (zoomOnClick) { + this.zoomOnClick_ = zoomOnClick; +}; + + +/** + * Returns the value of the averageCenter property. + * + * @return {boolean} True if averageCenter property is set. + */ +MarkerClusterer.prototype.getAverageCenter = function () { + return this.averageCenter_; +}; + + +/** + * Sets the value of the averageCenter property. + * + * @param {boolean} averageCenter The value of the averageCenter property. + */ +MarkerClusterer.prototype.setAverageCenter = function (averageCenter) { + this.averageCenter_ = averageCenter; +}; + + +/** + * Returns the value of the ignoreHidden property. + * + * @return {boolean} True if ignoreHidden property is set. + */ +MarkerClusterer.prototype.getIgnoreHidden = function () { + return this.ignoreHidden_; +}; + + +/** + * Sets the value of the ignoreHidden property. + * + * @param {boolean} ignoreHidden The value of the ignoreHidden property. + */ +MarkerClusterer.prototype.setIgnoreHidden = function (ignoreHidden) { + this.ignoreHidden_ = ignoreHidden; +}; + + +/** + * Returns the value of the enableRetinaIcons property. + * + * @return {boolean} True if enableRetinaIcons property is set. + */ +MarkerClusterer.prototype.getEnableRetinaIcons = function () { + return this.enableRetinaIcons_; +}; + + +/** + * Sets the value of the enableRetinaIcons property. + * + * @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property. + */ +MarkerClusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) { + this.enableRetinaIcons_ = enableRetinaIcons; +}; + + +/** + * Returns the value of the imageExtension property. + * + * @return {string} The value of the imageExtension property. + */ +MarkerClusterer.prototype.getImageExtension = function () { + return this.imageExtension_; +}; + + +/** + * Sets the value of the imageExtension property. + * + * @param {string} imageExtension The value of the imageExtension property. + */ +MarkerClusterer.prototype.setImageExtension = function (imageExtension) { + this.imageExtension_ = imageExtension; +}; + + +/** + * Returns the value of the imagePath property. + * + * @return {string} The value of the imagePath property. + */ +MarkerClusterer.prototype.getImagePath = function () { + return this.imagePath_; +}; + + +/** + * Sets the value of the imagePath property. + * + * @param {string} imagePath The value of the imagePath property. + */ +MarkerClusterer.prototype.setImagePath = function (imagePath) { + this.imagePath_ = imagePath; +}; + + +/** + * Returns the value of the imageSizes property. + * + * @return {Array} The value of the imageSizes property. + */ +MarkerClusterer.prototype.getImageSizes = function () { + return this.imageSizes_; +}; + + +/** + * Sets the value of the imageSizes property. + * + * @param {Array} imageSizes The value of the imageSizes property. + */ +MarkerClusterer.prototype.setImageSizes = function (imageSizes) { + this.imageSizes_ = imageSizes; +}; + + +/** + * Returns the value of the calculator property. + * + * @return {function} the value of the calculator property. + */ +MarkerClusterer.prototype.getCalculator = function () { + return this.calculator_; +}; + + +/** + * Sets the value of the calculator property. + * + * @param {function(Array., number)} calculator The value + * of the calculator property. + */ +MarkerClusterer.prototype.setCalculator = function (calculator) { + this.calculator_ = calculator; +}; + + +/** + * Returns the value of the batchSizeIE property. + * + * @return {number} the value of the batchSizeIE property. + */ +MarkerClusterer.prototype.getBatchSizeIE = function () { + return this.batchSizeIE_; +}; + + +/** + * Sets the value of the batchSizeIE property. + * + * @param {number} batchSizeIE The value of the batchSizeIE property. + */ +MarkerClusterer.prototype.setBatchSizeIE = function (batchSizeIE) { + this.batchSizeIE_ = batchSizeIE; +}; + + +/** + * Returns the value of the clusterClass property. + * + * @return {string} the value of the clusterClass property. + */ +MarkerClusterer.prototype.getClusterClass = function () { + return this.clusterClass_; +}; + + +/** + * Sets the value of the clusterClass property. + * + * @param {string} clusterClass The value of the clusterClass property. + */ +MarkerClusterer.prototype.setClusterClass = function (clusterClass) { + this.clusterClass_ = clusterClass; +}; + + +/** + * Returns the array of markers managed by the clusterer. + * + * @return {Array} The array of markers managed by the clusterer. + */ +MarkerClusterer.prototype.getMarkers = function () { + return this.markers_; +}; + + +/** + * Returns the number of markers managed by the clusterer. + * + * @return {number} The number of markers. + */ +MarkerClusterer.prototype.getTotalMarkers = function () { + return this.markers_.length; +}; + + +/** + * Returns the current array of clusters formed by the clusterer. + * + * @return {Array} The array of clusters formed by the clusterer. + */ +MarkerClusterer.prototype.getClusters = function () { + return this.clusters_; +}; + + +/** + * Returns the number of clusters formed by the clusterer. + * + * @return {number} The number of clusters formed by the clusterer. + */ +MarkerClusterer.prototype.getTotalClusters = function () { + return this.clusters_.length; +}; + + +/** + * Adds a marker to the clusterer. The clusters are redrawn unless + * opt_nodraw is set to true. + * + * @param {google.maps.Marker} marker The marker to add. + * @param {boolean} [opt_nodraw] Set to true to prevent redrawing. + */ +MarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) { + this.pushMarkerTo_(marker); + if (!opt_nodraw) { + this.redraw_(); + } +}; + + +/** + * Adds an array of markers to the clusterer. The clusters are redrawn unless + * opt_nodraw is set to true. + * + * @param {Array.} markers The markers to add. + * @param {boolean} [opt_nodraw] Set to true to prevent redrawing. + */ +MarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) { + var key; + for (key in markers) { + if (markers.hasOwnProperty(key)) { + this.pushMarkerTo_(markers[key]); + } + } + if (!opt_nodraw) { + this.redraw_(); + } +}; + + +/** + * Pushes a marker to the clusterer. + * + * @param {google.maps.Marker} marker The marker to add. + */ +MarkerClusterer.prototype.pushMarkerTo_ = function (marker) { + // If the marker is draggable add a listener so we can update the clusters on the dragend: + if (marker.getDraggable()) { + var cMarkerClusterer = this; + google.maps.event.addListener(marker, "dragend", function () { + if (cMarkerClusterer.ready_) { + this.isAdded = false; + cMarkerClusterer.repaint(); + } + }); + } + marker.isAdded = false; + this.markers_.push(marker); +}; + + +/** + * Removes a marker from the cluster. The clusters are redrawn unless + * opt_nodraw is set to true. Returns true if the + * marker was removed from the clusterer. + * + * @param {google.maps.Marker} marker The marker to remove. + * @param {boolean} [opt_nodraw] Set to true to prevent redrawing. + * @return {boolean} True if the marker was removed from the clusterer. + */ +MarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw) { + var removed = this.removeMarker_(marker); + + if (!opt_nodraw && removed) { + this.repaint(); + } + + return removed; +}; + + +/** + * Removes an array of markers from the cluster. The clusters are redrawn unless + * opt_nodraw is set to true. Returns true if markers + * were removed from the clusterer. + * + * @param {Array.} markers The markers to remove. + * @param {boolean} [opt_nodraw] Set to true to prevent redrawing. + * @return {boolean} True if markers were removed from the clusterer. + */ +MarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw) { + var i, r; + var removed = false; + + for (i = 0; i < markers.length; i++) { + r = this.removeMarker_(markers[i]); + removed = removed || r; + } + + if (!opt_nodraw && removed) { + this.repaint(); + } + + return removed; +}; + + +/** + * Removes a marker and returns true if removed, false if not. + * + * @param {google.maps.Marker} marker The marker to remove + * @return {boolean} Whether the marker was removed or not + */ +MarkerClusterer.prototype.removeMarker_ = function (marker) { + var i; + var index = -1; + if (this.markers_.indexOf) { + index = this.markers_.indexOf(marker); + } else { + for (i = 0; i < this.markers_.length; i++) { + if (marker === this.markers_[i]) { + index = i; + break; + } + } + } + + if (index === -1) { + // Marker is not in our list of markers, so do nothing: + return false; + } + + marker.setMap(null); + this.markers_.splice(index, 1); // Remove the marker from the list of managed markers + return true; +}; + + +/** + * Removes all clusters and markers from the map and also removes all markers + * managed by the clusterer. + */ +MarkerClusterer.prototype.clearMarkers = function () { + this.resetViewport_(true); + this.markers_ = []; +}; + + +/** + * Recalculates and redraws all the marker clusters from scratch. + * Call this after changing any properties. + */ +MarkerClusterer.prototype.repaint = function () { + var oldClusters = this.clusters_.slice(); + this.clusters_ = []; + this.resetViewport_(false); + this.redraw_(); + + // Remove the old clusters. + // Do it in a timeout to prevent blinking effect. + setTimeout(function () { + var i; + for (i = 0; i < oldClusters.length; i++) { + oldClusters[i].remove(); + } + }, 0); +}; + + +/** + * Returns the current bounds extended by the grid size. + * + * @param {google.maps.LatLngBounds} bounds The bounds to extend. + * @return {google.maps.LatLngBounds} The extended bounds. + * @ignore + */ +MarkerClusterer.prototype.getExtendedBounds = function (bounds) { + var projection = this.getProjection(); + + // Turn the bounds into latlng. + var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), + bounds.getNorthEast().lng()); + var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), + bounds.getSouthWest().lng()); + + // Convert the points to pixels and the extend out by the grid size. + var trPix = projection.fromLatLngToDivPixel(tr); + trPix.x += this.gridSize_; + trPix.y -= this.gridSize_; + + var blPix = projection.fromLatLngToDivPixel(bl); + blPix.x -= this.gridSize_; + blPix.y += this.gridSize_; + + // Convert the pixel points back to LatLng + var ne = projection.fromDivPixelToLatLng(trPix); + var sw = projection.fromDivPixelToLatLng(blPix); + + // Extend the bounds to contain the new bounds. + bounds.extend(ne); + bounds.extend(sw); + + return bounds; +}; + + +/** + * Redraws all the clusters. + */ +MarkerClusterer.prototype.redraw_ = function () { + this.createClusters_(0); +}; + + +/** + * Removes all clusters from the map. The markers are also removed from the map + * if opt_hide is set to true. + * + * @param {boolean} [opt_hide] Set to true to also remove the markers + * from the map. + */ +MarkerClusterer.prototype.resetViewport_ = function (opt_hide) { + var i, marker; + // Remove all the clusters + for (i = 0; i < this.clusters_.length; i++) { + this.clusters_[i].remove(); + } + this.clusters_ = []; + + // Reset the markers to not be added and to be removed from the map. + for (i = 0; i < this.markers_.length; i++) { + marker = this.markers_[i]; + marker.isAdded = false; + if (opt_hide) { + marker.setMap(null); + } + } +}; + + +/** + * Calculates the distance between two latlng locations in km. + * + * @param {google.maps.LatLng} p1 The first lat lng point. + * @param {google.maps.LatLng} p2 The second lat lng point. + * @return {number} The distance between the two points in km. + * @see http://www.movable-type.co.uk/scripts/latlong.html +*/ +MarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) { + var R = 6371; // Radius of the Earth in km + var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; + var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return d; +}; + + +/** + * Determines if a marker is contained in a bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @param {google.maps.LatLngBounds} bounds The bounds to check against. + * @return {boolean} True if the marker is in the bounds. + */ +MarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) { + return bounds.contains(marker.getPosition()); +}; + + +/** + * Adds a marker to a cluster, or creates a new cluster. + * + * @param {google.maps.Marker} marker The marker to add. + */ +MarkerClusterer.prototype.addToClosestCluster_ = function (marker) { + var i, d, cluster, center; + var distance = 40000; // Some large number + var clusterToAddTo = null; + for (i = 0; i < this.clusters_.length; i++) { + cluster = this.clusters_[i]; + center = cluster.getCenter(); + if (center) { + d = this.distanceBetweenPoints_(center, marker.getPosition()); + if (d < distance) { + distance = d; + clusterToAddTo = cluster; + } + } + } + + if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { + clusterToAddTo.addMarker(marker); + } else { + cluster = new Cluster(this); + cluster.addMarker(marker); + this.clusters_.push(cluster); + } +}; + + +/** + * Creates the clusters. This is done in batches to avoid timeout errors + * in some browsers when there is a huge number of markers. + * + * @param {number} iFirst The index of the first marker in the batch of + * markers to be added to clusters. + */ +MarkerClusterer.prototype.createClusters_ = function (iFirst) { + var i, marker; + var mapBounds; + var cMarkerClusterer = this; + if (!this.ready_) { + return; + } + + // Cancel previous batch processing if we're working on the first batch: + if (iFirst === 0) { + /** + * This event is fired when the MarkerClusterer begins + * clustering markers. + * @name MarkerClusterer#clusteringbegin + * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered. + * @event + */ + google.maps.event.trigger(this, "clusteringbegin", this); + + if (typeof this.timerRefStatic !== "undefined") { + clearTimeout(this.timerRefStatic); + delete this.timerRefStatic; + } + } + + // Get our current map view bounds. + // Create a new bounds object so we don't affect the map. + // + // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug: + if (this.getMap().getZoom() > 3) { + mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(), + this.getMap().getBounds().getNorthEast()); + } else { + mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625)); + } + var bounds = this.getExtendedBounds(mapBounds); + + var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length); + + for (i = iFirst; i < iLast; i++) { + marker = this.markers_[i]; + if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { + if (!this.ignoreHidden_ || (this.ignoreHidden_ && marker.getVisible())) { + this.addToClosestCluster_(marker); + } + } + } + + if (iLast < this.markers_.length) { + this.timerRefStatic = setTimeout(function () { + cMarkerClusterer.createClusters_(iLast); + }, 0); + } else { + delete this.timerRefStatic; + + /** + * This event is fired when the MarkerClusterer stops + * clustering markers. + * @name MarkerClusterer#clusteringend + * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered. + * @event + */ + google.maps.event.trigger(this, "clusteringend", this); + } +}; + + +/** + * Extends an object's prototype by another's. + * + * @param {Object} obj1 The object to be extended. + * @param {Object} obj2 The object to extend with. + * @return {Object} The new extended object. + * @ignore + */ +MarkerClusterer.prototype.extend = function (obj1, obj2) { + return (function (object) { + var property; + for (property in object.prototype) { + this.prototype[property] = object.prototype[property]; + } + return this; + }).apply(obj1, [obj2]); +}; + + +/** + * The default function for determining the label text and style + * for a cluster icon. + * + * @param {Array.} markers The array of markers represented by the cluster. + * @param {number} numStyles The number of marker styles available. + * @return {ClusterIconInfo} The information resource for the cluster. + * @constant + * @ignore + */ +MarkerClusterer.CALCULATOR = function (markers, numStyles) { + var index = 0; + var title = ""; + var count = markers.length.toString(); + + var dv = count; + while (dv !== 0) { + dv = parseInt(dv / 10, 10); + index++; + } + + index = Math.min(index, numStyles); + return { + text: count, + index: index, + title: title + }; +}; + + +/** + * The number of markers to process in one batch. + * + * @type {number} + * @constant + */ +MarkerClusterer.BATCH_SIZE = 2000; + + +/** + * The number of markers to process in one batch (IE only). + * + * @type {number} + * @constant + */ +MarkerClusterer.BATCH_SIZE_IE = 500; + + +/** + * The default root name for the marker cluster images. + * + * @type {string} + * @constant + */ +MarkerClusterer.IMAGE_PATH = "../images/m"; + + +/** + * The default extension name for the marker cluster images. + * + * @type {string} + * @constant + */ +MarkerClusterer.IMAGE_EXTENSION = "png"; + + +/** + * The default array of sizes for the marker cluster images. + * + * @type {Array.} + * @constant + */ +MarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90]; diff --git a/js/googleMapsMarkerClusterer/reference.html b/js/googleMapsMarkerClusterer/reference.html new file mode 100644 index 00000000..722e67bc --- /dev/null +++ b/js/googleMapsMarkerClusterer/reference.html @@ -0,0 +1,452 @@ + + + + + MarkerClusterer for Google Maps v3 version 1.0 Reference + + + + +

MarkerClusterer for Google Maps v3

+

+The library creates and manages per-zoom-level clusters for large amounts of +markers. +
+This is a v3 implementation of the +v2 MarkerClusterer.

+

For a description and examples of how to use this library, check out the how-to.

+ +

class MarkerClusterer

+

This class extends google.maps.OverlayView.

+ +

Constructor

+ + + + + + + + + + + + + + + + +
ConstructorDescription
MarkerClusterer(map:google.maps.Map, opt_markers:Array.<google.maps.Marker>, opt_options:Object)A Marker Clusterer that clusters markers.
+ +

Options

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
gridSizenumberThe grid size of a cluster in pixels.
maxZoomnumberThe maximum zoom level that a marker can be part of a cluster.
zoomOnClickbooleanWhether the default behaviour of clicking on a cluster is to zoom into it.
averageCenterbooleanWhether the center of each cluster should be the average of all markers in the cluster.
minimumClusterSizenumberThe minimum number of markers to be in a cluster before the markers are hidden and a count is shown.
stylesobjectAn object that has style properties.
+ +

Styles

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
urlstringThe image url.
heightnumberThe image height.
widthnumberThe image width.
anchorArrayThe anchor position of the label text.
textColorstringThe text color.
textSizenumberThe text size.
backgroundPositionstringThe position of the backgound x, y.
iconAnchorArrayThe anchor position of the icon x, y.
+ +

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodsReturn ValueDescription
addMarker(marker:google.maps.Marker, opt_nodraw:boolean)NoneAdds a marker to the clusterer and redraws if needed.
addMarkers(markers:Array.<google.maps.Marker>, opt_nodraw:boolean)NoneAdds an array of markers to the clusterer.
clearMarkers()NoneClears all clusters and markers from the clusterer.
getCalculator()function(Array|number)Gets the calculator function.
getExtendedBounds(bounds:google.maps.LatLngBounds)google.maps.LatLngBoundsExtends a bounds object by the grid size.
getGridSize()numberGets the size of the grid.
getMap()google.maps.MapGets the google map that the clusterer is associated with.
getMarkers()Array.Gets the array of markers in the clusterer.
getMaxZoom()numberGets the max zoom for the clusterer.
getStyles()ObjectGets the styles.
getTotalClusters()numberGets the number of clusters in the clusterer.
getTotalMarkers()Array.Gets the array of markers in the clusterer.
isZoomOnClick()booleanWhether zoom on click is set.
redraw()NoneRedraws the clusters.
removeMarker(marker:google.maps.Marker)booleanRemoves a marker from the cluster.
resetViewport()NoneClears all existing clusters and recreates them.
setCalculator(calculator:function(Array|number))NoneSets the calculator function.
setGridSize(size:number)NoneSets the size of the grid.
setMap(map:google.maps.Map)NoneSets the google map that the clusterer is associated with.
setMaxZoom(maxZoom:number)NoneSets the max zoom for the clusterer.
setStyles(styles:Object)NoneSets the styles.
+ + \ No newline at end of file diff --git a/js/js-cookie-master/.gitignore b/js/js-cookie-master/.gitignore new file mode 100644 index 00000000..15812b0e --- /dev/null +++ b/js/js-cookie-master/.gitignore @@ -0,0 +1,4 @@ +node_modules +build +.sizecache.json +*.log* diff --git a/js/js-cookie-master/.jshintignore b/js/js-cookie-master/.jshintignore new file mode 100644 index 00000000..e3fbd983 --- /dev/null +++ b/js/js-cookie-master/.jshintignore @@ -0,0 +1,2 @@ +build +node_modules diff --git a/js/js-cookie-master/.jshintrc b/js/js-cookie-master/.jshintrc new file mode 100644 index 00000000..46377ea3 --- /dev/null +++ b/js/js-cookie-master/.jshintrc @@ -0,0 +1,14 @@ +{ + "curly": true, + "eqeqeq": true, + "expr": true, + "newcap": true, + "noarg": true, + "nonbsp": true, + "trailing": true, + "undef": true, + "unused": true, + "globals": { + "Cookies": true + } +} diff --git a/js/js-cookie-master/.tm_properties b/js/js-cookie-master/.tm_properties new file mode 100644 index 00000000..6fd361d3 --- /dev/null +++ b/js/js-cookie-master/.tm_properties @@ -0,0 +1,11 @@ +softTabs = false +tabSize = 2 + +[ text.plain ] +softWrap = true +wrapColumn = "Use Window Frame" +softTabs = true +tabSize = 4 + +[ "*.md" ] +fileType = "text.plain" diff --git a/js/js-cookie-master/.travis.yml b/js/js-cookie-master/.travis.yml new file mode 100644 index 00000000..df619277 --- /dev/null +++ b/js/js-cookie-master/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - '5.1.1' +# Only use grunt-ci for commits pushed to this repo. Fall back to regular test +# for pull requests (as secure variables won't be exposed there). +script: + - ./travis.sh +env: + # Encrypted SAUCE_USERNAME and SAUCE_ACCESS_KEY used by travis + global: + - secure: IkMOa/8r4sWyzUMxecsfqoPzZyIqVAMwPkQ6/HxXPbT8X7UnvqAdaicAMeHEKtOnOac+rx6pGB9HQvC8P/ZzkEBtsKLP4nEh9vsAInZvb3pXg+qbIgIK6/19X0kU4UkpDqVdWmBuFTamJvMDMstUTgEaM3869bB5vGp9taBgfVo= + - secure: DKrQplF0CBiBh+cbQ8D7EKebCeklUWEELblIJdU4475Occ4G9b8ZFYO9HFwl1B8F/XapB7CsMyxbJCWor030FySeqn8bhJs9NoAVoYGg+MtWniv1EOHuZLWuOGfgQDv7qj5U0Af9Y655MmUpXSN2aDlCmQweWnYdpFTM9Dfsdd8= diff --git a/js/js-cookie-master/CONTRIBUTING.md b/js/js-cookie-master/CONTRIBUTING.md new file mode 100644 index 00000000..a3bd083e --- /dev/null +++ b/js/js-cookie-master/CONTRIBUTING.md @@ -0,0 +1,79 @@ +## Issues + +- Report issues or feature requests on [GitHub Issues](https://github.com/js-cookie/js-cookie/issues). +- If reporting a bug, please add a [simplified example](http://sscce.org/). + +## Pull requests +- Create a new topic branch for every separate change you make. +- Create a test case if you are fixing a bug or implementing an important feature. +- Make sure the build runs successfully. + +## Development + +### Tools +We use the following tools for development: + +- [Qunit](http://qunitjs.com/) for tests. +- [NodeJS](http://nodejs.org/download/) required to run grunt. +- [Grunt](http://gruntjs.com/getting-started) for task management. + +### Getting started +Install [NodeJS](http://nodejs.org/). +Install globally grunt-cli using the following command: + + $ npm install -g grunt-cli + +Browse to the project root directory and install the dev dependencies: + + $ npm install -d + +To execute the build and tests run the following command in the root of the project: + + $ grunt + +You should see a green message in the console: + + Done, without errors. + +### Tests +You can also run the tests in the browser. +Start a test server from the project root: + + $ grunt connect:tests + +This will automatically open the test suite at http://127.0.0.1:10000 in the default browser, with livereload enabled. + +_Note: we recommend cleaning all the browser cookies before running the tests, that can avoid false positive failures._ + +### Automatic build +You can build automatically after a file change using the following command: + + $ grunt watch + +## Integration with server-side + +js-cookie allows integrating the encoding test suite with solutions written in other server-side languages. To integrate successfully, the server-side solution need to execute the `test/encoding.html` file in it's integration testing routine with a web automation tool, like [Selenium](http://www.seleniumhq.org/). js-cookie test suite exposes an API to make this happen. + +### ?integration_baseurl + +Specify the base url to pass the cookies into the server through a query string. If `integration_baseurl` query is not present, then js-cookie will assume there's no server. + +### window.global_test_results + +After the test suite has finished, js-cookie exposes the global `window.global_test_results` property containing an Object Literal that represents the [QUnit's details](http://api.qunitjs.com/QUnit.done/). js-cookie also adds an additional property representing an Array containing the tests data. + +### Handling requests + +When js-cookie encoding tests are executed, it will request a url in the server through an iframe representing each test being run. js-cookie expects the server to handle the input and return the proper `Set-Cookie` headers in the response. js-cookie will then read the response and verify if the encoding is consistent with js-cookie default encoding mechanism + +js-cookie will send some requests to the server from the baseurl in the format `/encoding?name=`, where `` represents the cookie-name to be read from the request. + +The server should handle those requests, internally parsing the cookie from the request and writing it again. It must set an `application/json` content type containing an object literal in the content body with `name` and `value` keys, each representing the cookie-name and cookie-value decoded by the server-side implementation. + +If the server fails to respond with this specification in any request, the related QUnit test will fail. This is to make sure the server-side implementation will always be in sync with js-cookie encoding tests for maximum compatibility. + +### Projects using it + +This hook is being used in the following projects: + +* [Java Cookie](https://github.com/js-cookie/java-cookie). diff --git a/js/js-cookie-master/Gruntfile.js b/js/js-cookie-master/Gruntfile.js new file mode 100644 index 00000000..b27f5d17 --- /dev/null +++ b/js/js-cookie-master/Gruntfile.js @@ -0,0 +1,249 @@ +/*jshint node:true */ +'use strict'; + +module.exports = function (grunt) { + + function encodingMiddleware(request, response, next) { + var url = require('url').parse(request.url, true, true); + var query = url.query; + var pathname = url.pathname; + + if (pathname !== '/encoding') { + next(); + return; + } + + var cookieName = query.name; + var cookieValue = query.value; + + response.setHeader('content-type', 'application/json'); + response.end(JSON.stringify({ + name: cookieName, + value: cookieValue + })); + } + + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + qunit: { + all: { + options: { + urls: [ + 'http://127.0.0.1:9998/', + 'http://127.0.0.1:9998/amd.html', + 'http://127.0.0.1:9998/environment-with-amd-and-umd.html', + 'http://127.0.0.1:9998/encoding.html?integration_baseurl=http://127.0.0.1:9998/' + ] + } + }, + }, + nodeunit: { + all: 'test/node.js' + }, + jshint: { + options: { + jshintrc: true + }, + grunt: 'Gruntfile.js', + source: 'src/**/*.js', + tests: ['test/**/*.js', '!test/polyfill.js'] + }, + jscs: { + options: { + requireCommaBeforeLineBreak: true, + requireLineFeedAtFileEnd: true, + requireSemicolons: true, + requireSpaceBeforeKeywords: ['else', 'while', 'catch'], + requireSpaceAfterKeywords: true, + requireSpaceAfterLineComment: true, + requireSpaceBeforeBlockStatements: true, + requireSpaceBeforeObjectValues: true, + validateIndentation: '\t', + validateLineBreaks: 'LF', + validateQuoteMarks: true, + disallowSpacesInsideArrayBrackets: 'all', + disallowSpacesInsideParentheses: true, + disallowTrailingWhitespace: true + }, + grunt: 'Gruntfile.js', + source: 'src/**/*.js', + tests: ['test/**/*.js', '!test/polyfill.js'] + }, + uglify: { + options: { + compress: { + unsafe: true + }, + screwIE8: false, + banner: '/*! <%= pkg.name %> v<%= pkg.version %> | <%= pkg.license %> */\n' + }, + build: { + files: { + 'build/js.cookie.min.js': 'src/js.cookie.js', + 'build/js.cookie-<%= pkg.version %>.min.js': 'src/js.cookie.js' + } + } + }, + watch: { + options: { + livereload: true + }, + files: '{src,test}/**/*.js', + tasks: 'default' + }, + compare_size: { + files: [ + 'build/js.cookie-<%= pkg.version %>.min.js', + 'src/js.cookie.js' + ], + options: { + compress: { + gz: function (fileContents) { + return require('gzip-js').zip(fileContents, {}).length; + } + } + } + }, + connect: { + 'build-qunit': { + options: { + port: 9998, + base: ['.', 'test'], + middleware: function (connect, options, middlewares) { + middlewares.unshift(encodingMiddleware); + return middlewares; + } + } + }, + 'build-sauce': { + options: { + port: 9999, + base: ['.', 'test'] + } + }, + tests: { + options: { + port: 10000, + base: ['.', 'test'], + open: 'http://127.0.0.1:10000', + keepalive: true, + livereload: true, + middleware: function (connect, options, middlewares) { + middlewares.unshift(encodingMiddleware); + return middlewares; + } + } + } + }, + 'saucelabs-qunit': { + all: { + options: { + urls: ['http://127.0.0.1:9999'], + testname: 'Sauce Test for js-cookie', + build: process.env.TRAVIS_JOB_ID, + pollInterval: 10000, + statusCheckAttempts: 90, + throttled: 3, + browsers: (function () { + var browsers = { + 'iOS': [{ + browserName: 'iphone', + platform: 'OS X 10.10', + version: '8.2', + deviceName: 'iPhone Simulator' + }, { + browserName: 'iphone', + platform: 'OS X 10.10', + version: '8.2', + deviceName: 'iPad Simulator' + }], + 'android': [{ + browserName: 'android', + platform: 'Linux', + version: '5.1', + deviceName: 'Android Emulator' + }], + 'mac': [{ + browserName: 'safari', + platform: 'OS X 10.10', + version: '8.0' + }, { + browserName: 'firefox', + platform: 'OS X 10.10', + version: '36.0' + }, { + browserName: 'chrome', + platform: 'OS X 10.10', + versiono: '41.0' + }], + 'windows7': [{ + browserName: 'internet explorer', + platform: 'Windows 7', + version: '11.0' + }, { + browserName: 'internet explorer', + platform: 'Windows 7', + version: '10.0' + }, { + browserName: 'internet explorer', + platform: 'Windows 7', + version: '9.0' + }, { + browserName: 'opera', + platform: 'Windows 7', + version: '12.12' + }], + 'windowsXP': [{ + browserName: 'internet explorer', + platform: 'Windows XP', + version: '8.0' + }, { + browserName: 'internet explorer', + platform: 'Windows XP', + version: '7.0' + }, { + browserName: 'internet explorer', + platform: 'Windows XP', + version: '6.0' + }], + 'linux': [{ + browserName: 'opera', + platform: 'Linux', + version: '12.15' + }, { + browserName: 'firefox', + platform: 'Linux', + version: '37.0' + }, { + browserName: 'chrome', + platform: 'Linux', + version: '41.0' + }] + }; + + var matrix = []; + for (var os in browsers) { + matrix = matrix.concat(browsers[os]); + } + return matrix; + }()) + } + } + } + }); + + // Loading dependencies + for (var key in grunt.file.readJSON('package.json').devDependencies) { + if (key !== 'grunt' && key.indexOf('grunt') === 0) { + grunt.loadNpmTasks(key); + } + } + + grunt.registerTask('saucelabs', ['connect:build-sauce', 'saucelabs-qunit']); + grunt.registerTask('test', ['uglify', 'jshint', 'jscs', 'connect:build-qunit', 'qunit', 'nodeunit']); + + grunt.registerTask('dev', ['test', 'compare_size']); + grunt.registerTask('ci', ['test', 'saucelabs']); + + grunt.registerTask('default', 'dev'); +}; diff --git a/js/js-cookie-master/MIT-LICENSE.txt b/js/js-cookie-master/MIT-LICENSE.txt new file mode 100644 index 00000000..7a631e81 --- /dev/null +++ b/js/js-cookie-master/MIT-LICENSE.txt @@ -0,0 +1,20 @@ +Copyright 2014 Klaus Hartl + +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. diff --git a/js/js-cookie-master/README.md b/js/js-cookie-master/README.md new file mode 100644 index 00000000..49c22ef5 --- /dev/null +++ b/js/js-cookie-master/README.md @@ -0,0 +1,291 @@ +

+ +

+ +# JavaScript Cookie [![Build Status](https://travis-ci.org/js-cookie/js-cookie.svg?branch=master)](https://travis-ci.org/js-cookie/js-cookie) [![Code Climate](https://codeclimate.com/github/js-cookie/js-cookie.svg)](https://codeclimate.com/github/js-cookie/js-cookie) + +A simple, lightweight JavaScript API for handling cookies + +* Works in [all](https://saucelabs.com/u/js-cookie) browsers +* Accepts [any](#encoding) character +* [Heavily](test) tested +* No dependency +* [Unobtrusive](#json) JSON support +* Supports AMD/CommonJS +* [RFC 6265](https://tools.ietf.org/html/rfc6265) compliant +* Useful [Wiki](https://github.com/js-cookie/js-cookie/wiki) +* Enable [custom encoding/decoding](#converters) +* **~900 bytes** gzipped! + +**If you're viewing this at https://github.com/js-cookie/js-cookie, you're reading the documentation for the master branch. +[View documentation for the latest release.](https://github.com/js-cookie/js-cookie/tree/latest#readme)** + +## Build Status Matrix + +[![Selenium Test Status](https://saucelabs.com/browser-matrix/js-cookie.svg)](https://saucelabs.com/u/js-cookie) + +## Installation + +### Direct download + +Download the script [here](https://github.com/js-cookie/js-cookie/blob/latest/src/js.cookie.js) and include it (unless you are packaging scripts somehow else): + +```html + +``` + +**Do not include the script directly from GitHub (http://raw.github.com/...).** The file is being served as text/plain and as such being blocked +in Internet Explorer on Windows 7 for instance (because of the wrong MIME type). Bottom line: GitHub is not a CDN. + +### Package Managers + +JavaScript Cookie supports [npm](https://www.npmjs.com/package/js-cookie) and [Bower](http://bower.io/search/?q=js-cookie) under the name `js-cookie`. + +### Module Loaders + +JavaScript Cookie can also be loaded as an AMD, CommonJS or [ES6](https://github.com/js-cookie/js-cookie/issues/233#issuecomment-233187386) module. + +## Basic Usage + +Create a cookie, valid across the entire site: + +```javascript +Cookies.set('name', 'value'); +``` + +Create a cookie that expires 7 days from now, valid across the entire site: + +```javascript +Cookies.set('name', 'value', { expires: 7 }); +``` + +Create an expiring cookie, valid to the path of the current page: + +```javascript +Cookies.set('name', 'value', { expires: 7, path: '' }); +``` + +Read cookie: + +```javascript +Cookies.get('name'); // => 'value' +Cookies.get('nothing'); // => undefined +``` + +Read all visible cookies: + +```javascript +Cookies.get(); // => { name: 'value' } +``` + +Delete cookie: + +```javascript +Cookies.remove('name'); +``` + +Delete a cookie valid to the path of the current page: + +```javascript +Cookies.set('name', 'value', { path: '' }); +Cookies.remove('name'); // fail! +Cookies.remove('name', { path: '' }); // removed! +``` + +*IMPORTANT! when deleting a cookie, you must pass the exact same path and domain attributes that was used to set the cookie, unless you're relying on the [default attributes](#cookie-attributes).* + +## Namespace conflicts + +If there is any danger of a conflict with the namespace `Cookies`, the `noConflict` method will allow you to define a new namespace and preserve the original one. This is especially useful when running the script on third party sites e.g. as part of a widget or SDK. + +```javascript +// Assign the js-cookie api to a different variable and restore the original "window.Cookies" +var Cookies2 = Cookies.noConflict(); +Cookies2.set('name', 'value'); +``` + +*Note: The `.noConflict` method is not necessary when using AMD or CommonJS, thus it is not exposed in those environments.* + +## JSON + +js-cookie provides unobtrusive JSON storage for cookies. + +When creating a cookie you can pass an Array or Object Literal instead of a string in the value. If you do so, js-cookie will store the string representation of the object according to `JSON.stringify`: + +```javascript +Cookies.set('name', { foo: 'bar' }); +``` + +When reading a cookie with the default `Cookies.get` api, you receive the string representation stored in the cookie: + +```javascript +Cookies.get('name'); // => '{"foo":"bar"}' +``` + +```javascript +Cookies.get(); // => { name: '{"foo":"bar"}' } +``` + +When reading a cookie with the `Cookies.getJSON` api, you receive the parsed representation of the string stored in the cookie according to `JSON.parse`: + +```javascript +Cookies.getJSON('name'); // => { foo: 'bar' } +``` + +```javascript +Cookies.getJSON(); // => { name: { foo: 'bar' } } +``` + +*Note: To support IE6-7 ([and IE 8 compatibility mode](http://stackoverflow.com/questions/4715373/json-object-undefined-in-internet-explorer-8)) you need to include the JSON-js polyfill: https://github.com/douglascrockford/JSON-js* + +## Encoding + +This project is [RFC 6265](http://tools.ietf.org/html/rfc6265#section-4.1.1) compliant. All special characters that are not allowed in the cookie-name or cookie-value are encoded with each one's UTF-8 Hex equivalent using [percent-encoding](http://en.wikipedia.org/wiki/Percent-encoding). +The only character in cookie-name or cookie-value that is allowed and still encoded is the percent `%` character, it is escaped in order to interpret percent input as literal. +Please note that the default encoding/decoding strategy is meant to be interoperable [only between cookies that are read/written by js-cookie](https://github.com/js-cookie/js-cookie/pull/200#discussion_r63270778). To override the default encoding/decoding strategy you need to use a [converter](#converter). + +## Cookie Attributes + +Cookie attributes defaults can be set globally by setting properties of the `Cookies.defaults` object or individually for each call to `Cookies.set(...)` by passing a plain object in the last argument. Per-call attributes override the default attributes. + +### expires + +Define when the cookie will be removed. Value can be a [`Number`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) which will be interpreted as days from time of creation or a [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. If omitted, the cookie becomes a session cookie. + +To create a cookie that expires in less than a day, you can check the [FAQ on the Wiki](https://github.com/js-cookie/js-cookie/wiki/Frequently-Asked-Questions#expire-cookies-in-less-than-a-day). + +**Default:** Cookie is removed when the user closes the browser. + +**Examples:** + +```javascript +Cookies.set('name', 'value', { expires: 365 }); +Cookies.get('name'); // => 'value' +Cookies.remove('name'); +``` + +### path + +A [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) indicating the path where the cookie is visible. + +**Default:** `/` + +**Examples:** + +```javascript +Cookies.set('name', 'value', { path: '' }); +Cookies.get('name'); // => 'value' +Cookies.remove('name', { path: '' }); +``` + +**Note regarding Internet Explorer:** + +> Due to an obscure bug in the underlying WinINET InternetGetCookie implementation, IE’s document.cookie will not return a cookie if it was set with a path attribute containing a filename. + +(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx)) + +This means one cannot set a path using `path: window.location.pathname` in case such pathname contains a filename like so: `/check.html` (or at least, such cookie cannot be read correctly). + +### domain + +A [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) indicating a valid domain where the cookie should be visible. The cookie will also be visible to all subdomains. + +**Default:** Cookie is visible only to the domain or subdomain of the page where the cookie was created, except for Internet Explorer (see below). + +**Examples:** + +Assuming a cookie that is being created on `site.com`: + +```javascript +Cookies.set('name', 'value', { domain: 'subdomain.site.com' }); +Cookies.get('name'); // => undefined (need to read at 'subdomain.site.com') +``` + +**Note regarding Internet Explorer default behavior:** + +> Q3: If I don’t specify a DOMAIN attribute (for) a cookie, IE sends it to all nested subdomains anyway? +> A: Yes, a cookie set on example.com will be sent to sub2.sub1.example.com. +> Internet Explorer differs from other browsers in this regard. + +(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx)) + +This means that if you omit the `domain` attribute, it will be visible for a subdomain in IE. + +### secure + +Either `true` or `false`, indicating if the cookie transmission requires a secure protocol (https). + +**Default:** No secure protocol requirement. + +**Examples:** + +```javascript +Cookies.set('name', 'value', { secure: true }); +Cookies.get('name'); // => 'value' +Cookies.remove('name', { secure: true }); +``` + +## Converters + +### Read + +Create a new instance of the api that overrides the default decoding implementation. +All get methods that rely in a proper decoding to work, such as `Cookies.get()` and `Cookies.get('name')`, will run the converter first for each cookie. +The returning String will be used as the cookie value. + +Example from reading one of the cookies that can only be decoded using the `escape` function: + +```javascript +document.cookie = 'escaped=%u5317'; +document.cookie = 'default=%E5%8C%97'; +var cookies = Cookies.withConverter(function (value, name) { + if ( name === 'escaped' ) { + return unescape(value); + } +}); +cookies.get('escaped'); // 北 +cookies.get('default'); // 北 +cookies.get(); // { escaped: '北', default: '北' } +``` + +### Write + +Create a new instance of the api that overrides the default encoding implementation: + +```javascript +Cookies.withConverter({ + read: function (value, name) { + // Read converter + }, + write: function (value, name) { + // Write converter + } +}); +``` + +## Server-side integration + +Check out the [Servers Docs](SERVER_SIDE.md) + +## Contributing + +Check out the [Contributing Guidelines](CONTRIBUTING.md) + +## Manual release steps + +* Increment the "version" attribute of `package.json` +* Increment the version number in the `src/js.cookie.js` file +* Commit with the message "Release version x.x.x" +* Create version tag in git +* Create a github release and upload the minified file +* Change the `latest` tag pointer to the latest commit + * `git tag -f latest` + * `git push :refs/tags/latest` + * `git push origin master --tags` +* Release on npm + +## Authors + +* [Klaus Hartl](https://github.com/carhartl) +* [Fagner Brack](https://github.com/FagnerMartinsBrack) +* And awesome [contributors](https://github.com/js-cookie/js-cookie/graphs/contributors) diff --git a/js/js-cookie-master/SERVER_SIDE.md b/js/js-cookie-master/SERVER_SIDE.md new file mode 100644 index 00000000..35fb25bf --- /dev/null +++ b/js/js-cookie-master/SERVER_SIDE.md @@ -0,0 +1,107 @@ +# Server-side integration + +There are some servers that are not compliant with the [RFC 6265](http://tools.ietf.org/html/rfc6265). For those, some characters that are not encoded by JavaScript Cookie might be treated differently. + +Here we document the most important server-side peculiarities and their workarounds. Feel free to send a [Pull Request](https://github.com/js-cookie/js-cookie/blob/master/CONTRIBUTING.md#pull-requests) if you see something that can be improved. + +*Disclaimer: This documentation is entirely based on community provided information. The examples below should be used only as a reference.* + +## PHP + +In PHP, `setcookie()` function encodes cookie values using `urlencode()` function, which applies `%`-encoding but also encodes spaces as `+` signs, [for historical reasons](http://php.net/manual/en/function.urlencode.php#function.urlencode). When cookies are read back via `$_COOKIE` or `filter_input(INPUT_COOKIE)`, they would go trough a decoding process which decodes `%`-encoded sequences and also converts `+` signs back to spaces. However, the plus (`+`) sign is valid cookie character by itself, which means that libraries that adhere to standards will interpret `+` signs differently to PHP. + +This presents two types of problems: + +1. PHP writes a cookie via `setcookie()` and all spaces get converted to `+` signs. JavaScript Cookie read `+` signs and uses them literally, since it is a valid cookie character. +2. JavaScript Cookie writes a cookie with a value that contains `+` signs and stores it as is, since it is a valid cookie character. PHP read a cookie and converts `+` signs to spaces. + +To make both PHP and JavaScript Cookie play nicely together? + +**In PHP**, use `setrawcookie()` instead of `setcookie()`: + +```php +setrawcookie($name, rawurlencode($value)); +``` + +**In JavaScript**, use a custom converter. + +**Example**: + +```javascript +var PHPCookies = Cookies.withConverter({ + write: function (value) { + // Encode all characters according to the "encodeURIComponent" spec + return encodeURIComponent(value) + // Revert the characters that are unnecessarly encoded but are + // allowed in a cookie value, except for the plus sign (%2B) + .replace(/%(23|24|26|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + }, + read: function (value) { + return value + // Decode the plus sign to spaces first, otherwise "legit" encoded pluses + // will be replaced incorrectly + .replace(/\+/g, ' ') + // Decode all characters according to the "encodeURIComponent" spec + .replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); + } +}); +``` + +Rack seems to have [a similar problem](https://github.com/js-cookie/js-cookie/issues/70#issuecomment-132503017). + +## Tomcat + +### Version >= 7.x + +It seems that there is a situation where Tomcat does not [read the parens correctly](https://github.com/js-cookie/js-cookie/issues/92#issue-107743407). To fix this you need to write a custom write converter. + +**Example**: + +```javascript +var TomcatCookies = Cookies.withConverter({ + write: function (value) { + // Encode all characters according to the "encodeURIComponent" spec + return encodeURIComponent(value) + // Revert the characters that are unnecessarly encoded but are + // allowed in a cookie value + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent) + // Encode the parens that are interpreted incorrectly by Tomcat + .replace(/[\(\)]/g, escape); + } +}); +``` + +### Version >= 8.0.15 + +Since Tomcat 8.0.15, it is possible to configure RFC 6265 compliance by changing your `conf/context.xml` file and adding the new [CookieProcessor](https://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html) nested inside the Context element. It would be like this: + +```xml + + + +``` +And you're all done. + +Alternatively, you can check the [Java Cookie](https://github.com/js-cookie/java-cookie) project, which integrates nicely with JavaScript Cookie. + +## JBoss 7.1.1 + +It seems that the servlet implementation of JBoss 7.1.1 [does not read some characters correctly](https://github.com/js-cookie/js-cookie/issues/70#issuecomment-148944674), even though they are allowed as per [RFC 6265](https://tools.ietf.org/html/rfc6265#section-4.1.1). To fix this you need to write a custom converter to send those characters correctly. + +**Example**: + +```javascript +var JBossCookies = Cookies.withConverter({ + write: function (value) { + // Encode all characters according to the "encodeURIComponent" spec + return encodeURIComponent(value) + // Revert the characters that are unnecessarly encoded but are + // allowed in a cookie value + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent) + // Encode again the characters that are not allowed in JBoss 7.1.1, like "[" and "]": + .replace(/[\[\]]/g, encodeURIComponent); + } +}); +``` + +Alternatively, you can check the [Java Cookie](https://github.com/js-cookie/java-cookie) project, which integrates nicely with JavaScript Cookie. diff --git a/js/js-cookie-master/bower.json b/js/js-cookie-master/bower.json new file mode 100644 index 00000000..d7ca68bb --- /dev/null +++ b/js/js-cookie-master/bower.json @@ -0,0 +1,18 @@ +{ + "name": "js-cookie", + "license": "MIT", + "main": [ + "src/js.cookie.js" + ], + "ignore": [ + "travis.sh", + "test", + "Gruntfile.js", + "package.json", + ".gitignore", + ".jshintignore", + ".jshintrc", + ".tm_properties", + ".travis.yml" + ] +} diff --git a/js/js-cookie-master/package.json b/js/js-cookie-master/package.json new file mode 100644 index 00000000..27a21e30 --- /dev/null +++ b/js/js-cookie-master/package.json @@ -0,0 +1,44 @@ +{ + "name": "js-cookie", + "version": "2.1.3", + "description": "A simple, lightweight JavaScript API for handling cookies", + "main": "src/js.cookie.js", + "directories": { + "test": "test" + }, + "keywords": [ + "jquery-plugin", + "cookie", + "cookies", + "browser", + "amd", + "commonjs", + "client", + "js-cookie", + "browserify" + ], + "scripts": { + "test": "grunt test" + }, + "repository": { + "type": "git", + "url": "git://github.com/js-cookie/js-cookie.git" + }, + "author": "Klaus Hartl", + "license": "MIT", + "devDependencies": { + "grunt": "1.0.0", + "grunt-compare-size": "0.4.2", + "grunt-contrib-connect": "1.0.2", + "grunt-contrib-jshint": "1.0.0", + "grunt-contrib-nodeunit": "1.0.0", + "grunt-contrib-qunit": "1.2.0", + "grunt-contrib-uglify": "2.0.0", + "grunt-contrib-watch": "1.0.0", + "grunt-jscs": "3.0.1", + "grunt-saucelabs": "9.0.0", + "gzip-js": "0.3.2", + "qunitjs": "1.23.1", + "requirejs": "2.3.1" + } +} diff --git a/js/js-cookie-master/src/.jshintrc b/js/js-cookie-master/src/.jshintrc new file mode 100644 index 00000000..764d6920 --- /dev/null +++ b/js/js-cookie-master/src/.jshintrc @@ -0,0 +1,13 @@ +{ + "browser": true, + "camelcase": true, + "quotmark": "single", + "globals": { + "define": true, + "module": true, + "require": true, + "escape": true + }, + + "extends": "../.jshintrc" +} diff --git a/js/js-cookie-master/src/js.cookie.js b/js/js-cookie-master/src/js.cookie.js new file mode 100644 index 00000000..12fa0eeb --- /dev/null +++ b/js/js-cookie-master/src/js.cookie.js @@ -0,0 +1,156 @@ +/*! + * JavaScript Cookie v2.1.3 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +;(function (factory) { + var registeredInModuleLoader = false; + if (typeof define === 'function' && define.amd) { + define(factory); + registeredInModuleLoader = true; + } + if (typeof exports === 'object') { + module.exports = factory(); + registeredInModuleLoader = true; + } + if (!registeredInModuleLoader) { + var OldCookies = window.Cookies; + var api = window.Cookies = factory(); + api.noConflict = function () { + window.Cookies = OldCookies; + return api; + }; + } +}(function () { + function extend () { + var i = 0; + var result = {}; + for (; i < arguments.length; i++) { + var attributes = arguments[ i ]; + for (var key in attributes) { + result[key] = attributes[key]; + } + } + return result; + } + + function init (converter) { + function api (key, value, attributes) { + var result; + if (typeof document === 'undefined') { + return; + } + + // Write + + if (arguments.length > 1) { + attributes = extend({ + path: '/' + }, api.defaults, attributes); + + if (typeof attributes.expires === 'number') { + var expires = new Date(); + expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); + attributes.expires = expires; + } + + try { + result = JSON.stringify(value); + if (/^[\{\[]/.test(result)) { + value = result; + } + } catch (e) {} + + if (!converter.write) { + value = encodeURIComponent(String(value)) + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + } else { + value = converter.write(value, key); + } + + key = encodeURIComponent(String(key)); + key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); + key = key.replace(/[\(\)]/g, escape); + + return (document.cookie = [ + key, '=', value, + attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + attributes.path ? '; path=' + attributes.path : '', + attributes.domain ? '; domain=' + attributes.domain : '', + attributes.secure ? '; secure' : '' + ].join('')); + } + + // Read + + if (!key) { + result = {}; + } + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling "get()" + var cookies = document.cookie ? document.cookie.split('; ') : []; + var rdecode = /(%[0-9A-Z]{2})+/g; + var i = 0; + + for (; i < cookies.length; i++) { + var parts = cookies[i].split('='); + var cookie = parts.slice(1).join('='); + + if (cookie.charAt(0) === '"') { + cookie = cookie.slice(1, -1); + } + + try { + var name = parts[0].replace(rdecode, decodeURIComponent); + cookie = converter.read ? + converter.read(cookie, name) : converter(cookie, name) || + cookie.replace(rdecode, decodeURIComponent); + + if (this.json) { + try { + cookie = JSON.parse(cookie); + } catch (e) {} + } + + if (key === name) { + result = cookie; + break; + } + + if (!key) { + result[name] = cookie; + } + } catch (e) {} + } + + return result; + } + + api.set = api; + api.get = function (key) { + return api.call(api, key); + }; + api.getJSON = function () { + return api.apply({ + json: true + }, [].slice.call(arguments)); + }; + api.defaults = {}; + + api.remove = function (key, attributes) { + api(key, '', extend(attributes, { + expires: -1 + })); + }; + + api.withConverter = init; + + return api; + } + + return init(function () {}); +})); diff --git a/js/js-cookie-master/test/.jshintrc b/js/js-cookie-master/test/.jshintrc new file mode 100644 index 00000000..70b74091 --- /dev/null +++ b/js/js-cookie-master/test/.jshintrc @@ -0,0 +1,16 @@ +{ + "browser": true, + "qunit": true, + + "-W053": true, + + "extends": "../.jshintrc", + "globals": { + "require": true, + "unescape": true, + "lifecycle": true, + "using": true, + "addEvent": true, + "loadFileSync": true + } +} diff --git a/js/js-cookie-master/test/amd-config.js b/js/js-cookie-master/test/amd-config.js new file mode 100644 index 00000000..d9bd2f6b --- /dev/null +++ b/js/js-cookie-master/test/amd-config.js @@ -0,0 +1,9 @@ +/*jshint unused:false */ + +var require = { + paths: { + 'qunit': [ + '../node_modules/qunitjs/qunit/qunit' + ] + } +}; diff --git a/js/js-cookie-master/test/amd.html b/js/js-cookie-master/test/amd.html new file mode 100644 index 00000000..babead29 --- /dev/null +++ b/js/js-cookie-master/test/amd.html @@ -0,0 +1,15 @@ + + + + + JavaScript Cookie Test Suite - AMD + + + + + + +
+
+ + diff --git a/js/js-cookie-master/test/amd.js b/js/js-cookie-master/test/amd.js new file mode 100644 index 00000000..5f655f14 --- /dev/null +++ b/js/js-cookie-master/test/amd.js @@ -0,0 +1,14 @@ +require(['qunit'], function (QUnit) { + QUnit.module('amd'); + + QUnit.start(); + QUnit.test('module loading', function (assert) { + assert.expect(1); + var done = assert.async(); + require(['/src/js.cookie.js'], function (Cookies) { + assert.ok(!!Cookies.get, 'should load the api'); + done(); + }); + }); + +}); diff --git a/js/js-cookie-master/test/encoding.html b/js/js-cookie-master/test/encoding.html new file mode 100644 index 00000000..a2f898bf --- /dev/null +++ b/js/js-cookie-master/test/encoding.html @@ -0,0 +1,18 @@ + + + + + JavaScript Cookie Test Suite - Encoding + + + + + + + +
+
+ +
+ + diff --git a/js/js-cookie-master/test/encoding.js b/js/js-cookie-master/test/encoding.js new file mode 100644 index 00000000..75c600ae --- /dev/null +++ b/js/js-cookie-master/test/encoding.js @@ -0,0 +1,628 @@ +QUnit.module('cookie-value', lifecycle); + +QUnit.test('cookie-value with double quotes', function (assert) { + assert.expect(1); + using(assert) + .setCookie('c', '"') + .then(function (decodedValue) { + assert.strictEqual(decodedValue, '"', 'should print the quote character'); + }); +}); + +QUnit.test('cookie-value with double quotes in the left', function (assert) { + assert.expect(1); + using(assert) + .setCookie('c', '"content') + .then(function (decodedValue) { + assert.strictEqual(decodedValue, '"content', 'should print the quote character'); + }); +}); + +QUnit.test('cookie-value with double quotes in the right', function (assert) { + assert.expect(1); + using(assert) + .setCookie('c', 'content"') + .then(function (decodedValue) { + assert.strictEqual(decodedValue, 'content"', 'should print the quote character'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-value " "', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ' ') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ' ', 'should handle the whitespace character'); + assert.strictEqual(plainValue, 'c=%20', 'whitespace is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-value ","', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ',') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ',', 'should handle the comma character'); + assert.strictEqual(plainValue, 'c=%2C', 'comma is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-value ";"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ';') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ';', 'should handle the semicolon character'); + assert.strictEqual(plainValue, 'c=%3B', 'semicolon is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-value "\\"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '\\') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '\\', 'should handle the backslash character'); + assert.strictEqual(plainValue, 'c=%5C', 'backslash is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - characters not allowed in the cookie-value should be replaced globally', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ';;') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ';;', 'should handle multiple not allowed characters'); + assert.strictEqual(plainValue, 'c=%3B%3B', 'should replace multiple not allowed characters'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "#"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '#') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '#', 'should handle the sharp character'); + assert.strictEqual(plainValue, 'c=#', 'sharp is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "$"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '$') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '$', 'should handle the dollar sign character'); + assert.strictEqual(plainValue, 'c=$', 'dollar sign is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "%"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '%') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '%', 'should handle the percent character'); + assert.strictEqual(plainValue, 'c=%25', 'percent is allowed, but need to be escaped'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "&"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '&') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '&', 'should handle the ampersand character'); + assert.strictEqual(plainValue, 'c=&', 'ampersand is allowed, should not encode'); + }); +}); + +// github.com/carhartl/jquery-cookie/pull/62 +QUnit.test('RFC 6265 - character allowed in the cookie-value "+"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '+') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '+', 'should handle the plus character'); + assert.strictEqual(plainValue, 'c=+', 'plus is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value ":"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ':') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ':', 'should handle the colon character'); + assert.strictEqual(plainValue, 'c=:', 'colon is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "<"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '<') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '<', 'should handle the less-than character'); + assert.strictEqual(plainValue, 'c=<', 'less-than is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value ">"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '>') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '>', 'should handle the greater-than character'); + assert.strictEqual(plainValue, 'c=>', 'greater-than is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "="', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '=') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '=', 'should handle the equal sign character'); + assert.strictEqual(plainValue, 'c==', 'equal sign is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "/"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '/') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '/', 'should handle the slash character'); + assert.strictEqual(plainValue, 'c=/', 'slash is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "?"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '?') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '?', 'should handle the question mark character'); + assert.strictEqual(plainValue, 'c=?', 'question mark is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "@"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '@') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '@', 'should handle the at character'); + assert.strictEqual(plainValue, 'c=@', 'at is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "["', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '[') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '[', 'should handle the opening square bracket character'); + assert.strictEqual(plainValue, 'c=[', 'opening square bracket is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "]"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', ']') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, ']', 'should handle the closing square bracket character'); + assert.strictEqual(plainValue, 'c=]', 'closing square bracket is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "^"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '^') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '^', 'should handle the caret character'); + assert.strictEqual(plainValue, 'c=^', 'caret is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "`"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '`') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '`', 'should handle the grave accent character'); + assert.strictEqual(plainValue, 'c=`', 'grave accent is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "{"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '{') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '{', 'should handle the opening curly bracket character'); + assert.strictEqual(plainValue, 'c={', 'opening curly bracket is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "}"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '}') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '}', 'should handle the closing curly bracket character'); + assert.strictEqual(plainValue, 'c=}', 'closing curly bracket is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-value "|"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '|') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '|', 'should handle the pipe character'); + assert.strictEqual(plainValue, 'c=|', 'pipe is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - characters allowed in the cookie-value should globally not be encoded', function (assert) { + assert.expect(1); + using(assert) + .setCookie('c', '{{') + .then(function (decodedValue, plainValue) { + assert.strictEqual(plainValue, 'c={{', 'should not encode all the character occurrences'); + }); +}); + +QUnit.test('cookie-value - 2 bytes character (ã)', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', 'ã') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'ã', 'should handle the ã character'); + assert.strictEqual(plainValue, 'c=%C3%A3', 'should encode the ã character'); + }); +}); + +QUnit.test('cookie-value - 3 bytes character (₯)', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '₯') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '₯', 'should handle the ₯ character'); + assert.strictEqual(plainValue, 'c=%E2%82%AF', 'should encode the ₯ character'); + }); +}); + +QUnit.test('cookie-value - 4 bytes character (𩸽)', function (assert) { + assert.expect(2); + using(assert) + .setCookie('c', '𩸽') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, '𩸽', 'should handle the 𩸽 character'); + assert.strictEqual(plainValue, 'c=%F0%A9%B8%BD', 'should encode the 𩸽 character'); + }); +}); + +QUnit.module('cookie-name', lifecycle); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "("', function (assert) { + assert.expect(2); + using(assert) + .setCookie('(', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the opening parens character'); + assert.strictEqual(plainValue, '%28=v', 'opening parens is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name ")"', function (assert) { + assert.expect(2); + using(assert) + .setCookie(')', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the closing parens character'); + assert.strictEqual(plainValue, '%29=v', 'closing parens is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - should replace parens globally', function (assert) { + assert.expect(1); + using(assert) + .setCookie('(())', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(plainValue, '%28%28%29%29=v', 'encode with global replace'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "<"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('<', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the less-than character'); + assert.strictEqual(plainValue, '%3C=v', 'less-than is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name ">"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('>', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the greater-than character'); + assert.strictEqual(plainValue, '%3E=v', 'greater-than is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "@"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('@', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the at character'); + assert.strictEqual(plainValue, '%40=v', 'at is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name ","', function (assert) { + assert.expect(2); + using(assert) + .setCookie(',', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the comma character'); + assert.strictEqual(plainValue, '%2C=v', 'comma is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name ";"', function (assert) { + assert.expect(2); + using(assert) + .setCookie(';', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the semicolon character'); + assert.strictEqual(plainValue, '%3B=v', 'semicolon is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name ":"', function (assert) { + assert.expect(2); + using(assert) + .setCookie(':', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the colon character'); + assert.strictEqual(plainValue, '%3A=v', 'colon is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "\\"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('\\', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the backslash character'); + assert.strictEqual(plainValue, '%5C=v', 'backslash is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "\""', function (assert) { + assert.expect(2); + using(assert) + .setCookie('"', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the double quote character'); + assert.strictEqual(plainValue, '%22=v', 'double quote is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "/"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('/', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the slash character'); + assert.strictEqual(plainValue, '%2F=v', 'slash is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "["', function (assert) { + assert.expect(2); + using(assert) + .setCookie('[', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the opening square brackets character'); + assert.strictEqual(plainValue, '%5B=v', 'opening square brackets is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "]"', function (assert) { + assert.expect(2); + using(assert) + .setCookie(']', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the closing square brackets character'); + assert.strictEqual(plainValue, '%5D=v', 'closing square brackets is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "?"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('?', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the question mark character'); + assert.strictEqual(plainValue, '%3F=v', 'question mark is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "="', function (assert) { + assert.expect(2); + using(assert) + .setCookie('=', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the equal sign character'); + assert.strictEqual(plainValue, '%3D=v', 'equal sign is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "{"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('{', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the opening curly brackets character'); + assert.strictEqual(plainValue, '%7B=v', 'opening curly brackets is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "}"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('}', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the closing curly brackets character'); + assert.strictEqual(plainValue, '%7D=v', 'closing curly brackets is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name "\\t"', function (assert) { + assert.expect(2); + using(assert) + .setCookie(' ', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the horizontal tab character'); + assert.strictEqual(plainValue, '%09=v', 'horizontal tab is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character not allowed in the cookie-name " "', function (assert) { + assert.expect(2); + using(assert) + .setCookie(' ', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the whitespace character'); + assert.strictEqual(plainValue, '%20=v', 'whitespace is not allowed, need to encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "#"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('#', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the sharp character'); + assert.strictEqual(plainValue, '#=v', 'sharp is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "$"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('$', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the dollar sign character'); + assert.strictEqual(plainValue, '$=v', 'dollar sign is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in cookie-name "%"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('%', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the percent character'); + assert.strictEqual(plainValue, '%25=v', 'percent is allowed, but need to be escaped'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "&"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('&', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the ampersand character'); + assert.strictEqual(plainValue, '&=v', 'ampersand is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "+"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('+', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the plus character'); + assert.strictEqual(plainValue, '+=v', 'plus is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "^"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('^', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the caret character'); + assert.strictEqual(plainValue, '^=v', 'caret is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "`"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('`', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the grave accent character'); + assert.strictEqual(plainValue, '`=v', 'grave accent is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - character allowed in the cookie-name "|"', function (assert) { + assert.expect(2); + using(assert) + .setCookie('|', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the pipe character'); + assert.strictEqual(plainValue, '|=v', 'pipe is allowed, should not encode'); + }); +}); + +QUnit.test('RFC 6265 - characters allowed in the cookie-name should globally not be encoded', function (assert) { + assert.expect(1); + using(assert) + .setCookie('||', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(plainValue, '||=v', 'should not encode all character occurrences'); + }); +}); + +QUnit.test('cookie-name - 2 bytes characters', function (assert) { + assert.expect(2); + using(assert) + .setCookie('ã', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the ã character'); + assert.strictEqual(plainValue, '%C3%A3=v', 'should encode the ã character'); + }); +}); + +QUnit.test('cookie-name - 3 bytes characters', function (assert) { + assert.expect(2); + using(assert) + .setCookie('₯', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should handle the ₯ character'); + assert.strictEqual(plainValue, '%E2%82%AF=v', 'should encode the ₯ character'); + }); +}); + +QUnit.test('cookie-name - 4 bytes characters', function (assert) { + assert.expect(2); + using(assert) + .setCookie('𩸽', 'v') + .then(function (decodedValue, plainValue) { + assert.strictEqual(decodedValue, 'v', 'should_handle the 𩸽 character'); + assert.strictEqual(plainValue, '%F0%A9%B8%BD=v', 'should encode the 𩸽 character'); + }); +}); diff --git a/js/js-cookie-master/test/environment-with-amd-and-umd.html b/js/js-cookie-master/test/environment-with-amd-and-umd.html new file mode 100644 index 00000000..9e444f54 --- /dev/null +++ b/js/js-cookie-master/test/environment-with-amd-and-umd.html @@ -0,0 +1,15 @@ + + + + + JavaScript Cookie Test Suite - Environment with AMD and UMD + + + + + + +
+
+ + diff --git a/js/js-cookie-master/test/environment-with-amd-and-umd.js b/js/js-cookie-master/test/environment-with-amd-and-umd.js new file mode 100644 index 00000000..b4f32502 --- /dev/null +++ b/js/js-cookie-master/test/environment-with-amd-and-umd.js @@ -0,0 +1,28 @@ +require(['qunit'], function (QUnit) { + QUnit.start(); + + QUnit.module('Environment with AMD and UMD', { + beforeEach: function () { + window.exports = {}; + window.module = { + exports: window.exports + }; + }, + afterEach: function () { + delete window.module; + } + }); + + QUnit.test('js-cookie need to register itself in AMD and UMD', function (assert) { + assert.expect(2); + var done = assert.async(); + require(['/src/js.cookie.js'], function () { + var actual = typeof window.module.exports; + var expected = 'function'; + assert.strictEqual(actual, expected, 'should register a function in module.exports'); + assert.notOk(!!window.Cookies, 'should not register globally in AMD/UMD environments'); + done(); + }); + }); + +}); diff --git a/js/js-cookie-master/test/index.html b/js/js-cookie-master/test/index.html new file mode 100644 index 00000000..39db7380 --- /dev/null +++ b/js/js-cookie-master/test/index.html @@ -0,0 +1,18 @@ + + + + + JavaScript Cookie Test Suite + + + + + + + + + +
+
+ + diff --git a/js/js-cookie-master/test/malformed_cookie.html b/js/js-cookie-master/test/malformed_cookie.html new file mode 100644 index 00000000..dac40437 --- /dev/null +++ b/js/js-cookie-master/test/malformed_cookie.html @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/js/js-cookie-master/test/missing_semicolon.html b/js/js-cookie-master/test/missing_semicolon.html new file mode 100644 index 00000000..385efd57 --- /dev/null +++ b/js/js-cookie-master/test/missing_semicolon.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/js-cookie-master/test/node.js b/js/js-cookie-master/test/node.js new file mode 100644 index 00000000..af2d42d9 --- /dev/null +++ b/js/js-cookie-master/test/node.js @@ -0,0 +1,29 @@ +/*jshint node:true */ +exports.node = { + should_load_js_cookie: function (test) { + test.expect(1); + var Cookies = require('../src/js.cookie'); + test.ok(!!Cookies.get, 'should load the Cookies API'); + test.done(); + }, + should_not_throw_error_for_set_call_in_node: function (test) { + test.expect(0); + var Cookies = require('../src/js.cookie'); + Cookies.set('anything'); + Cookies.set('anything', { path: '' }); + test.done(); + }, + should_not_throw_error_for_get_call_in_node: function (test) { + test.expect(0); + var Cookies = require('../src/js.cookie'); + Cookies.get('anything'); + test.done(); + }, + should_not_throw_error_for_remove_call_in_node: function (test) { + test.expect(0); + var Cookies = require('../src/js.cookie'); + Cookies.remove('anything'); + Cookies.remove('anything', { path: '' }); + test.done(); + } +}; diff --git a/js/js-cookie-master/test/polyfill.js b/js/js-cookie-master/test/polyfill.js new file mode 100644 index 00000000..d0865136 --- /dev/null +++ b/js/js-cookie-master/test/polyfill.js @@ -0,0 +1,11 @@ +// Object.keys() +// developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys +Object.keys||(Object.keys=function(){"use strict";var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=c.length;return function(e){if("object"!=typeof e&&("function"!=typeof e||null===e))throw new TypeError("Object.keys called on non-object");var g,h,f=[];for(g in e)a.call(e,g)&&f.push(g);if(b)for(h=0;d>h;h++)a.call(e,c[h])&&f.push(c[h]);return f}}()); + +// Array.forEach() +// developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach +Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c,d;if(null==this)throw new TypeError(" this is null or not defined");var e=Object(this),f=e.length>>>0;if("function"!=typeof a)throw new TypeError(a+" is not a function");for(arguments.length>1&&(c=b),d=0;f>d;){var g;d in e&&(g=e[d],a.call(c,g,d,e)),d++}}); + +// JSON +// github.com/douglascrockford/JSON-js/tree/c07c287e39ab5a1726818e0436490bf071b7c838 +"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(a){return 10>a?"0"+a:a}function this_value(){return this.valueOf()}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function str(a,b){var c,d,e,f,h,g=gap,i=b[a];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(a)),"function"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,h=[],"[object Array]"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)h[c]=str(c,i)||"null";return e=0===h.length?"[]":gap?"[\n"+gap+h.join(",\n"+gap)+"\n"+g+"]":"["+h.join(",")+"]",gap=g,e}if(rep&&"object"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)"string"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e));return e=0===h.length?"{}":gap?"{\n"+gap+h.join(",\n"+gap)+"\n"+g+"}":"{"+h.join(",")+"}",gap=g,e}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){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},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var cx,escapable,gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(escapable=/[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(a,b,c){var d;if(gap="",indent="","number"==typeof c)for(d=0;c>d;d+=1)indent+=" ";else"string"==typeof c&&(indent=c);if(rep=b,b&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw new Error("JSON.stringify");return str("",{"":a})}),"function"!=typeof JSON.parse&&(cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&"object"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\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,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); \ No newline at end of file diff --git a/js/js-cookie-master/test/tests.js b/js/js-cookie-master/test/tests.js new file mode 100644 index 00000000..b8785ae5 --- /dev/null +++ b/js/js-cookie-master/test/tests.js @@ -0,0 +1,426 @@ +/*global lifecycle: true*/ + +QUnit.module('read', lifecycle); + +QUnit.test('simple value', function (assert) { + assert.expect(1); + document.cookie = 'c=v'; + assert.strictEqual(Cookies.get('c'), 'v', 'should return value'); +}); + +QUnit.test('empty value', function (assert) { + assert.expect(1); + // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, which + // resulted in a bug while reading such a cookie. + Cookies.set('c', ''); + assert.strictEqual(Cookies.get('c'), '', 'should return value'); +}); + +QUnit.test('not existing', function (assert) { + assert.expect(1); + assert.strictEqual(Cookies.get('whatever'), undefined, 'return undefined'); +}); + +// github.com/carhartl/jquery-cookie/issues/50 +QUnit.test('equality sign in cookie value', function (assert) { + assert.expect(1); + Cookies.set('c', 'foo=bar'); + assert.strictEqual(Cookies.get('c'), 'foo=bar', 'should include the entire value'); +}); + +// github.com/carhartl/jquery-cookie/issues/215 +QUnit.test('percent character in cookie value', function (assert) { + assert.expect(1); + document.cookie = 'bad=foo%'; + assert.strictEqual(Cookies.get('bad'), 'foo%', 'should read the percent character'); +}); + +QUnit.test('percent character in cookie value mixed with encoded values', function (assert) { + assert.expect(1); + document.cookie = 'bad=foo%bar%22baz%bax%3D'; + assert.strictEqual(Cookies.get('bad'), 'foo%bar"baz%bax=', 'should read the percent character'); +}); + +// github.com/carhartl/jquery-cookie/pull/88 +// github.com/carhartl/jquery-cookie/pull/117 +QUnit.test('malformed cookie value in IE', function (assert) { + assert.expect(1); + var done = assert.async(); + // Sandbox in an iframe so that we can poke around with document.cookie. + var iframe = document.createElement('iframe'); + iframe.src = 'malformed_cookie.html'; + addEvent(iframe, 'load', function () { + if (iframe.contentWindow.ok) { + assert.strictEqual(iframe.contentWindow.testValue, 'two', 'reads all cookie values, skipping duplicate occurences of "; "'); + } else { + // Skip the test where we can't stub document.cookie using + // Object.defineProperty. Seems to work fine in + // Chrome, Firefox and IE 8+. + assert.ok(true, 'N/A'); + } + done(); + }); + document.body.appendChild(iframe); +}); + +// github.com/js-cookie/js-cookie/pull/171 +QUnit.test('missing leading semicolon', function (assert) { + assert.expect(1); + var done = assert.async(); + // Sandbox in an iframe so that we can poke around with document.cookie. + var iframe = document.createElement('iframe'); + var loadedSuccessfully = true; + iframe.src = 'missing_semicolon.html'; + + addEvent(iframe, 'load', function () { + iframe.contentWindow.onerror = function () { + loadedSuccessfully = false; + }; + assert.strictEqual(loadedSuccessfully, true, 'can\'t throw Object is not a function error'); + done(); + }); + document.body.appendChild(iframe); +}); + +QUnit.test('Call to read all when there are cookies', function (assert) { + Cookies.set('c', 'v'); + Cookies.set('foo', 'bar'); + assert.deepEqual(Cookies.get(), { c: 'v', foo: 'bar' }, 'returns object containing all cookies'); +}); + +QUnit.test('Call to read all when there are no cookies at all', function (assert) { + assert.deepEqual(Cookies.get(), {}, 'returns empty object'); +}); + +QUnit.test('RFC 6265 - reading cookie-octet enclosed in DQUOTE', function (assert) { + assert.expect(1); + document.cookie = 'c="v"'; + assert.strictEqual(Cookies.get('c'), 'v', 'should simply ignore quoted strings'); +}); + +// github.com/js-cookie/js-cookie/issues/196 +QUnit.test('Call to read cookie when there is another unrelated cookie with malformed encoding in the name', function (assert) { + assert.expect(2); + document.cookie = 'BS%BS=1'; + document.cookie = 'c=v'; + assert.strictEqual(Cookies.get('c'), 'v', 'should not throw a URI malformed exception when retrieving a single cookie'); + assert.deepEqual(Cookies.get(), { c: 'v' }, 'should not throw a URI malformed exception when retrieving all cookies'); + document.cookie = 'BS%BS=1; expires=Thu, 01 Jan 1970 00:00:00 GMT'; +}); + +// github.com/js-cookie/js-cookie/pull/62 +QUnit.test('Call to read cookie when there is another unrelated cookie with malformed encoding in the value', function (assert) { + assert.expect(2); + document.cookie = 'invalid=%A1'; + document.cookie = 'c=v'; + assert.strictEqual(Cookies.get('c'), 'v', 'should not throw a URI malformed exception when retrieving a single cookie'); + assert.deepEqual(Cookies.get(), { c: 'v' }, 'should not throw a URI malformed exception when retrieving all cookies'); + Cookies.withConverter(unescape).remove('invalid'); +}); + +// github.com/js-cookie/js-cookie/issues/145 +QUnit.test('Call to read cookie when passing an Object Literal as the second argument', function (assert) { + assert.expect(1); + Cookies.get('name', { path: '' }); + assert.strictEqual(document.cookie, '', 'should not create a cookie'); +}); + +// github.com/js-cookie/js-cookie/issues/238 +QUnit.test('Call to read cookie when there is a window.json variable globally', function (assert) { + assert.expect(1); + window.json = true; + Cookies.set('boolean', true); + assert.strictEqual(typeof Cookies.get('boolean'), 'string', 'should not change the returned type'); + // IE 6-8 throw an exception if trying to delete a window property + // See stackoverflow.com/questions/1073414/deleting-a-window-property-in-ie/1824228 + try { + delete window.json; + } catch (e) {} +}); + +QUnit.module('write', lifecycle); + +QUnit.test('String primitive', function (assert) { + assert.expect(1); + Cookies.set('c', 'v'); + assert.strictEqual(Cookies.get('c'), 'v', 'should write value'); +}); + +QUnit.test('String object', function (assert) { + assert.expect(1); + Cookies.set('c', new String('v')); + assert.strictEqual(Cookies.get('c'), 'v', 'should write value'); +}); + +QUnit.test('value "[object Object]"', function (assert) { + assert.expect(1); + Cookies.set('c', '[object Object]'); + assert.strictEqual(Cookies.get('c'), '[object Object]', 'should write value'); +}); + +QUnit.test('number', function (assert) { + assert.expect(1); + Cookies.set('c', 1234); + assert.strictEqual(Cookies.get('c'), '1234', 'should write value'); +}); + +QUnit.test('null', function (assert) { + assert.expect(1); + Cookies.set('c', null); + assert.strictEqual(Cookies.get('c'), 'null', 'should write value'); +}); + +QUnit.test('undefined', function (assert) { + assert.expect(1); + Cookies.set('c', undefined); + assert.strictEqual(Cookies.get('c'), 'undefined', 'should write value'); +}); + +QUnit.test('expires option as days from now', function (assert) { + assert.expect(1); + var sevenDaysFromNow = new Date(); + sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 21); + var expected = 'c=v; expires=' + sevenDaysFromNow.toUTCString(); + var actual = Cookies.set('c', 'v', { expires: 21 }).substring(0, expected.length); + assert.strictEqual(actual, expected, 'should write the cookie string with expires'); +}); + +QUnit.test('expires option as fraction of a day', function (assert) { + assert.expect(1); + + var now = new Date().getTime(); + var stringifiedDate = Cookies.set('c', 'v', { expires: 0.5 }).split('; ')[1].split('=')[1]; + var expires = Date.parse(stringifiedDate); + + // When we were using Date.setDate() fractions have been ignored + // and expires resulted in the current date. Allow 1000 milliseconds + // difference for execution time. + assert.ok(expires > now + 1000, 'should write expires attribute with the correct date'); +}); + +QUnit.test('expires option as Date instance', function (assert) { + assert.expect(1); + var sevenDaysFromNow = new Date(); + sevenDaysFromNow.setDate(sevenDaysFromNow.getDate() + 7); + var expected = 'c=v; expires=' + sevenDaysFromNow.toUTCString(); + var actual = Cookies.set('c', 'v', { expires: sevenDaysFromNow }).substring(0, expected.length); + assert.strictEqual(actual, expected, 'should write the cookie string with expires'); +}); + +QUnit.test('return value', function (assert) { + assert.expect(1); + var expected = 'c=v'; + var actual = Cookies.set('c', 'v').substring(0, expected.length); + assert.strictEqual(actual, expected, 'should return written cookie string'); +}); + +QUnit.test('default path attribute', function (assert) { + assert.expect(1); + assert.ok(Cookies.set('c', 'v').match(/path=\//), 'should read the default path'); +}); + +QUnit.test('API for changing defaults', function (assert) { + assert.expect(3); + + Cookies.defaults.path = '/foo'; + assert.ok(Cookies.set('c', 'v').match(/path=\/foo/), 'should use attributes from defaults'); + Cookies.remove('c', { path: '/foo' }); + + assert.ok(Cookies.set('c', 'v', { path: '/bar' }).match(/path=\/bar/), 'attributes argument has precedence'); + Cookies.remove('c', { path: '/bar' }); + + delete Cookies.defaults.path; + assert.ok(Cookies.set('c', 'v').match(/path=\//), 'should roll back to the default path'); +}); + +// github.com/js-cookie/js-cookie/pull/54 +QUnit.test('false secure value', function (assert) { + assert.expect(1); + var expected = 'c=v; path=/'; + var actual = Cookies.set('c', 'v', {secure: false}); + assert.strictEqual(actual, expected, 'false should not modify path in cookie string'); +}); + +QUnit.test('undefined attribute value', function (assert) { + assert.expect(4); + assert.strictEqual(Cookies.set('c', 'v', { + expires: undefined + }), 'c=v; path=/', 'should not write undefined expires attribute'); + assert.strictEqual(Cookies.set('c', 'v', { + path: undefined + }), 'c=v', 'should not write undefined path attribute'); + assert.strictEqual(Cookies.set('c', 'v', { + domain: undefined + }), 'c=v; path=/', 'should not write undefined domain attribute'); + assert.strictEqual(Cookies.set('c', 'v', { + secure: undefined + }), 'c=v; path=/', 'should not write undefined secure attribute'); +}); + +QUnit.module('remove', lifecycle); + +QUnit.test('deletion', function (assert) { + assert.expect(1); + Cookies.set('c', 'v'); + Cookies.remove('c'); + assert.strictEqual(document.cookie, '', 'should delete the cookie'); +}); + +QUnit.test('with attributes', function (assert) { + assert.expect(1); + var attributes = { path: '/' }; + Cookies.set('c', 'v', attributes); + Cookies.remove('c', attributes); + assert.strictEqual(document.cookie, '', 'should delete the cookie'); +}); + +QUnit.test('passing attributes reference', function (assert) { + assert.expect(1); + var attributes = { path: '/' }; + Cookies.set('c', 'v', attributes); + Cookies.remove('c', attributes); + assert.deepEqual(attributes, { path: '/' }, 'won\'t alter attributes object'); +}); + +QUnit.module('converters', lifecycle); + +// github.com/carhartl/jquery-cookie/pull/166 +QUnit.test('provide a way for decoding characters encoded by the escape function', function (assert) { + assert.expect(1); + document.cookie = 'c=%u5317%u4eac'; + assert.strictEqual(Cookies.withConverter(unescape).get('c'), '北京', 'should convert chinese characters correctly'); +}); + +QUnit.test('should decode a malformed char that matches the decodeURIComponent regex', function (assert) { + assert.expect(1); + document.cookie = 'c=%E3'; + var cookies = Cookies.withConverter(unescape); + assert.strictEqual(cookies.get('c'), 'ã', 'should convert the character correctly'); + cookies.remove('c', { + path: '' + }); +}); + +QUnit.test('should be able to conditionally decode a single malformed cookie', function (assert) { + assert.expect(4); + var cookies = Cookies.withConverter(function (value, name) { + if (name === 'escaped') { + return unescape(value); + } + }); + + document.cookie = 'escaped=%u5317'; + assert.strictEqual(cookies.get('escaped'), '北', 'should use a custom method for escaped cookie'); + + document.cookie = 'encoded=%E4%BA%AC'; + assert.strictEqual(cookies.get('encoded'), '京', 'should use the default encoding for the rest'); + + assert.deepEqual(cookies.get(), { + escaped: '北', + encoded: '京' + }, 'should retrieve everything'); + + Object.keys(cookies.get()).forEach(function (name) { + cookies.remove(name, { + path: '' + }); + }); + assert.strictEqual(document.cookie, '', 'should remove everything'); +}); + +// github.com/js-cookie/js-cookie/issues/70 +QUnit.test('should be able to create a write decoder', function (assert) { + assert.expect(1); + Cookies.withConverter({ + write: function (value) { + return value.replace('+', '%2B'); + } + }).set('c', '+'); + assert.strictEqual(document.cookie, 'c=%2B', 'should call the write converter'); +}); + +QUnit.test('should be able to use read and write decoder', function (assert) { + assert.expect(1); + document.cookie = 'c=%2B'; + var cookies = Cookies.withConverter({ + read: function (value) { + return value.replace('%2B', '+'); + } + }); + assert.strictEqual(cookies.get('c'), '+', 'should call the read converter'); +}); + +QUnit.module('JSON handling', lifecycle); + +QUnit.test('Number', function (assert) { + assert.expect(2); + Cookies.set('c', 1); + assert.strictEqual(Cookies.getJSON('c'), 1, 'should handle a Number'); + assert.strictEqual(Cookies.get('c'), '1', 'should return a String'); +}); + +QUnit.test('Boolean', function (assert) { + assert.expect(2); + Cookies.set('c', true); + assert.strictEqual(Cookies.getJSON('c'), true, 'should handle a Boolean'); + assert.strictEqual(Cookies.get('c'), 'true', 'should return a Boolean'); +}); + +QUnit.test('Array Literal', function (assert) { + assert.expect(2); + Cookies.set('c', ['v']); + assert.deepEqual(Cookies.getJSON('c'), ['v'], 'should handle Array Literal'); + assert.strictEqual(Cookies.get('c'), '["v"]', 'should return a String'); +}); + +QUnit.test('Array Constructor', function (assert) { + /*jshint -W009 */ + assert.expect(2); + var value = new Array(); + value[0] = 'v'; + Cookies.set('c', value); + assert.deepEqual(Cookies.getJSON('c'), ['v'], 'should handle Array Constructor'); + assert.strictEqual(Cookies.get('c'), '["v"]', 'should return a String'); +}); + +QUnit.test('Object Literal', function (assert) { + assert.expect(2); + Cookies.set('c', {k: 'v'}); + assert.deepEqual(Cookies.getJSON('c'), {k: 'v'}, 'should handle Object Literal'); + assert.strictEqual(Cookies.get('c'), '{"k":"v"}', 'should return a String'); +}); + +QUnit.test('Object Constructor', function (assert) { + /*jshint -W010 */ + assert.expect(2); + var value = new Object(); + value.k = 'v'; + Cookies.set('c', value); + assert.deepEqual(Cookies.getJSON('c'), {k: 'v'}, 'should handle Object Constructor'); + assert.strictEqual(Cookies.get('c'), '{"k":"v"}', 'should return a String'); +}); + +QUnit.test('Use String(value) for unsupported objects that do not stringify into JSON', function (assert) { + assert.expect(2); + Cookies.set('date', new Date(2015, 04, 13, 0, 0, 0, 0)); + assert.strictEqual(Cookies.get('date').indexOf('"'), -1, 'should not quote the stringified Date object'); + assert.strictEqual(Cookies.getJSON('date').indexOf('"'), -1, 'should not quote the stringified Date object'); +}); + +QUnit.test('Call to read all cookies with mixed json', function (assert) { + Cookies.set('c', { foo: 'bar' }); + Cookies.set('c2', 'v'); + assert.deepEqual(Cookies.getJSON(), { c: { foo: 'bar' }, c2: 'v' }, 'returns JSON parsed cookies'); + assert.deepEqual(Cookies.get(), { c: '{"foo":"bar"}', c2: 'v' }, 'returns unparsed cookies'); +}); + +QUnit.module('noConflict', lifecycle); + +QUnit.test('do not conflict with existent globals', function (assert) { + assert.expect(2); + var Cookies = window.Cookies.noConflict(); + Cookies.set('c', 'v'); + assert.strictEqual(Cookies.get('c'), 'v', 'should work correctly'); + assert.strictEqual(window.Cookies, 'existent global', 'should restore the original global'); + window.Cookies = Cookies; +}); diff --git a/js/js-cookie-master/test/utils.js b/js/js-cookie-master/test/utils.js new file mode 100644 index 00000000..d95f8a6d --- /dev/null +++ b/js/js-cookie-master/test/utils.js @@ -0,0 +1,122 @@ +// https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit +(function () { + 'use strict'; + + var log = []; + + QUnit.done(function (test_results) { + var tests = []; + for (var i = 0, len = log.length; i < len; i++) { + var details = log[i]; + tests.push({ + name: details.name, + result: details.result, + expected: details.expected, + actual: details.actual, + source: details.source + }); + } + test_results.tests = tests; + // Required for exposing test results to the Sauce Labs API. + // Can be removed when the following issue is fixed: + // https://github.com/axemclion/grunt-saucelabs/issues/84 + window.global_test_results = test_results; + }); + + QUnit.testStart(function (testDetails) { + QUnit.log(function (details) { + if (!details.result) { + details.name = testDetails.name; + log.push(details); + } + }); + }); + + window.lifecycle = { + afterEach: function () { + // Remove the cookies created using js-cookie default attributes + Object.keys(Cookies.get()).forEach(Cookies.remove); + // Remove the cookies created using browser default attributes + Object.keys(Cookies.get()).forEach(function (cookie) { + Cookies.remove(cookie, { + path: '' + }); + }); + } + }; + + window.addEvent = function (element, eventName, fn) { + var method = 'addEventListener'; + if (element.attachEvent) { + eventName = 'on' + eventName; + method = 'attachEvent'; + } + element[ method ](eventName, fn); + }; + + window.using = function (assert) { + function getQuery(key) { + var queries = location.href.split('?')[1]; + if (!queries) { + return; + } + var pairs = queries.split(/&|=/); + var indexBaseURL = pairs.indexOf(key); + var result = pairs[indexBaseURL + 1]; + if (result) { + return decodeURIComponent(result); + } + } + function setCookie(name, value) { + return { + then: function (callback) { + var iframe = document.getElementById('request_target'); + var serverURL = getQuery('integration_baseurl'); + Cookies.set(name, value); + if (!serverURL) { + callback(Cookies.get(name), document.cookie); + } else { + var requestURL = [ + serverURL, + 'encoding?', + 'name=' + encodeURIComponent(name), + '&value=' + encodeURIComponent(value) + ].join(''); + var done = assert.async(); + addEvent(iframe, 'load', function () { + var iframeDocument = iframe.contentWindow.document; + var root = iframeDocument.documentElement; + var content = root.textContent; + if (!content) { + ok(false, [ + '"' + requestURL + '"', + 'content should not be empty' + ].join(' ')); + done(); + return; + } + try { + var result = JSON.parse(content); + callback(result.value, iframeDocument.cookie); + } finally { + done(); + } + }); + iframe.src = requestURL; + } + } + }; + } + return { + setCookie: setCookie + }; + }; + + window.loadFileSync = function (path) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', path, false); + xhr.send(null); + return xhr.status === 200 ? xhr.responseText : null; + }; + +}()); diff --git a/js/js-cookie-master/travis.sh b/js/js-cookie-master/travis.sh new file mode 100644 index 00000000..375b035b --- /dev/null +++ b/js/js-cookie-master/travis.sh @@ -0,0 +1,6 @@ +#!/bin/bash +if [ -z "$SAUCE_ACCESS_KEY" ]; then + npm test +else + grunt ci --verbose +fi diff --git a/js/js-storage-master/.gitignore b/js/js-storage-master/.gitignore new file mode 100644 index 00000000..40b878db --- /dev/null +++ b/js/js-storage-master/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/js/js-storage-master/CHANGELOG.txt b/js/js-storage-master/CHANGELOG.txt new file mode 100644 index 00000000..0af64cf1 --- /dev/null +++ b/js/js-storage-master/CHANGELOG.txt @@ -0,0 +1,5 @@ +1.0.1 + Fix package/bower.json + +1.0.0 + Initial version created from jQuery-Storage-API#1.9.3 diff --git a/js/js-storage-master/Jasmine/SpecRunner.html b/js/js-storage-master/Jasmine/SpecRunner.html new file mode 100644 index 00000000..688f9c8e --- /dev/null +++ b/js/js-storage-master/Jasmine/SpecRunner.html @@ -0,0 +1,50 @@ + + + + Jasmine Spec Runner + + + + + + + + + + + + + + + + + + diff --git a/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/MIT.LICENSE b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/MIT.LICENSE new file mode 100644 index 00000000..7c435baa --- /dev/null +++ b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/MIT.LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2008-2011 Pivotal Labs + +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. diff --git a/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine-html.js b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine-html.js new file mode 100644 index 00000000..543d5696 --- /dev/null +++ b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine-html.js @@ -0,0 +1,681 @@ +jasmine.HtmlReporterHelpers = {}; + +jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) { + var el = document.createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(document.createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == "className") { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; +}; + +jasmine.HtmlReporterHelpers.getSpecStatus = function(child) { + var results = child.results(); + var status = results.passed() ? 'passed' : 'failed'; + if (results.skipped) { + status = 'skipped'; + } + + return status; +}; + +jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) { + var parentDiv = this.dom.summary; + var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite'; + var parent = child[parentSuite]; + + if (parent) { + if (typeof this.views.suites[parent.id] == 'undefined') { + this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views); + } + parentDiv = this.views.suites[parent.id].element; + } + + parentDiv.appendChild(childElement); +}; + + +jasmine.HtmlReporterHelpers.addHelpers = function(ctor) { + for(var fn in jasmine.HtmlReporterHelpers) { + ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn]; + } +}; + +jasmine.HtmlReporter = function(_doc) { + var self = this; + var doc = _doc || window.document; + + var reporterView; + + var dom = {}; + + // Jasmine Reporter Public Interface + self.logRunningSpecs = false; + + self.reportRunnerStarting = function(runner) { + var specs = runner.specs() || []; + + if (specs.length == 0) { + return; + } + + createReporterDom(runner.env.versionString()); + doc.body.appendChild(dom.reporter); + setExceptionHandling(); + + reporterView = new jasmine.HtmlReporter.ReporterView(dom); + reporterView.addSpecs(specs, self.specFilter); + }; + + self.reportRunnerResults = function(runner) { + reporterView && reporterView.complete(); + }; + + self.reportSuiteResults = function(suite) { + reporterView.suiteComplete(suite); + }; + + self.reportSpecStarting = function(spec) { + if (self.logRunningSpecs) { + self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); + } + }; + + self.reportSpecResults = function(spec) { + reporterView.specComplete(spec); + }; + + self.log = function() { + var console = jasmine.getGlobal().console; + if (console && console.log) { + if (console.log.apply) { + console.log.apply(console, arguments); + } else { + console.log(arguments); // ie fix: console.log.apply doesn't exist on ie + } + } + }; + + self.specFilter = function(spec) { + if (!focusedSpecName()) { + return true; + } + + return spec.getFullName().indexOf(focusedSpecName()) === 0; + }; + + return self; + + function focusedSpecName() { + var specName; + + (function memoizeFocusedSpec() { + if (specName) { + return; + } + + var paramMap = []; + var params = jasmine.HtmlReporter.parameters(doc); + + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); + } + + specName = paramMap.spec; + })(); + + return specName; + } + + function createReporterDom(version) { + dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' }, + dom.banner = self.createDom('div', { className: 'banner' }, + self.createDom('span', { className: 'title' }, "Jasmine "), + self.createDom('span', { className: 'version' }, version)), + + dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}), + dom.alert = self.createDom('div', {className: 'alert'}, + self.createDom('span', { className: 'exceptions' }, + self.createDom('label', { className: 'label', 'for': 'no_try_catch' }, 'No try/catch'), + self.createDom('input', { id: 'no_try_catch', type: 'checkbox' }))), + dom.results = self.createDom('div', {className: 'results'}, + dom.summary = self.createDom('div', { className: 'summary' }), + dom.details = self.createDom('div', { id: 'details' })) + ); + } + + function noTryCatch() { + return window.location.search.match(/catch=false/); + } + + function searchWithCatch() { + var params = jasmine.HtmlReporter.parameters(window.document); + var removed = false; + var i = 0; + + while (!removed && i < params.length) { + if (params[i].match(/catch=/)) { + params.splice(i, 1); + removed = true; + } + i++; + } + if (jasmine.CATCH_EXCEPTIONS) { + params.push("catch=false"); + } + + return params.join("&"); + } + + function setExceptionHandling() { + var chxCatch = document.getElementById('no_try_catch'); + + if (noTryCatch()) { + chxCatch.setAttribute('checked', true); + jasmine.CATCH_EXCEPTIONS = false; + } + chxCatch.onclick = function() { + window.location.search = searchWithCatch(); + }; + } +}; +jasmine.HtmlReporter.parameters = function(doc) { + var paramStr = doc.location.search.substring(1); + var params = []; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + } + return params; +} +jasmine.HtmlReporter.sectionLink = function(sectionName) { + var link = '?'; + var params = []; + + if (sectionName) { + params.push('spec=' + encodeURIComponent(sectionName)); + } + if (!jasmine.CATCH_EXCEPTIONS) { + params.push("catch=false"); + } + if (params.length > 0) { + link += params.join("&"); + } + + return link; +}; +jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter); +jasmine.HtmlReporter.ReporterView = function(dom) { + this.startedAt = new Date(); + this.runningSpecCount = 0; + this.completeSpecCount = 0; + this.passedCount = 0; + this.failedCount = 0; + this.skippedCount = 0; + + this.createResultsMenu = function() { + this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'}, + this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'), + ' | ', + this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing')); + + this.summaryMenuItem.onclick = function() { + dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, ''); + }; + + this.detailsMenuItem.onclick = function() { + showDetails(); + }; + }; + + this.addSpecs = function(specs, specFilter) { + this.totalSpecCount = specs.length; + + this.views = { + specs: {}, + suites: {} + }; + + for (var i = 0; i < specs.length; i++) { + var spec = specs[i]; + this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views); + if (specFilter(spec)) { + this.runningSpecCount++; + } + } + }; + + this.specComplete = function(spec) { + this.completeSpecCount++; + + if (isUndefined(this.views.specs[spec.id])) { + this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom); + } + + var specView = this.views.specs[spec.id]; + + switch (specView.status()) { + case 'passed': + this.passedCount++; + break; + + case 'failed': + this.failedCount++; + break; + + case 'skipped': + this.skippedCount++; + break; + } + + specView.refresh(); + this.refresh(); + }; + + this.suiteComplete = function(suite) { + var suiteView = this.views.suites[suite.id]; + if (isUndefined(suiteView)) { + return; + } + suiteView.refresh(); + }; + + this.refresh = function() { + + if (isUndefined(this.resultsMenu)) { + this.createResultsMenu(); + } + + // currently running UI + if (isUndefined(this.runningAlert)) { + this.runningAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "runningAlert bar" }); + dom.alert.appendChild(this.runningAlert); + } + this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount); + + // skipped specs UI + if (isUndefined(this.skippedAlert)) { + this.skippedAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "skippedAlert bar" }); + } + + this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all"; + + if (this.skippedCount === 1 && isDefined(dom.alert)) { + dom.alert.appendChild(this.skippedAlert); + } + + // passing specs UI + if (isUndefined(this.passedAlert)) { + this.passedAlert = this.createDom('span', { href: jasmine.HtmlReporter.sectionLink(), className: "passingAlert bar" }); + } + this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount); + + // failing specs UI + if (isUndefined(this.failedAlert)) { + this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"}); + } + this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount); + + if (this.failedCount === 1 && isDefined(dom.alert)) { + dom.alert.appendChild(this.failedAlert); + dom.alert.appendChild(this.resultsMenu); + } + + // summary info + this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount); + this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing"; + }; + + this.complete = function() { + dom.alert.removeChild(this.runningAlert); + + this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all"; + + if (this.failedCount === 0) { + dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount))); + } else { + showDetails(); + } + + dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s")); + }; + + return this; + + function showDetails() { + if (dom.reporter.className.search(/showDetails/) === -1) { + dom.reporter.className += " showDetails"; + } + } + + function isUndefined(obj) { + return typeof obj === 'undefined'; + } + + function isDefined(obj) { + return !isUndefined(obj); + } + + function specPluralizedFor(count) { + var str = count + " spec"; + if (count > 1) { + str += "s" + } + return str; + } + +}; + +jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView); + + +jasmine.HtmlReporter.SpecView = function(spec, dom, views) { + this.spec = spec; + this.dom = dom; + this.views = views; + + this.symbol = this.createDom('li', { className: 'pending' }); + this.dom.symbolSummary.appendChild(this.symbol); + + this.summary = this.createDom('div', { className: 'specSummary' }, + this.createDom('a', { + className: 'description', + href: jasmine.HtmlReporter.sectionLink(this.spec.getFullName()), + title: this.spec.getFullName() + }, this.spec.description) + ); + + this.detail = this.createDom('div', { className: 'specDetail' }, + this.createDom('a', { + className: 'description', + href: '?spec=' + encodeURIComponent(this.spec.getFullName()), + title: this.spec.getFullName() + }, this.spec.getFullName()) + ); +}; + +jasmine.HtmlReporter.SpecView.prototype.status = function() { + return this.getSpecStatus(this.spec); +}; + +jasmine.HtmlReporter.SpecView.prototype.refresh = function() { + this.symbol.className = this.status(); + + switch (this.status()) { + case 'skipped': + break; + + case 'passed': + this.appendSummaryToSuiteDiv(); + break; + + case 'failed': + this.appendSummaryToSuiteDiv(); + this.appendFailureDetail(); + break; + } +}; + +jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() { + this.summary.className += ' ' + this.status(); + this.appendToSummary(this.spec, this.summary); +}; + +jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() { + this.detail.className += ' ' + this.status(); + + var resultItems = this.spec.results().getItems(); + var messagesDiv = this.createDom('div', { className: 'messages' }); + + for (var i = 0; i < resultItems.length; i++) { + var result = resultItems[i]; + + if (result.type == 'log') { + messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); + } else if (result.type == 'expect' && result.passed && !result.passed()) { + messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); + + if (result.trace.stack) { + messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack)); + } + } + } + + if (messagesDiv.childNodes.length > 0) { + this.detail.appendChild(messagesDiv); + this.dom.details.appendChild(this.detail); + } +}; + +jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) { + this.suite = suite; + this.dom = dom; + this.views = views; + + this.element = this.createDom('div', { className: 'suite' }, + this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.suite.getFullName()) }, this.suite.description) + ); + + this.appendToSummary(this.suite, this.element); +}; + +jasmine.HtmlReporter.SuiteView.prototype.status = function() { + return this.getSpecStatus(this.suite); +}; + +jasmine.HtmlReporter.SuiteView.prototype.refresh = function() { + this.element.className += " " + this.status(); +}; + +jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView); + +/* @deprecated Use jasmine.HtmlReporter instead + */ +jasmine.TrivialReporter = function(doc) { + this.document = doc || document; + this.suiteDivs = {}; + this.logRunningSpecs = false; +}; + +jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) { + var el = document.createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(document.createTextNode(child)); + } else { + if (child) { el.appendChild(child); } + } + } + + for (var attr in attrs) { + if (attr == "className") { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; +}; + +jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) { + var showPassed, showSkipped; + + this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' }, + this.createDom('div', { className: 'banner' }, + this.createDom('div', { className: 'logo' }, + this.createDom('span', { className: 'title' }, "Jasmine"), + this.createDom('span', { className: 'version' }, runner.env.versionString())), + this.createDom('div', { className: 'options' }, + "Show ", + showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }), + this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "), + showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }), + this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped") + ) + ), + + this.runnerDiv = this.createDom('div', { className: 'runner running' }, + this.createDom('a', { className: 'run_spec', href: '?' }, "run all"), + this.runnerMessageSpan = this.createDom('span', {}, "Running..."), + this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, "")) + ); + + this.document.body.appendChild(this.outerDiv); + + var suites = runner.suites(); + for (var i = 0; i < suites.length; i++) { + var suite = suites[i]; + var suiteDiv = this.createDom('div', { className: 'suite' }, + this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"), + this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description)); + this.suiteDivs[suite.id] = suiteDiv; + var parentDiv = this.outerDiv; + if (suite.parentSuite) { + parentDiv = this.suiteDivs[suite.parentSuite.id]; + } + parentDiv.appendChild(suiteDiv); + } + + this.startedAt = new Date(); + + var self = this; + showPassed.onclick = function(evt) { + if (showPassed.checked) { + self.outerDiv.className += ' show-passed'; + } else { + self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, ''); + } + }; + + showSkipped.onclick = function(evt) { + if (showSkipped.checked) { + self.outerDiv.className += ' show-skipped'; + } else { + self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, ''); + } + }; +}; + +jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) { + var results = runner.results(); + var className = (results.failedCount > 0) ? "runner failed" : "runner passed"; + this.runnerDiv.setAttribute("class", className); + //do it twice for IE + this.runnerDiv.setAttribute("className", className); + var specs = runner.specs(); + var specCount = 0; + for (var i = 0; i < specs.length; i++) { + if (this.specFilter(specs[i])) { + specCount++; + } + } + var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s"); + message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"; + this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild); + + this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString())); +}; + +jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) { + var results = suite.results(); + var status = results.passed() ? 'passed' : 'failed'; + if (results.totalCount === 0) { // todo: change this to check results.skipped + status = 'skipped'; + } + this.suiteDivs[suite.id].className += " " + status; +}; + +jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) { + if (this.logRunningSpecs) { + this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...'); + } +}; + +jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) { + var results = spec.results(); + var status = results.passed() ? 'passed' : 'failed'; + if (results.skipped) { + status = 'skipped'; + } + var specDiv = this.createDom('div', { className: 'spec ' + status }, + this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"), + this.createDom('a', { + className: 'description', + href: '?spec=' + encodeURIComponent(spec.getFullName()), + title: spec.getFullName() + }, spec.description)); + + + var resultItems = results.getItems(); + var messagesDiv = this.createDom('div', { className: 'messages' }); + for (var i = 0; i < resultItems.length; i++) { + var result = resultItems[i]; + + if (result.type == 'log') { + messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); + } else if (result.type == 'expect' && result.passed && !result.passed()) { + messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); + + if (result.trace.stack) { + messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack)); + } + } + } + + if (messagesDiv.childNodes.length > 0) { + specDiv.appendChild(messagesDiv); + } + + this.suiteDivs[spec.suite.id].appendChild(specDiv); +}; + +jasmine.TrivialReporter.prototype.log = function() { + var console = jasmine.getGlobal().console; + if (console && console.log) { + if (console.log.apply) { + console.log.apply(console, arguments); + } else { + console.log(arguments); // ie fix: console.log.apply doesn't exist on ie + } + } +}; + +jasmine.TrivialReporter.prototype.getLocation = function() { + return this.document.location; +}; + +jasmine.TrivialReporter.prototype.specFilter = function(spec) { + var paramMap = {}; + var params = this.getLocation().search.substring(1).split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); + } + + if (!paramMap.spec) { + return true; + } + return spec.getFullName().indexOf(paramMap.spec) === 0; +}; diff --git a/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.css b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.css new file mode 100644 index 00000000..8c008dc7 --- /dev/null +++ b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.css @@ -0,0 +1,82 @@ +body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; } + +#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } +#HTMLReporter a { text-decoration: none; } +#HTMLReporter a:hover { text-decoration: underline; } +#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; } +#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; } +#HTMLReporter #jasmine_content { position: fixed; right: 100%; } +#HTMLReporter .version { color: #aaaaaa; } +#HTMLReporter .banner { margin-top: 14px; } +#HTMLReporter .duration { color: #aaaaaa; float: right; } +#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; } +#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; } +#HTMLReporter .symbolSummary li.passed { font-size: 14px; } +#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; } +#HTMLReporter .symbolSummary li.failed { line-height: 9px; } +#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; } +#HTMLReporter .symbolSummary li.skipped { font-size: 14px; } +#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; } +#HTMLReporter .symbolSummary li.pending { line-height: 11px; } +#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; } +#HTMLReporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +#HTMLReporter .runningAlert { background-color: #666666; } +#HTMLReporter .skippedAlert { background-color: #aaaaaa; } +#HTMLReporter .skippedAlert:first-child { background-color: #333333; } +#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; } +#HTMLReporter .passingAlert { background-color: #a6b779; } +#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; } +#HTMLReporter .failingAlert { background-color: #cf867e; } +#HTMLReporter .failingAlert:first-child { background-color: #b03911; } +#HTMLReporter .results { margin-top: 14px; } +#HTMLReporter #details { display: none; } +#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; } +#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +#HTMLReporter.showDetails .summary { display: none; } +#HTMLReporter.showDetails #details { display: block; } +#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +#HTMLReporter .summary { margin-top: 14px; } +#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; } +#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; } +#HTMLReporter .summary .specSummary.failed a { color: #b03911; } +#HTMLReporter .description + .suite { margin-top: 0; } +#HTMLReporter .suite { margin-top: 14px; } +#HTMLReporter .suite a { color: #333333; } +#HTMLReporter #details .specDetail { margin-bottom: 28px; } +#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; } +#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; } +#HTMLReporter .resultMessage span.result { display: block; } +#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } + +#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ } +#TrivialReporter a:visited, #TrivialReporter a { color: #303; } +#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; } +#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; } +#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; } +#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; } +#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; } +#TrivialReporter .runner.running { background-color: yellow; } +#TrivialReporter .options { text-align: right; font-size: .8em; } +#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; } +#TrivialReporter .suite .suite { margin: 5px; } +#TrivialReporter .suite.passed { background-color: #dfd; } +#TrivialReporter .suite.failed { background-color: #fdd; } +#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; } +#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; } +#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; } +#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; } +#TrivialReporter .spec.skipped { background-color: #bbb; } +#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; } +#TrivialReporter .passed { background-color: #cfc; display: none; } +#TrivialReporter .failed { background-color: #fbb; } +#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; } +#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; } +#TrivialReporter .resultMessage .mismatch { color: black; } +#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; } +#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; } +#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; } +#TrivialReporter #jasmine_content { position: fixed; right: 100%; } +#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; } diff --git a/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.js b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.js new file mode 100644 index 00000000..6b3459b9 --- /dev/null +++ b/js/js-storage-master/Jasmine/lib/jasmine-1.3.1/jasmine.js @@ -0,0 +1,2600 @@ +var isCommonJS = typeof window == "undefined" && typeof exports == "object"; + +/** + * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework. + * + * @namespace + */ +var jasmine = {}; +if (isCommonJS) exports.jasmine = jasmine; +/** + * @private + */ +jasmine.unimplementedMethod_ = function() { + throw new Error("unimplemented method"); +}; + +/** + * Use jasmine.undefined instead of undefined, since undefined is just + * a plain old variable and may be redefined by somebody else. + * + * @private + */ +jasmine.undefined = jasmine.___undefined___; + +/** + * Show diagnostic messages in the console if set to true + * + */ +jasmine.VERBOSE = false; + +/** + * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed. + * + */ +jasmine.DEFAULT_UPDATE_INTERVAL = 250; + +/** + * Maximum levels of nesting that will be included when an object is pretty-printed + */ +jasmine.MAX_PRETTY_PRINT_DEPTH = 40; + +/** + * Default timeout interval in milliseconds for waitsFor() blocks. + */ +jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; + +/** + * By default exceptions thrown in the context of a test are caught by jasmine so that it can run the remaining tests in the suite. + * Set to false to let the exception bubble up in the browser. + * + */ +jasmine.CATCH_EXCEPTIONS = true; + +jasmine.getGlobal = function() { + function getGlobal() { + return this; + } + + return getGlobal(); +}; + +/** + * Allows for bound functions to be compared. Internal use only. + * + * @ignore + * @private + * @param base {Object} bound 'this' for the function + * @param name {Function} function to find + */ +jasmine.bindOriginal_ = function(base, name) { + var original = base[name]; + if (original.apply) { + return function() { + return original.apply(base, arguments); + }; + } else { + // IE support + return jasmine.getGlobal()[name]; + } +}; + +jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout'); +jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout'); +jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval'); +jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval'); + +jasmine.MessageResult = function(values) { + this.type = 'log'; + this.values = values; + this.trace = new Error(); // todo: test better +}; + +jasmine.MessageResult.prototype.toString = function() { + var text = ""; + for (var i = 0; i < this.values.length; i++) { + if (i > 0) text += " "; + if (jasmine.isString_(this.values[i])) { + text += this.values[i]; + } else { + text += jasmine.pp(this.values[i]); + } + } + return text; +}; + +jasmine.ExpectationResult = function(params) { + this.type = 'expect'; + this.matcherName = params.matcherName; + this.passed_ = params.passed; + this.expected = params.expected; + this.actual = params.actual; + this.message = this.passed_ ? 'Passed.' : params.message; + + var trace = (params.trace || new Error(this.message)); + this.trace = this.passed_ ? '' : trace; +}; + +jasmine.ExpectationResult.prototype.toString = function () { + return this.message; +}; + +jasmine.ExpectationResult.prototype.passed = function () { + return this.passed_; +}; + +/** + * Getter for the Jasmine environment. Ensures one gets created + */ +jasmine.getEnv = function() { + var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env(); + return env; +}; + +/** + * @ignore + * @private + * @param value + * @returns {Boolean} + */ +jasmine.isArray_ = function(value) { + return jasmine.isA_("Array", value); +}; + +/** + * @ignore + * @private + * @param value + * @returns {Boolean} + */ +jasmine.isString_ = function(value) { + return jasmine.isA_("String", value); +}; + +/** + * @ignore + * @private + * @param value + * @returns {Boolean} + */ +jasmine.isNumber_ = function(value) { + return jasmine.isA_("Number", value); +}; + +/** + * @ignore + * @private + * @param {String} typeName + * @param value + * @returns {Boolean} + */ +jasmine.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; +}; + +/** + * Pretty printer for expecations. Takes any object and turns it into a human-readable string. + * + * @param value {Object} an object to be outputted + * @returns {String} + */ +jasmine.pp = function(value) { + var stringPrettyPrinter = new jasmine.StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; +}; + +/** + * Returns true if the object is a DOM Node. + * + * @param {Object} obj object to check + * @returns {Boolean} + */ +jasmine.isDomNode = function(obj) { + return obj.nodeType > 0; +}; + +/** + * Returns a matchable 'generic' object of the class type. For use in expecations of type when values don't matter. + * + * @example + * // don't care about which function is passed in, as long as it's a function + * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function)); + * + * @param {Class} clazz + * @returns matchable object of the type clazz + */ +jasmine.any = function(clazz) { + return new jasmine.Matchers.Any(clazz); +}; + +/** + * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the + * attributes on the object. + * + * @example + * // don't care about any other attributes than foo. + * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"}); + * + * @param sample {Object} sample + * @returns matchable object for the sample + */ +jasmine.objectContaining = function (sample) { + return new jasmine.Matchers.ObjectContaining(sample); +}; + +/** + * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks. + * + * Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine + * expectation syntax. Spies can be checked if they were called or not and what the calling params were. + * + * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs). + * + * Spies are torn down at the end of every spec. + * + * Note: Do not call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj. + * + * @example + * // a stub + * var myStub = jasmine.createSpy('myStub'); // can be used anywhere + * + * // spy example + * var foo = { + * not: function(bool) { return !bool; } + * } + * + * // actual foo.not will not be called, execution stops + * spyOn(foo, 'not'); + + // foo.not spied upon, execution will continue to implementation + * spyOn(foo, 'not').andCallThrough(); + * + * // fake example + * var foo = { + * not: function(bool) { return !bool; } + * } + * + * // foo.not(val) will return val + * spyOn(foo, 'not').andCallFake(function(value) {return value;}); + * + * // mock example + * foo.not(7 == 7); + * expect(foo.not).toHaveBeenCalled(); + * expect(foo.not).toHaveBeenCalledWith(true); + * + * @constructor + * @see spyOn, jasmine.createSpy, jasmine.createSpyObj + * @param {String} name + */ +jasmine.Spy = function(name) { + /** + * The name of the spy, if provided. + */ + this.identity = name || 'unknown'; + /** + * Is this Object a spy? + */ + this.isSpy = true; + /** + * The actual function this spy stubs. + */ + this.plan = function() { + }; + /** + * Tracking of the most recent call to the spy. + * @example + * var mySpy = jasmine.createSpy('foo'); + * mySpy(1, 2); + * mySpy.mostRecentCall.args = [1, 2]; + */ + this.mostRecentCall = {}; + + /** + * Holds arguments for each call to the spy, indexed by call count + * @example + * var mySpy = jasmine.createSpy('foo'); + * mySpy(1, 2); + * mySpy(7, 8); + * mySpy.mostRecentCall.args = [7, 8]; + * mySpy.argsForCall[0] = [1, 2]; + * mySpy.argsForCall[1] = [7, 8]; + */ + this.argsForCall = []; + this.calls = []; +}; + +/** + * Tells a spy to call through to the actual implemenatation. + * + * @example + * var foo = { + * bar: function() { // do some stuff } + * } + * + * // defining a spy on an existing property: foo.bar + * spyOn(foo, 'bar').andCallThrough(); + */ +jasmine.Spy.prototype.andCallThrough = function() { + this.plan = this.originalValue; + return this; +}; + +/** + * For setting the return value of a spy. + * + * @example + * // defining a spy from scratch: foo() returns 'baz' + * var foo = jasmine.createSpy('spy on foo').andReturn('baz'); + * + * // defining a spy on an existing property: foo.bar() returns 'baz' + * spyOn(foo, 'bar').andReturn('baz'); + * + * @param {Object} value + */ +jasmine.Spy.prototype.andReturn = function(value) { + this.plan = function() { + return value; + }; + return this; +}; + +/** + * For throwing an exception when a spy is called. + * + * @example + * // defining a spy from scratch: foo() throws an exception w/ message 'ouch' + * var foo = jasmine.createSpy('spy on foo').andThrow('baz'); + * + * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch' + * spyOn(foo, 'bar').andThrow('baz'); + * + * @param {String} exceptionMsg + */ +jasmine.Spy.prototype.andThrow = function(exceptionMsg) { + this.plan = function() { + throw exceptionMsg; + }; + return this; +}; + +/** + * Calls an alternate implementation when a spy is called. + * + * @example + * var baz = function() { + * // do some stuff, return something + * } + * // defining a spy from scratch: foo() calls the function baz + * var foo = jasmine.createSpy('spy on foo').andCall(baz); + * + * // defining a spy on an existing property: foo.bar() calls an anonymnous function + * spyOn(foo, 'bar').andCall(function() { return 'baz';} ); + * + * @param {Function} fakeFunc + */ +jasmine.Spy.prototype.andCallFake = function(fakeFunc) { + this.plan = fakeFunc; + return this; +}; + +/** + * Resets all of a spy's the tracking variables so that it can be used again. + * + * @example + * spyOn(foo, 'bar'); + * + * foo.bar(); + * + * expect(foo.bar.callCount).toEqual(1); + * + * foo.bar.reset(); + * + * expect(foo.bar.callCount).toEqual(0); + */ +jasmine.Spy.prototype.reset = function() { + this.wasCalled = false; + this.callCount = 0; + this.argsForCall = []; + this.calls = []; + this.mostRecentCall = {}; +}; + +jasmine.createSpy = function(name) { + + var spyObj = function() { + spyObj.wasCalled = true; + spyObj.callCount++; + var args = jasmine.util.argsToArray(arguments); + spyObj.mostRecentCall.object = this; + spyObj.mostRecentCall.args = args; + spyObj.argsForCall.push(args); + spyObj.calls.push({object: this, args: args}); + return spyObj.plan.apply(this, arguments); + }; + + var spy = new jasmine.Spy(name); + + for (var prop in spy) { + spyObj[prop] = spy[prop]; + } + + spyObj.reset(); + + return spyObj; +}; + +/** + * Determines whether an object is a spy. + * + * @param {jasmine.Spy|Object} putativeSpy + * @returns {Boolean} + */ +jasmine.isSpy = function(putativeSpy) { + return putativeSpy && putativeSpy.isSpy; +}; + +/** + * Creates a more complicated spy: an Object that has every property a function that is a spy. Used for stubbing something + * large in one call. + * + * @param {String} baseName name of spy class + * @param {Array} methodNames array of names of methods to make spies + */ +jasmine.createSpyObj = function(baseName, methodNames) { + if (!jasmine.isArray_(methodNames) || methodNames.length === 0) { + throw new Error('createSpyObj requires a non-empty array of method names to create spies for'); + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]); + } + return obj; +}; + +/** + * All parameters are pretty-printed and concatenated together, then written to the current spec's output. + * + * Be careful not to leave calls to jasmine.log in production code. + */ +jasmine.log = function() { + var spec = jasmine.getEnv().currentSpec; + spec.log.apply(spec, arguments); +}; + +/** + * Function that installs a spy on an existing object's method name. Used within a Spec to create a spy. + * + * @example + * // spy example + * var foo = { + * not: function(bool) { return !bool; } + * } + * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops + * + * @see jasmine.createSpy + * @param obj + * @param methodName + * @return {jasmine.Spy} a Jasmine spy that can be chained with all spy methods + */ +var spyOn = function(obj, methodName) { + return jasmine.getEnv().currentSpec.spyOn(obj, methodName); +}; +if (isCommonJS) exports.spyOn = spyOn; + +/** + * Creates a Jasmine spec that will be added to the current suite. + * + * // TODO: pending tests + * + * @example + * it('should be true', function() { + * expect(true).toEqual(true); + * }); + * + * @param {String} desc description of this specification + * @param {Function} func defines the preconditions and expectations of the spec + */ +var it = function(desc, func) { + return jasmine.getEnv().it(desc, func); +}; +if (isCommonJS) exports.it = it; + +/** + * Creates a disabled Jasmine spec. + * + * A convenience method that allows existing specs to be disabled temporarily during development. + * + * @param {String} desc description of this specification + * @param {Function} func defines the preconditions and expectations of the spec + */ +var xit = function(desc, func) { + return jasmine.getEnv().xit(desc, func); +}; +if (isCommonJS) exports.xit = xit; + +/** + * Starts a chain for a Jasmine expectation. + * + * It is passed an Object that is the actual value and should chain to one of the many + * jasmine.Matchers functions. + * + * @param {Object} actual Actual value to test against and expected value + * @return {jasmine.Matchers} + */ +var expect = function(actual) { + return jasmine.getEnv().currentSpec.expect(actual); +}; +if (isCommonJS) exports.expect = expect; + +/** + * Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs. + * + * @param {Function} func Function that defines part of a jasmine spec. + */ +var runs = function(func) { + jasmine.getEnv().currentSpec.runs(func); +}; +if (isCommonJS) exports.runs = runs; + +/** + * Waits a fixed time period before moving to the next block. + * + * @deprecated Use waitsFor() instead + * @param {Number} timeout milliseconds to wait + */ +var waits = function(timeout) { + jasmine.getEnv().currentSpec.waits(timeout); +}; +if (isCommonJS) exports.waits = waits; + +/** + * Waits for the latchFunction to return true before proceeding to the next block. + * + * @param {Function} latchFunction + * @param {String} optional_timeoutMessage + * @param {Number} optional_timeout + */ +var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { + jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments); +}; +if (isCommonJS) exports.waitsFor = waitsFor; + +/** + * A function that is called before each spec in a suite. + * + * Used for spec setup, including validating assumptions. + * + * @param {Function} beforeEachFunction + */ +var beforeEach = function(beforeEachFunction) { + jasmine.getEnv().beforeEach(beforeEachFunction); +}; +if (isCommonJS) exports.beforeEach = beforeEach; + +/** + * A function that is called after each spec in a suite. + * + * Used for restoring any state that is hijacked during spec execution. + * + * @param {Function} afterEachFunction + */ +var afterEach = function(afterEachFunction) { + jasmine.getEnv().afterEach(afterEachFunction); +}; +if (isCommonJS) exports.afterEach = afterEach; + +/** + * Defines a suite of specifications. + * + * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared + * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization + * of setup in some tests. + * + * @example + * // TODO: a simple suite + * + * // TODO: a simple suite with a nested describe block + * + * @param {String} description A string, usually the class under test. + * @param {Function} specDefinitions function that defines several specs. + */ +var describe = function(description, specDefinitions) { + return jasmine.getEnv().describe(description, specDefinitions); +}; +if (isCommonJS) exports.describe = describe; + +/** + * Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development. + * + * @param {String} description A string, usually the class under test. + * @param {Function} specDefinitions function that defines several specs. + */ +var xdescribe = function(description, specDefinitions) { + return jasmine.getEnv().xdescribe(description, specDefinitions); +}; +if (isCommonJS) exports.xdescribe = xdescribe; + + +// Provide the XMLHttpRequest class for IE 5.x-6.x: +jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() { + function tryIt(f) { + try { + return f(); + } catch(e) { + } + return null; + } + + var xhr = tryIt(function() { + return new ActiveXObject("Msxml2.XMLHTTP.6.0"); + }) || + tryIt(function() { + return new ActiveXObject("Msxml2.XMLHTTP.3.0"); + }) || + tryIt(function() { + return new ActiveXObject("Msxml2.XMLHTTP"); + }) || + tryIt(function() { + return new ActiveXObject("Microsoft.XMLHTTP"); + }); + + if (!xhr) throw new Error("This browser does not support XMLHttpRequest."); + + return xhr; +} : XMLHttpRequest; +/** + * @namespace + */ +jasmine.util = {}; + +/** + * Declare that a child class inherit it's prototype from the parent class. + * + * @private + * @param {Function} childClass + * @param {Function} parentClass + */ +jasmine.util.inherit = function(childClass, parentClass) { + /** + * @private + */ + var subclass = function() { + }; + subclass.prototype = parentClass.prototype; + childClass.prototype = new subclass(); +}; + +jasmine.util.formatException = function(e) { + var lineNumber; + if (e.line) { + lineNumber = e.line; + } + else if (e.lineNumber) { + lineNumber = e.lineNumber; + } + + var file; + + if (e.sourceURL) { + file = e.sourceURL; + } + else if (e.fileName) { + file = e.fileName; + } + + var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString(); + + if (file && lineNumber) { + message += ' in ' + file + ' (line ' + lineNumber + ')'; + } + + return message; +}; + +jasmine.util.htmlEscape = function(str) { + if (!str) return str; + return str.replace(/&/g, '&') + .replace(//g, '>'); +}; + +jasmine.util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); + return arrayOfArgs; +}; + +jasmine.util.extend = function(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; +}; + +/** + * Environment for Jasmine + * + * @constructor + */ +jasmine.Env = function() { + this.currentSpec = null; + this.currentSuite = null; + this.currentRunner_ = new jasmine.Runner(this); + + this.reporter = new jasmine.MultiReporter(); + + this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL; + this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL; + this.lastUpdate = 0; + this.specFilter = function() { + return true; + }; + + this.nextSpecId_ = 0; + this.nextSuiteId_ = 0; + this.equalityTesters_ = []; + + // wrap matchers + this.matchersClass = function() { + jasmine.Matchers.apply(this, arguments); + }; + jasmine.util.inherit(this.matchersClass, jasmine.Matchers); + + jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass); +}; + + +jasmine.Env.prototype.setTimeout = jasmine.setTimeout; +jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout; +jasmine.Env.prototype.setInterval = jasmine.setInterval; +jasmine.Env.prototype.clearInterval = jasmine.clearInterval; + +/** + * @returns an object containing jasmine version build info, if set. + */ +jasmine.Env.prototype.version = function () { + if (jasmine.version_) { + return jasmine.version_; + } else { + throw new Error('Version not set'); + } +}; + +/** + * @returns string containing jasmine version build info, if set. + */ +jasmine.Env.prototype.versionString = function() { + if (!jasmine.version_) { + return "version unknown"; + } + + var version = this.version(); + var versionString = version.major + "." + version.minor + "." + version.build; + if (version.release_candidate) { + versionString += ".rc" + version.release_candidate; + } + versionString += " revision " + version.revision; + return versionString; +}; + +/** + * @returns a sequential integer starting at 0 + */ +jasmine.Env.prototype.nextSpecId = function () { + return this.nextSpecId_++; +}; + +/** + * @returns a sequential integer starting at 0 + */ +jasmine.Env.prototype.nextSuiteId = function () { + return this.nextSuiteId_++; +}; + +/** + * Register a reporter to receive status updates from Jasmine. + * @param {jasmine.Reporter} reporter An object which will receive status updates. + */ +jasmine.Env.prototype.addReporter = function(reporter) { + this.reporter.addReporter(reporter); +}; + +jasmine.Env.prototype.execute = function() { + this.currentRunner_.execute(); +}; + +jasmine.Env.prototype.describe = function(description, specDefinitions) { + var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite); + + var parentSuite = this.currentSuite; + if (parentSuite) { + parentSuite.add(suite); + } else { + this.currentRunner_.add(suite); + } + + this.currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch(e) { + declarationError = e; + } + + if (declarationError) { + this.it("encountered a declaration exception", function() { + throw declarationError; + }); + } + + this.currentSuite = parentSuite; + + return suite; +}; + +jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { + if (this.currentSuite) { + this.currentSuite.beforeEach(beforeEachFunction); + } else { + this.currentRunner_.beforeEach(beforeEachFunction); + } +}; + +jasmine.Env.prototype.currentRunner = function () { + return this.currentRunner_; +}; + +jasmine.Env.prototype.afterEach = function(afterEachFunction) { + if (this.currentSuite) { + this.currentSuite.afterEach(afterEachFunction); + } else { + this.currentRunner_.afterEach(afterEachFunction); + } + +}; + +jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) { + return { + execute: function() { + } + }; +}; + +jasmine.Env.prototype.it = function(description, func) { + var spec = new jasmine.Spec(this, this.currentSuite, description); + this.currentSuite.add(spec); + this.currentSpec = spec; + + if (func) { + spec.runs(func); + } + + return spec; +}; + +jasmine.Env.prototype.xit = function(desc, func) { + return { + id: this.nextSpecId(), + runs: function() { + } + }; +}; + +jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) { + if (a.source != b.source) + mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/"); + + if (a.ignoreCase != b.ignoreCase) + mismatchValues.push("expected modifier i was" + (b.ignoreCase ? " " : " not ") + "set and does not equal the origin modifier"); + + if (a.global != b.global) + mismatchValues.push("expected modifier g was" + (b.global ? " " : " not ") + "set and does not equal the origin modifier"); + + if (a.multiline != b.multiline) + mismatchValues.push("expected modifier m was" + (b.multiline ? " " : " not ") + "set and does not equal the origin modifier"); + + if (a.sticky != b.sticky) + mismatchValues.push("expected modifier y was" + (b.sticky ? " " : " not ") + "set and does not equal the origin modifier"); + + return (mismatchValues.length === 0); +}; + +jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) { + if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) { + return true; + } + + a.__Jasmine_been_here_before__ = b; + b.__Jasmine_been_here_before__ = a; + + var hasKey = function(obj, keyName) { + return obj !== null && obj[keyName] !== jasmine.undefined; + }; + + for (var property in b) { + if (!hasKey(a, property) && hasKey(b, property)) { + mismatchKeys.push("expected has key '" + property + "', but missing from actual."); + } + } + for (property in a) { + if (!hasKey(b, property) && hasKey(a, property)) { + mismatchKeys.push("expected missing key '" + property + "', but present in actual."); + } + } + for (property in b) { + if (property == '__Jasmine_been_here_before__') continue; + if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) { + mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual."); + } + } + + if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) { + mismatchValues.push("arrays were not the same length"); + } + + delete a.__Jasmine_been_here_before__; + delete b.__Jasmine_been_here_before__; + return (mismatchKeys.length === 0 && mismatchValues.length === 0); +}; + +jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) { + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + for (var i = 0; i < this.equalityTesters_.length; i++) { + var equalityTester = this.equalityTesters_[i]; + var result = equalityTester(a, b, this, mismatchKeys, mismatchValues); + if (result !== jasmine.undefined) return result; + } + + if (a === b) return true; + + if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) { + return (a == jasmine.undefined && b == jasmine.undefined); + } + + if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) { + return a === b; + } + + if (a instanceof Date && b instanceof Date) { + return a.getTime() == b.getTime(); + } + + if (a.jasmineMatches) { + return a.jasmineMatches(b); + } + + if (b.jasmineMatches) { + return b.jasmineMatches(a); + } + + if (a instanceof jasmine.Matchers.ObjectContaining) { + return a.matches(b); + } + + if (b instanceof jasmine.Matchers.ObjectContaining) { + return b.matches(a); + } + + if (jasmine.isString_(a) && jasmine.isString_(b)) { + return (a == b); + } + + if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) { + return (a == b); + } + + if (a instanceof RegExp && b instanceof RegExp) { + return this.compareRegExps_(a, b, mismatchKeys, mismatchValues); + } + + if (typeof a === "object" && typeof b === "object") { + return this.compareObjects_(a, b, mismatchKeys, mismatchValues); + } + + //Straight check + return (a === b); +}; + +jasmine.Env.prototype.contains_ = function(haystack, needle) { + if (jasmine.isArray_(haystack)) { + for (var i = 0; i < haystack.length; i++) { + if (this.equals_(haystack[i], needle)) return true; + } + return false; + } + return haystack.indexOf(needle) >= 0; +}; + +jasmine.Env.prototype.addEqualityTester = function(equalityTester) { + this.equalityTesters_.push(equalityTester); +}; +/** No-op base class for Jasmine reporters. + * + * @constructor + */ +jasmine.Reporter = function() { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.reportRunnerStarting = function(runner) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.reportRunnerResults = function(runner) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.reportSuiteResults = function(suite) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.reportSpecStarting = function(spec) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.reportSpecResults = function(spec) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.Reporter.prototype.log = function(str) { +}; + +/** + * Blocks are functions with executable code that make up a spec. + * + * @constructor + * @param {jasmine.Env} env + * @param {Function} func + * @param {jasmine.Spec} spec + */ +jasmine.Block = function(env, func, spec) { + this.env = env; + this.func = func; + this.spec = spec; +}; + +jasmine.Block.prototype.execute = function(onComplete) { + if (!jasmine.CATCH_EXCEPTIONS) { + this.func.apply(this.spec); + } + else { + try { + this.func.apply(this.spec); + } catch (e) { + this.spec.fail(e); + } + } + onComplete(); +}; +/** JavaScript API reporter. + * + * @constructor + */ +jasmine.JsApiReporter = function() { + this.started = false; + this.finished = false; + this.suites_ = []; + this.results_ = {}; +}; + +jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) { + this.started = true; + var suites = runner.topLevelSuites(); + for (var i = 0; i < suites.length; i++) { + var suite = suites[i]; + this.suites_.push(this.summarize_(suite)); + } +}; + +jasmine.JsApiReporter.prototype.suites = function() { + return this.suites_; +}; + +jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) { + var isSuite = suiteOrSpec instanceof jasmine.Suite; + var summary = { + id: suiteOrSpec.id, + name: suiteOrSpec.description, + type: isSuite ? 'suite' : 'spec', + children: [] + }; + + if (isSuite) { + var children = suiteOrSpec.children(); + for (var i = 0; i < children.length; i++) { + summary.children.push(this.summarize_(children[i])); + } + } + return summary; +}; + +jasmine.JsApiReporter.prototype.results = function() { + return this.results_; +}; + +jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) { + return this.results_[specId]; +}; + +//noinspection JSUnusedLocalSymbols +jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) { + this.finished = true; +}; + +//noinspection JSUnusedLocalSymbols +jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) { +}; + +//noinspection JSUnusedLocalSymbols +jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) { + this.results_[spec.id] = { + messages: spec.results().getItems(), + result: spec.results().failedCount > 0 ? "failed" : "passed" + }; +}; + +//noinspection JSUnusedLocalSymbols +jasmine.JsApiReporter.prototype.log = function(str) { +}; + +jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){ + var results = {}; + for (var i = 0; i < specIds.length; i++) { + var specId = specIds[i]; + results[specId] = this.summarizeResult_(this.results_[specId]); + } + return results; +}; + +jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){ + var summaryMessages = []; + var messagesLength = result.messages.length; + for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) { + var resultMessage = result.messages[messageIndex]; + summaryMessages.push({ + text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined, + passed: resultMessage.passed ? resultMessage.passed() : true, + type: resultMessage.type, + message: resultMessage.message, + trace: { + stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined + } + }); + } + + return { + result : result.result, + messages : summaryMessages + }; +}; + +/** + * @constructor + * @param {jasmine.Env} env + * @param actual + * @param {jasmine.Spec} spec + */ +jasmine.Matchers = function(env, actual, spec, opt_isNot) { + this.env = env; + this.actual = actual; + this.spec = spec; + this.isNot = opt_isNot || false; + this.reportWasCalled_ = false; +}; + +// todo: @deprecated as of Jasmine 0.11, remove soon [xw] +jasmine.Matchers.pp = function(str) { + throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!"); +}; + +// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw] +jasmine.Matchers.prototype.report = function(result, failing_message, details) { + throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs"); +}; + +jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) { + for (var methodName in prototype) { + if (methodName == 'report') continue; + var orig = prototype[methodName]; + matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig); + } +}; + +jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) { + return function() { + var matcherArgs = jasmine.util.argsToArray(arguments); + var result = matcherFunction.apply(this, arguments); + + if (this.isNot) { + result = !result; + } + + if (this.reportWasCalled_) return result; + + var message; + if (!result) { + if (this.message) { + message = this.message.apply(this, arguments); + if (jasmine.isArray_(message)) { + message = message[this.isNot ? 1 : 0]; + } + } else { + var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate; + if (matcherArgs.length > 0) { + for (var i = 0; i < matcherArgs.length; i++) { + if (i > 0) message += ","; + message += " " + jasmine.pp(matcherArgs[i]); + } + } + message += "."; + } + } + var expectationResult = new jasmine.ExpectationResult({ + matcherName: matcherName, + passed: result, + expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0], + actual: this.actual, + message: message + }); + this.spec.addMatcherResult(expectationResult); + return jasmine.undefined; + }; +}; + + + + +/** + * toBe: compares the actual to the expected using === + * @param expected + */ +jasmine.Matchers.prototype.toBe = function(expected) { + return this.actual === expected; +}; + +/** + * toNotBe: compares the actual to the expected using !== + * @param expected + * @deprecated as of 1.0. Use not.toBe() instead. + */ +jasmine.Matchers.prototype.toNotBe = function(expected) { + return this.actual !== expected; +}; + +/** + * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc. + * + * @param expected + */ +jasmine.Matchers.prototype.toEqual = function(expected) { + return this.env.equals_(this.actual, expected); +}; + +/** + * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual + * @param expected + * @deprecated as of 1.0. Use not.toEqual() instead. + */ +jasmine.Matchers.prototype.toNotEqual = function(expected) { + return !this.env.equals_(this.actual, expected); +}; + +/** + * Matcher that compares the actual to the expected using a regular expression. Constructs a RegExp, so takes + * a pattern or a String. + * + * @param expected + */ +jasmine.Matchers.prototype.toMatch = function(expected) { + return new RegExp(expected).test(this.actual); +}; + +/** + * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch + * @param expected + * @deprecated as of 1.0. Use not.toMatch() instead. + */ +jasmine.Matchers.prototype.toNotMatch = function(expected) { + return !(new RegExp(expected).test(this.actual)); +}; + +/** + * Matcher that compares the actual to jasmine.undefined. + */ +jasmine.Matchers.prototype.toBeDefined = function() { + return (this.actual !== jasmine.undefined); +}; + +/** + * Matcher that compares the actual to jasmine.undefined. + */ +jasmine.Matchers.prototype.toBeUndefined = function() { + return (this.actual === jasmine.undefined); +}; + +/** + * Matcher that compares the actual to null. + */ +jasmine.Matchers.prototype.toBeNull = function() { + return (this.actual === null); +}; + +/** + * Matcher that compares the actual to NaN. + */ +jasmine.Matchers.prototype.toBeNaN = function() { + this.message = function() { + return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ]; + }; + + return (this.actual !== this.actual); +}; + +/** + * Matcher that boolean not-nots the actual. + */ +jasmine.Matchers.prototype.toBeTruthy = function() { + return !!this.actual; +}; + + +/** + * Matcher that boolean nots the actual. + */ +jasmine.Matchers.prototype.toBeFalsy = function() { + return !this.actual; +}; + + +/** + * Matcher that checks to see if the actual, a Jasmine spy, was called. + */ +jasmine.Matchers.prototype.toHaveBeenCalled = function() { + if (arguments.length > 0) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + if (!jasmine.isSpy(this.actual)) { + throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); + } + + this.message = function() { + return [ + "Expected spy " + this.actual.identity + " to have been called.", + "Expected spy " + this.actual.identity + " not to have been called." + ]; + }; + + return this.actual.wasCalled; +}; + +/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */ +jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled; + +/** + * Matcher that checks to see if the actual, a Jasmine spy, was not called. + * + * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead + */ +jasmine.Matchers.prototype.wasNotCalled = function() { + if (arguments.length > 0) { + throw new Error('wasNotCalled does not take arguments'); + } + + if (!jasmine.isSpy(this.actual)) { + throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); + } + + this.message = function() { + return [ + "Expected spy " + this.actual.identity + " to not have been called.", + "Expected spy " + this.actual.identity + " to have been called." + ]; + }; + + return !this.actual.wasCalled; +}; + +/** + * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters. + * + * @example + * + */ +jasmine.Matchers.prototype.toHaveBeenCalledWith = function() { + var expectedArgs = jasmine.util.argsToArray(arguments); + if (!jasmine.isSpy(this.actual)) { + throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); + } + this.message = function() { + var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was."; + var positiveMessage = ""; + if (this.actual.callCount === 0) { + positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called."; + } else { + positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but actual calls were " + jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '') + } + return [positiveMessage, invertedMessage]; + }; + + return this.env.contains_(this.actual.argsForCall, expectedArgs); +}; + +/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */ +jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith; + +/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */ +jasmine.Matchers.prototype.wasNotCalledWith = function() { + var expectedArgs = jasmine.util.argsToArray(arguments); + if (!jasmine.isSpy(this.actual)) { + throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.'); + } + + this.message = function() { + return [ + "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was", + "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was" + ]; + }; + + return !this.env.contains_(this.actual.argsForCall, expectedArgs); +}; + +/** + * Matcher that checks that the expected item is an element in the actual Array. + * + * @param {Object} expected + */ +jasmine.Matchers.prototype.toContain = function(expected) { + return this.env.contains_(this.actual, expected); +}; + +/** + * Matcher that checks that the expected item is NOT an element in the actual Array. + * + * @param {Object} expected + * @deprecated as of 1.0. Use not.toContain() instead. + */ +jasmine.Matchers.prototype.toNotContain = function(expected) { + return !this.env.contains_(this.actual, expected); +}; + +jasmine.Matchers.prototype.toBeLessThan = function(expected) { + return this.actual < expected; +}; + +jasmine.Matchers.prototype.toBeGreaterThan = function(expected) { + return this.actual > expected; +}; + +/** + * Matcher that checks that the expected item is equal to the actual item + * up to a given level of decimal precision (default 2). + * + * @param {Number} expected + * @param {Number} precision, as number of decimal places + */ +jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) { + if (!(precision === 0)) { + precision = precision || 2; + } + return Math.abs(expected - this.actual) < (Math.pow(10, -precision) / 2); +}; + +/** + * Matcher that checks that the expected exception was thrown by the actual. + * + * @param {String} [expected] + */ +jasmine.Matchers.prototype.toThrow = function(expected) { + var result = false; + var exception; + if (typeof this.actual != 'function') { + throw new Error('Actual is not a function'); + } + try { + this.actual(); + } catch (e) { + exception = e; + } + if (exception) { + result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected)); + } + + var not = this.isNot ? "not " : ""; + + this.message = function() { + if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) { + return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' '); + } else { + return "Expected function to throw an exception."; + } + }; + + return result; +}; + +jasmine.Matchers.Any = function(expectedClass) { + this.expectedClass = expectedClass; +}; + +jasmine.Matchers.Any.prototype.jasmineMatches = function(other) { + if (this.expectedClass == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedClass == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedClass == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedClass == Object) { + return typeof other == 'object'; + } + + return other instanceof this.expectedClass; +}; + +jasmine.Matchers.Any.prototype.jasmineToString = function() { + return ''; +}; + +jasmine.Matchers.ObjectContaining = function (sample) { + this.sample = sample; +}; + +jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + var env = jasmine.getEnv(); + + var hasKey = function(obj, keyName) { + return obj != null && obj[keyName] !== jasmine.undefined; + }; + + for (var property in this.sample) { + if (!hasKey(other, property) && hasKey(this.sample, property)) { + mismatchKeys.push("expected has key '" + property + "', but missing from actual."); + } + else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) { + mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual."); + } + } + + return (mismatchKeys.length === 0 && mismatchValues.length === 0); +}; + +jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () { + return ""; +}; +// Mock setTimeout, clearTimeout +// Contributed by Pivotal Computer Systems, www.pivotalsf.com + +jasmine.FakeTimer = function() { + this.reset(); + + var self = this; + self.setTimeout = function(funcToCall, millis) { + self.timeoutsMade++; + self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false); + return self.timeoutsMade; + }; + + self.setInterval = function(funcToCall, millis) { + self.timeoutsMade++; + self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true); + return self.timeoutsMade; + }; + + self.clearTimeout = function(timeoutKey) { + self.scheduledFunctions[timeoutKey] = jasmine.undefined; + }; + + self.clearInterval = function(timeoutKey) { + self.scheduledFunctions[timeoutKey] = jasmine.undefined; + }; + +}; + +jasmine.FakeTimer.prototype.reset = function() { + this.timeoutsMade = 0; + this.scheduledFunctions = {}; + this.nowMillis = 0; +}; + +jasmine.FakeTimer.prototype.tick = function(millis) { + var oldMillis = this.nowMillis; + var newMillis = oldMillis + millis; + this.runFunctionsWithinRange(oldMillis, newMillis); + this.nowMillis = newMillis; +}; + +jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) { + var scheduledFunc; + var funcsToRun = []; + for (var timeoutKey in this.scheduledFunctions) { + scheduledFunc = this.scheduledFunctions[timeoutKey]; + if (scheduledFunc != jasmine.undefined && + scheduledFunc.runAtMillis >= oldMillis && + scheduledFunc.runAtMillis <= nowMillis) { + funcsToRun.push(scheduledFunc); + this.scheduledFunctions[timeoutKey] = jasmine.undefined; + } + } + + if (funcsToRun.length > 0) { + funcsToRun.sort(function(a, b) { + return a.runAtMillis - b.runAtMillis; + }); + for (var i = 0; i < funcsToRun.length; ++i) { + try { + var funcToRun = funcsToRun[i]; + this.nowMillis = funcToRun.runAtMillis; + funcToRun.funcToCall(); + if (funcToRun.recurring) { + this.scheduleFunction(funcToRun.timeoutKey, + funcToRun.funcToCall, + funcToRun.millis, + true); + } + } catch(e) { + } + } + this.runFunctionsWithinRange(oldMillis, nowMillis); + } +}; + +jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) { + this.scheduledFunctions[timeoutKey] = { + runAtMillis: this.nowMillis + millis, + funcToCall: funcToCall, + recurring: recurring, + timeoutKey: timeoutKey, + millis: millis + }; +}; + +/** + * @namespace + */ +jasmine.Clock = { + defaultFakeTimer: new jasmine.FakeTimer(), + + reset: function() { + jasmine.Clock.assertInstalled(); + jasmine.Clock.defaultFakeTimer.reset(); + }, + + tick: function(millis) { + jasmine.Clock.assertInstalled(); + jasmine.Clock.defaultFakeTimer.tick(millis); + }, + + runFunctionsWithinRange: function(oldMillis, nowMillis) { + jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis); + }, + + scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) { + jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring); + }, + + useMock: function() { + if (!jasmine.Clock.isInstalled()) { + var spec = jasmine.getEnv().currentSpec; + spec.after(jasmine.Clock.uninstallMock); + + jasmine.Clock.installMock(); + } + }, + + installMock: function() { + jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer; + }, + + uninstallMock: function() { + jasmine.Clock.assertInstalled(); + jasmine.Clock.installed = jasmine.Clock.real; + }, + + real: { + setTimeout: jasmine.getGlobal().setTimeout, + clearTimeout: jasmine.getGlobal().clearTimeout, + setInterval: jasmine.getGlobal().setInterval, + clearInterval: jasmine.getGlobal().clearInterval + }, + + assertInstalled: function() { + if (!jasmine.Clock.isInstalled()) { + throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()"); + } + }, + + isInstalled: function() { + return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer; + }, + + installed: null +}; +jasmine.Clock.installed = jasmine.Clock.real; + +//else for IE support +jasmine.getGlobal().setTimeout = function(funcToCall, millis) { + if (jasmine.Clock.installed.setTimeout.apply) { + return jasmine.Clock.installed.setTimeout.apply(this, arguments); + } else { + return jasmine.Clock.installed.setTimeout(funcToCall, millis); + } +}; + +jasmine.getGlobal().setInterval = function(funcToCall, millis) { + if (jasmine.Clock.installed.setInterval.apply) { + return jasmine.Clock.installed.setInterval.apply(this, arguments); + } else { + return jasmine.Clock.installed.setInterval(funcToCall, millis); + } +}; + +jasmine.getGlobal().clearTimeout = function(timeoutKey) { + if (jasmine.Clock.installed.clearTimeout.apply) { + return jasmine.Clock.installed.clearTimeout.apply(this, arguments); + } else { + return jasmine.Clock.installed.clearTimeout(timeoutKey); + } +}; + +jasmine.getGlobal().clearInterval = function(timeoutKey) { + if (jasmine.Clock.installed.clearTimeout.apply) { + return jasmine.Clock.installed.clearInterval.apply(this, arguments); + } else { + return jasmine.Clock.installed.clearInterval(timeoutKey); + } +}; + +/** + * @constructor + */ +jasmine.MultiReporter = function() { + this.subReporters_ = []; +}; +jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter); + +jasmine.MultiReporter.prototype.addReporter = function(reporter) { + this.subReporters_.push(reporter); +}; + +(function() { + var functionNames = [ + "reportRunnerStarting", + "reportRunnerResults", + "reportSuiteResults", + "reportSpecStarting", + "reportSpecResults", + "log" + ]; + for (var i = 0; i < functionNames.length; i++) { + var functionName = functionNames[i]; + jasmine.MultiReporter.prototype[functionName] = (function(functionName) { + return function() { + for (var j = 0; j < this.subReporters_.length; j++) { + var subReporter = this.subReporters_[j]; + if (subReporter[functionName]) { + subReporter[functionName].apply(subReporter, arguments); + } + } + }; + })(functionName); + } +})(); +/** + * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults + * + * @constructor + */ +jasmine.NestedResults = function() { + /** + * The total count of results + */ + this.totalCount = 0; + /** + * Number of passed results + */ + this.passedCount = 0; + /** + * Number of failed results + */ + this.failedCount = 0; + /** + * Was this suite/spec skipped? + */ + this.skipped = false; + /** + * @ignore + */ + this.items_ = []; +}; + +/** + * Roll up the result counts. + * + * @param result + */ +jasmine.NestedResults.prototype.rollupCounts = function(result) { + this.totalCount += result.totalCount; + this.passedCount += result.passedCount; + this.failedCount += result.failedCount; +}; + +/** + * Adds a log message. + * @param values Array of message parts which will be concatenated later. + */ +jasmine.NestedResults.prototype.log = function(values) { + this.items_.push(new jasmine.MessageResult(values)); +}; + +/** + * Getter for the results: message & results. + */ +jasmine.NestedResults.prototype.getItems = function() { + return this.items_; +}; + +/** + * Adds a result, tracking counts (total, passed, & failed) + * @param {jasmine.ExpectationResult|jasmine.NestedResults} result + */ +jasmine.NestedResults.prototype.addResult = function(result) { + if (result.type != 'log') { + if (result.items_) { + this.rollupCounts(result); + } else { + this.totalCount++; + if (result.passed()) { + this.passedCount++; + } else { + this.failedCount++; + } + } + } + this.items_.push(result); +}; + +/** + * @returns {Boolean} True if everything below passed + */ +jasmine.NestedResults.prototype.passed = function() { + return this.passedCount === this.totalCount; +}; +/** + * Base class for pretty printing for expectation results. + */ +jasmine.PrettyPrinter = function() { + this.ppNestLevel_ = 0; +}; + +/** + * Formats a value in a nice, human-readable string. + * + * @param value + */ +jasmine.PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (value === jasmine.undefined) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === jasmine.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (jasmine.isSpy(value)) { + this.emitScalar("spy on " + value.identity); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (value.__Jasmine_been_here_before__) { + this.emitScalar(''); + } else if (jasmine.isArray_(value) || typeof value == 'object') { + value.__Jasmine_been_here_before__ = true; + if (jasmine.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + delete value.__Jasmine_been_here_before__; + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } +}; + +jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!obj.hasOwnProperty(property)) continue; + if (property == '__Jasmine_been_here_before__') continue; + fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined && + obj.__lookupGetter__(property) !== null) : false); + } +}; + +jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_; +jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_; +jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_; +jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_; + +jasmine.StringPrettyPrinter = function() { + jasmine.PrettyPrinter.call(this); + + this.string = ''; +}; +jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter); + +jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); +}; + +jasmine.StringPrettyPrinter.prototype.emitString = function(value) { + this.append("'" + value + "'"); +}; + +jasmine.StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) { + this.append("Array"); + return; + } + + this.append('[ '); + for (var i = 0; i < array.length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + this.append(' ]'); +}; + +jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) { + if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) { + this.append("Object"); + return; + } + + var self = this; + this.append('{ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(' : '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' }'); +}; + +jasmine.StringPrettyPrinter.prototype.append = function(value) { + this.string += value; +}; +jasmine.Queue = function(env) { + this.env = env; + + // parallel to blocks. each true value in this array means the block will + // get executed even if we abort + this.ensured = []; + this.blocks = []; + this.running = false; + this.index = 0; + this.offset = 0; + this.abort = false; +}; + +jasmine.Queue.prototype.addBefore = function(block, ensure) { + if (ensure === jasmine.undefined) { + ensure = false; + } + + this.blocks.unshift(block); + this.ensured.unshift(ensure); +}; + +jasmine.Queue.prototype.add = function(block, ensure) { + if (ensure === jasmine.undefined) { + ensure = false; + } + + this.blocks.push(block); + this.ensured.push(ensure); +}; + +jasmine.Queue.prototype.insertNext = function(block, ensure) { + if (ensure === jasmine.undefined) { + ensure = false; + } + + this.ensured.splice((this.index + this.offset + 1), 0, ensure); + this.blocks.splice((this.index + this.offset + 1), 0, block); + this.offset++; +}; + +jasmine.Queue.prototype.start = function(onComplete) { + this.running = true; + this.onComplete = onComplete; + this.next_(); +}; + +jasmine.Queue.prototype.isRunning = function() { + return this.running; +}; + +jasmine.Queue.LOOP_DONT_RECURSE = true; + +jasmine.Queue.prototype.next_ = function() { + var self = this; + var goAgain = true; + + while (goAgain) { + goAgain = false; + + if (self.index < self.blocks.length && !(this.abort && !this.ensured[self.index])) { + var calledSynchronously = true; + var completedSynchronously = false; + + var onComplete = function () { + if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) { + completedSynchronously = true; + return; + } + + if (self.blocks[self.index].abort) { + self.abort = true; + } + + self.offset = 0; + self.index++; + + var now = new Date().getTime(); + if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) { + self.env.lastUpdate = now; + self.env.setTimeout(function() { + self.next_(); + }, 0); + } else { + if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) { + goAgain = true; + } else { + self.next_(); + } + } + }; + self.blocks[self.index].execute(onComplete); + + calledSynchronously = false; + if (completedSynchronously) { + onComplete(); + } + + } else { + self.running = false; + if (self.onComplete) { + self.onComplete(); + } + } + } +}; + +jasmine.Queue.prototype.results = function() { + var results = new jasmine.NestedResults(); + for (var i = 0; i < this.blocks.length; i++) { + if (this.blocks[i].results) { + results.addResult(this.blocks[i].results()); + } + } + return results; +}; + + +/** + * Runner + * + * @constructor + * @param {jasmine.Env} env + */ +jasmine.Runner = function(env) { + var self = this; + self.env = env; + self.queue = new jasmine.Queue(env); + self.before_ = []; + self.after_ = []; + self.suites_ = []; +}; + +jasmine.Runner.prototype.execute = function() { + var self = this; + if (self.env.reporter.reportRunnerStarting) { + self.env.reporter.reportRunnerStarting(this); + } + self.queue.start(function () { + self.finishCallback(); + }); +}; + +jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) { + beforeEachFunction.typeName = 'beforeEach'; + this.before_.splice(0,0,beforeEachFunction); +}; + +jasmine.Runner.prototype.afterEach = function(afterEachFunction) { + afterEachFunction.typeName = 'afterEach'; + this.after_.splice(0,0,afterEachFunction); +}; + + +jasmine.Runner.prototype.finishCallback = function() { + this.env.reporter.reportRunnerResults(this); +}; + +jasmine.Runner.prototype.addSuite = function(suite) { + this.suites_.push(suite); +}; + +jasmine.Runner.prototype.add = function(block) { + if (block instanceof jasmine.Suite) { + this.addSuite(block); + } + this.queue.add(block); +}; + +jasmine.Runner.prototype.specs = function () { + var suites = this.suites(); + var specs = []; + for (var i = 0; i < suites.length; i++) { + specs = specs.concat(suites[i].specs()); + } + return specs; +}; + +jasmine.Runner.prototype.suites = function() { + return this.suites_; +}; + +jasmine.Runner.prototype.topLevelSuites = function() { + var topLevelSuites = []; + for (var i = 0; i < this.suites_.length; i++) { + if (!this.suites_[i].parentSuite) { + topLevelSuites.push(this.suites_[i]); + } + } + return topLevelSuites; +}; + +jasmine.Runner.prototype.results = function() { + return this.queue.results(); +}; +/** + * Internal representation of a Jasmine specification, or test. + * + * @constructor + * @param {jasmine.Env} env + * @param {jasmine.Suite} suite + * @param {String} description + */ +jasmine.Spec = function(env, suite, description) { + if (!env) { + throw new Error('jasmine.Env() required'); + } + if (!suite) { + throw new Error('jasmine.Suite() required'); + } + var spec = this; + spec.id = env.nextSpecId ? env.nextSpecId() : null; + spec.env = env; + spec.suite = suite; + spec.description = description; + spec.queue = new jasmine.Queue(env); + + spec.afterCallbacks = []; + spec.spies_ = []; + + spec.results_ = new jasmine.NestedResults(); + spec.results_.description = description; + spec.matchersClass = null; +}; + +jasmine.Spec.prototype.getFullName = function() { + return this.suite.getFullName() + ' ' + this.description + '.'; +}; + + +jasmine.Spec.prototype.results = function() { + return this.results_; +}; + +/** + * All parameters are pretty-printed and concatenated together, then written to the spec's output. + * + * Be careful not to leave calls to jasmine.log in production code. + */ +jasmine.Spec.prototype.log = function() { + return this.results_.log(arguments); +}; + +jasmine.Spec.prototype.runs = function (func) { + var block = new jasmine.Block(this.env, func, this); + this.addToQueue(block); + return this; +}; + +jasmine.Spec.prototype.addToQueue = function (block) { + if (this.queue.isRunning()) { + this.queue.insertNext(block); + } else { + this.queue.add(block); + } +}; + +/** + * @param {jasmine.ExpectationResult} result + */ +jasmine.Spec.prototype.addMatcherResult = function(result) { + this.results_.addResult(result); +}; + +jasmine.Spec.prototype.expect = function(actual) { + var positive = new (this.getMatchersClass_())(this.env, actual, this); + positive.not = new (this.getMatchersClass_())(this.env, actual, this, true); + return positive; +}; + +/** + * Waits a fixed time period before moving to the next block. + * + * @deprecated Use waitsFor() instead + * @param {Number} timeout milliseconds to wait + */ +jasmine.Spec.prototype.waits = function(timeout) { + var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this); + this.addToQueue(waitsFunc); + return this; +}; + +/** + * Waits for the latchFunction to return true before proceeding to the next block. + * + * @param {Function} latchFunction + * @param {String} optional_timeoutMessage + * @param {Number} optional_timeout + */ +jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { + var latchFunction_ = null; + var optional_timeoutMessage_ = null; + var optional_timeout_ = null; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + switch (typeof arg) { + case 'function': + latchFunction_ = arg; + break; + case 'string': + optional_timeoutMessage_ = arg; + break; + case 'number': + optional_timeout_ = arg; + break; + } + } + + var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this); + this.addToQueue(waitsForFunc); + return this; +}; + +jasmine.Spec.prototype.fail = function (e) { + var expectationResult = new jasmine.ExpectationResult({ + passed: false, + message: e ? jasmine.util.formatException(e) : 'Exception', + trace: { stack: e.stack } + }); + this.results_.addResult(expectationResult); +}; + +jasmine.Spec.prototype.getMatchersClass_ = function() { + return this.matchersClass || this.env.matchersClass; +}; + +jasmine.Spec.prototype.addMatchers = function(matchersPrototype) { + var parent = this.getMatchersClass_(); + var newMatchersClass = function() { + parent.apply(this, arguments); + }; + jasmine.util.inherit(newMatchersClass, parent); + jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass); + this.matchersClass = newMatchersClass; +}; + +jasmine.Spec.prototype.finishCallback = function() { + this.env.reporter.reportSpecResults(this); +}; + +jasmine.Spec.prototype.finish = function(onComplete) { + this.removeAllSpies(); + this.finishCallback(); + if (onComplete) { + onComplete(); + } +}; + +jasmine.Spec.prototype.after = function(doAfter) { + if (this.queue.isRunning()) { + this.queue.add(new jasmine.Block(this.env, doAfter, this), true); + } else { + this.afterCallbacks.unshift(doAfter); + } +}; + +jasmine.Spec.prototype.execute = function(onComplete) { + var spec = this; + if (!spec.env.specFilter(spec)) { + spec.results_.skipped = true; + spec.finish(onComplete); + return; + } + + this.env.reporter.reportSpecStarting(this); + + spec.env.currentSpec = spec; + + spec.addBeforesAndAftersToQueue(); + + spec.queue.start(function () { + spec.finish(onComplete); + }); +}; + +jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() { + var runner = this.env.currentRunner(); + var i; + + for (var suite = this.suite; suite; suite = suite.parentSuite) { + for (i = 0; i < suite.before_.length; i++) { + this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this)); + } + } + for (i = 0; i < runner.before_.length; i++) { + this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this)); + } + for (i = 0; i < this.afterCallbacks.length; i++) { + this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this), true); + } + for (suite = this.suite; suite; suite = suite.parentSuite) { + for (i = 0; i < suite.after_.length; i++) { + this.queue.add(new jasmine.Block(this.env, suite.after_[i], this), true); + } + } + for (i = 0; i < runner.after_.length; i++) { + this.queue.add(new jasmine.Block(this.env, runner.after_[i], this), true); + } +}; + +jasmine.Spec.prototype.explodes = function() { + throw 'explodes function should not have been called'; +}; + +jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) { + if (obj == jasmine.undefined) { + throw "spyOn could not find an object to spy upon for " + methodName + "()"; + } + + if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) { + throw methodName + '() method does not exist'; + } + + if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) { + throw new Error(methodName + ' has already been spied upon'); + } + + var spyObj = jasmine.createSpy(methodName); + + this.spies_.push(spyObj); + spyObj.baseObj = obj; + spyObj.methodName = methodName; + spyObj.originalValue = obj[methodName]; + + obj[methodName] = spyObj; + + return spyObj; +}; + +jasmine.Spec.prototype.removeAllSpies = function() { + for (var i = 0; i < this.spies_.length; i++) { + var spy = this.spies_[i]; + spy.baseObj[spy.methodName] = spy.originalValue; + } + this.spies_ = []; +}; + +/** + * Internal representation of a Jasmine suite. + * + * @constructor + * @param {jasmine.Env} env + * @param {String} description + * @param {Function} specDefinitions + * @param {jasmine.Suite} parentSuite + */ +jasmine.Suite = function(env, description, specDefinitions, parentSuite) { + var self = this; + self.id = env.nextSuiteId ? env.nextSuiteId() : null; + self.description = description; + self.queue = new jasmine.Queue(env); + self.parentSuite = parentSuite; + self.env = env; + self.before_ = []; + self.after_ = []; + self.children_ = []; + self.suites_ = []; + self.specs_ = []; +}; + +jasmine.Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + return fullName; +}; + +jasmine.Suite.prototype.finish = function(onComplete) { + this.env.reporter.reportSuiteResults(this); + this.finished = true; + if (typeof(onComplete) == 'function') { + onComplete(); + } +}; + +jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) { + beforeEachFunction.typeName = 'beforeEach'; + this.before_.unshift(beforeEachFunction); +}; + +jasmine.Suite.prototype.afterEach = function(afterEachFunction) { + afterEachFunction.typeName = 'afterEach'; + this.after_.unshift(afterEachFunction); +}; + +jasmine.Suite.prototype.results = function() { + return this.queue.results(); +}; + +jasmine.Suite.prototype.add = function(suiteOrSpec) { + this.children_.push(suiteOrSpec); + if (suiteOrSpec instanceof jasmine.Suite) { + this.suites_.push(suiteOrSpec); + this.env.currentRunner().addSuite(suiteOrSpec); + } else { + this.specs_.push(suiteOrSpec); + } + this.queue.add(suiteOrSpec); +}; + +jasmine.Suite.prototype.specs = function() { + return this.specs_; +}; + +jasmine.Suite.prototype.suites = function() { + return this.suites_; +}; + +jasmine.Suite.prototype.children = function() { + return this.children_; +}; + +jasmine.Suite.prototype.execute = function(onComplete) { + var self = this; + this.queue.start(function () { + self.finish(onComplete); + }); +}; +jasmine.WaitsBlock = function(env, timeout, spec) { + this.timeout = timeout; + jasmine.Block.call(this, env, null, spec); +}; + +jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block); + +jasmine.WaitsBlock.prototype.execute = function (onComplete) { + if (jasmine.VERBOSE) { + this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...'); + } + this.env.setTimeout(function () { + onComplete(); + }, this.timeout); +}; +/** + * A block which waits for some condition to become true, with timeout. + * + * @constructor + * @extends jasmine.Block + * @param {jasmine.Env} env The Jasmine environment. + * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true. + * @param {Function} latchFunction A function which returns true when the desired condition has been met. + * @param {String} message The message to display if the desired condition hasn't been met within the given time period. + * @param {jasmine.Spec} spec The Jasmine spec. + */ +jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) { + this.timeout = timeout || env.defaultTimeoutInterval; + this.latchFunction = latchFunction; + this.message = message; + this.totalTimeSpentWaitingForLatch = 0; + jasmine.Block.call(this, env, null, spec); +}; +jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block); + +jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10; + +jasmine.WaitsForBlock.prototype.execute = function(onComplete) { + if (jasmine.VERBOSE) { + this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen')); + } + var latchFunctionResult; + try { + latchFunctionResult = this.latchFunction.apply(this.spec); + } catch (e) { + this.spec.fail(e); + onComplete(); + return; + } + + if (latchFunctionResult) { + onComplete(); + } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) { + var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen'); + this.spec.fail({ + name: 'timeout', + message: message + }); + + this.abort = true; + onComplete(); + } else { + this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT; + var self = this; + this.env.setTimeout(function() { + self.execute(onComplete); + }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT); + } +}; + +jasmine.version_= { + "major": 1, + "minor": 3, + "build": 1, + "revision": 1354556913 +}; diff --git a/js/js-storage-master/Jasmine/lib/js.cookie.js b/js/js-storage-master/Jasmine/lib/js.cookie.js new file mode 100644 index 00000000..c0a81d67 --- /dev/null +++ b/js/js-storage-master/Jasmine/lib/js.cookie.js @@ -0,0 +1,155 @@ +/*! + * JavaScript Cookie v2.1.1 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +;(function (factory) { + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + var OldCookies = window.Cookies; + var api = window.Cookies = factory(); + api.noConflict = function () { + window.Cookies = OldCookies; + return api; + }; + } +}(function () { + function extend() { + var i = 0; + var result = {}; + for (; i < arguments.length; i++) { + var attributes = arguments[i]; + for (var key in attributes) { + result[key] = attributes[key]; + } + } + return result; + } + + function init(converter) { + function api(key, value, attributes) { + var result; + if (typeof document === 'undefined') { + return; + } + + // Write + + if (arguments.length > 1) { + attributes = extend({ + path: '/' + }, api.defaults, attributes); + + if (typeof attributes.expires === 'number') { + var expires = new Date(); + expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); + attributes.expires = expires; + } + + try { + result = JSON.stringify(value); + if (/^[\{\[]/.test(result)) { + value = result; + } + } catch (e) { + } + + if (!converter.write) { + value = encodeURIComponent(String(value)) + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + } else { + value = converter.write(value, key); + } + + key = encodeURIComponent(String(key)); + key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); + key = key.replace(/[\(\)]/g, escape); + + return (document.cookie = [ + key, '=', value, + attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE + attributes.path && '; path=' + attributes.path, + attributes.domain && '; domain=' + attributes.domain, + attributes.secure ? '; secure' : '' + ].join('')); + } + + // Read + + if (!key) { + result = {}; + } + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling "get()" + var cookies = document.cookie ? document.cookie.split('; ') : []; + var rdecode = /(%[0-9A-Z]{2})+/g; + var i = 0; + + for (; i < cookies.length; i++) { + var parts = cookies[i].split('='); + var name = parts[0].replace(rdecode, decodeURIComponent); + var cookie = parts.slice(1).join('='); + + if (cookie.charAt(0) === '"') { + cookie = cookie.slice(1, -1); + } + + try { + cookie = converter.read ? + converter.read(cookie, name) : converter(cookie, name) || + cookie.replace(rdecode, decodeURIComponent); + + if (this.json) { + try { + cookie = JSON.parse(cookie); + } catch (e) { + } + } + + if (key === name) { + result = cookie; + break; + } + + if (!key) { + result[name] = cookie; + } + } catch (e) { + } + } + + return result; + } + + api.set = api; + api.get = function (key) { + return api(key); + }; + api.getJSON = function () { + return api.apply({ + json: true + }, [].slice.call(arguments)); + }; + api.defaults = {}; + + api.remove = function (key, attributes) { + api(key, '', extend(attributes, { + expires: -1 + })); + }; + + api.withConverter = init; + + return api; + } + + return init(function () { + }); +})); diff --git a/js/js-storage-master/Jasmine/spec/js.storage.spec.js b/js/js-storage-master/Jasmine/spec/js.storage.spec.js new file mode 100644 index 00000000..27105755 --- /dev/null +++ b/js/js-storage-master/Jasmine/spec/js.storage.spec.js @@ -0,0 +1,474 @@ +function getWindowStorage(name) { + if (testStorage(name)) return window[name]; + return window[name.replace('Storage', 'CookieStorage')]; +} + +function testStorage(name) { + if (!window[name]) return false; + var foo = 'jsapi'; + try { + window[name].setItem(foo, foo); + window[name].removeItem(foo); + return true; + } catch (e) { + return false; + } +} + +function clearAll() { + wl.clear(); + ws.clear(); + if (typeof Cookies !== 'undefined') { + for (var key in Cookies.get()) { + if (key != '') { + Cookies.remove(key, {path: window.cookieStorage._path}); + } + } + } +} + +wl = getWindowStorage('localStorage'); +ws = getWindowStorage('sessionStorage'); +clearAll(); + +describe("JS Storage", function () { + /* Basic tests */ + describe('Basics', function () { + if (testStorage('localStorage')) { + it("Storage are natively avalaible", function () { + expect(window.localStorage).toEqual(jasmine.any(Object)); + expect(window.sessionStorage).toEqual(jasmine.any(Object)); + }); + } else { + it("Storage are not natively avalaible but cookie fallback is enable", function () { + expect(wl).toEqual(jasmine.any(Object)); + expect(ws).toEqual(jasmine.any(Object)); + }); + } + it("'createNamespace' create a new namespace in all storages", function () { + var ns = Storages.initNamespaceStorage('test_ns'); + expect(Storages.namespaceStorages['test_ns']).toEqual(ns); + expect(wl.getItem('test_ns')).toEqual("{}"); + expect(ws.getItem('test_ns')).toEqual("{}"); + if (typeof Cookies !== 'undefined') { + expect(window.cookieStorage.getItem('test_ns')).toEqual("{}"); + } + }); + }); + + + /* Tests on all storage */ + var storage_types = ['localStorage', 'sessionStorage']; + if (typeof Cookies !== 'undefined') { + storage_types.push('cookieStorage'); + } else { + console.log("Skipping Storages.cookieStorage specs. Could not load js-cookie."); + } + storage_types.push('ns.localStorage'); + storage_types.push('ns.sessionStorage'); + if (typeof Cookies !== 'undefined') { + storage_types.push('ns.cookieStorage'); + } + + for (var s in storage_types) { + describe(storage_types[s], function () { + var substorage, storage, wstorage; + + if (storage_types[s].indexOf('ns.') === 0) { + substorage = storage_types[s].substr(3); + storage = Storages.initNamespaceStorage('test_ns')[substorage]; + wstorage = { + getItem: function (n) { + var ret = getWindowStorage(substorage).getItem('test_ns'); + ret = JSON.parse(ret); + ret = ret[n]; + if (typeof ret == "object") return JSON.stringify(ret); + else if (typeof ret == "undefined") return null; + return ret; + }, + setItem: function (n, v) { + var ret = JSON.parse(getWindowStorage(substorage).getItem('test_ns')); + try { + v = JSON.parse(v); + } catch (e) { + } + ret[n] = v; + getWindowStorage(substorage).setItem('test_ns', JSON.stringify(ret)); + } + }; + } else { + substorage = false; + storage = Storages[storage_types[s]]; + wstorage = getWindowStorage(storage_types[s]); + } + + beforeEach(function () { + if (substorage) Storages.initNamespaceStorage('test_ns'); + }); + afterEach(function () { + clearAll(); + }); + + /* Remove tests */ + it("'removeAll' removes all items", function () { + wstorage.setItem("itemToDelete1", "value1"); + wstorage.setItem("itemToDelete2", "value2"); + storage.removeAll(); + if (substorage) Storages.initNamespaceStorage('test_ns'); + expect(wstorage.getItem("itemToDelete1")).toEqual(null); + expect(wstorage.getItem("itemToDelete2")).toEqual(null); + }); + + it("'remove' removes one item (by name)", function () { + wstorage.setItem("itemToDelete", "value"); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove("itemToDelete"); + expect(wstorage.getItem("itemToDelete")).toEqual(null); + expect(wstorage.getItem("itemToNotDelete")).toEqual("value"); + }); + + it("'remove' removes one item (by chain arguments)", function () { + wstorage.setItem("itemToDelete", JSON.stringify({"item1": "value1", "item2": "value2"})); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove("itemToDelete", "item1"); + expect(JSON.parse(wstorage.getItem("itemToDelete"))).toEqual({"item2": "value2"}); + expect(wstorage.getItem("itemToNotDelete")).toEqual("value"); + }); + + it("'remove' removes one item (by js syntax)", function () { + wstorage.setItem("itemToDelete", JSON.stringify({"item1": "value1", "item2": "value2"})); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove("itemToDelete.item1"); + expect(JSON.parse(wstorage.getItem("itemToDelete"))).toEqual({"item2": "value2"}); + expect(wstorage.getItem("itemToNotDelete")).toEqual("value"); + }); + + it("'remove' removes multiple items (by name)", function () { + wstorage.setItem("itemToDelete1", "value1"); + wstorage.setItem("itemToDelete2", "value2"); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove(["itemToDelete1", "itemToDelete2"]); + expect(storage.get("itemToDelete1")).toEqual(null); + expect(storage.get("itemToDelete2")).toEqual(null); + expect(storage.get("itemToNotDelete")).toEqual("value"); + }); + + it("'remove' removes multiple items (by chain arguments)", function () { + wstorage.setItem("itemToDelete", JSON.stringify({ + "item1": "value1", + "item2": "value2", + "item3": "value3" + })); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove("itemToDelete", ["item1", "item2"]); + expect(JSON.parse(wstorage.getItem("itemToDelete"))).toEqual({"item3": "value3"}); + expect(wstorage.getItem("itemToNotDelete")).toEqual("value"); + }); + + it("'remove' removes multiple items (by js syntax)", function () { + wstorage.setItem("itemToDelete", JSON.stringify({ + "prop1": { + "item1": "value1", + "item2": "value2", + "item3": "value3" + } + })); + wstorage.setItem("itemToNotDelete", "value"); + storage.remove("itemToDelete.prop1", ["item1", "item2"]); + expect(JSON.parse(wstorage.getItem("itemToDelete")).prop1).toEqual({"item3": "value3"}); + expect(wstorage.getItem("itemToNotDelete")).toEqual("value"); + }); + + + /* Set tests */ + it("'set' stores one item (by name)", function () { + var ret = storage.set("item", "value"); + expect(ret).toEqual("value"); + expect(wstorage.getItem("item")).toEqual("value"); + }); + + it("'set' stores one item (by chain arguments)", function () { + var ret = storage.set("item", "itemprop", "value"); + expect(ret).toEqual({"itemprop": "value"}); + expect(JSON.parse(wstorage.getItem("item"))).toEqual({"itemprop": "value"}); + }); + + it("'set' stores one item (by js syntax)", function () { + var ret = storage.set("item.itemprop", "value"); + expect(ret).toEqual({"itemprop": "value"}); + expect(JSON.parse(wstorage.getItem("item"))).toEqual({"itemprop": "value"}); + }); + + it("'set' stores multiple items (by name)", function () { + var ret = storage.set({"item1": "value1", "item2": "value2"}); + expect(ret).toEqual({"item1": "value1", "item2": "value2"}); + expect(wstorage.getItem("item1")).toEqual("value1"); + expect(wstorage.getItem("item2")).toEqual("value2"); + }); + + it("'set' stores multiple items (by chain arguments)", function () { + var ret = storage.set("item", "prop1", {"item1": "value1", "item2": "value2"}); + expect(ret).toEqual({"prop1": {"item1": "value1", "item2": "value2"}}); + expect(JSON.parse(wstorage.getItem("item")).prop1.item1).toEqual("value1"); + expect(JSON.parse(wstorage.getItem("item")).prop1.item2).toEqual("value2"); + }); + + it("'set' stores multiple items (by js syntax)", function () { + var ret = storage.set("item.prop1", {"item1": "value1", "item2": "value2"}); + expect(ret).toEqual({"prop1": {"item1": "value1", "item2": "value2"}}); + expect(JSON.parse(wstorage.getItem("item")).prop1.item1).toEqual("value1"); + expect(JSON.parse(wstorage.getItem("item")).prop1.item2).toEqual("value2"); + }); + + it("'set' stores array as first level and update just one index og the array (by js syntax)", function () { + var ret; + ret = storage.set("item.2", [1, 2, 3]); + expect(ret).toEqual([undefined, undefined, [1, 2, 3]]); // ret contains value before insertion in storage, so array contains undefined values + expect(JSON.parse(wstorage.getItem("item"))).toEqual([null, null, [1, 2, 3]]); // storage use json, so undefined values are converted to null values + ret = storage.set("item.2.0", 4); + expect(ret).toEqual([null, null, [4, 2, 3]]); + expect(JSON.parse(wstorage.getItem("item"))[2]).toEqual([4, 2, 3]); + }); + + it("'set' stores array as second level and update just one index og the array (by js syntax)", function () { + var ret; + ret = storage.set("item.prop1.2", [1, 2, 3]); + expect(ret).toEqual({prop1: [undefined, undefined, [1, 2, 3]]}); // ret contains value before insertion in storage, so array contains undefined values + expect(JSON.parse(wstorage.getItem("item"))).toEqual({prop1: [null, null, [1, 2, 3]]}); // storage use json, so undefined values are converted to null values + ret = storage.set("item.prop1.2.0", 4); + expect(ret).toEqual({prop1: [null, null, [4, 2, 3]]}); + expect(JSON.parse(wstorage.getItem("item")).prop1[2]).toEqual([4, 2, 3]); + }); + + + /* Get tests */ + it("'get' retrieves one item (by name)", function () { + storage.set("item", "value"); + expect(storage.get("item")).toEqual("value"); + }); + + it("'get' retrieves one item (by chain arguments)", function () { + storage.set("item", "itemprop", "value"); + expect(storage.get("item", "itemprop")).toEqual("value"); + }); + + it("'get' retrieves one item (by js syntax)", function () { + storage.set("item", "itemprop", "value"); + expect(storage.get("item.itemprop")).toEqual("value"); + }); + + it("'get' retrieves multiple items (by name)", function () { + storage.set("item1", "value1"); + storage.set("item2", "value2"); + storage.set("item3", "value3"); + expect(storage.get(["item1", "item3"])).toEqual({"item1": "value1", "item3": "value3"}); + }); + + it("'get' retrieves multiple items (by chain arguments)", function () { + storage.set("item", {"itemprop1": "value1", "itemprop2": "value2", "itemprop3": "value3"}); + expect(storage.get("item", ["itemprop1", "itemprop3"])).toEqual({ + "itemprop1": "value1", + "itemprop3": "value3" + }); + }); + + it("'get' retrieves multiple items (by js syntax)", function () { + storage.set("item", "item1", {"item1prop1": "value1", "item1prop2": "value2", "item1prop3": "value3"}); + expect(storage.get("item.item1", ["item1prop1", "item1prop3"])).toEqual({ + "item1prop1": "value1", + "item1prop3": "value3" + }); + }); + + /* alwaysUseJson tests */ + it("'alwaysUseJson' activated", function () { + var ret; + + Storages.alwaysUseJsonInStorage(true); + + ret = storage.set("item", 1); + expect(ret).toEqual(1); + expect(storage.get("item")).toEqual(1); + + ret = storage.set("item", "1"); + expect(ret).toEqual("1"); + expect(storage.get("item")).toEqual("1"); + + Storages.alwaysUseJsonInStorage(false); + }); + + /* Keys tests */ + it("'keys' returns the keys associated with a storage", function () { + storage.set("item1", "value1"); + storage.set("item2", "value2"); + expect(storage.keys()).toEqual(["item1", "item2"]); + }); + + it("'keys' returns the keys associated with an item in a storage (by name)", function () { + storage.set("item", {"item1": "value1", "item2": "value2"}); + expect(storage.keys("item")).toEqual(["item1", "item2"]); + }); + + it("'keys' returns the keys associated with an item in a storage (by chain arguments)", function () { + storage.set("item", "itemprop", {"item1": "value1", "item2": "value2"}); + expect(storage.keys("item", "itemprop")).toEqual(["item1", "item2"]); + }); + + it("'keys' returns the keys associated with an item in a storage (by js syntax)", function () { + storage.set("item.itemprop", {"item1": "value1", "item2": "value2"}); + expect(storage.keys("item", "itemprop")).toEqual(["item1", "item2"]); + }); + + /* isEmpty tests */ + it("'isEmpty' returns true if there is no items in storage", function () { + expect(storage.isEmpty()).toBeTruthy(); + storage.set("item", "value"); + expect(storage.isEmpty()).toBeFalsy(); + }); + + it("'isEmpty' returns true if item in storage is empty (by name)", function () { + storage.set("item1", "value"); + storage.set("item2", ""); + storage.set("item3", []); + storage.set("item4", [1]); + storage.set("item5", {}); + storage.set("item6", {"prop": "value"}); + + expect(storage.isEmpty("item1")).toBeFalsy(); + expect(storage.isEmpty("item2")).toBeTruthy(); + expect(storage.isEmpty("item3")).toBeTruthy(); + expect(storage.isEmpty("item4")).toBeFalsy(); + expect(storage.isEmpty("item5")).toBeTruthy(); + expect(storage.isEmpty("item6")).toBeFalsy(); + }); + + it("'isEmpty' returns true if item in storage is empty (by chain arguments)", function () { + storage.set("item", "prop1", "value1"); + expect(storage.isEmpty("item", "prop1")).toBeFalsy(); + expect(storage.isEmpty("item", "prop2")).toBeTruthy(); + }); + + it("'isEmpty' returns true if item in storage is empty (by js syntax)", function () { + storage.set("item", "prop1", "value1"); + expect(storage.isEmpty("item.prop1")).toBeFalsy(); + expect(storage.isEmpty("item.prop2")).toBeTruthy(); + }); + + it("'isEmpty' returns true if multiple items in storage are empty (by name)", function () { + storage.set({"item1": "value1", "item2": "value2", "item3": "", "item4": ""}); + expect(storage.isEmpty(["item1", "item2"])).toBeFalsy(); + expect(storage.isEmpty(["item3", "item4"])).toBeTruthy(); + expect(storage.isEmpty(["item1", "item3"])).toBeFalsy(); + }); + + it("'isEmpty' returns true if multiple items in storage are empty (by chain arguments)", function () { + storage.set("item1", "prop1", {"item1": "value1", "item2": "value2", "item3": "", "item4": ""}); + expect(storage.isEmpty("item1", "prop1", ["item1", "item2"])).toBeFalsy(); + expect(storage.isEmpty("item1", "prop1", ["item3", "item4"])).toBeTruthy(); + expect(storage.isEmpty("item1", "prop1", ["item1", "item3"])).toBeFalsy(); + }); + + it("'isEmpty' returns true if multiple items in storage are empty (by js syntax)", function () { + storage.set("item1", "prop1", {"item1": "value1", "item2": "value2", "item3": "", "item4": ""}); + expect(storage.isEmpty("item1.prop1", ["item1", "item2"])).toBeFalsy(); + expect(storage.isEmpty("item1.prop1", ["item3", "item4"])).toBeTruthy(); + expect(storage.isEmpty("item1.prop1", ["item1", "item3"])).toBeFalsy(); + }); + + + /* isSet tests */ + it("'isSet' returns true if item in storage exists (by name)", function () { + storage.set("item1", "value"); + storage.set("item2", null); + storage.set("item3", ""); + expect(storage.isSet("item1")).toBeTruthy(); + expect(storage.isSet("item2")).toBeFalsy(); + expect(storage.isSet("item3")).toBeTruthy(); + expect(storage.isSet("item4")).toBeFalsy(); + }); + + it("'isSet' returns true if item in storage exists (by chain arguments)", function () { + storage.set("item", "prop1", "value1"); + expect(storage.isSet("item", "prop1")).toBeTruthy(); + expect(storage.isSet("item", "prop2")).toBeFalsy(); + }); + + it("'isSet' returns true if item in storage exists (by js syntax)", function () { + storage.set("item", "prop1", "value1"); + expect(storage.isSet("item.prop1")).toBeTruthy(); + expect(storage.isSet("item.prop2")).toBeFalsy(); + }); + + it("'isSet' returns true if multiple items in storage exist (by name)", function () { + storage.set({"item1": "value1", "item2": "value2", "item3": "", "item4": null}); + expect(storage.isSet(["item1", "item2"])).toBeTruthy(); + expect(storage.isSet(["item1", "item3"])).toBeTruthy(); + expect(storage.isSet(["item1", "item4"])).toBeFalsy(); + }); + + it("'isSet' returns true if multiple items in storage exist (by chain arguments)", function () { + storage.set("item1", "prop1", {"item1": "value1", "item2": "value2", "item3": "", "item4": null}); + expect(storage.isSet("item1", "prop1", ["item1", "item2"])).toBeTruthy(); + expect(storage.isSet("item1", "prop1", ["item1", "item3"])).toBeTruthy(); + expect(storage.isSet("item1", "prop1", ["item1", "item4"])).toBeFalsy(); + }); + + it("'isSet' returns true if multiple items in storage exist (by js syntax)", function () { + storage.set("item1", "prop1", {"item1": "value1", "item2": "value2", "item3": "", "item4": null}); + expect(storage.isSet("item1.prop1", ["item1", "item2"])).toBeTruthy(); + expect(storage.isSet("item1.prop1", ["item1", "item3"])).toBeTruthy(); + expect(storage.isSet("item1.prop1", ["item1", "item4"])).toBeFalsy(); + }); + }); + } + + + /* Specific tests */ + describe("Specific cases", function () { + clearAll(); + it("'removeAll' reinitialize namespace if true is given in arguments", function () { + Storages.localStorage.set("item", "value"); + Storages.sessionStorage.set("item", "value"); + var ns = Storages.initNamespaceStorage("test_ns"); + ns.localStorage.set("item", "value"); + ns.sessionStorage.set("item", "value"); + Storages.localStorage.removeAll(true); + expect(Storages.localStorage.get("item")).toEqual(null); + expect(Storages.sessionStorage.get("item")).toEqual("value"); + expect(ns.localStorage.get("item")).toEqual(null); + expect(ns.sessionStorage.get("item")).toEqual("value"); + }); + + it("'Storages.removeAllStorages' remove all items in all storages", function () { + Storages.localStorage.set("item", "value"); + Storages.sessionStorage.set("item", "value"); + Storages.initNamespaceStorage("test_ns"); + Storages.removeAllStorages(); + expect(Storages.localStorage.get("item")).toEqual(null); + expect(Storages.sessionStorage.get("item")).toEqual(null); + expect(Storages.localStorage.get("test_ns")).toEqual(null); + expect(Storages.sessionStorage.get("test_ns")).toEqual(null); + if (typeof Cookies !== 'undefined') { + expect(Storages.cookieStorage.get("item")).toEqual(null); + expect(Storages.cookieStorage.get("test_ns")).toEqual(null); + } + expect(Storages.namespaceStorages).toEqual({}); + }); + + it("'Storages.removeAllStorages' remove all items in all storages and reinitialize namespace if true is given in arguments", function () { + Storages.localStorage.set("item", "value"); + Storages.sessionStorage.set("item", "value"); + var ns = Storages.initNamespaceStorage("test_ns"); + Storages.removeAllStorages(true); + expect(Storages.localStorage.get("item")).toEqual(null); + expect(Storages.sessionStorage.get("item")).toEqual(null); + expect(Storages.localStorage.get("test_ns")).toEqual({}); + expect(Storages.sessionStorage.get("test_ns")).toEqual({}); + if (typeof Cookies !== 'undefined') { + expect(Storages.cookieStorage.get("item")).toEqual(null); + expect(Storages.cookieStorage.get("test_ns")).toEqual({}); + } + expect(Storages.namespaceStorages["test_ns"]).toEqual(ns); + }); + }); +}); diff --git a/js/js-storage-master/README.md b/js/js-storage-master/README.md new file mode 100644 index 00000000..ed8fe3be --- /dev/null +++ b/js/js-storage-master/README.md @@ -0,0 +1,206 @@ +JS Storage +========== + +JS Storage is a plugin that simplifies access to storages (HTML5), cookies, and namespace storage functionality and provides compatiblity for old browsers with cookies! + +Functionalities: +* To store object easily, encode/decode it with JSON automatically +* Ability to define namespace and use it as a specific storage +* Magic getter and setter to have access at an infinite object level with one call +* Add js-cookie (https://github.com/js-cookie/js-cookie) and manage your cookies with this API + + +Storages +-------- +#### Local storage + Storages.localStorage + +#### Session storage + Storages.sessionStorage + +#### Cookie storage (only if js-cookie added) + Storages.cookieStorage + +#### Namespace storage + ns=Storages.initNamespaceStorage('ns_name'); + ns.localStorage // Namespace in localStorage + ns.sessionStorage // Namespace in sessionStorage + ns.cookieStorage // Namespace in cookieStorage (only if js-cookie added) + +Public methods on storage +------------------------- + +Public methods are usable on all storage objects (Storages.localStorage, Storages.sessionStorage, Storages.cookieStorage or object returned by Storages.initNamespaceStorage) + + storage=Storages.localStorage + +### `get()` +Get an item from a storage. +If last argument is an array (can be preceded by other arguments to parse storage), get() returns an object with value for each item of this array. + + storage.get('foo') // Return storage.foo + storage.get('foo.foo2.foo3...') // Return storage.foo.foo2.foo3... + storage.get('foo','foo2','foo3'...) // Return storage.foo.foo2.foo3... + storage.get(['foo','foo2']) // Return {foo:storage.foo,foo2:storage.foo2} + +### `set()` +Set an item in a storage. +If argument is an object, set() sets value on storage for each property of this object. + + storage.set('foo','value') // Set storage.foo to "value" + storage.set('foo.foo2.foo3...','value') // Set storage.foo.foo2.foo3... to "value" + storage.set('foo','foo2','foo3'...,'value') // Set storage.foo.foo2.foo3... to "value" + storage.set({'foo':'value','foo2':'value2'}) // Set storage.foo to "value" and storage.foo2 to "value2" + +### `keys()` +Get keys of a storage or an item in a storage. + + storage.set('foo','value') + storage.set('foo2','foo3'..., {'foo4':'value4','foo5':'value5'}) + storage.keys() // Return keys of storage (["foo", "foo2"]) + storage.keys('foo2') // Return keys of storage.foo2 (["foo3"]) + storage.keys('foo2.foo3...') // Return keys of storage.foo2.foo3... (["foo4", "foo5"]) + storage.keys('foo2','foo3'...) // Return keys of storage.foo2.foo3... (["foo4", "foo5"]) + +### `isEmpty()` +Check if a storage or an item in a storage is empty (if equal to "", 0, null, undefined, [] or {}). +If last argument is an array (can be preceded by other arguments to parse storage), isEmpty() tests storage for each item of this array, and returns true only if all tests return true. + + storage.set('foo','value') + storage.set('foo2','foo3'..., {'foo4':'value4','foo5':'value5'}) + storage.set('foo6','') + storage.set('foo7',{}) + storage.isEmpty('foo') // Check if storage.foo is empty (false) + storage.isEmpty('foo6') // Check if storage.foo6 is empty (true) + storage.isEmpty('foo7') // Check if storage.foo7 is empty (true) + storage.isEmpty('foo2.foo3...') // Check if storage.foo2.foo3... is empty (false) + storage.isEmpty('foo2','foo3'...) // Check if storage.foo2.foo3... is empty (false) + storage.isEmpty(['foo','foo2']) // Check if storage.foo and storage.foo2 are empty (false) + storage.isEmpty(['foo','foo7']) // Check if storage.foo and storage.foo7 are empty (false) + storage.isEmpty(['foo6','foo7']) // Check if storage.foo6 and storage.foo7 are empty (true) + storage.isEmpty('foo2','foo3'...,['foo6','foo7']) // Check if storage.foo2.foo3...foo6 and storage.foo2.foo3...foo7 are empty (true) + +### `isSet()` +Check if an item exists in a storage (if not null or undefined). +If last argument is an array (can be preceded by other arguments to parse storage), isSet() tests storage for each item of this array, and returns true only if all test return true. + + storage.set('foo','value') + storage.set('foo2','foo3'..., {'foo4':'value4','foo5':'value5'}) + storage.set('foo6','') + storage.isSet('foo') // Check if storage.foo exists (true) + storage.isSet('foo6') // Check if storage.foo6 exists (true) + storage.isSet('foo7') // Check if storage.foo7 exists (false) + storage.isSet('foo2.foo3'...) // Check if storage.foo2.foo3... exists (true) + storage.isSet('foo2','foo3'...) // Check if storage.foo2.foo3... exists (true) + storage.isSet(['foo','foo2']) // Check if storage.foo and storage.foo2 exist (true) + storage.isSet(['foo','foo7']) // Check if storage.foo and storage.foo7 exist (false) + storage.isSet('foo2','foo3'...,['foo6','foo7']) // Check if storage.foo2.foo3...foo6 and storage.foo2.foo3...foo7 exist (false) + +### `remove()` +Delete an item from a storage. +If last argument is an array (can be preceded by other arguments to parse storage), remove() removes value of storage for each item of this array. + + storage.remove('foo') // Delete storage.foo + storage.remove('foo.foo2.foo3'...) // Delete storage.foo.foo2.foo3... + storage.remove('foo','foo2','foo3'...) // Delete storage.foo.foo2.foo3... + storage.remove(['foo','foo2']) // Delete storage.foo and storage.foo2 + +### `removeAll()` +Truncate the storage + + storage.removeAll() // Delete all items from the storage + storage.removeAll(true) // Only on global storages. Delete all items from the storage and reinitialize previously initialized namespaces + +### `setExpires()` +Only on cookieStorage. +Sets expires date in days (default value is null, cookie is valid for session only; only cookies set after setExpires() call will be affected). + + storage.setExpires(10) // Set expiry date to today + 10 days + +This method returns the storage object, so you can: + + storage.setExpires(10).set('foo','value') // Set expiry date to today + 10 days and set a new cookie + +### `setPath()` +Only on cookieStorage. +Sets path for cookies (default value is null; only cookies set after setPath() call will be affected). + + storage.setPath('/') // Set path to '/' + +This method return the storage object, so you can: + + storage.setPath('/').set('foo','value') // Set path to '/' and set a new cookie + +### `setDomain()` +Only on cookieStorage. +Sets domain for cookies (default value is null; only cookies set after setDomain() call will be affected). + + storage.setDomain('www.ndd.com') // Set domain to www.ndd.com + +This method return the storage object, so you can: + + storage.setDomain('www.ndd.com').set('foo','value') // Set domain to www.ndd.com and set a new cookie + +### `setConf()` +Only on cookieStorage. +Sets cookie configuration with an object (only cookies set after setConf() call will be affected). + + storage.setConf({path:'/',expires:10,'domain':'www.ndd.com'}) // Set expiry date, domain and path + +This method return the storage object, so you can: + + storage.setConf({path:'/',expires:10}).set('foo','value') // Set configuration and set a new cookie + +### `setDefaultConf()` +Only on cookieStorage. +Sets default configuration (only cookies set after setDefaultConf() call will be affected). + + storage.setDefaultConf() // Set path, domain and expiry date to null + +This method return the storage object, so you can: + + storage.setDefaultConf().set('foo','value') // Set default configuration and set a new cookie + +### `Storages.namespaceStorages` +Object that contains all initilialized namespace storages. + +### `Storages.removeAllStorages()` +Delete all items of all storages. +As removeAll(), if first argument given is set to true, namespaces are reinitialized. +Else, Storages.namespaceStorages is set to an empty object and previous namespaces are lost. + +### `Storages.alwaysUseJsonInStorage()` +By default, basic values (string, int...) are always stored as string in html5 storages. + + window.localStorage.setItem('foo', 1); + window.localStorage.getItem('foo'); // Return "1" + +So by default, if you do equivalent with the plugin, there will be the same behavior. + + Storages.localStorage.set('foo', 1); + Storages.localStorage.get('foo'); // Return "1" + +This is the case only if you store basic values in the root of the storage. +In others cases, plugin use JSON to store values. + + Storages.localStorage.set('foo.foo2', 1); + Storages.localStorage.get('foo.foo2'); // Return 1 + window.localStorage.getItem('foo'); // Return "{"foo2":1}" + +If you want to be able to store typed values even on the root of the storages, call `Storages.alwaysUseJsonInStorage(true)` + + Storages.alwaysUseJsonInStorage(true); + + Storages.localStorage.set('foo', 1); + Storages.localStorage.get('foo'); // Return 1 + window.localStorage.getItem('foo'); // Return "1" + + Storages.localStorage.set('foo', '1'); + Storages.localStorage.get('foo'); // Return "1" + window.localStorage.getItem('foo'); // Return ""1"", because value is JSON encoded + + +Compatibility +------------- + +JS Storage is compatible with all browsers that support storage and JSON natively (so all recents browsers) except IE8. diff --git a/js/js-storage-master/bower.json b/js/js-storage-master/bower.json new file mode 100644 index 00000000..69e59977 --- /dev/null +++ b/js/js-storage-master/bower.json @@ -0,0 +1,36 @@ +{ + "name": "js-storage", + "version": "1.0.1", + "main": "js.storage.js", + "description": "Plugin that simplify access to storages (HTML5) & cookies, add namespace storage and provide compatiblity for old browsers", + "keywords": [ + "storage", + "html5", + "localStorage", + "sessionStorage", + "cookie", + "namespace" + ], + "author": { + "name": "Julien Maurel", + "url": "https://github.com/julien-maurel" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/mit-license.php" + } + ], + "homepage": "https://github.com/julien-maurel/js-storage", + "bugs": "https://github.com/julien-maurel/js-storage/issues", + "repository": { + "type": "git", + "url": "git://github.com/julien-maurel/js-storage.git" + }, + "ignore": [ + "Jasmine", + "gulp.js", + "/*.txt", + "/*.json" + ] +} diff --git a/js/js-storage-master/gulpfile.js b/js/js-storage-master/gulpfile.js new file mode 100644 index 00000000..b4be42b6 --- /dev/null +++ b/js/js-storage-master/gulpfile.js @@ -0,0 +1,15 @@ +var gulp = require('gulp'), + uglify = require('gulp-uglify'), + rename = require('gulp-rename'); + +// Compress task +gulp.task('compress', function () { + return gulp.src('./js.storage.js') + .pipe(uglify({ + preserveComments: function (win, doc) { + return /Licensed under/.test(doc.value); + } + })) + .pipe(rename('js.storage.min.js')) + .pipe(gulp.dest('./')); +}); \ No newline at end of file diff --git a/js/js-storage-master/js.storage.js b/js/js-storage-master/js.storage.js new file mode 100644 index 00000000..ef12adf3 --- /dev/null +++ b/js/js-storage-master/js.storage.js @@ -0,0 +1,638 @@ +/* + * JS Storage Plugin + * + * Copyright (c) 2016 Julien Maurel + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * https://github.com/julien-maurel/js-storage + * + * Version: 1.0.1 + */ +(function (factory) { + var registeredInModuleLoader = false; + if (typeof define === 'function' && define.amd) { + define(factory); + registeredInModuleLoader = true; + } + if (typeof exports === 'object') { + module.exports = factory(); + registeredInModuleLoader = true; + } + if (!registeredInModuleLoader) { + var OldStorages = window.Storages; + var api = window.Storages = factory(); + api.noConflict = function () { + window.Storages = OldStorages; + return api; + }; + } +}(function () { + // Variables used by utilities functions (like isPlainObject...) + var class2type = {}; + var toString = class2type.toString; + var hasOwn = class2type.hasOwnProperty; + var fnToString = hasOwn.toString; + var ObjectFunctionString = fnToString.call(Object); + var getProto = Object.getPrototypeOf; + var apis = {}; + + // Prefix to use with cookie fallback + var cookie_local_prefix = "ls_"; + var cookie_session_prefix = "ss_"; + + // Get items from a storage + function _get() { + var storage = this._type, l = arguments.length, s = window[storage], a = arguments, a0 = a[0], vi, ret, tmp, i, j; + if (l < 1) { + throw new Error('Minimum 1 argument must be given'); + } else if (Array.isArray(a0)) { + // If second argument is an array, return an object with value of storage for each item in this array + ret = {}; + for (i in a0) { + if (a0.hasOwnProperty(i)) { + vi = a0[i]; + try { + ret[vi] = JSON.parse(s.getItem(vi)); + } catch (e) { + ret[vi] = s.getItem(vi); + } + } + } + return ret; + } else if (l == 1) { + // If only 1 argument, return value directly + try { + return JSON.parse(s.getItem(a0)); + } catch (e) { + return s.getItem(a0); + } + } else { + // If more than 1 argument, parse storage to retrieve final value to return it + // Get first level + try { + ret = JSON.parse(s.getItem(a0)); + } catch (e) { + throw new ReferenceError(a0 + ' is not defined in this storage'); + } + // Parse next levels + for (i = 1; i < l - 1; i++) { + ret = ret[a[i]]; + if (ret === undefined) { + throw new ReferenceError([].slice.call(a, 1, i + 1).join('.') + ' is not defined in this storage'); + } + } + // If last argument is an array, return an object with value for each item in this array + // Else return value normally + if (Array.isArray(a[i])) { + tmp = ret; + ret = {}; + for (j in a[i]) { + if (a[i].hasOwnProperty(j)) { + ret[a[i][j]] = tmp[a[i][j]]; + } + } + return ret; + } else { + return ret[a[i]]; + } + } + } + + // Set items of a storage + function _set() { + var storage = this._type, l = arguments.length, s = window[storage], a = arguments, a0 = a[0], a1 = a[1], vi, to_store = isNaN(a1) ? {} : [], type, tmp, i; + if (l < 1 || !_isPlainObject(a0) && l < 2) { + throw new Error('Minimum 2 arguments must be given or first parameter must be an object'); + } else if (_isPlainObject(a0)) { + // If first argument is an object, set values of storage for each property of this object + for (i in a0) { + if (a0.hasOwnProperty(i)) { + vi = a0[i]; + if (!_isPlainObject(vi) && !this.alwaysUseJson) { + s.setItem(i, vi); + } else { + s.setItem(i, JSON.stringify(vi)); + } + } + } + return a0; + } else if (l == 2) { + // If only 2 arguments, set value of storage directly + if (typeof a1 === 'object' || this.alwaysUseJson) { + s.setItem(a0, JSON.stringify(a1)); + } else { + s.setItem(a0, a1); + } + return a1; + } else { + // If more than 3 arguments, parse storage to retrieve final node and set value + // Get first level + try { + tmp = s.getItem(a0); + if (tmp != null) { + to_store = JSON.parse(tmp); + } + } catch (e) { + } + tmp = to_store; + // Parse next levels and set value + for (i = 1; i < l - 2; i++) { + vi = a[i]; + type = isNaN(a[i + 1]) ? "object" : "array"; + if (!tmp[vi] || type == "object" && !_isPlainObject(tmp[vi]) || type == "array" && !Array.isArray(tmp[vi])) { + if (type == "array") tmp[vi] = []; + else tmp[vi] = {}; + } + tmp = tmp[vi]; + } + tmp[a[i]] = a[i + 1]; + s.setItem(a0, JSON.stringify(to_store)); + return to_store; + } + } + + // Remove items from a storage + function _remove() { + var storage = this._type, l = arguments.length, s = window[storage], a = arguments, a0 = a[0], to_store, tmp, i, j; + if (l < 1) { + throw new Error('Minimum 1 argument must be given'); + } else if (Array.isArray(a0)) { + // If first argument is an array, remove values from storage for each item of this array + for (i in a0) { + if (a0.hasOwnProperty(i)) { + s.removeItem(a0[i]); + } + } + return true; + } else if (l == 1) { + // If only 2 arguments, remove value from storage directly + s.removeItem(a0); + return true; + } else { + // If more than 2 arguments, parse storage to retrieve final node and remove value + // Get first level + try { + to_store = tmp = JSON.parse(s.getItem(a0)); + } catch (e) { + throw new ReferenceError(a0 + ' is not defined in this storage'); + } + // Parse next levels and remove value + for (i = 1; i < l - 1; i++) { + tmp = tmp[a[i]]; + if (tmp === undefined) { + throw new ReferenceError([].slice.call(a, 1, i).join('.') + ' is not defined in this storage'); + } + } + // If last argument is an array,remove value for each item in this array + // Else remove value normally + if (Array.isArray(a[i])) { + for (j in a[i]) { + if (a[i].hasOwnProperty(j)) { + delete tmp[a[i][j]]; + } + } + } else { + delete tmp[a[i]]; + } + s.setItem(a0, JSON.stringify(to_store)); + return true; + } + } + + // Remove all items from a storage + function _removeAll(reinit_ns) { + var keys = _keys.call(this), i; + for (i in keys) { + if (keys.hasOwnProperty(i)) { + _remove.call(this, keys[i]); + } + } + // Reinitialize all namespace storages + if (reinit_ns) { + for (i in apis.namespaceStorages) { + if (apis.namespaceStorages.hasOwnProperty(i)) { + _createNamespace(i); + } + } + } + } + + // Check if items of a storage are empty + function _isEmpty() { + var l = arguments.length, a = arguments, a0 = a[0], i; + if (l == 0) { + // If no argument, test if storage is empty + return (_keys.call(this).length == 0); + } else if (Array.isArray(a0)) { + // If first argument is an array, test each item of this array and return true only if all items are empty + for (i = 0; i < a0.length; i++) { + if (!_isEmpty.call(this, a0[i])) { + return false; + } + } + return true; + } else { + // If at least 1 argument, try to get value and test it + try { + var v = _get.apply(this, arguments); + // Convert result to an object (if last argument is an array, _get return already an object) and test each item + if (!Array.isArray(a[l - 1])) { + v = {'totest': v}; + } + for (i in v) { + if (v.hasOwnProperty(i) && !( + (_isPlainObject(v[i]) && _isEmptyObject(v[i])) || + (Array.isArray(v[i]) && !v[i].length) || + (!v[i]) + )) { + return false; + } + } + return true; + } catch (e) { + return true; + } + } + } + + // Check if items of a storage exist + function _isSet() { + var l = arguments.length, a = arguments, a0 = a[0], i; + if (l < 1) { + throw new Error('Minimum 1 argument must be given'); + } + if (Array.isArray(a0)) { + // If first argument is an array, test each item of this array and return true only if all items exist + for (i = 0; i < a0.length; i++) { + if (!_isSet.call(this, a0[i])) { + return false; + } + } + return true; + } else { + // For other case, try to get value and test it + try { + var v = _get.apply(this, arguments); + // Convert result to an object (if last argument is an array, _get return already an object) and test each item + if (!Array.isArray(a[l - 1])) { + v = {'totest': v}; + } + for (i in v) { + if (v.hasOwnProperty(i) && !(v[i] !== undefined && v[i] !== null)) { + return false; + } + } + return true; + } catch (e) { + return false; + } + } + } + + // Get keys of a storage or of an item of the storage + function _keys() { + var storage = this._type, l = arguments.length, s = window[storage], keys = [], o = {}; + // If at least 1 argument, get value from storage to retrieve keys + // Else, use storage to retrieve keys + if (l > 0) { + o = _get.apply(this, arguments); + } else { + o = s; + } + if (o && o._cookie) { + // If storage is a cookie, use js-cookie to retrieve keys + var cookies = Cookies.get(); + for (var key in cookies) { + if (cookies.hasOwnProperty(key) && key != '') { + keys.push(key.replace(o._prefix, '')); + } + } + } else { + for (var i in o) { + if (o.hasOwnProperty(i)) { + keys.push(i); + } + } + } + return keys; + } + + // Create new namespace storage + function _createNamespace(name) { + if (!name || typeof name != "string") { + throw new Error('First parameter must be a string'); + } + if (storage_available) { + if (!window.localStorage.getItem(name)) { + window.localStorage.setItem(name, '{}'); + } + if (!window.sessionStorage.getItem(name)) { + window.sessionStorage.setItem(name, '{}'); + } + } else { + if (!window.localCookieStorage.getItem(name)) { + window.localCookieStorage.setItem(name, '{}'); + } + if (!window.sessionCookieStorage.getItem(name)) { + window.sessionCookieStorage.setItem(name, '{}'); + } + } + var ns = { + localStorage: _extend({}, apis.localStorage, {_ns: name}), + sessionStorage: _extend({}, apis.sessionStorage, {_ns: name}) + }; + if (typeof Cookies !== 'undefined') { + if (!window.cookieStorage.getItem(name)) { + window.cookieStorage.setItem(name, '{}'); + } + ns.cookieStorage = _extend({}, apis.cookieStorage, {_ns: name}); + } + apis.namespaceStorages[name] = ns; + return ns; + } + + // Test if storage is natively available on browser + function _testStorage(name) { + var foo = 'jsapi'; + try { + if (!window[name]) { + return false; + } + window[name].setItem(foo, foo); + window[name].removeItem(foo); + return true; + } catch (e) { + return false; + } + } + + // Test if a variable is a plain object (from jQuery) + function _isPlainObject(obj) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if (!obj || toString.call(obj) !== "[object Object]") { + return false; + } + + proto = getProto(obj); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if (!proto) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call(proto, "constructor") && proto.constructor; + return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString; + } + + // Test if a variable is an empty object (from jQuery) + function _isEmptyObject(obj) { + var name; + + for (name in obj) { + return false; + } + return true; + } + + // Merge objects + function _extend() { + var i = 1; + var result = arguments[0]; + for (; i < arguments.length; i++) { + var attributes = arguments[i]; + for (var key in attributes) { + if (attributes.hasOwnProperty(key)) { + result[key] = attributes[key]; + } + } + } + return result; + } + + // Check if storages are natively available on browser + var storage_available = _testStorage('localStorage'); + + // Namespace object + var storage = { + _type: '', + _ns: '', + _callMethod: function (f, a) { + a = Array.prototype.slice.call(a); + var p = [], a0 = a[0]; + + if (this._ns) { + p.push(this._ns); + } + if (typeof a0 === 'string' && a0.indexOf('.') !== -1) { + a.shift(); + [].unshift.apply(a, a0.split('.')); + } + [].push.apply(p, a); + return f.apply(this, p); + }, + // Define if plugin always use JSON to store values (even to store simple values like string, int...) or not + alwaysUseJson: false, + // Get items. If no parameters and storage have a namespace, return all namespace + get: function () { + return this._callMethod(_get, arguments); + }, + // Set items + set: function () { + var l = arguments.length, a = arguments, a0 = a[0]; + if (l < 1 || !_isPlainObject(a0) && l < 2) { + throw new Error('Minimum 2 arguments must be given or first parameter must be an object'); + } + // If first argument is an object and storage is a namespace storage, set values individually + if (_isPlainObject(a0) && this._ns) { + for (var i in a0) { + if (a0.hasOwnProperty(i)) { + this._callMethod(_set, [i, a0[i]]); + } + } + return a0; + } else { + var r = this._callMethod(_set, a); + if (this._ns) { + return r[a0.split('.')[0]]; + } else { + return r; + } + } + }, + // Delete items + remove: function () { + if (arguments.length < 1) { + throw new Error('Minimum 1 argument must be given'); + } + return this._callMethod(_remove, arguments); + }, + // Delete all items + removeAll: function (reinit_ns) { + if (this._ns) { + this._callMethod(_set, [{}]); + return true; + } else { + return this._callMethod(_removeAll, [reinit_ns]); + } + }, + // Items empty + isEmpty: function () { + return this._callMethod(_isEmpty, arguments); + }, + // Items exists + isSet: function () { + if (arguments.length < 1) { + throw new Error('Minimum 1 argument must be given'); + } + return this._callMethod(_isSet, arguments); + }, + // Get keys of items + keys: function () { + return this._callMethod(_keys, arguments); + } + }; + + // Use js-cookie for compatibility with old browsers and give access to cookieStorage + if (typeof Cookies !== 'undefined') { + // sessionStorage is valid for one window/tab. To simulate that with cookie, we set a name for the window and use it for the name of the cookie + if (!window.name) { + window.name = Math.floor(Math.random() * 100000000); + } + var cookie_storage = { + _cookie: true, + _prefix: '', + _expires: null, + _path: null, + _domain: null, + setItem: function (n, v) { + Cookies.set(this._prefix + n, v, {expires: this._expires, path: this._path, domain: this._domain}); + }, + getItem: function (n) { + return Cookies.get(this._prefix + n); + }, + removeItem: function (n) { + return Cookies.remove(this._prefix + n, {path: this._path}); + }, + clear: function () { + var cookies = Cookies.get(); + for (var key in cookies) { + if (cookies.hasOwnProperty(key) && key != '') { + if (!this._prefix && key.indexOf(cookie_local_prefix) === -1 && key.indexOf(cookie_session_prefix) === -1 || this._prefix && key.indexOf(this._prefix) === 0) { + Cookies.remove(key); + } + } + } + }, + setExpires: function (e) { + this._expires = e; + return this; + }, + setPath: function (p) { + this._path = p; + return this; + }, + setDomain: function (d) { + this._domain = d; + return this; + }, + setConf: function (c) { + if (c.path) { + this._path = c.path; + } + if (c.domain) { + this._domain = c.domain; + } + if (c.expires) { + this._expires = c.expires; + } + return this; + }, + setDefaultConf: function () { + this._path = this._domain = this._expires = null; + } + }; + if (!storage_available) { + window.localCookieStorage = _extend({}, cookie_storage, { + _prefix: cookie_local_prefix, + _expires: 365 * 10 + }); + window.sessionCookieStorage = _extend({}, cookie_storage, {_prefix: cookie_session_prefix + window.name + '_'}); + } + window.cookieStorage = _extend({}, cookie_storage); + // cookieStorage API + apis.cookieStorage = _extend({}, storage, { + _type: 'cookieStorage', + setExpires: function (e) { + window.cookieStorage.setExpires(e); + return this; + }, + setPath: function (p) { + window.cookieStorage.setPath(p); + return this; + }, + setDomain: function (d) { + window.cookieStorage.setDomain(d); + return this; + }, + setConf: function (c) { + window.cookieStorage.setConf(c); + return this; + }, + setDefaultConf: function () { + window.cookieStorage.setDefaultConf(); + return this; + } + }); + } + + // Get a new API on a namespace + apis.initNamespaceStorage = function (ns) { + return _createNamespace(ns); + }; + if (storage_available) { + // About alwaysUseJson + // By default, all values are string on html storages and the plugin don't use json to store simple values (strings, int, float...) + // So by default, if you do storage.setItem('test',2), value in storage will be "2", not 2 + // If you set this property to true, all values set with the plugin will be stored as json to have typed values in any cases + + // localStorage API + apis.localStorage = _extend({}, storage, {_type: 'localStorage'}); + // sessionStorage API + apis.sessionStorage = _extend({}, storage, {_type: 'sessionStorage'}); + } else { + // localStorage API + apis.localStorage = _extend({}, storage, {_type: 'localCookieStorage'}); + // sessionStorage API + apis.sessionStorage = _extend({}, storage, {_type: 'sessionCookieStorage'}); + } + // List of all namespace storage + apis.namespaceStorages = {}; + // Remove all items in all storages + apis.removeAllStorages = function (reinit_ns) { + apis.localStorage.removeAll(reinit_ns); + apis.sessionStorage.removeAll(reinit_ns); + if (apis.cookieStorage) { + apis.cookieStorage.removeAll(reinit_ns); + } + if (!reinit_ns) { + apis.namespaceStorages = {}; + } + }; + apis.alwaysUseJsonInStorage = function (value) { + storage.alwaysUseJson = value; + apis.localStorage.alwaysUseJson = value; + apis.sessionStorage.alwaysUseJson = value; + if (apis.cookieStorage) { + apis.cookieStorage.alwaysUseJson = value; + } + }; + + return apis; +})); diff --git a/js/js-storage-master/js.storage.min.js b/js/js-storage-master/js.storage.min.js new file mode 100644 index 00000000..466eacc5 --- /dev/null +++ b/js/js-storage-master/js.storage.min.js @@ -0,0 +1,14 @@ +/* + * JS Storage Plugin + * + * Copyright (c) 2016 Julien Maurel + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * https://github.com/julien-maurel/js-storage + * + * Version: 1.0.1 + */ +!function(e){var t=!1;if("function"==typeof define&&define.amd&&(define(e),t=!0),"object"==typeof exports&&(module.exports=e(),t=!0),!t){var r=window.Storages,o=window.Storages=e();o.noConflict=function(){return window.Storages=r,o}}}(function(){function e(){var e,t,r,o,n,i=this._type,s=arguments.length,a=window[i],f=arguments,c=f[0];if(1>s)throw new Error("Minimum 1 argument must be given");if(Array.isArray(c)){t={};for(o in c)if(c.hasOwnProperty(o)){e=c[o];try{t[e]=JSON.parse(a.getItem(e))}catch(h){t[e]=a.getItem(e)}}return t}if(1!=s){try{t=JSON.parse(a.getItem(c))}catch(h){throw new ReferenceError(c+" is not defined in this storage")}for(o=1;s-1>o;o++)if(t=t[f[o]],void 0===t)throw new ReferenceError([].slice.call(f,1,o+1).join(".")+" is not defined in this storage");if(Array.isArray(f[o])){r=t,t={};for(n in f[o])f[o].hasOwnProperty(n)&&(t[f[o][n]]=r[f[o][n]]);return t}return t[f[o]]}try{return JSON.parse(a.getItem(c))}catch(h){return a.getItem(c)}}function t(){var e,t,r,o,n=this._type,i=arguments.length,s=window[n],a=arguments,f=a[0],h=a[1],l=isNaN(h)?{}:[];if(1>i||!c(f)&&2>i)throw new Error("Minimum 2 arguments must be given or first parameter must be an object");if(c(f)){for(o in f)f.hasOwnProperty(o)&&(e=f[o],c(e)||this.alwaysUseJson?s.setItem(o,JSON.stringify(e)):s.setItem(o,e));return f}if(2==i)return"object"==typeof h||this.alwaysUseJson?s.setItem(f,JSON.stringify(h)):s.setItem(f,h),h;try{r=s.getItem(f),null!=r&&(l=JSON.parse(r))}catch(u){}for(r=l,o=1;i-2>o;o++)e=a[o],t=isNaN(a[o+1])?"object":"array",(!r[e]||"object"==t&&!c(r[e])||"array"==t&&!Array.isArray(r[e]))&&("array"==t?r[e]=[]:r[e]={}),r=r[e];return r[a[o]]=a[o+1],s.setItem(f,JSON.stringify(l)),l}function r(){var e,t,r,o,n=this._type,i=arguments.length,s=window[n],a=arguments,f=a[0];if(1>i)throw new Error("Minimum 1 argument must be given");if(Array.isArray(f)){for(r in f)f.hasOwnProperty(r)&&s.removeItem(f[r]);return!0}if(1==i)return s.removeItem(f),!0;try{e=t=JSON.parse(s.getItem(f))}catch(c){throw new ReferenceError(f+" is not defined in this storage")}for(r=1;i-1>r;r++)if(t=t[a[r]],void 0===t)throw new ReferenceError([].slice.call(a,1,r).join(".")+" is not defined in this storage");if(Array.isArray(a[r]))for(o in a[r])a[r].hasOwnProperty(o)&&delete t[a[r][o]];else delete t[a[r]];return s.setItem(f,JSON.stringify(e)),!0}function o(e){var t,o=s.call(this);for(t in o)o.hasOwnProperty(t)&&r.call(this,o[t]);if(e)for(t in d.namespaceStorages)d.namespaceStorages.hasOwnProperty(t)&&a(t)}function n(){var t,r=arguments.length,o=arguments,i=o[0];if(0==r)return 0==s.call(this).length;if(Array.isArray(i)){for(t=0;tr)throw new Error("Minimum 1 argument must be given");if(Array.isArray(n)){for(t=0;t0?e.apply(this,arguments):o,i&&i._cookie){var s=Cookies.get();for(var a in s)s.hasOwnProperty(a)&&""!=a&&n.push(a.replace(i._prefix,""))}else for(var f in i)i.hasOwnProperty(f)&&n.push(f);return n}function a(e){if(!e||"string"!=typeof e)throw new Error("First parameter must be a string");v?(window.localStorage.getItem(e)||window.localStorage.setItem(e,"{}"),window.sessionStorage.getItem(e)||window.sessionStorage.setItem(e,"{}")):(window.localCookieStorage.getItem(e)||window.localCookieStorage.setItem(e,"{}"),window.sessionCookieStorage.getItem(e)||window.sessionCookieStorage.setItem(e,"{}"));var t={localStorage:l({},d.localStorage,{_ns:e}),sessionStorage:l({},d.sessionStorage,{_ns:e})};return"undefined"!=typeof Cookies&&(window.cookieStorage.getItem(e)||window.cookieStorage.setItem(e,"{}"),t.cookieStorage=l({},d.cookieStorage,{_ns:e})),d.namespaceStorages[e]=t,t}function f(e){var t="jsapi";try{return window[e]?(window[e].setItem(t,t),window[e].removeItem(t),!0):!1}catch(r){return!1}}function c(e){var t,r;return e&&"[object Object]"===g.call(e)?(t=y(e))?(r=w.call(t,"constructor")&&t.constructor,"function"==typeof r&&p.call(r)===m):!0:!1}function h(e){var t;for(t in e)return!1;return!0}function l(){for(var e=1,t=arguments[0];ee||!c(o)&&2>e)throw new Error("Minimum 2 arguments must be given or first parameter must be an object");if(c(o)&&this._ns){for(var n in o)o.hasOwnProperty(n)&&this._callMethod(t,[n,o[n]]);return o}var i=this._callMethod(t,r);return this._ns?i[o.split(".")[0]]:i},remove:function(){if(arguments.length<1)throw new Error("Minimum 1 argument must be given");return this._callMethod(r,arguments)},removeAll:function(e){return this._ns?(this._callMethod(t,[{}]),!0):this._callMethod(o,[e])},isEmpty:function(){return this._callMethod(n,arguments)},isSet:function(){if(arguments.length<1)throw new Error("Minimum 1 argument must be given");return this._callMethod(i,arguments)},keys:function(){return this._callMethod(s,arguments)}};if("undefined"!=typeof Cookies){window.name||(window.name=Math.floor(1e8*Math.random()));var O={_cookie:!0,_prefix:"",_expires:null,_path:null,_domain:null,setItem:function(e,t){Cookies.set(this._prefix+e,t,{expires:this._expires,path:this._path,domain:this._domain})},getItem:function(e){return Cookies.get(this._prefix+e)},removeItem:function(e){return Cookies.remove(this._prefix+e,{path:this._path})},clear:function(){var e=Cookies.get();for(var t in e)e.hasOwnProperty(t)&&""!=t&&(!this._prefix&&-1===t.indexOf(S)&&-1===t.indexOf(_)||this._prefix&&0===t.indexOf(this._prefix))&&Cookies.remove(t)},setExpires:function(e){return this._expires=e,this},setPath:function(e){return this._path=e,this},setDomain:function(e){return this._domain=e,this},setConf:function(e){return e.path&&(this._path=e.path),e.domain&&(this._domain=e.domain),e.expires&&(this._expires=e.expires),this},setDefaultConf:function(){this._path=this._domain=this._expires=null}};v||(window.localCookieStorage=l({},O,{_prefix:S,_expires:3650}),window.sessionCookieStorage=l({},O,{_prefix:_+window.name+"_"})),window.cookieStorage=l({},O),d.cookieStorage=l({},k,{_type:"cookieStorage",setExpires:function(e){return window.cookieStorage.setExpires(e),this},setPath:function(e){return window.cookieStorage.setPath(e),this},setDomain:function(e){return window.cookieStorage.setDomain(e),this},setConf:function(e){return window.cookieStorage.setConf(e),this},setDefaultConf:function(){return window.cookieStorage.setDefaultConf(),this}})}return d.initNamespaceStorage=function(e){return a(e)},v?(d.localStorage=l({},k,{_type:"localStorage"}),d.sessionStorage=l({},k,{_type:"sessionStorage"})):(d.localStorage=l({},k,{_type:"localCookieStorage"}),d.sessionStorage=l({},k,{_type:"sessionCookieStorage"})),d.namespaceStorages={},d.removeAllStorages=function(e){d.localStorage.removeAll(e),d.sessionStorage.removeAll(e),d.cookieStorage&&d.cookieStorage.removeAll(e),e||(d.namespaceStorages={})},d.alwaysUseJsonInStorage=function(e){k.alwaysUseJson=e,d.localStorage.alwaysUseJson=e,d.sessionStorage.alwaysUseJson=e,d.cookieStorage&&(d.cookieStorage.alwaysUseJson=e)},d}); \ No newline at end of file diff --git a/js/js-storage-master/package.json b/js/js-storage-master/package.json new file mode 100644 index 00000000..4643d863 --- /dev/null +++ b/js/js-storage-master/package.json @@ -0,0 +1,32 @@ +{ + "name": "js-storage", + "version": "1.0.1", + "author": { + "name": "Julien Maurel", + "url": "https://github.com/julien-maurel" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/mit-license.php" + } + ], + "devDependencies": { + "gulp": "3.9.1", + "gulp-uglify": "1.5.3", + "gulp-rename": "1.2.2" + }, + "description": "Plugin that simplify access to storages (HTML5) & cookies, add namespace storage and provide compatiblity for old browsers", + "keywords": [ + "storage", + "html5", + "localStorage", + "sessionStorage", + "cookie", + "namespace" + ], + "homepage": "https://github.com/julien-maurel/js-storage", + "bugs": "https://github.com/julien-maurel/js-storage/issues", + "repository": "https://github.com/julien-maurel/js-storage", + "main": "./js.storage.js" +} diff --git a/models/front/members/memberDataByLatLon.php b/models/front/members/memberDataByLatLon.php new file mode 100644 index 00000000..dcd4cf1e --- /dev/null +++ b/models/front/members/memberDataByLatLon.php @@ -0,0 +1,231 @@ + + * @license http://www.gaslightmedia.com Gaslightmedia + * @version 0.1 + */ + +// Load Members data abstract +require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php'; + +/* + * This class performs the work for the default action of the "Members" menu + * option, which is to display the members dashboard. + * + */ + +class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo +{ + + /** + * WordPress Database Object + * + * @var $wpdb + * @access public + */ + public $wpdb; + /** + * Plugin Configuration Data + * + * @var $config + * @access public + */ + public $config; + + /* + * Constructor + * + * This contructor sets up this model. At this time that only includes + * storing away the WordPress data object. + * + * @return object Class object + * + */ + public function __construct ($wpdb, $config) + { + + // Save WordPress Database object + $this->wpdb = $wpdb; + + // Save plugin configuration object + $this->config = $config; + + // Run constructor for members data class + parent::__construct(false, false); + + } + + /* + * Perform Model Action + * + * NOTE: This model is intended to be called directly by an add_filter() to + * supply data only. It is not intended to be called by the controller and + * therefore should not be added to the validActions data. + * + * This model receives an array that includes a list of lat/lon boxes to use + * for listing members whose locations are within those boxes. The supplied + * array also may include other listing results passed by other filter hooks + * that should not be removed. The returned member data is expected to be used + * as data for map items along with similar data from other add-ons. + * + * The format of the requet array is as follows... + * + * array( + * // First area to search + * array( + * 'latMax' => {lat at North end of area}, + * 'latMin' => {lat at South end of area}, + * 'lonMax' => {lon at East end of area}, + * 'lonMin' => {lon at West end of area} + * ), + * // Second area to search + * array( + * 'latMax' => {lat at North end of area}, + * 'latMin' => {lat at South end of area}, + * 'lonMax' => {lon at East end of area}, + * 'lonMin' => {lon at West end of area} + * ), + * // Additional areas + * ) + * + * The format of the reply array is as follows... + * + * array( + * array( + * 'type' => {type of item, i.e. 'member', 'event', ...}, + * 'id' => {ID of item for reference}, + * 'lat' => {Latitude}, + * 'lon' => {Longitude}, + * 'name' => {Name of item}, + * 'addr1' => {Address line 1 of location}, + * 'addr2' => {Address line 2 of location}, + * 'city' => {City of location}, + * 'state' => {State code of location}, + * 'zip' => {Postal Code of location}, + * 'phone' => {Contact phone number}, + * 'email' => {Contact E-Mail address}, + * 'url' => {URL of item}, + * 'region' => {Region name, if available}, + * 'categories' => {array of categories - i.e. array( 0 = array( id => {id}, name => {name}), ... ) + * 'descr' => {Description}, + * 'short_descr' => {Short Description}, + * 'detail_page' => {URL of detail page, if available} + * 'dates' => {Text stating date, dates, or date range}, + * 'times' => {Text stating time, times, or time range} + * ), + * {additional results} + * ) + * + * Note that there may be more than one search area supplied. This model must + * return a list that includes any members in any of those search areas. + * + * @param array $search Array of lat/lon boxes to search + * @param string $searchText String to search for in certain member data fields + * + * @return array Items (see above) - Returns false if total failure. + * + */ + public function modelAction ($request = 'onMap', $search = false, $searchText = '') + { + + $items = array(); + + // Do sanity check on supplied data + if ($request == 'onMap' && (!is_array($search) || count($search) <= 0)) { + return false; + } + + // If this is an "onMap" request build query where clause for each search area - otherwise it's anywhere + $where = ''; + $and = ''; + if ($request == 'onMap') { + + $where = '( '; + $or = ''; + foreach ($search as $area) { + $where .= " + $or ( + lat BETWEEN ".$area['latMin']." AND ".$area['latMax']." + AND lon BETWEEN ".$area['lonMin']." AND ".$area['lonMax']." + ) + "; + $or = ' OR '; + } + $where .= ')'; + + $and = ' AND '; + + } + + // If searchText is supplied + if ($searchText != '') { + $where .= " + $and ( + member_name like '%".addslashes($searchText)."%' + OR short_descr like '%".addslashes($searchText)."%' + ) + "; + } + + // Get the filtered list of members and return data fields for map items. + $this->postProcessCategory = true; + $members = $this->getSimpleMemberInfoList($where, true); + $this->postProcessCategory = false; + + // Rebuild data with correct array format for map items + if (is_array($members) && count($members) > 0) { + foreach ($members as $k=>$v) { + + // Pull categories from the resulst and build the required simplfied array + $cats = array(); + if (is_array($v['categories']) && count($v['categories']) > 0) { + foreach ($v['categories'] as $c) { + $cats[] = array( + 'id' => $c['id'], + 'name' => $c['name'] + ); + } + } + + $members[$this->config['terms']['term_member_cap']+$v['id']] = array( + 'type' => $this->config['terms']['term_member_cap'], + 'id' => $v['id'], + 'lat' => $v['lat'], + 'lon' => $v['lon'], + 'name' => $v['member_name'], + 'loc_name' => '', + 'addr1' => $v['addr1'], + 'addr2' => $v['addr2'], + 'city' => $v['city'], + 'state' => $v['state']['value'], + 'zip' => $v['zip'], + 'phone' => $v['phone'], + 'email' => $v['email'], + 'url' => $v['url'], + 'region' => $v['region'], + 'categories' => $cats, + 'descr' => $v['descr'], + 'short_descr' => $v['short_descr'], + 'detail_page' => GLM_MEMBERS_SITE_BASE_URL.$this->config['settings']['canonical_member_page'].'/'.$v['member_slug'].'/', + 'dates' => '', + 'times' => '' + ); + + } + } + + return $members; + } + + +} + +?> diff --git a/setup/adminHooks.php b/setup/adminHooks.php index 36b06a05..783feb0e 100644 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -146,3 +146,109 @@ if ( $this->config['settings']['enable_members'] ) { } ); } + + +/* + * Provide basic member data by Lat/Lon search for use as map items. + * + * (NOTE that while this is for a front-end feature, that feature gets + * data via AJAX, which is processed by the admin controller.) + * + * This action obtains a list of basic member data based on the Lat/Lon search + * ranges supplied and returns those by adding them to the mapItems sub-array. + * + * It also adds information on the source (this add-on) and the title to use + * for items this returns. + * + * The array supplied is in the following standardized format. This format is + * used for all generic map items aggregated from multiple sources. + * + * 'request' What type of request is being made - Request only + * 'filter' A string filter to use to limit results - Request only + * 'area' A set of lat/lon areas to get results for (if request = 'onMap') - Request only + * If false then get all results without regard as to where they are. + * 'sources' An array of source information for what type of item and which add-on - Each source adds one entry here + * 'mapItems' Array of new map items to return to NearMe - Each source adds one or more map items here + * + * array( + * 'request' => {'onMap', 'anywhere'} + * 'filter' => {some search string} + * 'area' => array( + * // First area to search + * array( + * 'latMax' => {lat at North end of area}, + * 'latMin' => {lat at South end of area}, + * 'lonMax' => {lon at East end of area}, + * 'lonMin' => {lon at West end of area} + * ), + * // Second area to search + * array( + * 'latMax' => {lat at North end of area}, + * 'latMin' => {lat at South end of area}, + * 'lonMax' => {lon at East end of area}, + * 'lonMin' => {lon at West end of area} + * ), + * // Additional areas + * ), + * 'sources' => array( + * addOn' => {addOn slug}, + * 'type' => {text name for the marker type (i.e. Member, ...)} + * ), + * 'mapItems' => array( + * array( + * 'type' => {type of item, i.e. 'member', 'event', ...}, + * 'id' => {ID of item for reference}, + * 'lat' => {Latitude}, + * 'lon' => {Longitude}, + * 'name' => {Name of item}, + * 'loc_name' => {Name of Location}, + * 'addr1' => {Address line 1 of location}, + * 'addr2' => {Address line 2 of location}, + * 'city' => {City of location}, + * 'state' => {State code of location}, + * 'zip' => {Postal Code of location}, + * 'phone' => {Contact phone number}, + * 'email' => {Contact E-Mail address}, + * 'url' => {URL of item}, + * 'region' => {Region name, if available}, + * 'categories' => {array of categories - i.e. array( 0 = array( id => {id}, name => {name}), ... ) + * 'descr' => {Description}, + * 'short_descr' => {Short Description}, + * 'detail_page' => {URL of detail page, if available}, + * 'dates' => {Text stating date, dates, or date range}, + * 'times' => {Text stating time, times, or time range} + * ) + * ) + * ) + * + * There may be 1 or more search areas. + * + * There may be mapItems that were passed to us that we neeed to preserve. + * + * Note that 'type' and 'id' are used to build a unique ID for each map item + * so together they must form a unique value. + * + */ +add_filter( 'glm-hook-list-map-items-by-latlon', function($data) { + + // Call dedicated model to perform search + include_once GLM_MEMBERS_PLUGIN_PATH . '/models/front/members/memberDataByLatLon.php'; + $MapItems = new GlmMembersFront_members_memberDataByLatLon($this->wpdb, $this->config); + $mapItems = $MapItems->modelAction($data['request'], $data['area'], $data['filter']); + + // Add the info on this source + $data['sources'][GLM_MEMBERS_PLUGIN_SLUG] = array( + 'addOn' => GLM_MEMBERS_PLUGIN_SLUG, + 'type' => $this->config['terms']['term_member_cap'] + ); + + // If there's any map items merge them into the map items sub-array + if (is_array($mapItems) && count($mapItems) > 0) { + $data['mapItems'] = array_merge($data['mapItems'], $mapItems); + } + + return $data; + +}); + + diff --git a/views/front/footer.html b/views/front/footer.html index 75ce31ac..9fb331ea 100644 --- a/views/front/footer.html +++ b/views/front/footer.html @@ -1,4 +1,4 @@ - + \ No newline at end of file