Giter Site home page Giter Site logo

wo-ist-markt / wo-ist-markt.github.io Goto Github PK

View Code? Open in Web Editor NEW
82.0 5.0 84.0 3.06 MB

A map visualization of periodic markets in different cities.

Home Page: https://wo-ist-markt.de

License: Other

HTML 24.38% CSS 6.88% JavaScript 68.75%
market wochenmarkt weekly-markets flea-markets farmers-markets markets leaflet-map geojson-data biomarkt biomarkets

wo-ist-markt.github.io's Introduction

Build Status Netlify Status

Wo ist Markt?

A small visualization of the weekly markets in different cities. Available at: http://wo-ist-markt.de

Project description

Wo ist Markt? aims at providing an easy to use website for market information. Visitors of the website should be able to intuitively get answers to the following questions:

  • Where does a market take place?
  • When does a market take place?

Therefore, the website shows the position of markets as markers on a map. Each marker can be clicked or tapped to reveal the detail information associated with this market - most important, the opening hours. This can been seen on the following screenshot.

Screenshot of the website (Showing Karlsruhe)

Kinds of markets

The project is not limited to specific kinds of markets. Typical markets in cities are:

  • Farmer markets (selling vegetable, fruits, fish, plants, ...)
  • Flea markets (selling used stuff, antique goods, ...)

Market data

The actual information (title, location, opening hours, ...) about the markets can be provided by anyone. In the optimal case it is provided by a city as open data. If not, any volunteer can collect such data and contribute it to the project. Market data must be maintained individually. There is no central project team to take care of updating data of multiple cities. This is a distributed project. This is also the reason why cities are missing. It needs someone to retrieve and add the data. It is of your choice if you collect the data manually or if you automate it with a script. If you need inspiration on how to automate this have a look at the preprocessing folder.

Project history

The project has been started by @torfsen as part of the Open Knowledge Lab Karlsruhe in February 2015. To support more cities the code has been refactored by @johnjohndoe as part of the Open Knowledge Lab Berlin in February 2016.

Navigation

  • The individual market data for supported cities is displayed when the city name is given in the address bar of the browser.

    Example: http://wo-ist-markt.de/#karlsruhe.

    By default or on error Karlsruhe is rendered.

Contributing

  • You are very welcome to get involved in the project. Therefore, we prepared a contribution guide which explains how to add market data and how to start coding on the project.

Communication

  • Please use the GitHub issue tracker to discuss new and existing ideas.
  • Come join the converation about this project in our Slack channel. Write to tobias DOT preuss AT googlemail DOT com if you need an invitation for the Slack group.

Supported cities

City name Data source
Bad Homburg City of Bad Homburg
Baden-Baden City of Baden-Baden
Basel City of Basel
Berlin City of Berlin
Bielefeld City of Bielefeld
Bochum City of Bochum
Bonn City of Bonn
Bottrop City of Bottrop
Braunschweig City of Braunschweig
Bremen City of Bremen
Bremerhaven City of Bremerhaven
Bretten City of Bretten
Bruchköbel Stadtmarketing Bruchköbel GmbH
Brühl Stadt Brühl
Chemnitz City of Chemnitz
Cottbus City of Cottbus
Cuxhaven City of Cuxhaven
Dortmund City of Dortmund
Dresden City of Dresden
Duisburg Duisburg Kontor GmbH
Düsseldorf City of Düsseldorf
Erlangen City of Erlangen
Essen EVB
Frankfurt am Main City of Frankfurt am Main
Freiburg City of Freiburg
Friedrichsdorf City of Friedrichsdorf
Fürth City of Fürth (Bavaria)
Gelsenkirchen Gelsendienste
Hagen City of Hagen
Hamburg City of Hamburg
Hamm City of Hamm
Hanau City of Hanau
Hannover City of Hannover
Heidelberg City of Heidelberg
Herne City of Herne
Hilden City of Hilden
Hofheim am Taunus City of Hofheim
Kaiserslautern City of Kaiserslautern
Karlsruhe City of Karlsruhe
Kassel City of Kassel
Kiel City of Kiel
Kleve City of Kleve
Köln City of Köln
Konstanz City of Konstanz
Langenfeld (Rhld.) City of Langenfeld (Rhld.)
Laupheim City of Laupheim
Leipzig City of Leipzig
Loxstedt City of Loxstedt
Lübeck City of Lübeck
Ludwigsburg City of Ludwigsburg
Mallorca Island of Mallorca
Marl City of Marl
Moers City of Moers
Mülheim an der Ruhr City of Mülheim an der Ruhr
München City of München
Münster City of Münster
Nersingen City of Nersingen
Neu-Anspach City of Neu-Anspach
Neu-Ulm City of Neu-Ulm
Oberursel City of Oberursel
Oldenburg City of Oldenburg (Oldb)
Osnabrueck City of Osnabrueck
Paderborn City of Paderborn
Potsdam City of Potsdam
Rostock City of Rostock
Rothenburg ob der Tauber City of Rothenburg ob der Tauber
Saarbrücken Landeshauptstadt Saarbrücken
Salzkotten City of Salzkotten
Schleswig City of Schleswig
Schwerin City of Schwerin
Siegen City of Siegen
Solingen City of Solingen
Stralsund City of Stralsund
Stuttgart Stuttgarter Wochenmärkte
Suhl City of Suhl
Trier City of Trier
Tübingen Wochenmarkt - Universitätsstadt Tübingen
Ulm City of Ulm
Usingen City of Usingen
Wiesbaden City of Wiesbaden
Witten Stadtmarketing Witten
Wolfenbüttel Stadt Wolfenbüttel
Wuppertal City of Wuppertal
Zwickau Kultour Z.

