Skip to content

Instantly share code, notes, and snippets.

View funnelback's full-sized avatar

Funnelback funnelback

View GitHub Profile
@funnelback
funnelback / freemarker-sort-snippet
Created September 30, 2014 09:08
Uses Bootstrap markup patterns to create a 'Sort' dropdown. All existing CGI parameters are preserved, except for 'sort' and 'start_rank'. Examples provided for common sort modes. Extensible to sort by arbitrary metadata fields.
<#-- SORT MODES -->
<div class="dropdown pull-right">
<a class="dropdown-toggle text-muted" data-toggle="dropdown" href="#" id="dropdown-sortmode" title="Sort">
<small><span class="glyphicon glyphicon-sort"></span>&nbsp;Sort</small>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdown-sortmode">
<li role="menuitem"><a href="${question.collection.configuration.value("ui.modern.search_link")}?${removeParam(QueryString,["start_rank","sort"])?html}"><span class="glyphicon glyphicon-sort-by-attributes-alt"></span> Relevance</a></li>
<li role="menuitem"><a href="${question.collection.configuration.value("ui.modern.search_link")}?${removeParam(QueryString,["start_rank","sort"])?html}&amp;sort=date"><span class="glyphicon glyphicon-sort-by-order-alt"></span> Recency</a></li>
<li role="menuitem"><a href="${question.collection.configuration.value("ui.modern.search_link")}?${removeParam(QueryString,["start_rank","sort"])?html}&amp;sort=title"><span class="glyphicon glyphicon-sort-by-a
@funnelback
funnelback / freemarker-result-facebook
Last active August 29, 2015 14:01
Freemarker snippet for Facebook result types
<#-- FACEBOOK RESULT TYPE -->
<div class="row">
<div class="col-md-1">
<img class="search-thumbnail" src=""/>
</div>
<div class="col-md-11">
<#-- PAGE RESULT SUB-TYPE -->
<#if s.result.metaData["T"] == "PAGE">
<h4><a href="${s.result.clickTrackingUrl?html}" title="${s.result.title}">${s.result.metaData["a"]}</a></h4>
@funnelback
funnelback / freemarker-result-twitter
Last active August 29, 2015 14:01
Twitter Result Type Freemarker Snippet
<#-- TWITTER RESULT TYPE -->
<#-- TWEET OWNER -->
<div class="media">
<a class="pull-left" href="#">
<img class="media-object" src="/s/scale?url=${s.result.metaData["I"]}&amp;width=50&amp;height=50" alt="avatar">
</a>
<div class="media-body twitter-owner">
<h4 class="media-heading"><a href="http://twitter.com/${s.result.metaData["u"]}" target="_blank" title="(@${s.result.metaData["u"]})">${s.result.metaData["a"]}</a></h4>
<small class="text-muted" >@${s.result.metaData["u"]}</small>
</div>
<#--- Checks if a query blending occurred and provide a link to cancel it.
@param prefix : Prefix to blended query terms, defaults to &quot;Your query has been expanded to: &quot;.
@param linkText : Text for the link to cancel query blending, defaults to &quot;Click here to use verbatim query&quot;.
-->
<#macro CheckBlending prefix="Your query has been expanded to: " linkText="Do not do this">
<#if response?? && response.resultPacket??
&& response.resultPacket.QSups?? && response.resultPacket.QSups?size &gt; 0>
${prefix} <span><#list response.resultPacket.QSups as qsup> ${qsup.query}<#if qsup_has_next>, </#if></#list></span>.
&nbsp;<a href="?${QueryString}&amp;qsup=off">${linkText}</a>
</#if>
@funnelback
funnelback / faceted-search.js
Created August 20, 2013 11:53
funnelback-default-faceted-search-client-side-behaviours
// Expandable facet categories and Bootstrap styling.
// Assumes use of bootstrap-search.ftl and non-hierarchical facets
function expandable_facet_categories(defaultFacetCategories) {
$(".facet .panel ul").each(function(){
if ($(this).children(".category").size() > defaultFacetCategories) {
$(this).children(".category").each(function(){
if($(this).index() >= defaultFacetCategories)
$(this).hide();
});
$(this).after("<button type='button' class='btn btn-link btn-xs search-toggle-more-categories' title='Show more categories from this facet'><small><span class='glyphicon glyphicon-chevron-down'></span></small>&nbsp;More&hellip;</button>");
@funnelback
funnelback / funnelback-google-analytics-template-macro
Created August 20, 2013 11:27
Track zero and partially-matching search results events in Google Analytics. Embed in existing search template. Modern UI only.
<@s.AfterSearchOnly>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'GOOGLE-ANALYTICS-UA']);
<#if response.resultPacket.resultsSummary.totalMatching == 0>
<#-- TRACK QUERIES WITH ZERO RESULTS -->
_gaq.push(['_setCustomVar', 1, 'No matching results', '<@s.QueryClean/>', 3]);
<#else>
<#if response.resultPacket.resultsSummary.fullyMatching == 0>