cronus-theme 2.0.95 → 2.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/default/b2b/build/doc/doc.css +1 -1
  2. package/default/b2b/dist/css/addons/errorPages.css +1 -1
  3. package/default/b2b/dist/css/addons/fck.css +1 -1
  4. package/default/b2b/dist/css/addons/kss.css +1 -1
  5. package/default/b2b/dist/css/doc.css +1 -1
  6. package/default/b2b/dist/css/doc1744018693.css +1 -0
  7. package/default/{catalog/dist/fonts/icons1743429303.woff → b2b/dist/fonts/icons1744018693.woff} +0 -0
  8. package/default/b2b/dist/fonts/icons1744018693.woff2 +0 -0
  9. package/default/b2b/dist/snippets/css/doc.html +1 -1
  10. package/default/b2b/dist/snippets/iconfont.html +1 -1
  11. package/default/b2b/dist/snippets/js/account.html +1 -1
  12. package/default/b2b/dist/snippets/js/itemcard.html +1 -1
  13. package/default/b2b/dist/snippets/js/main.html +1 -1
  14. package/default/b2b/dist/snippets/js/order.html +1 -1
  15. package/default/b2b/dist/snippets/js/salesperson.html +1 -1
  16. package/default/{catalog/src/icons/icons1743429303.woff → b2b/src/icons/icons1744018693.woff} +0 -0
  17. package/default/b2b/src/icons/icons1744018693.woff2 +0 -0
  18. package/default/b2b/src/scss/account.scss +2 -0
  19. package/default/b2b/src/scss/base/_icons.scss +2 -2
  20. package/default/b2b/src/scss/main.scss +2 -0
  21. package/default/b2b/styleguide/item-form-file-input.html +1 -2
  22. package/default/b2c/build/doc/doc.css +1 -1
  23. package/default/b2c/dist/css/account.css +1 -1
  24. package/default/b2c/dist/css/{account1743429290.css → account1744018688.css} +1 -1
  25. package/default/b2c/dist/css/addons/errorPages.css +1 -1
  26. package/default/b2c/dist/css/addons/fck.css +1 -1
  27. package/default/b2c/dist/css/addons/kss.css +1 -1
  28. package/default/b2c/dist/css/doc.css +1 -1
  29. package/default/b2c/dist/css/{doc1743429290.css → doc1744018688.css} +1 -1
  30. package/default/b2c/dist/css/main.css +1 -1
  31. package/default/b2c/dist/css/{main1743429290.css → main1744018688.css} +1 -1
  32. package/default/b2c/dist/css/order.css +1 -1
  33. package/default/b2c/dist/css/{order1743429290.css → order1744018688.css} +1 -1
  34. package/default/b2c/dist/fonts/icons1744018688.woff +0 -0
  35. package/default/b2c/dist/fonts/icons1744018688.woff2 +0 -0
  36. package/default/b2c/dist/snippets/css/account.html +1 -1
  37. package/default/b2c/dist/snippets/css/doc.html +1 -1
  38. package/default/b2c/dist/snippets/css/main.html +1 -1
  39. package/default/b2c/dist/snippets/css/order.html +1 -1
  40. package/default/b2c/dist/snippets/iconfont.html +1 -1
  41. package/default/b2c/dist/snippets/js/account.html +1 -1
  42. package/default/b2c/dist/snippets/js/itemcard.html +1 -1
  43. package/default/b2c/dist/snippets/js/main.html +1 -1
  44. package/default/b2c/dist/snippets/js/order.html +1 -1
  45. package/default/b2c/src/icons/icons1744018688.woff +0 -0
  46. package/default/b2c/src/icons/icons1744018688.woff2 +0 -0
  47. package/default/b2c/src/scss/base/_icons.scss +2 -2
  48. package/default/catalog/build/doc/doc.css +70 -53
  49. package/default/catalog/dist/css/addons/errorPages.css +1 -1
  50. package/default/catalog/dist/css/addons/fck.css +1 -1
  51. package/default/catalog/dist/css/doc.css +1 -1
  52. package/default/catalog/dist/css/doc1744018699.css +1 -0
  53. package/default/catalog/dist/fonts/icons1744018699.woff +0 -0
  54. package/default/catalog/dist/fonts/icons1744018699.woff2 +0 -0
  55. package/default/catalog/dist/snippets/css/doc.html +1 -1
  56. package/default/catalog/dist/snippets/iconfont.html +1 -1
  57. package/default/catalog/dist/snippets/js/account.html +1 -1
  58. package/default/catalog/dist/snippets/js/itemcard.html +1 -1
  59. package/default/catalog/dist/snippets/js/main.html +1 -1
  60. package/default/catalog/dist/snippets/js/order.html +1 -1
  61. package/default/catalog/src/icons/icons1744018699.woff +0 -0
  62. package/default/catalog/src/icons/icons1744018699.woff2 +0 -0
  63. package/default/catalog/src/scss/base/_icons.scss +2 -2
  64. package/default/catalog/src/scss/main.scss +2 -0
  65. package/default/catalog/styleguide/item-base-lists.html +1 -1
  66. package/default/catalog/styleguide/item-components-action-icon.html +1 -1
  67. package/default/catalog/styleguide/item-components-alerts.html +1 -1
  68. package/default/catalog/styleguide/item-components-breadcrumb.html +1 -1
  69. package/default/catalog/styleguide/item-components-custom-select.html +1 -1
  70. package/default/catalog/styleguide/item-components-iconbar.html +1 -1
  71. package/default/catalog/styleguide/item-components-iconbox.html +1 -1
  72. package/default/catalog/styleguide/item-components-iconlist.html +1 -1
  73. package/default/catalog/styleguide/item-components-max-height-content.html +1 -1
  74. package/default/catalog/styleguide/item-components-modals.html +1 -1
  75. package/default/catalog/styleguide/item-components-pagination.html +1 -1
  76. package/default/catalog/styleguide/item-components-processbar.html +1 -1
  77. package/default/catalog/styleguide/item-components-radio-list.html +1 -1
  78. package/default/catalog/styleguide/item-components-rating.html +1 -1
  79. package/default/catalog/styleguide/item-components-searchbar.html +1 -1
  80. package/default/catalog/styleguide/item-components-share-links.html +1 -1
  81. package/default/catalog/styleguide/item-components-tags-group.html +1 -1
  82. package/default/catalog/styleguide/item-components-tags.html +1 -1
  83. package/default/catalog/styleguide/item-components-trust-infobar.html +1 -1
  84. package/default/catalog/styleguide/item-components-trustbar.html +1 -1
  85. package/default/catalog/styleguide/item-components-trustlist.html +1 -1
  86. package/default/catalog/styleguide/item-form-infield-input-groups.html +1 -1
  87. package/default/catalog/styleguide/item-form-input-groups-addons.html +1 -1
  88. package/default/catalog/styleguide/item-form-input-groups.html +1 -1
  89. package/default/catalog/styleguide/item-navigations-mainnav.html +1 -1
  90. package/default/catalog/styleguide/item-navigations-nav.html +1 -1
  91. package/default/catalog/styleguide/item-navigations-navgroup.html +1 -1
  92. package/default/catalog/styleguide/item-navigations-subnav.html +1 -1
  93. package/default/catalog/styleguide/item-navigations-toggle-navigation.html +1 -1
  94. package/default/catalog/styleguide/item-shop-account-infobox.html +1 -1
  95. package/default/catalog/styleguide/item-shop-accountbox.html +1 -1
  96. package/default/catalog/styleguide/item-shop-attributes-icons.html +1 -1
  97. package/default/catalog/styleguide/item-shop-categorybox.html +1 -1
  98. package/default/catalog/styleguide/item-shop-categorylist-itempreview.html +1 -1
  99. package/default/catalog/styleguide/item-shop-categorylist.html +1 -1
  100. package/default/catalog/styleguide/item-shop-filter.html +1 -1
  101. package/default/catalog/styleguide/item-shop-inventory.html +1 -1
  102. package/default/catalog/styleguide/item-shop-list-type-switch.html +1 -1
  103. package/default/catalog/styleguide/item-shop-orderboxsummary.html +1 -1
  104. package/default/catalog/styleguide/item-shop-prices-list-graduated.html +1 -1
  105. package/default/catalog/styleguide/item-shop-prices-list.html +1 -1
  106. package/default/catalog/styleguide/item-shop-prices.html +1 -1
  107. package/default/catalog/styleguide/item-shop-promotions.html +1 -1
  108. package/default/catalog/styleguide/item-shop-selected-salesperson-box.html +1 -1
  109. package/default/catalog/styleguide/item-shop-sorting.html +1 -1
  110. package/default/catalog/styleguide/item-shop-state.html +1 -1
  111. package/default/catalog/styleguide/item-shop-variantselection.html +1 -1
  112. package/default/catalog/styleguide/item-siteparts-filegallery.html +1 -1
  113. package/default/catalog/styleguide/item-siteparts-scrollbar.html +1 -1
  114. package/default/catalog/styleguide/item-siteparts-slidecontent.html +1 -1
  115. package/default/catalog/styleguide/item-typo-link-with-icon.html +1 -1
  116. package/default/catalog/styleguide/section-base.html +1 -1
  117. package/default/catalog/styleguide/section-components.html +20 -20
  118. package/default/catalog/styleguide/section-form.html +3 -3
  119. package/default/catalog/styleguide/section-navigations.html +5 -5
  120. package/default/catalog/styleguide/section-shop.html +18 -18
  121. package/default/catalog/styleguide/section-siteparts.html +3 -3
  122. package/default/catalog/styleguide/section-typo.html +1 -1
  123. package/default/global/scss/externals/_openStreetMap.scss +61 -0
  124. package/default/global/scss/shop/_customerMap.scss +66 -0
  125. package/default/login/build/doc/doc.css +1 -1
  126. package/default/login/dist/css/addons/errorPages.css +1 -1
  127. package/default/login/dist/css/addons/fck.css +1 -1
  128. package/default/login/dist/css/addons/kss.css +1 -1
  129. package/default/login/dist/css/doc.css +1 -1
  130. package/default/login/dist/css/{doc1743429300.css → doc1744018696.css} +1 -1
  131. package/default/login/dist/css/main.css +1 -1
  132. package/default/login/dist/css/{main1743429300.css → main1744018696.css} +1 -1
  133. package/default/{b2b/dist/fonts/icons1743429295.woff → login/dist/fonts/icons1744018696.woff} +0 -0
  134. package/default/login/dist/fonts/icons1744018696.woff2 +0 -0
  135. package/default/login/dist/snippets/css/doc.html +1 -1
  136. package/default/login/dist/snippets/css/main.html +1 -1
  137. package/default/login/dist/snippets/iconfont.html +1 -1
  138. package/default/login/dist/snippets/js/main.html +1 -1
  139. package/default/{b2b/src/icons/icons1743429295.woff → login/src/icons/icons1744018696.woff} +0 -0
  140. package/default/login/src/icons/icons1744018696.woff2 +0 -0
  141. package/default/login/src/scss/base/_icons.scss +2 -2
  142. package/default/templates/shop/customerMap.mustache +226 -82
  143. package/default/website/build/doc/doc.css +1 -1
  144. package/default/website/dist/css/addons/errorPages.css +1 -1
  145. package/default/website/dist/css/addons/fck.css +1 -1
  146. package/default/website/dist/css/addons/kss.css +1 -1
  147. package/default/website/dist/css/doc.css +1 -1
  148. package/default/website/dist/css/{doc1743429306.css → doc1744018702.css} +1 -1
  149. package/default/website/dist/css/main.css +1 -1
  150. package/default/website/dist/css/{main1743429306.css → main1744018702.css} +1 -1
  151. package/default/website/dist/fonts/icons1744018702.woff +0 -0
  152. package/default/website/dist/fonts/icons1744018702.woff2 +0 -0
  153. package/default/website/dist/snippets/css/doc.html +1 -1
  154. package/default/website/dist/snippets/css/main.html +1 -1
  155. package/default/website/dist/snippets/iconfont.html +1 -1
  156. package/default/website/dist/snippets/js/main.html +1 -1
  157. package/default/website/src/icons/icons1744018702.woff +0 -0
  158. package/default/website/src/icons/icons1744018702.woff2 +0 -0
  159. package/default/website/src/scss/base/_icons.scss +2 -2
  160. package/package.json +1 -1
  161. package/default/b2b/dist/css/account.css +0 -1
  162. package/default/b2b/dist/css/account1743429295.css +0 -1
  163. package/default/b2b/dist/css/doc1743429295.css +0 -1
  164. package/default/b2b/dist/css/main.css +0 -1
  165. package/default/b2b/dist/css/main1743429295.css +0 -1
  166. package/default/b2b/dist/css/order.css +0 -1
  167. package/default/b2b/dist/css/order1743429295.css +0 -1
  168. package/default/b2b/dist/css/salesperson.css +0 -1
  169. package/default/b2b/dist/css/salesperson1743429295.css +0 -1
  170. package/default/b2b/dist/fonts/icons1743429295.woff2 +0 -0
  171. package/default/b2b/dist/snippets/css/account.html +0 -1
  172. package/default/b2b/dist/snippets/css/main.html +0 -1
  173. package/default/b2b/dist/snippets/css/order.html +0 -1
  174. package/default/b2b/dist/snippets/css/salesperson.html +0 -1
  175. package/default/b2b/src/icons/icons1743429295.woff2 +0 -0
  176. package/default/b2c/dist/fonts/icons1743429290.woff +0 -0
  177. package/default/b2c/dist/fonts/icons1743429290.woff2 +0 -0
  178. package/default/b2c/src/icons/icons1743429290.woff +0 -0
  179. package/default/b2c/src/icons/icons1743429290.woff2 +0 -0
  180. package/default/catalog/dist/css/doc1743429303.css +0 -1
  181. package/default/catalog/dist/css/main.css +0 -1
  182. package/default/catalog/dist/css/main1743429303.css +0 -1
  183. package/default/catalog/dist/fonts/icons1743429303.woff2 +0 -0
  184. package/default/catalog/dist/snippets/css/main.html +0 -1
  185. package/default/catalog/src/icons/icons1743429303.woff2 +0 -0
  186. package/default/login/dist/fonts/icons1743429300.woff +0 -0
  187. package/default/login/dist/fonts/icons1743429300.woff2 +0 -0
  188. package/default/login/src/icons/icons1743429300.woff +0 -0
  189. package/default/login/src/icons/icons1743429300.woff2 +0 -0
  190. package/default/website/dist/fonts/icons1743429306.woff +0 -0
  191. package/default/website/dist/fonts/icons1743429306.woff2 +0 -0
  192. package/default/website/src/icons/icons1743429306.woff +0 -0
  193. package/default/website/src/icons/icons1743429306.woff2 +0 -0
  194. /package/default/b2b/dist/js/{account1743429295.js → account1744018693.js} +0 -0
  195. /package/default/b2b/dist/js/{itemcard1743429295.js → itemcard1744018693.js} +0 -0
  196. /package/default/b2b/dist/js/{main1743429295.js → main1744018693.js} +0 -0
  197. /package/default/b2b/dist/js/{order1743429295.js → order1744018693.js} +0 -0
  198. /package/default/b2b/dist/js/{salesperson1743429295.js → salesperson1744018693.js} +0 -0
  199. /package/default/b2c/dist/js/{account1743429290.js → account1744018688.js} +0 -0
  200. /package/default/b2c/dist/js/{itemcard1743429290.js → itemcard1744018688.js} +0 -0
  201. /package/default/b2c/dist/js/{main1743429290.js → main1744018688.js} +0 -0
  202. /package/default/b2c/dist/js/{order1743429290.js → order1744018688.js} +0 -0
  203. /package/default/catalog/dist/js/{account1743429303.js → account1744018699.js} +0 -0
  204. /package/default/catalog/dist/js/{itemcard1743429303.js → itemcard1744018699.js} +0 -0
  205. /package/default/catalog/dist/js/{main1743429303.js → main1744018699.js} +0 -0
  206. /package/default/catalog/dist/js/{order1743429303.js → order1744018699.js} +0 -0
  207. /package/default/login/dist/js/{main1743429300.js → main1744018696.js} +0 -0
  208. /package/default/website/dist/js/{main1743429306.js → main1744018702.js} +0 -0
