at path:ROOT / wp-includes / js / jquery / ui / tabs.js
run:R W Run
15.76 KB
2026-03-11 16:18:51
R W Run
8.65 KB
2026-03-11 16:18:51
R W Run
17.12 KB
2026-03-11 16:18:51
R W Run
8.34 KB
2026-03-11 16:18:51
R W Run
11.43 KB
2026-03-11 16:18:51
R W Run
6.01 KB
2026-03-11 16:18:51
R W Run
7.41 KB
2026-03-11 16:18:51
R W Run
4.25 KB
2026-03-11 16:18:51
R W Run
8.42 KB
2026-03-11 16:18:51
R W Run
4.3 KB
2026-03-11 16:18:51
R W Run
48.72 KB
2026-03-11 16:18:51
R W Run
20.96 KB
2026-03-11 16:18:51
R W Run
80.59 KB
2026-03-11 16:18:51
R W Run
35.89 KB
2026-03-11 16:18:51
R W Run
23.34 KB
2026-03-11 16:18:51
R W Run
12.79 KB
2026-03-11 16:18:51
R W Run
34.71 KB
2026-03-11 16:18:51
R W Run
17.99 KB
2026-03-11 16:18:51
R W Run
12.6 KB
2026-03-11 16:18:51
R W Run
6.51 KB
2026-03-11 16:18:51
R W Run
1.61 KB
2026-03-11 16:18:51
R W Run
880 By
2026-03-11 16:18:51
R W Run
2.6 KB
2026-03-11 16:18:51
R W Run
991 By
2026-03-11 16:18:51
R W Run
1.54 KB
2026-03-11 16:18:51
R W Run
796 By
2026-03-11 16:18:51
R W Run
1.56 KB
2026-03-11 16:18:51
R W Run
753 By
2026-03-11 16:18:51
R W Run
2.86 KB
2026-03-11 16:18:51
R W Run
1.1 KB
2026-03-11 16:18:51
R W Run
968 By
2026-03-11 16:18:51
R W Run
525 By
2026-03-11 16:18:51
R W Run
2.13 KB
2026-03-11 16:18:51
R W Run
1020 By
2026-03-11 16:18:51
R W Run
1.21 KB
2026-03-11 16:18:51
R W Run
648 By
2026-03-11 16:18:51
R W Run
995 By
2026-03-11 16:18:51
R W Run
510 By
2026-03-11 16:18:51
R W Run
1.53 KB
2026-03-11 16:18:51
R W Run
688 By
2026-03-11 16:18:51
R W Run
1.34 KB
2026-03-11 16:18:51
R W Run
723 By
2026-03-11 16:18:51
R W Run
1.84 KB
2026-03-11 16:18:51
R W Run
846 By
2026-03-11 16:18:51
R W Run
5.29 KB
2026-03-11 16:18:51
R W Run
2.43 KB
2026-03-11 16:18:51
R W Run
1.92 KB
2026-03-11 16:18:51
R W Run
917 By
2026-03-11 16:18:51
R W Run
888 By
2026-03-11 16:18:51
R W Run
442 By
2026-03-11 16:18:51
R W Run
24.04 KB
2026-03-11 16:18:51
R W Run
10.09 KB
2026-03-11 16:18:51
R W Run
18.52 KB
2026-03-11 16:18:51
R W Run
9.96 KB
2026-03-11 16:18:51
R W Run
6.08 KB
2026-03-11 16:18:51
R W Run
3.35 KB
2026-03-11 16:18:51
R W Run
4.14 KB
2026-03-11 16:18:51
R W Run
2.5 KB
2026-03-11 16:18:51
R W Run
29.78 KB
2026-03-11 16:18:51
R W Run
18.38 KB
2026-03-11 16:18:51
R W Run
7.94 KB
2026-03-11 16:18:51
R W Run
4.4 KB
2026-03-11 16:18:51
R W Run
15.96 KB
2026-03-11 16:18:51
R W Run
9.28 KB
2026-03-11 16:18:51
R W Run
19.14 KB
2026-03-11 16:18:51
R W Run
10.51 KB
2026-03-11 16:18:51
R W Run
46.52 KB
2026-03-11 16:18:51
R W Run
24.91 KB
2026-03-11 16:18:51
R W Run
14.1 KB
2026-03-11 16:18:51
R W Run
7.5 KB
2026-03-11 16:18:51
R W Run
23.11 KB
2026-03-11 16:18:51
R W Run
11.73 KB
2026-03-11 16:18:51
R W Run
14.14 KB
2026-03-11 16:18:51
R W Run
6.1 KB
2026-03-11 16:18:51
R W Run
error_log
📄tabs.js
1/*!
2 * jQuery UI Tabs 1.13.3
3 * https://jqueryui.com
4 *
5 * Copyright OpenJS Foundation and other contributors
6 * Released under the MIT license.
7 * https://jquery.org/license
8 */
9
10//>>label: Tabs
11//>>group: Widgets
12//>>description: Transforms a set of container elements into a tab structure.
13//>>docs: https://api.jqueryui.com/tabs/
14//>>demos: https://jqueryui.com/tabs/
15//>>css.structure: ../../themes/base/core.css
16//>>css.structure: ../../themes/base/tabs.css
17//>>css.theme: ../../themes/base/theme.css
18
19( function( factory ) {
20 "use strict";
21
22 if ( typeof define === "function" && define.amd ) {
23
24 // AMD. Register as an anonymous module.
25 define( [
26 "jquery",
27 "../keycode",
28 "../safe-active-element",
29 "../unique-id",
30 "../version",
31 "../widget"
32 ], factory );
33 } else {
34
35 // Browser globals
36 factory( jQuery );
37 }
38} )( function( $ ) {
39"use strict";
40
41$.widget( "ui.tabs", {
42 version: "1.13.3",
43 delay: 300,
44 options: {
45 active: null,
46 classes: {
47 "ui-tabs": "ui-corner-all",
48 "ui-tabs-nav": "ui-corner-all",
49 "ui-tabs-panel": "ui-corner-bottom",
50 "ui-tabs-tab": "ui-corner-top"
51 },
52 collapsible: false,
53 event: "click",
54 heightStyle: "content",
55 hide: null,
56 show: null,
57
58 // Callbacks
59 activate: null,
60 beforeActivate: null,
61 beforeLoad: null,
62 load: null
63 },
64
65 _isLocal: ( function() {
66 var rhash = /#.*$/;
67
68 return function( anchor ) {
69 var anchorUrl, locationUrl;
70
71 anchorUrl = anchor.href.replace( rhash, "" );
72 locationUrl = location.href.replace( rhash, "" );
73
74 // Decoding may throw an error if the URL isn't UTF-8 (#9518)
75 try {
76 anchorUrl = decodeURIComponent( anchorUrl );
77 } catch ( error ) {}
78 try {
79 locationUrl = decodeURIComponent( locationUrl );
80 } catch ( error ) {}
81
82 return anchor.hash.length > 1 && anchorUrl === locationUrl;
83 };
84 } )(),
85
86 _create: function() {
87 var that = this,
88 options = this.options;
89
90 this.running = false;
91
92 this._addClass( "ui-tabs", "ui-widget ui-widget-content" );
93 this._toggleClass( "ui-tabs-collapsible", null, options.collapsible );
94
95 this._processTabs();
96 options.active = this._initialActive();
97
98 // Take disabling tabs via class attribute from HTML
99 // into account and update option properly.
100 if ( Array.isArray( options.disabled ) ) {
101 options.disabled = $.uniqueSort( options.disabled.concat(
102 $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
103 return that.tabs.index( li );
104 } )
105 ) ).sort();
106 }
107
108 // Check for length avoids error when initializing empty list
109 if ( this.options.active !== false && this.anchors.length ) {
110 this.active = this._findActive( options.active );
111 } else {
112 this.active = $();
113 }
114
115 this._refresh();
116
117 if ( this.active.length ) {
118 this.load( options.active );
119 }
120 },
121
122 _initialActive: function() {
123 var active = this.options.active,
124 collapsible = this.options.collapsible,
125 locationHash = location.hash.substring( 1 );
126
127 if ( active === null ) {
128
129 // check the fragment identifier in the URL
130 if ( locationHash ) {
131 this.tabs.each( function( i, tab ) {
132 if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
133 active = i;
134 return false;
135 }
136 } );
137 }
138
139 // Check for a tab marked active via a class
140 if ( active === null ) {
141 active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
142 }
143
144 // No active tab, set to false
145 if ( active === null || active === -1 ) {
146 active = this.tabs.length ? 0 : false;
147 }
148 }
149
150 // Handle numbers: negative, out of range
151 if ( active !== false ) {
152 active = this.tabs.index( this.tabs.eq( active ) );
153 if ( active === -1 ) {
154 active = collapsible ? false : 0;
155 }
156 }
157
158 // Don't allow collapsible: false and active: false
159 if ( !collapsible && active === false && this.anchors.length ) {
160 active = 0;
161 }
162
163 return active;
164 },
165
166 _getCreateEventData: function() {
167 return {
168 tab: this.active,
169 panel: !this.active.length ? $() : this._getPanelForTab( this.active )
170 };
171 },
172
173 _tabKeydown: function( event ) {
174 var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),
175 selectedIndex = this.tabs.index( focusedTab ),
176 goingForward = true;
177
178 if ( this._handlePageNav( event ) ) {
179 return;
180 }
181
182 switch ( event.keyCode ) {
183 case $.ui.keyCode.RIGHT:
184 case $.ui.keyCode.DOWN:
185 selectedIndex++;
186 break;
187 case $.ui.keyCode.UP:
188 case $.ui.keyCode.LEFT:
189 goingForward = false;
190 selectedIndex--;
191 break;
192 case $.ui.keyCode.END:
193 selectedIndex = this.anchors.length - 1;
194 break;
195 case $.ui.keyCode.HOME:
196 selectedIndex = 0;
197 break;
198 case $.ui.keyCode.SPACE:
199
200 // Activate only, no collapsing
201 event.preventDefault();
202 clearTimeout( this.activating );
203 this._activate( selectedIndex );
204 return;
205 case $.ui.keyCode.ENTER:
206
207 // Toggle (cancel delayed activation, allow collapsing)
208 event.preventDefault();
209 clearTimeout( this.activating );
210
211 // Determine if we should collapse or activate
212 this._activate( selectedIndex === this.options.active ? false : selectedIndex );
213 return;
214 default:
215 return;
216 }
217
218 // Focus the appropriate tab, based on which key was pressed
219 event.preventDefault();
220 clearTimeout( this.activating );
221 selectedIndex = this._focusNextTab( selectedIndex, goingForward );
222
223 // Navigating with control/command key will prevent automatic activation
224 if ( !event.ctrlKey && !event.metaKey ) {
225
226 // Update aria-selected immediately so that AT think the tab is already selected.
227 // Otherwise AT may confuse the user by stating that they need to activate the tab,
228 // but the tab will already be activated by the time the announcement finishes.
229 focusedTab.attr( "aria-selected", "false" );
230 this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
231
232 this.activating = this._delay( function() {
233 this.option( "active", selectedIndex );
234 }, this.delay );
235 }
236 },
237
238 _panelKeydown: function( event ) {
239 if ( this._handlePageNav( event ) ) {
240 return;
241 }
242
243 // Ctrl+up moves focus to the current tab
244 if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
245 event.preventDefault();
246 this.active.trigger( "focus" );
247 }
248 },
249
250 // Alt+page up/down moves focus to the previous/next tab (and activates)
251 _handlePageNav: function( event ) {
252 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
253 this._activate( this._focusNextTab( this.options.active - 1, false ) );
254 return true;
255 }
256 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
257 this._activate( this._focusNextTab( this.options.active + 1, true ) );
258 return true;
259 }
260 },
261
262 _findNextTab: function( index, goingForward ) {
263 var lastTabIndex = this.tabs.length - 1;
264
265 function constrain() {
266 if ( index > lastTabIndex ) {
267 index = 0;
268 }
269 if ( index < 0 ) {
270 index = lastTabIndex;
271 }
272 return index;
273 }
274
275 while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
276 index = goingForward ? index + 1 : index - 1;
277 }
278
279 return index;
280 },
281
282 _focusNextTab: function( index, goingForward ) {
283 index = this._findNextTab( index, goingForward );
284 this.tabs.eq( index ).trigger( "focus" );
285 return index;
286 },
287
288 _setOption: function( key, value ) {
289 if ( key === "active" ) {
290
291 // _activate() will handle invalid values and update this.options
292 this._activate( value );
293 return;
294 }
295
296 this._super( key, value );
297
298 if ( key === "collapsible" ) {
299 this._toggleClass( "ui-tabs-collapsible", null, value );
300
301 // Setting collapsible: false while collapsed; open first panel
302 if ( !value && this.options.active === false ) {
303 this._activate( 0 );
304 }
305 }
306
307 if ( key === "event" ) {
308 this._setupEvents( value );
309 }
310
311 if ( key === "heightStyle" ) {
312 this._setupHeightStyle( value );
313 }
314 },
315
316 _sanitizeSelector: function( hash ) {
317 return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
318 },
319
320 refresh: function() {
321 var options = this.options,
322 lis = this.tablist.children( ":has(a[href])" );
323
324 // Get disabled tabs from class attribute from HTML
325 // this will get converted to a boolean if needed in _refresh()
326 options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
327 return lis.index( tab );
328 } );
329
330 this._processTabs();
331
332 // Was collapsed or no tabs
333 if ( options.active === false || !this.anchors.length ) {
334 options.active = false;
335 this.active = $();
336
337 // was active, but active tab is gone
338 } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
339
340 // all remaining tabs are disabled
341 if ( this.tabs.length === options.disabled.length ) {
342 options.active = false;
343 this.active = $();
344
345 // activate previous tab
346 } else {
347 this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
348 }
349
350 // was active, active tab still exists
351 } else {
352
353 // make sure active index is correct
354 options.active = this.tabs.index( this.active );
355 }
356
357 this._refresh();
358 },
359
360 _refresh: function() {
361 this._setOptionDisabled( this.options.disabled );
362 this._setupEvents( this.options.event );
363 this._setupHeightStyle( this.options.heightStyle );
364
365 this.tabs.not( this.active ).attr( {
366 "aria-selected": "false",
367 "aria-expanded": "false",
368 tabIndex: -1
369 } );
370 this.panels.not( this._getPanelForTab( this.active ) )
371 .hide()
372 .attr( {
373 "aria-hidden": "true"
374 } );
375
376 // Make sure one tab is in the tab order
377 if ( !this.active.length ) {
378 this.tabs.eq( 0 ).attr( "tabIndex", 0 );
379 } else {
380 this.active
381 .attr( {
382 "aria-selected": "true",
383 "aria-expanded": "true",
384 tabIndex: 0
385 } );
386 this._addClass( this.active, "ui-tabs-active", "ui-state-active" );
387 this._getPanelForTab( this.active )
388 .show()
389 .attr( {
390 "aria-hidden": "false"
391 } );
392 }
393 },
394
395 _processTabs: function() {
396 var that = this,
397 prevTabs = this.tabs,
398 prevAnchors = this.anchors,
399 prevPanels = this.panels;
400
401 this.tablist = this._getList().attr( "role", "tablist" );
402 this._addClass( this.tablist, "ui-tabs-nav",
403 "ui-helper-reset ui-helper-clearfix ui-widget-header" );
404
405 // Prevent users from focusing disabled tabs via click
406 this.tablist
407 .on( "mousedown" + this.eventNamespace, "> li", function( event ) {
408 if ( $( this ).is( ".ui-state-disabled" ) ) {
409 event.preventDefault();
410 }
411 } )
412
413 // Support: IE <9
414 // Preventing the default action in mousedown doesn't prevent IE
415 // from focusing the element, so if the anchor gets focused, blur.
416 // We don't have to worry about focusing the previously focused
417 // element since clicking on a non-focusable element should focus
418 // the body anyway.
419 .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {
420 if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
421 this.blur();
422 }
423 } );
424
425 this.tabs = this.tablist.find( "> li:has(a[href])" )
426 .attr( {
427 role: "tab",
428 tabIndex: -1
429 } );
430 this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" );
431
432 this.anchors = this.tabs.map( function() {
433 return $( "a", this )[ 0 ];
434 } )
435 .attr( {
436 tabIndex: -1
437 } );
438 this._addClass( this.anchors, "ui-tabs-anchor" );
439
440 this.panels = $();
441
442 this.anchors.each( function( i, anchor ) {
443 var selector, panel, panelId,
444 anchorId = $( anchor ).uniqueId().attr( "id" ),
445 tab = $( anchor ).closest( "li" ),
446 originalAriaControls = tab.attr( "aria-controls" );
447
448 // Inline tab
449 if ( that._isLocal( anchor ) ) {
450 selector = anchor.hash;
451 panelId = selector.substring( 1 );
452 panel = that.element.find( that._sanitizeSelector( selector ) );
453
454 // remote tab
455 } else {
456
457 // If the tab doesn't already have aria-controls,
458 // generate an id by using a throw-away element
459 panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
460 selector = "#" + panelId;
461 panel = that.element.find( selector );
462 if ( !panel.length ) {
463 panel = that._createPanel( panelId );
464 panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
465 }
466 panel.attr( "aria-live", "polite" );
467 }
468
469 if ( panel.length ) {
470 that.panels = that.panels.add( panel );
471 }
472 if ( originalAriaControls ) {
473 tab.data( "ui-tabs-aria-controls", originalAriaControls );
474 }
475 tab.attr( {
476 "aria-controls": panelId,
477 "aria-labelledby": anchorId
478 } );
479 panel.attr( "aria-labelledby", anchorId );
480 } );
481
482 this.panels.attr( "role", "tabpanel" );
483 this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );
484
485 // Avoid memory leaks (#10056)
486 if ( prevTabs ) {
487 this._off( prevTabs.not( this.tabs ) );
488 this._off( prevAnchors.not( this.anchors ) );
489 this._off( prevPanels.not( this.panels ) );
490 }
491 },
492
493 // Allow overriding how to find the list for rare usage scenarios (#7715)
494 _getList: function() {
495 return this.tablist || this.element.find( "ol, ul" ).eq( 0 );
496 },
497
498 _createPanel: function( id ) {
499 return $( "<div>" )
500 .attr( "id", id )
501 .data( "ui-tabs-destroy", true );
502 },
503
504 _setOptionDisabled: function( disabled ) {
505 var currentItem, li, i;
506
507 if ( Array.isArray( disabled ) ) {
508 if ( !disabled.length ) {
509 disabled = false;
510 } else if ( disabled.length === this.anchors.length ) {
511 disabled = true;
512 }
513 }
514
515 // Disable tabs
516 for ( i = 0; ( li = this.tabs[ i ] ); i++ ) {
517 currentItem = $( li );
518 if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
519 currentItem.attr( "aria-disabled", "true" );
520 this._addClass( currentItem, null, "ui-state-disabled" );
521 } else {
522 currentItem.removeAttr( "aria-disabled" );
523 this._removeClass( currentItem, null, "ui-state-disabled" );
524 }
525 }
526
527 this.options.disabled = disabled;
528
529 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,
530 disabled === true );
531 },
532
533 _setupEvents: function( event ) {
534 var events = {};
535 if ( event ) {
536 $.each( event.split( " " ), function( index, eventName ) {
537 events[ eventName ] = "_eventHandler";
538 } );
539 }
540
541 this._off( this.anchors.add( this.tabs ).add( this.panels ) );
542
543 // Always prevent the default action, even when disabled
544 this._on( true, this.anchors, {
545 click: function( event ) {
546 event.preventDefault();
547 }
548 } );
549 this._on( this.anchors, events );
550 this._on( this.tabs, { keydown: "_tabKeydown" } );
551 this._on( this.panels, { keydown: "_panelKeydown" } );
552
553 this._focusable( this.tabs );
554 this._hoverable( this.tabs );
555 },
556
557 _setupHeightStyle: function( heightStyle ) {
558 var maxHeight,
559 parent = this.element.parent();
560
561 if ( heightStyle === "fill" ) {
562 maxHeight = parent.height();
563 maxHeight -= this.element.outerHeight() - this.element.height();
564
565 this.element.siblings( ":visible" ).each( function() {
566 var elem = $( this ),
567 position = elem.css( "position" );
568
569 if ( position === "absolute" || position === "fixed" ) {
570 return;
571 }
572 maxHeight -= elem.outerHeight( true );
573 } );
574
575 this.element.children().not( this.panels ).each( function() {
576 maxHeight -= $( this ).outerHeight( true );
577 } );
578
579 this.panels.each( function() {
580 $( this ).height( Math.max( 0, maxHeight -
581 $( this ).innerHeight() + $( this ).height() ) );
582 } )
583 .css( "overflow", "auto" );
584 } else if ( heightStyle === "auto" ) {
585 maxHeight = 0;
586 this.panels.each( function() {
587 maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
588 } ).height( maxHeight );
589 }
590 },
591
592 _eventHandler: function( event ) {
593 var options = this.options,
594 active = this.active,
595 anchor = $( event.currentTarget ),
596 tab = anchor.closest( "li" ),
597 clickedIsActive = tab[ 0 ] === active[ 0 ],
598 collapsing = clickedIsActive && options.collapsible,
599 toShow = collapsing ? $() : this._getPanelForTab( tab ),
600 toHide = !active.length ? $() : this._getPanelForTab( active ),
601 eventData = {
602 oldTab: active,
603 oldPanel: toHide,
604 newTab: collapsing ? $() : tab,
605 newPanel: toShow
606 };
607
608 event.preventDefault();
609
610 if ( tab.hasClass( "ui-state-disabled" ) ||
611
612 // tab is already loading
613 tab.hasClass( "ui-tabs-loading" ) ||
614
615 // can't switch durning an animation
616 this.running ||
617
618 // click on active header, but not collapsible
619 ( clickedIsActive && !options.collapsible ) ||
620
621 // allow canceling activation
622 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
623 return;
624 }
625
626 options.active = collapsing ? false : this.tabs.index( tab );
627
628 this.active = clickedIsActive ? $() : tab;
629 if ( this.xhr ) {
630 this.xhr.abort();
631 }
632
633 if ( !toHide.length && !toShow.length ) {
634 $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
635 }
636
637 if ( toShow.length ) {
638 this.load( this.tabs.index( tab ), event );
639 }
640 this._toggle( event, eventData );
641 },
642
643 // Handles show/hide for selecting tabs
644 _toggle: function( event, eventData ) {
645 var that = this,
646 toShow = eventData.newPanel,
647 toHide = eventData.oldPanel;
648
649 this.running = true;
650
651 function complete() {
652 that.running = false;
653 that._trigger( "activate", event, eventData );
654 }
655
656 function show() {
657 that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );
658
659 if ( toShow.length && that.options.show ) {
660 that._show( toShow, that.options.show, complete );
661 } else {
662 toShow.show();
663 complete();
664 }
665 }
666
667 // Start out by hiding, then showing, then completing
668 if ( toHide.length && this.options.hide ) {
669 this._hide( toHide, this.options.hide, function() {
670 that._removeClass( eventData.oldTab.closest( "li" ),
671 "ui-tabs-active", "ui-state-active" );
672 show();
673 } );
674 } else {
675 this._removeClass( eventData.oldTab.closest( "li" ),
676 "ui-tabs-active", "ui-state-active" );
677 toHide.hide();
678 show();
679 }
680
681 toHide.attr( "aria-hidden", "true" );
682 eventData.oldTab.attr( {
683 "aria-selected": "false",
684 "aria-expanded": "false"
685 } );
686
687 // If we're switching tabs, remove the old tab from the tab order.
688 // If we're opening from collapsed state, remove the previous tab from the tab order.
689 // If we're collapsing, then keep the collapsing tab in the tab order.
690 if ( toShow.length && toHide.length ) {
691 eventData.oldTab.attr( "tabIndex", -1 );
692 } else if ( toShow.length ) {
693 this.tabs.filter( function() {
694 return $( this ).attr( "tabIndex" ) === 0;
695 } )
696 .attr( "tabIndex", -1 );
697 }
698
699 toShow.attr( "aria-hidden", "false" );
700 eventData.newTab.attr( {
701 "aria-selected": "true",
702 "aria-expanded": "true",
703 tabIndex: 0
704 } );
705 },
706
707 _activate: function( index ) {
708 var anchor,
709 active = this._findActive( index );
710
711 // Trying to activate the already active panel
712 if ( active[ 0 ] === this.active[ 0 ] ) {
713 return;
714 }
715
716 // Trying to collapse, simulate a click on the current active header
717 if ( !active.length ) {
718 active = this.active;
719 }
720
721 anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
722 this._eventHandler( {
723 target: anchor,
724 currentTarget: anchor,
725 preventDefault: $.noop
726 } );
727 },
728
729 _findActive: function( index ) {
730 return index === false ? $() : this.tabs.eq( index );
731 },
732
733 _getIndex: function( index ) {
734
735 // meta-function to give users option to provide a href string instead of a numerical index.
736 if ( typeof index === "string" ) {
737 index = this.anchors.index( this.anchors.filter( "[href$='" +
738 $.escapeSelector( index ) + "']" ) );
739 }
740
741 return index;
742 },
743
744 _destroy: function() {
745 if ( this.xhr ) {
746 this.xhr.abort();
747 }
748
749 this.tablist
750 .removeAttr( "role" )
751 .off( this.eventNamespace );
752
753 this.anchors
754 .removeAttr( "role tabIndex" )
755 .removeUniqueId();
756
757 this.tabs.add( this.panels ).each( function() {
758 if ( $.data( this, "ui-tabs-destroy" ) ) {
759 $( this ).remove();
760 } else {
761 $( this ).removeAttr( "role tabIndex " +
762 "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );
763 }
764 } );
765
766 this.tabs.each( function() {
767 var li = $( this ),
768 prev = li.data( "ui-tabs-aria-controls" );
769 if ( prev ) {
770 li
771 .attr( "aria-controls", prev )
772 .removeData( "ui-tabs-aria-controls" );
773 } else {
774 li.removeAttr( "aria-controls" );
775 }
776 } );
777
778 this.panels.show();
779
780 if ( this.options.heightStyle !== "content" ) {
781 this.panels.css( "height", "" );
782 }
783 },
784
785 enable: function( index ) {
786 var disabled = this.options.disabled;
787 if ( disabled === false ) {
788 return;
789 }
790
791 if ( index === undefined ) {
792 disabled = false;
793 } else {
794 index = this._getIndex( index );
795 if ( Array.isArray( disabled ) ) {
796 disabled = $.map( disabled, function( num ) {
797 return num !== index ? num : null;
798 } );
799 } else {
800 disabled = $.map( this.tabs, function( li, num ) {
801 return num !== index ? num : null;
802 } );
803 }
804 }
805 this._setOptionDisabled( disabled );
806 },
807
808 disable: function( index ) {
809 var disabled = this.options.disabled;
810 if ( disabled === true ) {
811 return;
812 }
813
814 if ( index === undefined ) {
815 disabled = true;
816 } else {
817 index = this._getIndex( index );
818 if ( $.inArray( index, disabled ) !== -1 ) {
819 return;
820 }
821 if ( Array.isArray( disabled ) ) {
822 disabled = $.merge( [ index ], disabled ).sort();
823 } else {
824 disabled = [ index ];
825 }
826 }
827 this._setOptionDisabled( disabled );
828 },
829
830 load: function( index, event ) {
831 index = this._getIndex( index );
832 var that = this,
833 tab = this.tabs.eq( index ),
834 anchor = tab.find( ".ui-tabs-anchor" ),
835 panel = this._getPanelForTab( tab ),
836 eventData = {
837 tab: tab,
838 panel: panel
839 },
840 complete = function( jqXHR, status ) {
841 if ( status === "abort" ) {
842 that.panels.stop( false, true );
843 }
844
845 that._removeClass( tab, "ui-tabs-loading" );
846 panel.removeAttr( "aria-busy" );
847
848 if ( jqXHR === that.xhr ) {
849 delete that.xhr;
850 }
851 };
852
853 // Not remote
854 if ( this._isLocal( anchor[ 0 ] ) ) {
855 return;
856 }
857
858 this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
859
860 // Support: jQuery <1.8
861 // jQuery <1.8 returns false if the request is canceled in beforeSend,
862 // but as of 1.8, $.ajax() always returns a jqXHR object.
863 if ( this.xhr && this.xhr.statusText !== "canceled" ) {
864 this._addClass( tab, "ui-tabs-loading" );
865 panel.attr( "aria-busy", "true" );
866
867 this.xhr
868 .done( function( response, status, jqXHR ) {
869
870 // support: jQuery <1.8
871 // https://bugs.jquery.com/ticket/11778
872 setTimeout( function() {
873 panel.html( response );
874 that._trigger( "load", event, eventData );
875
876 complete( jqXHR, status );
877 }, 1 );
878 } )
879 .fail( function( jqXHR, status ) {
880
881 // support: jQuery <1.8
882 // https://bugs.jquery.com/ticket/11778
883 setTimeout( function() {
884 complete( jqXHR, status );
885 }, 1 );
886 } );
887 }
888 },
889
890 _ajaxSettings: function( anchor, event, eventData ) {
891 var that = this;
892 return {
893
894 // Support: IE <11 only
895 // Strip any hash that exists to prevent errors with the Ajax request
896 url: anchor.attr( "href" ).replace( /#.*$/, "" ),
897 beforeSend: function( jqXHR, settings ) {
898 return that._trigger( "beforeLoad", event,
899 $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
900 }
901 };
902 },
903
904 _getPanelForTab: function( tab ) {
905 var id = $( tab ).attr( "aria-controls" );
906 return this.element.find( this._sanitizeSelector( "#" + id ) );
907 }
908} );
909
910// DEPRECATED
911// TODO: Switch return back to widget declaration at top of file when this is removed
912if ( $.uiBackCompat !== false ) {
913
914 // Backcompat for ui-tab class (now ui-tabs-tab)
915 $.widget( "ui.tabs", $.ui.tabs, {
916 _processTabs: function() {
917 this._superApply( arguments );
918 this._addClass( this.tabs, "ui-tab" );
919 }
920 } );
921}
922
923return $.ui.tabs;
924
925} );
926
Ui Ux Design – Teachers Night Out https://cardgames4educators.com Wed, 16 Oct 2024 22:24:18 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 https://cardgames4educators.com/wp-content/uploads/2024/06/cropped-Card-4-Educators-logo-32x32.png Ui Ux Design – Teachers Night Out https://cardgames4educators.com 32 32 Masters In English How English Speaker https://cardgames4educators.com/masters-in-english-how-english-speaker/ https://cardgames4educators.com/masters-in-english-how-english-speaker/#comments Mon, 27 May 2024 08:54:45 +0000 https://themexriver.com/wp/kadu/?p=1

Erat himenaeos neque id sagittis massa. Hac suscipit pulvinar dignissim platea magnis eu. Don tellus a pharetra inceptos efficitur dui pulvinar. Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent pulvinar odio volutpat parturient. Quisque risus finibus suspendisse mus purus magnis facilisi condimentum consectetur dui. Curae elit suspendisse cursus vehicula.

Turpis taciti class non vel pretium quis pulvinar tempor lobortis nunc. Libero phasellus parturient sapien volutpat malesuada ornare. Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae. Porta est tempor ex eget feugiat vulputate ipsum. Justo nec iaculis habitant diam arcu fermentum.

We offer comprehen sive emplo ment services such as assistance wit employer compliance.Our company is your strategic HR partner as instead of HR. john smithson

Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae.

Exploring Learning Landscapes in Academic

Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent.

]]>
https://cardgames4educators.com/masters-in-english-how-english-speaker/feed/ 1