@oiz/stzh-components 3.3.0-beta1 → 3.3.0-beta2

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 (118) hide show
  1. package/dist/cjs/{app-globals-c314a0a4.js → app-globals-a46f6656.js} +2 -2
  2. package/dist/cjs/{app-globals-c314a0a4.js.map → app-globals-a46f6656.js.map} +1 -1
  3. package/dist/cjs/index-92254d32.js +4 -0
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +2 -2
  6. package/dist/cjs/stzh-app-nav.cjs.entry.js +32 -0
  7. package/dist/cjs/stzh-app-nav.cjs.entry.js.map +1 -0
  8. package/dist/cjs/stzh-badge_3.cjs.entry.js +38 -17
  9. package/dist/cjs/stzh-badge_3.cjs.entry.js.map +1 -1
  10. package/dist/cjs/stzh-components.cjs.js +2 -2
  11. package/dist/cjs/stzh-datepicker_3.cjs.entry.js +2 -0
  12. package/dist/cjs/stzh-datepicker_3.cjs.entry.js.map +1 -1
  13. package/dist/cjs/stzh-header.cjs.entry.js +57 -17
  14. package/dist/cjs/stzh-header.cjs.entry.js.map +1 -1
  15. package/dist/cjs/stzh-olmap.cjs.entry.js.map +1 -1
  16. package/dist/cjs/stzh-pagetitle.cjs.entry.js +1 -1
  17. package/dist/cjs/stzh-pagetitle.cjs.entry.js.map +1 -1
  18. package/dist/cjs/stzh-row.cjs.entry.js +1 -1
  19. package/dist/cjs/stzh-row.cjs.entry.js.map +1 -1
  20. package/dist/collection/assets/i18n/de.json +3 -0
  21. package/dist/collection/assets/i18n/en.json +3 -0
  22. package/dist/collection/collection-manifest.json +1 -0
  23. package/dist/collection/components/stzh-app-nav/stzh-app-nav.css +247 -0
  24. package/dist/collection/components/stzh-app-nav/stzh-app-nav.e2e.js +16 -0
  25. package/dist/collection/components/stzh-app-nav/stzh-app-nav.e2e.js.map +1 -0
  26. package/dist/collection/components/stzh-app-nav/stzh-app-nav.js +79 -0
  27. package/dist/collection/components/stzh-app-nav/stzh-app-nav.js.map +1 -0
  28. package/dist/collection/components/stzh-app-nav/stzh-app-nav.localization.js +2 -0
  29. package/dist/collection/components/stzh-app-nav/stzh-app-nav.localization.js.map +1 -0
  30. package/dist/collection/components/stzh-app-nav/stzh-app-nav.stories.js +68 -0
  31. package/dist/collection/components/stzh-datepicker/stzh-datepicker.js +2 -0
  32. package/dist/collection/components/stzh-datepicker/stzh-datepicker.js.map +1 -1
  33. package/dist/collection/components/stzh-header/stzh-header.css +31 -2
  34. package/dist/collection/components/stzh-header/stzh-header.js +144 -21
  35. package/dist/collection/components/stzh-header/stzh-header.js.map +1 -1
  36. package/dist/collection/components/stzh-header/stzh-header.stories.js +72 -62
  37. package/dist/collection/components/stzh-icon/stzh-icon.js +38 -17
  38. package/dist/collection/components/stzh-icon/stzh-icon.js.map +1 -1
  39. package/dist/collection/components/stzh-olmap/stzh-olmap.js +1 -1
  40. package/dist/collection/components/stzh-olmap/stzh-olmap.js.map +1 -1
  41. package/dist/collection/components/stzh-pagetitle/stzh-pagetitle.css +0 -1
  42. package/dist/collection/components/stzh-row/stzh-row.css +184 -240
  43. package/dist/collection/index.js.map +1 -1
  44. package/dist/components/index.js +1 -1
  45. package/dist/components/index2.js.map +1 -1
  46. package/dist/components/stzh-app-nav.d.ts +11 -0
  47. package/dist/components/stzh-app-nav.js +8 -0
  48. package/dist/components/stzh-app-nav.js.map +1 -0
  49. package/dist/components/stzh-app-nav2.js +64 -0
  50. package/dist/components/stzh-app-nav2.js.map +1 -0
  51. package/dist/components/stzh-datepicker2.js +2 -0
  52. package/dist/components/stzh-datepicker2.js.map +1 -1
  53. package/dist/components/stzh-header.js +84 -25
  54. package/dist/components/stzh-header.js.map +1 -1
  55. package/dist/components/stzh-icon2.js +38 -17
  56. package/dist/components/stzh-icon2.js.map +1 -1
  57. package/dist/components/stzh-olmap.js.map +1 -1
  58. package/dist/components/stzh-pagetitle.js +1 -1
  59. package/dist/components/stzh-pagetitle.js.map +1 -1
  60. package/dist/components/stzh-row.js +1 -1
  61. package/dist/components/stzh-row.js.map +1 -1
  62. package/dist/esm/{app-globals-b82e4e9d.js → app-globals-93cc928b.js} +2 -2
  63. package/dist/esm/{app-globals-b82e4e9d.js.map → app-globals-93cc928b.js.map} +1 -1
  64. package/dist/esm/index-e3050b18.js +4 -0
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist/esm/loader.js +2 -2
  67. package/dist/esm/stzh-app-nav.entry.js +28 -0
  68. package/dist/esm/stzh-app-nav.entry.js.map +1 -0
  69. package/dist/esm/stzh-badge_3.entry.js +38 -17
  70. package/dist/esm/stzh-badge_3.entry.js.map +1 -1
  71. package/dist/esm/stzh-components.js +2 -2
  72. package/dist/esm/stzh-datepicker_3.entry.js +2 -0
  73. package/dist/esm/stzh-datepicker_3.entry.js.map +1 -1
  74. package/dist/esm/stzh-header.entry.js +57 -17
  75. package/dist/esm/stzh-header.entry.js.map +1 -1
  76. package/dist/esm/stzh-olmap.entry.js.map +1 -1
  77. package/dist/esm/stzh-pagetitle.entry.js +1 -1
  78. package/dist/esm/stzh-pagetitle.entry.js.map +1 -1
  79. package/dist/esm/stzh-row.entry.js +1 -1
  80. package/dist/esm/stzh-row.entry.js.map +1 -1
  81. package/dist/stzh-components/assets/i18n/de.json +3 -0
  82. package/dist/stzh-components/assets/i18n/en.json +3 -0
  83. package/dist/stzh-components/index.esm.js.map +1 -1
  84. package/dist/stzh-components/{p-d869745a.js → p-097bf2c2.js} +2 -2
  85. package/dist/stzh-components/p-10dc377b.entry.js +2 -0
  86. package/dist/stzh-components/p-10dc377b.entry.js.map +1 -0
  87. package/dist/stzh-components/p-487b6e52.entry.js +2 -0
  88. package/dist/stzh-components/p-487b6e52.entry.js.map +1 -0
  89. package/dist/stzh-components/p-4f7f4362.entry.js +2 -0
  90. package/dist/stzh-components/p-4f7f4362.entry.js.map +1 -0
  91. package/dist/stzh-components/p-6a1d65ce.entry.js +2 -0
  92. package/dist/stzh-components/p-6a1d65ce.entry.js.map +1 -0
  93. package/dist/stzh-components/p-b4f5d152.entry.js.map +1 -1
  94. package/dist/stzh-components/{p-c9265a65.entry.js → p-f0887c02.entry.js} +2 -2
  95. package/dist/stzh-components/p-f0887c02.entry.js.map +1 -0
  96. package/dist/stzh-components/p-f42f6787.entry.js +2 -0
  97. package/dist/stzh-components/p-f42f6787.entry.js.map +1 -0
  98. package/dist/stzh-components/stzh-components.esm.js +1 -1
  99. package/dist/stzh-components/stzh-components.esm.js.map +1 -1
  100. package/dist/types/components/stzh-app-nav/stzh-app-nav.d.ts +11 -0
  101. package/dist/types/components/stzh-app-nav/stzh-app-nav.localization.d.ts +4 -0
  102. package/dist/types/components/stzh-header/stzh-header.d.ts +18 -5
  103. package/dist/types/components/stzh-icon/stzh-icon.d.ts +3 -1
  104. package/dist/types/components/stzh-olmap/stzh-olmap.d.ts +1 -1
  105. package/dist/types/components.d.ts +75 -12
  106. package/dist/types/index.d.ts +10 -0
  107. package/dist/vscode-data.json +22 -6
  108. package/package.json +1 -1
  109. package/dist/stzh-components/p-6e29bc61.entry.js +0 -2
  110. package/dist/stzh-components/p-6e29bc61.entry.js.map +0 -1
  111. package/dist/stzh-components/p-b047262a.entry.js +0 -2
  112. package/dist/stzh-components/p-b047262a.entry.js.map +0 -1
  113. package/dist/stzh-components/p-b608bf1a.entry.js +0 -2
  114. package/dist/stzh-components/p-b608bf1a.entry.js.map +0 -1
  115. package/dist/stzh-components/p-b62c870a.entry.js +0 -2
  116. package/dist/stzh-components/p-b62c870a.entry.js.map +0 -1
  117. package/dist/stzh-components/p-c9265a65.entry.js.map +0 -1
  118. /package/dist/stzh-components/{p-d869745a.js.map → p-097bf2c2.js.map} +0 -0
@@ -4,6 +4,7 @@ import readme from './readme.md?raw';
4
4
  import { withDesign } from 'storybook-addon-designs';
5
5
  import { getFigmaLink } from '../../../figma';
6
6
  import { OnsiteBreakout as SearchAsOverlay } from '../stzh-search/stzh-search.stories';
7
+ import { Default as AppNav } from '../stzh-app-nav/stzh-app-nav.stories';
7
8
 
8
9
  const COMPONENT_NAME = 'stzh-header';
9
10
  const story = createComponentStory(COMPONENT_NAME);