@@ -1 +1 @@
1
- <script src="/layout/frontend/default/login/dist/js/main1743429300.js"></script>
1
+ <script src="/layout/frontend/default/login/dist/js/main1744018696.js"></script>
@@ -1,8 +1,8 @@
1
1
  @font-face {
2
2
  font-family: "icons";
3
3
  font-display: swap;
4
- src: url('../fonts/icons1743429300.woff2') format('woff2'),
5
- url('../fonts/icons1743429300.woff') format('woff');
4
+ src: url('../fonts/icons1744018696.woff2') format('woff2'),
5
+ url('../fonts/icons1744018696.woff') format('woff');
6
6
  }
7
7
 
8
8
  .icon {
@@ -1,36 +1,48 @@
1
- <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>
2
- <script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
3
-
4
- <link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.1/dist/MarkerCluster.css" />
5
- <link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.1/dist/MarkerCluster.Default.css" />
6
- <script src="https://unpkg.com/leaflet.markercluster@1.5.1/dist/leaflet.markercluster.js"></script>
7
-
8
- <link rel="stylesheet" href="https://unpkg.com/leaflet.awesome-markers@2.0.5/dist/leaflet.awesome-markers.css" />
9
- <script src="https://unpkg.com/leaflet.awesome-markers@2.0.5/dist/leaflet.awesome-markers.js"></script>
10
- <link rel="stylesheet" href="https://unpkg.com/font-awesome@4.7.0/css/font-awesome.min.css" />
11
-
12
-
13
-
14
- <label class="specialcheckbox" for="toggleShipping">
15
- <input type="checkbox" name="toggleShipping" id="toggleShipping" class="" aria-label="{{tc.show_shipping_addresses}}">
16
- <i></i>
17
- <span aria-hidden="true">{{tc.show_shipping_addresses}}</span>
18
- </label>
19
- <div class="row gridGap--small align-items-end">
20
- <div class="col-12 col-sm-6 col-md-4 col-lg-3 marginBottom">
21
- <label for="zipSearch">{{tc.area_code}}</label>
22
- <input type="text" name="zipSearch" id="zipSearch" placeholder="{{tc.area_code}}">
23
- </div>
24
- <div class="col-12 col-sm-6 col-md-4 col-lg-3 marginBottom">
25
- <label for="radius">{{tc.radius}}</label>
26
- <input type="number" name="radius" id="radius" value="50">
1
+ <link rel="stylesheet" href="/plugins/openstreetmap/css/leaflet.css"/>
2
+ <link rel="stylesheet" href="/plugins/openstreetmap/css/MarkerCluster.css" />
3
+ <link rel="stylesheet" href="/plugins/openstreetmap/css/MarkerCluster.Default.css" />
4
+ <link rel="stylesheet" href="/plugins/openstreetmap/css/leaflet.awesome-markers.css" />
5
+ <link rel="stylesheet" href="/plugins/openstreetmap/css/font-awesome.min.css" />
6
+
7
+ <div class="customerMap">
8
+ <div class="customerMap__filter marginBottom">
9
+ <div class="row gridGap--small align-items-end">
10
+ <div class="col-12 col-sm-8 col-md-6 col-lg-4 marginBottom">
11
+ <div class="customerMapSearch">
12
+ <label for="zipSearch">{{tc.address}}</label>
13
+ <div class="inputGroup customerMapSearch__bar">
14
+ <input type="text" name="zipSearch" id="zipSearch" autocomplete="off" placeholder="{{tc.address}}">
15
+ </div>
16
+ <div id="zipSuggestions" class="customerMapSearch__suggestions"></div>
17
+ </div>
18
+ </div>
19
+ <div class="col-4 col-sm-4 col-md-3 col-lg-2 marginBottom">
20
+ <label for="radius">{{tc.radius}}</label>
21
+ <div class="inputGroup">
22
+ <input type="number" name="radius" id="radius" value="50">
23
+ </div>
24
+ </div>
25
+ <div class="col-8 col-sm marginBottom">
26
+ <button id="searchBtn" type="submit" class="button button--primary">{{tc.filter}}</button>
27
+ <button id="resetBtn" type="reset" class="button">{{tc.reset}}</button>
28
+ </div>
29
+ </div>
30
+ <label class="specialcheckbox" for="toggleShipping">
31
+ <input type="checkbox" name="toggleShipping" id="toggleShipping" aria-label="{{tc.show_shipping_addresses}}">
32
+ <i></i>
33
+ <span aria-hidden="true">{{tc.show_shipping_addresses}}</span>
34
+ </label>
27
35
  </div>
28
- <div class="col marginBottom">
29
- <button id="searchBtn" type="submit" class="button button--primary">{{tc.filter}}</button>
30
- <button id="resetBtn" type="reset" class="button">{{tc.reset}}</button>
36
+ <div class="openStreetMap">
37
+ <div id="map" class="openStreetMap__target">
38
+
39
+ </div>
31
40
  </div>
32
41
  </div>
33
- <div id="map" style="width: 100%; height: 500px;"></div>
42
+
43
+ <script src="/plugins/openstreetmap/js/leaflet.js"></script>
44
+ <script src="/plugins/openstreetmap/js/leaflet.markercluster.js"></script>
45
+ <script src="/plugins/openstreetmap/js/leaflet.awesome-markers.js"></script>
34
46
 
35
47
  <script>
36
48
  const customStorageKey = '{{userid}}';
@@ -48,20 +60,133 @@
48
60
  return R * c;
49
61
  }
