1/** 2 * Front-end recovery helpers (4.1.7+) 3 * - Strip OSS !o style that 404s (NoSuchKey) 4 * - Rewrite .avifs to .webp (CDN octet-stream / ORB) â do not fetch() 5 * - Mobile tab tap: overflow-x:auto often eats the synthesized click 6 * - Contain unstyled OCW so it cannot cover tabs 7 * - Silence deprecated PerformanceObserver entryTypes 8 * - Map unload â pagehide so bfcache can work 9 */ 10(function () { 11 try { 12 if (window.onunload) { 13 window.onunload = null; 14 } 15 var _add = window.addEventListener; 16 window.addEventListener = function (type, fn, opts) { 17 if (type === 'unload') { 18 type = 'pagehide'; 19 } 20 return _add.call(this, type, fn, opts); 21 }; 22 } catch (e) {} 23 24 if (window.PerformanceObserver && PerformanceObserver.prototype.observe) { 25 var _observe = PerformanceObserver.prototype.observe; 26 PerformanceObserver.prototype.observe = function (opts) { 27 try { 28 return _observe.call(this, opts); 29 } catch (err) { 30 if (opts && opts.entryTypes && opts.entryTypes.length) { 31 var keep = []; 32 for (var i = 0; i < opts.entryTypes.length; i++) { 33 try { 34 var probe = new PerformanceObserver(function () {}); 35 probe.observe({ type: opts.entryTypes[i], buffered: true }); 36 probe.disconnect(); 37 keep.push(opts.entryTypes[i]); 38 } catch (x) {} 39 } 40 if (keep.length) { 41 var next = {}; 42 for (var k in opts) { 43 if (Object.prototype.hasOwnProperty.call(opts, k)) next[k] = opts[k]; 44 } 45 next.entryTypes = keep; 46 try { 47 return _observe.call(this, next); 48 } catch (x2) {} 49 } 50 } 51 } 52 }; 53 } 54 55 function stripBangO(url) { 56 if (!url || typeof url !== 'string') return url; 57 return url.replace(/(\.(?:jpe?g|png))!o(?=([\s"'?#,]|$))/gi, '$1'); 58 } 59 60 function rewriteAvifs(url) { 61 if (!url || typeof url !== 'string') return url; 62 if (/wb_bn_learn\.(avifs|webp)\b/i.test(url)) { 63 return '/wp-content/themes/wbolt/images/wb_bn_learn.jpg'; 64 } 65 return url; 66 } 67 68 function rewriteImg(img) { 69 if (!img || img.dataset.wbImgFix === '1') return; 70 var src = img.getAttribute('src') || ''; 71 var srcset = img.getAttribute('srcset') || ''; 72 var next = rewriteAvifs(stripBangO(src)); 73 var nextSet = rewriteAvifs(stripBangO(srcset)); 74 if (next !== src) img.setAttribute('src', next); 75 if (nextSet !== srcset) img.setAttribute('srcset', nextSet); 76 img.dataset.wbImgFix = '1'; 77 } 78 79 function scan(root) { 80 var scope = root && root.querySelectorAll ? root : document; 81 var imgs = scope.querySelectorAll ? scope.querySelectorAll('img, source') : []; 82 for (var i = 0; i < imgs.length; i++) { 83 var node = imgs[i]; 84 if (node.tagName === 'SOURCE') { 85 var ss = node.getAttribute('srcset') || ''; 86 var ns = rewriteAvifs(stripBangO(ss)); 87 if (ns !== ss) node.setAttribute('srcset', ns); 88 if (/\.avifs/i.test(ss) && /\.webp/i.test(ns)) { 89 node.setAttribute('type', 'image/webp'); 90 } 91 } else { 92 rewriteImg(node); 93 } 94 } 95 if (scope !== document && scope.tagName === 'IMG') rewriteImg(scope); 96 } 97 98 document.addEventListener( 99 'error', 100 function (e) { 101 var t = e.target; 102 if (!t || (t.tagName !== 'IMG' && t.tagName !== 'SOURCE')) return; 103 var src = t.currentSrc || t.getAttribute('src') || t.getAttribute('srcset') || ''; 104 if (/!o(\?|$)/.test(src) && t.dataset.wbImgRetry !== '1') { 105 t.dataset.wbImgRetry = '1'; 106 if (t.getAttribute('src')) t.src = stripBangO(src); 107 if (t.getAttribute('srcset')) t.setAttribute('srcset', stripBangO(t.getAttribute('srcset'))); 108 return; 109 } 110 if (/\.webp(\?|$)/i.test(src) && t.dataset.wbWebpRetry !== '1') { 111 t.dataset.wbWebpRetry = '1'; 112 var png = src.replace(/\.webp(\b)/i, '.png'); 113 if (t.getAttribute('src')) t.src = png; 114 if (t.getAttribute('srcset')) t.setAttribute('srcset', (t.getAttribute('srcset') || '').replace(/\.webp(\b)/gi, '.png')); 115 } 116 }, 117 true 118 ); 119 120 function bootImgs() { 121 scan(document); 122 if (typeof MutationObserver !== 'undefined') { 123 new MutationObserver(function (muts) {
124 muts.forEach(function (m) { 125 m.addedNodes && 126 m.addedNodes.forEach(function (n) { 127 if (n.nodeType === 1) scan(n); 128 }); 129 }); 130 }).observe(document.documentElement, { childList: true, subtree: true }); 131 } 132 } 133 134 var touch = { x: 0, y: 0, el: null }; 135 document.addEventListener( 136 'touchstart', 137 function (e) { 138 var t = e.changedTouches && e.changedTouches[0]; 139 if (!t) return; 140 var el = e.target.closest 141 ? e.target.closest('.tab-nav-item, .tab-item, .fl-tab-nav .tab-nav, .index-nav .nav-ele') 142 : null; 143 touch.x = t.clientX; 144 touch.y = t.clientY; 145 touch.el = el; 146 }, 147 { passive: true } 148 ); 149 document.addEventListener( 150 'touchend', 151 function (e) { 152 if (!touch.el) return; 153 var t = e.changedTouches && e.changedTouches[0]; 154 if (!t) return; 155 var dx = Math.abs(t.clientX - touch.x); 156 var dy = Math.abs(t.clientY - touch.y); 157 var el = touch.el; 158 touch.el = null; 159 if (dx > 12 || dy > 12) return; 160 if (e.cancelable) e.preventDefault(); 161 el.click(); 162 }, 163 { passive: false } 164 ); 165 166 document.addEventListener( 167 'wheel', 168 function (e) { 169 var t = e.target; 170 if (!t || !t.classList || !t.classList.contains('code-input-area')) return; 171 var box = t.closest ? t.closest('.code-display-area') : null; 172 if (!box || box.scrollHeight <= box.clientHeight) return; 173 box.scrollTop += e.deltaY; 174 if (e.cancelable) e.preventDefault(); 175 }, 176 { passive: false } 177 ); 178 179 function tameOcwCircles(root) { 180 var scope = root && root.querySelectorAll ? root : document; 181 var nodes = scope.querySelectorAll 182 ? scope.querySelectorAll('.ocw-animated-circles, .ocw-circle') 183 : []; 184 for (var i = 0; i < nodes.length; i++) { 185 nodes[i].style.pointerEvents = 'none'; 186 } 187 if (scope !== document && scope.classList) { 188 if ( 189 scope.classList.contains('ocw-circle') || 190 scope.classList.contains('ocw-animated-circles') 191 ) { 192 scope.style.pointerEvents = 'none'; 193 } 194 } 195 var sels = scope.querySelectorAll 196 ? scope.querySelectorAll('#OCW_Wp select, .ocw-contact-form select') 197 : []; 198 for (var s = 0; s < sels.length; s++) { 199 if (!sels[s].getAttribute('aria-label')) { 200 sels[s].setAttribute('aria-label', 'å¨çº¿å®¢æé项'); 201 } 202 } 203 var tools = scope.querySelectorAll ? scope.querySelectorAll('a.ocw-btn-tool') : []; 204 for (var j = 0; j < tools.length; j++) { 205 if (!tools[j].getAttribute('href')) { 206 tools[j].setAttribute('role', 'button'); 207 tools[j].setAttribute('href', '#'); 208 } 209 } 210 } 211 212 function openSheet(sel) { 213 var el = document.querySelector(sel); 214 if (!el) return; 215 el.classList.add('wb-active'); 216 setTimeout(function () { 217 el.classList.add('wb-slide-in'); 218 }, 40); 219 } 220 function closeSheet(el) { 221 if (!el) return; 222 el.classList.remove('wb-slide-in', 'wb-active'); 223 } 224 function bindActionSheets() { 225 document.addEventListener('click', function (e) { 226 var trigger = e.target.closest('[data-wbats-target]'); 227 if (trigger) { 228 var t = trigger.getAttribute('data-wbats-target'); 229 if (t) openSheet(t); 230 } 231 var close = e.target.closest('.was-close, .was-mask'); 232 if (close) { 233 var sheet = close.closest('.wb-action-sheet'); 234 closeSheet(sheet); 235 } 236 }); 237 } 238 function isNarrow() { 239 return window.matchMedia && window.matchMedia('(max-width: 800px)').matches; 240 } 241 function mountCommentSheet() { 242 if (!isNarrow()) return; 243 var form = document.querySelector('.wb-comment-form-mount'); 244 var dest = document.querySelector('.wb-ats-comment .wb-ats-comment-bd'); 245 if (!form || !dest || dest.contains(form)) return; 246 dest.appendChild(form); 247 } 248 function bindCommentReply() { 249 document.addEventListener('click', function (e) { 250 var reply = e.target.closest('.comment-reply-link'); 251 if (!reply || !isNarrow() || !document.querySelector('.wb-ats-comment')) return; 252 setTimeout(function () { 253 mountCommentSheet(); 254 openSheet('.wb-ats-comment'); 255 }, 30); 256 }); 257 } 258 function getQuery(name) { 259 var m = window.location.search.match(new RegExp('[?&]' + name + '=([^&]*)')); 260 return m ? decodeURIComponent(m[1]) : ''; 261 } 262 function setQuery(url, name, value) { 263 var re = new RegExp(name + '=[^&]*', 'i'); 264 if (url.match(re)) return url.replace(re, name + '=' + encodeURIComponent(value)); 265 return url + (url.indexOf('?') >= 0 ? '&' : '?') + name + '=' + encodeURIComponent(value); 266 } 267 function overlayOf(root) { 268 var id = root.getAttribute('data-wb-fs'); 269 return (id && document.getElementById('wb-fs-overlay-' + id)) || root.querySelector('.wb-fs-overlay'); 270 } 271 function selectedOf(group) { 272 return group ? group.querySelector('.wb-fs-row.is-on') : null; 273 } 274 function pickGroup(scope, key) { 275 if (!scope) return null; 276 return ( 277 scope.querySelector('.wb-fs-group[data-query="' + key + '"]') || 278 scope.querySelector('.wb-fs-dd[data-query="' + key + '"]') 279 ); 280 } 281 function groupNodes(scope) { 282 if (!scope) return []; 283 return scope.querySelectorAll('.wb-fs-group, .wb-fs-dd'); 284 } 285 function isLocalGroup(group) { 286 return !!(group && group.getAttribute('data-local') === '1'); 287 } 288 function closeDeskDrops(except) { 289 var panels = document.querySelectorAll('.wb-fs-dd-panel'); 290 var btns = document.querySelectorAll('.wb-fs-dd-btn'); 291 for (var i = 0; i < panels.length; i++) { 292 if (except && (panels[i] === except || except.contains(panels[i]))) continue; 293 panels[i].setAttribute('hidden', ''); 294 } 295 for (var j = 0; j < btns.length; j++) { 296 if (except && except.contains(btns[j])) continue; 297 btns[j].setAttribute('aria-expanded', 'false'); 298 } 299 } 300 function updateDeskBtn(dd) { 301 if (!dd) return; 302 var on = selectedOf(dd); 303 var v = dd.querySelector('.wb-fs-dd-v'); 304 if (v && on) { 305 v.textContent = ((on.querySelector('.wb-fs-txt') || on).textContent || '').replace(/\s+/g, ' ').trim(); 306 } 307 } 308 function applyCodexType(value) { 309 try { 310 sessionStorage.setItem('wb_codex_search_type', value); 311 } catch (e) {} 312 var tab = document.querySelector('#wbtCodexType .nav-item[data-type="' + value + '"]'); 313 if (tab) tab.click(); 314 } 315 function restoreCodexType() { 316 var t = ''; 317 try { 318 t = sessionStorage.getItem('wb_codex_search_type') || ''; 319 } catch (e) {} 320 if (!t || !document.querySelector('#wbtCodexType')) return; 321 var tab = document.querySelector('#wbtCodexType .nav-item[data-type="' + t + '"]'); 322 if (tab && !tab.classList.contains('active')) tab.click(); 323 var dds = document.querySelectorAll('.wb-fs-dd[data-query="type"]'); 324 for (var i = 0; i < dds.length; i++) { 325 setRowOn(dds[i], t); 326 updateDeskBtn(dds[i]); 327 } 328 var ovs = document.querySelectorAll('.wb-fs-group[data-query="type"]'); 329 for (var j = 0; j < ovs.length; j++) setRowOn(ovs[j], t); 330 } 331 function setRowOn(group, value) { 332 if (!group) return; 333 var rows = group.querySelectorAll('.wb-fs-row'); 334 var hit = false;
335 for (var i = 0; i < rows.length; i++) { 336 var on = rows[i].getAttribute('data-value') === String(value); 337 rows[i].classList.toggle('is-on', on); 338 if (on) hit = true; 339 } 340 if (!hit && rows[0]) rows[0].classList.add('is-on'); 341 } 342 function syncCopies(root) { 343 var overlay = overlayOf(root); 344 var desk = root.querySelector('.wb-fs-desktop'); 345 if (!overlay || !desk) return; 346 var groups = overlay.querySelectorAll('.wb-fs-group'); 347 for (var i = 0; i < groups.length; i++) { 348 var key = groups[i].getAttribute('data-query'); 349 var on = selectedOf(groups[i]); 350 var target = pickGroup(desk, key); 351 setRowOn(target, on ? on.getAttribute('data-value') : ''); 352 updateDeskBtn(target); 353 } 354 } 355 function collectState(root, fromOverlay) { 356 var scope = fromOverlay ? overlayOf(root) : root.querySelector('.wb-fs-desktop') || overlayOf(root) || root; 357 var groups = groupNodes(scope); 358 var out = []; 359 for (var i = 0; i < groups.length; i++) { 360 var g = groups[i]; 361 var on = selectedOf(g); 362 out.push({ 363 key: g.getAttribute('data-query'), 364 def: g.getAttribute('data-default') || 'all', 365 value: on ? on.getAttribute('data-value') : g.getAttribute('data-default') || 'all', 366 href: on ? on.getAttribute('data-href') || '' : '', 367 label: on ? ((on.querySelector('.wb-fs-txt') || on).textContent || '').replace(/\s+/g, ' ').trim() : '', 368 local: isLocalGroup(g), 369 }); 370 } 371 return out; 372 } 373 function renderChips(root) { 374 var box = root.querySelector('.wb-fs-chips'); 375 var badge = root.querySelector('.wb-fs-badge'); 376 if (!box) return; 377 var state = collectState(root, true); 378 var html = ''; 379 var n = 0; 380 for (var i = 0; i < state.length; i++) { 381 if (state[i].value === state[i].def) continue; 382 n++; 383 html += 384 '<button type="button" class="wb-fs-chip" data-query="' + 385 state[i].key + 386 '" data-reset="' + 387 state[i].def + 388 '"><span>' + 389 state[i].label + 390 '</span><i aria-hidden="true">Ã</i></button>'; 391 } 392 box.innerHTML = html; 393 if (badge) { 394 badge.textContent = String(n); 395 if (n) badge.removeAttribute('hidden'); 396 else badge.setAttribute('hidden', ''); 397 } 398 } 399 var vvUnbind = null; 400 function applyFilterViewport() { 401 var vv = window.visualViewport; 402 var top = 0; 403 var h = window.innerHeight || document.documentElement.clientHeight || 0; 404 if (vv) { 405 top = Math.max(0, Math.round(vv.offsetTop || 0)); 406 if (vv.height) h = Math.max(0, Math.round(vv.height)); 407 } 408 document.documentElement.style.setProperty('--wb-vv-top', top + 'px'); 409 document.documentElement.style.setProperty('--wb-vv-h', h + 'px'); 410 } 411 function bindFilterViewport() { 412 applyFilterViewport(); 413 if (vvUnbind) return; 414 var on = function () { 415 applyFilterViewport(); 416 }; 417 var vv = window.visualViewport; 418 if (vv && vv.addEventListener) { 419 vv.addEventListener('resize', on); 420 vv.addEventListener('scroll', on); 421 } 422 window.addEventListener('resize', on); 423 vvUnbind = function () { 424 if (vv && vv.removeEventListener) { 425 vv.removeEventListener('resize', on); 426 vv.removeEventListener('scroll', on); 427 } 428 window.removeEventListener('resize', on); 429 vvUnbind = null; 430 }; 431 } 432 function unbindFilterViewport() { 433 if (vvUnbind) vvUnbind(); 434 document.documentElement.style.removeProperty('--wb-vv-top'); 435 document.documentElement.style.removeProperty('--wb-vv-h'); 436 } 437 function lockFilterScroll() { 438 var y = window.scrollY || document.documentElement.scrollTop || 0; 439 document.body.setAttribute('data-wb-fs-y', String(y)); 440 document.documentElement.classList.add('wb-fs-lock'); 441 document.body.classList.add('wb-fs-lock'); 442 document.body.style.top = '-' + y + 'px'; 443 } 444 function unlockFilterScroll() { 445 var y = parseInt(document.body.getAttribute('data-wb-fs-y') || '0', 10) || 0; 446 document.documentElement.classList.remove('wb-fs-lock'); 447 document.body.classList.remove('wb-fs-lock'); 448 document.body.style.top = ''; 449 document.body.removeAttribute('data-wb-fs-y'); 450 window.scrollTo(0, y); 451 } 452 function closeFilterSheet(root) {
453 var overlay = overlayOf(root); 454 var openBtn = root.querySelector('.wb-fs-open'); 455 if (overlay) { 456 overlay.classList.remove('is-open'); 457 overlay.setAttribute('hidden', ''); 458 } 459 if (openBtn) { 460 openBtn.classList.remove('is-on'); 461 openBtn.setAttribute('aria-expanded', 'false'); 462 } 463 unlockFilterScroll(); 464 unbindFilterViewport(); 465 } 466 function openFilterSheet(root) { 467 var overlay = overlayOf(root); 468 var openBtn = root.querySelector('.wb-fs-open'); 469 if (!overlay) return; 470 if (overlay.parentNode !== document.body) { 471 document.body.appendChild(overlay); 472 } 473 bindFilterViewport(); 474 lockFilterScroll(); 475 overlay.removeAttribute('hidden'); 476 overlay.offsetHeight; 477 overlay.classList.add('is-open'); 478 if (openBtn) { 479 openBtn.classList.add('is-on'); 480 openBtn.setAttribute('aria-expanded', 'true'); 481 } 482 } 483 function applyFilterSheet(root, fromOverlay) { 484 var mode = root.getAttribute('data-wb-fs-mode') || 'navigate'; 485 var state = collectState(root, fromOverlay); 486 var nav = []; 487 for (var i = 0; i < state.length; i++) { 488 if (state[i].local) { 489 if (state[i].key === 'type') applyCodexType(state[i].value); 490 continue; 491 } 492 nav.push(state[i]); 493 } 494 if (!nav.length) { 495 closeFilterSheet(root); 496 closeDeskDrops(); 497 renderChips(root); 498 return; 499 } 500 if (nav.length === 1 && nav[0].href) { 501 if (mode === 'ajax' && typeof window.wbUaLoadCategory === 'function') { 502 window.wbUaLoadCategory(nav[0].href, nav[0].value); 503 closeFilterSheet(root); 504 renderChips(root); 505 return; 506 } 507 window.location.href = nav[0].href; 508 return; 509 } 510 var url = window.location.pathname; 511 for (var j = 0; j < nav.length; j++) { 512 url = setQuery(url, nav[j].key, nav[j].value); 513 } 514 window.location.href = url; 515 } 516 function resetFilterSheet(root) { 517 var scopes = [overlayOf(root), root.querySelector('.wb-fs-desktop')]; 518 for (var s = 0; s < scopes.length; s++) { 519 if (!scopes[s]) continue; 520 var groups = groupNodes(scopes[s]); 521 for (var i = 0; i < groups.length; i++) { 522 setRowOn(groups[i], groups[i].getAttribute('data-default') || 'all'); 523 updateDeskBtn(groups[i]); 524 } 525 } 526 } 527 function bindOneFilterSheet(root) { 528 if (!root || root.dataset.wbFsBound === '1') return; 529 root.dataset.wbFsBound = '1'; 530 root.addEventListener('click', function (e) { 531 if (e.target.closest('.wb-fs-open')) { 532 if (root.querySelector('.wb-fs-overlay.is-open')) closeFilterSheet(root); 533 else openFilterSheet(root); 534 return; 535 } 536 var chip = e.target.closest('.wb-fs-chip'); 537 if (chip) { 538 var q = chip.getAttribute('data-query'); 539 var def = chip.getAttribute('data-reset') || 'all'; 540 var scopes = [overlayOf(root), root.querySelector('.wb-fs-desktop')]; 541 for (var s = 0; s < scopes.length; s++) { 542 if (!scopes[s]) continue; 543 var groups = groupNodes(scopes[s]); 544 for (var i = 0; i < groups.length; i++) { 545 if (groups[i].getAttribute('data-query') === q) { 546 setRowOn(groups[i], def); 547 updateDeskBtn(groups[i]); 548 } 549 } 550 } 551 applyFilterSheet(root, true); 552 return; 553 } 554 var ddBtn = e.target.closest('.wb-fs-dd-btn'); 555 if (ddBtn) { 556 var dd = ddBtn.closest('.wb-fs-dd'); 557 var panel = dd ? dd.querySelector('.wb-fs-dd-panel') : null; 558 var open = ddBtn.getAttribute('aria-expanded') === 'true'; 559 closeDeskDrops(open ? null : dd); 560 if (!open && panel) { 561 panel.removeAttribute('hidden'); 562 ddBtn.setAttribute('aria-expanded', 'true'); 563 } 564 return; 565 } 566 var deskRow = e.target.closest('.wb-fs-desktop .wb-fs-row'); 567 if (deskRow) { 568 var dg = deskRow.closest('.wb-fs-dd') || deskRow.closest('.wb-fs-group'); 569 if (dg && dg.getAttribute('data-single') !== '0') { 570 setRowOn(dg, deskRow.getAttribute('data-value')); 571 } else { 572 deskRow.classList.toggle('is-on'); 573 } 574 updateDeskBtn(dg); 575 var ov = pickGroup(overlayOf(root), dg.getAttribute('data-query')); 576 setRowOn(ov, deskRow.getAttribute('data-value')); 577 closeDeskDrops(); 578 applyFilterSheet(root, false); 579 } 580 });
581 var overlay = overlayOf(root); 582 if (!overlay) return; 583 overlay.addEventListener('click', function (e) { 584 if (e.target.closest('.wb-fs-mask') || e.target.closest('.wb-fs-x')) { 585 closeFilterSheet(root); 586 return; 587 } 588 if (e.target.closest('.wb-fs-reset')) { 589 resetFilterSheet(root); 590 return; 591 } 592 if (e.target.closest('.wb-fs-apply')) { 593 applyFilterSheet(root, true); 594 return; 595 } 596 if (e.target.closest('.wb-fs-more')) { 597 var g = e.target.closest('.wb-fs-group'); 598 if (g) g.classList.add('is-expanded'); 599 return; 600 } 601 var row = e.target.closest('.wb-fs-row'); 602 if (row) { 603 var group = row.closest('.wb-fs-group'); 604 if (group && group.getAttribute('data-single') !== '0') { 605 setRowOn(group, row.getAttribute('data-value')); 606 } else { 607 row.classList.toggle('is-on'); 608 } 609 syncCopies(root); 610 } 611 }); 612 } 613 function bindFilterSheets() { 614 var nodes = document.querySelectorAll('[data-wb-fs]'); 615 for (var i = 0; i < nodes.length; i++) bindOneFilterSheet(nodes[i]); 616 if (!document.documentElement.dataset.wbFsDocBound) { 617 document.documentElement.dataset.wbFsDocBound = '1'; 618 document.addEventListener('click', function (e) { 619 if (!e.target.closest('.wb-fs-dd')) closeDeskDrops(); 620 }); 621 document.addEventListener('keydown', function (e) { 622 if (e.key !== 'Escape') return; 623 closeDeskDrops(); 624 var open = document.querySelector('.wb-fs-overlay.is-open'); 625 if (!open) return; 626 var list = document.querySelectorAll('[data-wb-fs]'); 627 for (var j = 0; j < list.length; j++) { 628 if (overlayOf(list[j]) === open) { 629 closeFilterSheet(list[j]); 630 } 631 } 632 }); 633 } 634 restoreCodexType(); 635 bindCodexSearchTabs(); 636 } 637 function bindCodexSearchTabs() { 638 var nav = document.querySelector('#wbtCodexType'); 639 if (!nav || nav.dataset.wbCodexBound === '1') return; 640 nav.dataset.wbCodexBound = '1'; 641 nav.addEventListener('click', function (e) { 642 var item = e.target.closest('.nav-item'); 643 if (!item) return; 644 try { 645 sessionStorage.setItem('wb_codex_search_type', item.getAttribute('data-type') || ''); 646 } catch (err) {} 647 }); 648 } 649 window.wbCloseFilterSheet = function () { 650 var list = document.querySelectorAll('[data-wb-fs]'); 651 for (var i = 0; i < list.length; i++) closeFilterSheet(list[i]); 652 }; 653 654 function bindMobileNavEarly() { 655 var btn = document.querySelector('#J_btnNavMb'); 656 var body = document.body; 657 if (!btn || !body || btn.dataset.wbNavBound === '1') return; 658 btn.dataset.wbNavBound = '1'; 659 var st = 0; 660 btn.addEventListener('click', function () { 661 var open = body.classList.contains('display-nav-m'); 662 if (!open) { 663 st = document.documentElement.scrollTop || 0; 664 } 665 body.classList.toggle('display-nav-m'); 666 if (open) { 667 window.scrollTo(0, st); 668 } 669 }); 670 } 671 672 function boot() { 673 bootImgs(); 674 tameOcwCircles(document); 675 bindActionSheets(); 676 mountCommentSheet(); 677 bindCommentReply(); 678 bindFilterSheets(); 679 bindMobileNavEarly(); 680 if (typeof MutationObserver !== 'undefined') { 681 new MutationObserver(function (muts) { 682 muts.forEach(function (m) { 683 m.addedNodes && 684 m.addedNodes.forEach(function (n) { 685 if (n.nodeType === 1) tameOcwCircles(n); 686 }); 687 }); 688 }).observe(document.documentElement, { childList: true, subtree: true }); 689 } 690 } 691 if (document.readyState === 'loading') { 692 document.addEventListener('DOMContentLoaded', boot); 693 } else { 694 boot(); 695 } 696})();
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.