PageSourceSearch

https://oneulbamn.com/app/javascript/custom-common.js?v=20261002002531

js oneulbamn.com collected 2026-10-01 15:26:04 UTC 12,575 bytes, 374 lines download raw bytes

1function formatDate_(date) {
2  var year = date.getFullYear();
3  var month = String(date.getMonth() + 1).padStart(2, '0');
4  var day = String(date.getDate()).padStart(2, '0');
5  return `${year}${month}${day}`;
6}
7
8function getQueryParams() {
9  const params = {};
10  const queryString = window.location.search.substring(1);
11  const regex = /([^&=]+)=([^&]*)/g;
12  let match;
13  while (match = regex.exec(queryString)) {
14    params[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);
15  }
16  return params;
17}
18
19
20function location_callback(res, category_num, path, theme_num, iskoreacoupon){
21  var result = JSON.parse(res);
22  var group = result.location_list.group;
23  var group_html = ``;
24  var area_con = ``
25  var arr_detail_area = [];
26
27  var path = path ? path : '/service/list_l';
28
29  // Get today's and tomorrow's date
30  var today = new Date();
31  var tomorrow = new Date(today);
32  tomorrow.setDate(today.getDate() + 1);
33
34  let start_date = formatDate_(today);
35  let end_date = formatDate_(tomorrow);
36
37  var queryParams = getQueryParams();
38  if (queryParams.startdate) {
39    startDate = queryParams.startdate;
40  }
41  if (queryParams.enddate) {
42    endDate = queryParams.enddate;
43  }
44
45  for(var i=0; i<group.length; i++){
46    group_html += `
47                  <li>
48                    <button type="button" data-id='`+i+`'>`+group[i].area+`</button>
49                  </li>
50                `;
51    area_con += `
52                <div id="tab-`+i+`" class="area_con" style="display: none">
53                  <ul class="erea_list">
54              `;
55    var detail_area = group[i].child_list.child;
56    var code_list = group[i].code_list.code;
57    var bold_list = group[i].bold_list.bold;
58
59    if(!Array.isArray(detail_area)){
60      detail_area = [detail_area];
61      code_list = [code_list];
62    }
63
64    for(var j=0; j<detail_area.length; j++){
65      var classes = "";
66      var icon = "";
67      if(bold_list[j] == 'T'){
68        classes = "all_in";
69
70      }
71
72      var theme_num_param = '';
73      if(theme_num){
74        theme_num_param = '&theme='+theme_num;
75      }
76
77      var params = '';
78      if(iskoreacoupon){
79        params += '&is_koreacoupon='+iskoreacoupon;
80      }
81
82      var active = "";
83      if(i == 0){
84        active = "active";
85      }
86
87      area_con += `
88						  	 	<li class="`+classes+`"><a href="`+path+`?category_num=`+ category_num + code_list[j] +`&startdate=`+start_date+`&enddate=`+end_date+`&ppnum=2&limit=20`+theme_num_param + params +` ">`+detail_area[j]+`</a></li>`;
89    }
90    area_con += `</ul></div>`;
91  }
92  var html = `<ul class="tab">`+group_html+`</ul>`+ area_con;
93  $(".area_nav .tabs").html(html);
94  $(".area_nav .tabs #tab-0").css("display","block");
95  $(".area_nav .tabs .tab li").eq(0).addClass("active");
96  $(".area_nav .tabs .tab button").click(function(){
97    for(var i=0; i<this.parentNode.parentNode.querySelectorAll('li').length; i++){
98      this.parentNode.parentNode.querySelectorAll('li')[i].classList.remove("active");
99    }
100    this.parentNode.classList.add("active");
101    $(".area_nav .tabs .area_con").css("display","none");
102    $(".area_nav .tabs #tab-"+this.dataset.id).css("display","block");
103  });
104}
105
106function createKakaoMapObj(container){
107  return {
108    lat: null,
109    lng: null,
110    map: null,
111    data: null,
112    mapContainer: container,
113    markers: [],
114    mapOption: function(opt){
115      var baseOpt = {
116        center: new kakao.maps.LatLng(this.lat, this.lng),
117        level: 8
118      }
119      return Object.assign({}, baseOpt, opt);
120    },
121    createMap: function(opt){
122      return new kakao.maps.Map(this.mapContainer, opt);
123
124    },
125    initMap: function(lat, lng, opt){
126      this.lat = lat;
127      this.lng = lng;
128      this.map = this.createMap(this.mapOption(opt));
129      var mapTypeControl = new kakao.maps.MapTypeControl();
130      this.map.addControl(mapTypeControl, kakao.maps.ControlPosition.TOPRIGHT);
131      var zoomControl = new kakao.maps.ZoomControl();
132      this.map.addControl(zoomControl, kakao.maps.ControlPosition.RIGHT);
133      // this.fetchItem();
134      // this.addMarker(this.lat, this.lng);
135      // this.addInfoWindow(this.lat, this.lng);
136    },
137    makeLatLng: function(lat, lng){
138      return new kakao.maps.LatLng(lat, lng);
139    },
140    addMarker: function(lat, lng){
141      var markerPosition  = new kakao.maps.LatLng(lat, lng);
142      var marker = new kakao.maps.Marker({
143        position: markerPosition
144      });
145      marker.setMap(this.map);
146      return marker;
147    },
148    removeMarker: function(marker){
149      marker.setMap(null);
150    },
151    fetchItem: async function(){
152      // var response = await axios.get('/service/add_list');
153      // console.log(response);
154    },
155    addInfoWindow: function(lat, lng, data){
156      var price = data.sale_price ? this.addCommas(data.sale_price) + '원 ~' : this.addCommas(data.org_price) + '원 ~';
157      if(data.stock_yn != 'y'){
158        price = '당일마감';
159      }
160      var url = this.getDetailUrl(data.p_id);
161      var iwContent =
162        `<div class="infowindowbox" onclick="location.href='`+url+`'">
163                                <div class="ps_name">`+data.ps_name+`</div>
164                                <div class="ps_price">`+price+`</div>
165                            </div>`;
166      var iwPosition = new kakao.maps.LatLng(lat, lng);
167      var iwRemoveable = false;
168
169      // 인포윈도우를 생성하고 지도에 표시합니다
170      var infowindow = new kakao.maps.CustomOverlay({
171        map: this.map,
172        clickable: true,
173        position : iwPosition,
174        content : iwContent,
175        removable : iwRemoveable,
176        yAnchor: 1.5,
177      });
178
179      return infowindow;
180    },
181    addInfoWindow2: function(lat, lng, data){
182      var url = '/goods/view?no='+data['goods_seq'];
183      var iwContent =
184        `<div class="infowindowbox" onclick="location.href='`+url+`'">
185              <div class="ps_name">`+data.goods_name+`</div>
186              <div class="ps_price">`+data.tour_address+`</div>
187          </div>`;
188      var iwPosition = new kakao.maps.LatLng(lat, lng);
189      var iwRemoveable = false;
190
191      // 인포윈도우를 생성하고 지도에 표시합니다
192      var infowindow = new kakao.maps.CustomOverlay({
193        map: this.map,
194        clickable: true,
195        position : iwPosition,
196        content : iwContent,
197        removable : iwRemoveable,
198        yAnchor: 1.5,
199      });
200
201      return infowindow;
202    },
203    getDetailUrl: function(p_id){
204      const queryString = window.location.search;
205      const params = new URLSearchParams(queryString);
206      var startDate = params.get('startdate');
207      var endDate = params.get('enddate');
208      var ppnum = params.get('ppnum');
209      return '/service/list_detail?p_id='+p_id+'&startdate='+startDate+'&enddate='+endDate+'&ppnum='+ppnum;
210    },
211    addCommas: function(number) {
212      // 숫자를 문자열로 변환합니다.
213      let strNumber = String(number);
214
215      // 소수점이 있는 경우 정수부와 소수부를 분리합니다.
216      let parts = strNumber.split(".");
217      let integerPart = parts[0];
218      let decimalPart = parts.length > 1 ? "." + parts[1] : "";
219
220      // 3자리마다 콤마를 추가합니다.
221      let pattern = /(\d)(?=(\d{3})+$)/g;
222      integerPart = integerPart.replace(pattern, "$1,");
223
224      // 정수부와 소수부를 결합한 최종 결과를 반환합니다.
225      return integerPart + decimalPart;
226    },
227  }
228}
229
230function getSalePercent(price, salePrice){
231  price = parseFloat(price.replace(/,/g, ''));
232  salePrice = parseFloat(salePrice.replace(/,/g, ''));
233
234  if (isNaN(price) || isNaN(salePrice) || price <= 0 || salePrice <= 0) {
235    return false;
236  }
237
238  const discount = price - salePrice;
239  const percent = (discount / price) * 100;
240
241  return Math.round(percent);
242}
243
244function  themeNameToArray(ps_theme_name) {
245  // 변수의 타입이 문자열인지 확인
246  if (typeof ps_theme_name === 'string') {
247    // "|"를 기준으로 문자열을 분리하여 배열로 만듭니다.
248    let array = ps_theme_name.split('|');
249
250    // 배열의 각 요소에 적용할 함수를 정의합니다.
251    function trimElement(element) {
252      return element.trim();
253    }
254
255    // 배열의 모든 요소에 trimElement 함수를 적용하여 문자열 양쪽의 공백을 제거합니다.
256    array = array.map(trimElement);
257
258    // 빈 문자열을 제거하여 정리된 배열을 반환합니다.
259    return array.filter(element => element !== "");
260  } else {
261    // 문자열이 아닌 경우에는 빈 배열을 반환하거나 다른 처리를 수행할 수 있습니다.
262    return [];
263  }
264}
265
266function printPsThemeName(ps_theme_name, max) {
267  const themeArray = this.themeNameToArray(ps_theme_name);
268
269  if (themeArray.length <= max) {
270    return themeArray.join(', ');
271  } else {
272    var maxThemeArray = themeArray.slice(0, max);
273    var extraCount = themeArray.length - max;
274    return maxThemeArray.join(', ') + '...';
275  }
276}
277
278function removeLastCharacterIfEndsWith(str, ending) {
279  const endingLength = ending.length;
280
281  if (str === "" || str.slice(-endingLength) !== ending) {
282    return str;
283  } else {
284    return str.slice(0, -endingLength);
285  }
286}
287
288function getCurrentDateTime() {
289  var now = new Date();
290  var year = now.getFullYear();
291  var month = String(now.getMonth() + 1).padStart(2, '0');
292  var day = String(now.getDate()).padStart(2, '0');
293  var hours = String(now.getHours()).padStart(2, '0');
294  var minutes = String(now.getMinutes()).padStart(2, '0');
295  var seconds = String(now.getSeconds()).padStart(2, '0');
296
297  var formattedDateTime = year+'-'+month+'-'+day+' '+hours+':'+minutes+':'+seconds;
298  return formattedDateTime;
299}
300
301$(document).ready(function(){
302
303  $("html").on("click", ".btn-location", function(){
304    event.preventDefault();
305    pushState("location");
306    $(".area_nav .tabs").html('');
307    $(".link_area").trigger('click');
308
309    // if ($(".link_area").hasClass("show")) {
310    //   $(".link_area, .area_popup, .layer_popup_bg06, .area_popup .btn_close").removeClass('show');
311    // } else {
312    //   $(".link_area, .area_popup, .layer_popup_bg06, .area_popup .btn_close").addClass('show');
313    //   $("#layout_side").html();
314    // }
315
316
317    var category_num  = $(this).data("categorynum") ? $(this).data("categorynum") : 0;
318    var theme_num = $(this).data("theme") ? $(this).data("theme") : 0;
319    var iskoreacoupon = $(this).data("iskoreacoupon") ? $(this).data("iskoreacoupon") : null;
320
321    $.ajax({
322      type : "POST",            // HTTP method type(GET, POST) 형식이다.
323      url : "/service/location_list_",      // 컨트롤러에서 대기중인 URL 주소이다.
324      data : {
325        category_num : $(this).data("categorynum") ? $(this).data("categorynum") : 0,
326      },
327      success : function(res){
328        location_callback(res, category_num, null, theme_num, iskoreacoupon);
329        loadingStop($("#ajaxLoadingLayer"));
330      },
331      error : function(XMLHttpRequest, textStatus, errorThrown){ // 비동기 통신이 실패할경우 error 콜백으로 들어옵니다.
332        alert("지역정보를 불러올 수 없습니다. 관리자
332에게 문의 하세요");
333      }
334    });
335  });
336});
337
338function pushState(title) {
339  // 탐색 상태 변경
340  history.pushState({ title: title }, title, '#'+title);
341}
342
343function closeAllModal(){
344  $(".layer_popup").removeClass("show");
345  $(".layer_popup02").removeClass("show");
346  $(".layer_popup_bg").removeClass("show");
347  $(".link_area, .area_popup, .layer_popup_bg06, .area_popup .btn_close").removeClass('show');
348  $(".btn_roomInfo, .room_guide, .layer_popup_bg05, .room_guide .close_popup").removeClass('show');
349  $("button.filter_term, .calender_wrapper, .layer_popup_bg04, .calender_wrapper .close_popup").removeClass('show');
350  $(".filter_num, .search_num_wrapper, .layer_popup_bg03, .search_num_wrapper .close_popup, .search_num_wrapper .oneul_btn").removeClass('show');
351  $(".common_history, .latest_search, .layer_popup_bg02, .latest_search .close_popup").removeClass('show');
352  $(".button_search, .search_wrapper, .layer_popup_bg01, .search_wrapper .close_popup").removeClass('show');
353
354  if($("#side_close").hasClass('on')){
355    //$("#side_close").trigger('click');
356    side_menu_onoff();
357  }
358
359  if($(".gallery_wrapper").hasClass("show")){
360    $(".gallery_wrapper .btn_close").trigger('click');
361  }
362
363  $("#room_filter_box").removeClass("open");
364  $(".list_l").removeClass("filter_open");
365  $(".list_l2").removeClass("filter_open");
366}
367
368window.addEventListener('popstate', function(event) {
369  console.log("closeAllModal");
370  closeAllModal();
371  if(Swal !== undefined){
372    Swal.close();
373  }
374});

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.