50
62
 
51
- const nominatimURL = "https://nominatim.openstreetmap.org/search?format=json&countrycodes=DE&addressdetails=1&q=";
63
+ const nominatimURL = "https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&q=";
52
64
  const plzCache = JSON.parse(localStorage.getItem("plzCache_" + customStorageKey)) || {};
53
65
 
54
66
  let filterActive = false;
55
67
  let currentCenter = null;
56
68
  let currentRadius = 10;
57
69
  let zipMarker = null;
70
+ let currentRequestController = null;
71
+
72
+ async function fetchZipSuggestions(query) {
73
+ if (currentRequestController) {
74
+ currentRequestController.abort();
75
+ }
76
+
77
+ currentRequestController = new AbortController();
78
+ const { signal } = currentRequestController;
79
+ const zipSuggestions = document.getElementById("zipSuggestions");
80
+ const customerMapSearch = zipSuggestions.closest(".customerMapSearch");
81
+ customerMapSearch.classList.add("is-loading");
82
+ try {
83
+ let response = await fetch(nominatimURL + query, { signal });
84
+ if (!response.ok) throw new Error("Request failed");
85
+ return await response.json();
86
+ } catch (error) {
87
+ if (error.name !== "AbortError") {
88
+ console.error("Fehler beim Abrufen der PLZ-Daten", error);
89
+ }
90
+ return [];
91
+ } finally {
92
+ customerMapSearch.classList.remove("is-loading");
93
+ }
94
+ }
58
95
 
