diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-07 13:06:14 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-07 13:06:14 +0100 |
| commit | 7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8 (patch) | |
| tree | f7453d7dd5cbaaab246e23810b02d3edf1e451be /srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js | |
| parent | c59bdcf77c50cbe89b4a93782cdd6d9e7532080e (diff) | |
| download | ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.tar.gz ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.tar.bz2 ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.zip | |
Added wordpress
Diffstat (limited to 'srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js')
| -rw-r--r-- | srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js b/srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js new file mode 100644 index 0000000..a15af11 --- /dev/null +++ b/srcs/wordpress/wp-content/themes/twentysixteen/js/functions.js @@ -0,0 +1,213 @@ +/* global screenReaderText */ +/** + * Theme functions file. + * + * Contains handlers for navigation and widget area. + */ + +( function( $ ) { + var body, masthead, menuToggle, siteNavigation, socialNavigation, siteHeaderMenu, resizeTimer; + + function initMainNavigation( container ) { + + // Add dropdown toggle that displays child menu items. + var dropdownToggle = $( '<button />', { + 'class': 'dropdown-toggle', + 'aria-expanded': false + } ).append( $( '<span />', { + 'class': 'screen-reader-text', + text: screenReaderText.expand + } ) ); + + container.find( '.menu-item-has-children > a' ).after( dropdownToggle ); + + // Toggle buttons and submenu items with active children menu items. + container.find( '.current-menu-ancestor > button' ).addClass( 'toggled-on' ); + container.find( '.current-menu-ancestor > .sub-menu' ).addClass( 'toggled-on' ); + + // Add menu items with submenus to aria-haspopup="true". + container.find( '.menu-item-has-children' ).attr( 'aria-haspopup', 'true' ); + + container.find( '.dropdown-toggle' ).click( function( e ) { + var _this = $( this ), + screenReaderSpan = _this.find( '.screen-reader-text' ); + + e.preventDefault(); + _this.toggleClass( 'toggled-on' ); + _this.next( '.children, .sub-menu' ).toggleClass( 'toggled-on' ); + + // jscs:disable + _this.attr( 'aria-expanded', _this.attr( 'aria-expanded' ) === 'false' ? 'true' : 'false' ); + // jscs:enable + screenReaderSpan.text( screenReaderSpan.text() === screenReaderText.expand ? screenReaderText.collapse : screenReaderText.expand ); + } ); + } + initMainNavigation( $( '.main-navigation' ) ); + + masthead = $( '#masthead' ); + menuToggle = masthead.find( '#menu-toggle' ); + siteHeaderMenu = masthead.find( '#site-header-menu' ); + siteNavigation = masthead.find( '#site-navigation' ); + socialNavigation = masthead.find( '#social-navigation' ); + + // Enable menuToggle. + ( function() { + + // Return early if menuToggle is missing. + if ( ! menuToggle.length ) { + return; + } + + // Add an initial values for the attribute. + menuToggle.add( siteNavigation ).add( socialNavigation ).attr( 'aria-expanded', 'false' ); + + menuToggle.on( 'click.twentysixteen', function() { + $( this ).add( siteHeaderMenu ).toggleClass( 'toggled-on' ); + + // jscs:disable + $( this ).add( siteNavigation ).add( socialNavigation ).attr( 'aria-expanded', $( this ).add( siteNavigation ).add( socialNavigation ).attr( 'aria-expanded' ) === 'false' ? 'true' : 'false' ); + // jscs:enable + } ); + } )(); + + // Fix sub-menus for touch devices and better focus for hidden submenu items for accessibility. + ( function() { + if ( ! siteNavigation.length || ! siteNavigation.children().length ) { + return; + } + + // Toggle `focus` class to allow submenu access on tablets. + function toggleFocusClassTouchScreen() { + if ( window.innerWidth >= 910 ) { + $( document.body ).on( 'touchstart.twentysixteen', function( e ) { + if ( ! $( e.target ).closest( '.main-navigation li' ).length ) { + $( '.main-navigation li' ).removeClass( 'focus' ); + } + } ); + siteNavigation.find( '.menu-item-has-children > a' ).on( 'touchstart.twentysixteen', function( e ) { + var el = $( this ).parent( 'li' ); + + if ( ! el.hasClass( 'focus' ) ) { + e.preventDefault(); + el.toggleClass( 'focus' ); + el.siblings( '.focus' ).removeClass( 'focus' ); + } + } ); + } else { + siteNavigation.find( '.menu-item-has-children > a' ).unbind( 'touchstart.twentysixteen' ); + } + } + + if ( 'ontouchstart' in window ) { + $( window ).on( 'resize.twentysixteen', toggleFocusClassTouchScreen ); + toggleFocusClassTouchScreen(); + } + + siteNavigation.find( 'a' ).on( 'focus.twentysixteen blur.twentysixteen', function() { + $( this ).parents( '.menu-item' ).toggleClass( 'focus' ); + } ); + } )(); + + // Add the default ARIA attributes for the menu toggle and the navigations. + function onResizeARIA() { + if ( window.innerWidth < 910 ) { + if ( menuToggle.hasClass( 'toggled-on' ) ) { + menuToggle.attr( 'aria-expanded', 'true' ); + } else { + menuToggle.attr( 'aria-expanded', 'false' ); + } + + if ( siteHeaderMenu.hasClass( 'toggled-on' ) ) { + siteNavigation.attr( 'aria-expanded', 'true' ); + socialNavigation.attr( 'aria-expanded', 'true' ); + } else { + siteNavigation.attr( 'aria-expanded', 'false' ); + socialNavigation.attr( 'aria-expanded', 'false' ); + } + + menuToggle.attr( 'aria-controls', 'site-navigation social-navigation' ); + } else { + menuToggle.removeAttr( 'aria-expanded' ); + siteNavigation.removeAttr( 'aria-expanded' ); + socialNavigation.removeAttr( 'aria-expanded' ); + menuToggle.removeAttr( 'aria-controls' ); + } + } + + // Add 'below-entry-meta' class to elements. + function belowEntryMetaClass( param ) { + if ( body.hasClass( 'page' ) || body.hasClass( 'search' ) || body.hasClass( 'single-attachment' ) || body.hasClass( 'error404' ) ) { + return; + } + + $( '.entry-content' ).find( param ).each( function() { + var element = $( this ), + elementPos = element.offset(), + elementPosTop = elementPos.top, + entryFooter = element.closest( 'article' ).find( '.entry-footer' ), + entryFooterPos = entryFooter.offset(), + entryFooterPosBottom = entryFooterPos.top + ( entryFooter.height() + 28 ), + caption = element.closest( 'figure' ), + figcaption = element.next( 'figcaption' ), + newImg; + + // Add 'below-entry-meta' to elements below the entry meta. + if ( elementPosTop > entryFooterPosBottom ) { + + // Check if full-size images and captions are larger than or equal to 840px. + if ( 'img.size-full' === param || '.wp-block-image img' === param ) { + + // Create an image to find native image width of resized images (i.e. max-width: 100%). + newImg = new Image(); + newImg.src = element.attr( 'src' ); + + $( newImg ).on( 'load.twentysixteen', function() { + if ( newImg.width >= 840 ) { + + // Check if an image in an image block has a width attribute; if its value is less than 840, return. + if ( '.wp-block-image img' === param && element.is( '[width]' ) && element.attr( 'width' ) < 840 ) { + return; + } + + element.addClass( 'below-entry-meta' ); + + if ( caption.hasClass( 'wp-caption' ) ) { + caption.addClass( 'below-entry-meta' ); + caption.removeAttr( 'style' ); + } + + if ( figcaption ) { + figcaption.addClass( 'below-entry-meta' ); + } + } + } ); + } else { + element.addClass( 'below-entry-meta' ); + } + } else { + element.removeClass( 'below-entry-meta' ); + caption.removeClass( 'below-entry-meta' ); + } + } ); + } + + $( document ).ready( function() { + body = $( document.body ); + + $( window ) + .on( 'load.twentysixteen', onResizeARIA ) + .on( 'resize.twentysixteen', function() { + clearTimeout( resizeTimer ); + resizeTimer = setTimeout( function() { + belowEntryMetaClass( 'img.size-full' ); + belowEntryMetaClass( 'blockquote.alignleft, blockquote.alignright' ); + belowEntryMetaClass( '.wp-block-image img' ); + }, 300 ); + onResizeARIA(); + } ); + + belowEntryMetaClass( 'img.size-full' ); + belowEntryMetaClass( 'blockquote.alignleft, blockquote.alignright' ); + belowEntryMetaClass( '.wp-block-image img' ); + } ); +} )( jQuery ); |