@@ -144,6 +145,25 @@ const TEMPLATE_ONLY_LANGNAV = (args) => {
144
145
  `;
145
146
  };
146
147
 
148
+ const TEMPLATE_WITH_APP_NAV = (args) => {
149
+ return `
150
+ <div>
151
+ <stzh-header>
152
+ ${substoryLogo({ slot: 'logo', _logo: args._logo }, SUBTEMPLATE_LOGO({ _logo: args._logo })).outerHTML}
153
+ </stzh-header>
154
+ ${
155
+ !args._hideText
156
+ ? `
157
+ <stzh-container>
158
+ ${SUBTEMPLATE_DUMMY_TEXT}
159
+ </stzh-container>
160
+ `
161
+ : ''
162
+ }
163
+ </div>
164
+ `;
165
+ };
166
+
147
167
  export default {
148
168
  title: 'Components/Header',
149
169
  component: COMPONENT_NAME,
@@ -266,71 +286,21 @@ const menuItems = [
266
286
  }
267
287
  ];
268
288
 
269
- const metanavItems = [
270
- {
271
- stay: true,
272
- label: 'Cart',
273
- labelHidden: true,
274
- href: '#',
275
- target: '_blank',
276
- icon: 'cart'
277
- },
278
- {
279
- important: true,
280
- label: 'Max Mustermann',
281
- labelShort: 'MM',
282
- badgeEmpty: true,
283
- stayAndShowInMobileMenu: true,
284
- variant: 'secondary',
285
- icon: 'user',
286
- items: [
287
- {
288
- label: 'Services',
289
- icon: 'services-2',
290
- href: 'https://www.stadt-zuerich.ch/app/mkfewww/web/auth/services',
291
- target: '_blank',
292
- id: 'servicesId'
293
- },
294
- {
295
- label: 'Messages',
296
- icon: 'mail',
297
- counter: 3,
298
- href: 'https://www.stadt-zuerich.ch/app/mkfewww/web/auth/mitteilungen',
299
- id: 'messagesId'
300
- },
301
- {
302
- label: 'Settings',
303
- icon: 'gear',
304
- href: 'https://www.stadt-zuerich.ch/app/mkfewww/web/auth/settings',
305
- id: 'settingsId'
306
- },
307
- {
308
- label: 'About Mein Konto',
309
- icon: 'info-help',
310
- href: 'https://www.stadt-zuerich.ch/about-meinkonto',
311
- id: 'aboutId'
312
- }
313
- ],
314
- itemButton: {
315
- label: 'Anmelden',
316
- href: '#',
317
- target: '_blank',
318
- id: 'anmeldenId'
319
- }
320
- },
289
+ const standardMetanavItems = [
321
290
  {
322
291
  label: 'Jobs',
323
292
  href: '#'
324
293
  }
325
294
  ];
326
295
 
327
- const metanavItemsNotLoggedIn = [
296
+ const userSpecificMetanavItemsNotLoggedIn = [
328
297
  {
329
298
  stay: true,
330
299
  label: 'Cart',
331
300
  labelHidden: true,
332
301
  href: '#',
333
- icon: 'cart'
302
+ icon: 'cart',
303
+ cssOrder: 99,
334
304
  },
335
305
  {
336
306
  important: false,
@@ -340,6 +310,7 @@ const metanavItemsNotLoggedIn = [
340
310
  stayAndShowInMobileMenu: true,
341
311
  variant: 'secondary',
342
312
  icon: 'user',
313
+ cssOrder: -1,
343
314
  items: [
344
315
  {
345
316
  label: 'About Mein Konto',
@@ -352,9 +323,32 @@ const metanavItemsNotLoggedIn = [
352
323
  href: '#'
353
324
  }
354
325
  },
326
+ ];
327
+
328
+ const appNavItems = [
355
329
  {
356
- label: 'Jobs',
357
- href: '#'
330
+ text: 'Dashboard',
331
+ href: '#',
332
+ active: true,
333
+ icon: 'home',
334
+ },
335
+ {
336
+ text: 'Services',
337
+ href: '#',
338
+ a11yCurrent: 'page',
339
+ icon: 'bulleted-list',
340
+ },
341
+ {
342
+ text: 'Mitteilungen',
343
+ href: '#',
344
+ badge: '3',
345
+ badgeType: 'error',
346
+ icon: 'mail',
347
+ },
348
+ {
349
+ text: 'Einstellungen',
350
+ href: '#',
351
+ icon: 'filtering',
358
352
  }
359
353
  ];
360
354
 
@@ -367,7 +361,8 @@ export const Default = {
367
361
  render: (args) => story(args, TEMPLATE(args)),
368
362
  args: {
369
363
  'menu-items': menuItems,
370
- 'metanav-items': metanavItems,
364
+ 'standard-metanav-items': standardMetanavItems,
365
+ 'user-specific-metanav-items-not-logged-in': userSpecificMetanavItemsNotLoggedIn,
371
366
  'search-action': '/search.html',
372
367
  'language-active': '/en',
373
368
  languages: languages
@@ -378,19 +373,21 @@ export const WithSlottedOverlaySearch = {
378
373
  render: (args) => story(args, TEMPLATE_WITH_SLOTTED_SEARCH(args)),
379
374
  args: {
380
375
  'menu-items': menuItems,
381
- 'metanav-items': metanavItems,
376
+ 'standard-metanav-items': standardMetanavItems,
382
377
  'language-active': '/en',
383
378
  languages: languages
384
379
  }
385
380
  };
386
381
 
387
- export const NotLoggedIn = {
382
+ export const LoggedIn = {
388
383
  render: (args) => story(args, TEMPLATE(args)),
389
384
  args: {
390
385
  'menu-items': menuItems,
391
- 'metanav-items': metanavItemsNotLoggedIn,
386
+ 'standard-metanav-items': standardMetanavItems,
392
387
  'search-action': '/search.html',
393
388
  'language-active': '/en',
389
+ 'user-specific-metanav-items-not-logged-in': userSpecificMetanavItemsNotLoggedIn,
390
+ 'user-specific-metanav-items-endpoint': 'mock/header-user-specific-metanav-items.json',
394
391
  languages: languages
395
392
  }
396
393
  };
@@ -400,7 +397,7 @@ export const WithoutScrollbar = {
400
397
  args: {
401
398
  _hideText: true,
402
399
  'menu-items': menuItems,
403
- 'metanav-items': metanavItems,
400
+ 'standard-metanav-items': standardMetanavItems,
404
401
  'search-action': '/search.html',
405
402
  'language-active': '/en',
406
403
  languages: languages
@@ -415,7 +412,7 @@ export const Empty = {
415
412
  export const NestedInContainer = {
416
413
  render: (args) => story(args, TEMPLATE_NESTED_IN_CONTAINER(args)),
417
414
  args: {
418
- 'metanav-items': metanavItems,
415
+ 'standard-metanav-items': standardMetanavItems,
419
416
  'language-active': '/en',
420
417
  languages: languages
421
418
  }
@@ -429,3 +426,16 @@ export const OnlyLanguageStayOnMobile = {
429
426
  languages: languages
430
427
  }
431
428
  };
429
+
430
+ export const WithAppNav = {
431
+ render: (args) => story(args, TEMPLATE_WITH_APP_NAV(args)),
432
+ args: {
433
+ // 'user-specific-metanav-items-not-logged-in': userSpecificMetanavItemsNotLoggedIn,
434
+ // 'user-specific-metanav-items-endpoint': 'mock/header-user-specific-metanav-items.json',
435
+ 'standard-metanav-items': standardMetanavItems,
436
+ 'user-specific-metanav-items-not-logged-in': userSpecificMetanavItemsNotLoggedIn,
437
+ 'language-active': '/en',
438
+ 'app-nav-items': appNavItems
439
+ }
440
+ };
441
+
@@ -1,5 +1,7 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  let iconCounter = 0;
3
+ // Shared cache for all instances to store fetched SVG icons
4
+ const iconCache = new Map();
3
5
  export class StzhIcon {
4
6
  constructor() {
5
7
  this.name = "";
@@ -10,24 +12,30 @@ export class StzhIcon {
10
12
  async nameWatcher(name) {
11
13
  this.iconDisplay = "none";
12
14
  if (name) {
13
- const response = await fetch(`${window.stzhComponents.pathMedia}/icons/mono/${this.name}.svg`);
14
- if (response.status === 200) {
15
- const svgString = await response.text();
16
- const parser = new DOMParser();
17
- const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');
18
- this.svgElement = svgDoc.documentElement;
19
- this.svgElement.classList.add('stzh-icon__svg');
20
- // for some obscure reason we need to delay showing the icon in safari,
21
- // otherwise the icon doesn't show up randomly
22
- // TODO: sometimes the icon still randomely disappears when clicked on page (check on newer safari if problems still occur)
23
- window.setTimeout(() => {
24
- this.iconDisplay = "contents";
25
- }, 0);
26
- this.a11yTitleWatcher(this.a11yTitle);
15
+ if (iconCache.has(name)) {
16
+ this.svgHtml = await iconCache.get(name);
17
+ this.updateAccessibilityAttributes();
18
+ this.showIcon();
27
19
  }
28
20
  else {
29
- this.svgElement = null;
30
- this.svgHtml = '';
21
+ const fetchSvgPromise = fetch(`${window.stzhComponents.pathMedia}/icons/mono/${this.name}.svg`)
22
+ .then(response => {
23
+ if (response.status === 200) {
24
+ return response.text();
25
+ }
26
+ throw new Error('Failed to fetch icon');
27
+ })
28
+ .then(svgString => {
29
+ const parser = new DOMParser();
30
+ const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');
31
+ const svgElement = svgDoc.documentElement;
32
+ svgElement.classList.add('stzh-icon__svg');
33
+ return svgElement.outerHTML;
34
+ });
35
+ iconCache.set(name, fetchSvgPromise);
36
+ this.svgHtml = await fetchSvgPromise;
37
+ this.updateAccessibilityAttributes();
38
+ this.showIcon();
31
39
  }
32
40
  }
33
41
  else {
@@ -36,6 +44,8 @@ export class StzhIcon {
36
44
  }
37
45
  }
38
46
  a11yTitleWatcher(a11yTitle) {
47
+ if (!this.svgElement)
48
+ return;
39
49
  this.svgElement.setAttribute("aria-hidden", a11yTitle ? "false" : "true");
40
50
  this.svgElement.setAttribute("focusable", a11yTitle ? "true" : "false");
41
51
  this.svgElement.setAttribute("aria-labelledby", a11yTitle ? `${this.iconId}-title` : null);
@@ -50,7 +60,18 @@ export class StzhIcon {
50
60
  }
51
61
  async componentWillLoad() {
52
62
  this.iconId = `stzh-icon-${iconCounter++}`;
53
- this.nameWatcher(this.name);
63
+ await this.nameWatcher(this.name);
64
+ }
65
+ updateAccessibilityAttributes() {
66
+ this.a11yTitleWatcher(this.a11yTitle);
67
+ }
68
+ showIcon() {
69
+ // for some obscure reason we need to delay showing the icon in safari,
70
+ // otherwise the icon doesn't show up randomly
71
+ // TODO: sometimes the icon still randomely disappears when clicked on page (check on newer safari if problems still occur)
72
+ window.setTimeout(() => {
73
+ this.iconDisplay = "contents";
74
+ }, 0);
54
75
  }
55
76
  render() {
56
77
  return (h(Host, null, h("div", { class: "stzh-icon", style: { display: this.iconDisplay }, innerHTML: this.svgHtml })));
@@ -1 +1 @@
1
- {"version":3,"file":"stzh-icon.js","sourceRoot":"","sources":["../../../../src/components/stzh-icon/stzh-icon.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n Watch,\n State,\n Element\n} from \"@stencil/core\";\n\nlet iconCounter = 0;\n\n@Component({\n tag: \"stzh-icon\",\n styleUrl: \"stzh-icon.scss\",\n shadow: true\n})\nexport class StzhIcon {\n /**\n * Icon which should be displayed\n * See the [icon overview](stzh-components/assets/svgsprites/symbol/sprite.symbol.html) for a list of all available icons.\n */\n @Prop() name: string = \"\";\n\n /**\n * Hidden icon title for screenreader\n * (usually not needed when e.g. inside links or buttons that have text)\n */\n @Prop({ attribute: 'a11y-title' }) a11yTitle: string = \"\";\n\n @Element() element: HTMLStzhIconElement;\n\n @State() svgHtml: string = \"\";\n @State() iconDisplay: string = \"none\";\n\n @Watch(\"name\")\n async nameWatcher(name: string) {\n this.iconDisplay = \"none\";\n\n if (name) {\n const response = await fetch(`${window.stzhComponents.pathMedia}/icons/mono/${this.name}.svg`);\n\n if (response.status === 200) {\n const svgString = await response.text();\n\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n\n this.svgElement = svgDoc.documentElement as unknown as SVGElement;\n this.svgElement.classList.add('stzh-icon__svg');\n\n // for some obscure reason we need to delay showing the icon in safari,\n // otherwise the icon doesn't show up randomly\n // TODO: sometimes the icon still randomely disappears when clicked on page (check on newer safari if problems still occur)\n window.setTimeout(() => {\n this.iconDisplay = \"contents\";\n }, 0);\n\n this.a11yTitleWatcher(this.a11yTitle);\n } else {\n this.svgElement = null;\n this.svgHtml = '';\n }\n } else {\n this.svgElement = null;\n this.svgHtml = '';\n }\n }\n\n @Watch(\"a11yTitle\")\n a11yTitleWatcher(a11yTitle: string) {\n this.svgElement.setAttribute(\"aria-hidden\", a11yTitle ? \"false\" : \"true\");\n this.svgElement.setAttribute(\"focusable\", a11yTitle ? \"true\" : \"false\");\n this.svgElement.setAttribute(\"aria-labelledby\", a11yTitle ? `${this.iconId}-title` : null);\n\n let title = this.svgElement.querySelector('title');\n\n if (!title) {\n title = document.createElement('title');\n title.id = `${this.iconId}-title`;\n this.svgElement.appendChild(title);\n }\n\n title.innerHTML = a11yTitle;\n this.svgHtml = this.svgElement.outerHTML;\n }\n\n private svgElement: SVGElement | null;\n private iconId: string;\n\n async componentWillLoad() {\n this.iconId = `stzh-icon-${iconCounter++}`;\n this.nameWatcher(this.name);\n }\n\n render() {\n return (\n <Host>\n <div class=\"stzh-icon\" style={{ display: this.iconDisplay }} innerHTML={this.svgHtml}></div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"stzh-icon.js","sourceRoot":"","sources":["../../../../src/components/stzh-icon/stzh-icon.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n Watch,\n State,\n Element\n} from \"@stencil/core\";\n\nlet iconCounter = 0;\n\n// Shared cache for all instances to store fetched SVG icons\nconst iconCache = new Map<string, Promise<string>>();\n\n@Component({\n tag: \"stzh-icon\",\n styleUrl: \"stzh-icon.scss\",\n shadow: true\n})\nexport class StzhIcon {\n /**\n * Icon which should be displayed\n * See the [icon overview](stzh-components/assets/svgsprites/symbol/sprite.symbol.html) for a list of all available icons.\n */\n @Prop() name: string = \"\";\n\n /**\n * Hidden icon title for screenreader\n * (usually not needed when e.g. inside links or buttons that have text)\n */\n @Prop({ attribute: 'a11y-title' }) a11yTitle: string = \"\";\n\n @Element() element: HTMLStzhIconElement;\n\n @State() svgHtml: string = \"\";\n @State() iconDisplay: string = \"none\";\n\n @Watch(\"name\")\n async nameWatcher(name: string) {\n this.iconDisplay = \"none\";\n\n if (name) {\n if (iconCache.has(name)) {\n this.svgHtml = await iconCache.get(name)!;\n this.updateAccessibilityAttributes();\n this.showIcon();\n } else {\n const fetchSvgPromise = fetch(`${window.stzhComponents.pathMedia}/icons/mono/${this.name}.svg`)\n .then(response => {\n if (response.status === 200) {\n return response.text();\n }\n throw new Error('Failed to fetch icon');\n })\n .then(svgString => {\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n const svgElement = svgDoc.documentElement as unknown as SVGElement;\n svgElement.classList.add('stzh-icon__svg');\n\n return svgElement.outerHTML;\n });\n\n iconCache.set(name, fetchSvgPromise);\n\n this.svgHtml = await fetchSvgPromise;\n this.updateAccessibilityAttributes();\n this.showIcon();\n }\n } else {\n this.svgElement = null;\n this.svgHtml = '';\n }\n }\n\n @Watch(\"a11yTitle\")\n a11yTitleWatcher(a11yTitle: string) {\n if (!this.svgElement) return;\n\n this.svgElement.setAttribute(\"aria-hidden\", a11yTitle ? \"false\" : \"true\");\n this.svgElement.setAttribute(\"focusable\", a11yTitle ? \"true\" : \"false\");\n this.svgElement.setAttribute(\"aria-labelledby\", a11yTitle ? `${this.iconId}-title` : null);\n\n let title = this.svgElement.querySelector('title');\n\n if (!title) {\n title = document.createElement('title');\n title.id = `${this.iconId}-title`;\n this.svgElement.appendChild(title);\n }\n\n title.innerHTML = a11yTitle;\n this.svgHtml = this.svgElement.outerHTML;\n }\n\n private svgElement: SVGElement | null;\n private iconId: string;\n\n async componentWillLoad() {\n this.iconId = `stzh-icon-${iconCounter++}`;\n await this.nameWatcher(this.name);\n }\n\n private updateAccessibilityAttributes() {\n this.a11yTitleWatcher(this.a11yTitle);\n }\n\n private showIcon() {\n // for some obscure reason we need to delay showing the icon in safari,\n // otherwise the icon doesn't show up randomly\n // TODO: sometimes the icon still randomely disappears when clicked on page (check on newer safari if problems still occur)\n window.setTimeout(() => {\n this.iconDisplay = \"contents\";\n }, 0);\n }\n\n render() {\n return (\n <Host>\n <div class=\"stzh-icon\" style={{ display: this.iconDisplay }} innerHTML={this.svgHtml}></div>\n </Host>\n );\n }\n}\n"]}
@@ -857,7 +857,7 @@ export class StzhOlmap {
857
857
  "optional": false,
858
858
  "docs": {
859
859
  "tags": [],
860
- "text": "Initial center position"
860
+ "text": "Initial center position in the format of Swiss Grid LV95 coordinates"
861
861
  },
862
862
  "attribute": "center",
863
863
  "reflect": false,
@@ -1 +1 @@
1
- {"version":3,"file":"stzh-olmap.js","sourceRoot":"","sources":["../../../../src/components/stzh-olmap/stzh-olmap.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Element,\n Prop,\n Watch,\n Method,\n Event,\n EventEmitter,\n Listen\n} from \"@stencil/core\";\n\nimport {\n OlmapLayer,\n StzhOlmapInitializedEvent,\n StzhOlmapPostRenderEvent,\n StzhOlmapMoveStartEvent,\n StzhOlmapMoveEndEvent\n} from \"../../index\";\n\nimport { StzhOlmapLocalizedText } from \"./stzh-olmap.localization\";\n\n// map dependencies\n\nimport Proj4 from \"proj4\";\nwindow.proj4 = Proj4;\n\nwindow.proj4.defs(\"EPSG:2056\", \"+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs\");\n\nimport OlGeolocation from \"ol/geolocation.js\";\nimport OlMap from \"ol/map.js\";\n// import OlOverlay from \"ol/overlay.js\";\nimport OlExtent from \"ol/extent.js\";\nimport OlView from \"ol/view.js\";\n// import OlAttribution from \"ol/attribution.js\";\nimport OlFeature from \"ol/feature\";\nimport OlSphere from \"ol/sphere\";\n// import OlProj from \"ol/proj\";\nimport OlProjProjection from \"ol/proj/projection\";\n\nimport OlSourceWmts from \"ol/source/wmts.js\";\nimport OlSourceVector from \"ol/source/vector.js\";\n\nimport OlGeomPoint from \"ol/geom/point.js\";\nimport OlGeomLineString from \"ol/geom/linestring.js\";\n\nimport OlLayerTile from \"ol/layer/tile.js\";\nimport OlLayerVector from \"ol/layer/vector.js\";\n\nimport OlControl from \"ol/control\";\nimport OlControlScaleLine from \"ol/control/scaleline\";\nimport OlControlControl from \"ol/control/control\";\n\nimport OlTilegridWmts from \"ol/tilegrid/wmts\";\nimport OlCollection from \"ol/collection\";\n\nimport OlStyleStyle from \"ol/style/style\";\nimport OlStyleIcon from \"ol/style/icon\";\n\nimport OlInteractionDragRotate from \"ol/interaction/dragrotate\";\nimport OlInteractionDoubleClickZoom from \"ol/interaction/doubleclickzoom\";\nimport OlInteractionDragPan from \"ol/interaction/dragpan\";\nimport OlInteractionPinchRotate from \"ol/interaction/pinchrotate\";\nimport OlInteractionPinchZoom from \"ol/interaction/pinchzoom\";\nimport OlInteractionKeyboardPan from \"ol/interaction/keyboardpan\";\nimport OlInteractionKeyboardZoom from \"ol/interaction/keyboardzoom\";\nimport OlInteractionDragZoom from \"ol/interaction/dragzoom\";\n\nimport Compass from \"./assets/compass.svg\";\n\nconst STYLES_MARKER_ICON = {\n anchor: [0.5, 1],\n anchorXUnits: \"fraction\",\n anchorYUnits: \"fraction\",\n scale: .5,\n src: `${window.stzhComponents.pathMedia}/olmap/marker.png`\n};\n\nconst STYLES_ACTIVE_MARKER_ICON = {\n ...STYLES_MARKER_ICON,\n src: `${window.stzhComponents.pathMedia}/olmap/marker-active.png`\n}\n\nconst STYLES_POSITION_MARKER_ICON_STYLES = {\n ...STYLES_MARKER_ICON,\n anchor: [0.5, 0.5],\n src: `${window.stzhComponents.pathMedia}/olmap/marker-position.png`\n}\n\n/**\n *\n */\n@Component({\n tag: \"stzh-olmap\",\n styleUrl: \"stzh-olmap.scss\"\n})\nexport class StzhOlmap {\n /** Translation strings */\n @Prop() localization: StzhOlmapLocalizedText;\n\n /** Hostname */\n @Prop() hostname: string = \"www.ogc.stadt-zuerich.ch\";\n\n /** Whether map scale should be shown */\n @Prop() scaleControl: boolean = true;\n\n /** Whether map layer switch control is shown */\n @Prop() layerControl: boolean = true;\n\n /** Whether map should be printable */\n @Prop() printControl: boolean = true;\n\n /** Whether map should have a location control */\n @Prop() locationControl: boolean = false;\n\n /** Active layer (`streets` or `satellite` can be used with default `layers` prop value) */\n @Prop({ mutable: true }) layer: string = \"streets\";\n\n /** Initial zoom */\n @Prop() zoom: number = 7;\n\n /** Zoom set when location is enabled */\n @Prop() zoomLocation: number = 7;\n\n /** Initial center position */\n @Prop() center: string | [number, number] = [2683311, 1247082];\n private _center: [number, number];\n\n /** Whether to display an icon marker in the center */\n @Prop() centerMarker: boolean = true;\n\n /** Minimal angle in radians to start a rotation */\n @Prop() pinchRotateThreshold: number = 0.3;\n\n /** Resolutions */\n @Prop() resolutions: string | number[] = [\n 67.73333333333,\n 33.8666666667,\n 16.9333333333,\n 8.4666666667,\n 4.2333333333,\n 2.1166666667,\n 1.0583333333,\n 0.5291666667,\n 0.2645833333,\n 0.1322916667,\n 0.0661458333\n ];\n\n private _resolutions: number[];\n\n /**\n * Layers (maximum of two).\n *\n * Default layers `streets` and `satellite` are defined.\n * If `streets` or `satellite` is used as key, they will have a default filled `title`.\n */\n @Prop() layers: string | { [key: string]: OlmapLayer } = {\n streets: {\n thumbnailUrl: `${window.stzhComponents.pathMedia}/olmap/thumb-streets.jpg`,\n options: {\n url: \"https://{Hostname}/mapproxy/wmts/1.0.0/{Layer}/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png\",\n layer: \"basiskarte_zuerich_gebaeudeschraegansicht\",\n matrixSet: \"ktzh\",\n origin: [2480237.0, 1315832.0],\n extent: [2666867.00, 1220962.00, 2719695.50, 1285537.00]\n }\n },\n satellite: {\n thumbnailUrl: `${window.stzhComponents.pathMedia}/olmap/thumb-satellite.jpg`,\n options: {\n url: \"https://{Hostname}/mapproxy/wmts/1.0.0/{Layer}/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png\",\n layer: \"orthofoto\",\n matrixSet: \"ktzh\",\n origin: [2480237.0, 1315832.0],\n extent: [2666867.0, 1220962.0, 2719695.5, 1285537.0]\n }\n }\n };\n\n private _layers: { [key: string]: OlmapLayer } = {};\n\n @Element() element: HTMLStzhOlmapElement;\n\n @Watch(\"layers\")\n layersWatcher(newValue: string | { [key: string]: OlmapLayer }) {\n if (typeof newValue === \"string\") {\n this._layers = JSON.parse(newValue);\n } else {\n this._layers = newValue;\n }\n }\n\n @Watch(\"resolutions\")\n resolutionsWatcher(newValue: string | number[]) {\n if (typeof newValue === \"string\") {\n this._resolutions = JSON.parse(newValue);\n } else {\n this._resolutions = newValue;\n }\n }\n\n @Watch(\"zoom\")\n zoomWatcher(newValue) {\n if (this.map) {\n this.map.getView().setZoom(newValue);\n }\n }\n\n @Watch(\"scaleControl\")\n scaleControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.scaleControlOl = new OlControlScaleLine({\n units: \"metric\"\n })\n\n this.map.addControl(this.scaleControlOl);\n } else {\n if (this.scaleControl) {\n this.map.removeControl(this.scaleControlOl);\n }\n\n this.scaleControlOl = null;\n }\n }\n\n @Watch(\"printControl\")\n printControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.printControlElement = document.createElement(\"button\");\n this.printControlElement.className = \"ol-print\";\n this.printControlElement.ariaLabel = this.localization.printLabel;\n this.printControlElement.addEventListener(\"click\", this.handlePrintButtonClick);\n this.printControlElement.innerHTML = '<stzh-icon name=\"print\" class=\"ol-print__icon\"></stzh-icon>';\n\n this.printControlOl = new OlControlControl({\n element: this.printControlElement\n })\n\n this.map.addControl(this.printControlOl);\n } else {\n if (this.printControlOl) {\n this.map.removeControl(this.printControlOl);\n }\n\n this.printControlOl = null;\n this.printControlElement = null;\n }\n }\n\n @Watch(\"layerControl\")\n layerControlWatcher(newValue: boolean) {\n if (!this.map || this.layersArray.length === 1) {\n return;\n }\n\n if (newValue) {\n this.layerControlElement = document.createElement(\"button\");\n this.layerControlElement.className = \"ol-layer\";\n this.layerControlElement.addEventListener(\"click\", () => {\n this.layer = this.layer === \"streets\" ? \"satellite\" : \"streets\";\n });\n\n this.layerControlImageElement = document.createElement(\"img\");\n this.layerControlImageElement.className = \"ol-layer__thumbnail\";\n this.layerControlImageElement.setAttribute(\"role\", \"presentation\");\n this.layerControlImageElement.setAttribute(\"alt\", \"\");\n\n this.layerControlTextElement = document.createElement(\"span\");\n this.layerControlTextElement.className = \"ol-layer__text\";\n\n this.layerControlElement.appendChild(this.layerControlImageElement);\n this.layerControlElement.appendChild(this.layerControlTextElement);\n\n this.layerControlOl = new OlControlControl({\n element: this.layerControlElement\n })\n\n this.map.addControl(this.layerControlOl);\n } else {\n if (this.layerControlOl) {\n this.map.removeControl(this.layerControlOl);\n }\n\n this.layerControlOl = null;\n this.layerControlElement = null;\n this.layerControlImageElement = null;\n this.layerControlTextElement = null;\n }\n }\n\n @Watch(\"locationControl\")\n locationControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.locationControlElement = document.createElement(\"button\");\n this.locationControlElement.className = \"ol-location\";\n this.locationControlElement.innerHTML = '<stzh-icon name=\"target-bullet\" class=\"ol-location__icon\"></stzh-icon>';\n\n this.locationControlElement.addEventListener(\"click\", () => {\n const isTracking = this.geolocation.getTracking();\n\n if (isTracking) {\n this.disableLocationTracking();\n } else {\n this.enableLocationTracking();\n }\n });\n\n this.locationControlOl = new OlControlControl({\n element: this.locationControlElement\n });\n\n this.geolocation = new OlGeolocation({\n // take the projection to use from the map's view\n projection: this.map.getView().getProjection()\n });\n\n this.positionMarkerOl = new OlFeature();\n this.positionMarkerOl.setId(\"position\");\n\n const iconStyle = new OlStyleStyle({\n image: new OlStyleIcon(STYLES_POSITION_MARKER_ICON_STYLES)\n });\n\n this.positionMarkerOl.setStyle(iconStyle);\n this.positionLayer.getSource().addFeature(this.positionMarkerOl);\n\n // listen to changes in position\n this.geolocation.on(\"change:position\", () => {\n const position = this.geolocation.getPosition();\n\n // zuerich location for testing (bprm6280, Ausbildungszentrum Rohwiesen)\n // const position = [2685067, 1252482];\n\n this.positionMarkerOl.setGeometry(new OlGeomPoint(position));\n\n // if position is within map and first time the position is changed, we center to it\n if (\n !this.geoPositionChanged\n && OlExtent.containsExtent(\n this._layers[this.layer].options.extent,\n this.positionMarkerOl.getGeometry().getExtent()\n )\n ) {\n this.geoPositionChanged = true;\n this.map.getView().setCenter(position);\n\n if (this.zoomLocation) {\n this.map.getView().setZoom(this.zoomLocation);\n }\n }\n });\n\n this.geolocation.on(\"change:tracking\", () => {\n const isTracking = this.geolocation.getTracking();\n\n // reset position\n this.positionMarkerOl.setGeometry(null);\n this.setLocationControlState(isTracking);\n });\n\n this.geolocation.on(\"error\", () => {\n this.setLocationControlState(false);\n });\n\n this.map.addControl(this.locationControlOl);\n } else {\n this.disableLocationTracking();\n\n if (this.locationControlOl) {\n this.map.removeControl(this.locationControlOl);\n }\n\n if (this.positionMarkerOl) {\n this.positionLayer.getSource().removeFeature(this.positionMarkerOl);\n }\n\n this.locationControlOl = null;\n this.locationControlElement = null;\n this.geolocation = null;\n this.positionMarkerOl = null;\n }\n }\n\n @Watch(\"layer\")\n layerWatcher(newValue: string) {\n if (!this.map) {\n return;\n }\n\n Object.entries(this.rasterLayers).forEach(([key, layer]) => {\n if (key === newValue) {\n layer.setVisible(true);\n\n this.map.getView().set(\"projection\", this.projections[newValue]);\n\n const inactiveLayer = this.layersArray.find(([key]) => key !== this.layer);\n\n if (inactiveLayer) {\n if (this.layerControlImageElement) {\n this.layerControlImageElement.src = inactiveLayer[1].thumbnailUrl;\n }\n\n if (this.layerControlTextElement) {\n let defaultTitle = \"\";\n\n if (key === \"streets\") {\n defaultTitle = this.localization.streetsLayerTitle;\n } else if (key === \"satellite\") {\n defaultTitle = this.localization.satelliteLayerTitle;\n }\n\n this.layerControlTextElement.textContent = inactiveLayer[1].title || defaultTitle;\n }\n }\n } else {\n layer.setVisible(false);\n }\n });\n }\n\n @Watch(\"center\")\n centerWatcher(newValue: string | [number, number]) {\n if (typeof newValue === \"string\") {\n this._center = JSON.parse(newValue);\n } else {\n this._center = newValue;\n }\n\n if (this.map) {\n this.map.getView().setCenter(this._center);\n\n if (this.centerMarkerOl) {\n this.centerMarkerOl.setGeometry(new OlGeomPoint(this._center));\n }\n }\n }\n\n @Watch(\"centerMarker\")\n async centerMarkerWatcher(newValue: boolean) {\n if (newValue) {\n // add marker in the center position\n this.centerMarkerOl = await this.addIconMarker(this._center);\n } else if (this.centerMarkerOl) {\n this.removeIconMarker(this.centerMarkerOl);\n }\n }\n\n /** Get map */\n @Method()\n async getMap(): Promise<any> {\n return this.map;\n }\n\n /** Add a icon marker to the icon layer. */\n @Method()\n async addIconMarker(coordinates: number[]) {\n const marker = new OlFeature({\n geometry: new OlGeomPoint(coordinates)\n });\n\n const iconStyle = new OlStyleStyle({\n image: new OlStyleIcon(STYLES_MARKER_ICON)\n });\n\n marker.setStyle(iconStyle);\n this.iconLayer.getSource().addFeature(marker);\n\n return marker;\n }\n\n /** Remove icon marker from icon layer. */\n @Method()\n async removeIconMarker(marker) {\n return this.iconLayer.getSource().removeFeature(marker);\n }\n\n /** Set icon marker as active. */\n @Method()\n async setIconMarkerActive(marker) {\n marker.setStyle(new OlStyleStyle({\n image: new OlStyleIcon(STYLES_ACTIVE_MARKER_ICON)\n }));\n }\n\n /** Set icon marker as inactive. */\n @Method()\n async setIconMarkerInactive(marker) {\n marker.setStyle(new OlStyleStyle({\n image: new OlStyleIcon(STYLES_MARKER_ICON)\n }));\n }\n\n /** Enable user location tracking */\n @Method()\n async enableLocationTracking(centerOnFirstGeoPositionChange = true) {\n this.setLocationControlState(true);\n\n if (centerOnFirstGeoPositionChange) {\n this.geoPositionChanged = false;\n }\n\n if (this.geolocation) {\n this.geolocation.setTracking(true);\n }\n }\n\n /** Disable user location tracking */\n @Method()\n async disableLocationTracking() {\n this.setLocationControlState(false);\n\n if (this.geolocation) {\n this.geolocation.setTracking(false);\n }\n }\n\n /** Get distance between two points in meters */\n @Method()\n async getDistance(startCoords, endCoords) {\n const line = new OlGeomLineString([\n startCoords, endCoords\n ]);\n\n const length = OlSphere.getLength(line, {\n projection: this.map.getView().getProjection()\n });\n\n return length;\n\t}\n\n /** Olmap initialized event */\n @Event() stzhInitialized: EventEmitter<StzhOlmapInitializedEvent>;\n\n /** Olmap postrender event */\n @Event() stzhPostRender: EventEmitter<StzhOlmapPostRenderEvent>;\n\n /** Olmap movestart event */\n @Event() stzhMoveStart: EventEmitter<StzhOlmapMoveStartEvent>;\n\n /** Olmap moveend event */\n @Event() stzhMoveEnd: EventEmitter<StzhOlmapMoveEndEvent>;\n\n @Listen(\"load\", { target: \"window\" })\n @Listen(\"deviceorientation\", { target: \"window\" })\n @Listen(\"pageshow\", { target: \"window\" })\n handleLoad() {\n if (this.map) {\n requestAnimationFrame(() => {\n this.map.updateSize();\n });\n }\n }\n\n private map: OlMap;\n private mapElement: HTMLElement;\n private geolocation: OlGeolocation;\n private printIframe: HTMLIFrameElement;\n\n private layersArray: [string, OlmapLayer][];\n private rasterLayers: { [key: string]: OlLayerTile };\n private projections: { [key: string]: OlProjProjection };\n\n private positionMarkerOl: OlFeature;\n private centerMarkerOl: OlFeature;\n\n private positionLayer: OlLayerVector;\n private iconLayer: OlLayerVector;\n\n private geoPositionChanged: boolean = false;\n\n // controls\n\n private layerControlOl: OlControlControl;\n private layerControlElement: HTMLElement;\n private layerControlTextElement: HTMLElement;\n private layerControlImageElement: HTMLImageElement;\n\n private scaleControlOl: OlControlScaleLine;\n\n private printControlOl: OlControlControl;\n private printControlElement: HTMLElement;\n\n private locationControlOl: OlControlControl;\n private locationControlElement: HTMLElement;\n\n private handlePostRender = () => {\n this.stzhPostRender.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleMoveStart = () => {\n this.stzhMoveStart.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleMoveEnd = () => {\n this.stzhMoveEnd.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleInsideModalOpen = () => {\n if (this.map) {\n requestAnimationFrame(() => {\n this.map.updateSize();\n });\n }\n }\n\n private handlePrintButtonClick = () => {\n // TODO: check with client if print is still needed and if related contact component needs to be printed too\n if (!this.printIframe) {\n this.printIframe = document.createElement(\"iframe\");\n Object.assign(this.printIframe.style, {\n \"height\": \"0px\",\n \"width\": \"0px\",\n \"position\": \"absolute\",\n \"border\": \"none\"\n });\n\n this.element.append(this.printIframe);\n }\n\n // empty iframe\n this.printIframe.innerHTML = \"\";\n\n const printWindow = this.printIframe.contentWindow;\n const componentCss = (this.constructor as any).style.replace('@charset \"UTF-8\";', \"\");\n const globalCssLinks = Array.from(document.querySelectorAll(\"link\")).map((node) => node.outerHTML);\n\n let img;\n\n this.map.once(\"postcompose\", function(event) {\n const canvas = event.context.canvas;\n img = canvas.toDataURL(\"image/png\");\n });\n\n this.map.renderSync();\n\n printWindow.document.body.innerHTML = `\n ${globalCssLinks.join(\"\")}\n\n <style type=\"text/css\">\n ${componentCss}\n </style>\n\n <div class=\"stzh-olmap__map stzh-olmap__map--print\">\n <img class=\"stzh-olmap__print-image\" src=\"${img}\">\n ${this.element.querySelector(\".ol-scale-line.ol-unselectable\").outerHTML}\n </div>\n `;\n\n // printWindow.document.write('<div class=\"mod_contact\">');\n\n // const contact = this.element.closest('.mod_contact');\n\n // if (contact) {\n // const contactCard = contact.querySelector('.mod_contactcard');\n // printWindow.document.write('<div class=\"mod_contactcard\">');\n // printWindow.document.write(contactCard.innerHTML);\n // printWindow.document.write('</div>');\n // }\n\n // printWindow.document.write('<div class=\"stzh-olmap__map stzh-olmap__map--print\">');\n // printWindow.document.write('<img class=\"stzh-olmap__print-image\" src=\"' + img + '\" alt=\"\">');\n // printWindow.document.write(this.element.querySelector('.ol-scale-line.ol-unselectable').outerHTML);\n // printWindow.document.write('</div>');\n // printWindow.document.write('</div>');\n // printWindow.document.close();\n\n setTimeout(() => {\n // acts as a bugfix for IE 11\n // https://stackoverflow.com/questions/24673024/unable-to-print-iframe-content-from-parent-page-in-ie-11\n try {\n printWindow.document.execCommand(\"print\", false, null);\n } catch (e) {\n printWindow.print();\n }\n }, 1000);\n }\n\n private setLocationControlState(active) {\n if (this.positionLayer) {\n this.positionLayer.setVisible(active);\n }\n\n if (this.locationControlElement) {\n this.locationControlElement.classList.toggle(\"active\", active);\n }\n }\n\n private createMap() {\n const zoomIn = document.createElement(\"stzh-icon\");\n zoomIn.ariaLabel = this.localization.zoomInLabel;\n zoomIn.name = \"plus\";\n\n const zoomOut = document.createElement(\"stzh-icon\");\n zoomOut.ariaLabel = this.localization.zoomOutLabel;\n zoomOut.name = \"minus\";\n\n const rotate = document.createElement('div');\n rotate.innerHTML = Compass;\n\n const rotateText = document.createElement(\"span\");\n rotateText.innerText = this.localization.rotateLabel;\n\n rotate.appendChild(rotateText);\n\n const map = new OlMap({\n controls: OlControl.defaults({\n // https://openlayers.org/en/v4.6.5/apidoc/olx.control.html#.ZoomOptions\n zoomOptions: {\n zoomInLabel: zoomIn,\n zoomOutLabel: zoomOut,\n zoomInTipLabel: \"\",\n zoomOutTipLabel: \"\"\n },\n // https://openlayers.org/en/v4.6.5/apidoc/olx.control.html#.RotateOptions\n rotateOptions: {\n label: rotate,\n tipLabel: \"\"\n }\n }),\n interactions: new OlCollection([\n\t\t\t\tnew OlInteractionDragRotate(),\n\t\t\t\tnew OlInteractionDoubleClickZoom(),\n\t\t\t\tnew OlInteractionDragPan(),\n\t\t\t\tnew OlInteractionPinchRotate({\n\t\t\t\t\tthreshold: this.pinchRotateThreshold\n\t\t\t\t}),\n\t\t\t\tnew OlInteractionPinchZoom(),\n\t\t\t\tnew OlInteractionKeyboardPan(),\n\t\t\t\tnew OlInteractionKeyboardZoom(),\n\t\t\t\tnew OlInteractionDragZoom(),\n\t\t\t]),\n loadTilesWhileAnimating: true,\n loadTilesWhileInteracting: true,\n target: this.mapElement,\n logo: false\n });\n\n return map;\n }\n\n private createRasterLayer(key, options) {\n return new OlLayerTile({\n title: \"wmts\",\n type: \"base\",\n extent: options.extent,\n source: this.createLayerSource(key, options)\n });\n }\n\n private createLayerSource(key, options) {\n if (!this.projections) {\n this.projections = {};\n }\n\n this.projections[key] = new OlProjProjection({\n code: \"EPSG:2056\",\n extent: options.extent\n });\n\n return this.creatRasterSource(key, options);\n }\n\n private creatRasterSource(key, options) {\n const { url, layer, matrixSet, origin } = options;\n const matrixIds = [];\n\n for (let i = 0; i < this._resolutions.length; i++) {\n matrixIds.push(i);\n }\n\n const tileGrid = new OlTilegridWmts({\n origin,\n resolutions: this._resolutions,\n matrixIds,\n tileSize: [512, 512]\n });\n\n return new OlSourceWmts(({\n url,\n tileGrid: tileGrid,\n style: \"default\",\n projection: this.projections[key],\n crossOrigin: \"anonymous\",\n layer,\n matrixSet,\n requestEncoding: \"REST\"\n }));\n }\n\n private createIconLayer() {\n return new OlLayerVector({\n source: new OlSourceVector({})\n });\n }\n\n private initMap() {\n this.map = this.createMap();\n\n // events from https://openlayers.org/en/v4.6.5/apidoc/ol.Map.html\n this.map.on(\"postrender\", this.handlePostRender);\n this.map.on(\"movestart\", this.handleMoveStart);\n this.map.on(\"moveend\", this.handleMoveEnd);\n\n this.layersArray = Object.entries(this._layers);\n\n if (this.layersArray.length > 2) {\n throw new Error(\"There are only two different layers allowed.\");\n }\n\n this.rasterLayers = {};\n this.layersArray.forEach(([key, layer]) => {\n layer.options.url = layer.options.url.replace(/\\{hostname\\}/gi, this.hostname);\n this.rasterLayers[key] = this.createRasterLayer(key, layer.options);\n this.map.addLayer(this.rasterLayers[key]);\n });\n\n // add the VectorLayer which is used for adding the position marker to the map\n // (above raster layers)\n this.positionLayer = this.createIconLayer();\n this.positionLayer.setVisible(false);\n this.map.addLayer(this.positionLayer);\n\n // add the VectorLayer which is used for adding icon markers to the map\n // (above raster and position marker layer)\n this.iconLayer = this.createIconLayer();\n this.map.addLayer(this.iconLayer);\n\n const view = new OlView({\n center: this._center,\n projection: this.projections[this.layer],\n zoom: this.zoom,\n resolutions: this._resolutions\n });\n\n this.map.setView(view);\n\n this.scaleControlWatcher(this.scaleControl);\n this.printControlWatcher(this.printControl);\n this.locationControlWatcher(this.locationControl);\n\n this.layerControlWatcher(this.layerControl);\n this.layerWatcher(this.layer);\n\n this.centerWatcher(this.center);\n this.centerMarkerWatcher(this.centerMarker);\n\n requestAnimationFrame(() => {\n // this.map.updateSize();\n\n // test orientation on desktop\n // this.map.getView().setRotation(45);\n\n this.stzhInitialized.emit({\n component: \"stzh-olmap\"\n });\n });\n }\n\n componentShouldUpdate(_newValue, _oldValue, prop: string) {\n return [\n \"hostname\",\n \"localization\",\n \"layers\",\n \"resolutions\",\n \"pinchRotateThreshold\"\n ].includes(prop);\n }\n\n async componentWillLoad() {\n this.layersWatcher(this.layers);\n this.resolutionsWatcher(this.resolutions);\n\n if (!this.localization) {\n this.localization = await window.stzhComponents.utils.fetchTranslations(this.element, \"olmap\");\n }\n }\n\n componentWillUpdate() {\n if (this.map) {\n this.map.setTarget(null);\n this.map = null;\n }\n }\n\n componentDidRender() {\n if (this.map) {\n return;\n }\n\n this.initMap();\n }\n\n connectedCallback() {\n const dialog = this.element.closest(\"stzh-dialog\");\n\n if (dialog) {\n dialog.addEventListener(\"stzhOpen\", this.handleInsideModalOpen);\n }\n }\n\n disconnectedCallback() {\n if (this.map) {\n this.map.setTarget(null);\n this.map = null;\n }\n\n const dialog = this.element.closest(\"stzh-dialog\");\n\n if (dialog) {\n dialog.removeEventListener(\"stzhOpen\", this.handleInsideModalOpen);\n }\n }\n\n render() {\n const classes = {\n \"stzh-olmap\": true,\n \"stzh-olmap--has-no-layer-control\": !this.layerControl,\n \"stzh-olmap--has-no-print-control\": !this.printControl,\n \"stzh-olmap--has-location-control\": this.locationControl\n };\n\n return (\n <Host>\n <div class={classes}>\n <div\n ref={(el) => (this.mapElement = el as HTMLDivElement)}\n class=\"stzh-olmap__map\"\n ></div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"stzh-olmap.js","sourceRoot":"","sources":["../../../../src/components/stzh-olmap/stzh-olmap.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Element,\n Prop,\n Watch,\n Method,\n Event,\n EventEmitter,\n Listen\n} from \"@stencil/core\";\n\nimport {\n OlmapLayer,\n StzhOlmapInitializedEvent,\n StzhOlmapPostRenderEvent,\n StzhOlmapMoveStartEvent,\n StzhOlmapMoveEndEvent\n} from \"../../index\";\n\nimport { StzhOlmapLocalizedText } from \"./stzh-olmap.localization\";\n\n// map dependencies\n\nimport Proj4 from \"proj4\";\nwindow.proj4 = Proj4;\n\nwindow.proj4.defs(\"EPSG:2056\", \"+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs\");\n\nimport OlGeolocation from \"ol/geolocation.js\";\nimport OlMap from \"ol/map.js\";\n// import OlOverlay from \"ol/overlay.js\";\nimport OlExtent from \"ol/extent.js\";\nimport OlView from \"ol/view.js\";\n// import OlAttribution from \"ol/attribution.js\";\nimport OlFeature from \"ol/feature\";\nimport OlSphere from \"ol/sphere\";\n// import OlProj from \"ol/proj\";\nimport OlProjProjection from \"ol/proj/projection\";\n\nimport OlSourceWmts from \"ol/source/wmts.js\";\nimport OlSourceVector from \"ol/source/vector.js\";\n\nimport OlGeomPoint from \"ol/geom/point.js\";\nimport OlGeomLineString from \"ol/geom/linestring.js\";\n\nimport OlLayerTile from \"ol/layer/tile.js\";\nimport OlLayerVector from \"ol/layer/vector.js\";\n\nimport OlControl from \"ol/control\";\nimport OlControlScaleLine from \"ol/control/scaleline\";\nimport OlControlControl from \"ol/control/control\";\n\nimport OlTilegridWmts from \"ol/tilegrid/wmts\";\nimport OlCollection from \"ol/collection\";\n\nimport OlStyleStyle from \"ol/style/style\";\nimport OlStyleIcon from \"ol/style/icon\";\n\nimport OlInteractionDragRotate from \"ol/interaction/dragrotate\";\nimport OlInteractionDoubleClickZoom from \"ol/interaction/doubleclickzoom\";\nimport OlInteractionDragPan from \"ol/interaction/dragpan\";\nimport OlInteractionPinchRotate from \"ol/interaction/pinchrotate\";\nimport OlInteractionPinchZoom from \"ol/interaction/pinchzoom\";\nimport OlInteractionKeyboardPan from \"ol/interaction/keyboardpan\";\nimport OlInteractionKeyboardZoom from \"ol/interaction/keyboardzoom\";\nimport OlInteractionDragZoom from \"ol/interaction/dragzoom\";\n\nimport Compass from \"./assets/compass.svg\";\n\nconst STYLES_MARKER_ICON = {\n anchor: [0.5, 1],\n anchorXUnits: \"fraction\",\n anchorYUnits: \"fraction\",\n scale: .5,\n src: `${window.stzhComponents.pathMedia}/olmap/marker.png`\n};\n\nconst STYLES_ACTIVE_MARKER_ICON = {\n ...STYLES_MARKER_ICON,\n src: `${window.stzhComponents.pathMedia}/olmap/marker-active.png`\n}\n\nconst STYLES_POSITION_MARKER_ICON_STYLES = {\n ...STYLES_MARKER_ICON,\n anchor: [0.5, 0.5],\n src: `${window.stzhComponents.pathMedia}/olmap/marker-position.png`\n}\n\n/**\n *\n */\n@Component({\n tag: \"stzh-olmap\",\n styleUrl: \"stzh-olmap.scss\"\n})\nexport class StzhOlmap {\n /** Translation strings */\n @Prop() localization: StzhOlmapLocalizedText;\n\n /** Hostname */\n @Prop() hostname: string = \"www.ogc.stadt-zuerich.ch\";\n\n /** Whether map scale should be shown */\n @Prop() scaleControl: boolean = true;\n\n /** Whether map layer switch control is shown */\n @Prop() layerControl: boolean = true;\n\n /** Whether map should be printable */\n @Prop() printControl: boolean = true;\n\n /** Whether map should have a location control */\n @Prop() locationControl: boolean = false;\n\n /** Active layer (`streets` or `satellite` can be used with default `layers` prop value) */\n @Prop({ mutable: true }) layer: string = \"streets\";\n\n /** Initial zoom */\n @Prop() zoom: number = 7;\n\n /** Zoom set when location is enabled */\n @Prop() zoomLocation: number = 7;\n\n /** Initial center position in the format of Swiss Grid LV95 coordinates */\n @Prop() center: string | [number, number] = [2683311, 1247082];\n private _center: [number, number];\n\n /** Whether to display an icon marker in the center */\n @Prop() centerMarker: boolean = true;\n\n /** Minimal angle in radians to start a rotation */\n @Prop() pinchRotateThreshold: number = 0.3;\n\n /** Resolutions */\n @Prop() resolutions: string | number[] = [\n 67.73333333333,\n 33.8666666667,\n 16.9333333333,\n 8.4666666667,\n 4.2333333333,\n 2.1166666667,\n 1.0583333333,\n 0.5291666667,\n 0.2645833333,\n 0.1322916667,\n 0.0661458333\n ];\n\n private _resolutions: number[];\n\n /**\n * Layers (maximum of two).\n *\n * Default layers `streets` and `satellite` are defined.\n * If `streets` or `satellite` is used as key, they will have a default filled `title`.\n */\n @Prop() layers: string | { [key: string]: OlmapLayer } = {\n streets: {\n thumbnailUrl: `${window.stzhComponents.pathMedia}/olmap/thumb-streets.jpg`,\n options: {\n url: \"https://{Hostname}/mapproxy/wmts/1.0.0/{Layer}/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png\",\n layer: \"basiskarte_zuerich_gebaeudeschraegansicht\",\n matrixSet: \"ktzh\",\n origin: [2480237.0, 1315832.0],\n extent: [2666867.00, 1220962.00, 2719695.50, 1285537.00]\n }\n },\n satellite: {\n thumbnailUrl: `${window.stzhComponents.pathMedia}/olmap/thumb-satellite.jpg`,\n options: {\n url: \"https://{Hostname}/mapproxy/wmts/1.0.0/{Layer}/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png\",\n layer: \"orthofoto\",\n matrixSet: \"ktzh\",\n origin: [2480237.0, 1315832.0],\n extent: [2666867.0, 1220962.0, 2719695.5, 1285537.0]\n }\n }\n };\n\n private _layers: { [key: string]: OlmapLayer } = {};\n\n @Element() element: HTMLStzhOlmapElement;\n\n @Watch(\"layers\")\n layersWatcher(newValue: string | { [key: string]: OlmapLayer }) {\n if (typeof newValue === \"string\") {\n this._layers = JSON.parse(newValue);\n } else {\n this._layers = newValue;\n }\n }\n\n @Watch(\"resolutions\")\n resolutionsWatcher(newValue: string | number[]) {\n if (typeof newValue === \"string\") {\n this._resolutions = JSON.parse(newValue);\n } else {\n this._resolutions = newValue;\n }\n }\n\n @Watch(\"zoom\")\n zoomWatcher(newValue) {\n if (this.map) {\n this.map.getView().setZoom(newValue);\n }\n }\n\n @Watch(\"scaleControl\")\n scaleControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.scaleControlOl = new OlControlScaleLine({\n units: \"metric\"\n })\n\n this.map.addControl(this.scaleControlOl);\n } else {\n if (this.scaleControl) {\n this.map.removeControl(this.scaleControlOl);\n }\n\n this.scaleControlOl = null;\n }\n }\n\n @Watch(\"printControl\")\n printControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.printControlElement = document.createElement(\"button\");\n this.printControlElement.className = \"ol-print\";\n this.printControlElement.ariaLabel = this.localization.printLabel;\n this.printControlElement.addEventListener(\"click\", this.handlePrintButtonClick);\n this.printControlElement.innerHTML = '<stzh-icon name=\"print\" class=\"ol-print__icon\"></stzh-icon>';\n\n this.printControlOl = new OlControlControl({\n element: this.printControlElement\n })\n\n this.map.addControl(this.printControlOl);\n } else {\n if (this.printControlOl) {\n this.map.removeControl(this.printControlOl);\n }\n\n this.printControlOl = null;\n this.printControlElement = null;\n }\n }\n\n @Watch(\"layerControl\")\n layerControlWatcher(newValue: boolean) {\n if (!this.map || this.layersArray.length === 1) {\n return;\n }\n\n if (newValue) {\n this.layerControlElement = document.createElement(\"button\");\n this.layerControlElement.className = \"ol-layer\";\n this.layerControlElement.addEventListener(\"click\", () => {\n this.layer = this.layer === \"streets\" ? \"satellite\" : \"streets\";\n });\n\n this.layerControlImageElement = document.createElement(\"img\");\n this.layerControlImageElement.className = \"ol-layer__thumbnail\";\n this.layerControlImageElement.setAttribute(\"role\", \"presentation\");\n this.layerControlImageElement.setAttribute(\"alt\", \"\");\n\n this.layerControlTextElement = document.createElement(\"span\");\n this.layerControlTextElement.className = \"ol-layer__text\";\n\n this.layerControlElement.appendChild(this.layerControlImageElement);\n this.layerControlElement.appendChild(this.layerControlTextElement);\n\n this.layerControlOl = new OlControlControl({\n element: this.layerControlElement\n })\n\n this.map.addControl(this.layerControlOl);\n } else {\n if (this.layerControlOl) {\n this.map.removeControl(this.layerControlOl);\n }\n\n this.layerControlOl = null;\n this.layerControlElement = null;\n this.layerControlImageElement = null;\n this.layerControlTextElement = null;\n }\n }\n\n @Watch(\"locationControl\")\n locationControlWatcher(newValue: boolean) {\n if (!this.map) {\n return;\n }\n\n if (newValue) {\n this.locationControlElement = document.createElement(\"button\");\n this.locationControlElement.className = \"ol-location\";\n this.locationControlElement.innerHTML = '<stzh-icon name=\"target-bullet\" class=\"ol-location__icon\"></stzh-icon>';\n\n this.locationControlElement.addEventListener(\"click\", () => {\n const isTracking = this.geolocation.getTracking();\n\n if (isTracking) {\n this.disableLocationTracking();\n } else {\n this.enableLocationTracking();\n }\n });\n\n this.locationControlOl = new OlControlControl({\n element: this.locationControlElement\n });\n\n this.geolocation = new OlGeolocation({\n // take the projection to use from the map's view\n projection: this.map.getView().getProjection()\n });\n\n this.positionMarkerOl = new OlFeature();\n this.positionMarkerOl.setId(\"position\");\n\n const iconStyle = new OlStyleStyle({\n image: new OlStyleIcon(STYLES_POSITION_MARKER_ICON_STYLES)\n });\n\n this.positionMarkerOl.setStyle(iconStyle);\n this.positionLayer.getSource().addFeature(this.positionMarkerOl);\n\n // listen to changes in position\n this.geolocation.on(\"change:position\", () => {\n const position = this.geolocation.getPosition();\n\n // zuerich location for testing (bprm6280, Ausbildungszentrum Rohwiesen)\n // const position = [2685067, 1252482];\n\n this.positionMarkerOl.setGeometry(new OlGeomPoint(position));\n\n // if position is within map and first time the position is changed, we center to it\n if (\n !this.geoPositionChanged\n && OlExtent.containsExtent(\n this._layers[this.layer].options.extent,\n this.positionMarkerOl.getGeometry().getExtent()\n )\n ) {\n this.geoPositionChanged = true;\n this.map.getView().setCenter(position);\n\n if (this.zoomLocation) {\n this.map.getView().setZoom(this.zoomLocation);\n }\n }\n });\n\n this.geolocation.on(\"change:tracking\", () => {\n const isTracking = this.geolocation.getTracking();\n\n // reset position\n this.positionMarkerOl.setGeometry(null);\n this.setLocationControlState(isTracking);\n });\n\n this.geolocation.on(\"error\", () => {\n this.setLocationControlState(false);\n });\n\n this.map.addControl(this.locationControlOl);\n } else {\n this.disableLocationTracking();\n\n if (this.locationControlOl) {\n this.map.removeControl(this.locationControlOl);\n }\n\n if (this.positionMarkerOl) {\n this.positionLayer.getSource().removeFeature(this.positionMarkerOl);\n }\n\n this.locationControlOl = null;\n this.locationControlElement = null;\n this.geolocation = null;\n this.positionMarkerOl = null;\n }\n }\n\n @Watch(\"layer\")\n layerWatcher(newValue: string) {\n if (!this.map) {\n return;\n }\n\n Object.entries(this.rasterLayers).forEach(([key, layer]) => {\n if (key === newValue) {\n layer.setVisible(true);\n\n this.map.getView().set(\"projection\", this.projections[newValue]);\n\n const inactiveLayer = this.layersArray.find(([key]) => key !== this.layer);\n\n if (inactiveLayer) {\n if (this.layerControlImageElement) {\n this.layerControlImageElement.src = inactiveLayer[1].thumbnailUrl;\n }\n\n if (this.layerControlTextElement) {\n let defaultTitle = \"\";\n\n if (key === \"streets\") {\n defaultTitle = this.localization.streetsLayerTitle;\n } else if (key === \"satellite\") {\n defaultTitle = this.localization.satelliteLayerTitle;\n }\n\n this.layerControlTextElement.textContent = inactiveLayer[1].title || defaultTitle;\n }\n }\n } else {\n layer.setVisible(false);\n }\n });\n }\n\n @Watch(\"center\")\n centerWatcher(newValue: string | [number, number]) {\n if (typeof newValue === \"string\") {\n this._center = JSON.parse(newValue);\n } else {\n this._center = newValue;\n }\n\n if (this.map) {\n this.map.getView().setCenter(this._center);\n\n if (this.centerMarkerOl) {\n this.centerMarkerOl.setGeometry(new OlGeomPoint(this._center));\n }\n }\n }\n\n @Watch(\"centerMarker\")\n async centerMarkerWatcher(newValue: boolean) {\n if (newValue) {\n // add marker in the center position\n this.centerMarkerOl = await this.addIconMarker(this._center);\n } else if (this.centerMarkerOl) {\n this.removeIconMarker(this.centerMarkerOl);\n }\n }\n\n /** Get map */\n @Method()\n async getMap(): Promise<any> {\n return this.map;\n }\n\n /** Add a icon marker to the icon layer. */\n @Method()\n async addIconMarker(coordinates: number[]) {\n const marker = new OlFeature({\n geometry: new OlGeomPoint(coordinates)\n });\n\n const iconStyle = new OlStyleStyle({\n image: new OlStyleIcon(STYLES_MARKER_ICON)\n });\n\n marker.setStyle(iconStyle);\n this.iconLayer.getSource().addFeature(marker);\n\n return marker;\n }\n\n /** Remove icon marker from icon layer. */\n @Method()\n async removeIconMarker(marker) {\n return this.iconLayer.getSource().removeFeature(marker);\n }\n\n /** Set icon marker as active. */\n @Method()\n async setIconMarkerActive(marker) {\n marker.setStyle(new OlStyleStyle({\n image: new OlStyleIcon(STYLES_ACTIVE_MARKER_ICON)\n }));\n }\n\n /** Set icon marker as inactive. */\n @Method()\n async setIconMarkerInactive(marker) {\n marker.setStyle(new OlStyleStyle({\n image: new OlStyleIcon(STYLES_MARKER_ICON)\n }));\n }\n\n /** Enable user location tracking */\n @Method()\n async enableLocationTracking(centerOnFirstGeoPositionChange = true) {\n this.setLocationControlState(true);\n\n if (centerOnFirstGeoPositionChange) {\n this.geoPositionChanged = false;\n }\n\n if (this.geolocation) {\n this.geolocation.setTracking(true);\n }\n }\n\n /** Disable user location tracking */\n @Method()\n async disableLocationTracking() {\n this.setLocationControlState(false);\n\n if (this.geolocation) {\n this.geolocation.setTracking(false);\n }\n }\n\n /** Get distance between two points in meters */\n @Method()\n async getDistance(startCoords, endCoords) {\n const line = new OlGeomLineString([\n startCoords, endCoords\n ]);\n\n const length = OlSphere.getLength(line, {\n projection: this.map.getView().getProjection()\n });\n\n return length;\n\t}\n\n /** Olmap initialized event */\n @Event() stzhInitialized: EventEmitter<StzhOlmapInitializedEvent>;\n\n /** Olmap postrender event */\n @Event() stzhPostRender: EventEmitter<StzhOlmapPostRenderEvent>;\n\n /** Olmap movestart event */\n @Event() stzhMoveStart: EventEmitter<StzhOlmapMoveStartEvent>;\n\n /** Olmap moveend event */\n @Event() stzhMoveEnd: EventEmitter<StzhOlmapMoveEndEvent>;\n\n @Listen(\"load\", { target: \"window\" })\n @Listen(\"deviceorientation\", { target: \"window\" })\n @Listen(\"pageshow\", { target: \"window\" })\n handleLoad() {\n if (this.map) {\n requestAnimationFrame(() => {\n this.map.updateSize();\n });\n }\n }\n\n private map: OlMap;\n private mapElement: HTMLElement;\n private geolocation: OlGeolocation;\n private printIframe: HTMLIFrameElement;\n\n private layersArray: [string, OlmapLayer][];\n private rasterLayers: { [key: string]: OlLayerTile };\n private projections: { [key: string]: OlProjProjection };\n\n private positionMarkerOl: OlFeature;\n private centerMarkerOl: OlFeature;\n\n private positionLayer: OlLayerVector;\n private iconLayer: OlLayerVector;\n\n private geoPositionChanged: boolean = false;\n\n // controls\n\n private layerControlOl: OlControlControl;\n private layerControlElement: HTMLElement;\n private layerControlTextElement: HTMLElement;\n private layerControlImageElement: HTMLImageElement;\n\n private scaleControlOl: OlControlScaleLine;\n\n private printControlOl: OlControlControl;\n private printControlElement: HTMLElement;\n\n private locationControlOl: OlControlControl;\n private locationControlElement: HTMLElement;\n\n private handlePostRender = () => {\n this.stzhPostRender.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleMoveStart = () => {\n this.stzhMoveStart.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleMoveEnd = () => {\n this.stzhMoveEnd.emit({\n component: \"stzh-olmap\"\n });\n }\n\n private handleInsideModalOpen = () => {\n if (this.map) {\n requestAnimationFrame(() => {\n this.map.updateSize();\n });\n }\n }\n\n private handlePrintButtonClick = () => {\n // TODO: check with client if print is still needed and if related contact component needs to be printed too\n if (!this.printIframe) {\n this.printIframe = document.createElement(\"iframe\");\n Object.assign(this.printIframe.style, {\n \"height\": \"0px\",\n \"width\": \"0px\",\n \"position\": \"absolute\",\n \"border\": \"none\"\n });\n\n this.element.append(this.printIframe);\n }\n\n // empty iframe\n this.printIframe.innerHTML = \"\";\n\n const printWindow = this.printIframe.contentWindow;\n const componentCss = (this.constructor as any).style.replace('@charset \"UTF-8\";', \"\");\n const globalCssLinks = Array.from(document.querySelectorAll(\"link\")).map((node) => node.outerHTML);\n\n let img;\n\n this.map.once(\"postcompose\", function(event) {\n const canvas = event.context.canvas;\n img = canvas.toDataURL(\"image/png\");\n });\n\n this.map.renderSync();\n\n printWindow.document.body.innerHTML = `\n ${globalCssLinks.join(\"\")}\n\n <style type=\"text/css\">\n ${componentCss}\n </style>\n\n <div class=\"stzh-olmap__map stzh-olmap__map--print\">\n <img class=\"stzh-olmap__print-image\" src=\"${img}\">\n ${this.element.querySelector(\".ol-scale-line.ol-unselectable\").outerHTML}\n </div>\n `;\n\n // printWindow.document.write('<div class=\"mod_contact\">');\n\n // const contact = this.element.closest('.mod_contact');\n\n // if (contact) {\n // const contactCard = contact.querySelector('.mod_contactcard');\n // printWindow.document.write('<div class=\"mod_contactcard\">');\n // printWindow.document.write(contactCard.innerHTML);\n // printWindow.document.write('</div>');\n // }\n\n // printWindow.document.write('<div class=\"stzh-olmap__map stzh-olmap__map--print\">');\n // printWindow.document.write('<img class=\"stzh-olmap__print-image\" src=\"' + img + '\" alt=\"\">');\n // printWindow.document.write(this.element.querySelector('.ol-scale-line.ol-unselectable').outerHTML);\n // printWindow.document.write('</div>');\n // printWindow.document.write('</div>');\n // printWindow.document.close();\n\n setTimeout(() => {\n // acts as a bugfix for IE 11\n // https://stackoverflow.com/questions/24673024/unable-to-print-iframe-content-from-parent-page-in-ie-11\n try {\n printWindow.document.execCommand(\"print\", false, null);\n } catch (e) {\n printWindow.print();\n }\n }, 1000);\n }\n\n private setLocationControlState(active) {\n if (this.positionLayer) {\n this.positionLayer.setVisible(active);\n }\n\n if (this.locationControlElement) {\n this.locationControlElement.classList.toggle(\"active\", active);\n }\n }\n\n private createMap() {\n const zoomIn = document.createElement(\"stzh-icon\");\n zoomIn.ariaLabel = this.localization.zoomInLabel;\n zoomIn.name = \"plus\";\n\n const zoomOut = document.createElement(\"stzh-icon\");\n zoomOut.ariaLabel = this.localization.zoomOutLabel;\n zoomOut.name = \"minus\";\n\n const rotate = document.createElement('div');\n rotate.innerHTML = Compass;\n\n const rotateText = document.createElement(\"span\");\n rotateText.innerText = this.localization.rotateLabel;\n\n rotate.appendChild(rotateText);\n\n const map = new OlMap({\n controls: OlControl.defaults({\n // https://openlayers.org/en/v4.6.5/apidoc/olx.control.html#.ZoomOptions\n zoomOptions: {\n zoomInLabel: zoomIn,\n zoomOutLabel: zoomOut,\n zoomInTipLabel: \"\",\n zoomOutTipLabel: \"\"\n },\n // https://openlayers.org/en/v4.6.5/apidoc/olx.control.html#.RotateOptions\n rotateOptions: {\n label: rotate,\n tipLabel: \"\"\n }\n }),\n interactions: new OlCollection([\n\t\t\t\tnew OlInteractionDragRotate(),\n\t\t\t\tnew OlInteractionDoubleClickZoom(),\n\t\t\t\tnew OlInteractionDragPan(),\n\t\t\t\tnew OlInteractionPinchRotate({\n\t\t\t\t\tthreshold: this.pinchRotateThreshold\n\t\t\t\t}),\n\t\t\t\tnew OlInteractionPinchZoom(),\n\t\t\t\tnew OlInteractionKeyboardPan(),\n\t\t\t\tnew OlInteractionKeyboardZoom(),\n\t\t\t\tnew OlInteractionDragZoom(),\n\t\t\t]),\n loadTilesWhileAnimating: true,\n loadTilesWhileInteracting: true,\n target: this.mapElement,\n logo: false\n });\n\n return map;\n }\n\n private createRasterLayer(key, options) {\n return new OlLayerTile({\n title: \"wmts\",\n type: \"base\",\n extent: options.extent,\n source: this.createLayerSource(key, options)\n });\n }\n\n private createLayerSource(key, options) {\n if (!this.projections) {\n this.projections = {};\n }\n\n this.projections[key] = new OlProjProjection({\n code: \"EPSG:2056\",\n extent: options.extent\n });\n\n return this.creatRasterSource(key, options);\n }\n\n private creatRasterSource(key, options) {\n const { url, layer, matrixSet, origin } = options;\n const matrixIds = [];\n\n for (let i = 0; i < this._resolutions.length; i++) {\n matrixIds.push(i);\n }\n\n const tileGrid = new OlTilegridWmts({\n origin,\n resolutions: this._resolutions,\n matrixIds,\n tileSize: [512, 512]\n });\n\n return new OlSourceWmts(({\n url,\n tileGrid: tileGrid,\n style: \"default\",\n projection: this.projections[key],\n crossOrigin: \"anonymous\",\n layer,\n matrixSet,\n requestEncoding: \"REST\"\n }));\n }\n\n private createIconLayer() {\n return new OlLayerVector({\n source: new OlSourceVector({})\n });\n }\n\n private initMap() {\n this.map = this.createMap();\n\n // events from https://openlayers.org/en/v4.6.5/apidoc/ol.Map.html\n this.map.on(\"postrender\", this.handlePostRender);\n this.map.on(\"movestart\", this.handleMoveStart);\n this.map.on(\"moveend\", this.handleMoveEnd);\n\n this.layersArray = Object.entries(this._layers);\n\n if (this.layersArray.length > 2) {\n throw new Error(\"There are only two different layers allowed.\");\n }\n\n this.rasterLayers = {};\n this.layersArray.forEach(([key, layer]) => {\n layer.options.url = layer.options.url.replace(/\\{hostname\\}/gi, this.hostname);\n this.rasterLayers[key] = this.createRasterLayer(key, layer.options);\n this.map.addLayer(this.rasterLayers[key]);\n });\n\n // add the VectorLayer which is used for adding the position marker to the map\n // (above raster layers)\n this.positionLayer = this.createIconLayer();\n this.positionLayer.setVisible(false);\n this.map.addLayer(this.positionLayer);\n\n // add the VectorLayer which is used for adding icon markers to the map\n // (above raster and position marker layer)\n this.iconLayer = this.createIconLayer();\n this.map.addLayer(this.iconLayer);\n\n const view = new OlView({\n center: this._center,\n projection: this.projections[this.layer],\n zoom: this.zoom,\n resolutions: this._resolutions\n });\n\n this.map.setView(view);\n\n this.scaleControlWatcher(this.scaleControl);\n this.printControlWatcher(this.printControl);\n this.locationControlWatcher(this.locationControl);\n\n this.layerControlWatcher(this.layerControl);\n this.layerWatcher(this.layer);\n\n this.centerWatcher(this.center);\n this.centerMarkerWatcher(this.centerMarker);\n\n requestAnimationFrame(() => {\n // this.map.updateSize();\n\n // test orientation on desktop\n // this.map.getView().setRotation(45);\n\n this.stzhInitialized.emit({\n component: \"stzh-olmap\"\n });\n });\n }\n\n componentShouldUpdate(_newValue, _oldValue, prop: string) {\n return [\n \"hostname\",\n \"localization\",\n \"layers\",\n \"resolutions\",\n \"pinchRotateThreshold\"\n ].includes(prop);\n }\n\n async componentWillLoad() {\n this.layersWatcher(this.layers);\n this.resolutionsWatcher(this.resolutions);\n\n if (!this.localization) {\n this.localization = await window.stzhComponents.utils.fetchTranslations(this.element, \"olmap\");\n }\n }\n\n componentWillUpdate() {\n if (this.map) {\n this.map.setTarget(null);\n this.map = null;\n }\n }\n\n componentDidRender() {\n if (this.map) {\n return;\n }\n\n this.initMap();\n }\n\n connectedCallback() {\n const dialog = this.element.closest(\"stzh-dialog\");\n\n if (dialog) {\n dialog.addEventListener(\"stzhOpen\", this.handleInsideModalOpen);\n }\n }\n\n disconnectedCallback() {\n if (this.map) {\n this.map.setTarget(null);\n this.map = null;\n }\n\n const dialog = this.element.closest(\"stzh-dialog\");\n\n if (dialog) {\n dialog.removeEventListener(\"stzhOpen\", this.handleInsideModalOpen);\n }\n }\n\n render() {\n const classes = {\n \"stzh-olmap\": true,\n \"stzh-olmap--has-no-layer-control\": !this.layerControl,\n \"stzh-olmap--has-no-print-control\": !this.printControl,\n \"stzh-olmap--has-location-control\": this.locationControl\n };\n\n return (\n <Host>\n <div class={classes}>\n <div\n ref={(el) => (this.mapElement = el as HTMLDivElement)}\n class=\"stzh-olmap__map\"\n ></div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -386,7 +386,6 @@
386
386
  @media screen and (min-width: 1260px) {
387
387
  .stzh-pagetitle__disturber {
388
388
  width: calc(((100% - 11 * var(--stzh-grid-gutter-large)) / 12 * 4) + 3 * var(--stzh-grid-gutter-large));
389
- bottom: calc(var(--stzh-space-huge) / -1);
390
389
  }
391
390
  }
392
391
  @media screen and (min-width: 1600px) {