Here we need to build a really dynamic structure on the page like "Results for: <search-term> in <filter1> or <filter2>" and the styling on each of the words needs to be a bit different, specifically the filter terms need to be differently styled to the join words like "in" and "or". We have to generate those bits on the Angular side, but they also have to be wrapped in HTML in a specific way.
$sce.trustAsHtml() marks the injected HTML as "safe" (in relation to security issues like XSS). In this case the injected content doesn't involve any user-defined data, so it should be fine.
Changes:
* Introduced a cluster marker to denote multiple points of interest at
the same location
* Seperated out a plain enterprise modal into 2 parts
* A modal called EnterpriseModal for showing a list of enterprises at
the same location
* A box called EnterpriseBox(which by the way is also a technically a
modal) that shows the details of that particular enterprise selected
* If at a location there exists only a single enterprise then only the
box is shown
- Simplify if statements with safe navigation operator
- Simplify order cycle nav check spec
- Rename nav check callback so a comment is not needed and remove unnecessary assignation to $scope
Debounce ensures we don't get a million requests if the up/down buttons are clicked rapidly. The onwheel hack adds some protection against scrolling triggering the quantity up/down. See: https://stackoverflow.com/a/51076231
When loading the page $watchGroup calls the listener function for every
listed line item but with a set variant and null quantity and
max_quantity. There's no point on computing an order change when there
was none.
This saves an empty request on the second most used endpoint of the app,
specially busy when users are placing orders.
The Geo service is used heavily in the /shops page and especially in the search function. If the google maps js library has failed to load it was throwing a lot of fatal errors, so this change ensures the /shops page can at least: a) load, b) show some shops, and c) search for shops by name (but not location)