1import Route from "../../../js/utils/route.js" 2import CONFIG from "../../../js/utils/config.js" 3import Search from "../../../js/api/model/search/index.js?template=202410311433" 4import Util from "../../../js/utils/util.js" 5var searchColumnId = $(".searchColumnId").eq(0).attr("value") 6var searchColumnName = $(".searchColumnName").eq(0).attr("value") 7var searchColumnFileName = $(".searchColumnFileName").eq(0).attr("value") 8var searchColumnFilePath = $(".searchColumnFilePath").eq(0).attr("value") 9var {column} = globalData 10var isSelf = column!=null&&column.uuid==searchColumnId?true:false//夿æ¯å¦å¨æç´¢é¡µé¢ 11var routeQuery = Route.getQueryObject() 12var previewId = routeQuery["previewId"] 13var matchingConditionOptions = routeQuery["matchingConditionOptions"] 14matchingConditionOptions=Number(matchingConditionOptions?matchingConditionOptions:1) 15var sortOrderOptions = routeQuery["sortOrderOptions"]//0 é²è¡æéååºæç´¢ 2 é²è¡ç¸é度æç´¢ 16sortOrderOptions=Number(sortOrderOptions?sortOrderOptions:0) 17var storyType = routeQuery["storyType"] 18storyType=Number(storyType?storyType:0) 19var preColumnIdG = routeQuery["preColumnId"]//ä¸ä¸æ ç®çcolumnIdç®åç¨æ¥å仿¥å¤§å ¬ç¹å»æ¥åæç´¢ 20var searchKeyword = routeQuery["searchKeyword"] 21//searchKeyword = searchKeyword?decodeURI(searchKeyword):""//ä¸æè§£ç 22var keywordWay = routeQuery["keywordWay"] 23keywordWay = keywordWay?keywordWay:0 24var $searchMore = ""//æ¾ç¤ºæ´å¤æé®éæ©å¨ 25var $loadMore = ""//å è¼ä¸éæ©å¨ 26var $noData = ""//缺çå¾éæ©å¨ 27var page = 0//å页 28const size = 8 29var dateVal = routeQuery["dateVal"]//æ¥æ 30var includeSubColumn = routeQuery["includeSubColumn"] 31var $searchNumber = "" 32var $searchList = "" 33var $searchMenuBox = "" 34const noMoreText = "å·²ç¶æ²¡ææ´å¤"; 35//å è½½æ°æ® 36async function searchStory(){ 37 if(searchKeyword == null || searchKeyword == "undefined" || searchKeyword == ""){ 38 return null; 39 } 40 var channelId = "tkww,takungpao" 41 var staticUrl = CONFIG.BASE_STATIC_URL;// ç¨æ¥æ¾ç¤ºé»è®¤å¾çç 42 $searchMore.css("display","none") 43 $loadMore.css("display","block") 44 var res = await Search.storyList({ 45 channelId, 46 searchKeyword, 47 sortOrderOptions, 48 matchingConditionOptions, 49 storyType, 50 keywordWay, 51 page, 52 size 53 }) 54 if(Util.isNull(res))return $noData.css("display","block") 55 $searchNumber.html(`æ¾å°å ¨é¨<span class='result-sum-inner'>${res.data.totalElements}</span>æ¡çµæ`).show() 56 $searchMenuBox.css("background-color","rgba(0,0,0,0)") 57 $(".search-menu-unit:first-of-type,.result-sum").css("margin-left","0") 58 let resData = res.data.content 59 for(var i=0;i<resData.length;i++){ 60 var html = "" 61 var tubUrl = resData[i].thumbnails != undefined && resData[i].thumbnails.length > 0?resData[i].thumbnails[0].url + "?x-oss-process=image/resize,w_750":resData[i].properties.bookId != undefined? staticUrl+'column/searchResult/epaper/'+resData[i].properties.bookId+'.jpg':staticUrl + 'index-HKTKWW/story-img-default.png'; 62 html += '<div class="story-list-unit">' 63 html += ' <div class="story-list-unit-inner">' 64 html += ' <div class="story-list-unit-top">' 65 html += ' <div class="img-box-box">' 66 html += ' <a class="img-box" rel="noopener norefferrer" title="'+ resData[i].title +'" href="'+ resData[i].url +'">' 67 html += ' <img class="img-box-filter" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">' 68 html += ' <img class="img-box-img" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">' 69 html += ' </a>' 70 html += ' </div>' 71 html += ' </div>' 72 html += ' <div class="story-list-unit-content">' 73 html += ' <a class="story-list-unit-title twoLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].title +'">'+ resData[i].title +'</a>' 74 html += ' <a class="story-list-unit-text threeLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].summary +'">'+ resData[i].summary +'</a>' 75 html += ' <div class="story-list-unit-bottom">' 76 /*let tagStr = resData[i].tags?resData[i].tags.join(","):"" 77 if(tagStr!==""){ 78 html += ' <div class="common-column-list-unit-bottom-tag" onclick="tagsClick(this)">'+tagStr+'</div>' 79 }*/
80 html += ' <span class="story-list-unit-bottom-time">' 81 html +=' <span class="story-list-unit-bottom-time1">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[0]+'</span>'+(Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime}).length>1?(' <span class="story-list-unit-bottom-time2">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[1]+'</span>'):'') 82 html +=' </span>' 83 html += ' </div>' 84 html += ' </div>' 85 html += ' </div>' 86 html += '</div>' 87 let $html = $(html) 88 var oldText =""; 89 var newText=""; 90 //æ·»å æ é¢ 26å符é¿åº¦ï¼è±æ56åç¬¦ï¼ 91 newText = oldText = resData[i].highlightTitle; 92 if (oldText.replace(/[^\x00-\xff]/g, "00").length > 52) { 93 newText = oldText; 94 } 95 newText = showKey(newText,searchKeyword);//红è²é«äº® 96 $html.find(".story-list-unit-title").html(newText); 97 //æ·»å æè¦ 50å符é¿åº¦ï¼è±æ100åç¬¦ï¼ 98 // 没æé«äº®contentçæ¶åæ¾ç¤ºæè¦ 99 newText = oldText = "..." + resData[i].highlightContent +"..."; 100 if(resData[i].highlightContent===''){ 101 newText = oldText = "..." + resData[i].summary +"..."; 102 } 103 if (oldText.replace(/[^\x00-\xff]/g, "00").length > 110) { 104 // newText = oldText.substring(0,50)+"..."; 105 newText = oldText; 106 } 107 newText = showKey(newText,searchKeyword);//é«äº® 108 $html.find(".story-list-unit-text").html(newText) 109 $searchList.append($html); 110 } 111 //åå ¥å页 112 page++ 113 $searchMore.css("display","flex") 114 $loadMore.css("display","none") 115 if(page >= res.data.totalPages ){ 116 $loadMore.text(noMoreText); 117 $loadMore.css("display","block") 118 $searchMore.css("display","none") 119 } 120 if(resData.length){ 121 $searchList.css("display","flex") 122 } 123 if(resData.length==0&&page==1){ 124 $noData.css("display","block") 125 $searchMore.css("display","none") 126 $loadMore.css("display","none") 127 } 128} 129//红è²é«äº® 130function showKey(allStr,keyStr){ 131 if(keyStr == "" || keyStr == "undefined" || keyStr==null){ 132 return allStr; 133 } 134 var reg=new RegExp("("+keyStr+")","g"); 135 var newstr=allStr.replace(reg,"<font color=#C21010>$1</font>"); 136 return newstr; 137} 138//å è½½æ´å¤ 139window.searchStoryMore = function(){ 140 if($searchMore.text()===noMoreText)return 141 if(!dateVal){ 142 searchStory() 143 }else{ 144 searchStroyByDate() 145 } 146} 147 148//æç´¢æé®è§¦åçäºä»¶ 149window.searchStoryBut = function({ 150 inputStr="", 151 isBlank=true, 152 blankUseMatching=false, 153 isCi=true, 154 dateVal="", 155 includeSubColumn, 156 preColumnId 157}){ 158 var openUrl = previewId?`${window.location.origin}/template/preview/channels/tkww/columns/${searchColumnId}?previewId=${previewId.replace(/^([^/]+\/[^/]+)(\/.*)?$/, `$1/${searchColumnFilePath}`)}&fileName=${searchColumnFileName}`:`${CONFIG.BASE_URL}${searchColumnName}`//夿æ¬å°ç¯å¢è¿æ¯çº¿ä¸ç¯å¢ï¼ç¡®å®å°è·³è½¬çè·¯å¾ 159 // æ°CIåç¹ 160 var searchInput = inputStr?$(`${inputStr}`).val():searchKeyword 161 162 if(searchInput.indexOf("</script>")!==-1){ 163 return 164 } 165 166 if(isCi&&searchInput)mini_paq.push(["eventSearch", "search_keyword", searchInput,{}]) 167 //searchInput = encodeURI(searchInput) 168 openUrl += `${previewId?'&':'?'}searchKeyword=${searchInput}&keywordWay=${keywordWay}` 169 if(dateVal){ 170 openUrl += `&dateVal=${dateVal}&includeSubColumn=${includeSubColumn}&preColumnId=${isBlank?preColumnId:preColumnIdG}` 171 } 172 if(isBlank){ 173 if(blankUseMatching){ 174 openUrl += `&matchingConditionOptions=${matchingConditionOptions}` 175 openUrl += `&sortOrderOptions=${sortOrderOptions}` 176 } 177 if(window.top.location.href.indexOf("/canyou")===-1){ 178 window.open(openUrl,"_blank") 179 }else{ 180 window.location.href=openUrl 181 } 182 return 183 } 184 openUrl += `&matchingConditionOptions=${matchingConditionOptions}` 185 if(sortOrderOptions)openUrl += `&sortOrderOptions=${sortOrderOptions}` 186 if(storyType)openUrl += `&storyType=${storyType}` 187 if(page)openUrl += `&page=${page}` 188 window.location.href = openUrl 189} 190 191//å 容页ç¹å»æ ç¾è§¦åçäºä»¶ 192window.searchKeywords = function(e,incomingMatchingConditionOptions=2){ 193 searchKeyword = $(e).text(); 194 keywordWay = 1 195 matchingConditionOptions = incomingMatchingConditionOptions 196 searchStoryBut({isCi:false,blankUseMatching:true}) 197 // æ°CIåç¹ 198 mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}]) 199} 200 201//å 容页ç¹å»æ ç¾è§¦åçäºä»¶ 202window.searchKeywords1 = function(e,incomingMatchingConditionOptions=2){ 203 searchKeyword = e; 204 keywordWay = 1 205 matchingConditionOptions = incomingMatchingConditionOptions 206 searchStoryBut({isCi:false,blankUseMatching:true}) 207 // æ°CIåç¹ 208 mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}]) 209} 210 211//å 容页ç¹å»æ ç¾è§¦åçäºä»¶ 212window.searchTags = function(e,i){ 213 var aa = $(".key_word"); 214 searchKeyword = $(aa[i]).text(); 215 keywordWay = 1 216 searchStoryBut({isCi:false}) 217 // æ°CIåç¹ 218 mini_paq.push(["eventSearch", "search_tag", searchKeyword,{}]); 219} 220 221//毫ç§è½¬æ 2018-09-20 20:00:00 222function getDate(str) { 223 var oDate = new Date(str), 224 oYear = oDate.getFullYear(), 225 oMonth = oDate.getMonth()+1, 226 oDay = oDate.getDate(), 227 oHour = oDate.getHours(), 228 oMin = oDate.getMinutes(), 229 oSen = oDate.getSeconds(), 230 oTime = addZero(oMonth) +'-'+ addZero(oDay) +' '+ addZero(oHour) +':'+ addZero(oMin) +':'+addZero(oSen); 231 return oTime; 232} 233function dateFormat(fmt, str) { 234 var date = new Date(str.replace(/-/g, '/').replace('T', ' ').replace('.000+0000', '') + ' GMT'); 235 let ret; 236 const opt = { 237 "Y+": date.getFullYear().toString(), // å¹´ 238 "m+": (date.getMonth() + 1).toString(), // æ 239 "d+": date.getDate().toString(), // æ¥ 240 "H+": date.getHours().toString(), // æ¶ 241 "M+": date.getMinutes().toString(), // å 242 "S+": date.getSeconds().toString() // ç§ 243 // æå ¶ä»æ ¼å¼ååç¬¦éæ±å¯ä»¥ç»§ç»æ·»å ï¼å¿ 须转åæå符串 244 }; 245 for (let k in opt) { 246 ret = new RegExp("(" + k + ")").exec(fmt); 247 if (ret) { 248 //fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))); 249 fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (pad(opt[k],ret[1].length))); 250 }; 251 }; 252 return fmt; 253} 254//è¡¥é¶æä½ 255function addZero(num){ 256 if(parseInt(num) < 10){ 257 num = '0'+num; 258 } 259 return num; 260} 261 262//åå§åâå¹é æ¡ä»¶âæµ®å¨ 263function initCondition({unitClass,options}){ 264 //妿æä¼ è·¯ç±åæ° 265 var $unitClass = $(`.${unitClass}`) 266 if(options){ 267 for(let i = 0;i < $unitClass.length;i++){ 268 var $unitClassEq = $unitClass.eq(i) 269 if($unitClassEq.attr("value")==options){ 270 $unitClassEq.addClass(`${unitClass}-active`)//é䏿 ·å¼ 271 return 272 } 273 } 274 } 275 //å¦ææ²¡æä¼ è·¯ç±åæ° 276 $unitClass.eq(0).addClass(`${unitClass}-active`)//é䏿 ·å¼ 277} 278//设置æç´¢æ¡ä»¶ 279window.searchConfigChange = function({target,changeName}){ 280 var data = {isBlank:false,isCi:false,inputStr:"#search-body-input"} 281 switch(changeName){ 282 case "matchingConditionOptions":{ 283 matchingConditionOptions = Number($(target).attr("value")) 284 break; 285 } 286 case "storyType":{ 287 storyType = Number($(target).attr("value")) 288 break; 289 } 290 case "sortOrderOptions":{ 291 sortOrderOptions = Number($(target).attr("value")) 292 break; 293 } 294 } 295 if(dateVal){ 296 data.dateVal = dateVal 297 data.includeSubColumn = includeSubColumn 298 } 299 searchStoryBut(data) 300} 301//æ¥è¯¢æä¸ªæ ç®ä¸æå¤©ç稿件 302async function searchStroyByDate(){ 303 var channelId = "takungpao" 304 var staticUrl = CONFIG.BASE_STATIC_URL;// ç¨æ¥æ¾ç¤ºé»è®¤å¾çç 305 $searchMenuBox.css("background-color","rgba(0,0,0,0)") 306 $searchMore.css("display","none") 307 $loadMore.css("display","block") 308 var res = await Search.dateStoryList({channelId,columnId:preColumnIdG,dateVal,page,includeSubColumn,sortOrderOptions,size}) 309 if(Util.isNull(res))return $noData.css("display","block") 310 let resData = res.data 311 // åå ¥æ°æ® 312 for(var i=0;i<resData.length;i++){ 313 var html = "" 314 var tubUrl = resData[i].thumbnails != undefined && resData[i].thumbnails.length >
314 0?resData[i].thumbnails[0].url + "?x-oss-process=image/resize,w_750":resData[i].properties.bookId != undefined? staticUrl+'column/searchResult/epaper/'+resData[i].properties.bookId+'.jpg':staticUrl + 'index-HKTKWW/story-img-default.png'; 315 html += '<div class="story-list-unit">' 316 html += ' <div class="story-list-unit-inner">' 317 html += ' <div class="story-list-unit-top">' 318 html += ' <div class="img-box-box">' 319 html += ' <a class="img-box" rel="noopener norefferrer" title="'+ resData[i].title +'" href="'+ resData[i].url +'">' 320 html += ' <img class="img-box-filter" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">' 321 html += ' <img class="img-box-img" src="'+ tubUrl +'" title="'+ resData[i].title +'" alt="'+ resData[i].title +'">' 322 html += ' </a>' 323 html += ' </div>' 324 html += ' </div>' 325 html += ' <div class="story-list-unit-content">' 326 html += ' <a class="story-list-unit-title twoLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].title +'">'+ resData[i].title +'</a>' 327 html += ' <a class="story-list-unit-text threeLine" rel="noopener norefferrer" href="'+ resData[i].url +'" title="'+ resData[i].summary +'">'+ resData[i].summary +'</a>' 328 html += ' <div class="story-list-unit-bottom">' 329 /*let tagStr = resData[i].tags?resData[i].tags.join(","):"" 330 if(tagStr!==""){ 331 html += ' <div class="common-column-list-unit-bottom-tag" onclick="tagsClick(this)">'+tagStr+'</div>' 332 }*/ 333 html += ' <span class="story-list-unit-bottom-time">' 334 html +=' <span class="story-list-unit-bottom-time1">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[0]+'</span>'+(Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime}).length>1?(' <span class="story-list-unit-bottom-time2">'+Util.getEndTimeArr({fmt:'YYYY.mm.dd HH:MM',publishTime:resData[i].publishTime})[1]+'</span>'):'') 335 html +=' </span>' 336 html += ' </div>' 337 html += ' </div>' 338 html += ' </div>' 339 html += '</div>' 340 341 let $html = $(html) 342 var oldText =""; 343 var newText=""; 344 //æ·»å æ é¢ 26å符é¿åº¦ï¼è±æ56åç¬¦ï¼ 345 newText = oldText = resData[i].title; 346 if (oldText.replace(/[^\x00-\xff]/g, "00").length > 52) { 347 // newText = oldText.substring(0,26)+"..."; 348 newText = oldText; 349 } 350 $html.find(".story-list-unit-title").html(newText); 351 //æ·»å æè¦ 50å符é¿åº¦ï¼è±æ100åç¬¦ï¼ 352 newText = oldText = resData[i].summary; 353 if (oldText.replace(/[^\x00-\xff]/g, "00").length > 110) { 354 // newText = oldText.substring(0,50)+"..."; 355 newText = oldText; 356 } 357 $html.find(".story-list-unit-text").html(newText); 358 $searchList.append($html); 359 } 360 page++ 361 $searchMore.css("display","flex") 362 $loadMore.css("display","none") 363 if(resData.length == 0){ 364 $loadMore.text(noMoreText); 365 $searchMore.css("display","none") 366 $loadMore.css("display","block") 367 } 368 if(resData.length){ 369 $searchList.css("display","flex") 370 } 371 if(resData.length==0&&page==1){ 372 $noData.css("display","block") 373 $searchMore.css("display","none") 374 $loadMore.css("display","none") 375 } 376} 377//åå§åæç´¢ 378function initSearchInput(){ 379 $('#search-body-input').bind('keydown','#search-body-input', function (event) { 380 var event = window.event || arguments.callee.caller.arguments[0]; 381 //console.log(".search-top-left",event.keyCode,$(this).attr("id")) 382 var inputId = $(this).attr("id") 383 if (event.keyCode == 13 && inputId == "search-body-input"){ 384 searchStoryBut({inputStr:"#search-body-input",isBlank:false}); 385 // $(".header-search .searchbutton").click(); 386 return; 387 } 388 }); 389 $('#search-body-input').focus(function(){ 390 $('.search-input-box').css("border","solid 1px #e20413") 391 }) 392 $('#search-body-input').blur(function(){ 393 $('.search-input-box').css("border","0") 394 }) 395} 396async function initSearch(){ 397 $('#hot-words-input-2').css('display','block') 398 //$("input[name='keywordWay']").val(0); 399 //没ææç´¢è¯æ¾ç¤ºç¼ºçé¡µé¢ 400 $searchMore = $(".add-more-v5").eq(0) 401 $loadMore = $(".add-more-loading-v5").eq(0) 402 $noData = $(".search-no-data").eq(0) 403 $searchNumber = $(".result-sum").eq(0) 404 $searchList = $("#search-list").eq(0) 405 $searchMenuBox = $(".search-menu-box").eq(0) 406 initSearchInput() 407 //æ²¡ææ¥æåæ°æ¶
408 if(!dateVal){ 409 if(!searchKeyword){ 410 $noData.css("display","block") 411 return 412 } 413 if(searchKeyword)$("input#search-body-input").val(searchKeyword) 414 await searchStory() 415 }else{ 416 //ææ¥æåæ°æ¶ 417 //å»é¤ä¸è½ä½¿ç¨ççéé¡¹ç® 418 /*$(".search-order-tool").eq(0).css("display","none") 419 $("#selectedMatchingCondition").parents(".search-order-list-unit").css("display","none") 420 $(".date-choose").eq(0).css("display","block") 421 $(".search-order").eq(0).css("margin-bottom","20px")*/ 422 $(".search-menu").eq(0).css("display","none") 423 $searchNumber.css("display","none") 424 $(".search-input-box").eq(0).css("display","none") 425 //å è½½æ°æ® 426 await searchStroyByDate() 427 } 428} 429//ç«ç¹ç¨¿ä»¶æ ç¾ç¹å»äºä»¶ 430window.tagsClick = function(e,tag=""){ 431 searchKeyword = $(e).text(); 432 //å¦æè¯»åä¸å°å ç´ æ ç¾ï¼å¯åå ¥æåçæ ç¾ï¼çæåï¼è¯»åå ç´ æ ç¾ï¼ä¸å¯åå ¥æåçæ ç¾,å¦imgï¼çtitle 433 if(searchKeyword===''){ 434 searchKeyword = $(e).attr("title") 435 } 436 if(tag!==""){ 437 searchKeyword = tag 438 } 439 // æ°CIåç¹ 440 mini_paq.push(["eventSearch", "search_tag",searchKeyword,{}]) 441 keywordWay = "tag" 442 /*inputId="", 443 isBlank=true, 444 blankUseMatching=false, 445 isCi=true, 446 dateVal="", 447 includeSubColumn, 448 preColumnId*/ 449 //let openUrl = previewId?`${window.location.origin}/template/preview/channels/tkww/columns/658e459fe4b05c885816f716?previewId=${previewId}&fileName=column-tag`:`${CONFIG.BASE_URL}tagSearch`//夿æ¬å°ç¯å¢è¿æ¯çº¿ä¸ç¯å¢ï¼ç¡®å®å°è·³è½¬çè·¯å¾ 450 //searchInput = encodeURI(searchInput) 451 //openUrl += `${previewId?'&':'?'}tag=${searchKeyword}` 452 let openUrl = `${CONFIG.BASE_URL}tagSearch?tag=${searchKeyword}` 453 if(window.top.location.href.indexOf("/canyou")===-1){ 454 window.open(openUrl,"_blank") 455 }else{ 456 window.location.href=openUrl 457 } 458} 459//è´¨æ´é¿åæ³ by lifesinger 460function pad(num, n) { 461 var len = num.toString().length; 462 while(len < n) { 463 num = "0" + num; 464 len++; 465 } 466 return num; 467} 468//åå§åæç´¢é¡µé¢ 469function initSearchResult(){ 470 if(!isSelf)return 471 /*åå§åæå ¨æ*/ 472 initCondition({ 473 unitClass:"radio-menu-unit", 474 options:matchingConditionOptions 475 }) 476 /*åå§åç±»å*/ 477 initCondition({ 478 unitClass:"search-menu-unit", 479 options:storyType 480 }) 481 initCondition({ 482 unitClass:"radio-menu-unit1", 483 options:sortOrderOptions 484 }) 485 /*searchStoryInitSortOrder() 486 typeSearchFn() 487 scrooFn()*/ 488 initSearch() 489} 490$(function (){ 491 initSearchResult() 492});
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.