1var ecblib = ecblib || {}; 2ecblib.search_suggest = ecblib.search_suggest || {}; 3 4(function () { 5 var _search_suggest = ecblib.search_suggest; 6 7 var searchSuggestFormSelector = ".js-suggest-search"; 8 var searchSuggestAreaSelector = "#search_suggest_area_"; 9 var searchSuggestPendingTime = 200; 10 var searchSuggestMinLength = 1; 11 var searchSuggestURL = ''; 12 var searchSuggestAreaTmpl = '<div id="search_suggest_area_" class="block-search-suggest"></div>'; 13 var searchSuggestTimer = null; 14 var searchSuggestCurrentForm = null; 15 /* åæåå¦ç */ 16 jQuery(document).ready(function () { 17 /* ãµã¸ã§ã¹ãAjaxã®URLçæ */ 18 searchSuggestURL = ecblib.sys.wwwroot + "/shop/search/searchsuggest.aspx"; 19 /* ãã¼ã¯ã¼ããå ¥åãããã¾ãã¯ããã¼ã¯ã¼ãã«ãã©ã¼ã«ã¹ããå ´åã®ã¤ãã³ã */ 20 jQuery(searchSuggestFormSelector).on("keyup focus input", function (e) { 21 triggerSearchSuggest(e, jQuery(this)); 22 }); 23 jQuery(searchSuggestFormSelector).on("keydown", function (e) { 24 if (e.which == 40) { 25 jQuery(searchSuggestAreaSelector).find('a:first').focus(); 26 e.preventDefault(); 27 e.stopPropagation(); 28 } 29 }); 30 jQuery(document).on("keydown", searchSuggestAreaSelector, function (e) { 31 if (e.which == 38) { 32 var prevObj = jQuery(document.activeElement).parent().prev(); 33 var prevObjParent = jQuery(document.activeElement).parent().parent().prev(); 34 if (!prevObj[0] && !prevObjParent[0]) { 35 jQuery(searchSuggestAreaSelector).find('a:last').focus(); 36 } else if (prevObj[0]) { 37 prevObj.find('a:last').focus(); 38 } else if (prevObjParent[0]) { 39 prevObjParent.children(':last').find('a:last').focus(); 40 } 41 e.preventDefault(); 42 e.stopPropagation(); 43 } 44 if (e.which == 40) { 45 var nextObj = jQuery(document.activeElement).parent().next(); 46 var nextObjParent = jQuery(document.activeElement).parent().parent().next(); 47 if (!nextObj[0] && !nextObjParent[0]) { 48 jQuery(searchSuggestAreaSelector).find('a:first').focus(); 49 } else if (nextObj[0]) { 50 nextObj.find('a:first').focus(); 51 } else if (nextObjParent[0]) { 52 nextObjParent.children(':first').find('a:first').focus(); 53 } 54 e.preventDefault(); 55 e.stopPropagation(); 56 } 57 if (e.which == 13) { 58 return jQuery(document.activeElement).click(); 59 } 60 }); 61 /* ãµã¸ã§ã¹ããã¼ã¯ã¼ããã¯ãªãã¯ãããå ´åã®ã¤ãã³ã */ 62 jQuery(document).on("click", ".js-search-suggest-keyword-entry", function () { 63 selectSearchSuggestKeyword(jQuery(this)); 64 return false; 65 }); 66 /* ãµã¸ã§ã¹ãååãã¯ãªãã¯ãããå ´åã®ã¤ãã³ã */ 67 jQuery(document).on("click", ".js-search-suggest-goods", function () { 68 selectSearchSuggestGoods(jQuery(this)); 69 }); 70 /* ãµã¸ã§ã¹ãã¨ãªã¢å¤ãã¯ãªãã¯ãããå ´åã®ã¤ãã³ã */ 71 jQuery("body").on("click", function (e) { 72 hideSearchSuggest(e); 73 }); 74 }); 75 /* ãµã¸ã§ã¹ããã¼ã¯ã¼ã鏿æã®å¦ç */ 76 function selectSearchSuggestKeyword(entry) { 77 jQuery(searchSuggestCurrentForm).val(entry.text()); 78 if (jQuery(searchSuggestCurrentForm).data("suggest-submit") == "on") { 79 /* suggest-submitãonã®æã¯formãsubmit */ 80 jQuery(searchSuggestCurrentForm).closest("form").submit(); 81 } else { 82 /* suggest-submitãoffã®æã¯ãµã¸ã§ã¹ãã¨ãªã¢ãéãã */ 83 removeSearchSuggest(); 84 } 85 }
86 /* ãµã¸ã§ã¹ãåå鏿æã®å¦ç */ 87 function selectSearchSuggestGoods(entry) { 88 location.href = entry.find("a").attr("href"); 89 } 90 /* ãã¼ã¯ã¼ãå ¥åå¾ãµã¸ã§ã¹ã表示ã¿ã¤ãã¼éå§å¦ç */ 91 function triggerSearchSuggest(e, inputForm) { 92 var inputKeyword = inputForm.val(); 93 /* ã¨ã³ã¿ã¼ã®å ´åã¯ä¸æ */ 94 if (e.keyCode == 13) { 95 return false; 96 } 97 /* æ¢ã«è¡¨ç¤ºã¿ã¤ãã¼ãéå§ããã¦ããå ´åã¯åãæ¶ã */ 98 if (searchSuggestTimer) { 99 clearTimeout(searchSuggestTimer); 100 searchSuggestTimer = null; 101 } 102 /* å ¥åã空ãæä½å ¥åæåæ°ã«æºããªãå ´åã¯ä¸æ */ 103 if (inputKeyword == '' || inputKeyword.length < searchSuggestMinLength) { 104 removeSearchSuggest(); 105 return false; 106 } 107 /* 表示ã¿ã¤ãã¼ãã»ãã */ 108 searchSuggestTimer = setTimeout(function () { 109 searchSuggestTimer = null; 110 requestSearchSuggest(inputForm, inputKeyword); 111 }, searchSuggestPendingTime); 112 } 113 /* ãµã¸ã§ã¹ã表示ã¿ã¤ãã¼ãã¿ã¤ã ã¢ã¦ãå¾ã®å¦ç */ 114 function requestSearchSuggest(inputForm, inputKeyword) { 115 jQuery.ajax({ 116 url: searchSuggestURL, 117 type: "POST", 118 dataType: "html", 119 cache: false, 120 data: { 121 input_keyword: inputKeyword 122 }, 123 success: function (responseHtml) { 124 /* ãµã¸ã§ã¹ãã¨ãªã¢æ¶å» */ 125 removeSearchSuggest(); 126 /* ãµã¸ã§ã¹ããã¼ã¿ãåä¿¡ããããã¼ã¯ã¼ããã¯ãªã¢ããã¦ããå ´åã¯ä¸æ */ 127 if (inputForm.val() == '') { 128 return; 129 } 130 /* ãµã¸ã§ã¹ããã¼ã¿ãç©ºï¼æ¹è¡ã®ã¿ã®å ´åãå«ãï¼ã®å ´åã¯ä¸æ */ 131 if (responseHtml.replace(/\s+$/, "") == '') { 132 return; 133 } 134 /* ãµã¸ã§ã¹ããã¼ã¿ãã»ãã·ã§ã³åãHTMLçã«ç½®ãæãã£ã¦ããå ´åã¯ä¸æ */ 135 if (responseHtml.indexOf("suggest_keyword_list") == -1 && responseHtml.indexOf("suggest_goods_list") == -1) { 136 return; 137 } 138 /* ãµã¸ã§ã¹ãã¨ãªã¢è¡¨ç¤º */ 139 showSearchSuggest(inputForm, responseHtml); 140 } 141 }); 142 } 143 /* ãµã¸ã§ã¹ãã¨ãªã¢è¡¨ç¤ºå¦ç */ 144 function showSearchSuggest(inputForm, responseHtml) { 145 /* ãµã¸ã§ã¹ãã¨ãªã¢ã®ãã³ãã¬ã¼ãã追å */ 146 jQuery("body").append(searchSuggestAreaTmpl); 147 /* ãµã¸ã§ã¹ãã¨ãªã¢ã®HTMLãã»ãã */ 148 var suggestArea = jQuery(searchSuggestAreaSelector); 149 suggestArea.html(responseHtml); 150 /* 表示ä½ç½®ã®èª¿æ´ */ 151 var ctrl = inputForm; 152 var ctrlOffset = ctrl.offset(); 153 var ctrlLeft = ctrlOffset.left; 154 var ctrlTop = ctrlOffset.top + jQuery(ctrl).outerHeight(false); 155 suggestArea.offset({ 156 top: ctrlTop, 157 left: ctrlLeft 158 }); 159 var paddingWidth = parseInt(suggestArea.css('margin-left')) + parseInt(suggestArea.css('margin-right')) + parseInt(suggestArea.css('padding-left')) + parseInt(suggestArea.css('padding-right')); 160 var width = jQuery(ctrl).outerWidth(true) - paddingWidth; 161 suggestArea.css("min-width", width); 162 /* ãµã¸ã§ã¹ãã表示ãããã©ã¼ã ãä¿æ */ 163 searchSuggestCurrentForm = inputForm; 164 /* ãµã¸ã§ã¹ãã¨ãªã¢è¡¨ç¤º */ 165 suggestArea.show(); 166 } 167 /* ãµã¸ã§ã¹ãã¨ãªã¢é表示å¤å®ã¨é表示å¦çå¼ã³åºã */ 168 function hideSearchSuggest(e) { 169 var suggestArea = jQuery(searchSuggestAreaSelector); 170 if (suggestArea.size()) { 171 var x = e.clientX + jQuery(window).scrollLeft(); 172 var y = e.clientY + jQuery(window).scrollTop(); 173 var ctrlOffset = suggestArea.offset(); 174 var startX = ctrlOffset.left; 175 var endX = startX + suggestArea.outerWidth(true); 176 var startY = ctrlOffset.top; 177 var endY = startY + suggestArea.outerHeight(true); 178 if (x < startX || x > endX || y < startY || y > endY) { 179 removeSearchSuggest(); 180 } 181 } 182 } 183 /* ãµã¸ã§ã¹ãã¨ãªã¢é表示å¦ç */ 184 function removeSearchSuggest() { 185 jQuery(searchSuggestAreaSelector).remove(); 186 searchSuggestCurrentForm = null; 187 } 188}());
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.