├── .gitignore ├── img ├── open.png ├── flags │ ├── de_DE.png │ ├── en_EN.png │ ├── fr_FR.png │ ├── it_IT.png │ ├── ru_RU.png │ └── uk_UA.png ├── icons │ ├── blue.png │ ├── gold.png │ ├── green.png │ ├── other.png │ ├── silver.png │ ├── shop_art.png │ ├── shop_bag.png │ ├── shop_car.png │ ├── shop_pet.png │ ├── amenity_atm.png │ ├── amenity_bar.png │ ├── amenity_pub.png │ ├── shop_bakery.png │ ├── shop_beauty.png │ ├── shop_books.png │ ├── shop_fabric.png │ ├── shop_farm.png │ ├── shop_gift.png │ ├── shop_kiosk.png │ ├── shop_mall.png │ ├── shop_music.png │ ├── shop_shoes.png │ ├── shop_toys.png │ ├── shop_tyres.png │ ├── shop_video.png │ ├── tourism_zoo.png │ ├── amenity_bank.png │ ├── amenity_cafe.png │ ├── amenity_fuel.png │ ├── craft_tailor.png │ ├── leisure_pitch.png │ ├── leisure_track.png │ ├── shop_alcohol.png │ ├── shop_antiques.png │ ├── shop_bicycle.png │ ├── shop_boutique.png │ ├── shop_butcher.png │ ├── shop_chemist.png │ ├── shop_clothes.png │ ├── shop_computer.png │ ├── shop_copyshop.png │ ├── shop_fishing.png │ ├── shop_florist.png │ ├── shop_hardware.png │ ├── shop_jewelry.png │ ├── shop_optician.png │ ├── shop_seafood.png │ ├── shop_tobacco.png │ ├── tourism_hotel.png │ ├── tourism_motel.png │ ├── amenity_cinema.png │ ├── amenity_clinic.png │ ├── amenity_college.png │ ├── amenity_dentist.png │ ├── amenity_doctors.png │ ├── amenity_hospital.png │ ├── amenity_library.png │ ├── amenity_pharmacy.png │ ├── amenity_school.png │ ├── amenity_shelter.png │ ├── amenity_theatre.png │ ├── amenity_toilets.png │ ├── craft_clockmaker.png │ ├── craft_glaziery.png │ ├── craft_key_cutter.png │ ├── craft_shoemaker.png │ ├── leisure_stadium.png │ ├── shop_baby_goods.png │ ├── shop_car_parts.png │ ├── shop_car_repair.png │ ├── shop_convenience.png │ ├── shop_furniture.png │ ├── shop_greengrocer.png │ ├── shop_hairdresser.png │ ├── shop_motorcycle.png │ ├── shop_newsagent.png │ ├── shop_second_hand.png │ ├── shop_supermarket.png │ ├── tourism_artwork.png │ ├── tourism_museum.png │ ├── amenity_biergarten.png │ ├── amenity_fast_food.png │ ├── amenity_ice_cream.png │ ├── amenity_nightclub.png │ ├── amenity_restaurant.png │ ├── amenity_stripclub.png │ ├── amenity_university.png │ ├── amenity_veterinary.png │ ├── craft_photographer.png │ ├── shop_confectionery.png │ ├── shop_doityourself.png │ ├── shop_garden_centre.png │ ├── shop_haberdashery.png │ ├── shop_hearing_aids.png │ ├── shop_mobile_phone.png │ ├── shop_travel_agency.png │ ├── tourism_attraction.png │ ├── tourism_camp_site.png │ ├── tourism_theme_park.png │ ├── amenity_kindergarten.png │ ├── leisure_sport_centre.png │ ├── leisure_sports_centre.png │ ├── leisure_swimming_pool.png │ ├── shop_dog_hairdresser.png │ ├── tourism_caravan_site.png │ ├── tourism_guest_house.png │ ├── tourism_information.png │ ├── amenity_drinking_water.png │ ├── amenity_social_facility.png │ ├── emergency_defibrillator.png │ ├── shop_funeral_directors.png │ ├── shop_musical_instrument.png │ ├── amenity_ambulance_station.png │ └── shop_interior_decoration.png ├── marker-blue.png ├── marker-green.png └── marker-red.png ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── composer.json ├── index.php ├── css ├── MarkerCluster.css ├── leaflet.label.css ├── MarkerCluster.Default.css ├── Control.NominatimGeocoder.css ├── leaflet.contextmenu.css ├── slider.css ├── style.css └── leaflet.css ├── js ├── locales │ ├── bootstrap-datepicker.kr.js │ ├── bootstrap-datepicker.gl.js │ ├── bootstrap-datepicker.ja.js │ ├── bootstrap-datepicker.hr.js │ ├── bootstrap-datepicker.zh-CN.js │ ├── bootstrap-datepicker.az.js │ ├── bootstrap-datepicker.cy.js │ ├── bootstrap-datepicker.he.js │ ├── bootstrap-datepicker.ms.js │ ├── bootstrap-datepicker.no.js │ ├── bootstrap-datepicker.ca.js │ ├── bootstrap-datepicker.el.js │ ├── bootstrap-datepicker.rs.js │ ├── bootstrap-datepicker.th.js │ ├── bootstrap-datepicker.bg.js │ ├── bootstrap-datepicker.es.js │ ├── bootstrap-datepicker.nl.js │ ├── bootstrap-datepicker.sl.js │ ├── bootstrap-datepicker.rs-latin.js │ ├── bootstrap-datepicker.nb.js │ ├── bootstrap-datepicker.sq.js │ ├── bootstrap-datepicker.ua.js │ ├── bootstrap-datepicker.id.js │ ├── bootstrap-datepicker.kk.js │ ├── bootstrap-datepicker.tr.js │ ├── bootstrap-datepicker.da.js │ ├── bootstrap-datepicker.pt-BR.js │ ├── bootstrap-datepicker.ru.js │ ├── bootstrap-datepicker.cs.js │ ├── bootstrap-datepicker.is.js │ ├── bootstrap-datepicker.sk.js │ ├── bootstrap-datepicker.sv.js │ ├── bootstrap-datepicker.fa.js │ ├── bootstrap-datepicker.hu.js │ ├── bootstrap-datepicker.ro.js │ ├── bootstrap-datepicker.zh-TW.js │ ├── bootstrap-datepicker.de.js │ ├── bootstrap-datepicker.fr.js │ ├── bootstrap-datepicker.mk.js │ ├── bootstrap-datepicker.vi.js │ ├── bootstrap-datepicker.it.js │ ├── bootstrap-datepicker.pt.js │ ├── bootstrap-datepicker.ar.js │ ├── bootstrap-datepicker.fi.js │ ├── bootstrap-datepicker.lv.js │ ├── bootstrap-datepicker.nl-BE.js │ ├── bootstrap-datepicker.lt.js │ ├── bootstrap-datepicker.pl.js │ ├── bootstrap-datepicker.sw.js │ ├── bootstrap-datepicker.ka.js │ └── bootstrap-datepicker.et.js ├── Control.NominatimGeocoder.js ├── own_bootstrap.js ├── easyoverpass.js ├── query.js ├── leaflet-timeslider.js ├── leaflet-hash.js ├── leaflet.contextmenu.js ├── leaflet.label.min.js ├── suncalc.js ├── snap.min.js ├── poi.js └── coin.js ├── LICENSE ├── add_note.php ├── language.php ├── js_lang.php ├── tests └── OSM24 │ └── LanguageTest.php ├── src └── Language.php ├── static.php └── lang └── en_EN.php /.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | -------------------------------------------------------------------------------- /img/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/open.png -------------------------------------------------------------------------------- /img/flags/de_DE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/de_DE.png -------------------------------------------------------------------------------- /img/flags/en_EN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/en_EN.png -------------------------------------------------------------------------------- /img/flags/fr_FR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/fr_FR.png -------------------------------------------------------------------------------- /img/flags/it_IT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/it_IT.png -------------------------------------------------------------------------------- /img/flags/ru_RU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/ru_RU.png -------------------------------------------------------------------------------- /img/flags/uk_UA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/flags/uk_UA.png -------------------------------------------------------------------------------- /img/icons/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/blue.png -------------------------------------------------------------------------------- /img/icons/gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/gold.png -------------------------------------------------------------------------------- /img/icons/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/green.png -------------------------------------------------------------------------------- /img/icons/other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/other.png -------------------------------------------------------------------------------- /img/icons/silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/silver.png -------------------------------------------------------------------------------- /img/marker-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/marker-blue.png -------------------------------------------------------------------------------- /img/marker-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/marker-green.png -------------------------------------------------------------------------------- /img/marker-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/marker-red.png -------------------------------------------------------------------------------- /img/icons/shop_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_art.png -------------------------------------------------------------------------------- /img/icons/shop_bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_bag.png -------------------------------------------------------------------------------- /img/icons/shop_car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_car.png -------------------------------------------------------------------------------- /img/icons/shop_pet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_pet.png -------------------------------------------------------------------------------- /img/icons/amenity_atm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_atm.png -------------------------------------------------------------------------------- /img/icons/amenity_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_bar.png -------------------------------------------------------------------------------- /img/icons/amenity_pub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_pub.png -------------------------------------------------------------------------------- /img/icons/shop_bakery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_bakery.png -------------------------------------------------------------------------------- /img/icons/shop_beauty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_beauty.png -------------------------------------------------------------------------------- /img/icons/shop_books.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_books.png -------------------------------------------------------------------------------- /img/icons/shop_fabric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_fabric.png -------------------------------------------------------------------------------- /img/icons/shop_farm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_farm.png -------------------------------------------------------------------------------- /img/icons/shop_gift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_gift.png -------------------------------------------------------------------------------- /img/icons/shop_kiosk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_kiosk.png -------------------------------------------------------------------------------- /img/icons/shop_mall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_mall.png -------------------------------------------------------------------------------- /img/icons/shop_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_music.png -------------------------------------------------------------------------------- /img/icons/shop_shoes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_shoes.png -------------------------------------------------------------------------------- /img/icons/shop_toys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_toys.png -------------------------------------------------------------------------------- /img/icons/shop_tyres.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_tyres.png -------------------------------------------------------------------------------- /img/icons/shop_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_video.png -------------------------------------------------------------------------------- /img/icons/tourism_zoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_zoo.png -------------------------------------------------------------------------------- /img/icons/amenity_bank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_bank.png -------------------------------------------------------------------------------- /img/icons/amenity_cafe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_cafe.png -------------------------------------------------------------------------------- /img/icons/amenity_fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_fuel.png -------------------------------------------------------------------------------- /img/icons/craft_tailor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_tailor.png -------------------------------------------------------------------------------- /img/icons/leisure_pitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_pitch.png -------------------------------------------------------------------------------- /img/icons/leisure_track.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_track.png -------------------------------------------------------------------------------- /img/icons/shop_alcohol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_alcohol.png -------------------------------------------------------------------------------- /img/icons/shop_antiques.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_antiques.png -------------------------------------------------------------------------------- /img/icons/shop_bicycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_bicycle.png -------------------------------------------------------------------------------- /img/icons/shop_boutique.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_boutique.png -------------------------------------------------------------------------------- /img/icons/shop_butcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_butcher.png -------------------------------------------------------------------------------- /img/icons/shop_chemist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_chemist.png -------------------------------------------------------------------------------- /img/icons/shop_clothes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_clothes.png -------------------------------------------------------------------------------- /img/icons/shop_computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_computer.png -------------------------------------------------------------------------------- /img/icons/shop_copyshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_copyshop.png -------------------------------------------------------------------------------- /img/icons/shop_fishing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_fishing.png -------------------------------------------------------------------------------- /img/icons/shop_florist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_florist.png -------------------------------------------------------------------------------- /img/icons/shop_hardware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_hardware.png -------------------------------------------------------------------------------- /img/icons/shop_jewelry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_jewelry.png -------------------------------------------------------------------------------- /img/icons/shop_optician.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_optician.png -------------------------------------------------------------------------------- /img/icons/shop_seafood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_seafood.png -------------------------------------------------------------------------------- /img/icons/shop_tobacco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_tobacco.png -------------------------------------------------------------------------------- /img/icons/tourism_hotel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_hotel.png -------------------------------------------------------------------------------- /img/icons/tourism_motel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_motel.png -------------------------------------------------------------------------------- /img/icons/amenity_cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_cinema.png -------------------------------------------------------------------------------- /img/icons/amenity_clinic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_clinic.png -------------------------------------------------------------------------------- /img/icons/amenity_college.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_college.png -------------------------------------------------------------------------------- /img/icons/amenity_dentist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_dentist.png -------------------------------------------------------------------------------- /img/icons/amenity_doctors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_doctors.png -------------------------------------------------------------------------------- /img/icons/amenity_hospital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_hospital.png -------------------------------------------------------------------------------- /img/icons/amenity_library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_library.png -------------------------------------------------------------------------------- /img/icons/amenity_pharmacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_pharmacy.png -------------------------------------------------------------------------------- /img/icons/amenity_school.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_school.png -------------------------------------------------------------------------------- /img/icons/amenity_shelter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_shelter.png -------------------------------------------------------------------------------- /img/icons/amenity_theatre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_theatre.png -------------------------------------------------------------------------------- /img/icons/amenity_toilets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_toilets.png -------------------------------------------------------------------------------- /img/icons/craft_clockmaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_clockmaker.png -------------------------------------------------------------------------------- /img/icons/craft_glaziery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_glaziery.png -------------------------------------------------------------------------------- /img/icons/craft_key_cutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_key_cutter.png -------------------------------------------------------------------------------- /img/icons/craft_shoemaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_shoemaker.png -------------------------------------------------------------------------------- /img/icons/leisure_stadium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_stadium.png -------------------------------------------------------------------------------- /img/icons/shop_baby_goods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_baby_goods.png -------------------------------------------------------------------------------- /img/icons/shop_car_parts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_car_parts.png -------------------------------------------------------------------------------- /img/icons/shop_car_repair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_car_repair.png -------------------------------------------------------------------------------- /img/icons/shop_convenience.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_convenience.png -------------------------------------------------------------------------------- /img/icons/shop_furniture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_furniture.png -------------------------------------------------------------------------------- /img/icons/shop_greengrocer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_greengrocer.png -------------------------------------------------------------------------------- /img/icons/shop_hairdresser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_hairdresser.png -------------------------------------------------------------------------------- /img/icons/shop_motorcycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_motorcycle.png -------------------------------------------------------------------------------- /img/icons/shop_newsagent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_newsagent.png -------------------------------------------------------------------------------- /img/icons/shop_second_hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_second_hand.png -------------------------------------------------------------------------------- /img/icons/shop_supermarket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_supermarket.png -------------------------------------------------------------------------------- /img/icons/tourism_artwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_artwork.png -------------------------------------------------------------------------------- /img/icons/tourism_museum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_museum.png -------------------------------------------------------------------------------- /img/icons/amenity_biergarten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_biergarten.png -------------------------------------------------------------------------------- /img/icons/amenity_fast_food.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_fast_food.png -------------------------------------------------------------------------------- /img/icons/amenity_ice_cream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_ice_cream.png -------------------------------------------------------------------------------- /img/icons/amenity_nightclub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_nightclub.png -------------------------------------------------------------------------------- /img/icons/amenity_restaurant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_restaurant.png -------------------------------------------------------------------------------- /img/icons/amenity_stripclub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_stripclub.png -------------------------------------------------------------------------------- /img/icons/amenity_university.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_university.png -------------------------------------------------------------------------------- /img/icons/amenity_veterinary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_veterinary.png -------------------------------------------------------------------------------- /img/icons/craft_photographer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/craft_photographer.png -------------------------------------------------------------------------------- /img/icons/shop_confectionery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_confectionery.png -------------------------------------------------------------------------------- /img/icons/shop_doityourself.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_doityourself.png -------------------------------------------------------------------------------- /img/icons/shop_garden_centre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_garden_centre.png -------------------------------------------------------------------------------- /img/icons/shop_haberdashery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_haberdashery.png -------------------------------------------------------------------------------- /img/icons/shop_hearing_aids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_hearing_aids.png -------------------------------------------------------------------------------- /img/icons/shop_mobile_phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_mobile_phone.png -------------------------------------------------------------------------------- /img/icons/shop_travel_agency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_travel_agency.png -------------------------------------------------------------------------------- /img/icons/tourism_attraction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_attraction.png -------------------------------------------------------------------------------- /img/icons/tourism_camp_site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_camp_site.png -------------------------------------------------------------------------------- /img/icons/tourism_theme_park.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_theme_park.png -------------------------------------------------------------------------------- /img/icons/amenity_kindergarten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_kindergarten.png -------------------------------------------------------------------------------- /img/icons/leisure_sport_centre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_sport_centre.png -------------------------------------------------------------------------------- /img/icons/leisure_sports_centre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_sports_centre.png -------------------------------------------------------------------------------- /img/icons/leisure_swimming_pool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/leisure_swimming_pool.png -------------------------------------------------------------------------------- /img/icons/shop_dog_hairdresser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_dog_hairdresser.png -------------------------------------------------------------------------------- /img/icons/tourism_caravan_site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_caravan_site.png -------------------------------------------------------------------------------- /img/icons/tourism_guest_house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_guest_house.png -------------------------------------------------------------------------------- /img/icons/tourism_information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/tourism_information.png -------------------------------------------------------------------------------- /img/icons/amenity_drinking_water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_drinking_water.png -------------------------------------------------------------------------------- /img/icons/amenity_social_facility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_social_facility.png -------------------------------------------------------------------------------- /img/icons/emergency_defibrillator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/emergency_defibrillator.png -------------------------------------------------------------------------------- /img/icons/shop_funeral_directors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_funeral_directors.png -------------------------------------------------------------------------------- /img/icons/shop_musical_instrument.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_musical_instrument.png -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /img/icons/amenity_ambulance_station.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/amenity_ambulance_station.png -------------------------------------------------------------------------------- /img/icons/shop_interior_decoration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotevo/osm24/HEAD/img/icons/shop_interior_decoration.png -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "phpunit/phpunit": "^4.7" 4 | }, 5 | "autoload": { 6 | "psr-4": { 7 | "OSM24\\": "src/" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /css/MarkerCluster.css: -------------------------------------------------------------------------------- 1 | .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow { 2 | -webkit-transition: -webkit-transform 0.2s ease-out, opacity 0.2s ease-in; 3 | -moz-transition: -moz-transform 0.2s ease-out, opacity 0.2s ease-in; 4 | -o-transition: -o-transform 0.2s ease-out, opacity 0.2s ease-in; 5 | transition: transform 0.2s ease-out, opacity 0.2s ease-in; 6 | } 7 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.kr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Korean translation for bootstrap-datepicker 3 | * Gu Youn 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['kr'] = { 7 | days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], 8 | daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], 9 | daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], 10 | months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], 11 | monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.gl.js: -------------------------------------------------------------------------------- 1 | ;(function($){ 2 | $.fn.datepicker.dates['gl'] = { 3 | days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado", "Domingo"], 4 | daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb", "Dom"], 5 | daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa", "Do"], 6 | months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], 7 | monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"], 8 | today: "Hoxe", 9 | clear: "Limpar" 10 | }; 11 | }(jQuery)); 12 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ja.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Japanese translation for bootstrap-datepicker 3 | * Norio Suzuki 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ja'] = { 7 | days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], 8 | daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], 9 | daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], 10 | months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 11 | monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 12 | today: "今日", 13 | format: "yyyy/mm/dd" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.hr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Croatian localisation 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['hr'] = { 6 | days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota", "Nedjelja"], 7 | daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub", "Ned"], 8 | daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], 9 | months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], 10 | monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"], 11 | today: "Danas" 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今日", 13 | format: "yyyy年mm月dd日", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.az.js: -------------------------------------------------------------------------------- 1 | // Azerbaijani 2 | ;(function($){ 3 | $.fn.datepicker.dates['az'] = { 4 | days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə", "Bazar"], 5 | daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], 6 | daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş.", "B."], 7 | months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], 8 | monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], 9 | today: "Bu gün", 10 | weekStart: 1 11 | }; 12 | }(jQuery)); 13 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.cy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welsh translation for bootstrap-datepicker 3 | * S. Morris 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['cy'] = { 7 | days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn", "Sul"], 8 | daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad", "Sul"], 9 | daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa", "Su"], 10 | months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], 11 | monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"], 12 | today: "Heddiw" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.he.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hebrew translation for bootstrap-datepicker 3 | * Sagie Maoz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['he'] = { 7 | days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], 8 | daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 9 | daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 10 | months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], 11 | monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], 12 | today: "היום", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ms.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Malay translation for bootstrap-datepicker 3 | * Ateman Faiz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ms'] = { 7 | days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], 8 | daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], 9 | daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], 10 | months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], 12 | today: "Hari Ini" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.no.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian translation for bootstrap-datepicker 3 | **/ 4 | ;(function($){ 5 | $.fn.datepicker.dates['no'] = { 6 | days: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], 7 | daysShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], 8 | daysMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], 9 | months: ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'], 10 | monthsShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'], 11 | today: 'I dag', 12 | clear: 'Nullstill', 13 | weekStart: 1, 14 | format: 'dd.mm.yyyy' 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ca.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Catalan translation for bootstrap-datepicker 3 | * J. Garcia 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ca'] = { 7 | days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], 8 | daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], 9 | daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], 10 | months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], 12 | today: "Avui" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.el.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Greek translation for bootstrap-datepicker 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['el'] = { 6 | days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], 7 | daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], 8 | daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], 9 | months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], 10 | monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], 11 | today: "Σήμερα" 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.rs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian cyrillic translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs'] = { 7 | days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], 8 | daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], 9 | daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], 10 | months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], 11 | monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], 12 | today: "Данас" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.th.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Thai translation for bootstrap-datepicker 3 | * Suchau Jiraprapot 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['th'] = { 7 | days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], 8 | daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 9 | daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 10 | months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], 11 | monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], 12 | today: "วันนี้" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.bg.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bulgarian translation for bootstrap-datepicker 3 | * Apostol Apostolov 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['bg'] = { 7 | days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], 9 | daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], 10 | months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "днес" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.es.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Spanish translation for bootstrap-datepicker 3 | * Bruno Bonamin 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['es'] = { 7 | days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], 10 | months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], 11 | monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], 12 | today: "Hoy" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.nl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dutch translation for bootstrap-datepicker 3 | * Reinier Goltstein 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nl'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.sl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovene translation for bootstrap-datepicker 3 | * Gregor Rudolf 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sl'] = { 7 | days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], 9 | daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], 10 | months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danes" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.rs-latin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian latin translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs-latin'] = { 7 | days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], 9 | daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], 10 | months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danas" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.nb.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian (bokmål) translation for bootstrap-datepicker 3 | * Fredrik Sundmyhr 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nb'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], 12 | today: "I Dag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.sq.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Albanian translation for bootstrap-datepicker 3 | * Tomor Pupovci 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sq'] = { 7 | days: ["E Diel", "E Hënë", "E martē", "E mërkurë", "E Enjte", "E Premte", "E Shtunë", "E Diel"], 8 | daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu", "Die"], 9 | daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht", "Di"], 10 | months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"], 11 | monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"], 12 | today: "Sot" 13 | }; 14 | }(jQuery)); 15 | 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ua.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Ukrainian translation for bootstrap-datepicker 3 | * Igor Polynets 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ua'] = { 7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятница", "Субота", "Неділя"], 8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], 9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], 10 | months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], 11 | monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], 12 | today: "Сьогодні", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.id.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bahasa translation for bootstrap-datepicker 3 | * Azwar Akbar 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['id'] = { 7 | days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], 8 | daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], 9 | daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], 10 | months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], 12 | today: "Hari Ini", 13 | clear: "Kosongkan" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.kk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Kazakh translation for bootstrap-datepicker 3 | * Yerzhan Tolekov 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['kk'] = { 7 | days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі", "Жексенбі"], 8 | daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен", "Жек"], 9 | daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн", "Жк"], 10 | months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"], 11 | monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мамыр", "Мау", "Шлд", "Тмз", "Қыр", "Қзн", "Қар", "Жел"], 12 | today: "Бүгін", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.tr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Turkish translation for bootstrap-datepicker 3 | * Serkan Algur 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['tr'] = { 7 | days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], 8 | daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], 9 | daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], 10 | months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], 11 | monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], 12 | today: "Bugün", 13 | format: "dd.mm.yyyy" 14 | }; 15 | }(jQuery)); 16 | 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.da.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Danish translation for bootstrap-datepicker 3 | * Christian Pedersen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['da'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "I Dag", 13 | clear: "Nulstil" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.pt-BR.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Brazilian translation for bootstrap-datepicker 3 | * Cauan Cabral 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pt-BR'] = { 7 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 9 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 10 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 11 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 12 | today: "Hoje", 13 | clear: "Limpar" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ru.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Russian translation for bootstrap-datepicker 3 | * Victor Taranenko 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ru'] = { 7 | days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], 8 | daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], 9 | daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], 10 | months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], 11 | monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], 12 | today: "Сегодня", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.cs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Czech translation for bootstrap-datepicker 3 | * Matěj Koubík 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['cs'] = { 8 | days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], 9 | daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], 11 | months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], 12 | monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.is.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Icelandic translation for bootstrap-datepicker 3 | * Hinrik Örn Sigurðsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['is'] = { 7 | days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], 8 | daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], 9 | daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], 10 | months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], 12 | today: "Í Dag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.sk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovak translation for bootstrap-datepicker 3 | * Marek Lichtner 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates["sk"] = { 8 | days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], 9 | daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], 11 | months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.sv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swedish translation for bootstrap-datepicker 3 | * Patrik Ragnarsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sv'] = { 7 | days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], 8 | daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], 9 | daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], 10 | months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Idag", 13 | format: "yyyy-mm-dd", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.fa.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Persian translation for bootstrap-datepicker 3 | * Mostafa Rokooie 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fa'] = { 7 | days: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"], 8 | daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"], 9 | daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"], 10 | months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"], 11 | monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"], 12 | today: "امروز", 13 | clear: "پاک کن", 14 | weekStart: 1, 15 | format: "yyyy/mm/dd" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | OSM24 - OpenStreetMap based website with opening hours. 2 | Copyright (C) 2015 Adam Jordanek 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Affero General Public License as 6 | published by the Free Software Foundation, either version 3 of the 7 | License, or (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Affero General Public License for more details. 13 | 14 | You should have received a copy of the GNU Affero General Public License 15 | along with this program. If not, see . 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.hu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hungarian translation for bootstrap-datepicker 3 | * Sotus László 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['hu'] = { 7 | days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], 8 | daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], 9 | daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"], 10 | months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], 12 | today: "Ma", 13 | weekStart: 1, 14 | format: "yyyy.mm.dd" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ro.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Romanian translation for bootstrap-datepicker 3 | * Cristian Vasile 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ro'] = { 7 | days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], 8 | daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], 9 | daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], 10 | months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], 11 | monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], 12 | today: "Astăzi", 13 | clear: "Șterge", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.zh-TW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Traditional Chinese translation for bootstrap-datepicker 3 | * Rung-Sheng Jang 4 | * FrankWu Fix more appropriate use of Traditional Chinese habit 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['zh-TW'] = { 8 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 9 | daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六", "週日"], 10 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 11 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 13 | today: "今天", 14 | format: "yyyy年mm月dd日", 15 | weekStart: 1 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.de.js: -------------------------------------------------------------------------------- 1 | /** 2 | * German translation for bootstrap-datepicker 3 | * Sam Zurcher 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['de'] = { 7 | days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], 8 | daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], 9 | daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], 10 | months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], 11 | monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], 12 | today: "Heute", 13 | clear: "Löschen", 14 | weekStart: 1, 15 | format: "dd.mm.yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.fr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * French translation for bootstrap-datepicker 3 | * Nico Mollet 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fr'] = { 7 | days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], 8 | daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], 9 | daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], 10 | months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], 11 | monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"], 12 | today: "Aujourd'hui", 13 | clear: "Effacer", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.mk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Macedonian translation for bootstrap-datepicker 3 | * Marko Aleksic 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['mk'] = { 7 | days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота", "Недела"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб", "Нед"], 9 | daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са", "Не"], 10 | months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "Денес", 13 | format: "dd.mm.yyyy" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.vi.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Vietnamese translation for bootstrap-datepicker 3 | * An Vo 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['vi'] = { 7 | days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy", "Chủ nhật"], 8 | daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7", "CN"], 9 | daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7", "CN"], 10 | months: ["Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"], 11 | monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"], 12 | today: "Hôm nay", 13 | clear: "Xóa", 14 | format: "dd/mm/yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.it.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Italian translation for bootstrap-datepicker 3 | * Enrico Rubboli 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['it'] = { 7 | days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], 10 | months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], 12 | today: "Oggi", 13 | clear: "Cancella", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.pt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Portuguese translation for bootstrap-datepicker 3 | * Original code: Cauan Cabral 4 | * Tiago Melo 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['pt'] = { 8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 13 | today: "Hoje", 14 | clear: "Limpar" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Arabic translation for bootstrap-datepicker 3 | * Mohammed Alshehri 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ar'] = { 7 | days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], 8 | daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], 9 | daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], 10 | months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 11 | monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 12 | today: "هذا اليوم", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.fi.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Finnish translation for bootstrap-datepicker 3 | * Jaakko Salonen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fi'] = { 7 | days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], 8 | daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], 9 | daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], 10 | months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], 11 | monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], 12 | today: "tänään", 13 | weekStart: 1, 14 | format: "d.m.yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.lv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Latvian translation for bootstrap-datepicker 3 | * Artis Avotins 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lv'] = { 8 | days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], 9 | daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], 10 | daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se", "Sv"], 11 | months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"], 13 | today: "Šodien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /add_note.php: -------------------------------------------------------------------------------- 1 | $_GET['lon'],'lat'=>$_GET['lat'],'text'=>$_GET['text']); 8 | $ch = curl_init(); 9 | curl_setopt($ch, CURLOPT_URL,$url); 10 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 11 | curl_setopt($ch, CURLOPT_HEADER, 1); 12 | curl_setopt($ch, CURLOPT_POST, true); 13 | curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 14 | curl_setopt($ch, CURLOPT_USERPWD, USERNAME.":".PASSWORD); 15 | curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 16 | $curl_scraped_page = curl_exec($ch); 17 | curl_close($ch); 18 | 19 | echo $curl_scraped_page; 20 | } 21 | ?> 22 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.nl-BE.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Belgium-Dutch translation for bootstrap-datepicker 3 | * Julien Poulin 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nl-BE'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag", 13 | clear: "Leegmaken", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.lt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Lithuanian translation for bootstrap-datepicker 3 | * Šarūnas Gliebus 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lt'] = { 8 | days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], 9 | daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], 10 | daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], 11 | months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], 12 | monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], 13 | today: "Šiandien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.pl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Polish translation for bootstrap-datepicker 3 | * Robert 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pl'] = { 7 | days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], 8 | daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], 9 | daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], 10 | months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], 11 | monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], 12 | today: "Dzisiaj", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swahili translation for bootstrap-datepicker 3 | * Edwin Mugendi 4 | * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['sw'] = { 8 | days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], 9 | daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], 10 | daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], 11 | months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], 12 | monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], 13 | today: "Leo" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.ka.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Georgian translation for bootstrap-datepicker 3 | * Levan Melikishvili 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ka'] = { 7 | days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], 8 | daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], 9 | daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], 10 | months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომები", "ნოემბერი", "დეკემბერი"], 11 | monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], 12 | today: "დღეს", 13 | clear: "გასუფთავება", 14 | weekStart: 1, 15 | format: "dd.mm.yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /js/locales/bootstrap-datepicker.et.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Estonian translation for bootstrap-datepicker 3 | * Ando Roots 4 | * Fixes by Illimar Tambek < 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['et'] = { 8 | days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], 9 | daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup", "Pühap"], 10 | daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], 11 | months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], 12 | monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], 13 | today: "Täna", 14 | clear: "Tühjenda", 15 | weekStart: 1, 16 | format: "dd.mm.yyyy" 17 | }; 18 | }(jQuery)); 19 | -------------------------------------------------------------------------------- /css/leaflet.label.css: -------------------------------------------------------------------------------- 1 | .leaflet-label { 2 | background: rgb(235, 235, 235); 3 | background: rgba(235, 235, 235, 0.81); 4 | background-clip: padding-box; 5 | border-color: #777; 6 | border-color: rgba(0,0,0,0.25); 7 | border-radius: 4px; 8 | border-style: solid; 9 | border-width: 4px; 10 | color: #111; 11 | display: block; 12 | font: 12px/20px "Helvetica Neue", Arial, Helvetica, sans-serif; 13 | font-weight: bold; 14 | padding: 1px 6px; 15 | position: absolute; 16 | -webkit-user-select: none; 17 | -moz-user-select: none; 18 | -ms-user-select: none; 19 | user-select: none; 20 | white-space: nowrap; 21 | z-index: 6; 22 | } 23 | 24 | .leaflet-label:before { 25 | border-right: 6px solid black; 26 | border-right-color: inherit; 27 | border-top: 6px solid transparent; 28 | border-bottom: 6px solid transparent; 29 | content: ""; 30 | position: absolute; 31 | top: 5px; 32 | left: -10px; 33 | } -------------------------------------------------------------------------------- /language.php: -------------------------------------------------------------------------------- 1 | setServer($_SERVER); 21 | $_SESSION['lang'] = $language->getSupportedFromBrowser(); 22 | unset($language); 23 | } 24 | 25 | // When worse comes to worse use en_EN 26 | 27 | if (empty($_SESSION['lang']) || !file_exists('lang/' . $_SESSION['lang'] . '.php')) { 28 | $_SESSION['lang'] = 'en_EN'; 29 | } 30 | 31 | require_once 'lang/' . $_SESSION['lang'] . '.php'; 32 | 33 | $slang = explode('_', $_SESSION['lang']); 34 | $_SESSION['slang'] = $slang[0]; 35 | -------------------------------------------------------------------------------- /css/MarkerCluster.Default.css: -------------------------------------------------------------------------------- 1 | .marker-cluster-small { 2 | background-color: rgba(181, 226, 140, 0.6); 3 | } 4 | .marker-cluster-small div { 5 | background-color: rgba(110, 204, 57, 0.6); 6 | } 7 | 8 | .marker-cluster-medium { 9 | background-color: rgba(241, 211, 87, 0.6); 10 | } 11 | .marker-cluster-medium div { 12 | background-color: rgba(240, 194, 12, 0.6); 13 | } 14 | 15 | .marker-cluster-large { 16 | background-color: rgba(253, 156, 115, 0.6); 17 | } 18 | .marker-cluster-large div { 19 | background-color: rgba(241, 128, 23, 0.6); 20 | } 21 | 22 | .marker-cluster { 23 | background-clip: padding-box; 24 | border-radius: 20px; 25 | } 26 | .marker-cluster div { 27 | width: 30px; 28 | height: 30px; 29 | margin-left: 5px; 30 | margin-top: 5px; 31 | 32 | text-align: center; 33 | border-radius: 15px; 34 | font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; 35 | } 36 | .marker-cluster span { 37 | line-height: 30px; 38 | } -------------------------------------------------------------------------------- /css/Control.NominatimGeocoder.css: -------------------------------------------------------------------------------- 1 | .leaflet-control-geocoder a { 2 | background-position: 50% 50%; 3 | background-repeat: no-repeat; 4 | display: block; 5 | } 6 | 7 | .leaflet-control-geocoder { 8 | box-shadow: 0 1px 7px #999; 9 | background: #f8f8f9; 10 | -moz-border-radius: 8px; 11 | -webkit-border-radius: 8px; 12 | border-radius: 8px; 13 | padding: 5px; 14 | } 15 | 16 | 17 | 18 | .leaflet-control-geocoder a { 19 | width: 36px; 20 | height: 36px; 21 | font-size: 25px; 22 | } 23 | 24 | .leaflet-touch .leaflet-control-geocoder a { 25 | width: 44px; 26 | height: 44px; 27 | } 28 | 29 | .leaflet-control-geocoder .leaflet-control-geocoder-form, 30 | .leaflet-control-geocoder-expanded .leaflet-control-geocoder-toggle { 31 | display: none; 32 | } 33 | 34 | .leaflet-control-geocoder-expanded .leaflet-control-geocoder-form { 35 | display: block; 36 | position: relative; 37 | } 38 | 39 | .leaflet-control-geocoder-expanded .leaflet-control-geocoder-form { 40 | padding: 5px; 41 | } -------------------------------------------------------------------------------- /css/leaflet.contextmenu.css: -------------------------------------------------------------------------------- 1 | .leaflet-contextmenu { 2 | display: none; 3 | box-shadow: 0 1px 7px rgba(0,0,0,0.4); 4 | -webkit-border-radius: 4px; 5 | border-radius: 4px; 6 | padding: 4px 0; 7 | background-color: #fff; 8 | cursor: default; 9 | -webkit-user-select: none; 10 | -moz-user-select: none; 11 | user-select: none; 12 | } 13 | 14 | .leaflet-contextmenu a.leaflet-contextmenu-item { 15 | display: block; 16 | color: #222; 17 | font-size: 12px; 18 | line-height: 20px; 19 | text-decoration: none; 20 | padding: 0 12px; 21 | border-top: 1px solid transparent; 22 | border-bottom: 1px solid transparent; 23 | cursor: default; 24 | outline: none; 25 | } 26 | 27 | .leaflet-contextmenu a.leaflet-contextmenu-item-disabled { 28 | opacity: 0.5; 29 | } 30 | 31 | .leaflet-contextmenu a.leaflet-contextmenu-item.over { 32 | background-color: #f4f4f4; 33 | border-top: 1px solid #f0f0f0; 34 | border-bottom: 1px solid #f0f0f0; 35 | } 36 | 37 | .leaflet-contextmenu a.leaflet-contextmenu-item-disabled.over { 38 | background-color: inherit; 39 | border-top: 1px solid transparent; 40 | border-bottom: 1px solid transparent; 41 | } 42 | 43 | .leaflet-contextmenu-icon { 44 | margin: 2px 8px 0 0; 45 | width: 16px; 46 | height: 16px; 47 | float: left; 48 | border: 0; 49 | } 50 | 51 | .leaflet-contextmenu-separator { 52 | border-bottom: 1px solid #ccc; 53 | margin: 5px 0; 54 | } -------------------------------------------------------------------------------- /js_lang.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | var note_body='


'; 6 | 7 | var lang_status=''; 8 | var lang_note=''; 9 | var lang_opening_hours=''; 10 | var lang_basic=''; 11 | var lang_comments=''; 12 | var lang_advanced=''; 13 | var lang_key=''; 14 | var lang_value=''; 15 | var lang_report=''; 16 | var lang_add_missing_data=''; 17 | var lang_locate=''; 18 | var lang_stop_locate=''; 19 | var lang_not_found=''; 20 | var lang_loading=''; 21 | var lang_please_zoom_in=''; 22 | var lang_open=''; 23 | var lang_last_hour=''; 24 | var lang_close=''; 25 | var lang_nodata=''; 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/OSM24/LanguageTest.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | class LanguageTest extends \PHPUnit_Framework_TestCase 12 | { 13 | 14 | /** 15 | * @var Language 16 | */ 17 | private $sut; 18 | 19 | protected function setUp() 20 | { 21 | $this->sut = new Language(); 22 | } 23 | 24 | public function testGetSupported() 25 | { 26 | $actual = $this->sut->getSupported(); 27 | $subset = ['en' => 'en_EN', 'en-EN' => 'en_EN']; 28 | $this->assertArraySubset($subset, $actual); 29 | } 30 | 31 | public function testIsSupported() 32 | { 33 | $this->assertTrue($this->sut->isSupported('en')); 34 | $this->assertFalse($this->sut->isSupported('foo')); 35 | } 36 | 37 | public function testGetFromBrowserMissing() 38 | { 39 | $actual = $this->sut->getFromBrowser(); 40 | $this->assertSame([], $actual); 41 | } 42 | 43 | public function testGetFromBrowser() 44 | { 45 | $this->sut->setServer(['HTTP_ACCEPT_LANGUAGE' => 'en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2']); 46 | $actual = $this->sut->getFromBrowser(); 47 | $this->assertSame(['en', 'de'], $actual); 48 | } 49 | 50 | public function testGetSupportedFromBrowser() 51 | { 52 | $this->sut->setServer(['HTTP_ACCEPT_LANGUAGE' => 'en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2']); 53 | $this->assertTrue($this->sut->isSupported('en')); 54 | $this->assertFalse($this->sut->isSupported('en-ca')); 55 | $actual = $this->sut->getSupportedFromBrowser(); 56 | $this->assertSame('en_EN', $actual); 57 | } 58 | 59 | public function testGetSupportedFromBrowserSimple() 60 | { 61 | $this->sut->setServer(['HTTP_ACCEPT_LANGUAGE' => 'en-US']); 62 | $this->assertTrue($this->sut->isSupported('en')); 63 | $this->assertFalse($this->sut->isSupported('en-US')); 64 | $actual = $this->sut->getSupportedFromBrowser(); 65 | $this->assertSame('en_EN', $actual); 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /js/Control.NominatimGeocoder.js: -------------------------------------------------------------------------------- 1 | L.Control.NominatimGeocoder = L.Control.extend({ 2 | options: { 3 | collapsed: true, 4 | position: 'topright', 5 | text: 'Locate', 6 | callback: function (results) { 7 | // Check if no results are returned 8 | if (results.length >= 1) { 9 | // Just take the first place 10 | var bbox = results[0].boundingbox, 11 | southWest = new L.LatLng(bbox[0], bbox[2]), 12 | northEast = new L.LatLng(bbox[1], bbox[3]), 13 | bounds = new L.LatLngBounds(southWest, northEast); 14 | // Center on it 15 | this._map.fitBounds(bounds); 16 | } 17 | // TODO Indicate lack of results to user 18 | } 19 | }, 20 | 21 | _callbackId: 0, 22 | 23 | initialize: function (options) { 24 | L.Util.setOptions(this, options); 25 | }, 26 | 27 | onAdd: function (map) { 28 | this._map = map; 29 | var className = 'leaflet-control-geocoder', 30 | container = this._container = L.DomUtil.create('div', className); 31 | 32 | L.DomEvent.disableClickPropagation(container); 33 | 34 | var form = this._form = L.DomUtil.create('form', className + '-form'); 35 | 36 | var input = this._input = document.createElement('input'); 37 | input.type = "text"; 38 | 39 | var submit = document.createElement('button'); 40 | submit.type = "submit"; 41 | submit.innerHTML = this.options.text; 42 | 43 | form.appendChild(input); 44 | form.appendChild(submit); 45 | 46 | L.DomEvent.addListener(form, 'submit', this._geocode, this); 47 | 48 | if (this.options.collapsed) { 49 | L.DomEvent.addListener(container, 'mouseover', this._expand, this); 50 | L.DomEvent.addListener(container, 'mouseout', this._collapse, this); 51 | 52 | var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container); 53 | link.innerHTML =''; 54 | link.href = '#'; 55 | link.title = 'Nominatim Geocoder'; 56 | 57 | L.DomEvent.addListener(link, L.Browser.touch ? 'click' : 'focus', this._expand, this); 58 | 59 | this._map.on('movestart', this._collapse, this); 60 | } else { 61 | this._expand(); 62 | } 63 | 64 | container.appendChild(form); 65 | 66 | return container; 67 | }, 68 | 69 | _geocode : function (event) { 70 | L.DomEvent.preventDefault(event); 71 | this._callbackId = "_l_nominatimgeocoder_" + (this._callbackId++); 72 | window[this._callbackId] = L.Util.bind(this.options.callback, this); 73 | 74 | var params = { 75 | q: this._input.value, 76 | format: "json", 77 | // We only use the first result currently 78 | limit: 1, 79 | json_callback : this._callbackId 80 | }, 81 | url = "http://open.mapquestapi.com/nominatim/v1/search" + L.Util.getParamString(params), 82 | script = document.createElement("script"); 83 | 84 | script.type = "text/javascript"; 85 | script.src = url; 86 | script.id = this._callbackId; 87 | document.getElementsByTagName("head")[0].appendChild(script); 88 | }, 89 | 90 | _expand: function () { 91 | L.DomUtil.addClass(this._container, 'leaflet-control-geocoder-expanded'); 92 | }, 93 | 94 | _collapse: function () { 95 | this._container.className = this._container.className.replace(' leaflet-control-geocoder-expanded', ''); 96 | } 97 | }); 98 | -------------------------------------------------------------------------------- /src/Language.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | class Language 12 | { 13 | 14 | /** 15 | * List of languages supported by the application 16 | * 17 | * @var string[] 18 | */ 19 | private $supported = array(); 20 | 21 | /** 22 | * PHP $_GET 23 | * 24 | * @var array 25 | */ 26 | private $get; 27 | 28 | /** 29 | * PHP $_SERVER 30 | * 31 | * @var array 32 | */ 33 | private $server; 34 | 35 | /** 36 | * Set PHP $_GET 37 | * 38 | * @param array $get $_GET 39 | * @return $this 40 | */ 41 | public function setGet(array $get) 42 | { 43 | $this->get = $get; 44 | 45 | return $this; 46 | } 47 | 48 | /** 49 | * Set PHP $_SERVER 50 | * 51 | * @param array $server $_SERVER 52 | * @return $this 53 | */ 54 | public function setServer(array $server) 55 | { 56 | $this->server = $server; 57 | 58 | return $this; 59 | } 60 | 61 | /** 62 | * Load supported languages from file system 63 | */ 64 | protected function loadSupported() 65 | { 66 | $files = scandir("lang"); 67 | foreach ($files as $file) { 68 | $filen = explode(".", $file); 69 | //is lang 70 | if (strlen($filen[0]) > 0) { 71 | $locale_code = $filen[0]; //Extention '.php' is dropeed, so 'pt_BR.php' becomes 'pt_BR' 72 | $filen = explode('_', $locale_code); 73 | // Add primary language tag 74 | $this->supported[$filen[0]] = $locale_code; 75 | //if type pl_PL 76 | if (count($filen) > 1) { 77 | $fullLanguageTag = strtolower($filen[0]) . '-' . strtoupper($filen[1]); 78 | $this->supported[$fullLanguageTag] = $locale_code; 79 | } 80 | } 81 | } 82 | } 83 | 84 | /** 85 | * Get list of supported languages 86 | * 87 | * @return string[] 88 | */ 89 | public function getSupported() 90 | { 91 | if (empty($this->supported)) { 92 | $this->loadSupported(); 93 | } 94 | 95 | return $this->supported; 96 | } 97 | 98 | /** 99 | * Test if given language is supported by application 100 | * 101 | * @param string $language 102 | * @return bool 103 | */ 104 | public function isSupported($language) 105 | { 106 | $supported = $this->getSupported(); 107 | 108 | return isset($supported[$language]); 109 | } 110 | 111 | /** 112 | * Get browser accepted languages (two-letter primary-tag) 113 | * 114 | * @return string[] 115 | */ 116 | public function getFromBrowser() 117 | { 118 | $httpAccepted = &$this->server['HTTP_ACCEPT_LANGUAGE']; 119 | if (!empty($httpAccepted)) { 120 | $pattern = '~(([a-z]{1,8})(?:-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?~i'; 121 | preg_match_all($pattern, $httpAccepted, $langs); 122 | 123 | } 124 | 125 | return (isset($langs[2])) ? array_values(array_unique($langs[2])) : []; 126 | } 127 | 128 | /** 129 | * Find most accepted language 130 | * 131 | * @return string|null Local code or null if no matches 132 | */ 133 | public function getSupportedFromBrowser() 134 | { 135 | $supported = $this->getSupported(); 136 | $browser = $this->getFromBrowser(); 137 | foreach ($browser as $lang) { 138 | if (isset($supported[$lang])) { 139 | return $supported[$lang]; 140 | } 141 | } 142 | return null; 143 | } 144 | 145 | } 146 | -------------------------------------------------------------------------------- /js/own_bootstrap.js: -------------------------------------------------------------------------------- 1 | /* 2 | Author: Adam Jordanek (dotevo) 3 | License: GPLv2 4 | */ 5 | 6 | var global_menu_data={}; 7 | var global_menu_data_changed=function(){}; 8 | 9 | function one_change_click(me,change){ 10 | var selText = me.text(); 11 | var parent=me.closest('.btn-group-own').find('.dropdown-toggle'); 12 | parent.html(selText+' '); 13 | //hide 14 | $("div [class*=\"visible-\"]").css( "display", 'none' ); 15 | //show 16 | $( ".visible-"+me.attr("id")).css( "display", 'inline' ); 17 | if(change==1){ 18 | global_menu_data[parent.attr("id")]=me.attr("id"); 19 | global_menu_data_changed(); 20 | } 21 | } 22 | 23 | $(".select-one-change li a").click(function(){ 24 | one_change_click($(this),1); 25 | }); 26 | 27 | function one_click(me,change){ 28 | var selText = me.text(); 29 | var parent=me.closest('.btn-group-own').find('.dropdown-toggle'); 30 | 31 | if(typeof parent.attr('data-arrow')=== "undefined") 32 | parent.html(selText); 33 | else 34 | parent.html(selText+' '); 35 | //save 36 | if(change==1){ 37 | global_menu_data[parent.attr("id")]=me.attr("id"); 38 | global_menu_data_changed(); 39 | } 40 | } 41 | 42 | $(".select-one li a").click(function(){ 43 | one_click($(this),1); 44 | }); 45 | 46 | 47 | function multi_getState(parent,me){ 48 | //load actual state 49 | var state; 50 | if(typeof global_menu_data[parent.attr("id")] === 'undefined'){ 51 | global_menu_data[parent.attr("id")]={}; 52 | } 53 | if(typeof global_menu_data[parent.attr("id")][me.attr("id")] === 'undefined'){ 54 | state=0; 55 | }else{ 56 | state=global_menu_data[parent.attr("id")][me.attr("id")]; 57 | } 58 | return state; 59 | } 60 | 61 | function multi_state_set(me,state){ 62 | me.children("[class*=\"state\"]").css("display", 'none'); 63 | me.children(".state"+state).css("display", "inline"); 64 | } 65 | 66 | function multi_state_click(me, increment){ 67 | var parent=me.closest('.btn-group-own').find('.dropdown-toggle'); 68 | var state=multi_getState(parent,me); 69 | //increment state 70 | if(increment==1){ 71 | state++; 72 | if(me.children(".state"+state).length == 0){ 73 | state=0; 74 | } 75 | } 76 | //set classes 77 | multi_state_set(me,state); 78 | global_menu_data[parent.attr("id")][me.attr("id")]=state; 79 | if(increment==1) 80 | global_menu_data_changed(); 81 | } 82 | 83 | $(".select-multi-state a").click(function(){ 84 | multi_state_click($(this), 1); 85 | }); 86 | 87 | 88 | function text_enter(me,change){ 89 | var parent=me.closest('.btn-group-own').find('.dropdown-toggle'); 90 | var state=multi_getState(parent,me); 91 | if(change==1){ 92 | var nnn=me.val(); 93 | global_menu_data[parent.attr("id")][me.attr("id")]=nnn; 94 | global_menu_data_changed(); 95 | } 96 | if(state==0 && change == 0) 97 | me.val(""); 98 | else if(change == 0) 99 | me.val(global_menu_data[parent.attr("id")][me.attr("id")]); 100 | } 101 | 102 | 103 | $(".select-text").keypress(function( event ) { 104 | if ( event.which == 13 ){ 105 | text_enter($(this),1); 106 | } 107 | }); 108 | 109 | 110 | $('.dropdown-always-on li').click(function(e) { 111 | e.stopPropagation(); 112 | }); 113 | 114 | function setDefault(parent){ 115 | if(typeof parent.data("default-id")!='undefined' && typeof global_menu_data[parent.attr("id")] === 'undefined') 116 | global_menu_data[parent.attr("id")]=parent.data("default-id"); 117 | } 118 | 119 | function setAll(){ 120 | $(".select-one-change").each(function (){ 121 | var parent=$(this).closest('.btn-group-own').find('.dropdown-toggle'); 122 | setDefault(parent); 123 | if(typeof global_menu_data[parent.attr("id")] != "undefined"){ 124 | var child=$(this).find("#"+global_menu_data[parent.attr("id")]); 125 | one_change_click(child,0); 126 | } 127 | }); 128 | 129 | $(".select-one").each(function (){ 130 | var parent=$(this).closest('.btn-group-own').find('.dropdown-toggle'); 131 | setDefault(parent); 132 | if(typeof global_menu_data[parent.attr("id")] != "undefined"){ 133 | var child=$(this).find("#"+global_menu_data[parent.attr("id")]); 134 | one_click(child,0); 135 | } 136 | }); 137 | 138 | //state 139 | $(".select-multi-state a").each(function (){ 140 | multi_state_click($(this), 0); 141 | }); 142 | 143 | $(".select-text").each(function (){ 144 | text_enter($(this),0) 145 | }); 146 | } 147 | 148 | 149 | -------------------------------------------------------------------------------- /css/slider.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Slider for Bootstrap 3 | * 4 | * Licensed under the Apache License v2.0 5 | * 6 | */ 7 | .slider { 8 | display: inline-block; 9 | vertical-align: middle; 10 | position: relative; 11 | } 12 | .slider.slider-horizontal { 13 | width: 210px; 14 | height: 20px; 15 | } 16 | .slider.slider-horizontal .slider-track { 17 | height: 10px; 18 | width: 100%; 19 | margin-top: -5px; 20 | top: 50%; 21 | left: 0; 22 | } 23 | .slider.slider-horizontal .slider-selection { 24 | height: 100%; 25 | top: 0; 26 | bottom: 0; 27 | } 28 | .slider.slider-horizontal .slider-handle { 29 | margin-left: -10px; 30 | margin-top: -5px; 31 | } 32 | .slider.slider-horizontal .slider-handle.triangle { 33 | border-width: 0 10px 10px 10px; 34 | width: 0; 35 | height: 0; 36 | border-bottom-color: #0480be; 37 | margin-top: 0; 38 | } 39 | .slider.slider-vertical { 40 | height: 210px; 41 | width: 20px; 42 | } 43 | .slider.slider-vertical .slider-track { 44 | width: 10px; 45 | height: 100%; 46 | margin-left: -5px; 47 | left: 50%; 48 | top: 0; 49 | } 50 | .slider.slider-vertical .slider-selection { 51 | width: 100%; 52 | left: 0; 53 | top: 0; 54 | bottom: 0; 55 | } 56 | .slider.slider-vertical .slider-handle { 57 | margin-left: -5px; 58 | margin-top: -10px; 59 | } 60 | .slider.slider-vertical .slider-handle.triangle { 61 | border-width: 10px 0 10px 10px; 62 | width: 1px; 63 | height: 1px; 64 | border-left-color: #0480be; 65 | margin-left: 0; 66 | } 67 | .slider.slider-disabled .slider-handle { 68 | background-image: -webkit-linear-gradient(top, #dfdfdf 0%, #bebebe 100%); 69 | background-image: linear-gradient(to bottom, #dfdfdf 0%, #bebebe 100%); 70 | background-repeat: repeat-x; 71 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf', endColorstr='#ffbebebe', GradientType=0); 72 | } 73 | .slider.slider-disabled .slider-track { 74 | background-image: -webkit-linear-gradient(top, #e5e5e5 0%, #e9e9e9 100%); 75 | background-image: linear-gradient(to bottom, #e5e5e5 0%, #e9e9e9 100%); 76 | background-repeat: repeat-x; 77 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5', endColorstr='#ffe9e9e9', GradientType=0); 78 | cursor: not-allowed; 79 | } 80 | .slider input { 81 | display: none; 82 | } 83 | .slider .tooltip.hide { 84 | display: none; 85 | } 86 | .slider .tooltip-inner { 87 | white-space: nowrap; 88 | } 89 | .slider-track { 90 | position: absolute; 91 | cursor: pointer; 92 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #f9f9f9 100%); 93 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #f9f9f9 100%); 94 | background-repeat: repeat-x; 95 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); 96 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 97 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 98 | border-radius: 4px; 99 | } 100 | .slider-selection { 101 | position: absolute; 102 | background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #f5f5f5 100%); 103 | background-image: linear-gradient(to bottom, #f9f9f9 0%, #f5f5f5 100%); 104 | background-repeat: repeat-x; 105 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9', endColorstr='#fff5f5f5', GradientType=0); 106 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 107 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 108 | -webkit-box-sizing: border-box; 109 | -moz-box-sizing: border-box; 110 | box-sizing: border-box; 111 | border-radius: 4px; 112 | } 113 | .slider-handle { 114 | position: absolute; 115 | width: 20px; 116 | height: 20px; 117 | background-color: #3a94a5; 118 | background-image: -webkit-linear-gradient(top, #149bdf 0%, #0480be 100%); 119 | background-image: linear-gradient(to bottom, #149bdf 0%, #0480be 100%); 120 | background-repeat: repeat-x; 121 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); 122 | filter: none; 123 | -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); 124 | box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); 125 | opacity: 0.8; 126 | border: 0px solid transparent; 127 | } 128 | .slider-handle.round { 129 | border-radius: 50%; 130 | } 131 | .slider-handle.triangle { 132 | background: transparent none; 133 | } 134 | .slider-handle.custom { 135 | background: transparent none; 136 | } 137 | .slider-handle.custom::before { 138 | line-height: 20px; 139 | font-size: 20px; 140 | content: '\2605'; 141 | color: #726204; 142 | } 143 | -------------------------------------------------------------------------------- /js/easyoverpass.js: -------------------------------------------------------------------------------- 1 | /*Responsible for: 2 | *-Download data from overpass 3 | *-Add data to layer 4 | */ 5 | 6 | //BBox to string converter 7 | L.LatLngBounds.prototype.toOverpassBBoxString = function (){ 8 | var a = this._southWest, 9 | b = this._northEast; 10 | return [a.lat, a.lng, b.lat, b.lng].join(","); 11 | }; 12 | 13 | //Constructor 14 | function EasyOverpass(options){ 15 | this.options = options; 16 | this.jobs = 0; 17 | this._ids = {}; 18 | this.options.map.on('moveend', this.onMoveEnd, this); 19 | } 20 | 21 | //Ways -> Elements 22 | EasyOverpass.prototype.dataDownloadWays = function(data){ 23 | //If query has changed 24 | if(this.query != this.instance.options.queryWays && this.query != "perm"){return;} 25 | //Get nodes 26 | var nodes = {}; 27 | for(var i=0;i this.options.map.getZoom()){ 112 | return; 113 | } 114 | 115 | if(this.options.query != ""){ 116 | var query_a = this.options.query+out; 117 | console.log("Query: "+query_a); 118 | query_a = query_a.replace(/(BBOX)/g, this.options.map.getBounds().toOverpassBBoxString()); 119 | this.download(query_a, { instance: this, query: this.options.query }, this.dataDownloadNodes); 120 | } 121 | 122 | if(this.options.minfullzoom <= this.options.map.getZoom()){ 123 | if(this.options.queryWays!=""){ 124 | var query_a=this.options.queryWays+out+'(._;>;);out;'; 125 | console.log("Query: "+query_a); 126 | query_a = query_a.replace(/(BBOX)/g, this.options.map.getBounds().toOverpassBBoxString()); 127 | this.download(query_a, { instance: this, query: this.options.queryWays }, this.dataDownloadWays); 128 | } 129 | } 130 | }; 131 | 132 | EasyOverpass.prototype.downloadID = function(id){ 133 | if(typeof id != 'undefined'){ 134 | var out = url+"data=[out:json];"; 135 | //if node 136 | if(id[0] != 'w'){ 137 | out += "node("+id+");out;"; 138 | this.download(out, { instance: this, query: "perm"}, this.dataDownloadNodes); 139 | } 140 | //if way 141 | else{ 142 | var a = id.substring(1); 143 | out += "way("+a+");out;(._;>;);out;"; 144 | this.download(out, { instance: this, query: "perm"}, this.dataDownloadWays); 145 | } 146 | } 147 | }; 148 | 149 | EasyOverpass.prototype.clear = function(){ 150 | this.options.layer.clearLayers(); 151 | this._ids={}; 152 | }; 153 | -------------------------------------------------------------------------------- /js/query.js: -------------------------------------------------------------------------------- 1 | function Query(options){ 2 | this.options = options; 3 | } 4 | 5 | Query.prototype.getTagArray = function(tag,typetag,excludetag){ 6 | //To do few combinations 7 | if(typeof typetag==='undefined') typetag="normal"; 8 | if(typeof excludetag==='undefined') excludetag=[]; 9 | else 10 | excludetag = excludetag.split("@"); 11 | 12 | var p=tag.split("@"); 13 | if(p.length>1){ 14 | if(typetag=="normal") 15 | return [{tag:p,type:typetag,exclude:excludetag }]; 16 | 17 | var a=[]; 18 | for(var n in p) 19 | a.push({tag:p[n],type:typetag,exclude:excludetag }); 20 | return a; 21 | } 22 | return [{tag:tag,type:typetag,exclude:excludetag }]; 23 | }; 24 | 25 | Query.prototype.getTagFromElement = function(el,state){ 26 | //Tag-pair=null - means no value 27 | var typetag=el.data("tag-type"); 28 | var fulltag=el.data("tag-pair"); 29 | var excludetag=el.data("tag-exclude"); 30 | if(fulltag=="$$") return ""; 31 | //Visible=false - hidden (null) 32 | 33 | if(el.attr('id')=="int_yes"){ 34 | console.log(el.closest(".main")); 35 | } 36 | if(el.closest(".dropdown").css('display')=="none") {return "";} 37 | if(el.parent().css('display')=="none") return ""; 38 | if(el.closest(".main").css('display')=="none") return ""; 39 | 40 | //Tag-pair=* return tag 41 | if(typeof fulltag!='undefined') return this.getTagArray(fulltag,typetag,excludetag); 42 | //If multistate get tag-pair-state value 43 | if(state!=-1){ 44 | fulltag=el.data("tag-pair-s"+state); 45 | if(typeof fulltag!='undefined') return this.getTagArray(fulltag,typetag,excludetag); 46 | } 47 | //INIT 48 | var valuetag=el.data("tag-value"); 49 | var keytag=el.data("tag-key"); 50 | if(typeof keytag==='undefined'&&el.closest(".tag-parent").length>0) 51 | keytag=el.closest(".tag-parent").data("tag-key"); 52 | var chartag=el.data("tag-char"); 53 | if(typeof chartag==='undefined') 54 | chartag=el.closest(".tag-parent").data("tag-char"); 55 | if(typeof chartag==='undefined') chartag="="; 56 | 57 | //if tag-key does not exists 58 | if(typeof keytag==='undefined') return ""; 59 | //if tag-value is defined 60 | if(typeof valuetag!='undefined'){ 61 | if(valuetag=="@")//if value is from input 62 | return this.getTagArray("['"+keytag+"'"+chartag+"'"+el.val()+"']",typetag,excludetag); 63 | //other case 64 | return this.getTagArray("['"+keytag+"'"+chartag+"'"+valuetag+"']",typetag,excludetag); 65 | } 66 | //use ID becouse tag-value not found 67 | return this.getTagArray("['"+keytag+"'"+chartag+"'"+el.attr("id")+"']",typetag,excludetag); 68 | }; 69 | 70 | //FIXME 71 | Query.prototype.tagsjoin = function(tags,newt){ 72 | if(newt==="")return tags; 73 | if(tags==="")tags=[]; 74 | for(var key in newt){ 75 | tags.push(newt[key]); 76 | } 77 | return tags; 78 | }; 79 | 80 | Query.prototype.getTags = function(from,parent){ 81 | var tags=[]; 82 | for(var key in from){ 83 | if(typeof global_menu_data[key] === 'object'){ 84 | tags=this.tagsjoin(tags,this.getTags(from[key],key)); 85 | }else{ 86 | if(typeof from[key]==='string' && from[key]!=""){ 87 | //Values 88 | var p=$('.global-menu-data #'+from[key]); 89 | if(p.length>0){ 90 | tags=this.tagsjoin(tags,this.getTagFromElement(p,-1)); 91 | }else{ 92 | p=$('.global-menu-data #'+key); 93 | if(p.length>0){ 94 | tags=this.tagsjoin(tags,this.getTagFromElement(p,from[key])); 95 | } 96 | } 97 | }else if(typeof from[key]==='number'){ 98 | var p=$('.global-menu-data #'+key); 99 | if(p.length>0){ 100 | tags=this.tagsjoin(tags,this.getTagFromElement(p,from[key])); 101 | } 102 | } 103 | } 104 | } 105 | return tags; 106 | }; 107 | 108 | Query.prototype.getQuery = function(data){ 109 | var tags=this.getTags(data,""); 110 | var tagarr=[]; 111 | for(var key in tags){ 112 | //get main tag 113 | if(tags[key].type=="main"){ 114 | var str=[tags[key].tag]; 115 | for(var key2 in tags){ 116 | //get normal tag 117 | if(tags[key2].type!="main"){ 118 | var exclude=false; 119 | for(var pp in tags[key2].exclude) 120 | if(tags[key].tag==tags[key2].exclude[pp]) 121 | exclude=true; 122 | if(!exclude){ 123 | if(typeof tags[key2].tag != 'string'){ 124 | var tmparr=[]; 125 | for(var t in tags[key2].tag) 126 | for(var s in str){ 127 | tmparr.push(str[s]+tags[key2].tag[t]); 128 | } 129 | str=tmparr; 130 | }else{ 131 | for(var s in str){ 132 | str[s]+=tags[key2].tag; 133 | } 134 | } 135 | } 136 | } 137 | } 138 | for(var s in str) 139 | tagarr.push(str[s]); 140 | } 141 | } 142 | var query="data=[out:json];("; 143 | for(var key in tagarr) 144 | query+="DATATYPE(BBOX)"+tagarr[key]+";"; 145 | query+=");"; 146 | return this.options.url+query; 147 | }; 148 | -------------------------------------------------------------------------------- /js/leaflet-timeslider.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Author: Adam Jordanek (dotevo) 3 | */ 4 | 5 | L.Control.Timeslider = L.Control.extend({ options : { 6 | position : 'topright' 7 | }, 8 | initialize : function(options) { 9 | this.callback_dataChanged=null; 10 | this.div=null; 11 | this.hidden=true; 12 | var _this=this; 13 | this.timerId = setInterval(function(){_this.timer(_this)}, 300000); 14 | var d=new Date(); 15 | this.currenttime=true; 16 | this._setDateFromObj(d); 17 | 18 | this.callback_dataChanged = options.callback; 19 | }, 20 | 21 | onAdd : function(map) { 22 | this.div = L.DomUtil.create('div', 'll-button timeslider'); 23 | this.div.appendChild(this._build_button()); 24 | L.DomEvent.on(this.div, 'mousedown', L.DomEvent.stopPropagation) 25 | .on(this.div, 'dblclick', L.DomEvent.stopPropagation) 26 | .on(this.div, 'touchstart', L.DomEvent.stopPropagation) 27 | .on(this.div, 'click', L.DomEvent.stopPropagation); 28 | L.DomEvent.disableClickPropagation(this.div); 29 | 30 | return this.div; 31 | }, 32 | 33 | _setDateFromObj: function(d){ 34 | var curr_date = d.getDate(); 35 | var curr_month = d.getMonth() + 1; 36 | var curr_year = d.getFullYear(); 37 | this._setDate(curr_date+"/"+curr_month+"/"+curr_year); 38 | this._setTime(d.getHours(),d.getMinutes()); 39 | }, 40 | 41 | onRemove : function(map) { 42 | }, 43 | 44 | _dateChanged: function(){ 45 | if(this.callback_dataChanged != null){ 46 | var d=this.date.split("/"); 47 | var h=Math.floor(this.time); 48 | var m=(this.time-h==0)*60; 49 | var dat=new Date(); 50 | dat.setYear(d[2]);dat.setMonth(d[1]-1);dat.setDate(d[0]); 51 | dat.setHours(h);dat.setMinutes(m); 52 | this.callback_dataChanged(dat); 53 | } 54 | }, 55 | 56 | _setTimeV: function(value){ 57 | if(this.time!=value){ 58 | this.time=value; 59 | this._dateChanged(); 60 | var hours=Math.floor(this.time); 61 | $('#time-text').text(hours+":"+Math.floor((value-hours)*60)); 62 | } 63 | }, 64 | 65 | _setTime: function(hours,minutes){ 66 | var time = hours + (minutes/60); 67 | this._setTimeV(time); 68 | }, 69 | 70 | _setDate : function(date){ 71 | if(this.date!=date){ 72 | this.date=date; 73 | this._dateChanged(); 74 | } 75 | }, 76 | 77 | _updateLabels: function(){ 78 | var hour=Math.floor(this.time); 79 | $('#time-text').text(hour+":"+Math.floor((this.time-hour)*60)); 80 | //Times 81 | $('#times').attr('data-slider-value',this.time); 82 | //Date 83 | $("#dp").datepicker("setDate", this.date); 84 | }, 85 | 86 | timer: function(t){ 87 | console.log(this.currenttime); 88 | if(t.currenttime==true){ 89 | var d= new Date(); 90 | t._setDateFromObj(d); 91 | t._updateLabels(); 92 | } 93 | }, 94 | 95 | _clicked : function(e){ 96 | if(this.hidden){ 97 | var _this = this; 98 | 99 | L.DomUtil.removeClass(this.div,'ll-button'); 100 | L.DomUtil.addClass(this.div,'ll-box'); 101 | var hour=Math.floor(this.time); 102 | this.div.innerHTML = ""+hour+":"+Math.floor(((this.time-hour)*60))+""; 103 | this.div.appendChild(this._build_button()); 104 | var dd = L.DomUtil.create('div'); 105 | dd.innerHTML += 'Use different time'; 106 | dd.innerHTML +='

'+ 107 | '
'; 108 | 109 | this.div.appendChild(dd); 110 | $('#times').slider({precision: 2}); 111 | $("#times").on('slideStop', function(slideEvt) { 112 | _this._setTimeV(slideEvt.value); 113 | }); 114 | 115 | $('#dp').datepicker({ 116 | format: 'dd/mm/yyyy', 117 | calendarWeeks: true, 118 | autoclose: true, 119 | todayHighlight: true 120 | }); 121 | 122 | $("#dp").datepicker("setDate", this.date); 123 | $('#txt-dp').change(function () { 124 | _this._setDate(($('#txt-dp').val())); 125 | }); 126 | 127 | $('#timecb').change(function () { 128 | if(this.checked){ 129 | $('#times').slider("enable"); 130 | $("#txt-dp").removeAttr('disabled'); 131 | _this.currenttime=false; 132 | }else{ 133 | $('#times').slider("disable"); 134 | $("#txt-dp").attr('disabled'); 135 | _this.currenttime=true; 136 | _this._setDateFromObj(new Date()); 137 | } 138 | }); 139 | $('#timecb').trigger('change'); 140 | } 141 | else{ 142 | L.DomUtil.removeClass(this.div,'ll-box'); 143 | L.DomUtil.addClass(this.div,'ll-button'); 144 | this.div.innerHTML = ""; 145 | this.div.appendChild(this._build_button()); 146 | } 147 | this.hidden=!this.hidden; 148 | }, 149 | 150 | _build_button: function(){ 151 | var button = L.DomUtil.create('i', 'glyphicon glyphicon-time ll-bt-txt'); 152 | L.DomEvent.addListener(button, 'click', L.DomEvent.stopPropagation). 153 | addListener(button, 'click', this._clicked,this); 154 | 155 | return button; 156 | } 157 | 158 | }); -------------------------------------------------------------------------------- /static.php: -------------------------------------------------------------------------------- 1 | "; 8 | $ret.="
".$tags['name']."
"; 9 | 10 | //GEO 11 | $ret.=""; 12 | $ret.=""; 13 | $ret.=""; 14 | $ret .= ""; 15 | //ADDR 16 | $ret.=""; 17 | if(isset($tags['addr:street'])) 18 | $ret.= "".$tags['addr:street']." ".$tags['addr:housenumber'].""; 19 | if(isset($tags['addr:city'])) 20 | $ret.= "".$tags['city'].""; 21 | $ret .= ""; 22 | 23 | if(isset($tags['contact:phone'])) 24 | $ret .="".$tags['contact:phone'].""; 25 | 26 | if(isset($tags['contact:website'])) 27 | $ret .="".$tags['contact:website'].""; 28 | 29 | $ret .= "

"; 30 | foreach ($tags as $key => $value) { 31 | $ret.=$key." ".$value."
"; 32 | } 33 | $lat=round($lat,2); 34 | $lon=round($lon,2); 35 | $ret.="back
"; 36 | $ret.=""; 37 | }else 38 | $ret.="

".$tags['name']."


"; 39 | 40 | $ret.="Id: ".$id."
"; 41 | return $ret; 42 | } 43 | 44 | 45 | $title=""; 46 | $content=""; 47 | if(isset($_GET['id'])){ 48 | $query="[out:json];node(".$_GET['id'].");out;"; 49 | $url="http://overpass.osm.rambler.ru/cgi/interpreter?data=".$query; 50 | $con=json_decode(file_get_contents($url),true); 51 | $tags=$con["elements"][0]["tags"]; 52 | $content=$content . print_poi($tags,$con["elements"][0]['lat'],$con["elements"][0]['lon'],$con["elements"][0]['id'],''); 53 | $title=$tags['name']; 54 | }else{ 55 | $a=explode("/",$_GET['_escaped_fragment_']); 56 | $lat=round($a[1],2); 57 | $lon=round($a[2],2); 58 | $delta=0.005; 59 | //$title=" list - ".$lat." ".$lon; 60 | $content.="Move up
"; 61 | $content.="Move down
"; 62 | $content.="Move left
"; 63 | $content.="Move right
"; 64 | 65 | $content.="osm24
"; 66 | //Options 67 | $options=array(); 68 | for($i=0;$i 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | '; 110 | } 111 | ?> 112 | Find <?php echo $title; ?> 113 | 114 | 115 |

Your favourite places on the map with Opening hours.


116 |

117 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /js/leaflet-hash.js: -------------------------------------------------------------------------------- 1 | (function(window) { 2 | var HAS_HASHCHANGE = (function() { 3 | var doc_mode = window.documentMode; 4 | return ('onhashchange' in window) && 5 | (doc_mode === undefined || doc_mode > 7); 6 | })(); 7 | 8 | L.Hash = function(map,file) { 9 | this.onHashChange = L.Util.bind(this.onHashChange, this); 10 | 11 | if (map) { 12 | this.init(map,file); 13 | } 14 | }; 15 | 16 | L.Hash.parseHash = function(hash) { 17 | ga('send', 'pageview', { 18 | 'page': hash, 19 | 'title': 'Permalink' 20 | }); 21 | if(hash.indexOf('#') === 0) { 22 | hash = hash.substr(1); 23 | } 24 | if(hash.indexOf('!') === 0) { 25 | hash = hash.substr(1); 26 | } 27 | 28 | var args = hash.split("/"); 29 | var zoom = parseInt(args[0], 10), 30 | lat = parseFloat(args[1]), 31 | lon = parseFloat(args[2]); 32 | if (isNaN(zoom) || isNaN(lat) || isNaN(lon)) { 33 | return { 34 | params_url: "" 35 | }; 36 | } else { 37 | var params={}; 38 | for (i = 3; i < args.length; i++) { 39 | var kv=args[i].split("="); 40 | if(kv.length == 2){ 41 | params[kv[0]]=kv[1]; 42 | } 43 | } 44 | 45 | return { 46 | center: new L.LatLng(lat, lon), 47 | zoom: zoom, 48 | params_url: params 49 | }; 50 | } 51 | }; 52 | 53 | L.Hash.formatHash = function(map) { 54 | var center = map.getCenter(), 55 | zoom = map.getZoom(), 56 | precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); 57 | 58 | var ret="#!" + [zoom, 59 | center.lat.toFixed(precision), 60 | center.lng.toFixed(precision) 61 | ].join("/"); 62 | //Added by Dotevo 63 | if(typeof map.params_url != "undefined"){ 64 | for(var key in map.params_url){ 65 | ret+="/"+key+"="+map.params_url[key]; 66 | } 67 | } 68 | //END 69 | 70 | return ret+"/"; 71 | }, 72 | 73 | L.Hash.prototype = { 74 | map: null, 75 | lastHash: null, 76 | file: null, 77 | parseHash: L.Hash.parseHash, 78 | formatHash: L.Hash.formatHash, 79 | 80 | init: function(map,file) { 81 | this.map = map; 82 | this.file = file; 83 | 84 | // reset the hash 85 | this.lastHash = null; 86 | this.onHashChange(); 87 | 88 | if (!this.isListening) { 89 | this.startListening(); 90 | } 91 | }, 92 | 93 | removeFrom: function(map) { 94 | if (this.changeTimeout) { 95 | clearTimeout(this.changeTimeout); 96 | } 97 | 98 | if (this.isListening) { 99 | this.stopListening(); 100 | } 101 | 102 | this.map = null; 103 | }, 104 | 105 | onMapMove: function() { 106 | // bail if we're moving the map (updating from a hash), 107 | // or if the map is not yet loaded 108 | 109 | if (this.movingMap || !this.map._loaded) { 110 | return false; 111 | } 112 | 113 | var hash = this.formatHash(this.map); 114 | if (this.lastHash != hash) { 115 | if(typeof window.history.pushState == 'function') { 116 | //HTML5 117 | window.history.pushState({}, "Hide", this.file+hash); 118 | }else{ 119 | location.replace(hash); 120 | } 121 | this.lastHash = hash; 122 | ga('send', 'pageview', { 123 | 'page': hash, 124 | 'title': 'Moved' 125 | }); 126 | } 127 | }, 128 | 129 | movingMap: false, 130 | update: function() { 131 | var hash = location.hash; 132 | if (hash === this.lastHash) { 133 | return; 134 | } 135 | var parsed = this.parseHash(hash); 136 | if (parsed) { 137 | this.movingMap = true; 138 | if(typeof parsed.center != 'undefined' && typeof parsed.zoom!='undefined') 139 | this.map.setView(parsed.center, parsed.zoom); 140 | this.map.params_url = parsed.params_url; 141 | if(typeof this.map.params_url_updated != "undefined"){ 142 | this.map.params_url_updated(); 143 | } 144 | 145 | this.movingMap = false; 146 | } else { 147 | this.onMapMove(this.map); 148 | } 149 | }, 150 | 151 | // defer hash change updates every 100ms 152 | changeDefer: 100, 153 | changeTimeout: null, 154 | onHashChange: function() { 155 | // throttle calls to update() so that they only happen every 156 | // `changeDefer` ms 157 | if (!this.changeTimeout) { 158 | var that = this; 159 | this.changeTimeout = setTimeout(function() { 160 | that.update(); 161 | that.changeTimeout = null; 162 | }, this.changeDefer); 163 | } 164 | }, 165 | 166 | isListening: false, 167 | hashChangeInterval: null, 168 | startListening: function() { 169 | this.map.on("moveend", this.onMapMove, this); 170 | 171 | if (HAS_HASHCHANGE) { 172 | L.DomEvent.addListener(window, "hashchange", this.onHashChange); 173 | } else { 174 | clearInterval(this.hashChangeInterval); 175 | this.hashChangeInterval = setInterval(this.onHashChange, 50); 176 | } 177 | this.isListening = true; 178 | }, 179 | 180 | stopListening: function() { 181 | this.map.off("moveend", this.onMapMove, this); 182 | 183 | if (HAS_HASHCHANGE) { 184 | L.DomEvent.removeListener(window, "hashchange", this.onHashChange); 185 | } else { 186 | clearInterval(this.hashChangeInterval); 187 | } 188 | this.isListening = false; 189 | } 190 | }; 191 | L.hash = function(map) { 192 | return new L.Hash(map); 193 | }; 194 | L.Map.prototype.addHash = function() { 195 | this._hash = L.hash(this); 196 | }; 197 | L.Map.prototype.removeHash = function() { 198 | this._hash.removeFrom(); 199 | }; 200 | })(window); 201 | -------------------------------------------------------------------------------- /js/leaflet.contextmenu.js: -------------------------------------------------------------------------------- 1 | /* 2 | Leaflet.contextmenu, a context menu for Leaflet. 3 | (c) 2014, Adam Ratcliffe, GeoSmart Maps Limited 4 | */ 5 | L.Map.mergeOptions({contextmenuItems:[]});L.Map.ContextMenu=L.Handler.extend({statics:{BASE_CLS:"leaflet-contextmenu"},initialize:function(map){L.Handler.prototype.initialize.call(this,map);this._items=[];this._visible=false;var container=this._container=L.DomUtil.create("div",L.Map.ContextMenu.BASE_CLS,map._container);container.style.zIndex=1e4;container.style.position="absolute";if(map.options.contextmenuWidth){container.style.width=map.options.contextmenuWidth+"px"}this._createItems();L.DomEvent.on(container,"click",L.DomEvent.stop).on(container,"mousedown",L.DomEvent.stop).on(container,"dblclick",L.DomEvent.stop).on(container,"contextmenu",L.DomEvent.stop)},addHooks:function(){L.DomEvent.on(document,L.Browser.touch?"touchstart":"mousedown",this._onMouseDown,this).on(document,"keydown",this._onKeyDown,this);this._map.on({contextmenu:this._show,mouseout:this._hide,mousedown:this._hide,movestart:this._hide,zoomstart:this._hide},this)},removeHooks:function(){L.DomEvent.off(document,"keydown",this._onKeyDown,this);this._map.off({contextmenu:this._show,mouseout:this._hide,mousedown:this._hide,movestart:this._hide,zoomstart:this._hide},this)},showAt:function(point,data){if(point instanceof L.LatLng){point=this._map.latLngToContainerPoint(point)}this._showAtPoint(point,data)},hide:function(){this._hide()},addItem:function(options){return this.insertItem(options)},insertItem:function(options,index){index=index!==undefined?index:this._items.length;var item=this._createItem(this._container,options,index);this._items.push(item);this._sizeChanged=true;this._map.fire("contextmenu.additem",{contextmenu:this,el:item.el,index:index});return item.el},removeItem:function(item){var container=this._container;if(!isNaN(item)){item=container.children[item]}if(item){this._removeItem(L.Util.stamp(item));this._sizeChanged=true;this._map.fire("contextmenu.removeitem",{contextmenu:this,el:item})}},removeAllItems:function(){var item;while(this._container.children.length){item=this._container.children[0];this._removeItem(L.Util.stamp(item))}},setDisabled:function(item,disabled){var container=this._container,itemCls=L.Map.ContextMenu.BASE_CLS+"-item";if(!isNaN(item)){item=container.children[item]}if(item&&L.DomUtil.hasClass(item,itemCls)){if(disabled){L.DomUtil.addClass(item,itemCls+"-disabled");this._map.fire("contextmenu.disableitem",{contextmenu:this,el:item})}else{L.DomUtil.removeClass(item,itemCls+"-disabled");this._map.fire("contextmenu.enableitem",{contextmenu:this,el:item})}}},isVisible:function(){return this._visible},_createItems:function(){var itemOptions=this._map.options.contextmenuItems,item,i,l;for(i=0,l=itemOptions.length;i'}else if(options.iconCls){html=''}el.innerHTML=html+options.text;el.href="#";L.DomEvent.on(el,"mouseover",this._onItemMouseOver,this).on(el,"mouseout",this._onItemMouseOut,this).on(el,"mousedown",L.DomEvent.stopPropagation).on(el,"click",callback);return{id:L.Util.stamp(el),el:el,callback:callback}},_removeItem:function(id){var item,el,i,l;for(i=0,l=this._items.length;imapSize.x){container.style.left="auto";container.style.right=Math.max(mapSize.x-pt.x,0)+"px"}else{container.style.left=Math.max(pt.x,0)+"px";container.style.right="auto"}if(pt.y+containerSize.y>mapSize.y){container.style.top="auto";container.style.bottom=Math.max(mapSize.y-pt.y,0)+"px"}else{container.style.top=Math.max(pt.y,0)+"px";container.style.bottom="auto"}},_getElementSize:function(el){var size=this._size,initialDisplay=el.style.display;if(!size||this._sizeChanged){size={};el.style.left="-999999px";el.style.right="auto";el.style.display="block";size.x=el.offsetWidth;size.y=el.offsetHeight;el.style.left="auto";el.style.display=initialDisplay;this._sizeChanged=false}return size},_onMouseDown:function(e){console.log("_onMouseDown");this._hide()},_onKeyDown:function(e){var key=e.keyCode;if(key===27){this._hide()}},_onItemMouseOver:function(e){L.DomUtil.addClass(e.target,"over")},_onItemMouseOut:function(e){L.DomUtil.removeClass(e.target,"over")}});L.Map.addInitHook("addHandler","contextmenu",L.Map.ContextMenu);L.Mixin.ContextMenu={_initContextMenu:function(){this._items=[];this.on("contextmenu",this._showContextMenu,this)},_showContextMenu:function(e){var itemOptions,pt,i,l;if(this._map.contextmenu){pt=this._map.mouseEventToContainerPoint(e.originalEvent);for(i=0,l=this.options.contextmenuItems.length;ii;i++)L.DomEvent.on(t,e[i],this._fireMouseEvent,this)}},_removeInteraction:function(){if(this.options.clickable){var t=this._container,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];L.DomUtil.removeClass(t,"leaflet-clickable"),L.DomEvent.off(t,"click",this._onMouseClick,this);for(var i=0;e.length>i;i++)L.DomEvent.off(t,e[i],this._fireMouseEvent,this)}},_onMouseClick:function(t){this.hasEventListeners(t.type)&&L.DomEvent.stopPropagation(t),this.fire(t.type,{originalEvent:t})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&L.DomEvent.preventDefault(t),"mousedown"!==t.type?L.DomEvent.stopPropagation(t):L.DomEvent.preventDefault(t)}}),L.BaseMarkerMethods={showLabel:function(){return this.label&&this._map&&(this.label.setLatLng(this._latlng),this._map.showLabel(this.label)),this},hideLabel:function(){return this.label&&this.label.close(),this},setLabelNoHide:function(t){this._labelNoHide!==t&&(this._labelNoHide=t,t?(this._removeLabelRevealHandlers(),this.showLabel()):(this._addLabelRevealHandlers(),this.hideLabel()))},bindLabel:function(t,e){var i=this.options.icon?this.options.icon.options.labelAnchor:this.options.labelAnchor,n=L.point(i)||L.point(0,0);return n=n.add(L.Label.prototype.options.offset),e&&e.offset&&(n=n.add(e.offset)),e=L.Util.extend({offset:n},e),this._labelNoHide=e.noHide,this.label||(this._labelNoHide||this._addLabelRevealHandlers(),this.on("remove",this.hideLabel,this).on("move",this._moveLabel,this).on("add",this._onMarkerAdd,this),this._hasLabelHandlers=!0),this.label=new L.Label(e,this).setContent(t),this},unbindLabel:function(){return this.label&&(this.hideLabel(),this.label=null,this._hasLabelHandlers&&(this._labelNoHide||this._removeLabelRevealHandlers(),this.off("remove",this.hideLabel,this).off("move",this._moveLabel,this).off("add",this._onMarkerAdd,this)),this._hasLabelHandlers=!1),this},updateLabelContent:function(t){this.label&&this.label.setContent(t)},getLabel:function(){return this.label},_onMarkerAdd:function(){this._labelNoHide&&this.showLabel()},_addLabelRevealHandlers:function(){this.on("mouseover",this.showLabel,this).on("mouseout",this.hideLabel,this),L.Browser.touch&&this.on("click",this.showLabel,this)},_removeLabelRevealHandlers:function(){this.off("mouseover",this.showLabel,this).off("mouseout",this.hideLabel,this),L.Browser.touch&&this.off("click",this.showLabel,this)},_moveLabel:function(t){this.label.setLatLng(t.latlng)}},L.Icon.Default.mergeOptions({labelAnchor:new L.Point(9,-20)}),L.Marker.mergeOptions({icon:new L.Icon.Default}),L.Marker.include(L.BaseMarkerMethods),L.Marker.include({_originalUpdateZIndex:L.Marker.prototype._updateZIndex,_updateZIndex:function(t){var e=this._zIndex+t;this._originalUpdateZIndex(t),this.label&&this.label.updateZIndex(e)},_originalSetOpacity:L.Marker.prototype.setOpacity,setOpacity:function(t,e){this.options.labelHasSemiTransparency=e,this._originalSetOpacity(t)},_originalUpdateOpacity:L.Marker.prototype._updateOpacity,_updateOpacity:function(){var t=0===this.options.opacity?0:1;this._originalUpdateOpacity(),this.label&&this.label.setOpacity(this.options.labelHasSemiTransparency?this.options.opacity:t)},_originalSetLatLng:L.Marker.prototype.setLatLng,setLatLng:function(t){return this.label&&!this._labelNoHide&&this.hideLabel(),this._originalSetLatLng(t)}}),L.CircleMarker.mergeOptions({labelAnchor:new L.Point(0,0)}),L.CircleMarker.include(L.BaseMarkerMethods),L.Path.include({bindLabel:function(t,e){return this.label&&this.label.options===e||(this.label=new L.Label(e,this)),this.label.setContent(t),this._showLabelAdded||(this.on("mouseover",this._showLabel,this).on("mousemove",this._moveLabel,this).on("mouseout remove",this._hideLabel,this),L.Browser.touch&&this.on("click",this._showLabel,this),this._showLabelAdded=!0),this},unbindLabel:function(){return this.label&&(this._hideLabel(),this.label=null,this._showLabelAdded=!1,this.off("mouseover",this._showLabel,this).off("mousemove",this._moveLabel,this).off("mouseout remove",this._hideLabel,this)),this},updateLabelContent:function(t){this.label&&this.label.setContent(t)},_showLabel:function(t){this.label.setLatLng(t.latlng),this._map.showLabel(this.label)},_moveLabel:function(t){this.label.setLatLng(t.latlng)},_hideLabel:function(){this.label.close()}}),L.Map.include({showLabel:function(t){return this.addLayer(t)}}),L.FeatureGroup.include({clearLayers:function(){return this.unbindLabel(),this.eachLayer(this.removeLayer,this),this},bindLabel:function(t,e){return this.invoke("bindLabel",t,e)},unbindLabel:function(){return this.invoke("unbindLabel")},updateLabelContent:function(t){this.invoke("updateLabelContent",t)}})})(this,document); -------------------------------------------------------------------------------- /js/suncalc.js: -------------------------------------------------------------------------------- 1 | /* 2 | (c) 2011-2014, Vladimir Agafonkin 3 | SunCalc is a JavaScript library for calculating sun/mooon position and light phases. 4 | https://github.com/mourner/suncalc 5 | */ 6 | 7 | (function () { "use strict"; 8 | 9 | // shortcuts for easier to read formulas 10 | 11 | var PI = Math.PI, 12 | sin = Math.sin, 13 | cos = Math.cos, 14 | tan = Math.tan, 15 | asin = Math.asin, 16 | atan = Math.atan2, 17 | acos = Math.acos, 18 | rad = PI / 180; 19 | 20 | // sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas 21 | 22 | 23 | // date/time constants and conversions 24 | 25 | var dayMs = 1000 * 60 * 60 * 24, 26 | J1970 = 2440588, 27 | J2000 = 2451545; 28 | 29 | function toJulian(date) { 30 | return date.valueOf() / dayMs - 0.5 + J1970; 31 | } 32 | function fromJulian(j) { 33 | return new Date((j + 0.5 - J1970) * dayMs); 34 | } 35 | function toDays(date) { 36 | return toJulian(date) - J2000; 37 | } 38 | 39 | 40 | // general calculations for position 41 | 42 | var e = rad * 23.4397; // obliquity of the Earth 43 | 44 | function getRightAscension(l, b) { 45 | return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); 46 | } 47 | function getDeclination(l, b) { 48 | return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); 49 | } 50 | function getAzimuth(H, phi, dec) { 51 | return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); 52 | } 53 | function getAltitude(H, phi, dec) { 54 | return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); 55 | } 56 | function getSiderealTime(d, lw) { 57 | return rad * (280.16 + 360.9856235 * d) - lw; 58 | } 59 | 60 | 61 | // general sun calculations 62 | 63 | function getSolarMeanAnomaly(d) { 64 | return rad * (357.5291 + 0.98560028 * d); 65 | } 66 | function getEquationOfCenter(M) { 67 | return rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)); 68 | } 69 | function getEclipticLongitude(M, C) { 70 | var P = rad * 102.9372; // perihelion of the Earth 71 | return M + C + P + PI; 72 | } 73 | function getSunCoords(d) { 74 | 75 | var M = getSolarMeanAnomaly(d), 76 | C = getEquationOfCenter(M), 77 | L = getEclipticLongitude(M, C); 78 | 79 | return { 80 | dec: getDeclination(L, 0), 81 | ra: getRightAscension(L, 0) 82 | }; 83 | } 84 | 85 | 86 | var SunCalc = {}; 87 | 88 | 89 | // calculates sun position for a given date and latitude/longitude 90 | 91 | SunCalc.getPosition = function (date, lat, lng) { 92 | 93 | var lw = rad * -lng, 94 | phi = rad * lat, 95 | d = toDays(date), 96 | 97 | c = getSunCoords(d), 98 | H = getSiderealTime(d, lw) - c.ra; 99 | 100 | return { 101 | azimuth: getAzimuth(H, phi, c.dec), 102 | altitude: getAltitude(H, phi, c.dec) 103 | }; 104 | }; 105 | 106 | 107 | // sun times configuration (angle, morning name, evening name) 108 | 109 | var times = [ 110 | [-0.83, 'sunrise', 'sunset' ], 111 | [ -0.3, 'sunriseEnd', 'sunsetStart' ], 112 | [ -6, 'dawn', 'dusk' ], 113 | [ -12, 'nauticalDawn', 'nauticalDusk'], 114 | [ -18, 'nightEnd', 'night' ], 115 | [ 6, 'goldenHourEnd', 'goldenHour' ] 116 | ]; 117 | 118 | // adds a custom time to the times config 119 | 120 | SunCalc.addTime = function (angle, riseName, setName) { 121 | times.push([angle, riseName, setName]); 122 | }; 123 | 124 | 125 | // calculations for sun times 126 | 127 | var J0 = 0.0009; 128 | 129 | function getJulianCycle(d, lw) { 130 | return Math.round(d - J0 - lw / (2 * PI)); 131 | } 132 | function getApproxTransit(Ht, lw, n) { 133 | return J0 + (Ht + lw) / (2 * PI) + n; 134 | } 135 | function getSolarTransitJ(ds, M, L) { 136 | return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); 137 | } 138 | function getHourAngle(h, phi, d) { 139 | return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); 140 | } 141 | 142 | 143 | // calculates sun times for a given date and latitude/longitude 144 | 145 | SunCalc.getTimes = function (date, lat, lng) { 146 | 147 | var lw = rad * -lng, 148 | phi = rad * lat, 149 | d = toDays(date), 150 | 151 | n = getJulianCycle(d, lw), 152 | ds = getApproxTransit(0, lw, n), 153 | 154 | M = getSolarMeanAnomaly(ds), 155 | C = getEquationOfCenter(M), 156 | L = getEclipticLongitude(M, C), 157 | 158 | dec = getDeclination(L, 0), 159 | 160 | Jnoon = getSolarTransitJ(ds, M, L); 161 | 162 | 163 | // returns set time for the given sun altitude 164 | function getSetJ(h) { 165 | var w = getHourAngle(h, phi, dec), 166 | a = getApproxTransit(w, lw, n); 167 | 168 | return getSolarTransitJ(a, M, L); 169 | } 170 | 171 | 172 | var result = { 173 | solarNoon: fromJulian(Jnoon), 174 | nadir: fromJulian(Jnoon - 0.5) 175 | }; 176 | 177 | var i, len, time, angle, morningName, eveningName, Jset, Jrise; 178 | 179 | for (i = 0, len = times.length; i < len; i += 1) { 180 | time = times[i]; 181 | 182 | Jset = getSetJ(time[0] * rad); 183 | Jrise = Jnoon - (Jset - Jnoon); 184 | 185 | result[time[1]] = fromJulian(Jrise); 186 | result[time[2]] = fromJulian(Jset); 187 | } 188 | 189 | return result; 190 | }; 191 | 192 | 193 | // moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas 194 | 195 | function getMoonCoords(d) { // geocentric ecliptic coordinates of the moon 196 | 197 | var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude 198 | M = rad * (134.963 + 13.064993 * d), // mean anomaly 199 | F = rad * (93.272 + 13.229350 * d), // mean distance 200 | 201 | l = L + rad * 6.289 * sin(M), // longitude 202 | b = rad * 5.128 * sin(F), // latitude 203 | dt = 385001 - 20905 * cos(M); // distance to the moon in km 204 | 205 | return { 206 | ra: getRightAscension(l, b), 207 | dec: getDeclination(l, b), 208 | dist: dt 209 | }; 210 | } 211 | 212 | SunCalc.getMoonPosition = function (date, lat, lng) { 213 | 214 | var lw = rad * -lng, 215 | phi = rad * lat, 216 | d = toDays(date), 217 | 218 | c = getMoonCoords(d), 219 | H = getSiderealTime(d, lw) - c.ra, 220 | h = getAltitude(H, phi, c.dec); 221 | 222 | // altitude correction for refraction 223 | h = h + rad * 0.017 / tan(h + rad * 10.26 / (h + rad * 5.10)); 224 | 225 | return { 226 | azimuth: getAzimuth(H, phi, c.dec), 227 | altitude: h, 228 | distance: c.dist 229 | }; 230 | }; 231 | 232 | 233 | // calculations for illumination parameters of the moon, 234 | // based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and 235 | // Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus 236 | // (Willmann-Bell, Richmond) 1998. 237 | 238 | SunCalc.getMoonIllumination = function (date) { 239 | 240 | var d = toDays(date), 241 | s = getSunCoords(d), 242 | m = getMoonCoords(d), 243 | 244 | sdist = 149598000, // distance from Earth to Sun in km 245 | 246 | phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)), 247 | inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)), 248 | angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - 249 | cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra)); 250 | 251 | return { 252 | fraction: (1 + cos(inc)) / 2, 253 | phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI, 254 | angle: angle 255 | }; 256 | }; 257 | 258 | 259 | // export as AMD module / Node module / browser variable 260 | 261 | if (typeof define === 'function' && define.amd) { 262 | define(SunCalc); 263 | } else if (typeof module !== 'undefined') { 264 | module.exports = SunCalc; 265 | } else { 266 | window.SunCalc = SunCalc; 267 | } 268 | 269 | }()); 270 | -------------------------------------------------------------------------------- /js/snap.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Snap.js 3 | * 4 | * Copyright 2013, Jacob Kelley - http://jakiestfu.com/ 5 | * Released under the MIT Licence 6 | * http://opensource.org/licenses/MIT 7 | * 8 | * Github: http://github.com/jakiestfu/Snap.js/ 9 | * Version: 1.9.2 10 | */ 11 | (function(c,b){var a=a||function(k){var f={element:null,dragger:null,disable:"none",addBodyClasses:true,hyperextensible:true,resistance:0.5,flickThreshold:50,transitionSpeed:0.3,easing:"ease",maxPosition:266,minPosition:-266,tapToClose:true,touchToDrag:true,slideIntent:40,minDragDistance:5},e={simpleStates:{opening:null,towards:null,hyperExtending:null,halfway:null,flick:null,translation:{absolute:0,relative:0,sinceDirectionChange:0,percentage:0}}},h={},d={hasTouch:(b.ontouchstart===null),eventType:function(m){var l={down:(d.hasTouch?"touchstart":"mousedown"),move:(d.hasTouch?"touchmove":"mousemove"),up:(d.hasTouch?"touchend":"mouseup"),out:(d.hasTouch?"touchcancel":"mouseout")};return l[m]},page:function(l,m){return(d.hasTouch&&m.touches.length&&m.touches[0])?m.touches[0]["page"+l]:m["page"+l]},klass:{has:function(m,l){return(m.className).indexOf(l)!==-1},add:function(m,l){if(!d.klass.has(m,l)&&f.addBodyClasses){m.className+=" "+l}},remove:function(m,l){if(f.addBodyClasses){m.className=(m.className).replace(l,"").replace(/^\s+|\s+$/g,"")}}},dispatchEvent:function(l){if(typeof h[l]==="function"){return h[l].call()}},vendor:function(){var m=b.createElement("div"),n="webkit Moz O ms".split(" "),l;for(l in n){if(typeof m.style[n[l]+"Transition"]!=="undefined"){return n[l]}}},transitionCallback:function(){return(e.vendor==="Moz"||e.vendor==="ms")?"transitionend":e.vendor+"TransitionEnd"},canTransform:function(){return typeof f.element.style[e.vendor+"Transform"]!=="undefined"},deepExtend:function(l,n){var m;for(m in n){if(n[m]&&n[m].constructor&&n[m].constructor===Object){l[m]=l[m]||{};d.deepExtend(l[m],n[m])}else{l[m]=n[m]}}return l},angleOfDrag:function(l,o){var n,m;m=Math.atan2(-(e.startDragY-o),(e.startDragX-l));if(m<0){m+=2*Math.PI}n=Math.floor(m*(180/Math.PI)-180);if(n<0&&n>-180){n=360-Math.abs(n)}return Math.abs(n)},events:{addEvent:function g(m,l,n){if(m.addEventListener){return m.addEventListener(l,n,false)}else{if(m.attachEvent){return m.attachEvent("on"+l,n)}}},removeEvent:function g(m,l,n){if(m.addEventListener){return m.removeEventListener(l,n,false)}else{if(m.attachEvent){return m.detachEvent("on"+l,n)}}},prevent:function(l){if(l.preventDefault){l.preventDefault()}else{l.returnValue=false}}},parentUntil:function(n,l){var m=typeof l==="string";while(n.parentNode){if(m&&n.getAttribute&&n.getAttribute(l)){return n}else{if(!m&&n===l){return n}}n=n.parentNode}return null}},i={translate:{get:{matrix:function(n){if(!d.canTransform()){return parseInt(f.element.style.left,10)}else{var m=c.getComputedStyle(f.element)[e.vendor+"Transform"].match(/\((.*)\)/),l=8;if(m){m=m[1].split(",");if(m.length===16){n+=l}return parseInt(m[n],10)}return 0}}},easeCallback:function(){f.element.style[e.vendor+"Transition"]="";e.translation=i.translate.get.matrix(4);e.easing=false;clearInterval(e.animatingInterval);if(e.easingTo===0){d.klass.remove(b.body,"snapjs-right");d.klass.remove(b.body,"snapjs-left")}d.dispatchEvent("animated");d.events.removeEvent(f.element,d.transitionCallback(),i.translate.easeCallback)},easeTo:function(l){if(!d.canTransform()){e.translation=l;i.translate.x(l)}else{e.easing=true;e.easingTo=l;f.element.style[e.vendor+"Transition"]="all "+f.transitionSpeed+"s "+f.easing;e.animatingInterval=setInterval(function(){d.dispatchEvent("animating")},1);d.events.addEvent(f.element,d.transitionCallback(),i.translate.easeCallback);i.translate.x(l)}if(l===0){f.element.style[e.vendor+"Transform"]=""}},x:function(m){if((f.disable==="left"&&m>0)||(f.disable==="right"&&m<0)){return}if(!f.hyperextensible){if(m===f.maxPosition||m>f.maxPosition){m=f.maxPosition}else{if(m===f.minPosition||m0,q=n,w;if((e.intentChecked&&!e.hasIntent)){return}if(f.addBodyClasses){if((o)>0){d.klass.add(b.body,"snapjs-left");d.klass.remove(b.body,"snapjs-right")}else{if((o)<0){d.klass.add(b.body,"snapjs-right");d.klass.remove(b.body,"snapjs-left")}}}if(e.hasIntent===false||e.hasIntent===null){var m=d.angleOfDrag(v,u),l=(m>=0&&m<=f.slideIntent)||(m<=360&&m>(360-f.slideIntent)),r=(m>=180&&m<=(180+f.slideIntent))||(m<=180&&m>=(180-f.slideIntent));if(!r&&!l){e.hasIntent=false}else{e.hasIntent=true}e.intentChecked=true}if((f.minDragDistance>=Math.abs(v-e.startDragX))||(e.hasIntent===false)){return}d.events.prevent(s);d.dispatchEvent("drag");e.dragWatchers.current=v;if(e.dragWatchers.last>v){if(e.dragWatchers.state!=="left"){e.dragWatchers.state="left";e.dragWatchers.hold=v}e.dragWatchers.last=v}else{if(e.dragWatchers.last(f.maxPosition/2),flick:Math.abs(e.dragWatchers.current-e.dragWatchers.hold)>f.flickThreshold,translation:{absolute:o,relative:n,sinceDirectionChange:(e.dragWatchers.current-e.dragWatchers.hold),percentage:(o/f.maxPosition)*100}}}else{if(f.minPosition>o){w=(o-f.minPosition)*f.resistance;q=n-w}e.simpleStates={opening:"right",towards:e.dragWatchers.state,hyperExtending:f.minPosition>o,halfway:o<(f.minPosition/2),flick:Math.abs(e.dragWatchers.current-e.dragWatchers.hold)>f.flickThreshold,translation:{absolute:o,relative:n,sinceDirectionChange:(e.dragWatchers.current-e.dragWatchers.hold),percentage:(o/f.minPosition)*100}}}i.translate.x(q+t)}},endDrag:function(m){if(e.isDragging){d.dispatchEvent("end");var l=i.translate.get.matrix(4);if(e.dragWatchers.current===0&&l!==0&&f.tapToClose){d.dispatchEvent("close");d.events.prevent(m);i.translate.easeTo(0);e.isDragging=false;e.startDragX=0;return}if(e.simpleStates.opening==="left"){if((e.simpleStates.halfway||e.simpleStates.hyperExtending||e.simpleStates.flick)){if(e.simpleStates.flick&&e.simpleStates.towards==="left"){i.translate.easeTo(0)}else{if((e.simpleStates.flick&&e.simpleStates.towards==="right")||(e.simpleStates.halfway||e.simpleStates.hyperExtending)){i.translate.easeTo(f.maxPosition)}}}else{i.translate.easeTo(0)}}else{if(e.simpleStates.opening==="right"){if((e.simpleStates.halfway||e.simpleStates.hyperExtending||e.simpleStates.flick)){if(e.simpleStates.flick&&e.simpleStates.towards==="right"){i.translate.easeTo(0)}else{if((e.simpleStates.flick&&e.simpleStates.towards==="left")||(e.simpleStates.halfway||e.simpleStates.hyperExtending)){i.translate.easeTo(f.minPosition)}}}else{i.translate.easeTo(0)}}}e.isDragging=false;e.startDragX=d.page("X",m)}}}},j=function(l){if(l.element){d.deepExtend(f,l);e.vendor=d.vendor();i.drag.listen()}};this.open=function(l){d.dispatchEvent("open");d.klass.remove(b.body,"snapjs-expand-left");d.klass.remove(b.body,"snapjs-expand-right");if(l==="left"){e.simpleStates.opening="left";e.simpleStates.towards="right";d.klass.add(b.body,"snapjs-left");d.klass.remove(b.body,"snapjs-right");i.translate.easeTo(f.maxPosition)}else{if(l==="right"){e.simpleStates.opening="right";e.simpleStates.towards="left";d.klass.remove(b.body,"snapjs-left");d.klass.add(b.body,"snapjs-right");i.translate.easeTo(f.minPosition)}}};this.close=function(){d.dispatchEvent("close");i.translate.easeTo(0)};this.expand=function(l){var m=c.innerWidth||b.documentElement.clientWidth;if(l==="left"){d.dispatchEvent("expandLeft");d.klass.add(b.body,"snapjs-expand-left");d.klass.remove(b.body,"snapjs-expand-right")}else{d.dispatchEvent("expandRight");d.klass.add(b.body,"snapjs-expand-right");d.klass.remove(b.body,"snapjs-expand-left");m*=-1}i.translate.easeTo(m)};this.on=function(l,m){h[l]=m;return this};this.off=function(l){if(h[l]){h[l]=false}};this.enable=function(){d.dispatchEvent("enable");i.drag.listen()};this.disable=function(){d.dispatchEvent("disable");i.drag.stopListening()};this.settings=function(l){d.deepExtend(f,l)};this.state=function(){var l,m=i.translate.get.matrix(4);if(m===f.maxPosition){l="left"}else{if(m===f.minPosition){l="right"}else{l="closed"}}return{state:l,info:e.simpleStates}};j(k)};if((typeof module!=="undefined")&&module.exports){module.exports=a}if(typeof ender==="undefined"){this.Snap=a}if((typeof define==="function")&&define.amd){define("snap",[],function(){return a})}}).call(this,window,document); 12 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | html { 2 | height: 100%; 3 | } 4 | body { 5 | height: 100%; 6 | overflow: hidden; 7 | } 8 | #map { 9 | height: 100%; 10 | } 11 | .own-icon { 12 | margin:auto; 13 | height:25px; 14 | } 15 | 16 | .control-bt { 17 | padding: 5px; 18 | font-size: 20px; 19 | box-shadow: 0 1px 7px rgba(0,0,0,0.4); 20 | background: #f8f8f9; 21 | width: 40px; 22 | height: 40px; 23 | -webkit-border-radius: 5px; 24 | border-radius: 5px; 25 | } 26 | 27 | .control-bt button { 28 | width:30px; 29 | height:30px; 30 | border : 0px; 31 | background: #f8f8f8; 32 | } 33 | 34 | .nav > li.disabled.nav-header > a { 35 | cursor: default; 36 | font-size: 12px; 37 | font-weight: bold; 38 | text-transform: uppercase; 39 | } 40 | 41 | .dropdown-menu-long { 42 | max-height: 400px; 43 | overflow-y: auto; 44 | overflow-x: hidden; 45 | } 46 | 47 | .dropdown-submenu{position:relative;} 48 | .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} 49 | .dropdown-submenu:hover>.dropdown-menu{display:block;} 50 | .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} 51 | .dropdown-submenu:hover>a:after{border-left-color:#ffffff;} 52 | .dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} 53 | 54 | a:hover{ 55 | cursor: pointer; 56 | cursor: hand; 57 | } 58 | 59 | .glyphicon { margin-bottom: 10px;margin-right: 10px;} 60 | 61 | small { 62 | display: block; 63 | line-height: 1.428571429; 64 | color: #999; 65 | } 66 | 67 | /* custom inclusion of right, left and below tabs */ 68 | 69 | .tabs-below > .nav-tabs, 70 | .tabs-right > .nav-tabs, 71 | .tabs-left > .nav-tabs { 72 | border-bottom: 0; 73 | } 74 | 75 | .tab-content > .tab-pane, 76 | .pill-content > .pill-pane { 77 | display: none; 78 | } 79 | 80 | .tab-content > .active, 81 | .pill-content > .active { 82 | display: block; 83 | } 84 | 85 | .tab-content > #basic > div > ul { 86 | display: inline-block; 87 | vertical-align: top; 88 | /*padding-left: 12px;*/ 89 | padding-left: 0; 90 | list-style-type: none; 91 | } 92 | 93 | .tabs-below > .nav-tabs { 94 | border-top: 1px solid #ddd; 95 | } 96 | 97 | .tabs-below > .nav-tabs > li { 98 | margin-top: -1px; 99 | margin-bottom: 0; 100 | } 101 | 102 | .tabs-below > .nav-tabs > li > a { 103 | -webkit-border-radius: 0 0 4px 4px; 104 | -moz-border-radius: 0 0 4px 4px; 105 | border-radius: 0 0 4px 4px; 106 | } 107 | 108 | .tabs-below > .nav-tabs > li > a:hover, 109 | .tabs-below > .nav-tabs > li > a:focus { 110 | border-top-color: #ddd; 111 | border-bottom-color: transparent; 112 | } 113 | 114 | .tabs-below > .nav-tabs > .active > a, 115 | .tabs-below > .nav-tabs > .active > a:hover, 116 | .tabs-below > .nav-tabs > .active > a:focus { 117 | border-color: transparent #ddd #ddd #ddd; 118 | } 119 | 120 | .tabs-left > .nav-tabs > li, 121 | .tabs-right > .nav-tabs > li { 122 | float: none; 123 | } 124 | 125 | .tabs-left > .nav-tabs > li > a, 126 | .tabs-right > .nav-tabs > li > a { 127 | min-width: 74px; 128 | margin-right: 0; 129 | margin-bottom: 3px; 130 | } 131 | 132 | .tabs-left > .nav-tabs { 133 | float: left; 134 | margin-right: 19px; 135 | border-right: 1px solid #ddd; 136 | } 137 | 138 | .tabs-left > .nav-tabs > li > a { 139 | margin-right: -1px; 140 | -webkit-border-radius: 4px 0 0 4px; 141 | -moz-border-radius: 4px 0 0 4px; 142 | border-radius: 4px 0 0 4px; 143 | } 144 | 145 | .tabs-left > .nav-tabs > li > a:hover, 146 | .tabs-left > .nav-tabs > li > a:focus { 147 | border-color: #eeeeee #dddddd #eeeeee #eeeeee; 148 | } 149 | 150 | .tabs-left > .nav-tabs .active > a, 151 | .tabs-left > .nav-tabs .active > a:hover, 152 | .tabs-left > .nav-tabs .active > a:focus { 153 | border-color: #ddd transparent #ddd #ddd; 154 | *border-right-color: #ffffff; 155 | } 156 | 157 | .tabs-right > .nav-tabs { 158 | float: right; 159 | margin-left: 19px; 160 | border-left: 1px solid #ddd; 161 | } 162 | 163 | .tabs-right > .nav-tabs > li > a { 164 | margin-left: -1px; 165 | -webkit-border-radius: 0 4px 4px 0; 166 | -moz-border-radius: 0 4px 4px 0; 167 | border-radius: 0 4px 4px 0; 168 | } 169 | 170 | .tabs-right > .nav-tabs > li > a:hover, 171 | .tabs-right > .nav-tabs > li > a:focus { 172 | border-color: #eeeeee #eeeeee #eeeeee #dddddd; 173 | } 174 | 175 | .tabs-right > .nav-tabs .active > a, 176 | .tabs-right > .nav-tabs .active > a:hover, 177 | .tabs-right > .nav-tabs .active > a:focus { 178 | border-color: #ddd #ddd #ddd transparent; 179 | *border-left-color: #ffffff; 180 | } 181 | 182 | 183 | tr.endweek td { border-bottom: 1px solid #BBBBCC; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px } 184 | tr.today td { border-top: 1px solid #BBBBCC; border-top-left-radius: 5px; border-top-right-radius: 5px } 185 | tr.today td.day { font-weight: bold } 186 | td.day { text-align: center } 187 | td.workday { background: #CCFF99 } 188 | td.weekend { background: #FFCC99 } 189 | td.times { width: 200px } 190 | 191 | div.timebar { height: 10px; display: inline-block } 192 | div.open { background: #66EA40; margin: 0px -1px; border: 1px solid #000; border-radius: 5px } 193 | div.closed {background: #EA6640; margin: 0px -1px; border: 1px solid #000; border-radius: 5px } 194 | p.open { color: #44AA00 } 195 | p.closed { color: #AA4400 } 196 | 197 | 198 | table, tr, th, td { 199 | margin: 0; 200 | padding: 0; 201 | border: 0; 202 | font-size: 100%; 203 | font: inherit; 204 | vertical-align: baseline; 205 | } 206 | 207 | .map-icon{ 208 | margin: 0; 209 | padding: 0; 210 | width: 32px; 211 | height: 37px; 212 | } 213 | 214 | .map-icon-open{ 215 | background-image: url(../img/icons/green.png); 216 | } 217 | 218 | .map-icon-closed{ 219 | background-image: url(../img/icons/silver.png); 220 | } 221 | 222 | .map-icon-last{ 223 | background-image: url(../img/icons/gold.png); 224 | } 225 | 226 | .map-icon-nd{ 227 | background-image: url(../img/icons/blue.png); 228 | } 229 | 230 | .legend { 231 | color: #555; 232 | text-align: left; 233 | } 234 | .legend i { 235 | width: 18px; 236 | height: 18px; 237 | float: left; 238 | opacity: 0.7; 239 | } 240 | 241 | .info { 242 | padding: 4px; 243 | background: white; 244 | background: rgba(255,255,255,0.8); 245 | box-shadow: 0 0 15px rgba(0,0,0,0.2); 246 | border-radius: 5px; 247 | width: 120px; 248 | } 249 | 250 | #open-left { 251 | background: url(../img/open.png) center center no-repeat; 252 | display: block; 253 | width: 44px; 254 | height: 44px; 255 | } 256 | 257 | .snap-content { 258 | position: absolute; 259 | top: 0; 260 | right: 0; 261 | bottom: 0; 262 | left: 0; 263 | width: auto; 264 | height: auto; 265 | z-index: 2; 266 | overflow: auto; 267 | -webkit-overflow-scrolling: touch; 268 | -webkit-transform: translate3d(0, 0, 0); 269 | -moz-transform: translate3d(0, 0, 0); 270 | -ms-transform: translate3d(0, 0, 0); 271 | -o-transform: translate3d(0, 0, 0); 272 | transform: translate3d(0, 0, 0); 273 | } 274 | 275 | .snap-drawers { 276 | position: absolute; 277 | top: 0; 278 | right: 0; 279 | bottom: 0; 280 | left: 0; 281 | width: auto; 282 | height: auto; 283 | } 284 | 285 | .snap-drawer { 286 | position: absolute; 287 | top: 0; 288 | right: auto; 289 | bottom: 0; 290 | left: auto; 291 | width: 265px; 292 | height: auto; 293 | overflow: auto; 294 | -webkit-overflow-scrolling: touch; 295 | -webkit-transition: width 0.3s ease; 296 | -moz-transition: width 0.3s ease; 297 | -ms-transition: width 0.3s ease; 298 | -o-transition: width 0.3s ease; 299 | transition: width 0.3s ease; 300 | } 301 | 302 | .snap-drawer-left { 303 | left: 0; 304 | z-index: 1; 305 | } 306 | 307 | .snap-drawer-right { 308 | right: 0; 309 | z-index: 1; 310 | } 311 | 312 | .snapjs-left .snap-drawer-right, 313 | .snapjs-right .snap-drawer-left { 314 | display: none; 315 | } 316 | 317 | .snapjs-expand-left .snap-drawer-left, 318 | .snapjs-expand-right .snap-drawer-right { 319 | width: 100%; 320 | } 321 | 322 | .snapjs-right .snap-drawer-left { 323 | display: block; 324 | right: 0; 325 | left: auto; 326 | } 327 | 328 | .drawer-inner { 329 | -webkit-transition: opacity 0.3s ease; 330 | -moz-transition: opacity 0.3s ease; 331 | -ms-transition: opacity 0.3s ease; 332 | -o-transition: opacity 0.3s ease; 333 | transition: opacity 0.3s ease; 334 | } 335 | 336 | .snapjs-expand-left .drawer-inner, 337 | .snapjs-expand-right .drawer-inner { 338 | opacity: 0; 339 | } 340 | 341 | .snap-drawer { 342 | background: #222222; 343 | color: #99907e; 344 | } 345 | 346 | 347 | .ll-button { 348 | padding: 5px; 349 | background: white; 350 | background: rgba(255,255,255); 351 | box-shadow: 0 0 15px rgba(0,0,0,0.2); 352 | border-radius: 5px; 353 | width: 40px; 354 | height: 35px; 355 | } 356 | 357 | .ll-bt-txt{ 358 | float: right; 359 | font-size:20px; 360 | } 361 | 362 | .ll-box { 363 | padding: 5px; 364 | background: white; 365 | background: rgba(255,255,255); 366 | box-shadow: 0 0 15px rgba(0,0,0,0.2); 367 | border-radius: 5px; 368 | width: 250px; 369 | } 370 | 371 | .leaflet-control button { 372 | padding: 0; 373 | } 374 | 375 | .leaflet-control .glyphicon { 376 | margin: 0; 377 | } 378 | -------------------------------------------------------------------------------- /css/leaflet.css: -------------------------------------------------------------------------------- 1 | /* required styles */ 2 | 3 | .leaflet-map-pane, 4 | .leaflet-tile, 5 | .leaflet-marker-icon, 6 | .leaflet-marker-shadow, 7 | .leaflet-tile-pane, 8 | .leaflet-tile-container, 9 | .leaflet-overlay-pane, 10 | .leaflet-shadow-pane, 11 | .leaflet-marker-pane, 12 | .leaflet-popup-pane, 13 | .leaflet-overlay-pane svg, 14 | .leaflet-zoom-box, 15 | .leaflet-image-layer, 16 | .leaflet-layer { 17 | position: absolute; 18 | left: 0; 19 | top: 0; 20 | } 21 | .leaflet-container { 22 | overflow: hidden; 23 | -ms-touch-action: none; 24 | } 25 | .leaflet-tile, 26 | .leaflet-marker-icon, 27 | .leaflet-marker-shadow { 28 | -webkit-user-select: none; 29 | -moz-user-select: none; 30 | user-select: none; 31 | -webkit-user-drag: none; 32 | } 33 | .leaflet-marker-icon, 34 | .leaflet-marker-shadow { 35 | display: block; 36 | } 37 | /* map is broken in FF if you have max-width: 100% on tiles */ 38 | .leaflet-container img { 39 | max-width: none !important; 40 | } 41 | /* stupid Android 2 doesn't understand "max-width: none" properly */ 42 | .leaflet-container img.leaflet-image-layer { 43 | max-width: 15000px !important; 44 | } 45 | .leaflet-tile { 46 | filter: inherit; 47 | visibility: hidden; 48 | } 49 | .leaflet-tile-loaded { 50 | visibility: inherit; 51 | } 52 | .leaflet-zoom-box { 53 | width: 0; 54 | height: 0; 55 | } 56 | /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ 57 | .leaflet-overlay-pane svg { 58 | -moz-user-select: none; 59 | } 60 | 61 | .leaflet-tile-pane { z-index: 2; } 62 | .leaflet-objects-pane { z-index: 3; } 63 | .leaflet-overlay-pane { z-index: 4; } 64 | .leaflet-shadow-pane { z-index: 5; } 65 | .leaflet-marker-pane { z-index: 6; } 66 | .leaflet-popup-pane { z-index: 7; } 67 | 68 | 69 | /* control positioning */ 70 | 71 | .leaflet-control { 72 | position: relative; 73 | z-index: 7; 74 | pointer-events: auto; 75 | } 76 | .leaflet-top, 77 | .leaflet-bottom { 78 | position: absolute; 79 | z-index: 1000; 80 | pointer-events: none; 81 | } 82 | .leaflet-top { 83 | top: 0; 84 | } 85 | .leaflet-right { 86 | right: 0; 87 | } 88 | .leaflet-bottom { 89 | bottom: 0; 90 | } 91 | .leaflet-left { 92 | left: 0; 93 | } 94 | .leaflet-control { 95 | float: left; 96 | clear: both; 97 | } 98 | .leaflet-right .leaflet-control { 99 | float: right; 100 | } 101 | .leaflet-top .leaflet-control { 102 | margin-top: 10px; 103 | } 104 | .leaflet-bottom .leaflet-control { 105 | margin-bottom: 10px; 106 | } 107 | .leaflet-left .leaflet-control { 108 | margin-left: 10px; 109 | } 110 | .leaflet-right .leaflet-control { 111 | margin-right: 10px; 112 | } 113 | 114 | 115 | /* zoom and fade animations */ 116 | 117 | .leaflet-fade-anim .leaflet-tile, 118 | .leaflet-fade-anim .leaflet-popup { 119 | opacity: 0; 120 | -webkit-transition: opacity 0.2s linear; 121 | -moz-transition: opacity 0.2s linear; 122 | -o-transition: opacity 0.2s linear; 123 | transition: opacity 0.2s linear; 124 | } 125 | .leaflet-fade-anim .leaflet-tile-loaded, 126 | .leaflet-fade-anim .leaflet-map-pane .leaflet-popup { 127 | opacity: 1; 128 | } 129 | 130 | .leaflet-zoom-anim .leaflet-zoom-animated { 131 | -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); 132 | -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); 133 | -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); 134 | transition: transform 0.25s cubic-bezier(0,0,0.25,1); 135 | } 136 | .leaflet-zoom-anim .leaflet-tile, 137 | .leaflet-pan-anim .leaflet-tile, 138 | .leaflet-touching .leaflet-zoom-animated { 139 | -webkit-transition: none; 140 | -moz-transition: none; 141 | -o-transition: none; 142 | transition: none; 143 | } 144 | 145 | .leaflet-zoom-anim .leaflet-zoom-hide { 146 | visibility: hidden; 147 | } 148 | 149 | 150 | /* cursors */ 151 | 152 | .leaflet-clickable { 153 | cursor: pointer; 154 | } 155 | .leaflet-container { 156 | cursor: -webkit-grab; 157 | cursor: -moz-grab; 158 | } 159 | .leaflet-popup-pane, 160 | .leaflet-control { 161 | cursor: auto; 162 | } 163 | .leaflet-dragging, 164 | .leaflet-dragging .leaflet-clickable, 165 | .leaflet-dragging .leaflet-container { 166 | cursor: move; 167 | cursor: -webkit-grabbing; 168 | cursor: -moz-grabbing; 169 | } 170 | 171 | 172 | /* visual tweaks */ 173 | 174 | .leaflet-container { 175 | background: #ddd; 176 | outline: 0; 177 | } 178 | .leaflet-container a { 179 | color: #0078A8; 180 | } 181 | .leaflet-container a.leaflet-active { 182 | outline: 2px solid orange; 183 | } 184 | .leaflet-zoom-box { 185 | border: 2px dotted #05f; 186 | background: white; 187 | opacity: 0.5; 188 | } 189 | 190 | 191 | /* general typography */ 192 | .leaflet-container { 193 | font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; 194 | } 195 | 196 | 197 | /* general toolbar styles */ 198 | 199 | .leaflet-bar { 200 | box-shadow: 0 1px 7px rgba(0,0,0,0.65); 201 | -webkit-border-radius: 4px; 202 | border-radius: 4px; 203 | } 204 | .leaflet-bar a, .leaflet-bar a:hover { 205 | background-color: #fff; 206 | border-bottom: 1px solid #ccc; 207 | width: 26px; 208 | height: 26px; 209 | line-height: 26px; 210 | display: block; 211 | text-align: center; 212 | text-decoration: none; 213 | color: black; 214 | } 215 | .leaflet-bar a, 216 | .leaflet-control-layers-toggle { 217 | background-position: 50% 50%; 218 | background-repeat: no-repeat; 219 | display: block; 220 | } 221 | .leaflet-bar a:hover { 222 | background-color: #f4f4f4; 223 | } 224 | .leaflet-bar a:first-child { 225 | -webkit-border-top-left-radius: 4px; 226 | border-top-left-radius: 4px; 227 | -webkit-border-top-right-radius: 4px; 228 | border-top-right-radius: 4px; 229 | } 230 | .leaflet-bar a:last-child { 231 | -webkit-border-bottom-left-radius: 4px; 232 | border-bottom-left-radius: 4px; 233 | -webkit-border-bottom-right-radius: 4px; 234 | border-bottom-right-radius: 4px; 235 | border-bottom: none; 236 | } 237 | .leaflet-bar a.leaflet-disabled { 238 | cursor: default; 239 | background-color: #f4f4f4; 240 | color: #bbb; 241 | } 242 | 243 | .leaflet-touch .leaflet-bar { 244 | -webkit-border-radius: 10px; 245 | border-radius: 10px; 246 | } 247 | .leaflet-touch .leaflet-bar a { 248 | width: 30px; 249 | height: 30px; 250 | } 251 | .leaflet-touch .leaflet-bar a:first-child { 252 | -webkit-border-top-left-radius: 7px; 253 | border-top-left-radius: 7px; 254 | -webkit-border-top-right-radius: 7px; 255 | border-top-right-radius: 7px; 256 | } 257 | .leaflet-touch .leaflet-bar a:last-child { 258 | -webkit-border-bottom-left-radius: 7px; 259 | border-bottom-left-radius: 7px; 260 | -webkit-border-bottom-right-radius: 7px; 261 | border-bottom-right-radius: 7px; 262 | border-bottom: none; 263 | } 264 | 265 | 266 | /* zoom control */ 267 | 268 | .leaflet-control-zoom-in { 269 | font: bold 18px 'Lucida Console', Monaco, monospace; 270 | } 271 | .leaflet-control-zoom-out { 272 | font: bold 22px 'Lucida Console', Monaco, monospace; 273 | } 274 | 275 | .leaflet-touch .leaflet-control-zoom-in { 276 | font-size: 22px; 277 | line-height: 30px; 278 | } 279 | .leaflet-touch .leaflet-control-zoom-out { 280 | font-size: 28px; 281 | line-height: 30px; 282 | } 283 | 284 | 285 | /* layers control */ 286 | 287 | .leaflet-control-layers { 288 | box-shadow: 0 1px 7px rgba(0,0,0,0.4); 289 | background: #f8f8f9; 290 | -webkit-border-radius: 5px; 291 | border-radius: 5px; 292 | } 293 | .leaflet-control-layers-toggle { 294 | background-image: url(images/layers.png); 295 | width: 36px; 296 | height: 36px; 297 | } 298 | .leaflet-retina .leaflet-control-layers-toggle { 299 | background-image: url(images/layers-2x.png); 300 | background-size: 26px 26px; 301 | } 302 | .leaflet-touch .leaflet-control-layers-toggle { 303 | width: 44px; 304 | height: 44px; 305 | } 306 | .leaflet-control-layers .leaflet-control-layers-list, 307 | .leaflet-control-layers-expanded .leaflet-control-layers-toggle { 308 | display: none; 309 | } 310 | .leaflet-control-layers-expanded .leaflet-control-layers-list { 311 | display: block; 312 | position: relative; 313 | } 314 | .leaflet-control-layers-expanded { 315 | padding: 6px 10px 6px 6px; 316 | color: #333; 317 | background: #fff; 318 | } 319 | .leaflet-control-layers-selector { 320 | margin-top: 2px; 321 | position: relative; 322 | top: 1px; 323 | } 324 | .leaflet-control-layers label { 325 | display: block; 326 | } 327 | .leaflet-control-layers-separator { 328 | height: 0; 329 | border-top: 1px solid #ddd; 330 | margin: 5px -10px 5px -6px; 331 | } 332 | 333 | 334 | /* attribution and scale controls */ 335 | 336 | .leaflet-container .leaflet-control-attribution { 337 | background-color: rgba(255, 255, 255, 0.7); 338 | box-shadow: 0 0 5px #bbb; 339 | margin: 0; 340 | } 341 | .leaflet-control-attribution, 342 | .leaflet-control-scale-line { 343 | padding: 0 5px; 344 | color: #333; 345 | } 346 | .leaflet-container .leaflet-control-attribution, 347 | .leaflet-container .leaflet-control-scale { 348 | font-size: 11px; 349 | } 350 | .leaflet-left .leaflet-control-scale { 351 | margin-left: 5px; 352 | } 353 | .leaflet-bottom .leaflet-control-scale { 354 | margin-bottom: 5px; 355 | } 356 | .leaflet-control-scale-line { 357 | border: 2px solid #777; 358 | border-top: none; 359 | color: black; 360 | line-height: 1.1; 361 | padding: 2px 5px 1px; 362 | font-size: 11px; 363 | text-shadow: 1px 1px 1px #fff; 364 | background-color: rgba(255, 255, 255, 0.5); 365 | box-shadow: 0 -1px 5px rgba(0, 0, 0, 0.2); 366 | white-space: nowrap; 367 | overflow: hidden; 368 | } 369 | .leaflet-control-scale-line:not(:first-child) { 370 | border-top: 2px solid #777; 371 | border-bottom: none; 372 | margin-top: -2px; 373 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 374 | } 375 | .leaflet-control-scale-line:not(:first-child):not(:last-child) { 376 | border-bottom: 2px solid #777; 377 | } 378 | 379 | .leaflet-touch .leaflet-control-attribution, 380 | .leaflet-touch .leaflet-control-layers, 381 | .leaflet-touch .leaflet-bar { 382 | box-shadow: none; 383 | } 384 | .leaflet-touch .leaflet-control-layers, 385 | .leaflet-touch .leaflet-bar { 386 | border: 4px solid rgba(0,0,0,0.3); 387 | } 388 | 389 | 390 | /* popup */ 391 | 392 | .leaflet-popup { 393 | position: absolute; 394 | text-align: center; 395 | } 396 | .leaflet-popup-content-wrapper { 397 | padding: 1px; 398 | text-align: left; 399 | -webkit-border-radius: 12px; 400 | border-radius: 12px; 401 | } 402 | .leaflet-popup-content { 403 | margin: 13px 19px; 404 | line-height: 1.4; 405 | } 406 | .leaflet-popup-content p { 407 | margin: 18px 0; 408 | } 409 | .leaflet-popup-tip-container { 410 | margin: 0 auto; 411 | width: 40px; 412 | height: 20px; 413 | position: relative; 414 | overflow: hidden; 415 | } 416 | .leaflet-popup-tip { 417 | width: 17px; 418 | height: 17px; 419 | padding: 1px; 420 | 421 | margin: -10px auto 0; 422 | 423 | -webkit-transform: rotate(45deg); 424 | -moz-transform: rotate(45deg); 425 | -ms-transform: rotate(45deg); 426 | -o-transform: rotate(45deg); 427 | transform: rotate(45deg); 428 | } 429 | .leaflet-popup-content-wrapper, .leaflet-popup-tip { 430 | background: white; 431 | 432 | box-shadow: 0 3px 14px rgba(0,0,0,0.4); 433 | } 434 | .leaflet-container a.leaflet-popup-close-button { 435 | position: absolute; 436 | top: 0; 437 | right: 0; 438 | padding: 4px 4px 0 0; 439 | text-align: center; 440 | width: 18px; 441 | height: 14px; 442 | font: 16px/14px Tahoma, Verdana, sans-serif; 443 | color: #c3c3c3; 444 | text-decoration: none; 445 | font-weight: bold; 446 | background: transparent; 447 | } 448 | .leaflet-container a.leaflet-popup-close-button:hover { 449 | color: #999; 450 | } 451 | .leaflet-popup-scrolled { 452 | overflow: auto; 453 | border-bottom: 1px solid #ddd; 454 | border-top: 1px solid #ddd; 455 | } 456 | 457 | 458 | /* div icon */ 459 | 460 | .leaflet-div-icon { 461 | background: #fff; 462 | border: 1px solid #666; 463 | } 464 | .leaflet-editing-icon { 465 | -webkit-border-radius: 2px; 466 | border-radius: 2px; 467 | } 468 | -------------------------------------------------------------------------------- /js/poi.js: -------------------------------------------------------------------------------- 1 | var shop_icons=["alcohol",'antiques',"art", 2 | "baby_goods","bag","bakery","beauty","bicycle","books","boutique","butcher", 3 | "car","car_parts","car_repair","chemist","clothes","computer","confectionery","convenience","copyshop", 4 | "dog_hairdresser","doityourself", 5 | "fabric","farm","fishing","florist","funeral_directors","furniture", 6 | "garden_centre","gift","greengrocer", 7 | "haberdashery","hairdresser","hardware","hearing_aids", 8 | "interior_decoration","jewelry","kiosk","mall","mobile_phone","motorcycle","music","musical_instruments", 9 | "newsagent","optician","pet","second_hand","shoes","seafood","supermarket","tobacco","toys","travel_agency","tyres","video"]; 10 | var leisure_icons=['pitch','swimming_pool','stadium','track','sports_centre']; 11 | var amenity_icons=['atm','bar','bank','biergarten','cafe','cinema','clinic','college','dentist','doctors','drinking_water', 12 | 'fast_food','fuel','hospital','ice_cream','kindergarten','library','nightclub', 13 | 'pub','pharmacy','restaurant','school','shelter','social_facility','stripclub','theatre','toilets','university','veterinary']; 14 | var office_icons=[]; 15 | var craft_icons=['key_cutter','clockmaker','glaziery','photographer','shoemaker','tailor']; 16 | var emergency_icons=['ambulance_station','defibrillator']; 17 | var tourism_icons=['guest_house','motel','hotel','caravan_site','camp_site','information','attraction','theme_park','zoo','museum','artwork']; 18 | 19 | 20 | var global_nominatim = ""; 21 | 22 | function POI(element){ 23 | this.element = element; 24 | this.nominatim = undefined; 25 | //this.updateShadow(new Date()); 26 | } 27 | 28 | POI.prototype.__genItems = function(opt){ 29 | if(typeof opt.tag === 'undefined') 30 | return ""; 31 | 32 | var added = 0; 33 | var ret = ""; 34 | //If more then one tag to icon 35 | for (var i = 0; i < opt.tag.length; ++i){ 36 | if(this.element.tags.hasOwnProperty(opt.tag[i])){ 37 | var items = this.element.tags[opt.tag[i]].split(";"); 38 | //First item 39 | if(added==0){ 40 | ret+=((typeof opt.icon != 'undefined') ? '' : ""); 41 | ret+=((typeof opt.desc != 'undefined') ? ''+opt.desc+'' : ""); 42 | ret+="
"; 71 | return ret; 72 | }; 73 | 74 | var months = ['Jan', 'Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 75 | var weekdays = ['Mo','Tu','We','Th','Fr','Sa','Su']; 76 | function pad(n) { return n < 10 ? '0'+n : n; } 77 | 78 | // See https://github.com/ypid/opening_hours.js/blob/master/js/opening_hours_table.js. 79 | POI.prototype.drawTable = function(oh, date_today) { 80 | var date_today = new Date(date_today); 81 | date_today.setHours(0, 0, 0, 0); 82 | 83 | var date = new Date(date_today); 84 | date.setDate(date.getDate()-1); 85 | var table = []; 86 | for (var row = 0; row < 7; row++) { 87 | date.setDate(date.getDate()+1); 88 | 89 | var state = oh.getState(date); 90 | var prevdate = date; 91 | var curdate = date; 92 | table[row] = { 93 | date: new Date(date), 94 | times: '', 95 | text: [] 96 | }; 97 | while (curdate.getTime() - date.getTime() < 24*60*60*1000) { 98 | curdate = oh.getNextChange(curdate); 99 | if(typeof curdate === 'undefined')return "";//Fixme: workaround 100 | var fr = prevdate.getTime() - date.getTime(); 101 | var to = curdate.getTime() - date.getTime(); 102 | if (to > 24*60*60*1000) 103 | to = 24*60*60*1000; 104 | fr *= 100/1000/60/60/24; 105 | to *= 100/1000/60/60/24; 106 | table[row].times += '
'; 107 | if (state) { 108 | var text = prevdate.getHours() + ':' + pad(prevdate.getMinutes()) + ' - '; 109 | if (prevdate.getDay() != curdate.getDay()) 110 | text += '24:00'; 111 | else 112 | text += curdate.getHours() + ':' + pad(curdate.getMinutes()); 113 | table[row].text.push(text); 114 | } 115 | prevdate = curdate; 116 | state = !state; 117 | } 118 | } 119 | ret=''; 120 | for (var row in table) { 121 | var today = table[row].date.getDay() == date_today.getDay(); 122 | var endweek = ((table[row].date.getDay() + 1) % 7) == date_today.getDay(); 123 | var cl = today ? ' class="today"' : endweek ? ' class="endweek"' : ''; 124 | 125 | ret+=''; 132 | } 133 | ret+='
'; 126 | ret+=months[table[row].date.getMonth()] +' '+table[row].date.getDate(); 127 | ret+=''; 128 | ret+=table[row].times; 129 | ret+=''; 130 | ret+=table[row].text.join(', ') || ' '; 131 | ret+='
'; 134 | return ret; 135 | }; 136 | 137 | POI.prototype.getInfoBox = function(){ 138 | var name=this.getName(); 139 | 140 | var tabs=''; 147 | 148 | var content = '
'; 149 | //------basic 150 | content+='
'; 151 | 152 | //name 153 | content+='

' +((this.element.tags.hasOwnProperty("name")) ? this.element.tags["name"]:"----")+'

'; 154 | //addr 155 | content+=''+((this.element.tags.hasOwnProperty("addr:city")) ? this.element.tags["addr:city"]+', ' : "")+((this.element.tags.hasOwnProperty("addr:street")) ? this.element.tags["addr:street"]+', ' : "")+((this.element.tags.hasOwnProperty("addr:housenumber")) ? this.element.tags["addr:housenumber"]+', ' : "")+''; 156 | 157 | //net 158 | content+='
'; 159 | content += this.__genItems({tag:['contact:email','email'],icon:'glyphicon glyphicon-envelope',href:'mailto:'}); 160 | content += this.__genItems({tag:['contact:phone','phone'],icon:'glyphicon glyphicon-phone-alt',href:'tel:'}); 161 | content += this.__genItems({tag:['contact:website','website'],icon:'glyphicon glyphicon-globe',href:''}); 162 | 163 | content += this.__genItems({tag:['contact:facebook'],icon:'glyphicon glyphicon-globe',name:"Facebook",href:'',hrefFunc: 164 | function(nn){return ((nn.indexOf('/') === -1)?"http://facebook.com/":"")+nn;}}); 165 | 166 | content += this.__genItems({tag:['cuisine']}); 167 | content += this.__genItems({tag:['sport']}); 168 | content+='
'; 169 | 170 | 171 | content+='

'+lang_add_missing_data+'
' 172 | //hours 173 | if(typeof this.oh != 'undefined' && this.element.tags.hasOwnProperty("opening_hours")){ 174 | content+='
'; 175 | if(this.element.tags['opening_hours']=="24/7") 176 | content+="24h
"; 177 | else 178 | content+=this.drawTable(this.oh, new Date()); 179 | content+='Author
'; 180 | } 181 | 182 | //comments 183 | content+='
'; 184 | 185 | //tags 186 | content+='
'; 187 | content+=""; 188 | content+=""; 189 | for (key in this.element.tags) 190 | content+=''; 191 | 192 | content+='
"+lang_key+""+lang_value+"
'+key+' '+this.element.tags[key]+'
'; 193 | if(this.element.id[0]!='w') 194 | content+="Open OSM"; 195 | else 196 | content+="Open OSM"; 197 | 198 | content+='
'; 199 | 200 | 201 | content+='
'; 202 | //link 203 | var link = ''; 204 | var container = $('
'); 205 | container.html('
'+content+tabs+'
'+link); 206 | return [container[0], 'http://osm24.eu/index.php?id='+this.element.id+'#!18/'+this.element.lat+'/'+this.element.lon+'/' ]; 207 | }; 208 | 209 | POI.prototype.getIconSource = function(){ 210 | var icon_name="null"; 211 | if(this.element.tags.hasOwnProperty("amenity")&&amenity_icons.indexOf(this.element.tags["amenity"]) != -1){ 212 | icon_name="amenity_"+this.element.tags["amenity"]; 213 | }else if(this.element.tags.hasOwnProperty("shop")&&shop_icons.indexOf(this.element.tags["shop"]) != -1){ 214 | icon_name="shop_"+this.element.tags["shop"]; 215 | }else if(this.element.tags.hasOwnProperty("leisure")&&leisure_icons.indexOf(this.element.tags["leisure"]) != -1){ 216 | icon_name="leisure_"+this.element.tags["leisure"]; 217 | }else if(this.element.tags.hasOwnProperty("emergency")&&emergency_icons.indexOf(this.element.tags["emergency"]) != -1){ 218 | icon_name="emergency_"+this.element.tags["emergency"]; 219 | }else if(this.element.tags.hasOwnProperty("office")&&office_icons.indexOf(this.element.tags["office"]) != -1){ 220 | icon_name="office_"+this.element.tags["office"]; 221 | }else if(this.element.tags.hasOwnProperty("craft")&&craft_icons.indexOf(this.element.tags["craft"]) != -1){ 222 | icon_name="craft_"+this.element.tags["craft"]; 223 | }else if(this.element.tags.hasOwnProperty("tourism")&&tourism_icons.indexOf(this.element.tags["tourism"]) != -1){ 224 | icon_name="tourism_"+this.element.tags["tourism"]; 225 | } 226 | 227 | if(icon_name==="null") 228 | icon_name="other"; 229 | return icon_name; 230 | }; 231 | 232 | POI.prototype.getIconDiv = function(){ 233 | var icon_name = this.getIconSource(); 234 | return "
"; 235 | }; 236 | 237 | POI.prototype.getIcon = function(){ 238 | var icon_name = this.getIconSource(); 239 | 240 | return L.divIcon({ 241 | className: "map-icon map-icon-"+this.shadow,html:"
", 242 | iconSize: [32, 37], 243 | iconAnchor: [16, 37], 244 | }); 245 | }; 246 | 247 | POI.prototype.getName = function(){ 248 | var name="Unnamed"; 249 | if(this.element.tags.hasOwnProperty("name")) 250 | name=this.element.tags["name"]; 251 | else if(this.element.tags.hasOwnProperty("ref")) 252 | name=this.element.tags["ref"]; 253 | else if(this.element.tags.hasOwnProperty("operator")) 254 | name=this.element.tags["operator"]; 255 | return name; 256 | }; 257 | 258 | POI.prototype.updateShadow = function (now){ 259 | var old=this.shadow; 260 | var next_hour = ((new Date(now)).addHours(1)); 261 | this.oh; 262 | this.shadow = "nd"; 263 | if (this.element.tags.hasOwnProperty("opening_hours")) { 264 | try { 265 | this.oh = new opening_hours(this.element.tags['opening_hours'], global_nominatim); 266 | } catch (err) { 267 | console.log("Unsupported:" + this.element.tags['opening_hours']); 268 | this.oh = undefined; 269 | } 270 | // Status 271 | if (typeof this.oh != 'undefined') { 272 | var is_open = this.oh.getState(now); 273 | this.shadow = "closed"; 274 | if (is_open == true) { 275 | is_open = this.oh.getState(next_hour); 276 | this.shadow = "last"; 277 | if (is_open == true) { 278 | this.shadow = "open"; 279 | } 280 | } 281 | } 282 | } 283 | if(this.shadow==old) 284 | return false; 285 | return true; 286 | }; 287 | -------------------------------------------------------------------------------- /js/coin.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | Donations welcome: 4 | BTC: 122MeuyZpYz4GSHNrF98e6dnQCXZfHJeGS 5 | LTC: LY1L6M6yG26b4sRkLv4BbkmHhPn8GR5fFm 6 | ~ Thank you! 7 | 8 | ------------ 9 | 10 | MIT License (MIT) 11 | 12 | Copyright (c) 2013 http://coinwidget.com/ 13 | Copyright (c) 2013 http://scotty.cc/ 14 | 15 | Permission is hereby granted, free of charge, to any person obtaining a copy 16 | of this software and associated documentation files (the "Software"), to deal 17 | in the Software without restriction, including without limitation the rights 18 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 19 | copies of the Software, and to permit persons to whom the Software is 20 | furnished to do so, subject to the following conditions: 21 | 22 | The above copyright notice and this permission notice shall be included in 23 | all copies or substantial portions of the Software. 24 | 25 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 26 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 27 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 28 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 29 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 30 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 31 | THE SOFTWARE. 32 | 33 | */ 34 | 35 | if (typeof CoinWidgetComCounter != 'number') 36 | var CoinWidgetComCounter = 0; 37 | 38 | if (typeof CoinWidgetCom != 'object') 39 | var CoinWidgetCom = { 40 | source: 'http://coinwidget.com/widget/' 41 | , config: [] 42 | , go :function(config) { 43 | config = CoinWidgetCom.validate(config); 44 | CoinWidgetCom.config[CoinWidgetComCounter] = config; 45 | CoinWidgetCom.loader.jquery(); 46 | document.write(''); 47 | CoinWidgetComCounter++; 48 | } 49 | , validate: function(config) { 50 | var $accepted = []; 51 | $accepted['currencies'] = ['bitcoin','litecoin']; 52 | $accepted['counters'] = ['count','amount','hide']; 53 | $accepted['alignment'] = ['al','ac','ar','bl','bc','br']; 54 | if (!config.currency || !CoinWidgetCom.in_array(config.currency,$accepted['currencies'])) 55 | config.currency = 'bitcoin'; 56 | if (!config.counter || !CoinWidgetCom.in_array(config.counter,$accepted['counters'])) 57 | config.counter = 'count'; 58 | if (!config.alignment || !CoinWidgetCom.in_array(config.alignment,$accepted['alignment'])) 59 | config.alignment = 'bl'; 60 | if (typeof config.qrcode != 'boolean') 61 | config.qrcode = true; 62 | if (typeof config.auto_show != 'boolean') 63 | config.auto_show = false; 64 | if (!config.wallet_address) 65 | config.wallet_address = 'My '+ config.currency +' wallet_address is missing!'; 66 | if (!config.lbl_button) 67 | config.lbl_button = 'Donate'; 68 | if (!config.lbl_address) 69 | config.lbl_address = 'My Bitcoin Address:'; 70 | if (!config.lbl_count) 71 | config.lbl_count = 'Donation'; 72 | if (!config.lbl_amount) 73 | config.lbl_amount = 'BTC'; 74 | if (typeof config.decimals != 'number' || config.decimals < 0 || config.decimals > 10) 75 | config.decimals = 4; 76 | 77 | return config; 78 | } 79 | , init: function(){ 80 | CoinWidgetCom.loader.stylesheet(); 81 | jQuery(window).resize(function(){ 82 | CoinWidgetCom.window_resize(); 83 | }); 84 | setTimeout(function(){ 85 | /* this delayed start gives the page enough time to 86 | render multiple widgets before pinging for counts. 87 | */ 88 | CoinWidgetCom.build(); 89 | },800); 90 | } 91 | , build: function(){ 92 | $containers = jQuery("span[data-coinwidget-instance]"); 93 | $containers.each(function(i,v){ 94 | $config = CoinWidgetCom.config[jQuery(this).attr('data-coinwidget-instance')]; 95 | $counter = $config.counter == 'hide'?'':(''); 96 | $button = ''+$config.lbl_button+''+$counter; 97 | jQuery(this).html($button); 98 | jQuery(this).find('> a').unbind('click').click(function(e){ 99 | e.preventDefault(); 100 | CoinWidgetCom.show(this); 101 | }); 102 | }); 103 | CoinWidgetCom.counters(); 104 | } 105 | , window_resize: function(){ 106 | jQuery.each(CoinWidgetCom.config,function(i,v){ 107 | CoinWidgetCom.window_position(i); 108 | }); 109 | } 110 | , window_position: function($instance){ 111 | $config = CoinWidgetCom.config[$instance]; 112 | coin_window = "#COINWIDGETCOM_WINDOW_"+$instance; 113 | 114 | obj = "span[data-coinwidget-instance='"+$instance+"'] > a"; 115 | /* to make alignment relative to the full width of the container instead 116 | of just the button change this occurence of jQuery(obj) to jQuery(obj).parent(), 117 | do the same for the occurences within the switch statement. */ 118 | $pos = jQuery(obj).offset(); 119 | switch ($config.alignment) { 120 | default: 121 | case 'al': /* above left */ 122 | $top = $pos.top - jQuery(coin_window).outerHeight() - 10; 123 | $left = $pos.left; 124 | break; 125 | case 'ac': /* above center */ 126 | $top = $pos.top - jQuery(coin_window).outerHeight() - 10; 127 | $left = $pos.left + (jQuery(obj).outerWidth()/2) - (jQuery(coin_window).outerWidth()/2); 128 | break; 129 | case 'ar': /* above right */ 130 | $top = $pos.top - jQuery(coin_window).outerHeight() - 10; 131 | $left = $pos.left + jQuery(obj).outerWidth() - jQuery(coin_window).outerWidth(); 132 | break; 133 | case 'bl': /* bottom left */ 134 | $top = $pos.top + jQuery(obj).outerHeight() + 10; 135 | $left = $pos.left; 136 | break; 137 | case 'bc': /* bottom center */ 138 | $top = $pos.top + jQuery(obj).outerHeight() + 10; 139 | $left = $pos.left + (jQuery(obj).outerWidth()/2) - (jQuery(coin_window).outerWidth()/2); 140 | break; 141 | case 'br': /* bottom right */ 142 | $top = $pos.top + jQuery(obj).outerHeight() + 10; 143 | $left = $pos.left + jQuery(obj).outerWidth() - jQuery(coin_window).outerWidth(); 144 | break; 145 | } 146 | if (jQuery(coin_window).is(':visible')) { 147 | jQuery(coin_window).stop().animate({'z-index':99999999999,'top':$top,'left':$left},150); 148 | } else { 149 | jQuery(coin_window).stop().css({'z-index':99999999998,'top':$top,'left':$left}); 150 | } 151 | } 152 | , counter: [] 153 | , counters: function(){ 154 | $addresses = []; 155 | jQuery.each(CoinWidgetCom.config,function(i,v){ 156 | $instance = i; 157 | $config = v; 158 | if ($config.counter != 'hide') 159 | $addresses.push($instance+'_'+$config.currency+'_'+$config.wallet_address); 160 | else { 161 | if ($config.auto_show) 162 | jQuery("span[data-coinwidget-instance='"+i+"']").find('> a').click(); 163 | } 164 | }); 165 | if ($addresses.length) { 166 | CoinWidgetCom.loader.script({ 167 | id: 'COINWIDGETCOM_INFO'+Math.random() 168 | , source: (CoinWidgetCom.source+'lookup.php?data='+$addresses.join('|')) 169 | , callback: function(){ 170 | if (typeof COINWIDGETCOM_DATA == 'object') { 171 | CoinWidgetCom.counter = COINWIDGETCOM_DATA; 172 | jQuery.each(CoinWidgetCom.counter,function(i,v){ 173 | $config = CoinWidgetCom.config[i]; 174 | if (!v.count || v == null) v = {count:0,amount:0}; 175 | jQuery("span[data-coinwidget-instance='"+i+"']").find('> span').html($config.counter=='count'?v.count:(v.amount.toFixed($config.decimals)+' '+$config.lbl_amount)); 176 | if ($config.auto_show) { 177 | jQuery("span[data-coinwidget-instance='"+i+"']").find('> a').click(); 178 | } 179 | }); 180 | } 181 | if (jQuery("span[data-coinwidget-instance] > span img").length > 0) { 182 | setTimeout(function(){CoinWidgetCom.counters();},2500); 183 | } 184 | } 185 | }); 186 | } 187 | } 188 | , show: function(obj) { 189 | $instance = jQuery(obj).parent().attr('data-coinwidget-instance'); 190 | $config = CoinWidgetCom.config[$instance]; 191 | coin_window = "#COINWIDGETCOM_WINDOW_"+$instance; 192 | jQuery(".COINWIDGETCOM_WINDOW").css({'z-index':99999999998}); 193 | if (!jQuery(coin_window).length) { 194 | 195 | $sel = !navigator.userAgent.match(/iPhone/i)?'onclick="this.select();"':'onclick="prompt(\'Select all and copy:\',\''+$config.wallet_address+'\');"'; 196 | 197 | $html = '' 198 | + '' 199 | + '' 200 | + 'CoinWidget.com' 201 | + '' 202 | + 'x' 203 | + '' 204 | ; 205 | if ($config.counter != 'hide') { 206 | $html += '0'+$config.lbl_count+'' 207 | + '0.00'+$config.lbl_amount+'' 208 | ; 209 | } 210 | if ($config.qrcode) { 211 | $html += '' 212 | + '' 213 | ; 214 | } 215 | var $div = jQuery('
'); 216 | jQuery('body').append($div); 217 | $div.attr({ 218 | 'id': 'COINWIDGETCOM_WINDOW_'+$instance 219 | }).addClass('COINWIDGETCOM_WINDOW COINWIDGETCOM_WINDOW_'+$config.currency.toUpperCase()+' COINWIDGETCOM_WINDOW_'+$config.alignment.toUpperCase()).html($html).unbind('click').bind('click',function(){ 220 | jQuery(".COINWIDGETCOM_WINDOW").css({'z-index':99999999998}); 221 | jQuery(this).css({'z-index':99999999999}); 222 | }); 223 | if ($config.qrcode) { 224 | jQuery(coin_window).find('.COINWIDGETCOM_QRCODE').bind('mouseenter click',function(){ 225 | $config = CoinWidgetCom.config[jQuery(this).attr('data-coinwidget-instance')]; 226 | $lrg = jQuery(this).parent().find('.COINWIDGETCOM_QRCODE_LARGE'); 227 | if ($lrg.is(':visible')) { 228 | $lrg.hide(); 229 | return; 230 | } 231 | $lrg.attr({ 232 | src: CoinWidgetCom.source +'qr/?address='+$config.wallet_address 233 | }).show(); 234 | }).bind('mouseleave',function(){ 235 | $lrg = jQuery(this).parent().find('.COINWIDGETCOM_QRCODE_LARGE'); 236 | $lrg.hide(); 237 | }); 238 | } 239 | } else { 240 | if (jQuery(coin_window).is(':visible')) { 241 | CoinWidgetCom.hide($instance); 242 | return; 243 | } 244 | } 245 | CoinWidgetCom.window_position($instance); 246 | jQuery(coin_window).show(); 247 | $pos = jQuery(coin_window).find('input').position(); 248 | jQuery(coin_window).find('img.COINWIDGET_INPUT_ICON').css({'top':$pos.top+3,'left':$pos.left+3}); 249 | jQuery(coin_window).find('.COINWIDGETCOM_WALLETURI').css({'top':$pos.top+3,'left':$pos.left+jQuery(coin_window).find('input').outerWidth()+3}); 250 | if ($config.counter != 'hide') { 251 | $counters = CoinWidgetCom.counter[$instance]; 252 | if ($counters == null) { 253 | $counters = { 254 | count: 0, 255 | amount: 0 256 | }; 257 | } 258 | if ($counters.count == null) $counters.count = 0; 259 | if ($counters.amount == null) $counters.amount = 0; 260 | jQuery(coin_window).find('.COINWIDGETCOM_COUNT').html($counters.count+ ''+$config.lbl_count+''); 261 | jQuery(coin_window).find('.COINWIDGETCOM_AMOUNT').html($counters.amount.toFixed($config.decimals)+ ''+$config.lbl_amount+''); 262 | } 263 | if (typeof $config.onShow == 'function') 264 | $config.onShow(); 265 | } 266 | , hide: function($instance) { 267 | $config = CoinWidgetCom.config[$instance]; 268 | coin_window = "#COINWIDGETCOM_WINDOW_"+$instance; 269 | jQuery(coin_window).fadeOut(); 270 | if (typeof $config.onHide == 'function') { 271 | $config.onHide(); 272 | } 273 | } 274 | , in_array: function(needle,haystack) { 275 | for (i=0;i'); 308 | jQuery("head").append($link); 309 | $link.attr({ 310 | id : 'COINWIDGETCOM_STYLESHEET' 311 | , rel : 'stylesheet' 312 | , type : 'text/css' 313 | , href : CoinWidgetCom.source+'coin.css' 314 | }); 315 | } 316 | } 317 | , jquery: function(){ 318 | if (!window.jQuery && !CoinWidgetCom.loader.loading_jquery) { 319 | $prefix = window.location.protocol=='file:'?'http:':''; 320 | CoinWidgetCom.loader.script({ 321 | id : 'COINWIDGETCOM_JQUERY' 322 | , source : $prefix + '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' 323 | , callback : function(){ 324 | CoinWidgetCom.init(); 325 | } 326 | }); 327 | return; 328 | } 329 | CoinWidgetCom.init(); 330 | } 331 | } 332 | }; -------------------------------------------------------------------------------- /lang/en_EN.php: -------------------------------------------------------------------------------- 1 | OpenStreetMap\'s database licensed under ODbL. About
Only 40 POI are downloaded between 10-15 zoom. Full data available when minzoom=15.
Key:
yes
only

Used libs and tools:
Leaflet, Bootstrap, jQuery, opening_hours.js, Leaflet-hash, LeafLet-layer-overpass, Overpass API, VIM :-)
Icons: Maps Icons Collection mapicons.nicolasmollet.com and Tuuli
Author: Adam Jordanek (dotevo)'); 328 | define('BUTTON_CLOSE','Close'); 329 | define('BUTTON_ADD','Add'); 330 | 331 | define('JS_ADD_NOTE_BODY','You can add a note for mappers. Reported data will be added in a few weeks. You can do it yourself! Go to the OpenStreetMap page and edit. Use of English or the national language. Note should be understandable for mappers.'); 332 | define('JS_ADD_NOTE_LIST','Added notes:'); 333 | define('PLEASE_WAIT','Please wait...'); 334 | define('JS_ADD_NOTE_LABEL','Note'); 335 | define('JS_ADD_NOTE_PLACEHOLDER','Some important information'); 336 | 337 | define('JS_NOT_FOUND','Not Found'); 338 | define('JS_ADD_MISSING_DATA','Add missing data!'); 339 | define('JS_REPORT','Report'); 340 | define('JS_KEY','Key'); 341 | define('JS_VALUE','Value'); 342 | define('JS_OPENING_HOURS','Hours'); 343 | define('JS_BASIC','Basic'); 344 | define('JS_COMMENTS','Comments'); 345 | define('JS_ADVANCED','Advanced'); 346 | define('JS_NOTE','Note'); 347 | define('JS_STATUS','Status'); 348 | 349 | define('JS_LOADING','Loading...'); 350 | define('JS_PLEASE_ZOOM_IN','Please zoom in'); 351 | define('JS_OPEN','Open'); 352 | define('JS_LAST_HOUR','Last hour'); 353 | define('JS_CLOSE','Closed'); 354 | define('JS_NO_DATA','No data'); 355 | 356 | ?> 357 | --------------------------------------------------------------------------------