1(function($){ 2 "use strict"; 3 4 window.gdlr_debounce_function = function(func, threshold, execAsap){ 5 6 var timeout; 7 8 return function debounced(){ 9 10 var obj = this, args = arguments; 11 12 function delayed(){ 13 if( !execAsap ){ 14 func.apply(obj, args); 15 } 16 timeout = null; 17 }; 18 19 if( timeout ){ 20 clearTimeout(timeout); 21 }else if( execAsap ){ 22 func.apply(obj, args); 23 } 24 timeout = setTimeout(delayed, threshold); 25 }; 26 } 27 28 window.gdlr_encode_utf8 = function(s){ 29 return unescape(encodeURIComponent(s)); 30 } 31 32 $.fn.gdlr_datepicker_range = function(){ 33 var block_date_val = $(this).attr('data-block'); 34 var gdlr_dfm = ($(this).attr('data-dfm'))? $(this).attr('data-dfm'): "yy-mm-dd"; 35 36 var min_date = 0; 37 if( $(this).attr('data-current-date') ){ 38 min_date = new Date($(this).attr('data-current-date') + 'T00:00:00+00:00'); 39 min_date = new Date(min_date.getTime() + (min_date.getTimezoneOffset() * 60000)); 40 } 41 42 $(this).datepicker({ 43 minDate: min_date, 44 dateFormat : gdlr_dfm, 45 numberOfMonths: [1, 2], 46 beforeShowDay: function(date) { 47 if( block_date_val ){ 48 var block_date = JSON.parse(block_date_val); 49 var current_date = $.datepicker.formatDate('yy-mm-dd', date); 50 51 if( block_date.indexOf(current_date) > -1 ){ 52 return [false]; 53 } 54 } 55 56 var date1 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val()); 57 var date2 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val()); 58 return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "dp-highlight" : ""]; 59 }, 60 onSelect: function(dateText, inst) { 61 var date1 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val()); 62 var date2 = $.datepicker.parseDate('yy-mm-dd', $("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val()); 63 if (!date1 || date2) { 64 $("#gdlr-check-in").datepicker('setDate', dateText); 65 $("#gdlr-check-out").val(''); 66 $("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val(''); 67 } else { 68 $("#gdlr-check-out").datepicker('setDate', dateText).trigger('change'); 69 } 70 }, 71 closeText: objectL10n.closeText, 72 currentText: objectL10n.currentText, 73 monthNames: objectL10n.monthNames, 74 monthNamesShort: objectL10n.monthNamesShort, 75 dayNames: objectL10n.dayNames, 76 dayNamesShort: objectL10n.dayNamesShort, 77 dayNamesMin: objectL10n.dayNamesMin, 78 firstDay: objectL10n.firstDay 79 }); 80 } 81 82 $.fn.gdlr_datepicker = function(){ 83 $(this).each(function(){ 84 if($(this).hasClass('hasDatepicker')){ return; } 85 86 var t = $(this); 87 var block_date_val = JSON.parse($(this).attr('data-block')); 88 89 var min_date = 0; 90 var prev_block = false; 91 if( $(this).attr('data-current-date') ){ 92 min_date = new Date($(this).attr('data-current-date') + 'T00:00:00+00:00'); 93 min_date = new Date(min_date.getTime() + (min_date.getTimezoneOffset() * 60000)); 94 } 95 96 $(this).datepicker({ 97 dateFormat : ($(this).attr('data-dfm'))? $(this).attr('data-dfm'): "yy-mm-dd", 98 minDate: min_date, 99 beforeShowDay: function(date){ 100 if( block_date_val ){ 101 var current_date = $.datepicker.formatDate('yy-mm-dd', date); 102 if( t.is('#gdlr-check-out') ){ 103 var tmp_date = new Date(); 104 tmp_date.setTime(date.getTime() - 86400000); 105 var prev_date = $.datepicker.formatDate('yy-mm-dd', tmp_date); 106 return [block_date_val.indexOf(prev_date) == -1]; 107 108 }else{ 109 return [block_date_val.indexOf(current_date) == -1]; 110 } 111 } 112 113 return [true]; 114 }, 115 altField: $(this).siblings('.gdlr-datepicker-alt'), 116 altFormat: "yy-mm-dd", 117 changeMonth: true, 118 changeYear: true, 119 onSelect: function(dateText, inst){ 120 $(this).trigger('change'); 121 $('#gdlr-datepicker-range').datepicker('refresh'); 122 }, 123 closeText: objectL10n.closeText, 124 currentText: objectL10n.currentText, 125 monthNames: objectL10n.monthNames, 126 monthNamesShort: objectL10n.monthNamesShort, 127 dayNames: objectL10n.dayNames, 128 dayNamesShort: objectL10n.dayNamesShort, 129 dayNamesMin: objectL10n.dayNamesMin, 130 firstDay: objectL10n.firstDay 131 }); 132 133 var current_date = new Date($(this).val() + 'T00:00:00+00:00'); 134 current_date = new Date(current_date.getTime() + (current_date.getTimezoneOffset() * 60000)); 135 136 $(this).datepicker('setDate', current_date); 137 }); 138 139 // verify the checkin out date 140 var tmp_chkin = $(this).filter("#gdlr-check-in").siblings('.gdlr-datepicker-alt').val(); 141 var tmp_chkout = $(this).filter("#gdlr-check-out").siblings('.gdlr-datepicker-alt').val(); 142 143 if( tmp_chkin == tmp_chkout ){ 144 var tmp_chkout_date = new Date(tmp_chkin + 'T00:00:00Z'); 145 tmp_chkout_date.setDate(tmp_chkout_date.getDate() + 1); 146 147 $(this).filter("#gdlr-check-out").datepicker('setDate', tmp_chkout_date); 148 } 149 150 } 151 152 $.fn.gdlr_single_booking = function(){ 153 154 var resv_bar = $(this); 155 $(this).find('.gdlr-datepicker').gdlr_datepicker(); 156 157 // check in date and night num change 158 $(this).on('change', '#gdlr-night, #gdlr-check-in', function(){ 159 var check_in = resv_bar.find('#gdlr-check-in'); 160 var check_out = resv_bar.find('#gdlr-check-out'); 161 162 var min_night = check_out.attr('data-min-night'); 163 min_night = (min_night)? parseInt(min_night): 1; 164 var night_num = resv_bar.find('#gdlr-night'); 165 166 if( check_in.val() ){ 167 var check_out_date = check_in.datepicker('getDate', '+1d'); 168 check_out_date.setDate(check_out_date.getDate() + parseInt(night_num.val())); 169 170 var check_out_min = check_in.datepicker('getDate', '+1d'); 171 check_out_min.setDate(check_out_min.getDate() + min_night); 172 173 check_out.datepicker('option', 'minDate', check_out_min); 174 check_out.datepicker('setDate', check_out_date); 175 } 176 }); 177 178 // check out date change 179 $(this).on('change', '#gdlr-check-out', function(){ 180 var check_in = resv_bar.find('#gdlr-check-in').datepicker('getDate'); 181 var check_out = $(this).datepicker('getDate'); 182 var date_diff = Math.round((check_out - check_in) / 86400000); // 1000/60/60/24 183 184 if( check_in && date_diff > 0 ){ 185 var night_num = resv_bar.find('#gdlr-night'); 186 if( night_num.children('option[value="' + date_diff + '"]').length == 0 ){ 187 night_num.append('<option value="' + date_diff + '" >' + date_diff + '</option>') 188 } 189 $('#gdlr-night').val(date_diff); 190 } 191 }); 192 193 // amount change 194 $(this).on('change', '#gdlr-room-number', function(){ 195 var amount = parseInt($(this).val()); 196 var resv_room = resv_bar.find('#gdlr-reservation-people-amount-wrapper'); 197 var room_diff = amount - resv_room.children().length; 198 if( room_diff > 0 ){ 199 for( var i=0; i<room_diff; i++ ){ 200 var new_room = resv_room.children(':first-child').clone().hide(); 201 new_room.find('.gdlr-reservation-people-title span').html(resv_room.children().length + 1); 202 new_room.appendTo(resv_room).slideDown(200); 203 } 204 }else if( room_diff < 0 ){ 205 resv_room.children().slice(room_diff).slideUp(200, function(){ 206 $(this).remove(); 207 }); 208 } 209 }); 210 211 $(this).submit(function(){ 212 if( $(this).find('select[name=gdlr-hotel-branches]').val() == '' ){ 213 $(this).find('#please-select-branches').slideDown(); 214 return false;
215 } 216 }); 217 } 218 219 $.fn.gdlr_hotel_booking = function(){ 220 221 var area = { 222 wrapper: $(this), 223 resv_bar: $(this).find('#gdlr-reservation-bar'), 224 room_form: $(this).find('#gdlr-reservation-bar-room-form'), 225 date_form: $(this).find('#gdlr-reservation-bar-date-form'), 226 summary_form: $(this).find('#gdlr-reservation-bar-summary-form'), 227 service_form: $(this).find('#gdlr-reservation-bar-service-form'), 228 229 proc_bar: $(this).find('#gdlr-booking-process-bar'), 230 content_area: $(this).find('#gdlr-booking-content-inner'), 231 232 }; 233 234 var resv_bar = { 235 init: function(){ 236 237 // check in date and night num change 238 area.resv_bar.on('change', '#gdlr-night, #gdlr-check-in', function(){ 239 var check_in = area.resv_bar.find('#gdlr-check-in'); 240 var check_out = area.resv_bar.find('#gdlr-check-out'); 241 242 var min_night = check_out.attr('data-min-night'); 243 min_night = (min_night)? parseInt(min_night): 1; 244 var night_num = area.resv_bar.find('#gdlr-night'); 245 246 if( check_in.val() ){ 247 var check_out_date = check_in.datepicker('getDate', '+1d'); 248 check_out_date.setDate(check_out_date.getDate() + parseInt(night_num.val())); 249 250 var check_out_min = check_in.datepicker('getDate', '+1d'); 251 check_out_min.setDate(check_out_min.getDate() + min_night); 252 253 check_out.datepicker('option', 'minDate', check_out_min); 254 check_out.datepicker('setDate', check_out_date); 255 256 $('#gdlr-datepicker-range').datepicker('refresh'); 257 } 258 }); 259 260 // check out date change 261 area.resv_bar.on('change', '#gdlr-check-out', function(){ 262 var check_in = area.resv_bar.find('#gdlr-check-in').datepicker('getDate'); 263 var check_out = $(this).datepicker('getDate'); 264 var date_diff = Math.round((check_out - check_in) / 86400000); // 1000/60/60/24 265 266 if( check_in && date_diff > 0 ){ 267 var night_num = area.resv_bar.find('#gdlr-night'); 268 if( night_num.children('option[value="' + date_diff + '"]').length == 0 ){ 269 night_num.append('<option value="' + date_diff + '" >' + date_diff + '</option>') 270 } 271 $('#gdlr-night').val(date_diff); 272 } 273 }); 274 275 // amount change 276 area.resv_bar.on('change', '#gdlr-room-number', function(){ 277 var amount = parseInt($(this).val()); 278 var resv_room = area.resv_bar.find('#gdlr-reservation-people-amount-wrapper'); 279 var room_diff = amount - resv_room.children().length; 280 if( room_diff > 0 ){ 281 for( var i=0; i<room_diff; i++ ){ 282 var new_room = resv_room.children(':first-child').clone().hide(); 283 new_room.find('.gdlr-reservation-people-title span').html(resv_room.children().length + 1); 284 new_room.appendTo(resv_room).slideDown(200); 285 } 286 }else if( room_diff < 0 ){ 287 resv_room.children().slice(room_diff).slideUp(200, function(){ 288 $(this).remove(); 289 }); 290 } 291 292 }); 293 294 // check availability button 295 area.resv_bar.on('click', '#gdlr-reservation-bar-button', function(){ 296 main.change_state({ state: 2 }); 297 return false; 298 }); 299 300 // query again when input change 301 area.resv_bar.on('change', '#gdlr-check-in, #gdlr-night, #gdlr-check-out, #gdlr-room-number, #gdlr-hotel-branches, ' + 302 'select[name="gdlr-adult-number[]"], select[name="gdlr-children-number[]"]', function(){ 303 304 if( parseInt(area.proc_bar.attr('data-state')) > 1 ){ 305 area.room_form.slideUp(function(){ 306 $(this).html('').removeClass('gdlr-active'); 307 main.change_state({ state: 2 }); 308 }); 309 310 } 311 }); 312 } 313 } 314 315 var proc_bar = { 316 get_state: function(){ 317 return area.proc_bar.attr('data-state'); 318 }, 319 320 set_state: function( state ){ 321 area.proc_bar.attr('data-state', state); 322 area.proc_bar.children('[data-process="' + state + '"]').addClass('gdlr-active').siblings().removeClass('gdlr-active'); 323 } 324 } 325 326 var main = { 327 init: function(){ 328 329 // init date picker 330 // area.wrapper.find('.gdlr-datepicker').gdlr_datepicker(); 331 area.wrapper.find("#gdlr-datepicker-range").gdlr_datepicker_range(); 332 333 // reservation bar event 334 resv_bar.init(); 335 336 // room selection event 337 this.room_select(); 338 339 // contact form event 340 this.contact_submit(); 341 }, 342 343 room_select: function(){ 344 area.content_area.on('click', '.price-breakdown-close', function(){ 345 $(this).closest('.price-breakdown-wrapper').fadeOut(200); 346 return false;
347 }); 348 area.content_area.on('click', '.gdlr-price-break-down', function(){ 349 $(this).children('.price-breakdown-wrapper').fadeIn(200); 350 }); 351 352 area.content_area.on('click', '.gdlr-room-selection',function(){ 353 $('body').animate({scrollTop: area.proc_bar.offset().top}, 300); 354 area.room_form.find('.gdlr-active input').val($(this).attr('data-roomid')); 355 main.change_state({ state: 2, room_id: $(this).attr('data-roomid') }); 356 return false; 357 }); 358 359 area.content_area.on('click', '.gdlr-pagination a', function(){ 360 main.change_state({ paged: $(this).attr('data-paged'), state: 2 }); 361 return false; 362 }); 363 364 area.room_form.on('click', '.gdlr-reservation-change-room',function(){ 365 $(this).closest('.gdlr-reservation-room').find('input').val(''); 366 main.change_state({ state: 2 }); 367 return false; 368 }); 369 370 // edit booking summary event 371 area.summary_form.on('click', '#gdlr-edit-booking-button', function(){ 372 area.room_form.find('.gdlr-reservation-room:first-child input').val(''); 373 main.change_state({ state: 2 }); 374 return false; 375 }); 376 377 area.summary_form.on('change', 'input[name="pay_deposit"]', function(){ 378 if($(this).val() == 'true'){ 379 area.summary_form.find('.gdlr-price-deposit-inner-wrapper').slideDown(); 380 area.summary_form.find('.gdlr-price-summary-grand-total').removeClass('gdlr-active'); 381 area.summary_form.find('input[name="pay_deposit"][value="true"]').closest('span').addClass('gdlr-active'); 382 area.summary_form.find('input[name="pay_deposit"][value="false"]').closest('span').removeClass('gdlr-active'); 383 }else{ 384 area.summary_form.find('.gdlr-price-deposit-inner-wrapper').slideUp(); 385 area.summary_form.find('.gdlr-price-summary-grand-total').addClass('gdlr-active'); 386 area.summary_form.find('input[name="pay_deposit"][value="true"]').closest('span').removeClass('gdlr-active'); 387 area.summary_form.find('input[name="pay_deposit"][value="false"]').closest('span').addClass('gdlr-active'); 388 } 389 return false; 390 }); 391 392 }, 393 394 contact_submit: function(){ 395 396 // for submitting service 397 area.content_area.on('change', '.gdlr-room-service-checkbox input', function(){ 398 if( $(this).is(":checked") ){ 399 $(this).parent('label').addClass('gdlr-active').siblings('input').prop('disabled', false); 400 }else{ 401 $(this).parent('label').removeClass('gdlr-active').siblings('input').prop('disabled', true); 402 } 403 }); 404 area.content_area.on('click', '.gdlr-room-selection-next',function(){ 405 main.change_state({ state: 3, service: $(this).siblings('.gdlr-booking-service-wrapper').children('form') }); 406 return false; 407 }); 408 409 // for submitting contact form 410 area.content_area.on('click', '.gdlr-booking-contact-submit', function(){ 411 var term_and_service = area.content_area.find('input[name="term-and-agreement"]'); 412 if( term_and_service.length && !term_and_service.is(':checked') ){ 413 area.content_area.find('.gdlr-error-message').html(term_and_service.attr('data-error')).slideDown(); 414 return false; 415 } 416 417 if( !$(this).hasClass('gdlr-clicked') ){ 418 $(this).addClass('gdlr-clicked'); 419 area.content_area.find('.gdlr-error-message').slideUp(); 420 main.change_state({ state: 3, contact: $(this).closest('form'), 'contact_type': 'contact' }); 421 } 422 return false; 423 }); 424 425 area.content_area.on('click', '.gdlr-booking-payment-submit', function(){ 426 var term_and_service = area.content_area.find('input[name="term-and-agreement"]'); 427 if( term_and_service.length && !term_and_service.is(':checked') ){ 428 area.content_area.find('.gdlr-error-message').html(term_and_service.attr('data-error')).slideDown(); 429 return false; 430 } 431 432 if( !$(this).hasClass('gdlr-clicked') ){ 433 $(this).addClass('gdlr-clicked'); 434 area.content_area.find('.gdlr-error-message').slideUp(); 435 main.change_state({ state: 3, contact: $(this).closest('form'), 'contact_type': 'instant_payment' }); 436 } 437 return false; 438 }); 439 440 // payment method selection 441 area.content_area.on('click', '.gdlr-payment-method input[name="payment-method"]',function(){ 442 $(this).parent('label').addClass('gdlr-active').siblings().removeClass('gdlr-active'); 443 }); 444 445 // for ajax coupon 446 var coupon_loading = $('<span class="gdlr-coupon-loading" ></span>'); 447 var coupon_message = $('<span class="gdlr-coupon-message" ></span>'); 448 area.content_area.on('change input', '#gdlr-coupon-id', gdlr_debounce_function(function(){ 449 if( $(this).val().length <= 0 ){ return; } 450 451 var coupon_elem = $(this); 452 coupon_elem.parent().prepend(coupon_loading); 453 454 // ajax call 455 $.ajax({ 456 type: 'POST', 457 url: area.wrapper.attr('data-ajax'), 458 data: { 459 'action': coupon_elem.attr('data-action'), 460 'data': area.resv_bar.serialize(), 461 'coupon_code': coupon_elem.val() 462 }, 463 dataType: 'json', 464 error: function( a, b, c ){ console.log(a, b, c); }, 465 success: function( data ){ 466 coupon_loading.remove(); 467 468 if( typeof(data.message) != 'undefined' ){ 469 coupon_message.hide(); 470 coupon_message.html(data.message).insertAfter(coupon_elem); 471 coupon_message.fadeIn(); 472 }else{ 473 coupon_message.fadeOut(); 474 } 475 476 } 477 }); 478 }, 400)); 479 }, 480 481 change_state: function( options ){ 482 if( area.resv_bar.find('select[name=gdlr-hotel-branches]').val() == '' ){ 483 area.resv_bar.find('#please-select-branches').slideDown(); 484 return false;
485 }else{ 486 area.resv_bar.find('#please-select-branches').slideUp(); 487 } 488 489 area.resv_bar.find('#gdlr-reservation-bar-button').slideUp(200, function(){ $(this).remove(); }) 490 491 area.content_area.animate({'opacity': 0.2}); 492 area.content_area.parent().addClass('gdlr-loading'); 493 494 var data_submit = { 495 'action': area.resv_bar.attr('data-action'), 496 'data': area.resv_bar.serialize(), 497 'state': options.state 498 }; 499 if( options.room_id ) data_submit.room_id = options.room_id; 500 if( options.service ){ 501 data_submit.service = options.service.serialize(); 502 if( !data_submit.service ){ 503 data_submit.service = 'service=none'; 504 } 505 } 506 if( options.contact ) data_submit.contact = options.contact.serialize(); 507 if( options.contact_type ) data_submit.contact_type = options.contact_type; 508 if( options.paged ) data_submit.paged = options.paged; 509 510 $.ajax({ 511 type: 'POST', 512 url: area.wrapper.attr('data-ajax'), 513 data: data_submit, 514 dataType: 'json', 515 error: function( a, b, c ){ console.log(a, b, c); }, 516 success: function( data ){ 517 //console.log(data.data); 518 519 if( data.state ){ 520 proc_bar.set_state(data.state); 521 522 if( data.content ){ 523 var tmp_height = area.content_area.height(); 524 area.content_area.html(data.content); 525 526 var new_height = area.content_area.height(); 527 528 area.content_area.parent().removeClass('gdlr-loading'); 529 area.content_area.height(tmp_height).animate({'opacity': 1, 'height': new_height}, function(){ 530 $(this).css('height', 'auto'); 531 }); 532 } 533 if( data.summary_form ){ 534 if( !area.summary_form.hasClass('gdlr-active') ){ 535 area.summary_form.html(data.summary_form).slideDown().addClass('gdlr-active'); 536 }else{ 537 var tmp_height = area.summary_form.height(); 538 area.summary_form.html(data.summary_form); 539 540 var new_height = area.summary_form.height(); 541 area.summary_form.height(tmp_height).animate({'height': new_height}, function(){ 542 $(this).css('height', 'auto'); 543 }); 544 545 if( data.state == 4 ){ 546 $('body').animate({scrollTop: area.proc_bar.offset().top - (tmp_height - new_height)}, 300); 547 } 548 } 549 } 550 if( data.service ){ 551 area.service_form.html(data.service); 552 } 553 554 if( data.state == 2 ){ 555 area.summary_form.slideUp(function(){ $(this).removeClass('gdlr-active'); }); 556 area.date_form.slideDown(); 557 558 if( data.room_form ){ 559 if( !area.room_form.hasClass('gdlr-active') ){ 560 area.room_form.html(data.room_form).slideDown().addClass('gdlr-active'); 561 }else{ 562 var tmp_height = area.room_form.height(); 563 area.room_form.html(data.room_form); 564 565 var new_height = area.room_form.height(); 566 area.room_form.height(tmp_height).animate({'height': new_height}, function(){ 567 $(this).css('height', 'auto'); 568 }); 569 } 570 } 571 }else if( data.state == 3 ){ 572 area.room_form.slideUp(function(){ $(this).removeClass('gdlr-active'); }); 573 area.date_form.slideUp(); 574 575 // error message on form submit 576 if( data.error_message ){ 577 area.content_area.find('.gdlr-button').removeClass('gdlr-clicked'); 578 area.content_area.find('.gdlr-error-message').html(data.error_message).slideDown(); 579 580 area.content_area.parent().removeClass('gdlr-loading'); 581 area.content_area.animate({'opacity': 1}); 582 } 583 584 // for payment option 585 if( data.payment && data.payment == 'paypal' ){ 586 var form_submit = area.content_area.find('form.gdlr-booking-contact-form'); 587 form_submit.attr('method', 'post'); 588 form_submit.attr('action', data.payment_url); 589 form_submit.append(data.addition_part); 590 591 form_submit.find('input, textarea').each(function(){ 592 if( $(this).is('[name="coupon"], [name="payment-method"], [name="term-and-agreement"]') ){ 593 $(this).remove(); 594 }else{ 595 // $(this).val(gdlr_encode_utf8($(this).val())); 596 } 597 598 }); 599 form_submit.submit(); 600 601 } 602 } 603 } // data.state 604 } 605 }); 606 } 607 }; 608 609 main.init(); 610 611 return this; 612 } 613
614 $(document).ready(function(){ 615 616 // init the booking page 617 $('#gdlr-single-booking-content').gdlr_hotel_booking(); 618 619 // init single room page 620 $('form.gdlr-reservation-bar, #gdlr-hotel-availability').gdlr_single_booking(); 621 622 // room category hover 623 $('.gdlr-room-category-item').on('mouseover', '.gdlr-room-category-thumbnail', function(){ 624 $(this).children('img').transition({ scale: 1.1, duration: 200, queue: false }); 625 $(this).children('.gdlr-room-category-thumbnail-overlay').animate({opacity: 0.6}, {duration: 150, queue: false}); 626 $(this).children('.gdlr-room-category-thumbnail-overlay-icon').animate({opacity: 1}, {duration: 150, queue: false}); 627 }); 628 $('.gdlr-room-category-item').on('mouseout', '.gdlr-room-category-thumbnail', function(){ 629 $(this).children('img').transition({ scale: 1, duration: 200, queue: false }); 630 $(this).children('.gdlr-room-category-thumbnail-overlay').animate({opacity: 0}, {duration: 150, queue: false}); 631 $(this).children('.gdlr-room-category-thumbnail-overlay-icon').animate({opacity: 0}, {duration: 150, queue: false}); 632 }); 633 }); 634 635})(jQuery);
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.