1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign journalContent = serviceLocator.findService("com.liferay.journal.util.JournalContent") />
3<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
4<#assign portletPreferencesLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferencesLocalService") />
5<#assign ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService") />
6<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
7<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
8<#assign calendarBookingLocalService = serviceLocator.findService("com.liferay.calendar.service.CalendarBookingLocalService") />
9<#assign namespace = randomNamespace />
10<#assign day = 24 * 60 * 60 * 1000 />
11<#assign eventCalendarStructureKeysFilter = "" />
12
13<script type="text/javascript">
14 ${namespace}eventDetailLinkTemplates = new Array();
15</script>
16
17<#if (eventCalendarIds?? && eventCalendarIds?has_content)>
18 <#assign
19 layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
20 classResolverUtil = staticUtil["com.liferay.portal.kernel.util.ClassResolverUtil"]
21 dynamicQueryFactoryUtil = staticUtil["com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil"]
22 propertyFactoryUtil = staticUtil["com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil"]
23 portletPreferencesClass = classResolverUtil.resolveByPortalClassLoader("com.liferay.portal.kernel.model.PortletPreferences")
24 dynamicQuery = dynamicQueryFactoryUtil.forClass(portletPreferencesClass)
25 VOID = dynamicQuery.add(propertyFactoryUtil.forName("portletId").eq("de_xdot_um_event_ui_lr7_portlet_EventCalendarPortlet"))
26 portletPreferencesList = portletPreferencesLocalService.dynamicQuery(dynamicQuery)
27 />
28 <#list portletPreferencesList as portletPreferences>
29 <#assign
30 javaxPortletPreferences = portletPreferencesLocalService.getPreferences(portletPreferences.companyId, portletPreferences.ownerId, portletPreferences.ownerType, portletPreferences.plid, portletPreferences.portletId)
31 calendarIdValue = javaxPortletPreferences.getValue("calendarId", "")
32 calendarIds = stringUtil.split(calendarIdValue)
33 targetLayout = layoutLocalService.getLayout(portletPreferences.plid)
34 targetFriendlyURL = targetLayout.friendlyURL
35 eventDetailLinkTemplate = targetFriendlyURL + "?p_p_id=de_xdot_um_event_ui_lr7_portlet_EventCalendarPortlet&_de_xdot_um_event_ui_lr7_portlet_EventCalendarPortlet_eventId="
36 />
37 <#list calendarIds as calendarId>
38 <script type="text/javascript">
39 ${namespace}eventDetailLinkTemplates['${calendarId}'] = "${eventDetailLinkTemplate}";
40 </script>
41 </#list>
42 </#list>
43
44</#if>
45
46<#if eventCalendarStructureKeys?? && eventCalendarStructureKeys?has_content>
47 <#if eventCalendarStructureKeys?contains(",")>
48 <#assign eventCalendarStructureKeysFilter>,ddmStructureKeys: [<#list eventCalendarStructureKeysFilter?split(",") as key>"${key}"<#if key?has_next>,</#if></#list>]</#assign>
49 <#else>
50 <#assign eventCalendarStructureKeysFilter>,ddmStructureKeys: ["${eventCalendarStructureKeys}"]</#assign>
51 </#if>
52</#if>
53
54<#assign defaultTimeRange = "30">
55<#if eventCalendarDefaultTimeRange?? && eventCalendarDefaultTimeRange?has_content>
56 <#assign defaultTimeRange = eventCalendarDefaultTimeRange />
57</#if>
58
59<#assign featureCollectionJSONObject = jsonFactoryUtil.createJSONObject() />
60
61<@liferay.silently featureCollectionJSONObject.put("type", "FeatureCollection") />
62
63<#assign featureJSONArray = jsonFactoryUtil.createJSONArray() />
64
65<#assign
66 allCategoryIds = []
67/>
68
69<#list entries as entry>
70 <#list entry.getCategoryIds() as categoryId>
71 <#assign
72 strCategoryId = categoryId?c
73 />
74 <#if !allCategoryIds?seq_contains(strCategoryId)>
75 <#assign
76 allCategoryIds = allCategoryIds + [ categoryId?c ]
77 />
78 </#if>
79 </#list>
80
81 <#assign
82 assetRenderer = entry.getAssetRenderer()
83
84 ddmFormValuesReader = assetRenderer.getDDMFormValuesReader()
85
86 ddmFormFieldValues = ddmFormValuesReader.getDDMFormFieldValues("ddm-geolocation")
87
88 coordinatesJSONObjects = []
89 />
90
91 <#list ddmFormFieldValues as ddmFormFieldValue>
92 <#assign
93 value = ddmFormFieldValue.getValue()
94
95 coordinatesJSONObject = jsonFactoryUtil.createJSONObject(value.getString(locale))
96
97 coordinatesJSONObjects = coordinatesJSONObjects + [coordinatesJSONObject]
98 />
99 </#list>
100
101 <#list coordinatesJSONObjects as coordinatesJSONObject>
102 <#assign featureJSONObject = jsonFactoryUtil.createJSONObject() />
103
104 <@liferay.silently featureJSONObject.put("type", "Feature") />
105
106 <#assign geometryJSONObject = jsonFactoryUtil.createJSONObject() />
107
108 <@liferay.silently geometryJSONObject.put("type", "Point") />
109
110 <#assign coordinatesJSONArray = [coordinatesJSONObject.getDouble("longitude"), coordinatesJSONObject.getDouble("latitude")] />
111
112 <@liferay.silently geometryJSONObject.put("coordinates", coordinatesJSONArray) />
113
114 <@liferay.silently featureJSONObject.put("geometry", geometryJSONObject) />
115
116 <#assign propertiesJSONObject = jsonFactoryUtil.createJSONObject() />
117
118 <#assign article = assetRenderer.getArticle() />
119 <#assign title = article.getTitle(locale) />
120 <#assign structureKey = article.getDDMStructureKey() />
121 <#assign templateKey = getTemplateKey(structureKey) />
122
123 <@liferay.silently propertiesJSONObject.put("title", title) />
124
125 <@liferay.silently propertiesJSONObject.put("groupId", entry.groupId) />
126 <@liferay.silently propertiesJSONObject.put("articleId", article.articleId) />
127 <@liferay.silently propertiesJSONObject.put("version", article.version) />
128 <@liferay.silently propertiesJSONObject.put("templateKey", templateKey) />
129
130 <#assign categoriesJSONArray = jsonFactoryUtil.createJSONArray() />
131 <#list assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(article.getResourcePrimKey())) as assetCategory>
132 <#assign categoryJSONObject = jsonFactoryUtil.createJSONObject() />
133 <@liferay.silently categoryJSONObject.put("categoryId", assetCategory.getCategoryId()) />
134 <@liferay.silently categoryJSONObject.put("categoryName", assetCategory.getName()) />
135 <@liferay.silently categoriesJSONArray.put(categoryJSONObject) />
136 </#list>
137 <@liferay.silently propertiesJSONObject.put("assetCategories", categoriesJSONArray) />
138
139 <#if eventCalendarIds?? && eventCalendarIds?has_content>
140 <#assign calendarBookinsJSONArray = jsonFactoryUtil.createJSONArray() />
141 <#list getterUtil.getString(eventCalendarIds)?split(',') as eventCalendarId>
142 <#list calendarBookingLocalService.getCalendarBookings(getterUtil.getLong(eventCalendarId)) as calendarBooking>
143 <#list assetCategoryLocalService.getCategories("com.liferay.calendar.model.CalendarBooking", getterUtil.getLong(calendarBooking.getPrimaryKey())) as assetCategory>
144 <#assign calendarBookingCategoryJSONObject = jsonFactoryUtil.createJSONObject() />
145 <@liferay.silently calendarBookingCategoryJSONObject.put("categoryId", assetCategory.getCategoryId()) />
146 <@liferay.silently calendarBookingCategoryJSONObject.put("categoryName", assetCategory.getName()) />
147 <@liferay.silently calendarBookinsJSONArray.put(calendarBookingCategoryJSONObject) />
148 </#list>
149 </#list>
150 </#list>
151 <@liferay.silently propertiesJSONObject.put("calendarBookingCategories", calendarBookinsJSONArray) />
152 </#if>
153
154 <@liferay.silently propertiesJSONObject.put("assetCategories", categoriesJSONArray) />
155 <@liferay.silently featureJSONObject.put("properties", propertiesJSONObject) />
156
157 <@liferay.silently featureJSONArray.put(featureJSONObject) />
158 </#list>
159</#list>
160
161<@liferay.silently featureCollectionJSONObject.put("features", featureJSONArray) />
162
163<#assign portletURL>
164 <@liferay_portlet.renderURL />
165</#assign>
166
167<div id="${namespace}umweltakademie-map" class="umweltakademie-map"></div>
168
169<#assign hasDateFilter = false />
170<#if (eventCalendarIds?? && eventCalendarIds?has_content)>
171 <#assign hasDateFilter = true />
172</#if>
173<#if eventCalendarShowDateFilter?? && eventCalendarShowDateFilter?has_content>
174 <#assign hasDateFilter = getterUtil.getBoolean(eventCalendarShowDateFilter) />
175</#if>
176
177<#if !hasDateFilter>
178 <input class="form-control searchInput" type="hidden" id="${namespace}fromDate">
179 <input class="form-control searchInput" type="hidden" id="${namespace}toDate">
180</#if>
181
182<#if hasDateFilter>
183 <div class="umweltakademie-map__datefilter">
184 <div class="row-fluid container date-picker-form">
185 <div class="col-md-3 date-picker-field-wrapper">
186 <select class="target form-control" id="${namespace}dateRange">
187 <option value>INDIVIDUELLER ZEITRAUM</option>
188 <option value="7" <#if defaultTimeRange == "7">selected</#if>>IN DEN NÄCHSTEN 7 TAGEN</option>
189 <option value="14" <#if defaultTimeRange == "14">selected</#if>>IN DEN NÄCHSTEN 14 TAGEN</option>
190 <option value="30" <#if defaultTimeRange == "30">selected</#if>>IN DEN NÄCHSTEN 30 TAGEN</option>
191 <option value="365" <#if defaultTimeRange == "365">selected</#if>>INNERHALB EINES JAHRES</option>
192 </select>
193 </div>
194 <div class="col-md-3 date-picker-field-wrapper">
195 <input class="form-control searchInput" type="text" placeholder="DATUM: VON" id="${namespace}fromDate">
196 </div>
197 <div class="col-md-3 date-picker-field-wrapper">
198 <input class="form-control searchInput" type="text" placeholder="DATUM: BIS" id="${namespace}toDate">
199 </div>
200 <div class="col-md-3 date-picker-field-wrapper">
201 <button class="btn btn-large btn-block btn-primary" id="${namespace}searchButton">SUCHEN</button>
202 </div>
203 </div>
204 </div>
205
206 <div class="row-fluid container reset-btn-holder umweltakademie-map__reset-button">
207 <a class="date-picker-reset-btn" id="${namespace}resetButton">FILTER ZURÜCKSETZEN</a>
208 </div>
209 <script>
210 YUI().use(
211 'aui-button',
212 function (Y) {
213 new Y.Button(
214 {
215 srcNode: '#${namespace}searchButton',
216 on: {
217 click: function () {
218 var searchOptions = {
219 fromDate: formatStringToDate(${namespace}fromDate.value).getTime(),
220 toDate: formatStringToDate(${namespace}toDate.value).getTime() + ${day}
221 };
222 ${namespace}loadMap();
223 ${namespace}loadEvents(searchOptions)
224
225
226 AUI().use('aui-base', function(A) {
227 var filters = A.all('#${namespace}umweltakademie-map-filter .template-filter:checked');
228 var subFilters = A.all('#${namespace}umweltakademie-map-filter .template-subfilter');
229
230 filters.each(function (filter) {
231 filter['_node'].checked = false;
232 });
233 subFilters.each(function (filter) {
234 filter['_node'].checked = false;
235 });
236 });
237 }
238 }
239 }
240 ).render();
241
242 }
243 );
244 </script>
245 <script>
246 YUI().use(
247 'aui-button',
248 function (Y) {
249 new Y.Button(
250 {
251 srcNode: '#${namespace}resetButton',
252 on: {
253 click: function () {
254 ${namespace}fromDate.setAttribute('value', formatDate(new Date()));
255 ${namespace}toDate.setAttribute('value', formatDate(new Date(new Date().getTime() + (${defaultTimeRange?number} * ${day}))));
256 ${namespace}fromDate.value = formatDate(new Date());
257 ${namespace}toDate.value = formatDate(new Date(new Date().getTime() + (${defaultTimeRange?number} * ${day})));
258
259 var searchOptions = {
260 fromDate: formatStringToDate(${namespace}fromDate.value).getTime(),
261 toDate: formatStringToDate(${namespace}toDate.value).getTime() + ${day}
262 };
263
264 $('#${namespace}dateRange option').each(function () {
265 if (this.value == '${defaultTimeRange}') {
266 this.selected = true;
267 return false;
268 }
269 });
270
271 ${namespace}loadMap(searchOptions);
272 ${namespace}loadEvents(searchOptions)
273
274 AUI().use('aui-base', function(A) {
275 var filters = A.all('#${namespace}umweltakademie-map-filter .template-filter:checked');
276 var subFilters = A.all('#${namespace}umweltakademie-map-filter .template-subfilter');
277
278 filters.each(function (filter) {
279 filter['_node'].checked = false;
280 });
281 subFilters.each(function (filter) {
282 filter['_node'].checked = false;
283 });
284 });
285 }
286 }
287 }
288 ).render();
289
290 }
291 );
292 </script>
293 <script>
294 $(".target").change(function () {
295 ${namespace}fromDate.setAttribute('value', formatDate(new Date()));
296 ${namespace}toDate.setAttribute('value', formatDate(new Date(new Date().getTime() + (${namespace}dateRange.value * ${day}))));
297 ${namespace}fromDate.value = formatDate(new Date());
298 ${namespace}toDate.value = formatDate(new Date(new Date().getTime() + (${namespace}dateRange.value * ${day})))
299 });
300 </script>
301 <script>
302 var ${namespace}datepickerFrom;
303 YUI({lang: 'de'}).use(
304 'aui-datepicker',
305 function (Y) {
306 ${namespace}datepickerFrom = new Y.DatePicker(
307 {
308 trigger: '#${namespace}fromDate',
309 mask: '%d.%m.%Y',
310 popover: {
311 on : {
312 click: function () {
313 $('#${namespace}dateRange option').each(function () {
314 if (this.value == '') {
315 this.selected = true;
316 return false;
317 }
318 });
319
320 }
321 },
322 zIndex: 2
323 }
324 }
325 );
326 }
327 );
328 </script>
329 <script>
330 var ${namespace}datepickerTo;
331 YUI({lang: 'de'}).use(
332 'aui-datepicker',
333 function (Y) {
334 ${namespace}datepickerTo = new Y.DatePicker(
335 {
336 trigger: '#${namespace}toDate',
337 mask: '%d.%m.%Y',
338 popover: {
339 on : {
340 click: function () {
341 $('#${namespace}dateRange option').each(function () {
342 if (this.value == '') {
343 this.selected = true;
344 return false;
345 }
346 });
347 }
348 },
349 zIndex: 2
350 }
351 }
352 );
353 }
354 );
355 </script>
356</#if>
357
358<script>
359 function formatDate(date) {
360 var day = date.getDate();
361 var monthIndex = date.getMonth() + 1;
362 var year = date.getFullYear();
363
364 return day + '.' + monthIndex + '.' + year;
365 }
366
367 function formatStringToDate(str) {
368 // Split date string to ['dd', 'mm', 'yyyy']
369 var day = str.split('.')[0];
370 var month = str.split('.')[1];
371 var year = str.split('.')[2];
372
373 return new Date(month + '/' + day + '/' + year);
374 }
375
376 function ${namespace}initDates() {
377 if (typeof ${namespace}fromDate !== 'undefined') {
378 ${namespace}fromDate.setAttribute('value', formatDate(new Date()));
379 ${namespace}toDate.setAttribute('value', formatDate(new Date(new Date().getTime() + (${defaultTimeRange?number} * ${day}))));
380 ${namespace}fromDate.value = formatDate(new Date());
381 ${namespace}toDate.value = formatDate(new Date(new Date().getTime() + (${defaultTimeRange?number} * ${day})));
382 }
383 }
384
385 $(document).ready(${namespace}initDates);
386 Liferay.on('endNavigate', ${namespace}initDates);
387</script>
388
389<#if anyClassTypeJournalArticleAssetRendererFactory?? && anyClassTypeJournalArticleAssetRendererFactory?has_content && anyClassTypeJournalArticleAssetRendererFactory != "false">
390 <#assign classTypeIdsJournalArticleAssetRendererFactory = anyClassTypeJournalArticleAssetRendererFactory />
391</#if>
392
393<#assign groupIds = portal.getCurrentAndAncestorSiteGroupIds(themeDisplay.getScopeGroupId())/>
394
395<#assign showFilter = true />
396<#if eventCalendarShowCategoryFilter?? && eventCalendarShowCategoryFilter?has_content>
397 <#assign showFilter = getterUtil.getBoolean(eventCalendarShowCategoryFilter) />
398</#if>
399<#assign hasFilterCategories = false />
400
401<#if !(eventCalendarIds?? && eventCalendarIds?has_content)>
402 <#if !classTypeIdsJournalArticleAssetRendererFactory?contains(",")>
403 <#assign classTypeId = classTypeIdsJournalArticleAssetRendererFactory>
404 <#assign assetVocabularies = assetVocabularyLocalService.getGroupsVocabularies(groupIds, "com.liferay.journal.model.JournalArticle", getterUtil.getLong(classTypeId)) />
405 <#if assetVocabularies?? && assetVocabularies?has_content>
406 <#list assetVocabularies as assetVocabulary>
407 <#if assetVocabulary.name != "Topic" && assetVocabulary.name != "Topic (2)">
408 <#assign assetCategoriesCount = assetCategoryLocalService.getVocabularyRootCategoriesCount(assetVocabulary.vocabularyId) />
409 <#if assetCategoriesCount > 0>
410 <#assign hasFilterCategories = true />
411 <#break />
412 </#if>
413 </#if>
414 </#list>
415 <#if hasFilterCategories == false>
416 <#assign showFilter = false />
417 </#if>
418 </#if>
419 </#if>
420</#if>
421
422<#if showFilter == true>
423 <div class="umweltakademie-map-filter-wrapper <#if hasDateFilter>with-date-filter</#if>">
424 <a id="${namespace}umweltakademie-map-filter-button" href="#${namespace}umweltakademie-map-filter" class="umweltakademie-map-filter-button" data-toggle="collapse" aria-expanded="false"><span class="title">Filter</span> <span class="icon icon-um-chevron-down-small"></span><span class="icon icon-um-close"></span></a>
425 <div id="${namespace}umweltakademie-map-filter" class="collapse umweltakademie-map-filter accordion-group" aria-expanded="false">
426
427 <#if eventCalendarIds?? && eventCalendarIds?has_content>
428 <div id="${namespace}umweltakademie-map-filter-events"></div>
429 </#if>
430
431 <#list classTypeIdsJournalArticleAssetRendererFactory?split(",") as classTypeId>
432
433 <#assign ddmStructure = ddmStructureLocalService.getStructure(getterUtil.getLong(classTypeId)) />
434 <#assign ddmStructureKey = ddmStructure.getStructureKey() />
435 <#assign ddmTemplateKey = getTemplateKey(ddmStructureKey) />
436 <#assign assetVocabularies = assetVocabularyLocalService.getGroupsVocabularies(groupIds, "com.liferay.journal.model.JournalArticle", getterUtil.getLong(classTypeId)) />
437
438 <#if ddmTemplateKey == "MEDIATHEK-POPUP">
439 <#assign ddmStructureKey = "MEDIATHEK" />
440 </#if>
441
442 <#switch ddmStructureKey>
443 <#case "LANDSCHAFTSFUEHRER">
444 <#case "ARTENSCHUTZ-FACHBERATER">
445 <#case "AKTEUR-LEBENDIGER-WEINBERG">
446 <#case "MEDIATHEK">
447 <#case "UM_ERLEBNISSE">
448 <#case "UM_FACHTAGUNGEN">
449 <#case "UM_NATURERLEBNISWOCHE">
450 <#assign name = ddmStructure.getName(locale) />
451
452 <#if name == "Mediathek">
453 <#assign name = "Audio-VideoGuides" />
454 </#if>
455
456 <div class="checkbox-line">
457 <#if ddmTemplateKey == 'LANDSCHAFTSFUEHRER-POPUP'>
458 <img src="/o/um-enviroment-academy-theme/images/map/Pin_Landschaftsfuehrer_4c.svg" class="checkbox-line-image">
459 <#elseif ddmTemplateKey == 'AKTEUR-LEBENDIGER-WEINBERG-POPUP'>
460 <img src="/o/um-enviroment-academy-theme/images/map/Pin_Lebendiger_Weinberg_4c.svg" class="checkbox-line-image" >
461 <#elseif ddmTemplateKey == 'ARTENSCHUTZ-FACHBERATER-POPUP'>
462 <img src="/o/um-enviroment-academy-theme/images/map/Pin_Artenschutz_Fachberater_4c.svg" class="checkbox-line-image" >
463 <#elseif ddmTemplateKey == 'MEDIATHEK-POPUP'>
464 <img src="/o/um-enviroment-academy-theme/images/map/Pin_Audio_VideoGuides_4c.svg" class="checkbox-line-image" >
465 </#if>
466
467 <label class="checkbox-label">
468 <input type="checkbox" class="checkbox template-filter" data-templatekey="${ddmTemplateKey}" checked="true">
469 <span class="checkbox-title">${name}</span>
470 <span class="checkbox-marker"></span>
471 </label>
472
473
474 <#assign hasCategories = false />
475
476 <#if assetVocabularies?? && assetVocabularies?has_content>
477 <#list assetVocabularies as assetVocabulary>
478 <#if assetVocabulary.name != "Topic" && assetVocabulary.name != "Topic (2)">
479 <#assign assetCategoriesCount = assetCategoryLocalService.getVocabularyRootCategoriesCount(assetVocabulary.vocabularyId) />
480 <#if assetCategoriesCount > 0>
481 <a href="#${namespace}${ddmTemplateKey}" data-toggle="collapse" data-parent="#${namespace}umweltakademie-map-filter" aria-expanded="false" class="collapse-icon-wrapper">
482 <span class="icon icon-um-chevron-down-small"></span>
483 </a>
484 <#break />
485 </#if>
486 </#if>
487 </#list>
488 </#if>
489
490 <div class="collapse-categories-wrapper">
491 <div id="${namespace}${ddmTemplateKey}" class="collapse">
492
493 <#list assetVocabularies as assetVocabulary>
494 <#if assetVocabulary.name != "Topic" && assetVocabulary.name != "Topic (2)">
495 <#assign assetCategories = assetCategoryLocalService.getVocabularyRootCategories(assetVocabulary.vocabularyId, -1, -1, nullArg) />
496
497 <span>${assetVocabulary.getTitle(locale)}</span>
498 <div id="${namespace}${assetVocabulary.name}${ddmTemplateKey}" style="margin: 0 5px 0 22px; max-width: 340px;">
499 <#list assetCategories as assetCategory>
500 <#if allCategoryIds?seq_contains(assetCategory.categoryId?c)>
501 <label class="checkbox-label">
502 <span class="checkbox-title">${assetCategory.getTitle(locale)}</span>
503 <input type="checkbox"
504 class="template-subfilter checkbox"
505 data-templatekey="${ddmTemplateKey}"
506 data-vocabularyName="${assetVocabulary.name}"
507 data-categoryId="${assetCategory.categoryId}"
508 checked="true"
509 >
510 <span class="checkbox-marker"></span>
511 </label>
512 </#if>
513 </#list>
514 </div>
515 </#if>
516 </#list>
517
518 </div>
519 </div>
520 </div>
521 <#break />
522 </#switch>
523 </#list>
524 </div>
525 </div>
526</#if>
527<script>
528 var tipObj = null;
529 var tipOffset = {
530 x: 10,
531 y: 20
532 };
533
534 function ${namespace}initMap(options) {
535 ${namespace}infowindow = new google.maps.InfoWindow(
536 {
537 maxWidth: 300
538 }
539 );
540
541 var geoJSON = JSON.parse('${featureCollectionJSONObject}');
542 var maxZoomLevel = 16;
543
544 var mapDiv = document.getElementById('${namespace}umweltakademie-map');
545
546 if (mapDiv) {
547 ${namespace}map = new google.maps.Map(
548 mapDiv,
549 {
550 center: { lat: 48.78232, lng: 9.17702 },
551 zoom: 8,
552 maxZoom: maxZoomLevel,
553 zoomControl: (! Liferay.Browser.isMobile()),
554 mapTypeControl: false,
555 scaleControl: false,
556 streetViewControl: false,
557 rotateControl: false,
558 fullscreenControl: false,
559 styles: [
560 {
561 "featureType": "poi",
562 "stylers": [
563 {
564 "visibility": "off"
565 }
566 ]
567 },
568 {
569 "featureType": "poi.park",
570 "elementType": "labels",
571 "stylers": [
572 {
573 "visibility": "off"
574 }
575 ]
576 },
577 {
578 "featureType": "transit",
579 "stylers": [
580 {
581 "visibility": "off"
582 }
583 ]
584 }
585 ]
586 }
587 );
588
589 ${namespace}oms = new OverlappingMarkerSpiderfier(
590 ${namespace}map,
591 {
592 markersWontMove: true,
593 markersWontHide: true,
594 basicFormatEvents: false,
595 keepSpiderfied: true,
596 circleFootSeparation: 100,
597 circleStartAngle: 1,
598 circleSpiralSwitchover: Infinity,
599 spiralFootSeparation: 100,
600 spiralLengthStart: 25,
601 spiralLengthFactor: 8,
602 legWeight: 2.5
603 }
604 );
605
606 ${namespace}markers = geoJSON && geoJSON.features.map(
607 function(feature) {
608 var coords = feature.geometry.coordinates;
609 var marker = new google.maps.Marker(
610 {
611 position: new google.maps.LatLng(coords[1], coords[0]),
612 properties: feature.properties,
613 selected: false,
614 title: feature.properties.title
615 }
616 );
617
618 var icon;
619 if (feature.properties.templateKey === 'LANDSCHAFTSFUEHRER-POPUP') {
620 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Landschaftsfuehrer_4c.svg';
621 } else if (feature.properties.templateKey === 'AKTEUR-LEBENDIGER-WEINBERG-POPUP') {
622 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Lebendiger_Weinberg_4c.svg';
623 } else if (feature.properties.templateKey === 'ARTENSCHUTZ-FACHBERATER-POPUP') {
624 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Artenschutz_Fachberater_4c.svg';
625 } else if (feature.properties.templateKey === 'MEDIATHEK-POPUP') {
626 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Audio_VideoGuides_4c.svg';
627 }
628 if (icon) {
629 marker.setIcon(
630 {
631 url: icon,
632 scaledSize: new google.maps.Size(61, 100),
633 origin: new google.maps.Point(0, 0),
634 anchor: new google.maps.Point(30, 100)
635 }
636 );
637 }
638
639 marker.addListener('click', function() {
640 Liferay.Service(
641 '/um_service_helper.journalarticle/get-article-content',
642 {
643 plid: ${themeDisplay.plid},
644 groupId: marker.properties.groupId,
645 articleId: marker.properties.articleId,
646 version: marker.properties.version,
647 languageId: '${locale.toString()}',
648 viewMode: 'view',
649 ddmTemplateKey: marker.properties.templateKey
650 },
651 function(result) {
652 ${namespace}infowindow.setContent(result);
653 ${namespace}infowindow.open(${namespace}map, marker);
654
655 if (showCopyrightMarker) {
656 showCopyrightMarker();
657 }
658 }
659 );
660 });
661
662 marker.addListener('mouseover', function() {
663 deleteTooltip();
664 });
665
666 if (!options){
667 ${namespace}oms.removeMarker(marker);
668 }
669 else {
670 ${namespace}oms.addMarker(marker);
671
672 return marker;
673 }
674 }
675 );
676
677 var greenMarkersOptions = {
678 styles: [
679 {
680 textColor: 'black',
681 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_green.svg',
682 height: 66,
683 width: 65,
684 textSize: 16
685 }
686 ]
687 };
688
689 var brownMarkersOptions = {
690 styles: [
691 {
692 textColor: 'white',
693 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_brown.svg',
694 height: 66,
695 width: 65,
696 textSize: 16
697 }
698 ]
699 };
700
701 var yellowMarkersOptions = {
702 styles: [
703 {
704 textColor: 'black',
705 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_yellow.svg',
706 height: 66,
707 width: 65,
708 textSize: 16
709 }
710 ]
711 };
712
713 var blueMarkersOptions = {
714 styles: [
715 {
716 textColor: 'black',
717 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_blue.svg',
718 height: 66,
719 width: 65,
720 textSize: 16
721 }
722 ]
723 };
724 var grayMarkersOptions = {
725 styles: [
726 {
727 textColor: 'black',
728 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_gray.svg',
729 height: 66,
730 width: 65,
731 textSize: 16
732 }
733 ]
734 };
735 var lightBlueMarkersOptions = {
736 styles: [
737 {
738 textColor: 'black',
739 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_lightblue.svg',
740 height: 66,
741 width: 65,
742 textSize: 16
743 }
744 ]
745 };
746
747
748 var veranstaltungenMarkerOptions = {
749 styles: [
750 {
751 textColor: 'black',
752 url: '${themeDisplay.getPathThemeImages()}/map/cluster_icon_orange.svg',
753 height: 66,
754 width: 65,
755 textSize: 16
756 }
757 ]
758 };
759
760 var greenMarkers = [];
761 var brownMarkers = [];
762 var yellowMarkers = [];
763 var blueMarkers = [];
764 var grayMarkers = [];
765 var veranstaltungenMarkers = [];
766 var lightBlueMarkers = [];
767
768 if (options) {
769 ${namespace}markers.forEach(function (item) {
770 if (!item) {
771 return;
772 }
773 if (item.properties.templateKey === 'LANDSCHAFTSFUEHRER-POPUP') {
774 greenMarkers.push(item);
775 } else if (item.properties.templateKey === 'AKTEUR-LEBENDIGER-WEINBERG-POPUP') {
776 brownMarkers.push(item);
777 } else if (item.properties.templateKey === 'ARTENSCHUTZ-FACHBERATER-POPUP') {
778 yellowMarkers.push(item);
779 } else if (item.properties.templateKey === 'MEDIATHEK-POPUP') {
780 blueMarkers.push(item);
781 } else if (item.properties.templateKey === 'UM_FACHTAGUNGEN') {
782 grayMarkers.push(item);
783 } else if (item.properties.templateKey === 'UM_ERLEBNISSE') {
784 veranstaltungenMarkers.push(item);
785 } else if (item.properties.templateKey === 'UM_NATURERLEBNISWOCHE') {
786 lightBlueMarkers.push(item);
787 }
788 });
789 }
790
791 ${namespace}veranstaltungenMarkerCluster = new MarkerClusterer(${namespace}map, veranstaltungenMarkers, veranstaltungenMarkerOptions);
792 ${namespace}greenMarkerCluster = new MarkerClusterer(${namespace}map, greenMarkers, greenMarkersOptions);
793 ${namespace}brownMarkerCluster = new MarkerClusterer(${namespace}map, brownMarkers, brownMarkersOptions);
794 ${namespace}yellowMarkerCluster = new MarkerClusterer(${namespace}map, yellowMarkers, yellowMarkersOptions);
795 ${namespace}blueMarkerCluster = new MarkerClusterer(${namespace}map, blueMarkers, blueMarkersOptions);
796 ${namespace}grayMarkerCluster = new MarkerClusterer(${namespace}map, grayMarkers, grayMarkersOptions);
797 ${namespace}lightBlueMarkerCluster = new MarkerClusterer(${namespace}map, lightBlueMarkers, lightBlueMarkersOptions);
798
799 ${namespace}veranstaltungenMarkerCluster.setMaxZoom(13);
800 ${namespace}grayMarkerCluster.setMaxZoom(13);
801 ${namespace}greenMarkerCluster.setMaxZoom(13);
802 ${namespace}brownMarkerCluster.setMaxZoom(13);
803 ${namespace}yellowMarkerCluster.setMaxZoom(13);
804 ${namespace}blueMarkerCluster.setMaxZoom(13);
805 ${namespace}lightBlueMarkerCluster.setMaxZoom(13);
806
807 /**
808 * 5 - Schwäbische Alb & Albvorland
809 * 7 - Oberrheinisches Tiefland
810 * 6 - Odenwald und Bauland
811 * 63 - Schwäbisch-Fränkischer Wald und Hohenloher Land
812 * 4 - Neckarland und Gäulandschaften
813 * 8 - Schwarzwald
814 * 1 - Bodensee und Oberschwaben
815 *
816 * @type
817 */
818 var areaColors = {
819
820 "5" : "#bac013",
821 "7" : "#00aaa8",
822 "6" : "#76b82a",
823 "63" : "#fdc543",
824 "4" : "#648c2e",
825 "8" : "#006c5c",
826 "1" : "#007fa4"
827 };
828 ${namespace}map.data.loadGeoJson('${themeDisplay.getPathThemeRoot()}/conf/naturraeume_complete_wgs84.json');
829 ${namespace}map.data.setStyle(function (feature) {
830
831 return {
832 fillColor: areaColors[feature.getProperty('OBJECTID')],
833 fillOpacity: 0.3,
834 strokeWeight: 0.5
835 }
836 });
837 //${namespace}map.data.addListener('click', ${namespace}filterMarkersByArea);
838 ${namespace}map.data.addListener('mouseover', showTooltip);
839 ${namespace}map.data.addListener('mousemove', moveTooltip);
840 ${namespace}map.data.addListener('mouseout', deleteTooltip);
841 }
842 }
843
844 function showTooltip(event){
845 var areaName = event.feature.getProperty('NATURRAUM');
846 tipObj = document.createElement("div");
847
848 tipObj.style.background = "white";
849 tipObj.style.padding = "10px";
850 tipObj.style.fontFamily = "gudea, arial, verdana, Sans-Serif";
851 tipObj.style.textAlign = "center";
852 tipObj.innerHTML = areaName;
853
854 var keys = Object.keys(event);
855 var x, y;
856 for (var i = 0; i < keys.length; i++) {
857 if (MouseEvent.prototype.isPrototypeOf(event[keys[i]])) {
858 x = event[keys[i]].clientX;
859 y = event[keys[i]].clientY;
860 }
861 }
862
863 //position it
864 tipObj.style.position = "fixed";
865 tipObj.style.top = y + tipOffset.y + "px";
866 tipObj.style.left = x + tipOffset.x + "px";
867
868 //add it to the body
869 document.body.appendChild(tipObj);
870 }
871
872 function moveTooltip(event) {
873 if (tipObj && event) {
874 var keys = Object.keys(event);
875 var x, y;
876 for (var i = 0; i < keys.length; i++) {
877 if (MouseEvent.prototype.isPrototypeOf(event[keys[i]])) {
878 x = event[keys[i]].clientX;
879 y = event[keys[i]].clientY;
880 }
881 }
882
883 //position it
884 tipObj.style.top = y + tipOffset.y + "px";
885 tipObj.style.left = x + tipOffset.x + "px";
886 }
887 }
888
889 function deleteTooltip() {
890 if (tipObj) {
891 document.body.removeChild(tipObj);
892 tipObj = null;
893 }
894 }
895
896 function ${namespace}loadMap(options) {
897 if (Liferay.umweltakademieMap && Liferay.umweltakademieMap.gmapsReady) {
898 ${namespace}initMap(options);
899 } else {
900 Liferay.once('gmapsReady', function () {
901 ${namespace}initMap(options);
902 });
903 }
904
905 ${namespace}initializeFilters();
906 }
907
908 function ${namespace}initializeFilters() {
909 AUI().use('aui-base', function(A) {
910 A.all('#${namespace}umweltakademie-map-filter .template-filter').each(function(item) {
911 item.on('click', function(e) {
912 ${namespace}filterMarkers(e);
913 })
914 });
915 A.all('#${namespace}umweltakademie-map-filter .template-subfilter').each(function(item) {
916 item.on('click', function(e) {
917 ${namespace}filterMarkers(e);
918 })
919 });
920 });
921 }
922
923 function ${namespace}filterMarkersByArea(event) {
924 var poly = new google.maps.Polygon({
925 paths: event.feature.getGeometry().getAt(0).getAt(0).getArray()
926 });
927
928 AUI().use('aui-base', function(A) {
929
930 var filters = A.all('#${namespace}umweltakademie-map-filter .template-filter');
931 var checkedFilters = A.all('#${namespace}umweltakademie-map-filter .template-filter:checked');
932 var subFilters = A.all('#${namespace}umweltakademie-map-filter .template-subfilter');
933
934 checkedFilters.each(function(filter) {
935 filter['_node'].checked = false;
936 });
937 subFilters.each(function(filter) {
938 filter['_node'].checked = false;
939 });
940 filters.each(function(category){
941 category['_node'].indeterminate = false;
942 });
943
944 ${namespace}markers.forEach(function(marker) {
945 if (google.maps.geometry.poly.containsLocation(marker.position, poly)) {
946 if (${namespace}greenMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'LANDSCHAFTSFUEHRER-POPUP') {
947 ${namespace}greenMarkerCluster.addMarker(marker);
948 }
949 if (${namespace}brownMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'AKTEUR-LEBENDIGER-WEINBERG-POPUP') {
950 ${namespace}brownMarkerCluster.addMarker(marker);
951 }
952 if (${namespace}yellowMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'ARTENSCHUTZ-FACHBERATER-POPUP') {
953 ${namespace}yellowMarkerCluster.addMarker(marker);
954 }
955 if (${namespace}blueMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'MEDIATHEK-POPUP') {
956 ${namespace}blueMarkerCluster.addMarker(marker);
957 }
958 if (${namespace}veranstaltungenMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_ERLEBNISSE') {
959 ${namespace}veranstaltungenMarkerCluster.addMarker(marker);
960 }
961 if (${namespace}lightBlueMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_NATURERLEBNISWOCHE') {
962 ${namespace}lightBlueMarkerCluster.addMarker(marker);
963 }
964 if (${namespace}grayMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_FACHTAGUNGEN') {
965 ${namespace}grayMarkerCluster.addMarker(marker);
966 }
967 if (${namespace}oms.getMarkers().indexOf(marker) === -1) {
968 ${namespace}oms.addMarker(marker);
969 }
970 checkSubFilters(marker);
971 } else {
972 ${namespace}greenMarkerCluster.removeMarker(marker);
973 ${namespace}brownMarkerCluster.removeMarker(marker);
974 ${namespace}yellowMarkerCluster.removeMarker(marker);
975 ${namespace}blueMarkerCluster.removeMarker(marker);
976 ${namespace}grayMarkerCluster.removeMarker(marker);
977 ${namespace}veranstaltungenMarkerCluster.removeMarker(marker);
978 ${namespace}lightBlueMarkerCluster.removeMarker(marker);
979 ${namespace}oms.removeMarker(marker);
980 }
981
982 ${namespace}greenMarkerCluster.repaint();
983 ${namespace}brownMarkerCluster.repaint();
984 ${namespace}yellowMarkerCluster.repaint();
985 ${namespace}blueMarkerCluster.repaint();
986 ${namespace}grayMarkerCluster.repaint();
987 ${namespace}veranstaltungenMarkerCluster.repaint();
988 ${namespace}lightBlueMarkerCluster.repaint();
989 });
990
991 function checkSubFilters(marker){
992 subFilters.each(function (filter) {
993 var filterClusterName = filter.getData('templatekey');
994 var filterCategoryId = filter.getData('categoryId');
995 var vocabularyName = filter.getData('vocabularyName');
996 if (filterClusterName === marker.properties.templateKey && (marker.properties.assetCategories && marker.properties.assetCategories.length)) {
997 marker.properties.assetCategories.forEach(function(data) {
998 if (filterCategoryId === data.categoryId && vocabularyName === 'Naturraum') {
999 filter['_node'].checked = true;
1000 filters.each(function(category){
1001 var templateKey = category.getData('templatekey');
1002 if (templateKey === filterClusterName && !category['_node'].checked) {
1003 category['_node'].indeterminate = true;
1004 }
1005 })
1006 }
1007 })
1008 }
1009 });
1010 }
1011 });
1012
1013 }
1014
1015 function ${namespace}filterMarkers(e) {
1016 AUI().use('aui-base', function(A) {
1017 var filters = A.all('#${namespace}umweltakademie-map-filter .template-filter');
1018 var subFilters = A.all('#${namespace}umweltakademie-map-filter .template-subfilter');
1019
1020 filters.each(function(category){
1021 category['_node'].indeterminate = false;
1022 });
1023
1024 if (e.target.hasClass('template-filter')) {
1025 var mytemplatekey = e.target.getData('templatekey')
1026
1027 if (e.target._node.checked) {
1028 //check all subfilters
1029 subFilters.each(function(category) {
1030 if (category.getData('templatekey') === mytemplatekey) {
1031 category['_node'].checked = true;
1032 }
1033 });
1034 } else {
1035 //uncheck all subfilters
1036 subFilters.each(function(category) {
1037 if (category.getData('templatekey') === mytemplatekey) {
1038 category['_node'].checked = false;
1039 }
1040 });
1041 }
1042 } else if (e.target.hasClass('template-subfilter')) {
1043 var mytemplatekey = e.target.getData('templatekey')
1044
1045 if (e.target._node.checked) {
1046 var allChecked = true;
1047
1048 subFilters.each(function(category) {
1049 if (category.getData('templatekey') === mytemplatekey) {
1050 if (category['_node'].checked === false) {
1051 allChecked = false;
1052 }
1053 }
1054 });
1055
1056 if (allChecked) {
1057 filters.each(function(category){
1058 if (category.getData('templatekey') === mytemplatekey) {
1059 category['_node'].indeterminate = false;
1060 category['_node'].checked = true;
1061 }
1062 });
1063 } else {
1064 filters.each(function(category){
1065 if (category.getData('templatekey') === mytemplatekey) {
1066 category['_node'].indeterminate = true;
1067 category['_node'].checked = false;
1068 }
1069 });
1070 }
1071 } else {
1072 var allUnchecked = true;
1073
1074 subFilters.each(function(category) {
1075 if (category.getData('templatekey') === mytemplatekey) {
1076 if (category['_node'].checked === true) {
1077 allUnchecked = false;
1078 }
1079 }
1080 });
1081
1082 if (allUnchecked) {
1083 filters.each(function(category){
1084 if (category.getData('templatekey') === mytemplatekey) {
1085 category['_node'].indeterminate = false;
1086 category['_node'].checked = false;
1087 }
1088 });
1089 } else {
1090 filters.each(function(category){
1091 if (category.getData('templatekey') === mytemplatekey) {
1092 category['_node'].indeterminate = true;
1093 category['_node'].checked = false;
1094 }
1095 });
1096 }
1097 }
1098 }
1099
1100 var checkedFilters = A.all('#${namespace}umweltakademie-map-filter .template-filter:checked');
1101 var checkedSubFilters = A.all('#${namespace}umweltakademie-map-filter .template-subfilter:checked');
1102
1103 var size = checkedFilters.size();
1104 var subSize = checkedSubFilters.size();
1105
1106 ${namespace}markers.forEach(function(marker) {
1107 var found = false;
1108
1109 if (!marker) {
1110 return;
1111 }
1112
1113 // find markers by checking filters
1114 checkedFilters.each(function (filter) {
1115 var templateKey = filter.getData('templatekey');
1116 if (templateKey === marker.properties.templateKey) {
1117 found = true;
1118 }
1119 });
1120
1121
1122 // find markers by checking SUB filters and indeterminate parent filter
1123 checkedSubFilters.each(function (filter) {
1124 var filterTemplateKey = filter.getData('templatekey');
1125 var filterCategoryId = filter.getData('categoryId');
1126 if (filterTemplateKey === marker.properties.templateKey && (marker.properties.assetCategories && marker.properties.assetCategories.length)) {
1127 marker.properties.assetCategories.forEach(function(data) {
1128 if (filterCategoryId === data.categoryId) {
1129 found = true;
1130 }
1131 });
1132 }
1133 });
1134
1135 if (found) {
1136 if (${namespace}greenMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'LANDSCHAFTSFUEHRER-POPUP') {
1137 ${namespace}greenMarkerCluster.addMarker(marker);
1138 }
1139 if (${namespace}brownMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'AKTEUR-LEBENDIGER-WEINBERG-POPUP') {
1140 ${namespace}brownMarkerCluster.addMarker(marker);
1141 }
1142 if (${namespace}yellowMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'ARTENSCHUTZ-FACHBERATER-POPUP') {
1143 ${namespace}yellowMarkerCluster.addMarker(marker);
1144 }
1145 if (${namespace}blueMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'MEDIATHEK-POPUP') {
1146 ${namespace}blueMarkerCluster.addMarker(marker);
1147 }
1148 if (${namespace}veranstaltungenMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_ERLEBNISSE') {
1149 ${namespace}veranstaltungenMarkerCluster.addMarker(marker);
1150 }
1151 if (${namespace}lightBlueMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_NATURERLEBNISWOCHE') {
1152 ${namespace}lightBlueMarkerCluster.addMarker(marker);
1153 }
1154 if (${namespace}grayMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_FACHTAGUNGEN') {
1155 ${namespace}grayMarkerCluster.addMarker(marker);
1156 }
1157 if (${namespace}oms.getMarkers().indexOf(marker) === -1) {
1158 ${namespace}oms.addMarker(marker);
1159 }
1160 } else {
1161 ${namespace}greenMarkerCluster.removeMarker(marker);
1162 ${namespace}brownMarkerCluster.removeMarker(marker);
1163 ${namespace}yellowMarkerCluster.removeMarker(marker);
1164 ${namespace}blueMarkerCluster.removeMarker(marker);
1165 ${namespace}grayMarkerCluster.removeMarker(marker);
1166 ${namespace}veranstaltungenMarkerCluster.removeMarker(marker);
1167 ${namespace}lightBlueMarkerCluster.removeMarker(marker);
1168 ${namespace}oms.removeMarker(marker);
1169 }
1170 })
1171
1172 ${namespace}greenMarkerCluster.repaint();
1173 ${namespace}brownMarkerCluster.repaint();
1174 ${namespace}yellowMarkerCluster.repaint();
1175 ${namespace}blueMarkerCluster.repaint();
1176 ${namespace}grayMarkerCluster.repaint();
1177 ${namespace}veranstaltungenMarkerCluster.repaint();
1178 ${namespace}lightBlueMarkerCluster.repaint();
1179 });
1180 }
1181
1182 function ${namespace}clearAllFilters() {
1183 ${namespace}markers.forEach(function(item) {
1184 if (!item) {
1185 return;
1186 }
1187
1188 if (${namespace}greenMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'LANDSCHAFTSFUEHRER-POPUP') {
1189 ${namespace}greenMarkerCluster.addMarker(item);
1190 }
1191 if (${namespace}brownMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'AKTEUR-LEBENDIGER-WEINBERG-POPUP') {
1192 ${namespace}brownMarkerCluster.addMarker(item);
1193 }
1194 if (${namespace}yellowMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'ARTENSCHUTZ-FACHBERATER-POPUP') {
1195 ${namespace}yellowMarkerCluster.addMarker(item);
1196 }
1197 if (${namespace}blueMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'MEDIATHEK-POPUP') {
1198 ${namespace}blueMarkerCluster.addMarker(item);
1199 }
1200 if (${namespace}grayMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'UM_FACHTAGUNGEN') {
1201 ${namespace}grayMarkerCluster.addMarker(item);
1202 }
1203 if (${namespace}veranstaltungenMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'UM_ERLEBNISSE') {
1204 ${namespace}veranstaltungenMarkerCluster.addMarker(item);
1205 }
1206 if (${namespace}lightBlueMarkerCluster.getMarkers().indexOf(item) === -1 && item.properties.templateKey === 'UM_NATURERLEBNISWOCHE') {
1207 ${namespace}lightBlueMarkerCluster.addMarker(item);
1208 }
1209
1210 if (${namespace}oms.getMarkers().indexOf(item) === -1) {
1211 ${namespace}oms.addMarker(item);
1212 }
1213 });
1214 }
1215
1216 $(document).ready(${namespace}loadMap);
1217 Liferay.on('endNavigate', ${namespace}loadMap);
1218 Liferay.on('beforeNavigate', deleteTooltip);
1219</script>
1220
1221<#if eventCalendarIds?? && eventCalendarIds?has_content>
1222 <script>
1223 function ${namespace}loadEvents(searchOptions) {
1224 var mapDiv = document.getElementById('${namespace}umweltakademie-map');
1225
1226 if (mapDiv) {
1227 var originalUrlInvoke = Liferay.Service.URL_INVOKE;
1228
1229 Liferay.Service.URL_INVOKE = "${eventServerUrl}/api/jsonws/invoke";
1230 Liferay.Service(
1231 '/event.event/search-events',
1232 {
1233 calendarIds: [${eventCalendarIds}],
1234 keywords: '',
1235 startTime: searchOptions.fromDate ? searchOptions.fromDate : formatStringToDate(${namespace}fromDate.value).getTime(),
1236 endTime: searchOptions.toDate ? searchOptions.toDate : formatStringToDate(${namespace}toDate.value).getTime() + ${day},
1237 locale: 'de_DE',
1238 recurring: true,
1239 includeEvents: true,
1240 includeOfferings: true,
1241 categoryIds: [] ${eventCalendarStructureKeysFilter}
1242 },
1243 function (events) {
1244 var results = events.results;
1245
1246 if (results) {
1247 var structureKeys = [];
1248 var vocabularies = [];
1249
1250 results.forEach(function (item) {
1251 var marker;
1252 //TODO choose icon based on type / calendar etc.
1253
1254 if (item.geolocation) {
1255
1256 var cssClass = "";
1257
1258 //TODO replace when new structures have been created
1259 if (item.ddm_structure_key === "UM_ERLEBNISSE") {
1260 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Erlebnisse_Veranstaltungen_4c.svg';
1261 cssClass = "erlebnisse-veranstaltungen";
1262 } else if (item.ddm_structure_key === "UM_FACHTAGUNGEN") {
1263 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Fachtagungen_Fachveranstaltungen_4c.svg';
1264 cssClass = "fachtagungen-fachveranstaltungen";
1265 } else if (item.ddm_structure_key === "UM_NATURERLEBNISWOCHE") {
1266 icon = '/o/um-enviroment-academy-theme/images/map/Pin_Hellblau_Kalender_4c.svg';
1267 cssClass = "naturerlebniswoche";
1268 }
1269
1270 // Write structure keys
1271 structureKeys[item.ddm_structure_key] = item.ddm_structure_name;
1272
1273 // Write vocabularies for every structure key
1274 if (vocabularies[item.ddm_structure_key]) {
1275 vocabularies[item.ddm_structure_key] = mergeVocabularies(vocabularies[item.ddm_structure_key], item.vocabularies);
1276 } else {
1277 vocabularies[item.ddm_structure_key] = item.vocabularies
1278 }
1279
1280 marker = new google.maps.Marker(
1281 {
1282 position: new google.maps.LatLng(item.geolocation.latitude, item.geolocation.longitude),
1283 properties: {
1284 templateKey: item.ddm_structure_key,
1285 templateName: item.ddm_structure_name,
1286 assetCategories: item.vocabularies.length ? getCategoriesFromVocabularies(item.vocabularies) : []
1287 },
1288 selected: false,
1289 title: item.short_title
1290 }
1291 );
1292
1293 function getCategoriesFromVocabularies(vocabularies) {
1294 var categories = [];
1295 vocabularies.map(function (vocabulary) {
1296 vocabulary.categories.map(function (category) {
1297 category.categoryId = category.id;
1298 categories.push(category);
1299 })
1300 });
1301 return categories;
1302 }
1303
1304 marker.setIcon(
1305 {
1306 url: icon,
1307 scaledSize: new google.maps.Size(61, 100),
1308 origin: new google.maps.Point(0, 0),
1309 anchor: new google.maps.Point(30, 100)
1310 }
1311 );
1312
1313 marker.addListener('click', function () {
1314 //language=html
1315 var startDate = new Date(item.startTime);
1316 var endDate = new Date(item.endTime);
1317 var eventDetailLinkTemplate = ${namespace}eventDetailLinkTemplates[item.calendarId];
1318 var topic;
1319
1320 item.vocabularies.forEach(function (item) {
1321 if (item.label === 'Veranstaltungsart') {
1322 if (item.categories.length > 0) {
1323 topic = item.categories[0].label;
1324 }
1325 }
1326 });
1327
1328 var onerrorAttr = ' onerror="this.onerror=null; this.src=\'/o/um-enviroment-academy-theme/images/map/event_img.png\'" ';
1329
1330 var html = '<div class="' + cssClass + ' infowindow-content journal-content-article">' +
1331 ' <div>' +
1332 ' <p>' +
1333 ' ' + (item.city ? item.city : " ") +
1334 ' </p>' +
1335 ' </div>' +
1336 ' <div class="img aspect-ratio aspect-ratio-16-to-9" style="height: 120px">\n' +
1337 ' <img src="${eventServerUrl}' + item.small_image_url + '" ' + onerrorAttr;
1338
1339 if (item.AltTag) {
1340 html = html +
1341 'alt="' + item.AltTag + '" title="' + item.AltTag + '" ';
1342 }
1343
1344 html = html +
1345 ' />\n';
1346 if (item.Bildnachweis) {
1347 html = html +
1348 '<div class="bildnachweis">Quelle: ' + item.Bildnachweis + '</div>';
1349 }
1350
1351 html = html +
1352 ' </div>\n' +
1353 ' <div class="clearfix">' +
1354 ' <p> ' +
1355 ' <span style="float:left">' + startDate.toLocaleDateString('de', {weekday: 'long'}) + '</span>' +
1356 ' <span style="float:right">' + startDate.toLocaleTimeString('de', {
1357 hour: '2-digit',
1358 minute: '2-digit'
1359 }) + ' - ' + endDate.toLocaleTimeString('de', {
1360 hour: '2-digit',
1361 minute: '2-digit'
1362 }) + ' Uhr</span>' +
1363 ' </p>' +
1364 ' </div>\n' +
1365 ' <div class="divider"></div>\n' +
1366 ' <div>' +
1367 ' <h3 class="asset-title">' + startDate.toLocaleDateString('de', {
1368 day: '2-digit',
1369 month: 'long',
1370 year: 'numeric'
1371 }) + '</h3>' +
1372 ' </div>\n' +
1373 ' <div class="divider"></div>\n' +
1374 ' <div>';
1375 if (topic) {
1376 html = html +
1377 '<p>' + topic + '</p>'
1378 }
1379 html = html +
1380 '<h3 class="asset-title">' + item.short_title + '</h3>';
1381 if (item.organizer) {
1382 html = html +
1383 '<p>' + item.organizer + '</p>';
1384 }
1385
1386 html = html +
1387 ' </div>' +
1388 ' <div class="divider"></div>' +
1389 ' <div class="footer">\n' +
1390 ' <p>\n' +
1391 ' <a class="internal-icon" href="' + eventDetailLinkTemplate + item.uuid + '">\n' +
1392 ' Zum Veranstaltungskalender\n' +
1393 ' <span class="hide-accessible"><@liferay.language key="about" /> ' + item.short_title + '</span>\n' +
1394 ' </a>\n' +
1395 ' </p>\n' +
1396 ' </div>\n' +
1397 '</div>';
1398
1399 ${namespace}infowindow.setContent(html);
1400 ${namespace}infowindow.open(${namespace}map, marker);
1401
1402 if (showCopyrightMarker) {
1403 showCopyrightMarker();
1404 }
1405 });
1406
1407 marker.addListener('mouseover', function() {
1408 deleteTooltip();
1409 });
1410
1411 ${namespace}markers.push(marker);
1412 if (${namespace}grayMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_FACHTAGUNGEN') {
1413 ${namespace}grayMarkerCluster.addMarker(marker);
1414 }
1415 if (${namespace}veranstaltungenMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_ERLEBNISSE') {
1416 ${namespace}veranstaltungenMarkerCluster.addMarker(marker);
1417 }
1418 if (${namespace}lightBlueMarkerCluster.getMarkers().indexOf(marker) === -1 && marker.properties.templateKey === 'UM_NATURERLEBNISWOCHE') {
1419 ${namespace}lightBlueMarkerCluster.addMarker(marker);
1420 }
1421 ${namespace}oms.addMarker(marker);
1422 }
1423 });
1424
1425 var filterHtml = "";
1426 var structureKey;
1427 for (structureKey in structureKeys) {
1428 var cssStyle = 'max-width: 20px; float: right;';
1429 var miniIconUrl;
1430
1431 if (structureKey === 'UM_ERLEBNISSE') {
1432 miniIconUrl = '/o/um-enviroment-academy-theme/images/map/Pin_Erlebnisse_Veranstaltungen_4c.svg';
1433 } else if (structureKey === 'UM_FACHTAGUNGEN') {
1434 miniIconUrl = '/o/um-enviroment-academy-theme/images/map/Pin_Fachtagungen_Fachveranstaltungen_4c.svg';
1435 } else if (structureKey === 'UM_NATURERLEBNISWOCHE') {
1436 miniIconUrl = '/o/um-enviroment-academy-theme/images/map/Pin_Hellblau_Kalender_4c.svg';
1437 }
1438
1439 var collapseFilters = '';
1440 var collapseStart = '';
1441 var subFilters = '';
1442 var collapseEnd = '</div>';
1443
1444 vocabularies[structureKey].map(function (vocabulary) {
1445 subFilters = '';
1446
1447 collapseStart =
1448 '<span>' + vocabulary.label + '</span>\n' +
1449 '<div id="${namespace}' + vocabulary.label + structureKey +
1450 '"style="margin: 0 5px 0 22px; max-width: 340px;">\n';
1451
1452 vocabulary.categories.map(function (category) {
1453 subFilters +=
1454 '<label class="checkbox-label">\n' +
1455 '<input type="checkbox" class="template-subfilter" data-templatekey="' +
1456 structureKey + '" data-categoryId="' + category.id + '" data-vocabularyName="' + vocabulary.label + '" checked="true"><span class="checkbox-marker"></span>\n' +
1457 '<span class="checkbox-title">' + category.label + '</span>' +
1458 '</label>';
1459 });
1460
1461 collapseFilters += collapseStart + subFilters + collapseEnd;
1462 });
1463
1464 var caretIcon = '';
1465 if (vocabularies[structureKey].length) {
1466 caretIcon = '<a href="#${namespace}' + structureKey + '" data-toggle="collapse" aria-expanded="false" class="collapse-icon-wrapper">' +
1467 ' <span class="icon icon-um-chevron-down-small"></span>' +
1468 ' </a>';
1469 }
1470
1471 filterHtml = filterHtml +
1472 ' <div class="checkbox-line" style="min-height: 30px">\n' +
1473 ' <label class="checkbox-label">\n' +
1474 ' <input type="checkbox" class="checkbox template-filter" data-templatekey="' + structureKey + '" checked="true">\n' +
1475 ' <span class="checkbox-title">' + structureKeys[structureKey] + '</span>\n<span class="checkbox-marker"></span>' +
1476 ' </label>\n' +
1477 ' <img src="' + miniIconUrl + '" class="checkbox-line-image">'
1478 + caretIcon +
1479 ' <div class="collapse-categories-wrapper">' +
1480 ' <div id="${namespace}' + structureKey + '" class="collapse">'
1481 + collapseFilters +
1482 ' </div>' +
1483 ' </div>' +
1484 ' </div>\n';
1485
1486 }
1487
1488 var mapFilterEventsElem = document.getElementById("${namespace}umweltakademie-map-filter-events");
1489 if (mapFilterEventsElem) {
1490 mapFilterEventsElem.innerHTML = filterHtml;
1491 }
1492
1493 ${namespace}veranstaltungenMarkerCluster.repaint();
1494 ${namespace}grayMarkerCluster.repaint();
1495 ${namespace}lightBlueMarkerCluster.repaint();
1496
1497 <#if hasFilterCategories == false>
1498 var mapFilterButton = document.getElementById('${namespace}umweltakademie-map-filter-button');
1499 if (Object.keys(structureKeys).length == 0) {
1500 mapFilterButton.style.display = 'none';
1501 } else {
1502 mapFilterButton.style.display = 'block';
1503 }
1504 </#if>
1505
1506 ${namespace}initializeFilters();
1507 }
1508 }
1509 );
1510 Liferay.Service.URL_INVOKE = originalUrlInvoke;
1511
1512 function mergeVocabularies(vocabularies1, vocabularies2) {
1513 var result = [];
1514
1515 result = result.concat(vocabularies1);
1516
1517 for (var key in vocabularies2) {
1518 var vocabulary = vocabularies2[key];
1519
1520 var existing = result.filter(function (elem) {
1521 return elem.id === vocabulary.id
1522 });
1523 if (existing.length > 0) {
1524 existing[0].categories = _.unique(existing[0].categories.concat(vocabulary.categories), 'id');
1525 } else {
1526 result = result.concat(vocabulary);
1527 }
1528 }
1529
1530 return result;
1531 }
1532 }
1533 }
1534
1535 $(document).ready(${namespace}loadEvents);
1536 Liferay.on('endNavigate', ${namespace}loadEvents);
1537 </script>
1538</#if>
1539
1540<#function getTemplateKey(structureKey)>
1541 <#switch structureKey>
1542 <#case "LANDSCHAFTSFUEHRER">
1543 <#return "LANDSCHAFTSFUEHRER-POPUP" />
1544 <#break />
1545 <#case "AKTEUR-LEBENDIGER-WEINBERG">
1546 <#return "AKTEUR-LEBENDIGER-WEINBERG-POPUP" />
1547 <#break />
1548 <#case "ARTENSCHUTZ-FACHBERATER">
1549 <#return "ARTENSCHUTZ-FACHBERATER-POPUP" />
1550 <#break />
1551 <#case "MEDIATHEK">
1552 <#case "42705">
1553 <#return "MEDIATHEK-POPUP" />
1554 <#break />
1555 <#default>
1556 <#return "NONE" />
1557 <#break />
1558 </#switch>
1559</#function>