PageSourceSearch

https://bris.go.kr/resources/js/portal/main/portalMainPage.js

js bris.go.kr collected 2026-10-02 14:51:15 UTC 28,010 bytes, 834 lines download raw bytes

1let noticeIdx = 10000;
2
3/**
4 * onload
5 */
6window.onload = function() {
7
8    window.localStorage.setItem("isNlp", "Y");
9
10    //BRIS 건수 데이터 조회
11    fn_searchBrisCntData();
12
13    //공지사항 레이어 팝업
14    fn_openNoticeLayer();
15
16    //검색창 이벤트 초기화
17    fn_searchEventInit("searchKeyword");
18
19    //미니 키보드 초기화
20    fn_miniKeyboardInit();
21
22    //생명자원 정보연계기관 조회
23    fn_getInsttList();
24
25    //자원통계현황 파이차트 - 미완성 샘플
26    fn_createResourcePieChart();
27
28    //생명자원 카드뉴스
29    fn_getBrisNews();
30
31    //검색어순위 차트 생성 - 미완성 샘플
32    fn_createWordRankChart();
33
34    //생명자원 홍보자료
35    fn_getPromotion();
36
37    //생명자원 동영상
38    fn_getBrisMovie();
39
40    //방문자수 조회(마토모)
41    fn_getVisitMatomo();
42
43
44    const debounce = (fn, delay = 120) => {
45		let t; return (...args) => { clearTimeout(t); t = setTimeout(() => fn.apply(null, args), delay); };
46	  };
47
48	  // 중복 리스너 방지용 플래그
49	  let MSTAT_BOUND = false;
50
51	  window.fn_initMstatSlider = function(){
52		const $list = $('.mstat-list');
53		if (!$list.length) return;
54
55		const mq1440 = window.matchMedia('(max-width: 1440px)');
56		const speedAttr = parseInt($list.attr('data-autoplay'), 10);
57		const autoSpeed = isNaN(speedAttr) ? 5000 : speedAttr; // 기본 5초
58
59		const ensure = () => {
60		  // 1440px 이하 → slick ON
61		  if (mq1440.matches) {
62			if (!$list.hasClass('slick-initialized')) {
63			  $list.slick({
64				slidesToShow: 3,
65				slidesToScroll: 3,
66				infinite: true,
67				arrows: false,
68				dots: false,
69				autoplay: true,
70				autoplaySpeed: autoSpeed,
71				speed: 500,
72				swipe: true,
73				draggable: true,
74				pauseOnHover: true,
75				pauseOnFocus: true,
76				touchThreshold: 8,
77				responsive: [
78				  { breakpoint: 900, settings: { slidesToShow: 2, slidesToScroll: 2 } },
79				  { breakpoint: 520, settings: { slidesToShow: 1, slidesToScroll: 1 } }
80				]
81			  });
82
83			  // fullpage 연동
84			  $list.on('touchstart mousedown pointerdown', function(){
85				if (window.fullpage_api && fullpage_api.setAllowScrolling){
86				  fullpage_api.setAllowScrolling(false);
87				  fullpage_api.setKeyboardScrolling(false);
88				}
89			  });
90			  $list.on('touchend mouseup pointerup mouseleave dragend', function(){
91				if (window.fullpage_api && fullpage_api.setAllowScrolling){
92				  fullpage_api.setAllowScrolling(true);
93				  fullpage_api.setKeyboardScrolling(true);
94				}
95			  });
96			} else {
97			  $list.slick('slickSetOption','autoplaySpeed', autoSpeed, true);
98			}
99		  } else {
100			// 1441px 이상 → slick OFF (그리드 복귀)
101			if ($list.hasClass('slick-initialized')) {
102			  $list.slick('unslick');
103			}
104		  }
105		};
106
107		// 리스너는 딱 한 번만 바인딩
108		if (!MSTAT_BOUND) {
109		  if (mq1440.addEventListener) mq1440.addEventListener('change', ensure);
110		  else mq1440.addListener(ensure); // 구형 브라우저
111		  $(window).on('resize orientationchange', debounce(ensure, 120));
112		  MSTAT_BOUND = true;
113		}
114
115		// 즉시 1회 적용
116		ensure();
117	  };
118
119	  // DOM 준비 후 1회 실행(아래 마크업과 slick이 로드된 상태여야 함)
120	  $(window.fn_initMstatSlider);
121}
122
123/**
124 * 통합 검색
125 */
126function fn_mainSearch() {
127    if (!document.getElementById("searchKeyword").value) {
128        alert('검색어를 입력해 주세요.');
129        document.getElementById("searchKeyword").focus();
130        return false;
131    }
132    //마토모 검색어 트래킹
133    _paq.push(['trackSiteSearch',
134        document.getElementById("searchKeyword").value,
135        '통합검색',
136        0
137    ]);
138    document.querySelector("#searchForm").submit();
139}
140
141/**
142 * 공지사항 목록 조회
143 * @returns
144 */
145function fn_openNoticeLayer(){
146    let pstNoArr = [];
147
148    if(getCookie("pstNoArr") != ""){
149        pstNoArr = getCookie("pstNoArr").split(",");
150    }
151
152    $.ajax({
153        url : ROOT +"/common/notice/selectNoticePopupList.do",
154        traditional : true,
155        data : {
156            "pstNoArr" : pstNoArr
157        },
158        dataType : "json",
159        type : "POST",
160        success: function(data) {
161            if(data.list.length > 0){
162                let divId = "";
163                let leftP = 100;
164                let topP = 25;
165
166                $.each(data.list.reverse(), function(idx, obj){
167                    noticeIdx = noticeIdx + idx;
168
169                    if(divId != ""){
170                        leftP = leftP + 50;
171                        topP = topP + 50;
172                    }
173                    divId = "noticeWrap_"+obj.pstNo;
174
175                    let nPopHtml = "<div class='layer-modal' style='z-index: "+noticeIdx+";' id='"+divId+"'>";
176                    if ($(window).width() > 1199) {
177                        nPopHtml = "<div class='layer-modal' style='z-index: "+noticeIdx+"; left:"+leftP+"px; top:"+topP+"px;' id='"+divId+"'>";
178                    }
179
180                    nPopHtml += "<div class='modal-header'>";
181                    nPopHtml += "<span class='header-tit' data-sn='"+obj.pstNo+"' title='"+obj.pstTtl+"'>"+obj.pstTtl+"</span>";
182                    nPopHtml += "<a href='javascript:void(0);' class='close' data-no='"+obj.pstNo+"' data-csday='0' onclick='fn_closeNoticeLayer(this)'><span class='hidden'>닫기</span></a>";
183                    nPopHtml += "</div>";
184                    nPopHtml += "<div class='modal-body'>";
185                    nPopHtml += "<div class='bodyCon'>";
186
187                    //이미지 링크
188                    if(obj.imgSize > 0){
189
190                        if(!dataUtilObj.isEmpty(obj.dtlInfoUrl)) {
191                            nPopHtml += "<a target='_blank' href='"+obj.dtlInfoUrl+"' title='"+obj.dtlInfoUrl+"'>";
192                        } else {
193                            nPopHtml += "<a href='javascript:void(0);' style='cursor: default;'>";
194                        }
195
196                        nPopHtml += "<img src='"+ROOT+"/common/notice/downloadBbsThumbImg.do?pstNo="+obj.pstNo+"' alt='"+obj.pstTtl+"'>";
197                        nPopHtml += "</a>";
198                    }
199
200                    //내용 텍스트
201                    if(!dataUtilObj.isEmpty(obj.pstCn)) {
202                        nPopHtml += "<div style='padding: 5px;'>" + $.parseHTML(obj.pstCn)[0].data + "</div>";
203                    }
204
205                    nPopHtml += "</div>";
206                    nPopHtml += "</div>";
207                    nPopHtml += "<div class='modal-cookie'>";
208                    nPopHtml += "<span data-no='"+obj.pstNo+"' data-csday='7' onclick='fn_closeNoticeLayer(this)'>7일간 보지않기</span>";
209                    nPopHtml += "</div>";
210                    nPopHtml += "</div>";
211
212                    $("#subbody").append(nPopHtml);
213                    $("#"+divId).draggable({handle: ".header-tit"});
214                });
215
216                $("#subbody .layer-modal").on("click", function(evt) {
217                    noticeIdx = Number(noticeIdx) + 1;
218                    this.style.zIndex = noticeIdx;
219                });
220            }
221        }
222    });
223}
224
225/**
226 * 공지사항 팝업 닫기
227 * @param el
228 * @returns
229 */
230function fn_closeNoticeLayer(el) {
231    let csday = Number($(el).data("csday"));
232    let pstNo = $(el).data("no");
233
234    if(csday > 0){
235        let pstNoArr = getCookie("pstNoArr");
236
237        if(pstNoArr != ""){
238            pstNoArr += ","+pstNo;
239        } else {
240            pstNoArr = pstNo;
241        }
242
243        fn_setCookie("pstNoArr" , pstNoArr , csday);
244    }
245
246    $("#noticeWrap_"+pstNo).remove();
247}
248
249/**
250 * 쿠키설정
251 * @param _name
252 * @param _value
253 * @param _day
254 * @returns
255 */
256function fn_setCookie(_name, _value, _day) {
257    let expire = new Date();
258    expire.setDate(expire.getDate() + _day);
259
260    cookies = _name + '=' + escape(_value) + '; path=/ ';
261    if(typeof _day != 'undefined'){
262        cookies += ';expires=' + expire.toGMTString() + ';';
263    }
264
265    document.cookie = cookies;
266}
267
268/**
269 * 쿠키 가져오기
270 * @param _name
271 * @returns
272 */
273function getCookie(_name){
274    _name = _name + '=';
275
276    let cookieData = document.cookie;
277    let start = cookieData.indexOf(_name);
278    let value = '';
279
280    if(start != -1) {
281
282        start += _name.length;
283
284        let end = cookieData.indexOf(';', start);
285        if(end == -1){
286            end = cookieData.length;
287        }
288
289        value = cookieData.substring(start, end);
290
291    }
292
293    return unescape(value);
294}
295
296/**
297 * 비디오 플레이
298 * @param el
299 */
300function fn_playVideo(el){
301    let pstNo = $(el).data("no");
302    let name = $(el).data("nm");
303
304    $("#video_div_wrap video").attr("src", "/common/notice/downloadBbsFile.do?pstNo="+pstNo+"&ordr=1&name="+name);
305    $("#video_div_wrap .video_header_title").text(name);
306    $(".video_group").show();
307}
308
309/**
310 * 이벤트 버블링 막기
311 * @param e
312 */
313function fn_stopEventBub(e) {
314    e.preventDefault();
315    e.stopPropagation();
316    return false;
317}
318
319/**
320 * 생명자원 홍보동영상
321 */
322function fn_getBrisMovie() {
323    $.ajax({
324        url : ROOT +"/portal/main/searchMovie.do",
325        dataType : "json",
326        type : "POST",
327        success: function(data) {
328            $("#main_movie .imgNews").remove();
329
330            $.each(data.list, function(idx, obj){
331                let newHtml = "<span class='imgNews'>";
332
333                if(dataUtilObj.isEmpty(obj.dtlInfoUrl)) {
334                    newHtml += "<a href='javascript:void(0);' data-no='"+obj.pstNo+"' data-nm='"+obj.pstTtl+"' title='"+obj.dtlInfoUrl+"' onclick=fn_playVideo(this);>";
335                } else {
336                    newHtml += "<a href='"+obj.dtlInfoUrl+"' target='_blank' title='"+obj.dtlInfoUrl+"'>";
337                }
338
339                newHtml += "<img src='"+ROOT+"/common/notice/downloadBbsThumbImg.do?pstNo="+obj.pstNo+"' alt='"+obj.pstTtl+"'>";
340                newHtml += "</a>";
341                newHtml += "</span>";
342
343                $("#main_movie").append(newHtml);
344            });
345
346            //생명자원 홍보동영상
347            $('#main_movie').slick({
348                slide: 'span',
349                infinite : true,
350                slidesToShow : 1,
351                slidesToScroll : 1,
352                variableWidth: false,
353                centerMode:false,
354                speed : 500,
355                margin:20,
356                arrows : true,
357                prevArrow : "<button type='button' class='btn_banner_prev'>이전</button>",
358                nextArrow : "<button type='button' class='btn_banner_next'>다음</button>",
359                autoplay : false,
360                autoplaySpeed : 5000,
361                pauseOnHover : true,
362                vertical : false,
363                draggable : false,
364                accessibility: true,
365                focusOnSelect: true,
366                dots : true,
367                dotsClass : "main_movie_dots",
368                customPaging: function (slider, i) {
369                    return  '<span>' + (i + 1) + '</span> <span class="bar">/</span>' + slider.slideCount;
370                }
371            });
372            $('.box_banner_movie .cont .btnControl .btnPause').on('click',function() {
373                $('#main_banner').slick('slickPause');
374                $(this).slideToggle(0);
375                $('.box_banner_movie .cont .btnControl .btnPlay').slideToggle(0).focus();
376            });
377            $('.box_banner_movie .cont .btnControl .btnPlay').on('click',function() {
378                $('#main_banner').slick('slickPlay');
379                $(this).slideToggle(0);
380                $('.box_banner_movie .cont .btnControl .btnPause').slideToggle(0).focus();
381            });
382
383            //$("#video_div_wrap").draggable({handle: ".video_header_title"});
384            $("#video_div_wrap .video_header_icons").on("click", function(evt){
385                $("#video_div_wrap video").attr("src", "");
386                $("#video_div_wrap .video_header_title").text("");
387                $(".video_group").hide();
388            });
389
390            document.querySelectorAll('.video_group').forEach(function(element, key){
391                element.addEventListener('wheel', fn_stopEventBub, {passive: false});
392                element.addEventListener('touchmove', fn_stopEventBub, {passive: false});
393                element.addEventListener('keydown', fn_stopEventBub, {passive: false});
394                element.addEventListener('keyup', fn_stopEventBub, {passive: false});
395                element.addEventListener('keypress', fn_stopEventBub, {passive: false});
396            });
397        }
398    });
399}
400
401/**
402 * 생명자원 홍보자료
403 */
404function fn_getPromotion() {
405    $.ajax({
406        url : ROOT +"/portal/main/searchPromotion.do",
407        dataType : "json",
408        type : "POST",
409        success: function(data) {
410            let prHtml = "";
411            $.each(data.list, function(idx, obj){
412                let fcd = "BBZIP";
413                if(obj.fileCnt === 1) {
414                    fcd = "B"
415                }
416
417                prHtml += `<span class="imgPosting">`;
418                prHtml += `<a href="/common/file/commonDownloadFile.do?sn=${obj.pstNo}&ordr=${obj.fileOrdr}&cd=${fcd}" title="${obj.pstTtl}">`;
419                prHtml += `<img src="${ROOT}/common/notice/downloadBbsThumbImg.do?pstNo=${obj.pstNo}" alt="${obj.pstTtl}">`;
420                prHtml += `<span class="tit">${obj.pstTtl}</span>`;
421                prHtml += `</a>`;
422                prHtml += `</span>`;
423            });
424
425            $("#main_posting").html(prHtml);
426
427            //BRIS 홍보자료
428            $('#main_posting').slick({
429                slide: 'span',
430                infinite: true,
431                slidesToShow: 2,
432                slidesToScroll: 1,
433                arrows: true,
434                dots: false,
435                autoplay: false,
436                speed: 500,
437                adaptiveHeight: true,
438                prevArrow: "<button type='button' class='btn_banner_prev' aria-label='이전'>이전</button>",
439                nextArrow: "<button type='button' class='btn_banner_next' aria-label='다음'>
439다음</button>",
440                appendArrows: $('.field_0202'),
441                responsive: [
442                    { breakpoint: 1024, settings: { slidesToShow: 2 }},
443                    { breakpoint: 768,  settings: { slidesToShow: 1 }}
444                ]
445            });
446        }
447    });
448}
449
450/**
451 * 생명자원 카드뉴스
452 */
453function fn_getBrisNews() {
454    $.ajax({
455        url : ROOT +"/portal/main/searchCardNews.do",
456        dataType : "json",
457        type : "POST",
458        success: function(data) {
459            $("#main_news .imgNews").remove();
460
461            $.each(data.list, function(idx, obj){
462                let rowno = idx+1;
463                let newHtml = "<span class='imgNews'><a href='javascript:void(0);' data-sn='"+obj.pstNo+"' data-rowno='"+rowno+"' onclick='fn_goToBrisNewDetail(this);'>";
464                newHtml += "<img src='"+ROOT+"/common/notice/downloadBbsThumbImg.do?pstNo="+obj.pstNo+"' alt='"+obj.pstTtl+"'>";
465                newHtml += "</a></span>";
466
467                $("#main_news").append(newHtml);
468            });
469
470            //생명자원 News
471            $('#main_news').slick({
472                slide: 'span',
473                infinite : true,
474                slidesToShow : 1,
475                slidesToScroll : 1,
476                variableWidth: false,
477                centerMode:false,
478                speed : 500,
479                margin:20,
480                arrows : true,
481                prevArrow : "<button type='button' class='btn_banner_prev'>이전</button>",
482                nextArrow : "<button type='button' class='btn_banner_next'>다음</button>",
483                autoplay : true,
484                autoplaySpeed : 5000,
485                pauseOnHover : true,
486                vertical : false,
487                draggable : false,
488                accessibility: true,
489                focusOnSelect: true,
490                dots : true,
491                dotsClass : "main_news_dots",
492                customPaging: function (slider, i) {
493                    return  '<span>' + (i + 1) + '</span> <span class="bar">/</span>' + slider.slideCount;
494                }
495            });
496            $('.box_banner_news .cont .btnControl .btnPause').on('click',function() {
497                $('#main_banner').slick('slickPause');
498                $(this).slideToggle(0);
499                $('.box_banner_news .cont .btnControl .btnPlay').slideToggle(0).focus();
500            });
501            $('.box_banner_news .cont .btnControl .btnPlay').on('click',function() {
502                $('#main_banner').slick('slickPlay');
503                $(this).slideToggle(0);
504                $('.box_banner_news .cont .btnControl .btnPause').slideToggle(0).focus();
505            });
506        }
507    });
508}
509
510/**
511 * 생명자원 카드뉴스 상세 이동
512 * @param pstNo
513 */
514function fn_goToBrisNewDetail(el) {
515    let rowno = $(el).data("rowno");
516    let pstNo = $(el).data("sn");
517    location.href = ROOT+"/portal/bbs/newsDetailPage.do?pageRow=12&pageNo=1&menuId=102&pMenuId=69&pstNo="+pstNo+"&rowNo="+rowno;
518}
519
520/**
521 * 생명자원 정보연계기관 조회
522 */
523function fn_getInsttList() {
524    $.ajax({
525        url : ROOT +"/portal/main/searchInsttList.do",
526        dataType : "json",
527        type : "POST",
528        success: function(data) {
529            let liHtml = "";
530            $.each(data.list, function(idx, obj){
531                aa = obj
532                liHtml += "<li><span class='link_name'>"+obj.artclNm2+"</span> ";
533                liHtml += "<span class='link_url'><a href='"+obj.artclNm1+"' target='_blank' title='새창열림'>"+obj.artclNm1.replace("https://","").replace("http://","").replace("www.","").split('/')[0]+"</a></span>";
534                liHtml += "</li>";
535            });
536            $("#instt_ul").html(liHtml);
537        }
538    });
539}
540
541/**
542 * 미니키보드 show/hide 토글
543 */
544function fn_keyboardToggle() {
545    let keyboardzone = document.getElementById("keyboardzone");
546    if (keyboardzone.style.display === "none") {
547        keyboardzone.style.display = "block";
548
549        document.querySelector("#autocom").classList.remove("hidden");
550    } else {
551        keyboardzone.style.display = "none";
552
553        if(!document.querySelector("#autocom").classList.contains("hidden")){
554            document.querySelector("#autocom").classList.add("hidden");
555        }
556    }
557}
558
559/**
560 * 미니키보드 초기화
561 */
562function fn_miniKeyboardInit() {
563    let keyboardzone = document.getElementById("keyboardzone");
564    let input = document.getElementById("searchKeyword");
565
566    let keyboard = new customKeyboard(
567        keyboardzone/*생성위치 태그*/,
568        input/*input을 받을 태그*/,
569        function()/*클릭 했을때*/ {
570            fn_searchAutoCompleteData(keyboard.getMiniKeyboardText());
571        },
572        function()/*esc 눌렀을때*/ {
573            keyboard.initCharList();
574            input.value = "";
575        },
576        function(e)/*앤터 눌렀을때*/ {
577        },
578        null/*키패드를 모양 값*/
579    );
580
581    input.addEventListener("click", function() {
582        //input 태그를 자신으로 설정
583        keyboard.setInput(this);
584        //키패드 클릭 이벤트 설정
585        keyboard.setClick(function() {
586            fn_searchAutoCompleteData(keyboard.getMiniKeyboardText());
587        })
588        //앤터 이벤트 설정
589        keyboard.setEnter(function(e) {
590        });
591    })
592}
593
594/**
595 * 자원통계현황 파이차트 생성
596 */
597function fn_createResourcePieChart() {
598    $.ajax({
599        url : ROOT+"/resources/rMateLayout/portal/main/resourcePieChart.xml",
600        type : "get",
601        async : true,
602        success : function(resLayout){
603            // 차트 데이터
604            rMateChartH5.create("resourcePieChart", "resourcePieChartDiv", "", "100%", "100%", ()=> {
605                rMateChartH5.calls("resourcePieChart", {
606                    "setLayout" : resLayout
607                });
608
609                $.ajax({
610                    url : ROOT +"/portal/main/searchBrisChartData.do",
611                    dataType : "json",
612                    type : "POST",
613                    success: function(data) {
614                        const types = {"P" : "식물", "M" : "미생물", "A" : "동물"};
615                        let chartData = [];
616
617                        $.each(data.list, function(idx, obj){
618                            if(!dataUtilObj.isEmpty(obj.rsrcLclsfCd)) {
619                                chartData.push({"title" : types[obj.rsrcLclsfCd], "point" : Number(obj.spcsNocs)});
620                            }
621                        });
622                        document.getElementById("resourcePieChart").setData(chartData);
623                    }
624                });
625            });
626        },
627        error : function(request, status, error) {
628            reject('error.reqAdmin')
629        }
630    });
631}
632
633/**
634 * BRIS 건수 데이터 조회
635 */
636function fn_searchBrisCntData() {
637
638    //식물
639    fn_getLifeCntData("P");
640
641    //미생물
642    fn_getLifeCntData("M");
643
644    //동물
645    fn_getLifeCntData("A");
646
647    //전통지식
648    $.ajax({
649        url : ROOT +"/portal/main/searchTrndKnlCntData.do",
650        dataType : "json",
651        type : "POST",
652        success: function(data) {
653            dataUtilObj.dynamicNumber($("#trndKnl"), data.trndKnl);
654        }
655    });
656
657    //특허, 해외특허, 특허 염기서열
658    $.ajax({
659        url : ROOT +"/portal/main/searchPtntCntData.do",
660        dataType : "json",
661        type : "POST",
662        success: function(data) {
663            dataUtilObj.dynamicNumber($("#ptntKor"), data.ptntKor);
664            dataUtilObj.dynamicNumber($("#ptntFrgn"), data.ptntFrgn);
665            dataUtilObj.dynamicNumber($("#ptntNclc"), data.ptntNclc);
666        }
667    });
668}
669
670/**
671 * 생명자원 종, 점 건수 조회
672 * @param rsrcLclsfCd
673 */
674function fn_getLifeCntData(rsrcLclsfCd) {
675    $.ajax({
676        url : ROOT +"/portal/main/searchBrisLifeCntData.do",
677        data : JSON.stringify({'rsrcLclsfCd' : rsrcLclsfCd}),
678        contentType : "application/json",
679        dataType : "json",
680        type : "POST",
681        success: function(data) {
682            dataUtilObj.dynamicNumber($(`#${rsrcLclsfCd}Jong`), data.jong);
683            dataUtilObj.dynamicNumber($(`#${rsrcLclsfCd}Jum`), data.jum);
684        }
685    });
686}
687
688/**
689 * 검색어순위 차트 생성
690 */
691function fn_createWordRankChart() {
692    const chartId = "wordRankChart";
693    $.ajax({
694        url : ROOT+"/resources/rMateLayout/portal/main/wordRankingChart.xml",
695        type : "get",
696        async: true,
697        success : function(resLayout){
698            // 차트 데이터
699            rMateChartH5.create(chartId, chartId+"Div", "", "100%", "100%", ()=> {
700                document.getElementById(chartId).showAdditionalPreloader();
701
702                rMateChartH5.calls(chartId, {
703                    "setLayout" : resLayout
704                });
705                document.getElementById(chartId).setData([]);
706
707                let fn = async ()=> {
708                    try {
709                        let dateMonthObj = new dateRange('month1');
710                        let resData = await fn_getSiteSearchKeywords({"startDt":dateMonthObj.startDate, "endDt":dateMonthObj.endDate});
711                        document.getElementById(chartId).setData(resData);
712                    } catch (e) {
713                        //alert($.i18n.prop('error.reqAdmin'));
714                    } finally {
715                        document.getElementById(chartId).removeAdditionalPreloader();
716                    }
717                }
718
719                fn();
720            });
721        },
722        error : function(request, status, error) {
723            reject('error.reqAdmin')
724        }
725    });
726}
727
728/**
729 * 검색어순위 아이템 클릭
730 * @param seriesId
731 * @param displayText
732 * @param index
733 * @param data
734 * @param values
735 */
736function fn_wordItemClick(seriesId, displayText, index, data, values) {
737    location.href = ROOT + "/portal/search/mainSearchPage.do?menuId=106&pMenuId=104&searchKeyword=" + data.label;
738}
739
740/**
741 * 마토모 검색어 순위 가져오기
742 */
743let fn_getSiteSearchKeywords = async (param) => {
744
745    let requestInfo = matomoProp.url + '/' +
746        '?module=API' +
747        '&method=Actions.getSiteSearchKeywords' +
748        '&format=json' +
749        '&idSite=' + matomoProp.idSite +
750        '&language=kor' +
751        '&period=' +
752        'range&date=' + param.startDt + ',' + param.endDt +
753        '&token_auth=' + matomoProp.tokenAuth
754    const response = fetch(requestInfo);
755    let result = await response.then((response) => response.json());
756    if(result.length ===0){
757        //데이터 없을시 재귀함수 수행
758        let startDt = param.startDt.split('-');
759        param.startDt = startDt[0] +"-"+ startDt[1] +"-"+ dataUtilObj.fn_Two(Number(startDt[2])+1);
760        result = fn_getSiteSearchKeywords(param);
761    }
762    return result;
763}
764
765/**
766 * 방문자수 가져오기
767 */
768async function fn_getVisitMatomo() {
769    try {
770        const staticCnt = 773648; //누적 방문자(마토모 설치일 2021 이전)
771        let today = new Date();
772        let toMonth = today.getMonth()+1
773        toMonth = toMonth < 10 ? '0' + toMonth.toString() : toMonth.toString();
774
775        const matomoApi =    matomoProp.url + '/' +
776            '?module=API' +
777            '&method=VisitsSummary.getVisits' +
778            '&format=json' +
779            '&idSite=' + matomoProp.idSite +
780            '&language=kor' +
781            '&token_auth=' + matomoProp.tokenAuth;
782
783        const toDayUrl = matomoApi + '&period=day&date=today'
784        const toMonthUrl = matomoApi + '&period=month&date='+ today.getFullYear()+"-"+toMonth
785        const totalUrl = matomoApi + '&period=range&date=2020-01-01,' + today.getFullYear() + "-12-31";
786
787        //방문자 접속 통계 차트URL, DATA URL
788        const urls = [
789            toDayUrl,
790            toMonthUrl,
791            totalUrl
792        ];
793        const requests = urls.map(url => fetch(url));
794
795        const [res1, res2, res3] = await Promise.all(requests);
796        const [toDayCnt, toMonthCnt, totalCnt] = await Promise.all([res1.json(), res2.json(), res3.json()]);
797
798        document.getElementById("day_user_count").innerHTML = dataUtilObj.strComma(toDayCnt.value);
799        document.getElementById("month_user_count").innerHTML = dataUtilObj.strComma(toMonthCnt.value);
800        document.getElementById("total_user_count").innerHTML = dataUtilObj.strComma(staticCnt+totalCnt.value);
801
802    } catch (e) {
803        console.error(e)
804    }
805}
806
807/**
808 * 고화질 이미지 로드
809 * @param imgno
810 */
811function loadHdImage(imgno) {
812    const hdImage = new Image();
813    hdImage.src = `${ROOT}/resources/img/main_slider${imgno}.png`;
814    hdImage.onload = function() {
815        $(`.slider_img.bg${imgno}`).css({"background": `url('${hdImage.src}') no-repeat 50% 50%`, "background-size" : "cover"});
816    }
817}
818
819/**
820 * 이동할 URL 선택
821 * @param type
822 * @returns {boolean}
823 */
824function fn_goSelectUrl(type){
825    let selectID = document.getElementById(type);
826
827    if (selectID.value.replace(/ /g, "").length == 0){
828        alert("목록을 선택하세요");
829        selectID.focus();
830        return false;
831    }else{
832        window.open(selectID.value, "_blank");
833    }
834}

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.