59
96
  document.addEventListener("DOMContentLoaded", function () {
97
+
60
98
  const zipInput = document.getElementById("zipSearch");
99
+ const zipSuggestions = document.getElementById("zipSuggestions");
100
+ const zipCache = new Map();
101
+ let lastSelectedCoords = null;
61
102
  const radiusInput = document.getElementById("radius");
62
103
  const searchBtn = document.getElementById("searchBtn");
63
104
  const resetBtn = document.getElementById("resetBtn");
64
105
  const toggleShipping = document.getElementById("toggleShipping");
106
+ let debounceTimeout = null;
107
+
108
+ zipInput.addEventListener("input", function() {
109
+ let query = zipInput.value.trim();
110
+ if (query.length < 3) {
111
+ zipSuggestions.style.display = "none";
112
+ return;
113
+ }
114
+
115
+ lastSelectedCoords = null;
116
+
117
+ if (zipCache.has(query)) {
118
+ showSuggestions(zipCache.get(query));
119
+ return;
120
+ }
121
+
122
+ clearTimeout(debounceTimeout);
123
+ debounceTimeout = setTimeout(async () => {
124
+ let data = await fetchZipSuggestions(query);
125
+ zipCache.set(query, data);
126
+ showSuggestions(data);
127
+ }, 300);
128
+ });
129
+
130
+ function showSuggestions(data) {
131
+ zipSuggestions.innerHTML = "";
132
+ if (data.length === 0) {
133
+ zipSuggestions.style.display = "none";
134
+ return;
135
+ }
136
+ const zipSuggestionMarkup = `<div class="customerMapSearch__suggestion">%address%, %postcode% %city% %country%</div>`;
137
+ let count = 0;
138
+ for (let i = 0; i < data.length; i++) {
139
+ const entry = data[i];
140
+ const {
141
+ road = "",
142
+ house_number = "",
143
+ postcode = "",
144
+ town = "",
145
+ country_code = ""
146
+ } = entry.address;
147
+
148
+ const fullAddress = `${road}${house_number ? " " + house_number : ""}`;
149
+
150
+ const zipSuggestionMarkupReplace = zipSuggestionMarkup
151
+ .replace("%address%", fullAddress)
152
+ .replace("%postcode%", postcode)
153
+ .replace("%city%", town)
154
+ .replace("%country%", country_code.toUpperCase());
155
+
156
+ if(fullAddress === ""){
157
+ break;
158
+ }
159
+
160
+ const parser = new DOMParser();
161
+ const doc = parser.parseFromString(zipSuggestionMarkupReplace, 'text/html');
162
+ const item = doc.body.firstElementChild;
163
+
164
+ item.classList.add("customerMapSearch__suggestion");
165
+ item.dataset.lat = entry.lat;
166
+ item.dataset.lon = entry.lon;
167
+ item.addEventListener("click", function() {
168
+ zipInput.value = item.innerText;
169
+ let center = { lat: entry.lat, lon: entry.lon };
170
+ applyFilter(center);
171
+ lastSelectedCoords = { lat: entry.lat, lon: entry.lon };
172
+ let storageZip = JSON.stringify({ postcode, lat: entry.lat, lon: entry.lon });
173
+ localStorage.setItem("zip_" + customStorageKey, storageZip);
174
+ zipSuggestions.style.display = "none";
175
+ });
176
+ zipSuggestions.appendChild(item);
177
+ count++;
178
+ }
179
+
180
+ if(count > 0){
181
+ zipSuggestions.style.display = "block";
182
+ }
183
+ }
184
+
185
+ document.addEventListener("click", function(event) {
186
+ if (!zipInput.contains(event.target) && !zipSuggestions.contains(event.target)) {
187
+ zipSuggestions.style.display = "none";
188
+ }
189
+ });
65
190
 
66
191
  zipInput.addEventListener("keypress", function(event) {
67
192
  if (event.key === "Enter") {
@@ -85,23 +210,29 @@
85
210
  });
86
211
 
87
212
  const map = L.map('map');
88
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
89
- attribution: '&copy; OpenStreetMap contributors'
213
+
214
+ map.zoomControl.remove();
215
+ L.control.zoom({
216
+ position: 'topleft'
90
217
  }).addTo(map);
91
218
 
92
- const shippingIcon = L.AwesomeMarkers.icon({ icon: 'info-circle', markerColor: 'red', prefix: 'fa' });
93
- const invoiceIcon = L.AwesomeMarkers.icon({ icon: 'info-circle', markerColor: 'blue', prefix: 'fa' });
94
- const centerIcon = L.AwesomeMarkers.icon({ icon: 'map-marker', markerColor: 'green', prefix: 'fa' });
95
- //Beispiel für custom Marker
96
- /*
97
- let customMarker = L.divIcon({
98
- className: 'custom-marker',
99
- html: '<div class="marker-circle">1</div>',
100
- iconSize: [30, 30],
101
- iconAnchor: [15, 15]
219
+ document.querySelectorAll(".leaflet-control-zoom a").forEach(button => {
220
+ button.removeAttribute("href");
102
221
  });
103
- marker = L.marker([pin.latitude, pin.longitude], { icon: customMarker });
104
- */
222
+
223
+ //light styling
224
+ L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
225
+ attribution: '&copy; OpenStreetMap contributors'
226
+ }).addTo(map);
227
+
228
+ //base styling
229
+ /*L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
230
+ attribution: '&copy; OpenStreetMap contributors'
231
+ }).addTo(map);*/
232
+
233
+ const shippingIcon = L.AwesomeMarkers.icon({ icon: 'truck', markerColor: 'gray', prefix: 'fa' });
234
+ const invoiceIcon = L.AwesomeMarkers.icon({ icon: 'user', markerColor: 'black', prefix: 'fa' });
235
+ const centerIcon = L.AwesomeMarkers.icon({ icon: 'map-marker', markerColor: 'lightgray', prefix: 'fa' });
105
236
 
106
237
  let markersClusterInvoice = L.markerClusterGroup();
107
238
  let markersClusterShipping = L.markerClusterGroup();
@@ -116,27 +247,24 @@
116
247
  }