Development

Tests can be run using npm:

$ npm install  # Just once after you've cloned the repo

$ npm test     # Whenever you want to run the tests

Please see also CONTRIBUTING.md on how to start development.

Deployment

This website is hosted on Netlify.

When a commit is added to the master branch then Netlify automatically publishes this state as the new version of the website available under https://wo-ist-markt.de.

wo-ist-markt.github.io's People

Contributors

alexschnapper avatar altnico avatar dependabot[bot] avatar dersvenhesse avatar dirkschumacher avatar greenkeeper[bot] avatar jamessral avatar johan12345 avatar johnjohndoe avatar jonathanschiefer avatar k-nut avatar katrinleinweber avatar kawie avatar lucash avatar matthias84 avatar mikafinja avatar mmk2410 avatar mojoaxel avatar morrisjobke avatar nwuensche avatar p-lauer avatar rowbean avatar ryuno-ki avatar snyk-bot avatar strubbl avatar symptog avatar tim-conrad avatar torfsen avatar tursics avatar ubergesundheit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

wo-ist-markt.github.io's Issues

Validate city list alphabetic ordering

The README.md shows a list of all cities which currently show markets on the website.

Proposed validator

  • Check if the lexicographic order of city names is correct
  • Produce a build error if the order is incorrect
  • Check if markdown link aliases use only - not _

The validator should run on Travis CI, see package.json.

München: Field 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

@MarHai I am currently working on a validation script for the market data. This identified a some issues for München:

MÜNCHEN: Wochenmarkt Neuaubing
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Wochenmarkt Schwabing
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Schwabing, Fritz-Hommel-Weg 2-6
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Laim, Agnes-Bernauer-Straße
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Maxvorstadt, Zieblandstraße/Augustenstraße
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Maxvorstadt, Pinakothek der Moderne
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Maxvorstadt, St. Benno Kirche
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Lehel, St.-Anna-Platz
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Wochenmarkt Olympiazentrum
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Ständiger Markt Elisabethmarkt
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Ständiger Markt Pasinger Viktualienmarkt
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Ständiger Markt Wiener Markt
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Ständiger Markt Viktualienmarkt
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Wochenmarkt Blumenau
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Wochenmarkt Au
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Schwanthalerhöhe, Georg-Freundorfer-Platz
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Ständiger Markt Schrannenhalle
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Wochenmarkt Neuperlach
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Großmarkt Großmarktgelände München
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Großmarkt Markthallen München - Großmarkthalle
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Großmarkt Gärtnerhalle (Markthallen München)
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Großmarkt Markthallen München (Schlacht- und Viehhof)
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Harlaching, Mangfallplatz
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

MÜNCHEN: Bauernmarkt Obermenzing, Rüttenauer Platz
Error: Attribute 'opening_hours_unclassified' cannot be empty when 'opening_hours' is null.

Validation done. 0 warning(s), 24 error(s) detected.

