1var myTimerPage = "", 2 myTimersecField = "", 3 tip_active = !1, 4 ftip_active = !1, 5 tip_autoclose = !0, 6 ftip_autoclose = !0, 7 winX = 0, 8 winY = 0, 9 oldWinX = 0, 10 oldWinY = 0, 11 cRangeX = 0, 12 cRangeY = 0, 13 docX = 0, 14 docY = 0; 15 16function winResize() { oldWinX = winX; 17 oldWinY = winY; 18 winX = $(window).width(); 19 winY = $(window).height(); 20 docX = $(document).width(); 21 docY = $(document).height(); 22 cRangeX = Math.abs(winX - oldWinX); 23 cRangeY = Math.abs(winY - oldWinY); } 24 25function fix_banner_center() { 26 var a = Math.round((winX - 1330) / 2); 27 0 <= a ? ($("div.fix_banner_left").css("left", a + "px"), $("div.fix_banner_right").css("right", a + "px"), a = Math.round((winY - $("div.fix_banner_left").height()) / 2), 0 >= a && (a = 0), $("div.fix_banner_left").css("top", a + "px"), a = Math.round((winY - $("div.fix_banner_right").height()) / 2), 0 >= a && (a = 0), $("div.fix_banner_right").css("top", a + "px"), $("div.fix_banner_left").show(), $("div.fix_banner_right").show()) : ($("div.fix_banner_left").hide(), $("div.fix_banner_right").hide()) } 28 29function timeoutsesscancel() { clearInterval(myTimersecField); 30 $.ajax({ url: nv_base_siteurl + "index.php?second=statimg", cache: !1 }).done(function() { $("#timeoutsess").hide(); 31 myTimerPage = setTimeout(function() { timeoutsessrun() }, nv_check_pass_mstime) }) } 32 33function timeoutsessrun() { clearInterval(myTimerPage); 34 document.getElementById("secField").innerHTML = 60; 35 jQuery("#timeoutsess").show(); 36 var a = (new Date).getTime(); 37 myTimersecField = setInterval(function() { 38 var b = (new Date).getTime(), 39 b = 60 - Math.round((b - a) / 1E3); 40 0 <= b ? document.getElementById("secField").innerHTML = b : -3 > b && (clearInterval(myTimersecField), $(window).unbind(), window.location.reload()) }, 1E3) } 41 42function locationReplace(url) { 43 if (history.pushState) { history.pushState(null, null, url); } 44} 45 46var NVIsMobileMenu = false,gEInterval,siteMenu = $("#menu-site-default"); 47function checkWidthMenu() { 48 NVIsMobileMenu = (theme_responsive && "absolute" == $("#menusite").css("position")); 49 NVIsMobileMenu ? ( 50 $("li.dropdown ul", siteMenu).removeClass("dropdown-menu").addClass("dropdown-submenu"), 51 $("li.dropdown a", siteMenu).addClass("dropdown-mobile"), 52 $("ul li a.dropdown-toggle", siteMenu).addClass("dropdown-mobile"), 53 $("li.dropdown ul li a", siteMenu).removeClass("dropdown-mobile") 54 ) : ( 55 $("li.dropdown ul", siteMenu).addClass("dropdown-menu").removeClass("dropdown-submenu"), 56 $("li.dropdown a", siteMenu).removeClass("dropdown-mobile"), 57 $("li.dropdown ul li a", siteMenu).removeClass("dropdown-mobile"), 58 $("ul li a.dropdown-toggle", siteMenu).removeClass("dropdown-mobile") 59 ) 60} 61function checkAll(a) { 62 $(".checkAll", a).is(":checked") ? $(".checkSingle", a).not(":disabled").each(function() { 63 $(this).prop("checked", !0) 64 }) : $(".checkSingle", a).not(":disabled").each(function() { 65 $(this).prop("checked", !1) 66 }); 67 return !1 68} 69 70function checkSingle(a) { 71 var b = 0, 72 c = 0; 73 $(".checkSingle", a).each(function() { $(this).is(":checked") ? b++ : c++ }); 74 0 != b && 0 == c ? $(".checkAll", a).prop("checked", !0) : $(".checkAll", a).prop("checked", !1); 75 return !1 } 76 77function tipHide() { $("[data-toggle=tip]").attr("data-click", "y").removeClass("active"); 78 $("#tip").hide(); 79 tip_active = !1; 80 tipAutoClose(!0) } 81 82function ftipHide() { $("[data-toggle=ftip]").attr("data-click", "y").removeClass("active"); 83 $("#ftip").hide(); 84 ftip_active = !1; 85 ftipAutoClose(!0) } 86 87function tipAutoClose(a) {!0 != a && (a = !1); 88 tip_autoclose = a } 89 90function ftipAutoClose(a) {!0 != a && (a = !1); 91 ftip_autoclose = a } 92 93function tipShow(a, b, callback) { 94 tip_active && tipHide(); 95 ftip_active && ftipHide(); 96 $("[data-toggle=tip]").removeClass("active"); 97 $(a).attr("data-click", "n").addClass("active"); 98 if (typeof callback != "undefined") { 99 $("#tip").attr("data-content", b).show("fast", function() {
100 if (callback == "recaptchareset") { 101 if ($('[data-toggle=recaptcha]', this).length) { 102 reCaptcha2Recreate(this); 103 "undefined" != typeof grecaptcha ? reCaptcha2OnLoad() : reCaptcha2ApiLoad() 104 } else if ($("[data-recaptcha3]", this).length) { 105 "undefined" != typeof grecaptcha ? reCaptcha3OnLoad() : reCaptcha3ApiLoad() 106 } 107 } else if (typeof window[callback] === "function") { 108 window[callback]() 109 } 110 }); 111 } else { 112 $("#tip").attr("data-content", b).show("fast"); 113 } 114 tip_active = 1; 115} 116 117function ftipShow(a, b, callback) { 118 if ($(a).is(".qrcode") && "no" == $(a).attr("data-load")) { 119 return qrcodeLoad(a), !1; 120 } 121 tip_active && tipHide(); 122 ftip_active && ftipHide(); 123 $("[data-toggle=ftip]").removeClass("active"); 124 $(a).attr("data-click", "n").addClass("active"); 125 if (typeof callback != "undefined") { 126 $("#ftip").attr("data-content", b).show("fast", function() { 127 if (callback == "recaptchareset") { 128 if ($('[data-toggle=recaptcha]', this).length) { 129 reCaptcha2Recreate(this); 130 "undefined" != typeof grecaptcha ? reCaptcha2OnLoad() : reCaptcha2ApiLoad() 131 } else if ($("[data-recaptcha3]", this).length) { 132 "undefined" != typeof grecaptcha ? reCaptcha3OnLoad() : reCaptcha3ApiLoad() 133 } 134 } else if (typeof window[callback] === "function") { 135 window[callback]() 136 } 137 }); 138 } else { 139 $("#ftip").attr("data-content", b).show("fast"); 140 } 141 ftip_active = 1; 142} 143 144function openID_load(a) { 145 tip_active && tipHide(); 146 ftip_active && ftipHide(); 147 nv_open_browse($(a).attr("href"), "NVOPID", 550, 500, "resizable=no,scrollbars=1,toolbar=no,location=no,titlebar=no,menubar=0,location=no,status=no"); 148 return !1 149} 150 151function openID_result() { 152 var resElement = $("#openidResult"); 153 resElement.fadeIn(); 154 setTimeout(function() { 155 if (resElement.data('redirect') != '') { 156 window.location.href = resElement.data('redirect'); 157 } else if (resElement.data('result') == 'success') { 158 location.reload(); 159 } else { 160 resElement.hide(0).html('').data('result', '').data('redirect', ''); 161 } 162 }, 5000); 163} 164 165function qrcodeLoad(a) { 166 var b = new Image, 167 c = $(a).data("img"); 168 $(b).load(function() { $(c).attr("src", b.src); 169 $(a).attr("data-load", "yes").click() }); 170 b.src = nv_base_siteurl + "index.php?second=qr&u=" + encodeURIComponent($(a).data("url")) }; 171 172function switchTab(a) { 173 if ($(a).is(".current")) return !1; 174 var b = $(a).data("switch").split(/\s*,\s*/), 175 c = $(a).data("obj"); 176 $(c + " [data-switch]").removeClass("current"); 177 $(a).addClass("current"); 178 $(c + " " + b[0]).removeClass("hidden"); 179 for (i = 1; i < b.length; i++) $(c + " " + b[i]).addClass("hidden") }; 180 181function change_captcha(a) { 182 if ($('[data-toggle=recaptcha]').length) { 183 "undefined" != typeof grecaptcha ? reCaptcha2OnLoad() : reCaptcha2ApiLoad() 184 } else if ($("[data-recaptcha3]").length) { 185 "undefined" != typeof grecaptcha ? reCaptcha3OnLoad() : reCaptcha3ApiLoad() 186 } 187 188 if ($("img.captchaImg").length) { 189 $("img.captchaImg").attr("src", nv_base_siteurl + "index.php?scaptcha=captcha&nocache=" + nv_randomPassword(10)); 190 "undefined" != typeof a && "" != a && $(a).val(""); 191 } 192 return !1 193} 194 195function loginForm(redirect) { 196 if (nv_is_user == 1) { 197 return !1; 198 } 199 if (redirect != '') { 200 redirect = '&nv_redirect=' + redirect; 201 } 202 $.ajax({ 203 type: 'POST', 204 url: nv_base_siteurl + 'index.php?' + nv_lang_variable + '=' + nv_lang_data + '&' + nv_name_variable + '=users&' + nv_fc_variable + '=login' + redirect, 205 cache: !1, 206 data: '&nv_ajax=1', 207 dataType: "html" 208 }).done(function(a) { 209 modalShow('', a, 'recaptchareset') 210 }); 211 return !1 212} 213 214function modalShow(a, b, callback) { 215 "" != a && 'undefined' != typeof a && $("#sitemodal .modal-content").prepend('<div class="modal-header"><h2 class="modal-title">' + a + '</h2></div>');
216 $("#sitemodal").find(".modal-title").html(a); 217 $("#sitemodal").find(".modal-body").html(b); 218 var scrollTop = false; 219 if (typeof callback != "undefined") { 220 if (callback == "recaptchareset") { 221 scrollTop = $(window).scrollTop(); 222 $('#sitemodal').on('show.bs.modal', function() { 223 if ($('[data-toggle=recaptcha]', this).length) { 224 reCaptcha2Recreate(this); 225 "undefined" != typeof grecaptcha ? reCaptcha2OnLoad() : reCaptcha2ApiLoad() 226 } else if ($("[data-recaptcha3]", this).length) { 227 "undefined" != typeof grecaptcha ? reCaptcha3OnLoad() : reCaptcha3ApiLoad() 228 } 229 }); 230 } 231 } 232 if (scrollTop) { 233 $("html,body").animate({ 234 scrollTop: 0 235 }, 200, function() { 236 $("#sitemodal").modal({ 237 backdrop: "static" 238 }); 239 }); 240 $('#sitemodal').on('hide.bs.modal', function() { 241 $("html,body").animate({ 242 scrollTop: scrollTop 243 }, 200); 244 }); 245 } else { 246 $("#sitemodal").modal({ 247 backdrop: "static" 248 }); 249 } 250 $('#sitemodal').on('hidden.bs.modal', function() { 251 $("#sitemodal .modal-content").find(".modal-header").remove(); 252 }); 253} 254 255function modalShowByObj(a, callback) { 256 var b = $(a).attr("title"), 257 c = $(a).html(); 258 modalShow(b, c) } 259 260function initializeMap() { 261 var ele = 'company-map'; 262 var map, marker, ca, cf, a, f, z; 263 ca = parseFloat($('#' + ele).data('clat')); 264 cf = parseFloat($('#' + ele).data('clng')); 265 a = parseFloat($('#' + ele).data('lat')); 266 f = parseFloat($('#' + ele).data('lng')); 267 z = parseInt($('#' + ele).data('zoom')); 268 map = new google.maps.Map(document.getElementById(ele), { zoom: z, center: { lat: ca, lng: cf } }); 269 marker = new google.maps.Marker({ map: map, position: new google.maps.LatLng(a, f), draggable: false, animation: google.maps.Animation.DROP }); } 270$(function() { 271 winResize(); 272 fix_banner_center(); 273 $('a[href="#"], a[href=""]').attr("href", "javascript:void(0);"); 274 $("#totop,#bttop,.bttop").click(function() { $("html,body").animate({ scrollTop: 0 }, 800); 275 return !1 }); 276 $(".headerSearch button").on("click", function() { 277 if ("n" == $(this).attr("data-click")) return !1; 278 $(this).attr("data-click", "n"); 279 var a = $(".headerSearch input"), 280 c = a.attr("maxlength"), 281 b = strip_tags(a.val()), 282 d = $(this).attr("data-minlength"); 283 a.parent().removeClass("has-error"); "" == b || b.length < d || b.length > c ? (a.parent().addClass("has-error"), a.val(b).focus(), $(this).attr("data-click", "y")) : window.location.href = $(this).attr("data-url") + rawurlencode(b); 284 return !1 }); 285 $(".headerSearch input").on("keypress", function(a) { 13 != a.which || a.shiftKey || (a.preventDefault(), $(".headerSearch button").trigger("click")) }); 286 nv_is_user && (myTimerPage = setTimeout(function() { timeoutsessrun() }, nv_check_pass_mstime)); 287 $("form.confirm-reload").change(function() { $(window).bind("beforeunload", function() { 288 return nv_msgbeforeunload }) }); 289 $(".form-tooltip").tooltip({ selector: "[data-toggle=tooltip]", container: "body" }); 290 $("[data-rel='tooltip'][data-content!='']").removeAttr("title").tooltip({ container: "body", html: !0, title: function() { 291 return ("" == $(this).data("img") ? "" : '<img class="img-thumbnail pull-left" src="' + $(this).data("img") + '" width="90" />') + $(this).data("content") } }); 292 $(".nv_change_site_lang").change(function() { document.location = $(this).val() }); 293 $("#menu-site-default a").hover(function() { $(this).attr("rel", $(this).attr("title")); 294 $(this).removeAttr("title") }, function() { $(this).attr("title", $(this).attr("rel")); 295 $(this).removeAttr("rel") }); 296 $("[data-toggle=collapse]").click(function(a) { tipHide(); 297 ftipHide(); 298 $(".header-nav").is(".hidden-ss-block") ? setTimeout(function() { $(".header-nav").removeClass("hidden-ss-block") }, 500) : $(".header-nav").addClass("hidden-ss-block") }); 299 $(document).on("keydown", function(a) { 27 === a.keyCode && (tip_active && tip_autoclose && tipHide(), ftip_active && ftip_autoclose && ftipHide()) }); 300 $(document).on("click", function() { tip_active && tip_autoclose && tipHide(); 301 ftip_active && ftip_autoclose && ftipHide() }); 302 $("#tip, #ftip").on("click", function(a) { a.stopPropagation() }); 303 $("[data-toggle=tip], [data-toggle=ftip]").click(function() { 304 var a = $(this).attr("data-target"), 305 d = $(a).html(), 306 b = $(this).attr("data-toggle"), 307 c = "tip" == b ? $("#tip").attr("data-content") : $("#ftip").attr("data-content"); 308 var callback = $(this).data("callback"); 309 a != c ? ("" != c && $('[data-target="' + c + '"]').attr("data-click", "y"), "tip" == b ? ($("#t
309ip .bg").html(d), tipShow(this, a, callback)) : ($("#ftip .bg").html(d), ftipShow(this, a, callback))) : "n" == $(this).attr("data-click") ? "tip" == b ? tipHide() : ftipHide() : "tip" == b ? tipShow(this, a, callback) : ftipShow(this, a, callback); 310 return !1 311 }); 312 if ($('#company-address').length) { $('#company-map-modal').on('shown.bs.modal', function() { 313 if (!$('#googleMapAPI').length) { 314 var script = document.createElement('script'); 315 script.type = 'text/javascript'; 316 script.id = 'googleMapAPI'; 317 script.src = 'https://maps.googleapis.com/maps/api/js?' + ($(this).data('apikey') != '' ? 'key=' + $(this).data('apikey') + '&' : '') + 'callback=initializeMap'; 318 document.body.appendChild(script); } else { initializeMap(); } }) }; 319 $("textarea").on("input propertychange", function() { 320 var a = $(this).prop("maxLength"); 321 if (!a || "number" != typeof a) { 322 var a = $(this).attr("maxlength"), 323 b = $(this).val(); 324 b.length > a && $(this).val(b.substr(0, a)) } }); 325 $("[data-dismiss=alert]").on("click", function(a) { $(this).is(".close") && $(this).parent().remove() }); 326 $("#openidBt").on("click", function() { openID_result(); 327 return !1 }); 328 $("[data-location]").on("click", function() { locationReplace($(this).data("location")) }) 329}); 330$(document).on({ 'show.bs.modal': function() { 331 var zIndex = 1040 + (10 * $('.modal:visible').length); 332 $(this).css('z-index', zIndex); 333 setTimeout(function() { $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); }, 0); }, 'hidden.bs.modal': function() { 334 if ($('.modal:visible').length > 0) { setTimeout(function() { $(document.body).addClass('modal-open'); }, 0); } } }, '.modal'); 335$(window).on("resize", function() { winResize(); 336 fix_banner_center(); 337 if (150 < cRangeX || 150 < cRangeY) tipHide(), ftipHide() }); 338$(window).on('load', function() { 339 (0 < $(".fb-share-button").length || 0 < $(".fb-like").length) && (1 > $("#fb-root").length && $("body").append('<div id="fb-root"></div>'), function(a, b, c) { 340 var d = a.getElementsByTagName(b)[0]; 341 var fb_app_id = ($('[property="fb:app_id"]').length > 0) ? '&appId=' + $('[property="fb:app_id"]').attr("content") : ''; 342 var fb_locale = ($('[property="og:locale"]').length > 0) ? $('[property="og:locale"]').attr("content") : ((nv_lang_data == "vi") ? 'vi_VN' : 'en_US'); 343 a.getElementById(c) || (a = a.createElement(b), a.id = c, a.src = "//connect.facebook.net/" + fb_locale + "/all.js#xfbml=1" + fb_app_id, d.parentNode.insertBefore(a, d)); }(document, "script", "facebook-jssdk")); 344 0 < $(".g-plusone").length && (window.___gcfg = { lang: nv_lang_data }, function() { 345 var a = document.createElement("script"); 346 a.type = "text/javascript"; 347 a.async = !0; 348 a.src = "//apis.google.com/js/plusone.js"; 349 var b = document.getElementsByTagName("script")[0]; 350 b.parentNode.insertBefore(a, b); }()); 351 0 < $(".twitter-share-button").length && function() { 352 var a = document.createElement("script"); 353 a.type = "text/javascript"; 354 a.src = "//platform.twitter.com/widgets.js"; 355 var b = document.getElementsByTagName("script")[0]; 356 b.parentNode.insertBefore(a, b); }(); }); 357 358 359// Hide Cookie Notice Popup 360function cookie_notice_hide() { 361 nv_setCookie(nv_cookie_prefix + '_cn', '1', 365); 362 $(".cookie-notice").hide() 363} 364 365function isRecaptchaCheck() { 366 if (nv_recaptcha_sitekey == '') return 0; 367 return (nv_recaptcha_ver == 2 || nv_recaptcha_ver == 3) ? nv_recaptcha_ver : 0 368} 369 370function reCaptcha2Recreate(obj) { 371 $('[data-toggle=recaptcha]', $(obj)).each(function() { 372 var callFunc = $(this).data('callback'), 373 pnum = $(this).data('pnum'), 374 btnselector = $(this).data('btnselector'), 375 size = ($(this).data('size') && $(this).data('size') == 'compact') ? 'compact' : ''; 376 var id = "recaptcha" + (new Date().getTime()) + nv_randomPassword(8); 377 if (callFunc) { 378 $(this).replaceWith('<div id="' + id + '" data-toggle="recaptcha" data-callback="' + callFunc + '" data-size="' + size + '"></div>'); 379 } else { 380 $(this).replaceWith('<div id="' + id + '" data-toggle="recaptcha" data-pnum="' + pnum + '" data-btnselector="' + btnselector + '" data-size="' + size + '"></div>') 381 } 382 }) 383} 384 385var reCaptcha2OnLoad = function() { 386 $('[data-toggle=recaptcha]').each(function() { 387 var id = $(this).attr('id'), 388 callFunc = $(this).data('callback'), 389 size = ($(this).data('size') && $(this).data('size') == 'compact') ? 'compact' : ''; 390 391 if (typeof window[callFunc] === 'function') { 392 if (typeof reCapIDs[id] === "undefined") { 393 reCapIDs[id] = grecaptcha.render(id, { 394 'sitekey': nv_recaptcha_sitekey, 395 'type': nv_recaptcha_type, 396 'size': size, 397 'callback': callFunc 398 }) 399 } else { 400 grecaptcha.reset(reCapIDs[id]) 401 } 402 } else { 403 var pnum = parseInt($(this).data('pnum')), 404 btnselector = $(this).data('btnselector'), 405 btn = $('#' + id), 406 k = 1; 407 408 for (k; k <= pnum; k++) { 409 btn = btn.parent(); 410 } 411 btn = $(btnselector, btn); 412 if (btn.length) { 413 btn.prop('disabled', true); 414 } 415 416 if (typeof reCapIDs[id] === "undefined") { 417 reCapIDs[id] = grecaptcha.render(id, { 418 'sitekey': nv_recaptcha_sitekey, 419 'type': nv_recaptcha_type, 420 'size': size, 421 'callback': function() { 422 reCaptcha2Callback(id, false) 423 }, 424 'expired-callback': function() { 425 reCaptcha2Callback(id, true) 426 }, 427 'error-callback': function() { 428 reCaptcha2Callback(id, true) 429 } 430 }) 431 } else { 432 grecaptcha.reset(reCapIDs[id]) 433 } 434 } 435 }) 436} 437 438var reCaptcha2Callback = function(id, val) { 439 var btn = $('#' + id), 440 pnum = parseInt(btn.data('pnum')), 441 btnselector = btn.data('btnselector'), 442 k = 1; 443 for (k; k <= pnum; k++) { 444 btn = btn.parent(); 445 } 446 btn = $(btnselector, btn); 447 if (btn.length) { 448 btn.prop('disabled', val); 449 } 450} 451 452// reCaptcha v2 load 453var reCaptcha2ApiLoad = function() { 454 if (isRecaptchaCheck() == 2) { 455 var a = document.createElement("script"); 456 a.type = "text/javascript"; 457 a.src = "//www.google.com/recaptcha/api.js?hl=" + nv_lang_interface + "&onload=reCaptcha2OnLoad&render=explicit"; 458 document.getElementsByTagName("head")[0].appendChild(a) 459 } 460} 461 462// reCaptcha v3: reCaptcha3OnLoad 463var reCaptcha3OnLoad = function() { 464 grecaptcha.ready(function() { 465 $("[data-recaptcha3]").length && (clearInterval(gEInterval), grecaptcha.execute(nv_recaptcha_sitekey, { 466 action: "formSubmit" 467 }).then(function(a) { 468 $("[data-recaptcha3]").each(function() { 469 if ($("[name=g-recaptcha-response]", this).length) $("[name=g-recaptcha-response]", this).val(a); 470 else { 471 var b = $('<input type="hidden" name="g-recaptcha-response" value="' + a + '"/>'); 472 $(this).append(b) 473 } 474 }) 475 }), gEInterval = setTimeout(function() { 476 reCaptcha3OnLoad() 477 }, 12E4)) 478 }) 479} 480 481// reCaptcha v3 API load 482var reCaptcha3ApiLoad = function() { 483 if (isRecaptchaCheck() == 3) { 484 var a = document.createElement("script"); 485 a.type = "text/javascript"; 486 a.src = "//www.google.com/recaptcha/api.js?render=" + nv_recaptcha_sitekey + "&onload=reCaptcha3OnLoad"; 487 document.getElementsByTagName("head")[0].appendChild(a) 488 } 489} 490 491 492 493// Run Captcha 494$(window).on('load', function() { 495 0 < $(".zalo-share-button, .zalo-follow-only-button, .zalo-follow-button, .zalo-chat-widget").length && function() { 496 var a = document.createElement("script"); 497 a.type = "text/javascript"; 498 a.src = "//sp.zalo.me/plugins/sdk.js"; 499 var b = document.getElementsByTagName("script")[0]; 500 b.parentNode.insertBefore(a, b); 501 }(); 502 if ($('[data-toggle=recaptcha]').length) { 503 reCaptcha2ApiLoad() 504 } else if ($("[data-recaptcha3]").length) { 505 reCaptcha3ApiLoad() 506 } 507}); 508 509// Add rel="noopener noreferrer nofollow" to all external links 510$('a[href^="http"]').not('a[href*="' + location.hostname + '"]').not('[rel*=dofollow
510]').attr({ 511 //target: "_blank", 512 rel: "noopener noreferrer nofollow" 513});
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.