Wiki-Quellcode von SolrMediaTypeFacet
Verstecke letzte Bearbeiter
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | {{velocity output="false"}} |
| 2 | #macro (displaySearchFacetValues_mediaType $facetValues) | ||
| 3 | #set ($discard = $xwiki.ssx.use('Main.SolrMediaTypeFacet')) | ||
| 4 | #set ($discard = $xwiki.jsx.use('Main.SolrMediaTypeFacet')) | ||
| 5 | #set ($categoryMap = $solrConfig.facet.mediaType.categories) | ||
| 6 | #groupMediaTypes($facetValues $categoryMap true) | ||
| 7 | ## We also need to group some technical media types inside a category. | ||
| 8 | #set ($subcategoryMap = $solrConfig.facet.mediaType.subcategories) | ||
| 9 | #foreach ($facetValue in $facetValues) | ||
| 10 | #set ($subcategories = $subcategoryMap.get($facetValue.id)) | ||
| 11 | #if ($subcategories) | ||
| 12 | #groupMediaTypes($facetValue.mediaTypesWithCounts $subcategories) | ||
| 13 | ## Update the list of media types to be able to unselect all subcategories when a category is selected. | ||
| 14 | #set ($discard = $facetValue.mediaTypes.clear()) | ||
| 15 | #foreach ($mediaType in $facetValue.mediaTypesWithCounts) | ||
| 16 | #set ($discard = $facetValue.mediaTypes.add($mediaType.name)) | ||
| 17 | #end | ||
| 18 | #end | ||
| 19 | #end | ||
| 20 | #displayMediaTypesWithPagination($facetValues) | ||
| 21 | #end | ||
| 22 | |||
| 23 | #macro (groupMediaTypes $mediaTypes $groups $groupRemainingMediaTypes) | ||
| 24 | #set ($matchedGroups = []) | ||
| 25 | #set ($groupedMediaTypes = []) | ||
| 26 | #foreach ($entry in $groups.entrySet()) | ||
| 27 | #set ($group = { | ||
| 28 | 'id': $entry.key, | ||
| 29 | 'count': 0, | ||
| 30 | 'mediaTypes': [], | ||
| 31 | 'mediaTypesWithCounts': [] | ||
| 32 | }) | ||
| 33 | #foreach ($mediaType in $mediaTypes) | ||
| 34 | ## See if this media type is included in this group. | ||
| 35 | #foreach ($pattern in $entry.value) | ||
| 36 | #if ($mediaType.name == $pattern || $mediaType.name.startsWith($pattern) || $mediaType.name.endsWith($pattern)) | ||
| 37 | #set ($group.count = $group.count + $mediaType.count) | ||
| 38 | #set ($discard = $group.mediaTypes.add($mediaType.name)) | ||
| 39 | #set ($discard = $group.mediaTypesWithCounts.add($mediaType)) | ||
| 40 | #set ($discard = $groupedMediaTypes.add($mediaType)) | ||
| 41 | #break | ||
| 42 | #end | ||
| 43 | #end | ||
| 44 | #end | ||
| 45 | #if ($group.count > 0) | ||
| 46 | ## Compute the filter value. | ||
| 47 | #joinMediaTypes($entry.value $escapedFilterValue) | ||
| 48 | #set ($discard = $group.put('name', $escapedFilterValue)) | ||
| 49 | #set ($discard = $matchedGroups.add($group)) | ||
| 50 | #end | ||
| 51 | #end | ||
| 52 | #set ($discard = $mediaTypes.removeAll($groupedMediaTypes)) | ||
| 53 | #if ($groupRemainingMediaTypes && $mediaTypes && $mediaTypes.size() > 0) | ||
| 54 | #set ($other = { | ||
| 55 | 'id': 'other', | ||
| 56 | 'count': 0, | ||
| 57 | 'mediaTypes': [], | ||
| 58 | 'mediaTypesWithCounts': [] | ||
| 59 | }) | ||
| 60 | #set ($discard = $other.mediaTypesWithCounts.addAll($mediaTypes)) | ||
| 61 | #foreach ($mediaType in $mediaTypes) | ||
| 62 | #set ($other.count = $other.count + $mediaType.count) | ||
| 63 | #set ($discard = $other.mediaTypes.add($mediaType.name)) | ||
| 64 | #end | ||
| 65 | #joinMediaTypes($other.mediaTypes $escapedFilterValue) | ||
| 66 | #set ($discard = $other.put('name', $escapedFilterValue)) | ||
| 67 | #set ($discard = $mediaTypes.clear()) | ||
| 68 | #set ($discard = $mediaTypes.add($other)) | ||
| 69 | #end | ||
| 70 | #set ($discard = $mediaTypes.addAll($matchedGroups)) | ||
| 71 | ## Sort the media type groups based on the number of matches. | ||
| 72 | ## Note that the sort tool doesn't change the passed list. | ||
| 73 | #set ($sortedMediaTypes = $collectiontool.sort($mediaTypes, 'count:desc')) | ||
| 74 | #set ($discard = $mediaTypes.clear()) | ||
| 75 | #set ($discard = $mediaTypes.addAll($sortedMediaTypes)) | ||
| 76 | #end | ||
| 77 | |||
| 78 | #macro (joinMediaTypes $mediaTypes $return) | ||
| 79 | #set ($escapedMediaTypes = []) | ||
| 80 | #foreach ($mediaType in $mediaTypes) | ||
| 81 | ## Escape the characters that have special meaning in the filter query. | ||
| 82 | #set ($escapedMediaType = $mediaType.replaceAll('([/.+\-])', '\\$1')) | ||
| 83 | #if ($mediaType.indexOf('/') > 0) | ||
| 84 | ## Prefix. | ||
| 85 | #set ($escapedMediaType = "$escapedMediaType*") | ||
| 86 | #else | ||
| 87 | ## Suffix. | ||
| 88 | #set ($escapedMediaType = "*$escapedMediaType") | ||
| 89 | #end | ||
| 90 | #set ($discard = $escapedMediaTypes.add($escapedMediaType)) | ||
| 91 | #end | ||
| 92 | #set ($return = $NULL) | ||
| 93 | #setVariable("$return" "($stringtool.join($escapedMediaTypes, ' '))") | ||
| 94 | #end | ||
| 95 | |||
| 96 | #macro (displayMediaTypesWithPagination $categories) | ||
| 97 | #set ($limitRequestParameter = "l_$facetField.name") | ||
| 98 | #set ($categoryLimit = $numbertool.toNumber($request.getParameter($limitRequestParameter)).intValue()) | ||
| 99 | #if ("$!categoryLimit" == '') | ||
| 100 | #set ($categoryLimit = $solrConfig.facetPaginationStep) | ||
| 101 | #end | ||
| 102 | #set ($categoryLimit = $mathtool.max($mathtool.min($categoryLimit, $categories.size()), 0)) | ||
| 103 | <ul class="mediaTypes"> | ||
| 104 | #foreach ($category in $categories) | ||
| 105 | #if ($foreach.index < $categoryLimit) | ||
| 106 | <li> | ||
| 107 | ## Backup the selected values to be able to restore them afterwards. | ||
| 108 | #set ($facetRequestValuesBackup = $facetRequestValues) | ||
| 109 | ## When an entire category is selected we need to remove the values that were selected from that category. | ||
| 110 | #set ($facetRequestValues = []) | ||
| 111 | #if ($facetRequestValuesBackup) | ||
| 112 | #set ($discard = $facetRequestValues.addAll($facetRequestValuesBackup.subList(0, | ||
| 113 | $facetRequestValuesBackup.size()))) | ||
| 114 | #set ($discard = $facetRequestValues.removeAll($category.mediaTypes)) | ||
| 115 | #end | ||
| 116 | <div id="mediatype-$stringtool.remove($stringtool.substringBetween($category.name, '(', '\'), ' ')" | ||
| 117 | class="mediaTypeCategory">#displaySearchFacetValue($category {} 'displaySearchFacetValue_mediaType' true)</div> | ||
| 118 | ## When a media type is selected, it's category should be unselected. | ||
| 119 | #set ($facetRequestValues = []) | ||
| 120 | #if ($facetRequestValuesBackup) | ||
| 121 | #set ($discard = $facetRequestValues.addAll($facetRequestValuesBackup.subList(0, | ||
| 122 | $facetRequestValuesBackup.size()))) | ||
| 123 | #set ($discard = $facetRequestValues.remove($category.name)) | ||
| 124 | #end | ||
| 125 | <ul>#displaySearchFacetValuesLimited($category.mediaTypesWithCounts {} 'displaySearchFacetValue_mediaType' true)</ul> | ||
| 126 | ## Restore the selected values. | ||
| 127 | #set ($facetRequestValues = $facetRequestValuesBackup) | ||
| 128 | </li> | ||
| 129 | #else | ||
| 130 | #extendQueryString($url {$limitRequestParameter: [$mathtool.add($categoryLimit, $solrConfig.facetPaginationStep)]}) | ||
| 131 | <li><a href="$url" class="more">… $escapetool.xml($services.localization.render( | ||
| 132 | 'solr.facets.moreValues', [$mathtool.sub($categories.size(), $categoryLimit)]))</a></li> | ||
| 133 | #break | ||
| 134 | #end | ||
| 135 | #end | ||
| 136 | </ul> | ||
| 137 | #end | ||
| 138 | |||
| 139 | #macro (displaySearchFacetValue_mediaType $mediaType) | ||
| 140 | #if ($facetValue.id) | ||
| 141 | ## A media type category. | ||
| 142 | $services.localization.render("solr.filterBy.fileType.$facetValue.id") | ||
| 143 | #else | ||
| 144 | #set ($prettyName = $stringtool.substringAfter($mediaType, '/')) | ||
| 145 | ## Fonts have a dedicated category so we can remove the 'x-font-' prefix. | ||
| 146 | #set ($prettyName = $stringtool.removeStart($prettyName, 'x-font-')) | ||
| 147 | ## Non-standard media type, i.e. not registered with the Internet Assigned Numbers Authority (IANA). | ||
| 148 | #set ($prettyName = $stringtool.removeStart($prettyName, 'x-')) | ||
| 149 | ## Vendor specific media type. | ||
| 150 | #set ($prettyName = $stringtool.removeStart($prettyName, 'vnd.')) | ||
| 151 | ## Many media types end with '+xml' or something similar. Let's remove this part. | ||
| 152 | #set ($prettyName = $stringtool.substringBeforeLast($prettyName, '+')) | ||
| 153 | ## Attempt to translate the pretty name. | ||
| 154 | #set ($translationKey = "solr.facet.fileType.${category.id}.$prettyName") | ||
| 155 | #if ($services.localization.get($translationKey)) | ||
| 156 | #set ($prettyName = $services.localization.render($translationKey)) | ||
| 157 | #elseif ($prettyName.length() < 5) | ||
| 158 | ## Probably a file extension (or acronym). | ||
| 159 | #set ($prettyName = $prettyName.toUpperCase()) | ||
| 160 | #end | ||
| 161 | <span title="$mediaType">$prettyName</span> | ||
| 162 | #end | ||
| 163 | #end | ||
| 164 | {{/velocity}} | ||
| 165 | |||
| 166 | {{velocity}} | ||
| 167 | #if ($facetValues) | ||
| 168 | {{html clean="false"}}#displaySearchFacetValues_mediaType($facetValues){{/html}} | ||
| 169 | #end | ||
| 170 | {{/velocity}} |
Community

