PageSourceSearch

https://www.gohackers.com/_core/js/viewObj.js?nFlag=20260426

js gohackers.com collected 2026-10-03 22:49:43 UTC 7,117 bytes, 165 lines download raw bytes

1/* P-5 PoC viewObj router. Do not modify inline definitions.
2 * 생성 사유: viewObj 함수 211회 호출, 52개 정의 중복 → 라우터 패턴 PoC 단계 통합.
3 * 본 파일은 PoC 5페이지에 한해 명시적 override 로 활성화된다.
4 * 비PoC 페이지는 inline 정의가 window.viewObj 를 점유하므로 영향 없음.
5 * 작성일: 2026-04-26
6 */
7(function (window) {
8    'use strict';
9
10    window.GoHackers = window.GoHackers || {};
11
12    // jQuery 가용성 가드
13    function _hasJQuery() {
14        return typeof window.jQuery !== 'undefined' || typeof window.$ !== 'undefined';
15    }
16    function _$() {
17        return window.jQuery || window.$;
18    }
19
20    /**
21     * prepare 도메인: jQuery 표준 탭 (prepare_guide_chi 패턴)
22     * 원본: $('.tab_content').hide(); $('#'+obj+'_'+no).show();
23     *       $('.tab_btn li').removeClass('on'); $('.tab_btn li.tab'+no).addClass('on');
24     */
25    function _viewObjPrepare(obj, no) {
26        if (!_hasJQuery()) return;
27        var $ = _$();
28        $('.tab_content').hide();
29        $('#' + obj + '_' + no).show();
30        $('.tab_btn li').removeClass('on');
31        $('.tab_btn li.tab' + no).addClass('on');
32    }
33
34    /**
35     * visa 도메인: Vanilla, 이미지 경로 변경 (visa_guide_aus 패턴)
36     * 루프 1~4, 이미지 prefix: https://img.gohackers.com/sub/abroad/visa_newinfo_tab_0{i}_{on|off}.gif
37     * inline 원본은 상대경로(`img/sub/abroad/...`)로 prefix 누락된 PHP 버그가 있어 이미지가 깨진다.
38     * 정답 prefix 는 초기 정적 img 의 절대 URL(`https://image.gohackers.com/...`) 와 일치시킨다.
39     * (P-5 PoC 한정: visa_guide_aus 만 검증됨.)
40     */
41    function _viewObjVisa(obj, no) {
42        var IMG_BASE = 'https://img.gohackers.com/sub/abroad/';
43        for (var i = 1; i < 5; i++) {
44            var contentEl = document.getElementById(obj + '_' + i);
45            var menuEl = document.getElementById(obj + '_m' + i);
46            if (i == no) {
47                if (contentEl) contentEl.style.display = 'block';
48                if (menuEl) menuEl.src = IMG_BASE + 'visa_newinfo_tab_0' + i + '_on.gif';
49            } else {
50                if (contentEl) contentEl.style.display = 'none';
51                if (menuEl) menuEl.src = IMG_BASE + 'visa_newinfo_tab_0' + i + '_off.gif';
52            }
53        }
54    }
55
56    /**
57     * gre 도메인: Vanilla + 변수명 공백 흡수 (gre_guide 패턴)
58     * 루프 1~4, 절대경로 이미지: https://upload.gohackers.com/srv/images/sub/gre_guide/gre_tab_0{i}_{on|off}.gif
59     */
60    function _viewObjGre(obj, no) {
61        for (var i = 1; i < 5; i++) {
62            var contentEl = document.getElementById(obj + '_' + i);
63            var menuEl = document.getElementById(obj + '_m' + i);
64            if (contentEl) {
65                if (i == no) {
66                    contentEl.style.display = 'block';
67                    if (menuEl) menuEl.src = 'https://upload.gohackers.com/srv/images/sub/gre_guide/gre_tab_0' + i + '_on.gif';
68                } else {
69                    contentEl.style.display = 'none';
70                    if (menuEl) menuEl.src = 'https://upload.gohackers.com/srv/images/sub/gre_guide/gre_tab_0' + i + '_off.gif';
71                }
72            }
73        }
74    }
75
76    /**
77     * toefl 도메인: ES6 + el 파라미터 + 콜백 (toefl_guide 패턴)
78     * 루프 1~5, #guideTap a 클래스 토글, tab_iframe_resize 콜백 호출
79     */
80    function _viewObjToefl(obj, no, el) {
81        try { console.log(obj + '_' + no); } catch (e) {}
82        for (var i = 1; i <= 5; i++) {
83            var element = document.getElementById(obj + '_' + i);
84            if (element) {
85                element.style.display = (i == no) ? 'block' : 'none';
86            }
87        }
88        var tabs = document.querySelectorAll('#guideTap a');
89        if (tabs && tabs.forEach) {
90            tabs.forEach(function (tab) { tab.classList.remove('on'); });
91        }
92        if (el && el.classList) {
93            el.classList.add('on');
94        }
95        if (typeof window.tab_iframe_resize === 'function') {
96            window.tab_iframe_resize();
97        }
98    }
99
100    /**
101     * life 도메인: Vanilla, 이미지 경로 변경 (life_guide_usa 패턴)
102     * 루프 1~6, 이미지 prefix: //img.gohackers.com/sub/abroad/v2/abr_tab_usa_life0{i}_{on|off}.jpg
103     * 레거시 PHP 의 $g['path_image']='//image.gohackers.com/' 를 prefix 로 흡수.
104     * 주의: life 도메인은 국가별로 prefix가 다르므로 본 PoC 는 usa 한정.
105     */
106    function _viewObjLife(obj, no) {
107        var IMG_BASE = '//img.gohackers.com/sub/abroad/v2/';
108        for (var i = 1; i < 7; i++) {
109            var contentEl = document.getElementById(obj + '_' + i);
110            var menuEl = document.getElementById(obj + '_m' + i);
111            if (i == no) {
112                if (contentEl) contentEl.style.display = 'block';
113                if (menuEl) menuEl.src = IMG_BASE + 'abr_tab_usa_life0' + i + '_on.jpg';
114            } else {
115                if (contentEl) contentEl.style.display = 'none';
116                if (menuEl) menuEl.src = IMG_BASE + 'abr_tab_usa_life0' + i + '_off.jpg';
117            }
118        }
119    }
120
121    /**
122     * default fallback: jQuery 가능 시 prepare 패턴, 아니면 Vanilla 표준 토글
123     */
124    function _viewObjDefault(obj, no) {
125        if (_hasJQuery()) {
126            return _viewObjPrepare(obj, no);
127        }
128        for (var i = 1; i <= 5; i++) {
129            var el = document.getElementById(obj + '_' + i);
130            if (el) el.style.display = (i == no) ? 'block' : 'none';
131        }
132    }
133
134    /**
135     * 라우터 진입점.
136     * 호출 형태:
137     *   window.GoHackers.viewObj.bind(null, 'prepare')(obj, no)         // domain 사전 바인딩
138     *   window.GoHackers.viewObj('prepare', obj, no)                   // 직접 호출
139     * 도메인 미지정/미일치 시 _viewObjDefault.
140     */
141    function viewObjRouter(domain, obj, no, el, options) {
142        try {
143            switch (domain) {
144                case 'prepare': return _viewObjPrepare(obj, no);
145                case 'visa':    return _viewObjVisa(obj, no);
146                case 'gre':     return _viewObjGre(obj, no);
147                case 'toefl':   return _viewObjToefl(obj, no, el);
148                case 'life':    return _viewObjLife(obj, no);
149                default:        return _viewObjDefault(obj, no);
150            }
151        } catch (e) {
152            try { console.error('[GoHackers.viewObj] error', e); } catch (_) {}
153        }
154    }
155
156    // 외부 노출
157    window.GoHackers.viewObj = viewObjRouter;
158    window.GoHackers._viewObjPrepare = _viewObjPrepare;
159    window.GoHackers._viewObjVisa    = _viewObjVisa;
160    window.GoHackers._viewObjGre     = _viewObjGre;
161    window.GoHackers._viewObjToefl   = _viewObjToefl;
162    window.GoHackers._viewObjLife    = _viewObjLife;
163    window.GoHackers._viewObjDefault = _viewObjDefault;
164
165})(window);

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.