Can you please update münchen.json? You might want to use the attribute opening_hours_unclassified to express opening hours which cannot be parsed automatically. More information here.

Make the city dropdown part of the legend title

Currently the city selection dropdown is a separate control at the bottom of the legend. I propose to use an appropriately styled dropdown as part of the legend title instead:

Wo ist Markt in [Berlin   ▼]?

This has the following advantages:

  • It reduces the size of the (already quite large) legend. That's especially important on mobile.
  • It reduces the visual clutter by removing redundant information
  • We could remove the "Andere Stadt?" label, freeing even more space.

Improve string generating of city label

Cities labels are currently parsed from the city .json file names in the cities/ folder. As you can see from the screenshot there is some potential to improve the city label for "Neu-ulm".

neu-ulm

Favicon

It would be nice, if the page could become an unique favicon. So it's easier to recognize within a list of tabs, or as homescreen bookmark.

The green map marker would be an easy to realize icon?

Replace legend

I think the legend is annoying, especially on mobile. It's also not very versatile and pretty limited in space, so I'd like to think about alternatives. I have something in mind for which I'll prepare a prototype, but I'd also like to hear other people's opinion about the legend and possible alternatives.

Validate market data

I am currently working on a script which will validate the market data. I start with approving the opening hours format. The script will be automatically executed on Travis CI whenever a pull request is created.

Render market area instead of markers

An alternative way to display market locations would be to render the actual area covered by a market.

market-area

I am looking forward to hearing your opinions about this idea.

Back-button is broken when city is auto-selected

If no city is specified and Karlsruhe gets auto-selected then the back-button doesn't work: Pressing the back-button goes from /#karlsruhe to /, which automatically redirects to /#karlsruhe.

Solution: The auto-selection should not push a new history entry.

Cities with Umlaute cannot be displayed

Currently, cities which have an Umlaut in the name cannot be displayed. The following error is shown in the browser console when such a city is selected:

Failure loading "cities/bruchköbel.json".
Loading default city "karlsruhe" instead.

This error occurs since the website deployment changes recently, see #115.
I could see on the server that the file names are corrupted! Here is a listing of the cities/ folder on the new server:

berlin.json
bochum.json
bonn.json
bruchko??bel.json
chemnitz.json
cities.json
dortmund.json
dresden.json
duisburg.json
du??sseldorf.json
erlangen.json
essen.json
hanau.json
hilden.json
karlsruhe.json
kiel.json
ko??ln.json
langenfeld_rhld.json
leipzig.json
moers.json
mu??lheim-an-der-ruhr.json
mu??nchen.json
mu??nster.json
nersingen.json
neu-ulm.json
paderborn.json
rostock.json
schwerin.json
ulm.json
wiesbaden.json
witten.json
wuppertal.json

Promote website

#More and more cities are joining the project which is great. In order to become mainstream everyone can help to spread the word.

To start, I suggest to contact city officials to link to the project:

  • on their website,
  • in the data portal
  • or anywhere near the data source.

I would like to delegate this task to the contributors from each city. Some have already done so. Please document your progress here as a comment. Please include a link to the website of the city which links to our project.

  • Bad Homburg
  • Baden-Baden
  • Basel, Switzerland
  • Berlin
  • Bielefeld
  • Bochum
  • Bonn
  • Bottrop
  • Braunschweig
  • Bremen
  • Bremerhaven
  • Bretten
  • Bruchköbel
  • Brühl
  • Chemnitz
  • Cottbus
  • Cuxhaven
  • Dortmund
  • Dresden
  • Duisburg
  • Düsseldorf
  • Erlangen
  • Essen
  • Frankfurt am Main
  • Freiburg
  • Friedrichsdorf
  • Fürth
  • Gelsenkirchen
  • Hagen
  • Hamburg
  • Hamm
  • Hanau
  • Hannover
  • Heidelberg
  • Herne
  • Hofheim am Taunus
  • Kaiserslautern
  • Karlsruhe
  • Kassel
  • Kiel
  • Kleve
  • Köln
  • Langenfeld (Rhld.)
  • Laupheim
  • Leipzig
  • Loxstedt
  • Ludwigsburg
  • Lübeck
  • Mallorca (Spain)
  • Marl
  • Moers
  • München
  • Münster
  • Nersingen
  • Neu-Ulm
  • Oberursel
  • Oldenburg
  • Osnabrück
  • Paderborn
  • Potsdam
  • Rostock
  • Rothenburg ob der Tauber
  • Saarbrücken
  • Saarbrücken
  • Salzkotten
  • Schleswig
  • Schwerin
  • Siegen
  • Solingen
  • Stralsund
  • Stuttgart
  • Suhl
  • Trier
  • Tübingen
  • Ulm
  • Wiesbaden
  • Witten
  • Wuppertal
  • Zwickau

