Created
September 13, 2017 09:27
-
-
Save waaromikniet/b99ef686312b5dbab5cfa8791f3d8f41 to your computer and use it in GitHub Desktop.
SharePoint 2013 Refinement Filter For User Field
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"> | |
<head> | |
<title>User Refinement Item</title> | |
<!--[if gte mso 9]><xml> | |
<mso:CustomDocumentProperties> | |
<mso:CompatibleManagedProperties msdt:dt="string"></mso:CompatibleManagedProperties> | |
<mso:TemplateHidden msdt:dt="string">0</mso:TemplateHidden> | |
<mso:CompatibleSearchDataTypes msdt:dt="string"></mso:CompatibleSearchDataTypes> | |
<mso:MasterPageDescription msdt:dt="string"></mso:MasterPageDescription> | |
<mso:ContentTypeId msdt:dt="string">0x0101002039C03B61C64EC4A04F5361F385106604</mso:ContentTypeId> | |
<mso:TargetControlType msdt:dt="string">;#Refinement;#</mso:TargetControlType> | |
<mso:HtmlDesignAssociated msdt:dt="string">1</mso:HtmlDesignAssociated> | |
</mso:CustomDocumentProperties></xml><![endif]--> | |
</head> | |
<body> | |
<div id="4"> | |
<!--#_ | |
this.Options = { | |
ShowClientPeoplePicker: false, | |
ShowCounts: false | |
}; | |
if (ctx.RefinementControl.propertyName == "Author" || | |
ctx.RefinementControl.propertyName == "DisplayAuthor") | |
{ | |
this.Options.ShowClientPeoplePicker = true; | |
} | |
function mapResultType(listData) | |
{ | |
var map = { }; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSAccess")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["accdb", "accdc", "accde", "accdr", "accdt"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_AdobePDF")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["pdf"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Assignment")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x010063C2F478ACC511DFB869B5BFDFD720851252*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Blog")] = { | |
"RefinerName": "WebTemplate", | |
"RefinementValues": ["BLOG"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Book")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900ABD371128A994A0B98E7E888866B392F*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Community")] = { | |
"RefinerName": "WebTemplate", | |
"RefinementValues": ["COMMUNITY"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Course")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x010063C2F478ACC511DFB869B5BFDFD720851101*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Discussion")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x012002*", "0x0107*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Email")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["eml", "msg", "exch"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSExcel")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["odc", "ods", "xls", "xlsb", "xlsm", "xlsx", "xltm", "xltx", "xlam"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Image")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["bmp", "jpeg", "png", "tiff", "gif", "rle", "wmf", "dib", "ico", "wpd", "odg"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Lesson")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x010063C2F478ACC511DFB869B5BFDFD720851251*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_NewsfeedPost")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x01FD4FB0210AB50249908EAA47E6BD3CFE8B*", "0x01FD59a0df25f1e14ab882d2c87d4874cf84*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSOneNote")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["one"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSPowerPoint")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["odp", "ppt", "pptm", "pptx", "potm", "potx", "ppam", "ppsm", "ppsx"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSProject")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["mpp"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSPublisher")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["pub"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_SharePointSite")] = { | |
"RefinerName": "contentclass", | |
"RefinementValues": ["STS_Web", "STS_Site"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Task")] = { | |
"RefinerName": "contentclass", | |
"RefinementValues": ["STS_ListItem_GanttTasks", "STS_ListItem_Tasks", "STS_ListItem_HierarchyTasks", "STS_List_GanttTasks", "STS_List_Tasks", "STS_List_HierarchyTasks"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_TeamSite")] = { | |
"RefinerName": "WebTemplate", | |
"RefinementValues": ["STS"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Video")] = { | |
"RefinerName": "ContentTypeId", | |
"RefinementValues": ["0x0120D520A8*"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Visio")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["vsd", "vsx"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_MSWord")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["docx", "doc", "docm", "dot", "nws", "dotx"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Webpage")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["HTML", "MHTML"] | |
}; | |
map[Srch.U.loadResource("rf_ResultTypeRefinerValue_Archive")] = { | |
"RefinerName": "FileType", | |
"RefinementValues": ["zip"] | |
}; | |
var retListData = new Array(); | |
var assocListData = new Array(); | |
for (var i = 0; i < listData.length; i++) | |
{ | |
var filter = listData[i]; | |
var mappedRefinementName = null; | |
for(var key in map) | |
{ | |
if (map[key].RefinerName == filter.RefinerName) | |
{ | |
for (var j = 0; j < map[key].RefinementValues.length; j++) | |
{ | |
var actualValue = filter.RefinementValue.toLowerCase(), candidateValue = map[key].RefinementValues[j].toLowerCase(); | |
if (actualValue == candidateValue || | |
(filter.RefinerName.toLowerCase() == "contenttypeid" && actualValue.startsWith(candidateValue.substring(0, candidateValue.length - 1)))) | |
{ | |
mappedRefinementName = key; | |
break; | |
} | |
} | |
if (!$isNull(mappedRefinementName)) | |
{ | |
break; | |
} | |
} | |
} | |
var mappedFilter = new Object(); | |
if (!$isNull(mappedRefinementName)) | |
{ | |
mappedFilter.RefinerName = map[mappedRefinementName].RefinerName; | |
mappedFilter.RefinementCount = filter.RefinementCount; | |
mappedFilter.RefinementName = mappedRefinementName; | |
mappedFilter.RefinementTokens = []; | |
var resultTypeTokenWrapper = (mappedFilter.RefinerName.toLowerCase() == "contenttypeid") ? function (x) {return x;} : | |
Srch.RefinementUtil.stringValueToEqualsToken; | |
for (var j in map[mappedRefinementName].RefinementValues) { | |
mappedFilter.RefinementTokens.push(resultTypeTokenWrapper(map[mappedRefinementName].RefinementValues[j])); | |
} | |
if ($isNull(assocListData[mappedFilter.RefinementName])) | |
{ | |
assocListData[mappedFilter.RefinementName] = mappedFilter; | |
} | |
else | |
{ | |
assocListData[mappedFilter.RefinementName].RefinementCount += mappedFilter.RefinementCount; | |
} | |
} | |
} | |
for (var key in assocListData) | |
{ | |
retListData[retListData.length] = assocListData[key]; | |
} | |
return retListData; | |
} | |
var listData = ctx.ListData; | |
var hasControl = true; | |
var shortListSize = 5; | |
if ($isNull(ctx.RefinementControl) || $isNull(ctx.ClientControl)) hasControl = false; | |
if (ctx.RefinementControl.propertyName == "FileType") { | |
shortListSize = 6; | |
if ($isNull(listData)) | |
{ | |
listData = []; | |
} | |
if (!$isNull(ctx.DataProvider.get_refinementInfo())) { | |
if (!$isNull(ctx.DataProvider.get_refinementInfo()["contentclass"])) | |
{ | |
listData = listData.concat(ctx.DataProvider.get_refinementInfo()["contentclass"]); | |
} | |
if (!$isNull(ctx.DataProvider.get_refinementInfo()["ContentTypeId"])) | |
{ | |
listData = listData.concat(ctx.DataProvider.get_refinementInfo()["ContentTypeId"]); | |
} | |
if (!$isNull(ctx.DataProvider.get_refinementInfo()["WebTemplate"])) | |
{ | |
listData = listData.concat(ctx.DataProvider.get_refinementInfo()["WebTemplate"]); | |
} | |
} | |
if (hasControl) | |
listData = mapResultType(listData); | |
} | |
else if (ctx.RefinementControl.propertyName == 'contentclass' || ctx.RefinementControl.propertyName == 'ContentTypeId' || ctx.RefinementControl.propertyName == 'WebTemplate') { | |
hasControl = false; | |
} | |
else if (hasControl && !$isNull(listData)) | |
{ | |
for(var i in listData) | |
{ | |
listData[i].RefinementTokens = [listData[i].RefinementToken]; | |
listData[i].RefinementTokenWrappedValues = [Srch.RefinementUtil.stringValueToEqualsToken(listData[i].RefinementValue)]; | |
if(ctx.RefinementControl.propertyName == "MediaDuration") | |
{ | |
Srch.U.modifyMediaDurationRefinementName(listData[i]); | |
} | |
} | |
} | |
if (hasControl) | |
{ | |
if($isNull(listData) || $isEmptyArray(listData)) | |
{ | |
_#--> | |
<div id="EmptyContainer"></div> | |
<!--#_ | |
} | |
else | |
{ | |
var isExpanded = Srch.Refinement.getExpanded(ctx.RefinementControl.propertyName); | |
var iconClass = (isExpanded == "true"? "ms-ref-uparrow" : "ms-ref-downarrow"); | |
var displayStyle = (isExpanded == "true"? "" : "none"); | |
var refinerCatTitle = Srch.Refinement.getRefinementTitle(ctx.RefinementControl); | |
_#--> | |
<div id='Container'> | |
_#= Srch.U.collapsibleRefinerTitle(ctx.RefinementControl.propertyName, ctx.ClientControl.get_id(), refinerCatTitle, iconClass) =#_ | |
<!--#_ | |
function outputFilter(refinementName, refinementCount, refiners, method, aClass, showCounts) { | |
var aOnClick = "$getClientControl(this)." + method + "('" + $scriptEncode(Sys.Serialization.JavaScriptSerializer.serialize(refiners)) + "');"; | |
var nameClass = "ms-ref-name " + (showCounts ? "ms-displayInline" : "ms-displayInlineBlock ms-ref-ellipsis"); | |
function changeName(refinementName) | |
{ | |
if(refinementName === 'All') | |
return refinementName | |
else | |
var start_pos = refinementName.indexOf('|') + 1; | |
var end_pos = refinementName.indexOf('|',start_pos); | |
var text_to_get = refinementName.substring(start_pos,end_pos) | |
return text_to_get; | |
} | |
_#--> | |
<div id='Value' name='Item'> | |
<a id='FilterLink' class='_#= $htmlEncode(aClass) =#_' onclick="_#= aOnClick =#_" href='javascript:{}' title='_#= $htmlEncode(String.format(Srch.U.loadResource("rf_RefineBy"), changeName(refinementName))) =#_'> | |
<div id='RefinementName' class='_#= nameClass =#_'> _#= $htmlEncode(changeName(refinementName)) =#_ </div> | |
<!--#_ | |
if (showCounts) { | |
_#--> | |
<div id='RefinementCount' class='ms-ref-count ms-textSmall'> (_#= $htmlEncode(Srch.U.toFormattedNumber(refinementCount)) =#_) </div> | |
<!--#_ | |
} | |
_#--> | |
</a> | |
</div> | |
<!--#_ | |
}; | |
function SortAlphabetically(a, b) | |
{ | |
return a.RefinementName.localeCompare(b.RefinementName); | |
} | |
function SortByCountDescending(a, b) | |
{ | |
return b.RefinementCount - a.RefinementCount; | |
} | |
var unselectedFilters = new Array(); | |
var selectedFilters = new Array(); | |
var hasDiscreteIntervals = (!$isEmptyString(ctx.RefinementControl.spec) && ctx.RefinementControl.spec.startsWith('(discretize=manual')); | |
var currentRefinementCategory = ctx.ClientControl.getCurrentRefinementCategory(ctx.RefinementControl.propertyName); | |
var hasAnyFiltertokens = (!Srch.U.n(currentRefinementCategory) && currentRefinementCategory.get_tokenCount() > 0); | |
for (var i = 0; i < listData.length; i++){ | |
var filter = listData[i]; | |
if(!$isNull(filter)){ | |
var isEmptyDiscreteInterval = (hasDiscreteIntervals && filter.RefinementCount < 1); | |
if (ctx.ClientControl.hasAllRefinementFilters(filter.RefinerName, filter.RefinementTokens) || | |
ctx.ClientControl.hasAllRefinementFilters(filter.RefinerName, filter.RefinementTokenWrappedValues)) { | |
selectedFilters.push(filter); | |
} else if(!isEmptyDiscreteInterval) { | |
unselectedFilters.push(filter); | |
} | |
} | |
} | |
if (ctx.RefinementControl.propertyName == "FileType") | |
{ | |
if (unselectedFilters.length <= shortListSize) { | |
unselectedFilters = unselectedFilters.sort(SortAlphabetically); | |
} else { | |
unselectedFilters = unselectedFilters.sort(SortByCountDescending); | |
} | |
selectedFilters = selectedFilters.sort(SortAlphabetically); | |
} | |
if (selectedFilters.length > 0 || hasAnyFiltertokens) | |
{ | |
_#--> | |
<div id='AllSection' class='ms-ref-allSec' style='display:_#= $htmlEncode(displayStyle) =#_'> | |
<!--#_ | |
var refinersAll = new Object(); | |
refinersAll[ctx.RefinementControl.propertyName] = null; | |
if (ctx.RefinementControl.propertyName == "FileType") | |
{ | |
refinersAll["contentclass"] = null; | |
refinersAll["ContentTypeId"] = null; | |
refinersAll["WebTemplate"] = null; | |
} | |
outputFilter(Srch.U.loadResource("rf_All"), null, refinersAll, "updateRefinersJSON", "ms-displayBlock", false); | |
_#--> | |
</div> | |
<!--#_ | |
} | |
_#--> | |
<div id='SelectedSection' class='ms-ref-selSec'> | |
<!--#_ | |
for (var i = 0; i < selectedFilters.length; i++){ | |
var filter = selectedFilters[i]; | |
if(!$isNull(filter)){ | |
var refiners = new Object(); | |
if (!$isNull(filter.RefinementTokenWrappedValues)) | |
filter.RefinementTokens = filter.RefinementTokens.concat(filter.RefinementTokenWrappedValues); | |
refiners[filter.RefinerName] = filter.RefinementTokens; | |
outputFilter(filter.RefinementName, filter.RefinementCount, refiners, "removeRefinementFiltersJSON", "ms-core-listMenu-selected ms-ref-filterSel ms-displayBlock", this.Options.ShowCounts); | |
} | |
} | |
_#--> | |
</div> | |
<div id='UnselectedSection' class='ms-ref-unselSec' style='display:_#= $htmlEncode(displayStyle) =#_'> | |
<div id='unselShortList' class='ms-ref-unsel-shortList'> | |
<!--#_ | |
var addMethod = "addRefinementFiltersJSON"; | |
if (ctx.RefinementControl.propertyName == "FileType") | |
{ | |
addMethod = "addRefinementFiltersJSONWithOr"; | |
} | |
var shortList = unselectedFilters; | |
var numShortList = unselectedFilters.length; | |
if (shortListSize < unselectedFilters.length) { | |
numShortList = shortListSize; | |
if (ctx.RefinementControl.propertyName == "FileType") { | |
shortList = unselectedFilters.slice(0, numShortList).sort(SortAlphabetically); | |
} | |
} | |
for (var i = 0; i < numShortList; i++) { | |
var filter = shortList[i]; | |
if(!$isNull(filter)) { | |
var refiners = new Object(); | |
refiners[filter.RefinerName] = filter.RefinementTokens; | |
outputFilter(filter.RefinementName, filter.RefinementCount, refiners, addMethod, "ms-displayBlock", this.Options.ShowCounts); | |
} | |
} | |
_#--> | |
</div> | |
<!--#_ | |
if (shortListSize < unselectedFilters.length || this.Options.ShowClientPeoplePicker) { | |
_#--> | |
<div id='unselLongList' class='ms-ref-unsel-longList' style='display:none'> | |
<!--#_ | |
if (ctx.RefinementControl.propertyName == "FileType") { | |
unselectedFilters = unselectedFilters.sort(SortAlphabetically); | |
} | |
for (var i = 0; i < unselectedFilters.length; i++) { | |
var filter = unselectedFilters[i]; | |
if(!$isNull(filter)) { | |
var refiners = new Object(); | |
refiners[filter.RefinerName] = filter.RefinementTokens; | |
outputFilter(filter.RefinementName, filter.RefinementCount, refiners, addMethod, "ms-displayBlock", this.Options.ShowCounts); | |
} | |
} | |
var pplPickerIdParam = 'null'; | |
if (this.Options.ShowClientPeoplePicker) { | |
var pplPickerId = Srch.RefinementUtil.peoplePickerApplyIdPrefix(ctx.RefinementControl); | |
pplPickerIdParam = '"' + pplPickerId + '"'; | |
Srch.RefinementUtil.peoplePickerPrep(pplPickerId, ctx.RefinementControl, ctx.ClientControl); | |
_#--> | |
<div id='Value' name='Item'> | |
<div id='_#= pplPickerId =#_' class='ms-ref-pplPicker ms-displayBlock'></div> | |
</div> | |
<!--#_ | |
} | |
_#--> | |
</div> | |
<a id='unselToggle' class='ms-ref-unsel-toggle ms-commandLink' onclick='EnsureScriptParams("SearchUI.js", "Srch.SU.toggleRefShortLong", this.parentNode, _#= pplPickerIdParam =#_)' href='javascript: {}'> | |
<div class="ms-displayInlineBlock">_#= $htmlEncode(Srch.U.loadResource("rf_RefinementLabel_More")) =#_</div> | |
</a> | |
<!--#_ | |
} | |
_#--> | |
</div> | |
</div> | |
<!--#_ | |
} | |
} | |
_#--> | |
</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment