PageSourceSearch

https://kyungil.or.kr/Scripts/dimode.common.library.js?2026100513

js kyungil.or.kr collected 2026-10-05 04:28:50 UTC 39,413 bytes, 1,132 lines download raw bytes

1var dimodeLib = {
2
3    /*
4        이 객체는 전역 객체로 모든 곳에서 접근이 가능합니다.
5    */
6
7    replaceAll: function (str, searchStr, replaceStr) {
8
9        /* 
10            이 메서드는 전체를 변경(replace)합니다.
11        */
12
13        if (str && typeof str === 'string')
14            return str.split(searchStr).join(replaceStr);
15
16        return '';
17    },
18
19    log: function (message) {
20
21        /*
22            이 메서드는 로그를 표시합니다.
23        */
24
25        try {
26            console.log(message);
27        }
28        catch (e) {
29            alert(message);
30        }
31    },
32
33    isNullOrEmpty: function (paramValue) {
34
35        /*
36            이 메서드는 값이 빈 값 혹은 null 혹은 undefined 인지 체크합니다.
37        */
38
39        var returnValue = null;
40
41        paramValue = $.trim(paramValue);
42
43        if (paramValue == '' || paramValue == null || paramValue == 'null' || paramValue == undefined) {
44            returnValue = true;
45        }
46        else {
47            returnValue = false;
48        }
49
50        return returnValue;
51    },
52
53    // 이미지 확장자 배열
54    imgArray: ['jpg', 'png', 'gif', 'jpeg'],
55
56    base64_encode: function (str) {
57
58        /*
59            이 메서드는 base64 로 암호화(encode)합니다.
60        */
61
62        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
63            return String.fromCharCode('0x' + p1);
64        }));
65    },
66
67    base64_decode: function (str) {
68
69        /*
70            이 메서드는 base64 로 복호화(decode)합니다.
71        */
72
73        return decodeURIComponent(Array.prototype.map.call(atob(str), function (c) {
74            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
75        }).join(''));
76    },
77
78    htmlEncode: function (value) {
79
80        /*
81            이 메서드는 텍스트를 html로 암호화(encode)합니다.
82        */
83
84        return $('<div/>').text(value).html();
85    },
86    htmlDecode: function (value) {
87
88        /*
89            이 메서드는 텍스트를 html로 복호화(decode)합니다.
90        */
91
92        return $('<div/>').html(value).text();
93    },
94
95    removeParameters: function (url) {
96
97        /*
98            이 메서드는 주소(url)의 매개변수를 제거합니다.
99        */
100
101        url = url.split('?');
102        url = url[0];
103        return url;
104    },
105
106    interval: null,
107    timer: {},
108    timeOut: {},
109
110    processPop: function (type) {
111
112        /* 
113            이 메서드는 레이어로 Process 내용을 띄웁니다.
114        */
115
116        if (type === 'show') {
117            clearTimeout(dimodeLib.timeOut['processPop']);
118
119            var popHtml = '';
120            if ($('body').find('#processPop').length < 1)
121                $('body').prepend('<div id="processPop"><div id="processPopWrapper"></div></div>')
122
123            popHtml = '<div class="message">';
124
125            for (var i = 0; i < 5; i++) {
126                popHtml += '<span></span>';
127            }
128
129            popHtml += '</div>';
130            popHtml += '<div class="text">로딩 중입니다.</div>';
131
132            var i = 0;
133            $('#processPop').stop().css('opacity', 1);
134            $('#processPop .message span').removeClass('transition');
135            clearInterval(dimodeLib.interval);
136            $('#processPop > #processPopWrapper').html(popHtml);
137            $('#processPop').show();
138
139            dimodeLib.interval = setInterval(function () {
140                if ($('#processPop .message span').length + 1 == i)
141                    i = 0;
142
143                $('#processPop .message span:eq(' + i + ')').toggleClass('transition');
144                i += 1;
145            }, 70);
146
147            //setTimeout(function () {
148            //    if ($('#processPop').is(':visible'))
149            //        $('#processPop').fadeOut(210);
150            //}, 7600);
151        }
152        else if (type == 'hide') {
153            if ($('#processPop').length) {
154                clearTimeout(dimodeLib.timeOut['processPop']);
155                dimodeLib.timeOut['processPop'] = setTimeout(function () {
156                    $('#processPop').stop().fadeOut(420, function () {
157                        clearInterval(dimodeLib.interval);
158                    });
159                }, 210);
160            }
161        }
162    },
163
164    bandMessage: function (type, message, time) {
165
166        /* 
167            이 메서드는 레이어로 Band 메시지를 띄웁니다.
168        */
169
170        clearTimeout(dimodeLib.timeOut['bandMessage']);
171
172        var messageHtml = '';
173        if ($('body').find('#bandMessage').length < 1)
174            $('body').prepend('<div id="bandMessage"><div id="bandMessageWrapper" class="container"></div></div>')
175
176        messageHtml = '<div class="message text-center alert alert-' + type + '">';
177        messageHtml += '<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>';
178        messageHtml += message;
179        messageHtml += '</div>';
180
181        $('#bandMessage > #bandMessageWrapper').html(messageHtml);
182        $('#bandMessage .message').hide().stop().fadeIn(300);
183
184        if (time === undefined)
185            time = 3000;
186
187        if (time !== 0) {
188            dimodeLib.timeOut['bandMessage'] = setTimeout(function () {
189                $('#bandMessage .message').stop().fadeOut(720);
190            }, time);
191        }
192    },
193
194    bandMessageCookie: function (type, text, time) {
195
196        /* 
197            이 메서드는 레이어로 Band 메시지를 띄웁니다.
198            쿠키로 저장하여 실행 후 바로 다음 페이지에서 실행합니다.
199        */
200
201        var args = {
202            type: type,
203            text: text,
204            time: time
205        };
206
207        $.cookie('bandMessage', JSON.stringify(args), { expires: 1, path: '/' });
208    },
209
210    addLoadEvent: function (func) {
211        var oldonload = window.onload;
212        if (typeof window.onload != 'function') {
213            window.onload = func;
214        }
215        else {
216            window.onload = function () {
217                oldonload();
218                func();
219            }
220        }
221    },
222
223    focusToEnd: function (inputSelector) {
224
225        /* 
226            이 메서드는 input 맨 끝에 포커스 맞춥니다.
227        */
228
229        if (inputSelector != undefined) {
230            var searchInput = $(inputSelector);
231            if (searchInput.val() != undefined) {
232                var strLength = searchInput.val().length * 2;
233
234                searchInput.focus();
235                searchInput[0].setSelectionRange(strLength, strLength);
236            }
237        }
238    },
239
240    isEmailValidate: function (paramEmail) {
241
242        /*
243            이 메서드는 이메일 형식이 맞는지 체크합니다.
244        */
245
246        var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
247        return regex.test(paramEmail);
248    },
249
250    removeElements: function (paramText, paramSelector) {
251
252        /*
253            이 메서드는 특정 요소(element)를 제거합니다.
254        */
255
256        var wrappedElement = $("<div>" + paramText + "</div>");
257
258        if (paramSelector == "all") {
259            return wrappedElement.text();
260        }
261        else {
262            wrappedElement.find(paramSelector).remove();
263            return wrappedElement.html();
264        }
265    },
266
267    googleMapInsert: function (paramMapData, paramTarget) {
268        /*
269            이 메서드는 구글맵을 입력합니다.
270        */
271
272        if (!dimodeLib.isNullOrEmpty(paramMapData.mapAddr)) {
273            // 위도와 경도 값 모두 있는지 체크
274            if (paramMapData.mapLat != 0 && paramMapData.mapLng != 0) {
275
276                // 위도와 경도 설정
277                var myLatlng = new google.maps.LatLng(paramMapData.mapLat, paramMapData.mapLng);
278
279                // 지도 옵션
280                var mapOptions = {
281                    zoom: paramMapData.mapZoom, // 확대할 수치
282                    center: myLatlng, // 위도 경도 입력
283                    mapTypeId: google.maps.MapTypeId.ROADMAP,
284                    disableDoubleClickZoom: true,
285                    scrollwheel: false
286                }
287
288                // 지도 크기 설정
289                    paramTarget.css('width', paramMapData.mapWidth).css('height', paramMapData.mapHeight);
290
291                // 지도 적용
292                var mark = function (map) {
293                    // 마커(표시점)
294                    var marker = new google.maps.Marker({
295                        position: myLatlng,
296                        map: map
297                    });
298
299                    // 마커(표시점) 등장
300                    var infowindow = new google.maps.InfoWindow();
301
302                    // 말풍선 사용할 경우
303                    /*
304                    var markerTitle = ""; // 말풍선 타이틀
305                    var markerMaxWidth = ; // 말풍선 최대 크키
306                    var contentString = "";// 말풍선 내용
307                
308                    google.maps.event.addListener(marker, 'click', function () {
309                        infowindow.open(map, marker);
310                    });
311                
312                    var infowindow = new google.maps.InfoWindow(
313                        {
314                            content: contentString,
315                            maxWidth: markerMaxWidth
316                        }
317                    );*/
318                };
319
320                    mark(new google.maps.Map(paramTarget[0], mapOptions));
321
322                //if (paramTarget.substring(0, 1) === '.') {
323                //    var target = paramTarget.replace('.', '');
324                //    var classes = document.getElementsByClassName(target);
325
326                //    if (classes.length) {
327                //        mark(new google.maps.Map(classes[0], mapOptions));
328                //    }
329                //    else {
330                //        return false;
331                //    }
332                //}
333                //else {
334                //    var target = paramTarget.replace('#', '');
335                //    var id = document.getElementById(target);
336                //    if (!dimodeLib.isNullOrEmpty(id))
337                //        mark(new google.maps.Map(id, mapOptions));
338                //    else
339                //        return false;
340                //}
341            }
342        }
343    },
344	
345	//WayM KakaoMap S
346    kakaoMapInsert: function (paramMapData, paramTarget) {
347        if (!dimodeLib.isNullOrEmpty(paramMapData.mapAddr)) {
348            // 위도와 경도 값 모두 있는지 체크
349            if (paramMapData.mapLat != 0 && paramMapData.mapLng != 0) {
350                // 지도 크기 설정
351                paramTarget.css('width', paramMapData.mapWidth).css('height', paramMapData.mapHeight);
352
353                //var targetId = paramTarget.attr('id').replace(new RegExp('#', 'g'), '<br />');
354
355                var mapContainer = paramTarget[0], // 지도를 표시할 div 
356                    mapOption = {
357                        center: new kakao.maps.LatLng(paramMapData.mapLat, paramMapData.mapLng), // 지도의 중심좌표
358                        level: paramMapData.mapZoom * -1// 지도의 확대 레벨
359                    };
360
361                var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
362
363                var zoomControl = new kakao.maps.ZoomControl();
364                map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
365
366                // 마커가 표시될 위치입니다
367                var markerPosition = new kakao.maps.LatLng(paramMapData.mapLat, paramMapData.mapLng);
368
369                // 마커를 생성합니다
370                var marker = new kakao.maps.Marker({
371                    position: markerPosition
372                });
373
374                // 마커가 지도 위에 표시되도록 설정합니다
375                marker.setMap(map);
376            }
377        }
378    },
379    //WayM KakaoMap E
380
381
382    getColors: function (paramColorType, paramIndex) {
383
384        /*
385            이 메서드는 색상의 조합을 가져옵니다.
386        */
387
388        var colorArray = new Array();
389
390        switch (paramColorType) {
391            case 'rob':
392                colorArray = ['#296FAB', '#D80027', '#FF8A00'];
393                break;
394            case 'orange':
395                colorArray = ['#EB5606', '#FE8F02', '#FFA800'];
396                break;
397            case 'blue':
398                colorArray = ['#1a87cf', '#0088cc', '#276b8c', '#1368a6', '#1570a6', '#8183c3'];
399                break;
400            case 'rainbow':
401                colorArray = ['#d90f42', '#fb9b00', '#1dc4ac', '#0096cc', '#003c9e', '#00137a', '#6e1a1f'];
402                break;
403        }
404
405        var i = paramIndex % (colorArray.length);
406
407        return colorArray[i];
408    },
409
410    addArgument: function (paramSearch, paramArgKey, paramArgValue) {
411
412        /*
413            이 메서드는 URL에 매개변수를 추가합니다.
414            이미 값이 있을 경우 수정합니다.
415        */
416
417        var search = paramSearch;
418        var searchArray = [];
419
420        if (!dimodeLib.isNullOrEmpty(search)) {
421            search = search.replace('?', '');
422            searchArray = search.split('&');
423
424            for (var i in searchArray) {
425                var key = searchArray[i].split('=')[0];
426                if (key == paramArgKey)
427                    searchArray.splice(i, 1);
428            }
429        }
430
431        searchArray.push(paramArgKey + '=' + paramArgValue);
432        return '?' + searchArray.join('&');
433    },
434
435    removeArgument: function (paramSearch, paramArgKey) {
436
437        /*
438            이 메서드는 URL에 매개변수를 삭제합니다.
439        */
440
441        var search = paramSearch;
442        var searchArray = [];
443
444        if (!dimodeLib.isNullOrEmpty(search)) {
445            search = search.replace('?', '');
446            searchArray = search.split('&');
447
448            for (var i in searchArray) {
449                var key = searchArray[i].split('=')[0];
450
451                if (key == paramArgKey)
452                    searchArray.splice(i, 1);
453            }
454        }
455
456        if (searchArray.length)
457            return '?' + searchArray.join('&');
458        else
459            return '';
460    },
461
462    isValidated: function (paramSelector) {
463
464        /*
465            이 메서드는 유효성 검사를 합니다.
466        */
467
468        var required = $(paramSelector).find('.required');
469
470        for (var i = 0; i < required.length; i++) {
471            var eachElem = required.eq(i);
472            var value = '';
473            var tagName = eachElem[0].tagName;
474
475            switch (tagName) {
476                case 'SELECT':
477                    value = eachElem.find('option:selected').val();
478                    break;
479
480                case 'INPUT':
481                    switch (eachElem.attr('type')) {
482                        case 'radio':
483                            var name = eachElem.attr('name');
484                            value = $(paramSelector).find('input.required[type=radio][name=' + name + ']:checked').val();
485                            break;
486                        case 'checkbox':
487                            var name = eachElem.attr('name');
488                            value = $(paramSelector).find('input.required[type=c
488heckbox][name=' + name + ']:checked').val();
489                            break;
490                        default:
491                            value = eachElem.val();
492                            break;
493                    }
494                    break;
495
496                default:
497                    value = eachElem.val();
498                    break;
499            }
500
501            if (dimodeLib.isNullOrEmpty(value)) {
502                var alertMessage = eachElem.attr('data-alert');
503
504                if (!dimodeLib.isNullOrEmpty(alertMessage))
505                    dimodeLib.bandMessage('warning', alertMessage);
506                else
507                    dimodeLib.bandMessage('warning', '필수항목을 입력해주세요.');
508
509                eachElem.focus();
510                return false;
511            }
512            else if (tagName == 'INPUT') {
513                var compareLength = value.length;
514                var maxLength = eachElem.attr('data-max-length');
515                var minLength = eachElem.attr('data-min-length');
516                var type = eachElem.attr('type');
517                var check = eachElem.attr('data-check');
518                var checkFor = eachElem.attr('data-check-for');
519
520                switch (type) {
521                    case 'email':
522                        if (!dimodeLib.isEmailValidate(value)) {
523                            dimodeLib.bandMessage('warning', '올바른 이메일 형식이 아닙니다.');
524                            eachElem.focus();
525                            return false;
526                        }
527                        break;
528                }
529
530                if (!dimodeLib.isNullOrEmpty(check)) {
531                    var checkResult = '';
532
533                    switch (check) {
534                        case 'duplicated':
535                            switch (checkFor) {
536                                case 'id':
537                                    $.ajax({
538                                        url: '/Account/IdCheck/',
539                                        type: 'POST',
540                                        async: false,
541                                        data: 'paramId=' + value,
542                                        success: function (response) {
543                                            checkResult = response;
544                                        },
545                                        error: function () {
546                                            checkResult = 'error';
547                                        }
548                                    })
549                                    break;
550
551                                case 'email':
552                                    $.ajax({
553                                        url: '/Account/EmailCheck/',
554                                        type: 'POST',
555                                        async: false,
556                                        data: 'paramEmail=' + value,
557                                        success: function (response) {
558                                            checkResult = response;
559                                        },
560                                        error: function () {
561                                            checkResult = 'error';
562                                        }
563                                    })
564                                    break;
565                            }
566                            break;
567                    }
568
569                    if (checkResult == 'error') {
570                        dimodeLib.bandMessage('danger', '오류가 있습니다.', 0);
571                        eachElem.focus();
572                        return false;
573                    }
574                    else if (checkResult !== "validated") {
575                        switch (checkFor) {
576                            case 'email':
577                                dimodeLib.bandMessage('warning', '중복 이메일입니다. 다른 이메일 주소를 입력해주세요.');
578                                break;
579
580                            case 'id':
581                                dimodeLib.bandMessage('warning', '중복 아이디입니다. 다른 아이디를 입력해주세요.');
582                                break;
583                        }
584                        eachElem.focus();
585                        return false;
586                    }
587                }
588
589                if (compareLength > maxLength) {
590                    dimodeLib.bandMessage('warning', '최대 ' + maxLength + '자까지 입력할 수 있습니다(현재 : ' + compareLength + '자).');
591                    eachElem.focus();
592                    return false;
593                }
594                else if (compareLength < minLength) {
595                    dimodeLib.bandMessage('warning', '최소 ' + minLength + '자는 입력해야 합니다(현재 : ' + compareLength + '자).');
596                    eachElem.focus();
597                    return false;
598                }
599            }
600        }
601
602        return true;
603    },
604
605    dieTimeout: null,
606
607    die: function (paramTarget) {
608        paramTarget.addClass('hide die');
609
610        dimodeLib.dieTimeout = setTimeout(function () {
611            if (paramTarget.hasClass('hide'))
612                paramTarget.remove();
613        }, 5720);
614
615        dimodeLib.bandMessage('success', '삭제하였습니다. <a class="revival" onclick="dimodeLib.revival()">되살리기</a>');
616    },
617
618    revival: function () {
619        clearTimeout(dimodeLib.dieTimeout);
620        $('.die').removeClass('hide');
621        $('.die').removeClass('die');
622        dimodeLib.bandMessage('success', '복구하였습니다.');
623    },
624
625    deviceCheck: {
626        Android: navigator.userAgent.match(/Android/i),
627        BlackBerry: navigator.userAgent.match(/BlackBerry/i),
628        iOS: navigator.userAgent.match(/iPhone|iPad|iPod/i),
629        Opera: navigator.userAgent.match(/Opera Mini/i),
630        Windows: navigator.userAgent.match(/IEMobile/i),
631    },
632
633    rgb2hex: function (rgb) {
634        if (rgb.search("rgb") == -1) {
635            return rgb;
636        }
637        else {
638            rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
639            function hex(x) {
640                return ("0" + parseInt(x).toString(16)).slice(-2);
641            }
642
643            return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
644        }
645    },
646
647    getRandomNumber: function (startNum, endNum) {
648        endNum += 1;
649        return Math.floor(Math.random() * (startNum - endNum)) + endNum;
650    },
651
652    modal: {
653        checkHasMore: function (paramApplySelector, paramCount1, paramCount2) {
654            if (paramCount1 === 0 || paramCount2 === undefined)
655                $(paramApplySelector + ' .more-area').hide();
656            else if (Number(paramCount1) === Number(paramCount2))
657                $(paramApplySelector + ' .more-area').hide();
658            else
659                $(paramApplySelector + ' .more-area').show();
660        },
661
662        drawLine: function (paramModalSelector, time) {
663            setTimeout(function () {
664                var leftArea = $(paramModalSelector).find('.left-area');
665                var rightArea = $(paramModalSelector).find('.right-area');
666
667                if (leftArea.height() > rightArea.height())
668                    leftArea.css('border-right', '1px solid #e5e5e5')
669                else
670                    rightArea.css('border-left', '1px solid #e5e5e5')
671            }, time);
672        },
673
674        applyToElem: function (paramModalSelector, paramObj) {
675            $(paramModalSelector + ' .style-input').each(function () {
676                var attr = $(this).attr('data-attr');
677                var measure = $(this).attr('data-measure');
678                var value = $(this).val();
679
680                if (!dimodeLib.isNullOrEmpty(value) && value.indexOf('%') === -1) {
681                    switch (measure) {
682                        case 'px':
683                            value = value.replace('px', '') + 'px';
684                            break;
685                        case 'percent':
686                            value = value.replace('%', '') + '%';
687                            break;
688                    }
689                }
690
691                paramObj.css(attr, value);
692            });
693        },
694
695        applyToModal: function (paramApplyTarget, paramElem) {
696            var style = paramElem.attr('style');
697            var styleObj = {};
698
699            if (style !== undefined) {
700                var styles = style.split(';');
701                for (var i in styles) {
702                    if (!dimodeLib.isNullOrEmpty(styles[i])) {
703                        var styleArr = styles[i].split(':');
704                        if (styleArr.length === 2) {
705                            var key = styleArr[0].trim();
706                            var value = styleArr[1].replace('px', '').trim();
707                            styleObj[key] = value;
708                        }
709                    }
710                }
711            }
712
713            if (styleObj['width'] == undefined)
714                styleObj['width'] = '';
715
716            if (styleObj['height'] == undefined)
717                styleObj['height'] = '';
718
719            $(paramApplyTarget + ' .style-input').each(function () {
720                var attr = $(this).attr('data-attr');
721
722                if (!dimodeLib.isNullOrEmpty(attr)) {
723                    var value = ''
724
725                    if (styleObj[attr] != undefined) {
726                        value = styleObj[attr];
727                    }
728                    else {
729                        value = paramElem.css(attr);
730                        if (!dimodeLib.isNullOrEmpty(value)) {
731                            if (value.indexOf('rgb') != '-1') {
732                                if (value == 'rgba(0, 0, 0, 0)') {
733                                    value = '';
734                                }
735                                else {
736                                    var rgbaArr = (dimodeLib.replaceAll(value, ', ', ',').split(' '));
737                                    if (rgbaArr.length > 1)
738                                        value = rgbaArr[0];
739
740                                    value = dimodeLib.rgb2hex(value);
741                                }
742                            }
743                            else if (attr == 'border-style') {
744                                var valueArr = value.split(' ');
745
746                                if (valueArr.length > 1) {
747                                    for (var i in valueArr) {
748                                        if (valueArr[i] != 'none') {
749                                            value = valueArr[i];
750                                            break;
751                                        }
752                                    }
753                                }
754                            }
755
756                            value = value.replace('px', '');
757                        }
758                    }
759
760                    $(this).val(value);
761                }
762            });
763        }
764		
765		/*
766        //WayM 2024-09-12 S
767        applyToModal: function (paramApplyTarget, paramElem) {
768            var style = paramElem.attr('style');
769            var styleObj = {};
770            
771            if (style !== undefined) {
772                var styles = style.split(';');
773                for (var i in styles) {
774                    if (!dimodeLib.isNullOrEmpty(styles[i])) {
775                        var styleArr = styles[i].split(':');
776                        if (styleArr.length >= 2) {
777                            var key = styleArr[0].trim();
778                            var valueRest = '';
779                            for (var j = 1; j < styleArr.length; j++) {
780                                valueRest += styleArr[j].trim();
781                            }
782                            valueRest = valueRest.replace('px', '').trim();
783                            styleObj[key] = valueRest;
784                        }
785                    }
786                }
787            }
788
789            if (styleObj['width'] == undefined)
790                styleObj['width'] = '';
791
792            if (styleObj['height'] == undefined)
793                styleObj['height'] = '';
794
795            $(paramApplyTarget + ' .style-input').each(function () {
796                var attr = $(this).attr('data-attr');
797
798                if (!dimodeLib.isNullOrEmpty(attr)) {
799                    var value = ''
800
801                    for (var key in styleObj) {
802                        if (styleObj.hasOwnProperty(key)) {
803                            if (key == attr) {
804                                value = styleObj[key];
805                                break;
806                            }
807                        }
808                    }
809
810                    if (!dimodeLib.isNullOrEmpty(value)) {
811                        if (value.indexOf('rgb') != '-1') {
812                            if (value == 'rgba(0, 0, 0, 0)') {
813                                value = '';
814                            }
815                            else {
816                                var rgbaArr = (dimodeLib.replaceAll(value, ', ', ',').split(' '));
817                                if (rgbaArr.length > 1)
818                                    value = rgbaArr[0];
819
820                                value = dimodeLib.rgb2hex(value);
821                            }
822                        }
823                        else if (attr == 'border-style') {
824                            var valueArr = value.split(' ');
825
826                            if (valueArr.length > 1) {
827                                for (var i in valueArr) {
828                                    if (valueArr[i] != 'none') {
829                                        value = valueArr[i];
830                                        break;
831                                    }
832                                }
833                            }
834                        }
835
836                        value = value.replace('px', '');
837                    }
838
839                    //없을 경우 초기화 값 설정
840                    //if (attr == 'background-size') {
841                    //    if (value == '') {
842                    //        value = 'cover';
843                    //    }
844                    //} else if (attr == 'background-position') {
845                    //    if (value == '') {
846                    //        value = 'center center';
847                    //    }
848                    //}
849
850                    $(this).val(value);
851                }
852            });
853        }
854        */
855        //WayM 2024-09-12 E
856    },
857
858    numberFormat: function (paramNumber) {
859        return paramNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
860    },
861
862    file: {
863        getImagePath: function (paramFileU) {
864            var returnValue = '';
865
866            if (!dimodeLib.isNullOrEmpty(paramFileU)) {
867                $.ajax({
868                    url: '/File/GetFilePath/',
869                    async: false,
870                    type: 'POST',
871                    data: 'paramFileU=' + paramFileU,
872                    success: function (response) {
873                        returnValue = response;
874                    },
875                    error: function () {
876                        dimodeLib.bandMessage('danger', '오류가 있습니다.#2', 0);
877                    }
878                });
879            }
880
881            return returnValue;
882        },
883
884        getExtension: function (paramValue) {
885            var nameArr = paramValue.split('.');
886            return nameArr[nameArr.length - 1];
887        }
888    },
889
890    getUrlParam: function (paramKey) {
891        var returnValue = '';
892        var url = location.href;
893
894        if (url.split('?').length > 1) {
895            var paramTxt = url.split('?')[1];
896            paramTxt = paramTxt.replace('?', '');
897            var params = paramTxt.split('&');
898
899            for (var i in params) {
900                if (params[i].split('=')[0] == paramKey) {
901                    returnValue = params[i].split('=')[1];
902                    break;
903                }
904            }
905        }
906        return returnValue;
907    },
908
909    getDate: function (date) {
910        var returnValue = '';
911        var now = date ? date : new Date();
912        var dd = now.getDate();
913        var mm = now.getMonth() + 1;
914        var yyyy = now.getFullYear();
915        console.log(yyyy);
916
917
918        if (dd < 10)
919            dd = '0' + dd;
920
921        if (mm < 10)
922            mm = '0' + mm;
923
924        returnValue = yyyy + '' + mm + '' + dd;
925        return returnValue;
926    },
927
928    openPop: function (url, target, opt) {
929        if (window.cordova && cordova.InAppBrowser)
930            cordova.InAppBrowser.open(url, target ? target : '_blank', 'location=yes,EnableViewPortScale=yes');
931        else
932            window.open(url, '', opt ? opt : '');
933    },
934
935    renew: function (val) {
936        return val ? JSON.parse(JSON.stringify(val)) : '';
937    },
938
939    resizeIframe: function (obj) {
940        var func = function () {
941            var height = obj.contentWindow.document.body.scrollHeight;
942
943            if (height > $(obj).parent().height())
944                height = $(obj).parent().height();
945
946            obj.style.height = height + 'px';
947        }
948        func();
949
950        setTimeout(function () {
951            func();
952        }, 420);
953    },
954    isJson: function (val) {
955        try {
956            JSON.parse(val);
957            return true;
958        }
959        catch (e) {
960            return false;
961        }
962    },
963    getParsedJson: function (val) {
964        try {
965            return JSON.parse(val);
966        }
967        catch (e) {
968            return val;
969        }
970    },
971    getDateFormat: function (value) {
972        if (value) {
973            var date, year, month, day;
974
975            if (typeof value === 'string')
976                value = value.substring(0, 10);
977
978            if (typeof value.getMonth === 'function' || typeof value === 'string' && dimodeLib.validatedDate(value.length)) {
979                date = new Date(value);
980                year = date.getFullYear();
981                month = '' + (date.getMonth() + 1);
982                day = '' + date.getDate();
983
984                if (month.length < 2)
985                    month = '0' + month;
986
987                if (day.length < 2)
988                    day = '0' + day;
989
990                return [year, month, day].join('-');
991            }
992        }
993
994        return value;
995    },
996    validatedDate: function (value) {
997        value = dimodeLib.replaceAll(value, '-', '');
998
999        if (value && value.length >= 8 && Number(value)) {
1000            var year = Number(value.substr(0, 4));
1001            var month = Number(value.substr(4, 2));
1002            var day = Number(value.substr(6, 2));
1003            var dayCond = day > 0;
1004            var short = [1, 3, 5, 7, 8, 10, 12];
1005            var shorter = [4, 6, 9, 11];
1006            var shortest = [2];
1007            var isLeapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
1008            var februaryDay = isLeapYear ? 29 : 28;
1009
1010            if (short.indexOf(month) >= 0)
1011                dayCond = dayCond && day <= 31;
1012            else if (shorter.indexOf(month) >= 0)
1013                dayCond = dayCond && day <= 30;
1014            else if (shortest.indexOf(month) >= 0)
1015                dayCond = dayCond && day <= februaryDay;
1016
1017            return year >= 1900 && year < 3000 && (month >= 1 && month <= 12) && dayCond;
1018        }
1019
1020        return false;
1021    },
1022    processLine: function (status) {
1023        switch (status) {
1024            case 'start':
1025                if (!$('#processLine').length)
1026                    $(document.body).append('<div id="processLine" class="process-line dimode-theme background"></div>');
1027
1028                $('#processLine').attr('data-status', 'init');
1029                setTimeout(function () {
1030                    $('#processLine').attr('data-status', 'start');
1031
1032                    clearTimeout(dimodeLib.timer['processLine1']);
1033                    clearTimeout(dimodeLib.timer['processLine2']);
1034                    clearTimeout(dimodeLib.timer['processLine3']);
1035
1036                    dimodeLib.timer['processLine1'] = setTimeout(function () {
1037                        if ($('#processLine').attr('data-status') !== 'init')
1038                            $('#processLine').attr('data-status', 'ing');
1039                    }, 2500);
1040
1041                    dimodeLib.timer['processLine2'] = setTimeout(function () {
1042                        if ($('#processLine').attr('data-status') !== 'init')
1043                            $('#processLine').attr('data-status', 'init');
1044                    }, 57500);
1045                });
1046                break;
1047
1048            case 'end':
1049                setTimeout(function () {
1050                    if ($('#processLine').attr('data-status') !== 'init') {
1051                        $('#processLine').attr('data-status', 'end');
1052
1053                        dimodeLib.timer['processLine3'] = setTimeout(function () {
1054                            $('#processLine').attr('data-status', 'init');
1055                        }, 500);
1056                    }
1057                });
1058                break;
1059        }
1060    },
1061    isHolyDay: function (d) {
1062        var year = d.getFullYear();
1063        var month = d.getMonth() + 1;
1064        var date = d.getDate();
1065        var lunarDate;
1066        var solars = [
1067            { month: 1, date: 1 },
1068            { month: 3, date: 1 },
1069            { month: 5, date: 1 },
1070            { month: 5, date: 5 },
1071            { month: 6, date: 6 },
1072            { month: 8, date: 15 },
1073            { month: 10, date: 3 },
1074            { month: 10, date: 9 },
1075            { month: 12, date: 25 }
1076        ];
1077        var lunars = [
1078            { month: 12, date: 30 },
1079            { month: 1, date: 1 },
1080            { month: 1, date: 2 },
1081            { month: 4, date: 8 },
1082            { month: 8, date: 14 },
1083            { month: 8, date: 15 },
1084            { month: 8, date: 16 }
1085        ];
1086
1087        for (var i in solars) {
1088            if (solars[i].month === month && solars[i].date === date)
1089                return true;
1090        }
1091
1092        lunarDate = lunar.getResult(year, month, date);
1093
1094        for (var j in lunars) {
1095            if (lunars[j].month === lunarDate.getMonth() + 1 && lunars[j].date === lunarDate.getDate())
1096                return true;
1097        }
1098
1099        return false;
1100    },
1101    getByteCount: function (str) {
1102        var returnValue = 0;
1103
1104        for (var i = 0; i < str.length; i += 1) {
1105            var c = str.charAt(i);
1106
1107            if (c.charCodeAt() <= 255)
1108                returnValue += 1;
1109            else
1110                returnValue += 2;
1111        }
1112
1113        return returnValue;
1114    },
1115    getSunday: function (d) {
1116        var date;
1117
1118        if (typeof d.getMonth === 'function' && typeof d.getMonth === 'function')
1119            date = d;
1120        else
1121            date = new Date(d);
1122
1123        for (var i = 0; i < 7; i += 1) {
1124            if (date.getDay() === 0)
1125                return dimodeLib.getDateFormat(date);
1126
1127            date.setDate(date.getDate() - 1);
1128        }
1129
1130        return null;
1131    },
1132};

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.