1var uiUtil = { 2 //UI ì´ê¸° ì¤ì 3 initUi : function() { 4 5 }, 6 7 // ë¡ë©ë° ë³´ì¬ì£¼ê¸° 8 showLoadingBar : function() { 9 document.querySelector(".loading_back.loading-dots").style.display = "block"; 10 }, 11 12 // ë¡ë©ë° ì¨ê¸°ê¸° 13 hideLoadingBar : function() { 14 document.querySelector(".loading_back.loading-dots").style.display = "none"; 15 } 16}; 17 18var LayerPopup = { 19 open:function(obj){ 20 document.querySelector(".loading_back.loading-dims").style.display = "block"; 21 22 var layerObj = $('.'+obj); 23 biz.getTerms(obj, url => { 24 layerObj.fadeIn(500, function() { 25 Terms.renderPdf(obj, url); 26 }); 27 }); 28 layerObj.attr('tabindex',1); 29 layerObj.css('z-index','10000'); 30 layerObj.css('display', 'block'); 31 }, 32 close:function(obj){ 33 document.querySelector(".loading_back.loading-dims").style.display = "none"; 34 35 if(obj == null || obj == undefined || obj == '') { 36 //pinì¸ì¦ìì ì¬ì© 37 $('div.layer-popup').fadeOut(300); 38 $('div.layer-popup').removeAttr('tabindex'); 39 } else { 40 var layerObj = $('.'+obj); 41 layerObj.fadeOut(300); 42 layerObj.removeAttr('tabindex'); 43 layerObj.css('display', 'none'); 44 } 45 } 46}; 47 48var Terms = { 49 renderPdf: async function(id, url) { 50 const container = document.querySelector('.' + id); 51 const wrap = container.querySelector('.pdf-canvas-wrap'); 52 const fallback = container.querySelector('.pdf-fallback'); 53 const pullDownEl = container.querySelector('[name="pullDown"]'); 54 const agreeEl = container.querySelector('[name="agree"]'); 55 56 if (pullDownEl) pullDownEl.style.display = 'none'; 57 if (agreeEl) agreeEl.style.display = ''; 58 59 if (!container || !wrap || !fallback) return; 60 61 const isExist = wrap.querySelector('.pdf-page') !== null; 62 if (isExist) return; 63 64 wrap.innerHTML = ''; 65 let target = wrap; 66 67 try { 68 const pdf = await pdfjsLib.getDocument({ url }).promise; 69 fallback.hidden = true; 70 71 const maxWidth = container.clientWidth || 800; 72 const dpr = window.devicePixelRatio || 1; 73 74 for (let p = 1; p <= pdf.numPages; p++) { 75 const page = await pdf.getPage(p); 76 77 const base = page.getViewport({ scale: 1 }); 78 const scale = maxWidth / base.width; 79 const viewport = page.getViewport({ scale }); 80 81 // íì´ì§ wrapper 82 const pageWrap = document.createElement('div'); 83 pageWrap.className = 'pdf-page'; 84 pageWrap.style.position = 'relative'; 85 pageWrap.style.width = `${Math.floor(viewport.width)}px`; 86 pageWrap.style.height = `${Math.floor(viewport.height)}px`; 87 //pageWrap.style.marginBottom = '12px'; 88 89 // canvas 90 const canvas = document.createElement('canvas'); 91 canvas.className = 'pdf-canvas'; 92 canvas.style.width = pageWrap.style.width; 93 canvas.style.height = pageWrap.style.height; 94 canvas.width = Math.floor(viewport.width * dpr); 95 canvas.height = Math.floor(viewport.height * dpr); 96 97 const ctx = canvas.getContext('2d', { alpha: false }); 98 ctx.setTransform(dpr, 0, 0, dpr, 0, 0); 99 100 pageWrap.appendChild(canvas); 101 102 // text layer 103 const textLayerDiv = document.createElement('div'); 104 textLayerDiv.className = 'textLayer'; 105 textLayerDiv.style.position = 'absolute'; 106 textLayerDiv.style.left = '0'; 107 textLayerDiv.style.top = '0'; 108 textLayerDiv.style.width = pageWrap.style.width; 109 textLayerDiv.style.height = pageWrap.style.height; 110 textLayerDiv.style.pointerEvents = 'auto'; 111 112 pageWrap.appendChild(textLayerDiv); 113 wrap.appendChild(pageWrap); 114 115 // canvas render
116 await page.render({ 117 canvasContext: ctx, 118 viewport: viewport 119 }).promise; 120 121 // text render 122 const textContent = await page.getTextContent(); 123 124 await pdfjsLib.renderTextLayer({ 125 textContent: textContent, 126 container: textLayerDiv, 127 viewport: viewport, 128 textDivs: [] 129 }).promise; 130 } 131 } catch (e) { 132 console.error('PDF ë ë ì¤í¨ â JSP ëì²´ ì¶ë ¥', e); 133 wrap.hidden = true; 134 fallback.hidden = false; 135 target = fallback; 136 } 137 } 138}; 139 140var ScrollSnap = { 141 bottomToTopStep(wrap) { 142 const top = wrap.scrollTop; 143 const h = wrap.clientHeight; 144 const scrollH = wrap.scrollHeight; 145 const bottom = top + h; 146 if (bottom >= scrollH - 1) return true; 147 wrap.scrollTo({ top: Math.min(bottom, scrollH - h), behavior: 'smooth' }); 148 return false; 149 }, 150 isLast: async function(wrap, timeout = 1500, idle = 120, threshold = 1) { 151 await ScrollSnap._waitForScrollSettle(wrap, timeout, idle); 152 return wrap.scrollTop + wrap.clientHeight >= wrap.scrollHeight - threshold; 153 }, 154 _waitForScrollSettle: function(elem, timeout, idle) { 155 return new Promise((resolve) => { 156 let t; 157 const done = () => { elem.removeEventListener('scroll', onScroll, opts); clearTimeout(tt); resolve(); }; 158 const onScroll = () => { clearTimeout(t); t = setTimeout(done, idle); }; 159 const opts = { passive: true }; 160 elem.addEventListener('scroll', onScroll, opts); 161 const tt = setTimeout(done, timeout); 162 onScroll(); 163 }); 164 }, 165 hasVerticalScroll: function(el) { 166 if (!el) return false; 167 const cs = getComputedStyle(el); 168 if (cs.overflowY === 'hidden') return false; 169 if (el.scrollHeight > el.clientHeight + 1) return true; 170 const prev = el.scrollTop; 171 el.scrollTop = prev + 1; 172 const moved = el.scrollTop !== prev; 173 el.scrollTop = prev; // ë³µì 174 return moved; 175 } 176};
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.