Wir benutzen Slack, um miteinander zu kommunizieren. Melde Dich an und werde Teil unserer Maker-Community!
Frage? FAQ!
Du hast eine Frage, die sich nicht direkt im Wiki findet?
Natürlich kannst Du die Frage jederzeit gerne in der Slack Community stellen. Bevor Du das machst, schau doch bitte einmal auf unserer Homepage bei den Häufig gestellten Fragen vorbei. Wir versuchen diese Fragen stets aktuell zu halten, eventuell hilft Dir das ja schon weiter.
Offene Werkstatt
Ohne Anmeldung einfach vorbei kommen. Am besten bringst Du direkt den ausgefüllten Haftungsauschluss mit.
Jeden Donnerstag ab 19 Uhr
Während der offenen Werkstatt kannst Du einfach vorbei kommen und an Deinem Projekt arbeiten. Bitte beachte aber, dass zur Verwendung der Maschinen eine Einweisung erforderlich ist, die Du gegebenfalls vorher absolvieren musst. Wenn ein Mitglied mit entsprechender Einweisung vor Ort ist und Zeit hat, helfen wir natürlich gerne aus. Dies können wir aber nicht garantieren, da Rundgänge Priorität haben.
Sprich Dich idealerweise schon vor der offenen Werkstatt mit einem Mitglied in unserem Slack ab. So kannst Du sicherstellen, dass Du auf jeden Fall arbeiten kannst.
Übrigens: Du kannst Dich mit einem Mitglied gerne auch außerhalb der offenen Werkstattzeiten zum Arbeiten verabreden!
Führungen und Rundgänge
Im Rahmen der offenen Werkstatt bieten wir euch auch gerne einen Rundgang durch unsere Werkstatt. Hier könnt ihr den Verein und unser Konzept kennenlernen sowie die Maschinen und Möglichkeiten der Werkstatt gezeigt bekommen.
Jeden Donnerstag wird eine Führung angeboten:
- Um 19:15 Uhr (bitte um 19:00 Uhr da sein)
Der Rundgang dauert ca. 45 Minuten und ihr habt natürlich auch die Möglichkeit, eure Fragen loszuwerden.
Bitte beachtet folgendes: Die Werkstatt beinhaltet gefährliche Maschinen. Bringt daher bitte nach Möglichkeit den ausgefüllten und unterschrieben Haftungsauschluss schon mit. Dieser kann aber auch vor Ort ausgefüllt werden, das verzögert allerdings die Abläufe.