117
248
 
118
249
  pins.forEach(pin => {
119
- if (!pin.show) {
120
- return;
121
- }
122
- if (!toggleShipping.checked && pin.isShippingAddress === 1) return;
250
+ if (!pin.show || (!toggleShipping.checked && pin.isShippingAddress === 1)) return;
123
251
 
124
252
  let distanceText = '';
125
253
  if (filterActive) {
126
254
  const distance = getDistance(currentCenter.lat, currentCenter.lon, pin.latitude, pin.longitude);
127
255
  if (distance > currentRadius) return;
128
- distanceText = ` (${distance.toFixed(1)} km)`;
256
+ distanceText = '' //` (${distance.toFixed(1)} km)`;
129
257
  }
130
258
 
131
259
  let marker = L.marker([pin.latitude, pin.longitude], { icon: pin.isShippingAddress ? shippingIcon : invoiceIcon });
132
- let address = pin.address + ', ' + pin.post_code + ' ' + pin.city + ', ' + pin.country;
133
- let formStart = '<form id="customer_select" name="customer_select" method="post" action=""><input type="hidden" name="select_customer" value="select_customer"><input type="hidden" name="customer_select" value="' + pin.customer_no + '">';
260
+ let address = `${pin.address}, ${pin.post_code} ${pin.city}, ${pin.country}`;
261
+ let formStart = `<form id="customer_select" name="customer_select" method="post" action=""><input type="hidden" name="select_customer" value="select_customer"><input type="hidden" name="customer_select" value="${pin.customer_no}">`;
134
262
  let formEnd = '</form>';
135
- let balance = '{{tc.current_balance}}: ' + pin.balance;
136
- let balanceDue = '{{tc.current_balance_due}}: ' + pin.balance_due;
137
- let creditLimit = '{{tc.current_credit_limit}}: ' + pin.credit_limit;
263
+ let balance = '' //`{{tc.current_balance}}: ${pin.balance}`;
264
+ let balanceDue = '' //`{{tc.current_balance_due}}: ${pin.balance_due}`;
265
+ let creditLimit = '' //`{{tc.current_credit_limit}}: ${pin.credit_limit}`;
138
266
 
139
- marker.bindPopup('<div style="font-size: 11px; line-height: 0;">' + formStart + '<p onclick="this.closest(\'form\').submit();" style="text-decoration: underline; cursor: pointer;">' + pin.customer_no + '</p>' + formEnd + '<p>' + pin.name + '</p><p>' + address + '</p><p>' + balance + '</p><p>' + balanceDue + '</p><p>' + creditLimit + '</p><p>' + distanceText + '</p></div>');
267
+ marker.bindPopup(`<div style="font-size: 11px; line-height: 0;">${formStart}<p onclick="this.closest('form').submit();" style="text-decoration: underline; cursor: pointer;">${pin.customer_no}</p>${formEnd}<p>${pin.name}</p><p>${address}</p><p>${balance}</p><p>${balanceDue}</p><p>${creditLimit}</p><p>${distanceText}</p></div>`);
140
268
  pin.isShippingAddress ? markersClusterShipping.addLayer(marker) : markersClusterInvoice.addLayer(marker);
141
269
  });