This issue will be regularly updated, also adding new cities.


@torfsen @mmk2410 @ubergesundheit @kawie @MarHai @perreira @Drake81 @karen-sch @TinoM @schurig @SamZeini @odadev @symptog @RobTranquillo @Matthias84 @cknebel @aroskamp @mattsches @daimpad @looniverse @johan12345 @AltNico @TimGuenther @hfs @narutards @sfricke @toroettg @d-amend @rackedbrain @alarmschaben @telegnom @mauricewipf @marcusandre @frankkanis @TimGuenther @Strubbl @jbein @maegnes @masterofpuppets103 @zliw @GeoDodo @BjoernSchilberg @alexschnapper @operator2010 @bezin @katrinleinweber @fortrieb @lucash @p-lauer @jb3-2 @hbruch @jbein @rowbean @InsulinJunkieDe @mojoaxel @karoshi42 @FabioMai @HerHde @katrinleinweber @TjarkD @KGausM @dersvenhesse

Deploy PR to S3 automatically

It would be great if whenever a Pull Request comes in, the content of the repository is copied to a S3 buckets, so it is easier to quickly review the changes without running a local server and checking out the branch.

Travis CI could be used for that but only for PRs from authors with write access for the main repository.
Alternative would be to write a small application that clones the PR's git repository into a S3 bucket whenever a new PR is opened or an existing one is updated.

Bonus points: the link to the PR website gets automatically posted to the PR discussion.

For example:

What do you think?

Advertise on the website how to add or update market data for a city

Currently, the website does not indicate how to add market data for a new city. The only place where this is explained is the contribution guide in the repository.
We need to guide users which visit the website to the contribution guide. The following scenarios are possible:

  • User visits the website for the first time and does not find her city.
  • User visits the website and notices that market data is outdated. She wants to update the data.

wim-add-new-city

// Feel free to edit this issue!

OpenGraph preview

To make the platform more popular, we hope that people share the (city) links via social web. There i's common practise, that links include a short description and preview, which is announced via OpenGraph HTML metadata. This might make it more attractive to users, to check out the city specific page?

Validate market data contribution

Currently, each market data contribution is validated via the markets-validator.js script. It only checks the actual market GeoJSON file.

However, adding a new city includes modifying two existing files as explained in the contribution guide. Therefore, the overall validation must be extended as such:

  • Validate that each (new) city is listed in cities.json
  • Validate that each (new) city is listed in the README.md
  • Validate that each (new) city in the README.md has a valid link.
  • Validate that citykey and city idare identical (see screenshot)

Non matching key and id in cities.json

Related issues

Time-selection controls don't update correctly upon city change

The time-selection radio buttons in the legend don't update correctly when the city is changed. In particular, if you switch from a city where there's no market today (i.e. where only the "alle" button is enabled) to a city which does have markets today then the other radio buttons are not re-enabled.

Karlsruhe: Add location for markets

I am currently working on a validation script for the market data. This identified a few issues for Karlsruhe:

KARLSRUHE: Gottesauer Platz
Field 'location' cannot be null.

KARLSRUHE: Gutenbergplatz
Field 'location' cannot be null.

KARLSRUHE: Kronenplatz
Field 'location' cannot be null.

KARLSRUHE: Stephanplatz
Field 'location' cannot be null.

KARLSRUHE: Werderplatz
Field 'location' cannot be null.

Can you please update karlsruhe.json?

Extended project information

The legend currently provides basic information. This could be extended:

  • Generall about page
  • Who is running the project
  • Link to source code
  • City specific source for the market data
  • License of the market data
  • Update time stamp of the market data
  • Time stamp of last check (1)
  • Contact for market data
  • Contact for technical bugs of the website
  • Legal information (German "Impressum")
  • Info that we use analytics (Piwik)

(1) Market data might not have changed. When someone checks the data this should be communicated to the user so they know that everything is up-to-date.

tbc.

Köln: Remove trailing semicolons

