Insight Hub
An error occurred while processing the template.
The following has evaluated to null or missing: ==> curVocabulary [in template "20155#20195#20833" at line 104, column 45] ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign curTitle = curVocabulary.getT... [in template "20155#20195#20833" at line 104, column 25] ----
1<#--
2 ~ Copyright (c) 2020 AXA Group Operations Spain S.A.
3 ~
4 ~ Licensed under the AXA Group Operations Spain S.A. License (the "License");
5 ~ you may not use this file except in compliance with the License.
6 ~ A copy of the License can be found in the LICENSE.TXT file distributed
7 ~ together with this file.
8 ~
9 ~ Unless required by applicable law or agreed to in writing, software
10 ~ distributed under the License is distributed on an "AS IS" BASIS,
11 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 ~ See the License for the specific language governing permissions and
13 ~ limitations under the License.
14 -->
15
16<#assign emptyAttrs = true />
17<#assign paramName = "" />
18<#assign baseUrl = "" />
19<#assign languageService = "" />
20<#assign translationServiceAvailable = false />
21<#assign anchorName = 'filters' />
22<#assign AssetCategoryLocalService = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]>
23<#assign AssetVocabularyLocalService = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]>
24
25<#if serviceLocator.findService("com.axa.im.wcm.labeltranslation.service.LabelTranslationLocalService")??>
26 <#assign languageService = serviceLocator.findService("com.axa.im.wcm.labeltranslation.service.LabelTranslationLocalService") />
27 <#assign translationServiceAvailable = true />
28</#if>
29
30<#-- localizable literals and translations -->
31<#assign removeAllFiltersLabel = axaimTranslate("global.filters.remove.all") />
32<#assign removeFilterLabel = axaimTranslate("global.filters.remove.single") />
33<#assign activeFiltersLabel = axaimTranslate("global.filters.active") />
34<#assign selectDefaultLabel = axaimTranslate("content.insights.filter.select") />
35<#assign searchBoxLabel = axaimTranslate("global.filters.search") />
36<#assign searchBoxPlaceHolderLabel = axaimTranslate("global.filters.search.placeholder") />
37
38<#-- Get the current categories vocabularies and objects-->
39<#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] />
40<#assign originalRequest = portalUtil.getOriginalServletRequest(portalUtil.getHttpServletRequest(renderRequest)) />
41<#assign mobileCategoriesNumber = 3>
42
43<#assign categoriesParamsValues = [] />
44<#assign activeCategories = [] />
45<#if originalRequest.getParameterMap()['p_r_p_categoryId']??>
46 <#assign categoriesParamsValues = originalRequest.getParameterMap()['p_r_p_categoryId'] />
47 <#list categoriesParamsValues as categoryId>
48 <#if ! activeCategories?seq_contains(categoryId)>
49 <#assign activeCategories = activeCategories + [categoryId] />
50 </#if>
51 </#list>
52</#if>
53
54<#if originalRequest.getParameter("searchText")?has_content>
55 <#assign searchText = originalRequest.getParameter("searchText") />
56</#if>
57
58<#assign vocabulariesSeq = [] />
59<#assign categoryObjectsSeq = [] />
60<#list activeCategories as activeCategoryId>
61 <#if validator.isNumber(activeCategoryId)>
62 <#assign activeCategory = AssetCategoryLocalService.fetchCategory(activeCategoryId?number) />
63 <#if activeCategoryId??>
64 <#assign categoryObjectsSeq = categoryObjectsSeq + [activeCategory] />
65 <#assign activeVocabularyId = activeCategory.getVocabularyId() />
66 <#if !vocabulariesSeq?seq_contains(activeVocabularyId) >
67 <#assign vocabulariesSeq = vocabulariesSeq + [activeVocabularyId] />
68 </#if>
69 </#if>
70 </#if>
71
72</#list>
73
74<#if entries?has_content>
75 <#setting locale=locale />
76 <div class="forms category__filters" id="${anchorName}">
77 <div class="row searchbox__wrapper">
78 <div class="col-xs-12">
79 <div class="searchbox form-group">
80 <input class="searchbox__input form-control gh-searchBar"
81 type="text"
82 maxlength="100"
83 placeholder="${searchBoxPlaceHolderLabel}"
84 <#if searchText?has_content>
85 value="${searchText}"
86 </#if>
87 />
88 <button class="button custom-icon gh-searchButton">
89 <span class="icon">
90 <svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 30.239 30.239">
91 <g>
92 <path d="M20.194,3.46c-4.613-4.613-12.121-4.613-16.734,0c-4.612,4.614-4.612,12.121,0,16.735 c4.108,4.107,10.506,4.547,15.116,1.34c0.097,0.459,0.319,0.897,0.676,1.254l6.718,6.718c0.979,0.977,2.561,0.977,3.535,0 c0.978-0.978,0.978-2.56,0-3.535l-6.718-6.72c-0.355-0.354-0.794-0.577-1.253-0.674C24.743,13.967,24.303,7.57,20.194,3.46z M18.073,18.074c-3.444,3.444-9.049,3.444-12.492,0c-3.442-3.444-3.442-9.048,0-12.492c3.443-3.443,9.048-3.443,12.492,0 C21.517,9.026,21.517,14.63,18.073,18.074z" fill="#FFFFFF"/>
93 </g>
94 </svg>
95 </span>
96 </button>
97 </div>
98 </div>
99 </div>
100 <div class="row combo__forms__wrapper">
101 <div class="col-xs-12">
102 <div class="combo__select">
103 <#list entries as curVocabulary>
104 <#assign curTitle = curVocabulary.getTitle(locale) />
105 <#assign curCategories = curVocabulary.getCategories() />
106
107 <#if (curVocabulary?index >= mobileCategoriesNumber) >
108 <#assign wrapperClass = "select__wrapper-hidden form-group select__wrapper">
109 <#else>
110 <#assign wrapperClass = "form-group select__wrapper">
111 </#if>
112
113 <div class="${wrapperClass}">
114 <div class="select__wrapper__gradient">
115 <label class="custom__label">${curTitle}</label>
116 <select id="${curVocabulary.name?lower_case?replace(" ", "-")}" name="${curVocabulary
117 .name?replace("-", "")}" class="form-control filters__selector__new gh-${curVocabulary.name?lower_case?replace(" ", "-")}">
118 <option value="">${selectDefaultLabel}</option>
119 <@displayCategories categories=curCategories activeCategories=activeCategories![]/>
120 </select>
121 <span></span>
122 </div>
123 </div>
124 </#list>
125 </div>
126 </div>
127 </div>
128 <div class="row arrow__more__wrapper">
129 <div class="col-sx-12">
130 <div class="arrow__more__filter closed">
131 </div>
132 </div>
133 </div>
134
135 <#if (vocabulariesSeq?? && vocabulariesSeq?has_content) || (searchText?? && searchText?has_content) >
136 <div class="row active__filters__wrapper">
137 <div class="col-xs-12">
138 <h4 class="active__filters__wrapper__title typo28">${activeFiltersLabel}</h4>
139 <div class="active__filters__group">
140 <#if searchText?has_content>
141 <div class="active__filters filters__active__single">
142 <#assign searchFilterLabel = axaimTranslate("global.filters.search.text") />
143 <#assign iconTitle = removeFilterLabel + " " + searchFilterLabel + " - " + searchText />
144 <h5 class="active__filter__title typo14 filters__label text_filter gh-activefilter-type">${searchFilterLabel}
145 :</h5>
146 <p class="selected__filter typo14 filters__active__filter gh-activefilter-selected">${searchText}<span class="axaim-icon-cross gh-filter-icon-delete-new" title="${iconTitle}"></span></p>
147 </div>
148 </#if>
149 <#list vocabulariesSeq as curVocabularyId >
150 <#assign vocabulary = AssetVocabularyLocalService.fetchAssetVocabulary(curVocabularyId) />
151 <#assign vocabularyTitle = vocabulary.getTitle(locale) />
152 <div class="active__filters filters__active__single">
153 <h5 class="active__filter__title typo14 filters__label gh-activefilter-type">${vocabularyTitle}:</h5>
154 <#list categoryObjectsSeq as curCategory >
155 <#if curCategory.getVocabularyId() == curVocabularyId >
156 <#assign iconTitle = removeFilterLabel + " " + vocabularyTitle + " - " + curCategory.getTitle(locale) />
157 <p class="selected__filter typo14 filters__active__filter gh-activefilter-selected" data-categoryid="${curCategory.getCategoryId()}" >${curCategory.getTitle(locale)}<span class="axaim-icon-cross gh-filter-icon-delete-new" title="${iconTitle}"></span></p>
158 </#if>
159 </#list>
160 </div>
161 </#list>
162 </div>
163 <a href="#" class="filter__remove filters__active__reset link red gh-activefilter-clear">${removeAllFiltersLabel}</a>
164 </div>
165 </div>
166 </#if>
167 <input type="hidden" name="paramName" id="paramName" value="p_r_p_categoryId">
168 <input type="hidden" name="baseUrl" id="baseUrl" value="${baseUrl}#${anchorName}">
169 </div>
170
171</#if>
172
173<#macro displayCategories categories activeCategories activeCategories>
174 <#list categories as curCategory>
175 <#if !activeCategories?seq_contains(curCategory.getCategoryId()?string) >
176 <#assign catTitle = curCategory.getTitle(locale) />
177 <#assign catId = curCategory.getCategoryId()?string />
178 <#-- Get the paramName and the baseUrl, necessary to form the filtering URL for the asset publisher -->
179 <#if emptyAttrs >
180 <#assign catUrlObj = renderResponse.createRenderURL() />
181 ${catUrlObj.setParameter("resetCur", "true")}
182 <#assign catUrl = catUrlObj?string />
183 <#assign lastIndex = catUrl?last_index_of("&") />
184 <#assign first_parameter = catUrl?last_index_of("?") />
185 <#assign baseUrl =catUrl[0..first_parameter]/>
186 <#assign emptyAttrs = false />
187 </#if>
188 <option value="${catId}">${catTitle}</option>
189 </#if>
190 </#list>
191</#macro>
192<#function axaimTranslate labelText>
193 <#if translationServiceAvailable>
194 <#assign translated = languageService.getLabelTranslation(labelText, locale, companyId) />
195 <#else>
196 <#assign translated = labelText />
197 </#if>
198 <#return translated />
199</#function>
200
201<script>
202 //fix scroll on mobile
203 AUI().on('domready', function () {
204 if (location.hash === "#${anchorName}" && window.outerWidth <= 1076) {
205 var dockbarHeight = 0;
206 var portletDockbar = document.querySelector(".portlet-dockbar");
207 if (portletDockbar) {
208 dockbarHeight = portletDockbar.getBoundingClientRect().height;
209 }
210 var headerHeight = document.querySelector('header').getBoundingClientRect().height
211 window.scrollBy(0, -1 * (dockbarHeight + headerHeight));
212 }
213 });
214</script>