PageSourceSearch

https://baltiindian.ca/wp-content/plugins/restropress-store-timing…/js/rp-st-functions.js?ver=1790331210

js baltiindian.ca collected 2026-09-25 10:14:01 UTC 26,647 bytes, 637 lines download raw bytes

1jQuery(function ($) {
2    if (window.rpStFunctionsBound) {
3        return;
4    }
5    window.rpStFunctionsBound = true;
6    // Get Cookie
7    function rpress_getCookie(cname) {
8        var name = cname + "=";
9        var ca = document.cookie.split(';');
10        for (var i = 0; i < ca.length; i++) {
11            var c = ca[i];
12            while (c.charAt(0) == ' ') c = c.substring(1);
13            if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
14        }
15        return "";
16    }
17    function rpress_setCookie(cname, cvalue, exdays) {
18        var d = new Date();
19        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
20        var expires = "expires=" + d.toUTCString();
21        document.cookie = cname + "=" + cvalue + "; " + expires + ";path=/";
22    }
23    function getSelectedLocationId(serviceType, $context) {
24        var selector = serviceType === 'pickup'
25            ? 'input[name="rpress_location_pickup"]'
26            : 'input[name="rpress_location"]';
27        var locationId = '';
28
29        if ($context && $context.length) {
30            locationId = $context.find(selector + ':checked').val() || '';
31        }
32
33        if (!locationId) {
34            locationId = $(selector + ':checked').val() || '';
35        }
36
37        if (!locationId) {
38            locationId = rpress_getCookie('branch');
39        }
40        return locationId;
41    }
42    function getDateBlockSelector(serviceType) {
43        return serviceType === 'pickup' ? '.pickup-time-wraper' : '.delivery-time-wrapper';
44    }
45    function getDateSelectSelector(serviceType) {
46        return serviceType === 'pickup' ? '#rpress_get_pickup_dates' : '#rpress_get_delivery_dates';
47    }
48    function getModalContext($element) {
49        if ($element && $element.length) {
50            var $context = $element.closest('#rpressDateTime, #rpressModal');
51            if ($context.length) {
52                return $context;
53            }
54        }
55
56        return $('#rpressDateTime');
57    }
58    function getTimeWrap(serviceType, $context) {
59        var $wrap = $context.find('.rpress-time-preference-wrap').first();
60
61        if ($wrap.length) {
62            return $wrap;
63        }
64
65        return $context.find(serviceType === 'pickup' ? '.rpress-pickup-time-wrap' : '.rpress-delivery-time-wrap').first();
66    }
67    function ensureTimeWrapVisible(serviceType, $context) {
68        var $wrap = getTimeWrap(serviceType, $context);
69
70        if ($wrap.length) {
71            $wrap.css('display', 'flex');
72        }
73
74        return $wrap;
75    }
76    function getDateSelect(serviceType, $context) {
77        return $context.find(getDateSelectSelector(serviceType)).first();
78    }
79    function getHoursSelect(serviceType, $context) {
80        var selector = serviceType === 'pickup'
81            ? '#rpress-pickup-hours, #rpress-delivery-hours'
82            : '#rpress-delivery-hours';
83
84        return $context.find(selector).first();
85    }
86    function getHoursRow(serviceType, $context) {
87        var $hours = getHoursSelect(serviceType, $context);
88        var $row = $hours.closest('.rpress-service-hours-row');
89
90        if ($row.length) {
91            return $row;
92        }
93
94        return $hours.closest('.rp-col-lg-12, .rp-col-md-12, .rp-col-sm-12, .rp-col-xs-12').first();
95    }
96    function getNoticeRowSelector(serviceType) {
97        return '.rp-store-timing-notice-row[data-service-type="' + serviceType + '"]';
98    }
99    function removeServiceNotice(serviceType, $context) {
100        getTimeWrap(serviceType, $context).find(getNoticeRowSelector(serviceType)).remove();
101    }
102    function renderServiceNotice(serviceType, noticeText, $context) {
103        var $wrap = ensureTimeWrapVisible(serviceType, $context);
104        var $noticeRow = $wrap.find(getNoticeRowSelector(serviceType)).first();
105        var $anchor = $wrap.find(getDateBlockSelector(serviceType)).closest('.rp-col-lg-12, .rp-col-md-12, .rp-col-sm-12, .rp-col-xs-12').last();
106
107        if ($noticeRow.length) {
108            $noticeRow.find('.rp-store-timing-notice').text(noticeText);
109            return;
110        }
111
112        if (!$anchor.length) {
113            $anchor = $wrap.find('.rpress-service-type-message').last();
114        }
115
116        $noticeRow = $('<div/>', {
117            'class': 'rp-col-lg-12 rp-col-md-12 rp-col-sm-12 rp-col-xs-12 rp-store-timing-notice-row',
118            'data-service-type': serviceType
119        }).append($('<div/>', {
120            'class': 'rp-store-timing-notice',
121            text: noticeText
122        }));
123
124        if ($anchor.length) {
125            $anchor.after($noticeRow);
126        } else {
127            $wrap.prepend($noticeRow);
128        }
129    }
130    function setHoursRowVisibility(serviceType, $context, isVisible) {
131        var $row = getHoursRow(serviceType, $context);
132
133        if ($row.length) {
134            $row.css('display', isVisible ? '' : 'none');
135        }
136    }
137    function removeDateDropdown(serviceType, $context) {
138        getTimeWrap(serviceType, $context).find(getDateBlockSelector(serviceType)).remove();
139    }
140    function renderDateDropdown(serviceType, rawDates, formattedDates, $context) {
141        var selectId = serviceType === 'pickup' ? 'rpress_get_pickup_dates' : 'rpress_get_delivery_dates';
142        var labelText = serviceType === 'pickup' ? 'Select pickup order date' : 'Select delivery order date';
143        var wrapperClass = serviceType === 'pickup' ? 'pickup-time-wraper' : 'delivery-time-wrapper';
144        var labelClass = serviceType === 'pickup' ? 'pickup-time-text text-left' : 'delivery-time-text text-left';
145        var optionsHtml = '';
146
147        for (var i = 0; i < rawDates.length; i++) {
148            var optionLabel = (formattedDates && formattedDates[i]) ? formattedDates[i] : rawDates[i];
149            optionsHtml += '<option value="' + rawDates[i] + '">' + optionLabel + '</option>';
150        }
151
152        var html = '' +
153            '<div class="rp-col-lg-12 rp-col-md-12 rp-col-sm-12 rp-col-xs-12">' +
154            '<div class="' + wrapperClass + '">' +
155            '<div class="' + labelClass + '">' + labelText + '</div>' +
156            '<select id="' + selectId + '" class="rpress_get_delivery_dates rp-form-control">' +
157            optionsHtml +
158            '</select>' +
159            '</div>' +
160            '</div>';
161
162        var $wrap = ensureTimeWrapVisible(serviceType, $context);
163        var $anchor = $wrap.find('.rpress-service-type-message').last();
164
165        $wrap.find(getDateBlockSelector(serviceType)).remove();
166
167        if (!$anchor.length) {
168            $anchor = $wrap.find(serviceType === 'pickup' ? '.pickup-time-text' : '.delivery-time-text').first();
169        }
170
171        if ($anchor.length) {
172            $anchor.after(html);
173        } else {
174            $wrap.prepend(html);
175        }
176    }
177    function getNoticeText(serviceType) {
178        return serviceType === 'pickup' ? rp_st_vars.no_pickup_notice : rp_st_vars.no_delivery_notice;
179    }
180    function resolveNoticeText(serviceType, noticeText) {
181        var message = (noticeText || '').toString().trim();
182
183        if (!message) {
184            message = (getNoticeText(serviceType) || '').toString().trim();
185        }
186
187        return message || 'Sorry, we are closed for ordering now.';
188    }
189    function showTimingToast(message) {
190        var title = window.rp_scripts && rp_scripts.error ? rp_scripts.error : 'Error';
191
192        if (!message || typeof tata === 'undefined' || typeof tata.error !== 'function') {
193            return;
194        }
195
196        tata.error(title, message, { position: "tr" });
197    }
198    function clearServiceSelectionCookies() {
199        rpress_setCookie('service_date', '', -1);
200        rpress_setCookie('delivery_date', '', -1);
201        rpress_setCookie('service_time', '', -1);
202        rpress_setCookie('service_time_text', '', -1);
203    }
204    function renderClosedSummaryNotice(noticeText) {
205        var message = (noticeText || '').toString().trim();
206
207        if (!message) {
208            return;
209        }
210
211        $('#deliveryDate').text(message);
212        $('#deliveryTime').text('');
213    }
214    function isPreOrderEnabled(serviceType) {
215        return serviceType === 'pickup'
216            ? rp_st_vars.pre_order_enable_pickup == "true"
217            : rp_st_vars.pre_order_enable_delivery == "true";
218    }
219    function getServiceAsapText(serviceType) {
220        return serviceType === 'pickup' ? rp_st_vars.pickup_asap_text : rp_st_vars.delivery_asap_text;
221    }
222    function setTimeSelectLoading(serviceType, $context) {
223        ensureTimeWrapVisible(serviceType, $context);
224        removeServiceNotice(serviceType, $context);
225        setHoursRowVisibility(serviceType, $context, true);
226        var $hours = getHoursSelect(serviceType, $context);
227
228        if ($hours.length) {
229            $hours.html('<option value="">' + rpress_scripts.loading + '...</option>');
230        }
231    }
232    function renderServiceHours(serviceType, hours, selectedDate, isStoreClosed, $context, noticeText) {
233        ensureTimeWrapVisible(serviceType, $context);
234        var $hours = getHoursSelect(serviceType, $context);
235        var selectedTime = rpress_getCookie('service_time');
236        var optionsHtml = '';
237        var slots = Array.isArray(hours) ? hours.slice() : [];
238        var enableAsap = rp_st_vars.enable_asap_option == "1";
239        var enableAsapOnly = rp_st_vars.enable_asap_option_only == "1";
240        var asapToken = 'ASAP';
241        var isUnavailable = !!isStoreClosed || !slots.length;
242        var unavailableNotice = resolveNoticeText(serviceType, noticeText);
243        var $submitButton = $context.find('.rpress-editaddress-submit-btn');
244
245        if (enableAsap && slots.length) {
246            slots.unshift(asapToken);
247            if (isPreOrderEnabled(serviceType) && selectedDate !== rp_st_vars.current_date) {
248                slots.shift();
249            }
250        }
251
252        if (enableAsap && enableAsapOnly && slots.length) {
253            slots = [asapToken];
254        }
255
256        if (!isUnavailable && $hours.length) {
257            for (var i = 0; i < slots.length; i++) {
258                var slot = slots[i];
259                var label = slot;
260                var value = slot;
261
262                if (slot === asapToken) {
263                    value = asapToken + getServiceAsapText(serviceType);
264                    label = rp_st_vars.asap_txt + ' ' + getServiceAsapText(serviceType);
265                } else if (rp_st_vars.timeslot_mode === 'multiple' && i < slots.length - 1 && slots[i + 1] !== asapToken) {
266                    label = slot + '-' + slots[i + 1];
267                }
268
269                optionsHtml += '<option value="' + value + '">' + label + '</option>';
270            }
271
272            $hours.html(optionsHtml);
273
274            if (selectedTime && $hours.find('option[value="' + selectedTime + '"]').length > 0) {
275                $hours.val(selectedTime);
276            } else {
277                $hours.val($hours.find('option:first').val());
278            }
279        } else if ($hours.length) {
280            $hours.html('');
281        }
282
283        if (isUnavailable) {
284            setHoursRowVisibility(serviceType, $context, false);
285            renderServiceNotice(serviceType, unavailableNotice, $context);
286            clearServiceSelectionCookies();
287            renderClosedSummaryNotice(unavailableNotice);
288        } else {
289            removeServiceNotice(serviceType, $context);
290            setHoursRowVisibility(serviceType, $context, true);
291        }
292
293        if ($submitButton.length) {
294            $submitButton.toggle(!isUnavailable);
295        } else if (isUnavailable) {
296            $(".rpress-editaddress-submit-btn").hide();
297        } else {
298            $(".rpress-editaddress-submit-btn").show();
299        }
300    }
301    function requestServiceTimings(serviceType, selectedDate, $context) {
302        if (!selectedDate) {
303            selectedDate = rp_st_vars.current_date;
304        }
305
306        setTimeSelectLoading(serviceType, $context);
307
308        $.ajax({
309            type: "POST",
310            dataType: "json",
311            url: rp_st_vars.ajaxurl,
312            data: {
313                action: 'rp_st_render_timings',
314                selectedDate: selectedDate,
315                serviceType: serviceType,
316                chosen_location_id: getSelectedLocationId(serviceType, $context)
317            },
318            success: function (response) {
319                if (!response || !response.success || !response.data) {
320                    return;
321                }
322
323                var hours = serviceType === 'pickup' ? response.data.pickupHrs : response.data.deliveryHrs;
324                renderServiceHours(serviceType, hours, selectedDate, !!response.data.is_store_closed, $context, response.data.closed_message || '');
325            }
326        });
327    }
328    function syncLocationDateAndTime(serviceType, locationId, preferredDate, $context) {
329        if (!locationId) {
330            return;
331        }
332
333        setTimeSelectLoading(serviceType, $context);
334
335        $.ajax({
336            type: "POST",
337            dataType: "json",
338            url: rp_st_vars.ajaxurl,
339            data: {
340                action: 'rp_multilocation_get_location_store_time',
341                location_id: locationId,
342                service_type: serviceType,
343                selectedDate: preferredDate || ''
344            },
345            success: function (response) {
346                if (!response || !response.success || !response.data) {
347                    return;
348                }
349
350                var responseData = response.data;
351                var effectiveDate = responseData.selected_date || preferredDate || rp_st_vars.current_date;
352                var rawDates = responseData.date_range && responseData.date_range.raw_date ? responseData.date_range.raw_date : [];
353                var formattedDates = responseData.date_range && responseData.date_range.formatted_date ? responseData.date_range.formatted_date : [];
354                var timeData = responseData.delivery_time || {};
355                var initialHours = serviceType === 'pickup' ? timeData.pickupHrs : timeData.deliveryHrs;
356                var hasInitialHours = Array.isArray(initialHours) && initialHours.length > 0;
357                var hasDateOptions = Array.isArray(rawDates) && rawDates.length > 0;
358                var closeMessage = responseData.closed_message || getNoticeText(serviceType) || 'Sorry, we are closed for ordering now.';
359                var $dateSelect;
360
361                if (!hasDateOptions) {
362                    removeDateDropdown(serviceType, $context);
363                    if (!hasInitialHours && initialHours !== null) {
364                        showTimingToast(closeMessage);
365                        clearServiceSelectionCookies();
366                        renderClosedSummaryNotice(closeMessage);
367                    }
368
369                    // if (responseData.pre_order_status === 'enabled') {
370                    // }
371                }
372
373                if (!formattedDates.length && rawDates.length) {
374                    formattedDates = rawDates.slice();
375                }
376
377                if (rawDates.length) {
378                    renderDateDropdown(serviceType, rawDates, formattedDates, $context);
379                    $dateSelect = getDateSelect(serviceType, $context);
380
381                    if ($dateSelect.length) {
382                        if ($dateSelect.find('option[value="' + effectiveDate + '"]').length === 0) {
383                            effectiveDate = rawDates[0];
384                        }
385
386                        $dateSelect.val(effectiveDate);
387                    }
388                }
389
390                if (initialHours === null) {
391                    requestServiceTimings(serviceType, effectiveDate, $context);
392                    return;
393                }
394
395                if (!hasDateOptions && !hasInitialHours) {
396                    renderServiceHours(serviceType, [], effectiveDate, true, $context, closeMessage);
397                    return;
398                }
399
400                renderServiceHours(serviceType, initialHours, effectiveDate, !hasInitialHours, $context, closeMessage);
401            }
402        });
403    }
404    function getLocationInputs(serviceType, $context) {
405        var selector = serviceType === 'pickup' ? 'input[name="rpress_location_pickup"]' : 'input[name="rpress_location"]';
406
407        return $context.find(selector);
408    }
409    function initializeModalLocationTiming(serviceType, $context) {
410        var branch = rpress_getCookie('branch');
411        var $inputs = getLocationInputs(serviceType, $context);
412        var $input = $inputs.filter(':checked').first();
413        var preferredDate = '';
414
415        if (branch) {
416            var $cookieInput = $inputs.filter('[value="' + branch + '"]').first();
417            if ($cookieInput.length) {
418                $cookieInput.prop('checked', true);
419                $input = $cookieInput;
420            }
421        }
422
423        if (!$input.length) {
424            return;
425        }
426
427        preferredDate = getDateSelect(serviceType, $context).val() || rpress_getCookie('service_date') || '';
428
429        if ($input.data('branchName')) {
430            rpress_setCookie('branch_name', encodeURIComponent($input.data('branchName')), 1
430);
431        }
432
433        syncLocationDateAndTime(serviceType, $input.val(), preferredDate, $context);
434    }
435    function versionCompare(v1, v2) {
436        if (!v1 || !v2) return 0;
437
438        const v1parts = v1.split('.').map(n => parseInt(n, 10));
439        const v2parts = v2.split('.').map(n => parseInt(n, 10));
440
441        for (let i = 0; i < Math.max(v1parts.length, v2parts.length); i++) {
442            const a = v1parts[i] ?? 0; // use nullish coalescing (handles undefined)
443            const b = v2parts[i] ?? 0;
444            if (a > b) return 1;
445            if (a < b) return -1;
446        }
447        return 0;
448    }
449
450    $(document.body).on('opened_service_options', function (event) {
451        $('.rpress_get_delivery_dates').trigger('change');
452        //Remove the additional service date dropdown
453        // if (rp_st_vars.enabled_sevice_type == 'delivery_and_pickup') {
454        //     $('.delivery-settings-wrapper#nav-pickup .delivery-time-wrapper:eq(0)').remove();
455        // }
456
457        var delivery_hours = $('.rpress-allowed-delivery-hrs').find('option').length;
458        var delivery_close_time = rp_st_vars.today_store_close_delivery;
459
460        if (delivery_close_time) {
461            var specificTimeDate = new Date(); // Get the current date
462            specificTimeDate.setHours(0, 0, 0, 0); // Set the time to midnight
463            var specificTimeArray = delivery_close_time.match(/^(\d+):(\d+)(am|pm)$/i); // Extract hour, minute, and am/pm from the string
464
465            if (specificTimeArray !== null) {
466
467                var hour = parseInt(specificTimeArray[1]);
468                var minute = parseInt(specificTimeArray[2]);
469                var ampm = specificTimeArray[3].toLowerCase();
470
471                if (ampm === 'pm' && hour !== 12) {
472                    hour += 12;
473                } else if (ampm === 'am' && hour === 12) {
474                    hour = 0;
475                }
476
477                specificTimeDate.setHours(hour, minute); // Set the specific time
478
479                var currentTime = new Date(); // Get the current date and time
480
481            }
482
483            if (specificTimeDate && delivery_hours == 0) {
484                var notice = rp_st_vars.no_delivery_notice;
485                $('.rpress-delivery-time-wrap').html('<h4 class="rp-store-timing-notice">' + notice + '</h4>');
486                $('#nav-delivery-tab').click(function (e) {
487                    $('.rpress-delivery-opt-update').hide();
488                })
489                var delivery_selected = $('#nav-delivery-tab').parent('li').hasClass('active');
490                if (versionCompare(rp_st_vars.plugin_version, '2.0.7.4') <= 0) {
491                    if (delivery_selected) {
492                        $('#nav-delivery-tab').trigger('click');
493                    }
494                }
495            } else {
496                $('#nav-delivery-tab').click(function (e) {
497                    $('.rpress-delivery-opt-update').show();
498                })
499            }
500
501        }
502
503        var pickup_hours = $('.rpress-allowed-pickup-hrs').find('option').length;
504        var pickup_close_time = rp_st_vars.today_store_close_pickup;
505        if (pickup_close_time) {
506            var specificTimeDatep = new Date(); // Get the current date
507            specificTimeDatep.setHours(0, 0, 0, 0); // Set the time to midnight
508            var specificTimeArrayp = pickup_close_time.match(/^(\d+):(\d+)(am|pm)$/i); // Extract hour, minute, and am/pm from the string
509
510            if (specificTimeArrayp !== null) {
511
512                var hourp = parseInt(specificTimeArrayp[1]);
513                var minutep = parseInt(specificTimeArrayp[2]);
514                var ampmp = specificTimeArrayp[3].toLowerCase();
515
516                if (ampmp === 'pm' && hourp !== 12) {
517                    hourp += 12;
518                } else if (ampmp === 'am' && hourp === 12) {
519                    hourp = 0;
520                }
521
522                specificTimeDatep.setHours(hourp, minutep); // Set the specific time
523
524                var currentTimep = new Date(); // Get the current date and time
525
526            }
527
528            if (specificTimeDatep && pickup_hours == 0) {
529                var notice = rp_st_vars.no_pickup_notice;
530                $('.rpress-pickup-time-wrap').html('<h3 class="rp-store-timing-notice">' + notice + '</h3>');
531                $('#nav-pickup-tab').click(function (e) {
532                    $('.rpress-delivery-opt-update').hide();
533                })
534                var pickup_selected = $('#nav-pickup-tab').parent('li').hasClass('active');
535
536                if (versionCompare(rp_st_vars.plugin_version, '2.0.7.4') <= 0) {
537                    if (pickup_selected) {
538                        $('#nav-pickup-tab').trigger('click');
539                    }
540                }
541            } else {
542                $('#nav-pickup-tab').click(function (e) {
543                    $('.rpress-delivery-opt-update').show();
544                })
545            }
546
547        }
548        //Selected service date
549        var selectedDate = rpress_getCookie('service_date');
550        var serviceType = rpress_getCookie('service_type');
551        var selected = selectedDate !== '' ? selectedDate : rp_st_vars.selectedDate[serviceType];
552        if (selectedDate !== '' && $('#rpress_get_delivery_dates option[value="' + selectedDate + '"]').length > 0) {
553            $('#rpress_get_delivery_dates').val(selectedDate).change();
554        } else {
555            $('#rpress_get_delivery_dates').val($("#rpress_get_delivery_dates option:first").val());
556        }
557        if (selectedDate !== '' && $('#rpress_get_pickup_dates option[value="' + selectedDate + '"]').length > 0) {
558            $('#rpress_get_pickup_dates').val(selectedDate).change();
559        } else {
560            $('#rpress_get_pickup_dates').val($("#rpress_get_pickup_dates option:first").val());
561        }
562
563        setTimeout(function () {
564            initializeModalLocationTiming(serviceType || 'delivery', $('#rpressModal'));
565        }, 100);
566    });
567    $('body').off('change.rpstdeliverydate', '#rpress_get_delivery_dates').on('change.rpstdeliverydate', '#rpress_get_delivery_dates', function () {
568        var selectedDate = $(this).val();
569        var $context = getModalContext($(this));
570
571        $(this).val(selectedDate);
572        requestServiceTimings('delivery', selectedDate, $context);
573    });
574    $('body').off('change.rpstpickupdate', '#rpress_get_pickup_dates').on('change.rpstpickupdate', '#rpress_get_pickup_dates', function () {
575        var selectedDate = $(this).val();
576        var $context = getModalContext($(this));
577
578        $(this).val(selectedDate);
579        requestServiceTimings('pickup', selectedDate, $context);
580    });
581
582    // Refresh date/time based on currently selected location.
583    $('body').off('change.rpstlocation', 'input[name="rpress_location"], input[name="rpress_location_pickup"]').on('change.rpstlocation', 'input[name="rpress_location"], input[name="rpress_location_pickup"]', function () {
584        var serviceType = $(this).attr('name') === 'rpress_location_pickup' ? 'pickup' : 'delivery';
585        var $context = getModalContext($(this));
586        var locationId = $(this).val() || getSelectedLocationId(serviceType, $context);
587        var branchName = $(this).data('branchName') || '';
588        var preferredDate = getDateSelect(serviceType, $context).val() || rpress_getCookie('service_date') || '';
589
590        if (!locationId) {
591            return;
592        }
593
594        rpress_setCookie('branch', locationId, 1);
595        if (branchName) {
596            rpress_setCookie('branch_name', encodeURIComponent(branchName), 1);
597        }
598
599        syncLocationDateAndTime(serviceType, locationId, preferredDate, $context);
600    });
601
602    $('body').off('click.rpstedit', '#editDateTime').on('click.rpstedit', '#editDateTime', function () {
603        var serviceType = rpress_getCookie('service_type') || 'delivery';
604
605        setTimeout(function () {
606            initializeModalLocationTiming(serviceType, $('#rpressDateTime'));
607        }, 350);
608    });
609
610    // On catalog load: if no branch cookie, prompt location selection popup.
611    $(function () {
612        var shouldPromptLocation = typeof rp_st_vars !== 'undefined'
613            && rp_st_vars.should_auto_open_location_popup === '1'
614            && !rpress_getCookie('branch')
615            && $('#rpressDateTime').length;
616
617        if (!shouldPromptLocation) {
618            return;
619        }
620
621        setTimeout(function () {
622            var $modal = $('#rpressDateTime');
623
624            if (!$modal.length || $modal.attr('aria-hidden') === 'false' || $modal.hasClass('is-open')) {
625                return;
626            }
627
628            if (typeof MicroModal !== 'undefined' && typeof MicroModal.show === 'function') {
629                MicroModal.show('rpressDateTime', {
630                    disableScroll: true
631                });
632            } else {
633                $modal.addClass('is-open').attr('aria-hidden', 'false');
634            }
635        }, 300);
636    });
637});

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.