@karen-sch I am currently working on a validation script for the market data. This identified a some issues for Köln:

KÖLN: Wochenmarkt Altstadt-Nord
Error:  Tu 07:00-14:00 ; Fr 07:00-14:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Neustadt-Nord
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Deutz
Error:  Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Zollstock
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Klettenberg
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Sülz
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Sülz
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Lindenthal
Error:  Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Braunsfeld
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Ehrenfeld
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Bickendorf
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Bocklemünd/Mengenich
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Nippes
Error:  Mo 07:00-13:00 ; Tu 07:00-13:00 ; We 07:00-13:00 ; Th 07:00-13:00 ; Fr 07:00-13:00 ; Sa 07:00-14:30 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Riehl
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Longerich
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Heimersdorf
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Chorweiler
Error:  Th 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Vingst
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Alt-Brück
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Neu-Brück
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Mülheim
Error:  Tu 07:00-13:00 ; Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Buchforst
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Sürth
Error:  Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Dellbrück
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Höhenhaus
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Stammheim
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Flittard
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Holweide
Error:  Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Rodenkirchen
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Mülheim
Error:  Tu 07:00-13:00 ; Th 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Weiden
Error:  We 07:00-13:00 ; Sa 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Porz-Mitte 
Error:  Tu 07:00-13:00 ; Sa 07:00-14:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Porz-Urbach
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Poll
Error:  Fr 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Niehl
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Humboldt-Gremberg
Error:  Th 07:00-13:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

KÖLN: Wochenmarkt Kalk
Error:  Sa 08:00-15:00 ; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

Validation done. 0 warning(s), 37 error(s) detected.

Can you please update köln.json?

Validate HTTP status of data source URL