142
270
 
@@ -150,7 +278,7 @@
150
278
  }
151
279
 
152
280
  if (bounds.isValid()) {
153
- map.fitBounds(bounds, { padding: [20, 20] });
281
+ map.fitBounds(bounds, { padding: [30, 30] });
154
282
  } else {
155
283
  map.setView([51.1657, 10.4515], 6);
156
284
  }
@@ -163,33 +291,41 @@
163
291
  const zip = zipInput.value.trim();
164
292
  currentRadius = parseFloat(radiusInput.value);
165
293
 
166
- localStorage.setItem("zip_" + customStorageKey, zip);
167
294
  localStorage.setItem("radius_" + customStorageKey, currentRadius);
168
295
 
169
- if (!zip) {
170
- resetFilter();
171
- return;
172
- }
173
-
174
- if (plzCache[zip]) {
175
- applyFilter(plzCache[zip]);
296
+ if (lastSelectedCoords && lastSelectedCoords.lat && lastSelectedCoords.lon) {
297
+ if (!zip) {
298
+ resetFilter();
299
+ return;
300
+ }
301
+ applyFilter(lastSelectedCoords);
176
302
  } else {
177
- fetch(nominatimURL + zip)
178
- .then(response => response.json())
179
- .then(data => {
180
- if (data.length === 0) {
181
- return;
182
- }
183
-
184
- const center = { lat: parseFloat(data[0].lat), lon: parseFloat(data[0].lon) };
185
- plzCache[zip] = center;
186
- localStorage.setItem("plzCache_" + customStorageKey, JSON.stringify(plzCache));
187
-
188
- applyFilter(center);
189
- })
190
- .catch(error => {
191
- console.error("Fehler beim Abrufen der Koordinaten:", error);
192
- });
303
+ let storageZip = JSON.stringify({ zip });
304
+ localStorage.setItem("zip_" + customStorageKey, storageZip);
305
+
306
+ if (!zip) {
307
+ resetFilter();
308
+ return;
309
+ }
310
+
311
+ if (plzCache[zip]) {
312
+ applyFilter(plzCache[zip]);
313
+ } else {
314
+ fetch(nominatimURL + zip)
315
+ .then(response => response.json())
316
+ .then(data => {
317
+ if (data.length === 0) return;
318
+
319
+ const center = { lat: parseFloat(data[0].lat), lon: parseFloat(data[0].lon) };
320
+ plzCache[zip] = center;
321
+ localStorage.setItem("plzCache_" + customStorageKey, JSON.stringify(plzCache));
322
+
323
+ applyFilter(center);
324
+ })
325
+ .catch(error => {
326
+ console.error("Fehler beim Abrufen der Koordinaten:", error);
327
+ });
328
+ }
193
329
  }
194
330
  }
