Search

Types
Category
Category Facet
An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetCategoriesSearchFacetDisplayContext.getVocabularyNames()  [in template "464170#464219#2139882" at line 137, column 36]

----
Tip: If the failing expression is known to 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 vocabularyNames = assetCatego...  [in template "464170#464219#2139882" at line 137, column 9]
	- Reached through: @liferay_ui["panel-container"] extend...  [in template "464170#464219#2139882" at line 131, column 1]
----
1<#macro treeview_item 
2	cssClassTreeItem = "" 
3	frequency = 0 
4	id = "" 
5	frequencyVisible = true 
6	name = "" 
7	selectable = false 
8	selected = false 
9	termDisplayContexts = "" 
10
11	<li class="treeview-item" role="none"> 
12		<#if name?has_content> 
13			<div 
14				aria-controls="${namespace}treeItem${id}" 
15				aria-expanded="true" 
16				class="treeview-link ${cssClassTreeItem}" 
17				data-target="#${namespace}treeItem${id}" 
18				data-toggle="collapse" 
19				onClick="${namespace}toggleTreeItem('${namespace}treeItem${id}');" 
20				role="treeitem" 
21				tabindex="0" 
22
23				<span class="c-inner" tabindex="-2"> 
24					<span class="autofit-row"> 
25						<#if termDisplayContexts?has_content> 
26							<span class="autofit-col"> 
27								<button 
28									aria-controls="${namespace}treeItem${id}" 
29									aria-expanded="true" 
30									class="btn btn-monospaced component-expander" 
31									data-target="#${namespace}treeItem${id}" 
32									data-toggle="collapse" 
33									tabindex="-1" 
34									type="button" 
35
36									<span class="c-inner" tabindex="-2"> 
37										<@clay["icon"] symbol="angle-down" /> 
38 
39										<@clay["icon"] 
40											cssClass="component-expanded-d-none" 
41											symbol="angle-right" 
42										/> 
43									</span> 
44								</button> 
45							</span> 
46						</#if> 
47 
48						<#if selectable> 
49							<span class="autofit-col autofit-col-expand"> 
50								<div class="custom-checkbox custom-control"> 
51									<label> 
52										<input 
53											autocomplete="off" 
54											${selected?then("checked", "")} 
55											class="custom-control-input facet-term" 
56											data-term-id=${id} 
57											disabled 
58											onChange="Liferay.Search.FacetUtil.changeSelection(event);" 
59											type="checkbox" 
60										/> 
61 
62										<span class="custom-control-label"> 
63											<span class="custom-control-label-text"> 
64												${name} 
65 
66												<#if frequencyVisible> 
67													(${frequency}) 
68												</#if> 
69											</span> 
70										</span> 
71									</label> 
72								</div> 
73							</span> 
74						<#else> 
75							<span class="autofit-col autofit-col-expand"> 
76								<span class="component-text"> 
77									<span 
78										class="text-truncate-inline" 
79										title="${name}" 
80
81										<span class="text-truncate"> 
82											${name} 
83 
84											<#if frequencyVisible> 
85												(${frequency}) 
86											</#if> 
87										</span> 
88									</span> 
89								</span> 
90							</span> 
91						</#if> 
92					</span> 
93				</span> 
94			</div> 
95		</#if> 
96 
97		<#if termDisplayContexts?has_content> 
98			<div class="collapse show" id="${namespace}treeItem${id}"> 
99				<ul class="treeview-group" role="group"> 
100					<#list termDisplayContexts as termDisplayContext> 
101						<#if termDisplayContext?index == 5> 
102							<li class="treeview-item" role="none"> 
103								<a class="read-more show" href="javascript:${namespace}toggleTreeItemMore('${namespace}treeItem${id}');"> 
104									<@liferay_ui.message key="more"></@>... 
105								</a> 
106							</li> 
107						</#if> 
108						<@treeview_item 
109							cssClassTreeItem="tree-item-category ${(termDisplayContext?index >= 5)?then('hide', '')}" 
110							frequency=termDisplayContext.getFrequency() 
111							frequencyVisible=termDisplayContext.isFrequencyVisible() 
112							id=termDisplayContext.getFilterValue() 
113							name=htmlUtil.escape(termDisplayContext.getBucketText()) 
114							selectable=true 
115							selected=termDisplayContext.isSelected() 
116						/> 
117					</#list> 
118					<#if termDisplayContexts?size &gt; 5> 
119						<li class="treeview-item" role="none"> 
120							<a class="read-less hide" href="javascript:${namespace}toggleTreeItemMore('${namespace}treeItem${id}');"> 
121								<@liferay_ui.message key="less"></@> 
122							</a> 
123						</li> 
124					</#if> 
125				</ul> 
126			</div> 
127		</#if> 
128	</li> 
129</#macro> 
130 
131<@liferay_ui["panel-container"] 
132	extended=true 
133	id="${namespace + 'facetAssetCategoriesPanelContainer'}" 
134	markupView="lexicon" 
135	persistState=true 
136
137	<#assign vocabularyNames = assetCategoriesSearchFacetDisplayContext.getVocabularyNames() /> 
138 
139	<@liferay_ui.panel 
140		collapsible=true 
141		cssClass="search-facet search-facet-display-vocabulary" 
142		id="${namespace + 'facetAssetCategoriesPanel'}" 
143		markupView="lexicon" 
144		persistState=true 
145		title="${(vocabularyNames?size == 1)?then(vocabularyNames[0]!'', 'category')}" 
146
147		<#if vocabularyNames?has_content> 
148			<ul class="treeview treeview-light treeview-nested treeview-vocabulary-display" role="tree"> 
149				<#list vocabularyNames as vocabularyName> 
150					<@treeview_item 
151						cssClassTreeItem="tree-item-vocabulary" 
152						frequencyVisible=false 
153						id=vocabularyName?replace(' ','__') + vocabularyName?index 
154						name="${(vocabularyNames?size == 1)?then('', htmlUtil.escape(vocabularyName))}" 
155						termDisplayContexts=assetCategoriesSearchFacetDisplayContext.getBucketDisplayContexts(vocabularyName) 
156					/> 
157				</#list> 
158			</ul> 
159		</#if> 
160 
161		<#if !assetCategoriesSearchFacetDisplayContext.isNothingSelected()> 
162			<@liferay_aui.button 
163				cssClass="btn-link btn-unstyled facet-clear-btn" 
164				onClick="Liferay.Search.FacetUtil.clearSelections(event);" 
165				value="clear" 
166			/> 
167		</#if> 
168	</@> 
169</@> 
170 
171<@liferay_aui.script> 
172	function ${namespace}toggleTreeItem(dataTarget) { 
173		const dataTargetElements = document.querySelectorAll("[data-target=\"#" + dataTarget + "\"]"); 
174 
175		dataTargetElements.forEach( 
176			element => { 
177				if (element.classList.contains('collapsed')) { 
178					element.classList.remove('collapsed'); 
179					element.setAttribute('aria-expanded', true); 
180
181				else { 
182					element.classList.add('collapsed'); 
183					element.setAttribute('aria-expanded', false); 
184
185
186		); 
187 
188		const subtreeCategoryTreeElement = document.getElementById(dataTarget); 
189 
190		if (subtreeCategoryTreeElement) { 
191			if (subtreeCategoryTreeElement.classList.contains('show')) { 
192				subtreeCategoryTreeElement.classList.remove('show'); 
193
194			else { 
195				subtreeCategoryTreeElement.classList.add('show'); 
196
197
198
199	 
200	function ${namespace}toggleTreeItemMore(targetId) { 
201		 
202		const dataTargetHideElements = document.querySelectorAll("#" + targetId + " .show"); 
203		const dataTargetShowElements = document.querySelectorAll("#" + targetId + " .hide"); 
204		 
205		dataTargetHideElements.forEach( 
206			element => { 
207				if (element.classList.contains('show')) { 
208					element.classList.remove('show'); 
209					element.classList.add('hide'); 
210
211
212		); 
213 
214		dataTargetShowElements.forEach( 
215			element => { 
216				if (element.classList.contains('hide')) { 
217					element.classList.remove('hide'); 
218					element.classList.add('show'); 
219
220
221		); 
222
223	'tree-item-category'; 
224</@>