Each JSON file for a city contains an URL in the metadata section pointing to the original data source. Here is an excerpt from berlin.json:

    "metadata": {
        "data_source": {
            "url": "http://daten.berlin.de/datensaetze/wochen-und-tr%C3%B6delm%C3%A4rkte"
        },

Proposed validator

  1. Collect the URLs from all city files
  2. Execute a HTTP GET request on each URL
  3. Check if the response code equals HTTP 200
  4. Produce a warning if the response code indicates a redirection
  5. Produce a build error if the response code indicates that the URL is no longer reachable

The validator should run on Travis CI, see package.json.

Show deployed version

The live website should somewhere show the Git hash of the commit which has been deployed. This is very helpful if a developer quickly wants to check which version is live.

Moers: Remove trailing semicolons

@odadev I am currently working on a validation script for the market data. This identified a some issues for Moers:

MOERS: Markt Moers-Kapellen
Error: Sa 07:30-13:00; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

MOERS: Markt Moers-Repelen
Error: Tu 07:30-13:00;Fr 07:30-13:00; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

MOERS: Markt Moers-Asberg
Error: Fr 08:00-13:00; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

MOERS: Markt Moers-Meerbeck
Error: We 07:30-13:00;Sa 07:30-13:00; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

MOERS: Markt Moers-Innenstadt
Error: Tu 07:30-14:00;Fr 07:30-14:00; <--- (This rule does not contain anything useful. Please remove this empty rule. Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ? The thing is that the semicolon in the opening_hours syntax is defined as rule separator. So for compatibility reasons you should omit this last semicolon.)

Validation done. 0 warning(s), 5 error(s) detected.

Can you please update moers.json?

Initialize map with bounding box

I would like to discuss whether it makes more sense to use a bounding box instead of coordinates and zoom_level to exactly match the area of markets in a city. Dependent on the distribution of markets and the screen size locations are displayed suboptimal.

"map_initialization": {
    "coordinates": [
        13.383333,
        52.516667
    ],
    "zoom_level": 11
}

Proposal:

"map_initialization": {
    "bounding_box" : {
        "south_west" : {
            "latitude" : 52.464504,
            "longitude" : 13.282079
        },
        "north_east" : {
            "latitude" : 52.549808,
            "longitude" : 13.475550
        }
    }
}

What's your opinion on this?

Remove fork status

TL;DR: I suggest that we remove the fork dependency to the original repository at CodeForKarlsruhe.

I first started work on what is now wo-ist-markt.de at the OK Lab Karlsruhe, and the initial repository was created in our GitHub organization. After @johnjohndoe's contributions and the decision to open the app up to many more cities this new repository was created as a fork of the original one. The original repository now only contains a reference to this repository and no further contributions are planned for it.

I therefore suggest that we cut the ties to the original repository. The fork status just adds misleading clutter to the GitHub UI (for example, if you create a pull request GitHub suggests a PR to the original repository). I would keep the original repository and its reference to the new location, the two repositories just wouldn't be fork-linked anymore.

Removing the fork status can only be done manually by the GitHub support team but it seems that it's usually not a problem.

What do you think?

Add explicit city list data file

As discussed in #29 we should create a separate JSON file that lists the available cities. The file should contain a list of the cities' display names, e.g.

["Berlin", "Frankfurt am Main", "Karlsruhe", "Köln", "Ulm"]

These display names are to be used in the UI (legend title, dropdown item labels).

In addition we need city IDs for the fragment (wo-ist-markt.de#city), for the filenames and for the dropdown item names. These city IDs are generated from the display names by converting the name to lowercase and converting spaces to -.

When the list of cities is loaded from the JSON file a mapping should be constructed that maps IDs to display names. This can then later on be used to check if an ID exists and what its corresponding display name is.

Validate order of coordinates

It can easily happen that the order of coordinates (latitude, longitude) is mixed up. To avoid human error and to simplify the review process a validator can verify the correct order.

Proposed validator

  • Check the order of coordinates for each market
  • Check the order of coordinates in the map_initialization block
  • Check if all market coordinates are within the boundaries of the coordinates of the map_initialization block

We should not try to deploy forks with travis

Original comment from @TimGuenther:

Taken from the Travis CI output:

$ openssl aes-256-cbc -K $encrypted_02f86fe65d47_key -iv $encrypted_02f86fe65d47_iv -in markt_deploy_id_rsa.enc -out markt_deploy_id_rsa -d

iv undefined

The command "openssl aes-256-cbc -K $encrypted_02f86fe65d47_key -iv $encrypted_02f86fe65d47_iv -in markt_deploy_id_rsa.enc -out markt_deploy_id_rsa -d" failed and exited with 1 during .

Could it be possible, that the environment variables aren't available for a fork. This would explain the undefined IV.
Here is a similar problem (pockethub/PocketHub#884)

I know this is not a solution, but maybe a start for further investigation.

Deployment notifications on Slack

It would be great if we could send an informative message to our #wo-ist-markt Slack channel every time the website is published. Since Travis CI is responsible for pushing stable changes to our server it should happen there. If possible it would be great to distinguish between general development and commits where actual market data is added or updated.

  • Setup of deployment notifications
  • Custom market data notifications

Select field "other city" does not work on mobile

I noticed that the other city select box added in #14 does not work when the website is visited on an Android phone (default browser). It does not respond when one touches it.
Also it should be larger on mobile to allow easier targeting.

Website on smartphone

Search field for cities triggers keyboard on android on page load

When I load the page on Android Firefox, the search input text box always triggers my keyboard. The keyboard then hides half of the screen.This is quite annoying.

Maybe we disable the search box for now? There are so few cities at the moment or we fix the autofocus.

Münster: Please use ":" as hour/minute-separator

@ubergesundheit I am currently working on a validation script for the market data. This identified a some issues for Münster:

MÜNSTER: Kinderhaus: Idenbrockplatz
Error: Th 07:30-12. <--- (Please use ":" as hour/minute-separator)

MÜNSTER: Wolbeck: Hiltruper Straße
Error: We 15:00-18. <--- (Please use ":" as hour/minute-separator)

Validation done. 0 warning(s), 2 error(s) detected.

Can you please update münster.json?

Time based market filtering broken

I noticed that the time based filtering is not working. Although there are markets taking place right now none of the markets is put into the "Jetzt" category as shown in the screenshot for Berlin.

markets-now-error

I checked the commit when Berlin was added to the repository. It seems this feature has never worked - at least not for Berlin.

Explain map marker colors

Currently, there is no legend for map markers and what their different colors mean.
We should communicate somewhat clearer which color maps to which filter setting.
Here is a quick draft:

wim-legende

How many markets per area?

In Ulm we're currently thinking about submitting markets for neighboring areas (cities like Langenau, and Neu-Ulm). We current have Ulm and Neu-Ulm, because they're commonly considered one "city", but we also saw that the Berlin group has markets far outside Berlin (including one beyond Potsdam). Did you already think about the area/how many cities will be included in the drop-down?

Remove redundant location data

Many markets seem to have location set to the same value as title. The corresponding pop-up therefore simply contains the same string twice, once as a heading and once as normal text. location should only be used if it adds additional information, for example if title specifies the suburb and location the precise address.

We should go through the data and check the redundant location entries. Either the information can be split into a "high-level" title and a detailed location or the location is just redundant and should be removed.

Chemnitz: Validation errors with year

@symptog I am currently working on a validation script for the market data. This identified a some issues for Chemnitz:

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 Tu-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 Tu-Fr 09:00-17:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 Tu-Fr 09:00-17:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 Tu-Fr 09:00-17:00; 2016 Nov 12 <--- (The selector "month" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 12-Feb 27,Nov 1-11 Tu-Fr 09:00-16:00; 2016 Jan 12-Feb 27,Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29,Nov 1-11 Sa 08:00-13:00; 2016 Mar 1-Jul 1,Jul 3-Aug 22,Aug 27-Sep 21,Sep 25-Oct 29 Tu-Fr 09:00-17:00; 2016 Nov 12 08:00-12:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 <--- (The selector "month" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 Nov 19 <--- (The selector "month" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 Nov 19 08:00-13:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 Nov 19 08:00-13:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 Nov 19 08:00-13:00; 2016 Dec 23 <--- (The selector "month" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Sep 22-24 Tu-Fr 09:00-17:00; 2016 Sep 22-24 Sa 08:00-13:00; 2016 Nov 15 09:00-16:00; 2016 Nov 17-18,Nov 20-Dec 16 Tu-Fr 09:00-16:00; 2016 Nov 19 08:00-13:00; 2016 Dec 23 09:00-15:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Aug 23-26 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Aug 23-26 Tu-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Aug 23-26 Tu-Fr 09:00-17:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr 09:00-17:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr 09:00-17:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr 09:00-17:00; 2016 Jan 5-Dec 31 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr 09:00-17:00; 2016 Jan 5-Dec 31 Sa <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 5-Dec 31 Tu,Th,Fr 09:00-17:00; 2016 Jan 5-Dec 31 Sa 08:00-12:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr 09:00-17:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr 09:00-17:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr 09:00-17:00; 2016 Jan 4-Dec 31 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr 09:00-17:00; 2016 Jan 4-Dec 31 Sa <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 31 Mo-Fr 09:00-17:00; 2016 Jan 4-Dec 31 Sa 08:00-12:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

CHEMNITZ: Wochenmarkt
Error: 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 <--- (The selector "month" was switched with the selector "weekday" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 Mo-Fr <--- (The selector "weekday" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 Mo-Fr 09:00-16:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 Mo-Fr 09:00-16:00; 2016 <--- (The selector "year" was switched with the selector "month" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 Mo-Fr 09:00-16:00; 2016 Dec 31 <--- (The selector "month" was switched with the selector "time" for readablitity and compatibiltity reasons.),2016 Jan 4-Dec 30 Mo-Fr 09:00-16:00; 2016 Dec 31 08:00-12:00 <--- (The selector "time" was switched with the selector "year" for readablitity and compatibiltity reasons.)

Validation done. 0 warning(s), 6 error(s) detected.

Can you please update chemnitz.json?

Add a loading screen

As discussed in #24 it would be nice to have a loading screen while

  • the JS loads
  • the list of cities loads
  • the data of the current city loads

Avoid page reload on city change

In my opinion there is no need for a full page reload when the city changes. On page load we should load the list of cities and the currently active city. When another city is chosen we can just load that city data and update the map. Hopefully that's faster than reloading the whole page.

Improve behavior when no city is selected

I think it's time to improve the behavior when no city is selected, i.e. when a user simply visits https://wo-ist-markt.de. Right now this auto-selects Karlsruhe, which was fine when this was primarily a project of the OK Lab Karlsruhe. Now, however, Karlsruhe should lose that special status.

Here's a suggestion of what we can do instead:

  1. Try to look up the user's location via the geolocation API. If that succeeds and we're close enough to a city in our list then we activate that city.
  2. If we're not close enough to a covered city or if location lookup fails then we display a list of the available cities in a popup. Instead of a list we could also display a miniature map of Germany with all the covered cities (that would also be a nice addition to the existing city dropdown in the legend).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.