PageSourceSearch

https://woorisavingsbank.com/resources/common/foresys/uiUtils.js?v=1790954929609

js woorisavingsbank.com collected 2026-10-02 15:30:08 UTC 5,971 bytes, 176 lines download raw bytes

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.