195
331
 
@@ -205,13 +341,21 @@
205
341
  radiusInput.value = 50;
206
342
  localStorage.removeItem("zip_" + customStorageKey);
207
343
  localStorage.removeItem("radius_" + customStorageKey);
344
+ lastSelectedCoords = null;
208
345
  updateMap();
209
346
  }
210
347
 
211
348
  searchBtn.addEventListener("click", filterByRadius);
212
349
  resetBtn.addEventListener("click", resetFilter);
213
350
 
214
- zipInput.value = localStorage.getItem("zip_" + customStorageKey) ?? "";
351
+ let storageZip = localStorage.getItem("zip_" + customStorageKey);
352
+ if (storageZip) {
353
+ storageZip = JSON.parse(storageZip);
354
+ zipInput.value = storageZip.zip;
355
+ lastSelectedCoords = { lat: storageZip.lat, lon: storageZip.lon };
356
+ } else {
357
+ zipInput.value = "";
358
+ }
215
359
  radiusInput.value = localStorage.getItem("radius_" + customStorageKey) ?? 50;
216
360
 
217
361
  filterByRadius();
@@ -364,7 +364,7 @@ table {
364
364
  @font-face {
365
365
  font-family: "icons";
366
366
  font-display: swap;
367
- src: url("../fonts/icons1743429306.woff2") format("woff2"), url("../fonts/icons1743429306.woff") format("woff");
367
+ src: url("../fonts/icons1744018702.woff2") format("woff2"), url("../fonts/icons1744018702.woff") format("woff");
368
368
  }
369
369
  .icon {
370
370
  font-family: "icons";