1(function ($) { 2 if (typeof dnn == "undefined") window.dnn = {}; 3 if (typeof dnn.searchSkinObject == "undefined") { 4 dnn.searchSkinObject = function (options) { 5 var settings = { 6 delayTriggerAutoSearch: 100, 7 minCharRequiredTriggerAutoSearch: 2, 8 searchType: "S", 9 enableWildSearch: true, 10 cultureCode: "en-US", 11 }; 12 this.settings = $.extend({}, settings, options); 13 }; 14 dnn.searchSkinObject.prototype = { 15 _ignoreKeyCodes: [ 16 9, 13, 16, 17, 18, 19, 20, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 17 ], 18 init: function () { 19 var throttle = null, 20 self = this; 21 var makeUrl = function (val, service) { 22 var url = service 23 ? service.getServiceRoot("internalservices") + 24 "searchService/preview" 25 : null; 26 if (!url) return null; 27 var params = {}; 28 params["keywords"] = val.replace(/^\s+|\s+$/g, ""); 29 if (!self.settings.enableWildSearch) params["forceWild"] = "0"; 30 params["culture"] = self.settings.cultureCode; 31 if (self.settings.portalId >= 0) 32 params["portal"] = self.settings.portalId; 33 var urlAppend = []; 34 $.each(params, function (index, value) { 35 urlAppend.push([index, encodeURIComponent(value)].join("=")); 36 }); 37 38 if (urlAppend.length) { 39 url += url.indexOf("?") === -1 ? "?" : "&"; 40 url += urlAppend.join("&"); 41 } 42 return url; 43 }; 44 45 var generatePreviewTemplate = function (data, $wrap) { 46 var preview = $(".searchSkinObjectPreview", $wrap); 47 if (preview.length) preview.remove(); 48 49 var markup = '<ul class="searchSkinObjectPreview">'; 50 if (data && data.length) { 51 for (var i = 0; i < data.length; i++) { 52 var group = data[i]; 53 if (group.Results && group.Results.length) { 54 var groupTitle = group.DocumentTypeName; 55 markup += 56 '<li class="searchSkinObjectPreview_group">' + 57 groupTitle + 58 "</li>"; 59 for (var j = 0; j < group.Results.length; j++) { 60 var item = group.Results[j]; 61 var itemTitle = item.Title; 62 var itemUrl = item.DocumentUrl; 63 var itemDescription = item.Description; 64 var itemSnippet = item.Snippet; 65 markup += '<li data-url="' + itemUrl + '">'; 66 if (item.Attributes.Avatar) { 67 markup += 68 '<span><img src="' + 69 item.Attributes.Avatar + 70 '" class="userpic" /></span>'; 71 } 72 markup += "<span>" + itemTitle + "</span>"; 73 if (itemDescription) { 74 markup += "<p>" + itemDescription + "</p>"; 75 } 76 if (itemSnippet) { 77 markup += "<p>" + itemSnippet + "</p>"; 78 } 79 markup += "</li>"; 80 } // end for group items 81 } 82 } // end for group 83 84 var moreResults = $wrap.attr("data-moreresults"); 85 markup += 86 '<li><a href="javascript:void(0)" class="searchSkinObjectPreview_more">' + 87 moreResults + 88 "</a></li>"; 89 markup += "</ul>"; 90 } else { 91 var noResult = $wrap.attr("data-noresult"); 92 markup += "<li>" + noResult + "</li></ul>"; 93 } 94 95 $wrap.append(markup); 96 preview = $(".searchSkinObjectPreview", $wrap); 97 98 //attach click event 99 $("li", preview).on("click", function () { 100 var navigateUrl = $(this).attr("data-url"); 101 if (navigateUrl) { 102 window.location.href = navigateUrl; 103 } 104 return false; 105 }); 106 107 //attach see more 108 $(".searchSkinObjectPreview_more", $wrap).on("click", function () { 109 var $searchButton = $wrap.next(); 110 if (!$searchButton.length) { 111 $searchButton = $wrap.parent().next(); 112 } 113 $searchButton[0].click(); 114 return false; 115 }); 116 }; 117 118 $(".searchInputContainer a.dnnSearchBoxClearText").on( 119 "click", 120 function () { 121 var $this = $(this); 122 var $wrap = $this.parent(); 123 $(".searchInputContainer input").val("").focus(); 124 $this.removeClass("dnnShow"); 125 $(".searchSkinObjectPreview", $wrap).remove(); 126 return false; 127 }, 128 ); 129 130 $(".searchInputContainer") 131 .next() 132 .on("click", function () { 133 var $this = $(this); 134 var inputBox = $this.prev().find('input[type="text"]'); 135 var val = inputBox.val(); 136 if (val.length) { 137 return true; 138 } 139 return false; 140 }); 141 142 $(".searchInputContainer input") 143 .on("keyup", function (e) { 144 var k = e.keyCode || e.witch; 145 if ($.inArray(k, self._ignoreKeyCodes) > -1) return; 146 147 var $this = $(this); 148 var $wrap = $this.parent(); 149 var val = $this.val(); 150 var container = $this.parent(".searchInputContainer"); 151 if (!val) { 152 $("a.dnnSearchBoxClearText", $wrap).removeClass("dnnShow"); 153 $(".searchSkinObjectPreview", $wrap).remove(); 154 } else { 155 $("a.dnnSearchBoxClearText", $wrap).addClass("dnnShow"); 156 157 if ( 158 self.settings.searchType != "S" || 159 val.length < self.settings.minCharRequiredTriggerAutoSearch 160 ) 161 return; 162 163 if (throttle) { 164 clearTimeout(throttle); 165 delete throttle; 166 } 167 168 throttle = setTimeout(function () { 169 var service = $.dnnSF ? $.dnnSF(-1) : null; 170 var url = makeUrl(val, service); 171 if (url) { 172 $.ajax({
173 url: url, 174 beforeSend: service ? service.setModuleHeaders : null, 175 success: function (result) { 176 if (result) generatePreviewTemplate(result, container); 177 }, 178 error: function () {}, 179 type: "GET", 180 dataType: "json", 181 contentType: "application/json", 182 }); 183 } 184 }, self.settings.delayTriggerAutoSearch); 185 } 186 }) 187 .on("paste", function () { 188 $(this).triggerHandler("keyup"); 189 }) 190 .on("keypress", function (e) { 191 var k = e.keyCode || e.which; 192 if (k == 13) { 193 var $this = $(this); 194 var $wrap = $this.parent(); 195 var val = $this.val(); 196 if (val.length) { 197 var $searchButton = $wrap.next(); 198 if (!$searchButton.length) { 199 $searchButton = $wrap.parent().next(); 200 } 201 $searchButton[0].click(); 202 e.preventDefault(); 203 } else { 204 e.preventDefault(); 205 } 206 } 207 }); 208 }, 209 }; 210 } 211})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.