From 37144f5414ebc3a344d2da794a4dfa148e6ab54a Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Thu, 15 Jan 2015 11:47:48 -0800 Subject: [PATCH 01/31] Add spacing to match WP standards, comment out logging, add $ to variable names for jQuery objects --- includes/js/theme-jquery.js | 123 ++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 60 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 784db77..ef3bf8b 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -7,98 +7,101 @@ */ // Executes when the document is ready -jQuery(document).ready(function( $ ) { +jQuery( document ).ready( function( $ ) { // Get PHP vars passed via wp_localize_script() trestleEqualColsBreakpoint = trestle_vars.trestle_equal_cols_breakpoint; trestleEqualHeightCols = trestle_vars.trestle_equal_height_cols; // Remove .no-jquery body class - $('body').removeClass('no-jquery'); + $( 'body' ).removeClass( 'no-jquery' ); // External Links var h = window.location.host.toLowerCase(); - $('[href^="http"]').not('[href*="' + h + '"]').addClass('external-link').attr("target", "_blank"); + $( '[href^="http"]' ).not( '[href*="' + h + '"]' ).addClass( 'external-link' ).attr( "target", "_blank" ); // Add classes to different types of links - $('a[href^="mailto:"]').addClass('email-link'); - $('a[href*=".pdf"]').attr({"target":"_blank"}).addClass('pdf-link'); - $('a[href*=".doc"]').attr({"target":"_blank"}).addClass('doc-link'); - $('a').has('img').addClass('image-link'); + $( 'a[href^="mailto:"]' ).addClass( 'email-link' ); + $( 'a[href*=".pdf"]' ).attr({ "target":"_blank" }).addClass( 'pdf-link' ); + $( 'a[href*=".doc"]' ).attr({ "target":"_blank" }).addClass( 'doc-link' ); + $( 'a' ).has( 'img' ).addClass( 'image-link' ); // Add classes to parts of lists - $('li:last-child').addClass('last'); - $('li:first-child').addClass('first'); - $('ul, ol').parent('li').addClass('parent'); + $( 'li:last-child' ).addClass( 'last' ); + $( 'li:first-child' ).addClass( 'first' ); + $( 'ul, ol' ).parent( 'li' ).addClass( 'parent' ); // Mobile header toggle buttons - $('.site-header .title-area').after('
'); - $('.site-header .widget-area, .nav-primary').each(function(i) { - var target = $(this); - + $( '.site-header .title-area' ).after( '
' ); + $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { + var $target = $( this ); var buttonClass = 'toggle-button'; // Add classes of target element - var targetClass = target.attr('class').split(/\s+/); - $.each(targetClass, function(index,value) { + var targetClass = $target.attr( 'class' ).split( /\s+/ ); + $.each( targetClass, function( index, value ) { buttonClass += ' targets-' + value; }); - if ( $(this).is( 'nav' ) ) { + if ( $( this ).is( 'nav' ) ) { buttonClass += ' nav-toggle'; } // Add toggle buttons to header - $('.toggle-buttons').prepend('Toggle'); + $( '.toggle-buttons' ).prepend( 'Toggle' ); // Add target class to nav and widget areas - target.addClass('toggle-target-' + i ); + $target.addClass( 'toggle-target-' + i ); }); // Toggle widget areas and primary nav - $('.site-header .toggle-button').click( function( event ) { + $( '.site-header .toggle-button' ).click( function( event ) { event.preventDefault(); - var button = $(this); - var target = $( '.toggle-target-' + button.attr('id').match(/\d+/) ); + var $button = $( this ); + var $target = $( '.toggle-target-' + button.attr( 'id' ).match( /\d+/ ) ); // Toggle buttons - button.toggleClass('open'); - $('.site-header .toggle-button').not(button).removeClass('open'); + $button.toggleClass( 'open' ); + $( '.site-header .toggle-button' ).not( $button ).removeClass( 'open' ); // Toggle targets - target.toggleClass('open'); - $('[class*="toggle-target"]').not(target).removeClass('open'); + $target.toggleClass( 'open' ); + $( '[class*="toggle-target"]' ).not( $target ).removeClass( 'open' ); }); // Mobile navigation icons var closedIcon = '+'; var openIcon = '-'; - $('.nav-primary').find('.genesis-nav-menu .parent:not(.current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a').after('' + closedIcon + ''); - $('.nav-primary').find('.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a').after('' + openIcon + ''); + $( '.nav-primary' ) + .find( '.genesis-nav-menu .parent:not(.current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ) + .after( '' + closedIcon + '' ); + $( '.nav-primary' ) + .find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ) + .after( '' + openIcon + '' ); // Mobile navigation expand/contract functionality - $('.sub-icon').click(function(event) { + $( '.sub-icon' ).click( function( event ) { event.preventDefault(); - var icon = $(this); - icon.next('ul').slideToggle().toggleClass('open'); - if ( icon.text().indexOf( closedIcon ) !== -1 ) - icon.text(openIcon); - else if ( icon.text().indexOf( openIcon ) !== -1 ) - icon.text(closedIcon); + var $icon = $( this ); + $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); + if ( $icon.text().indexOf( closedIcon ) !== -1 ) + $icon.text( openIcon ); + else if ( $icon.text().indexOf( openIcon ) !== -1 ) + $icon.text( closedIcon ); }); - $('.widget-area-toggle').click(function(event) { + $( '.widget-area-toggle' ).click( function( event ) { event.preventDefault(); - var button = $(this); - button.toggleClass('open'); - button.next('.widget-area').slideToggle(); + var $button = $( this ); + $button.toggleClass( 'open' ); + $button.next( '.widget-area' ).slideToggle(); }); // Equal height homepage cols - $('.equal-height-genesis-extender-cols .ez-home-container-area').each(function() { - $(this).children('.widget-area').equalHeights(null,null,trestleEqualColsBreakpoint); + $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { + $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); }); @@ -106,7 +109,7 @@ jQuery(document).ready(function( $ ) { // Executes when complete page is fully loaded, including all frames, objects, and images -jQuery(window).load(function( $ ) { +jQuery( window ).load( function( $ ) { }); @@ -125,32 +128,32 @@ jQuery(window).load(function( $ ) { * * Usage: jQuery(object).equalHeights([minHeight], [maxHeight], [breakPoint]); * - * Example 1: jQuery(".cols").equalHeights(); Sets all columns to the same height. - * Example 2: jQuery(".cols").equalHeights(400); Sets all cols to at least 400px tall. - * Example 3: jQuery(".cols").equalHeights(100,300); Cols are at least 100 but no more + * Example 1: jQuery( ".cols" ).equalHeights(); Sets all columns to the same height. + * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all cols to at least 400px tall. + * Example 3: jQuery( ".cols" ).equalHeights( 100, 300 ); Cols are at least 100 but no more * than 300 pixels tall. Elements with too much content will gain a scrollbar. - * Example 4: jQuery(".cols").equalHeights(null, null,768); Only resize columns above 768px viewport + * Example 4: jQuery( ".cols" ).equalHeights( null, null,768 ); Only resize columns above 768px viewport * */ - (function( $ ) { - $.fn.equalHeights = function(minHeight, maxHeight, breakPoint) { - var items = this; + ( function( $ ) { + $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { + var $items = this; breakPoint = breakPoint || 0; // Bind functionality to appropriate events - $(window).on('load orientationchange resize equalheights', function() { - tallest = (minHeight) ? minHeight : 0; - items.each(function() { - $(this).height('auto'); - if($(this).outerHeight() > tallest) { - tallest = $(this).outerHeight(); + $( window ).on( 'load orientationchange resize equalheights', function() { + tallest = ( minHeight ) ? minHeight : 0; + $items.each( function() { + $( this ).height( 'auto' ); + if( $( this ).outerHeight() > tallest ) { + tallest = $( this ).outerHeight(); } }); // Get viewport width (taking scrollbars into account) var e = window; a = 'inner'; - if (!('innerWidth' in window )) { + if ( !( 'innerWidth' in window ) ) { a = 'client'; e = document.documentElement || document.body; } @@ -158,10 +161,10 @@ jQuery(window).load(function( $ ) { // Equalize column heights if above the specified breakpoint if ( width >= breakPoint ) { - if((maxHeight) && tallest > maxHeight) tallest = maxHeight; - console.log(tallest); - return items.each(function() { - $(this).height(tallest); + if( ( maxHeight ) && tallest > maxHeight ) tallest = maxHeight; + //console.log( tallest ); + return items.each( function() { + $( this ).height( tallest ); }); } }); From 3327b1518cabe1d475970928e049b16d6fd3ef4b Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Thu, 15 Jan 2015 17:27:39 -0800 Subject: [PATCH 02/31] Fix $button selector --- includes/js/theme-jquery.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index ef3bf8b..2063e31 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -15,7 +15,7 @@ jQuery( document ).ready( function( $ ) { // Remove .no-jquery body class $( 'body' ).removeClass( 'no-jquery' ); - + // External Links var h = window.location.host.toLowerCase(); $( '[href^="http"]' ).not( '[href*="' + h + '"]' ).addClass( 'external-link' ).attr( "target", "_blank" ); @@ -42,7 +42,7 @@ jQuery( document ).ready( function( $ ) { $.each( targetClass, function( index, value ) { buttonClass += ' targets-' + value; }); - + if ( $( this ).is( 'nav' ) ) { buttonClass += ' nav-toggle'; } @@ -53,13 +53,13 @@ jQuery( document ).ready( function( $ ) { // Add target class to nav and widget areas $target.addClass( 'toggle-target-' + i ); }); - + // Toggle widget areas and primary nav $( '.site-header .toggle-button' ).click( function( event ) { event.preventDefault(); var $button = $( this ); - var $target = $( '.toggle-target-' + button.attr( 'id' ).match( /\d+/ ) ); + var $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); // Toggle buttons $button.toggleClass( 'open' ); @@ -80,7 +80,7 @@ jQuery( document ).ready( function( $ ) { $( '.nav-primary' ) .find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ) .after( '' + openIcon + '' ); - + // Mobile navigation expand/contract functionality $( '.sub-icon' ).click( function( event ) { event.preventDefault(); @@ -91,7 +91,7 @@ jQuery( document ).ready( function( $ ) { else if ( $icon.text().indexOf( openIcon ) !== -1 ) $icon.text( closedIcon ); }); - + $( '.widget-area-toggle' ).click( function( event ) { event.preventDefault(); var $button = $( this ); @@ -104,7 +104,7 @@ jQuery( document ).ready( function( $ ) { $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); }); - + }); /* end of as page load scripts */ @@ -116,7 +116,7 @@ jQuery( window ).load( function( $ ) { /** * Equal Heights Plugin - * + * * Equalize the heights of elements. Great for columns or any elements * that need to be the same size (floats, etc). * @@ -127,13 +127,13 @@ jQuery( window ).load( function( $ ) { * - binds the script to run on load, orientation change (for mobile), and when resizing the window * * Usage: jQuery(object).equalHeights([minHeight], [maxHeight], [breakPoint]); - * + * * Example 1: jQuery( ".cols" ).equalHeights(); Sets all columns to the same height. * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all cols to at least 400px tall. * Example 3: jQuery( ".cols" ).equalHeights( 100, 300 ); Cols are at least 100 but no more * than 300 pixels tall. Elements with too much content will gain a scrollbar. * Example 4: jQuery( ".cols" ).equalHeights( null, null,768 ); Only resize columns above 768px viewport - * + * */ ( function( $ ) { $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { From 41494c53ae85bc5f3ba456e73ace8edaab266815 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 16 Jan 2015 13:48:16 -0800 Subject: [PATCH 03/31] Improvements to the equalHeights plugin, relocation of load scripts, various fixes --- includes/js/theme-jquery.js | 105 +++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 42 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 2063e31..d825bf3 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -99,19 +99,17 @@ jQuery( document ).ready( function( $ ) { $button.next( '.widget-area' ).slideToggle(); }); - // Equal height homepage cols - $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { - $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); - }); + // Executes when complete page is fully loaded, including all frames, objects, and images + $( window ).on( 'load', function() { + // Equal height homepage cols + $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { + $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); + }); -}); /* end of as page load scripts */ + }); - -// Executes when complete page is fully loaded, including all frames, objects, and images -jQuery( window ).load( function( $ ) { - -}); +}); /* end of page load scripts */ /** @@ -135,39 +133,62 @@ jQuery( window ).load( function( $ ) { * Example 4: jQuery( ".cols" ).equalHeights( null, null,768 ); Only resize columns above 768px viewport * */ - ( function( $ ) { - $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { - var $items = this; - breakPoint = breakPoint || 0; +( function( $ ) { - // Bind functionality to appropriate events - $( window ).on( 'load orientationchange resize equalheights', function() { - tallest = ( minHeight ) ? minHeight : 0; - $items.each( function() { - $( this ).height( 'auto' ); - if( $( this ).outerHeight() > tallest ) { - tallest = $( this ).outerHeight(); - } - }); + $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { - // Get viewport width (taking scrollbars into account) - var e = window; - a = 'inner'; - if ( !( 'innerWidth' in window ) ) { - a = 'client'; - e = document.documentElement || document.body; - } - width = e[ a+'Width' ]; + /** + * Unbind all plugin events so that we can call this function again + * to reset it without creating multiple handlers for the same events. + * This allows us to manually retrigger if we have added new elements + * into the DOM using ajax or .clone(). + */ + $( window ).off( '.equalheights', equalHeightsInit ); - // Equalize column heights if above the specified breakpoint - if ( width >= breakPoint ) { - if( ( maxHeight ) && tallest > maxHeight ) tallest = maxHeight; - //console.log( tallest ); - return items.each( function() { - $( this ).height( tallest ); - }); - } - }); - } + // Scope our local variables + var $items, breakPoint; - })(jQuery); + // Store the jQuery objects upon which this function has been called + $items = this; + + // Store the breakPoint arg if it was passsed in + breakPoint = breakPoint || 0; + + // Actual logic for this plugin + var equalHeightsInit = function() { + + // Calculate the tallest + tallest = ( minHeight ) ? minHeight : 0; + $items.each( function() { + $( this ).height( 'auto' ); + if( $( this ).outerHeight() > tallest ) { + tallest = $( this ).outerHeight(); + } + }); + + // Get viewport width (taking scrollbars into account) + var e = window; + a = 'inner'; + if ( !( 'innerWidth' in window ) ) { + a = 'client'; + e = document.documentElement || document.body; + } + width = e[ a+'Width' ]; + + // Equalize heights if viewport width is above the specified breakpoint + if ( width >= breakPoint ) { + if( ( maxHeight ) && tallest > maxHeight ) tallest = maxHeight; + return $items.each( function() { + $( this ).height( tallest ); + }); + } + } + + // Trigger the main plugin function + equalHeightsInit(); + + // Bind appropriate events for the first time this plugin is run + $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', equalHeightsInit ); + } + +})( jQuery ); From b0fa089bd035e39abd887507aa76f2f05de445d8 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 23 Jan 2015 16:46:53 -0800 Subject: [PATCH 04/31] Improvements to the equalHeights plugin Now we're using $.proxy() to keep the context correct when executing the event handlers --- includes/js/theme-jquery.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index d825bf3..057fe74 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -143,7 +143,7 @@ jQuery( document ).ready( function( $ ) { * This allows us to manually retrigger if we have added new elements * into the DOM using ajax or .clone(). */ - $( window ).off( '.equalheights', equalHeightsInit ); + $( window ).off( '.equalheights', doEqualHeights ); // Scope our local variables var $items, breakPoint; @@ -155,7 +155,7 @@ jQuery( document ).ready( function( $ ) { breakPoint = breakPoint || 0; // Actual logic for this plugin - var equalHeightsInit = function() { + function doEqualHeights( $items ) { // Calculate the tallest tallest = ( minHeight ) ? minHeight : 0; @@ -185,10 +185,12 @@ jQuery( document ).ready( function( $ ) { } // Trigger the main plugin function - equalHeightsInit(); + doEqualHeights( $items ); + + // Attach doEqualHeights as an event handler to the window resize events + // We're using $.proxy() to pass in the right $items to keep our context correct + $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', $.proxy( doEqualHeights, null, $items ) ); - // Bind appropriate events for the first time this plugin is run - $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', equalHeightsInit ); } })( jQuery ); From c6a8b0726dfa2285e7068ddd1c5be82bdebbd42f Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 23 Jan 2015 16:48:17 -0800 Subject: [PATCH 05/31] Update the inline documentation for equalHeights --- includes/js/theme-jquery.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 057fe74..feae7ec 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -118,11 +118,14 @@ jQuery( document ).ready( function( $ ) { * Equalize the heights of elements. Great for columns or any elements * that need to be the same size (floats, etc). * + * Must be first triggered on either ready (if only text) or load (if images are included) + * * Based on Rob Glazebrook's (cssnewbie.com) script * * Additions * - ability to include a break point (the minimum viewport width at which the script does anything) - * - binds the script to run on load, orientation change (for mobile), and when resizing the window + * - binds to window resize events (resize and orientationchange), unbinds and rebinds if called again + * - can be called multiple times to reset or handle DOM changes via ajax or .clone() * * Usage: jQuery(object).equalHeights([minHeight], [maxHeight], [breakPoint]); * @@ -190,7 +193,6 @@ jQuery( document ).ready( function( $ ) { // Attach doEqualHeights as an event handler to the window resize events // We're using $.proxy() to pass in the right $items to keep our context correct $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', $.proxy( doEqualHeights, null, $items ) ); - } })( jQuery ); From 10b473d97e321a3015a7d41e5f6e5107e9f5bba0 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 23 Jan 2015 20:54:08 -0800 Subject: [PATCH 06/31] Improve jQuery to automatically remove focus (dotted line) on events with e.preventDefault Also simplifying the equalHeights inline docs --- includes/js/theme-jquery.js | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index feae7ec..a9a8199 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -56,9 +56,16 @@ jQuery( document ).ready( function( $ ) { // Toggle widget areas and primary nav $( '.site-header .toggle-button' ).click( function( event ) { + + // Prevent default behavior event.preventDefault(); + // Get toggle button that was clicked var $button = $( this ); + + //Remove focus + $button.blur(); + var $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); // Toggle buttons @@ -68,6 +75,7 @@ jQuery( document ).ready( function( $ ) { // Toggle targets $target.toggleClass( 'open' ); $( '[class*="toggle-target"]' ).not( $target ).removeClass( 'open' ); + }); // Mobile navigation icons @@ -83,8 +91,16 @@ jQuery( document ).ready( function( $ ) { // Mobile navigation expand/contract functionality $( '.sub-icon' ).click( function( event ) { + + // Prevent default behavior event.preventDefault(); + + // Get icon click var $icon = $( this ); + + // Remove focus + $icon.blur(); + $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); if ( $icon.text().indexOf( closedIcon ) !== -1 ) $icon.text( openIcon ); @@ -93,8 +109,16 @@ jQuery( document ).ready( function( $ ) { }); $( '.widget-area-toggle' ).click( function( event ) { + + // Prevent default behavior event.preventDefault(); + + // Get button clicked var $button = $( this ); + + // Remove focus + $button.blur(); + $button.toggleClass( 'open' ); $button.next( '.widget-area' ).slideToggle(); }); @@ -118,14 +142,12 @@ jQuery( document ).ready( function( $ ) { * Equalize the heights of elements. Great for columns or any elements * that need to be the same size (floats, etc). * - * Must be first triggered on either ready (if only text) or load (if images are included) - * * Based on Rob Glazebrook's (cssnewbie.com) script * * Additions * - ability to include a break point (the minimum viewport width at which the script does anything) * - binds to window resize events (resize and orientationchange), unbinds and rebinds if called again - * - can be called multiple times to reset or handle DOM changes via ajax or .clone() + * - can be called multiple times to handle DOM changes via ajax or .clone() * * Usage: jQuery(object).equalHeights([minHeight], [maxHeight], [breakPoint]); * From e9afb553708eabf1a5a1bc201d3a3adcc3b97d3f Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 23 Jan 2015 22:20:01 -0800 Subject: [PATCH 07/31] Formatting, first-pass at documenting every block --- includes/js/theme-jquery.js | 82 ++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index a9a8199..8b78df1 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -34,21 +34,29 @@ jQuery( document ).ready( function( $ ) { // Mobile header toggle buttons $( '.site-header .title-area' ).after( '
' ); $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { - var $target = $( this ); - var buttonClass = 'toggle-button'; - // Add classes of target element - var targetClass = $target.attr( 'class' ).split( /\s+/ ); + // Store target + $target = $( this ); + + // Scope variables + var $target, buttonClass, targetClass; + + // Setup classes + buttonClass = 'toggle-button'; + targetClass = $target.attr( 'class' ).split( /\s+/ ); + + // Add targets-[] class to buttonClass $.each( targetClass, function( index, value ) { buttonClass += ' targets-' + value; }); - if ( $( this ).is( 'nav' ) ) { + // Add nav-toggle class to buttonClass if the button is for the nav + if ( $target.is( 'nav' ) ) { buttonClass += ' nav-toggle'; } // Add toggle buttons to header - $( '.toggle-buttons' ).prepend( 'Toggle' ); + $( '.toggle-buttons' ).prepend( 'Toggle'); // Add target class to nav and widget areas $target.addClass( 'toggle-target-' + i ); @@ -57,16 +65,20 @@ jQuery( document ).ready( function( $ ) { // Toggle widget areas and primary nav $( '.site-header .toggle-button' ).click( function( event ) { - // Prevent default behavior + // Prevent default behavior event.preventDefault(); - // Get toggle button that was clicked - var $button = $( this ); - + // Scope our variables + var $button, $target; + + // Get toggle button that was clicked + $button = $( this ); + //Remove focus $button.blur(); - - var $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); + + // Match the button to the right target + $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); // Toggle buttons $button.toggleClass( 'open' ); @@ -75,52 +87,52 @@ jQuery( document ).ready( function( $ ) { // Toggle targets $target.toggleClass( 'open' ); $( '[class*="toggle-target"]' ).not( $target ).removeClass( 'open' ); - }); // Mobile navigation icons var closedIcon = '+'; var openIcon = '-'; - $( '.nav-primary' ) - .find( '.genesis-nav-menu .parent:not(.current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ) - .after( '' + closedIcon + '' ); - $( '.nav-primary' ) - .find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ) - .after( '' + openIcon + '' ); + // Insert the icons into the nav where appropriate + $( '.nav-primary' ).find( '.genesis-nav-menu .parent:not( .current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ).after( '' + closedIcon + '' ); + $( '.nav-primary' ).find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ).after( '' + openIcon + '' ); // Mobile navigation expand/contract functionality $( '.sub-icon' ).click( function( event ) { - + // Prevent default behavior event.preventDefault(); - + // Get icon click var $icon = $( this ); - + // Remove focus $icon.blur(); - + + // Expand/contract $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); - if ( $icon.text().indexOf( closedIcon ) !== -1 ) + + // Change the icon to indicate open/closed + if ( $icon.text().indexOf( closedIcon ) !== -1 ) $icon.text( openIcon ); else if ( $icon.text().indexOf( openIcon ) !== -1 ) $icon.text( closedIcon ); }); + // Header widget area expand/contract functionality $( '.widget-area-toggle' ).click( function( event ) { - + // Prevent default behavior event.preventDefault(); - + // Get button clicked var $button = $( this ); - + // Remove focus $button.blur(); - - $button.toggleClass( 'open' ); - $button.next( '.widget-area' ).slideToggle(); + + // Expand/contract + $button.toggleClass( 'open' ).next( '.widget-area' ).slideToggle(); }); // Executes when complete page is fully loaded, including all frames, objects, and images @@ -179,7 +191,7 @@ jQuery( document ).ready( function( $ ) { // Store the breakPoint arg if it was passsed in breakPoint = breakPoint || 0; - // Actual logic for this plugin + // Equalize the heights function doEqualHeights( $items ) { // Calculate the tallest @@ -209,12 +221,14 @@ jQuery( document ).ready( function( $ ) { } } - // Trigger the main plugin function + // Start the equalizing doEqualHeights( $items ); // Attach doEqualHeights as an event handler to the window resize events - // We're using $.proxy() to pass in the right $items to keep our context correct - $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', $.proxy( doEqualHeights, null, $items ) ); + // Use $.proxy() to pass in the right $items to keep the context correct + // when dealing with more than one collection of $items + $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', + $.proxy( doEqualHeights, null, $items ) ); } })( jQuery ); From 8c3122e90b41a9546c2ecb5192c831a1fe3c2ef4 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 23 Jan 2015 22:28:08 -0800 Subject: [PATCH 08/31] Whitespace --- includes/js/theme-jquery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 8b78df1..df586c2 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -56,7 +56,7 @@ jQuery( document ).ready( function( $ ) { } // Add toggle buttons to header - $( '.toggle-buttons' ).prepend( 'Toggle'); + $( '.toggle-buttons' ).prepend( 'Toggle' ); // Add target class to nav and widget areas $target.addClass( 'toggle-target-' + i ); From da54115ae5e8bad63acb4ce1573a0ee93bc5e9db Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Fri, 30 Jan 2015 00:29:06 -0800 Subject: [PATCH 09/31] Big improvements to the equalHeights plugin Also more specific selectors for the link classes --- includes/js/theme-jquery.js | 115 +++++++++++++++++++++++++----------- 1 file changed, 80 insertions(+), 35 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index df586c2..d33dd9e 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -22,8 +22,8 @@ jQuery( document ).ready( function( $ ) { // Add classes to different types of links $( 'a[href^="mailto:"]' ).addClass( 'email-link' ); - $( 'a[href*=".pdf"]' ).attr({ "target":"_blank" }).addClass( 'pdf-link' ); - $( 'a[href*=".doc"]' ).attr({ "target":"_blank" }).addClass( 'doc-link' ); + $( 'a[href$=".pdf"]' ).attr({ "target":"_blank" }).addClass( 'pdf-link' ); + $( 'a[href$=".doc"]' ).attr({ "target":"_blank" }).addClass( 'doc-link' ); $( 'a' ).has( 'img' ).addClass( 'image-link' ); // Add classes to parts of lists @@ -86,7 +86,7 @@ jQuery( document ).ready( function( $ ) { // Toggle targets $target.toggleClass( 'open' ); - $( '[class*="toggle-target"]' ).not( $target ).removeClass( 'open' ); + $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); }); // Mobile navigation icons @@ -147,7 +147,6 @@ jQuery( document ).ready( function( $ ) { }); /* end of page load scripts */ - /** * Equal Heights Plugin * @@ -156,45 +155,66 @@ jQuery( document ).ready( function( $ ) { * * Based on Rob Glazebrook's (cssnewbie.com) script * - * Additions + * Features * - ability to include a break point (the minimum viewport width at which the script does anything) - * - binds to window resize events (resize and orientationchange), unbinds and rebinds if called again - * - can be called multiple times to handle DOM changes via ajax or .clone() + * - binds to window resize events (resize and orientationchange) + * - will automatically detect new elements added to the DOM + * - can be called multiple times without duplicating any events * - * Usage: jQuery(object).equalHeights([minHeight], [maxHeight], [breakPoint]); + * Usage: jQuery( object ).equalHeights( [minHeight], [maxHeight], [breakPoint] ); * * Example 1: jQuery( ".cols" ).equalHeights(); Sets all columns to the same height. * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all cols to at least 400px tall. * Example 3: jQuery( ".cols" ).equalHeights( 100, 300 ); Cols are at least 100 but no more * than 300 pixels tall. Elements with too much content will gain a scrollbar. - * Example 4: jQuery( ".cols" ).equalHeights( null, null,768 ); Only resize columns above 768px viewport - * + * Example 4: jQuery( ".cols" ).equalHeights( null, null, 768 ); Only resize columns above 768px viewport */ ( function( $ ) { $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { - /** - * Unbind all plugin events so that we can call this function again - * to reset it without creating multiple handlers for the same events. - * This allows us to manually retrigger if we have added new elements - * into the DOM using ajax or .clone(). - */ - $( window ).off( '.equalheights', doEqualHeights ); + // Scope our variables + var selector, args, eventData, resizeSet; - // Scope our local variables - var $items, breakPoint; + // Get the selector used to call equalHeights + selector = this.selector; - // Store the jQuery objects upon which this function has been called - $items = this; - - // Store the breakPoint arg if it was passsed in + // Use the args that were passed in or use the defaults + minHeight = minHeight || null; + maxHeight = maxHeight || null; breakPoint = breakPoint || 0; - // Equalize the heights - function doEqualHeights( $items ) { + // Combine args into an array + args = [ minHeight, maxHeight, breakPoint ]; - // Calculate the tallest + // Check if our global already exists + if ( window.equalHeightsItems ) { + + // It does, so add or overwrite the current object in it + window.equalHeightsItems[selector] = args; + + } else { + + // It doesn't, so create the global and store the current object in it + window.equalHeightsItems = {}; + window.equalHeightsItems[selector] = args; + } + + // Function to do the equalizing of the heights + function doEqualHeights( selector, args ) { + + // Scope our variables + var $items, tallest, e, a, width; + + // Grab the collection of items fresh from the DOM + $items = $( selector ); + + // Store the passed in args + minHeight = args[0]; + maxHeight = args[1]; + breakPoint = args[2]; + + // Calculate the tallest item tallest = ( minHeight ) ? minHeight : 0; $items.each( function() { $( this ).height( 'auto' ); @@ -204,7 +224,7 @@ jQuery( document ).ready( function( $ ) { }); // Get viewport width (taking scrollbars into account) - var e = window; + e = window; a = 'inner'; if ( !( 'innerWidth' in window ) ) { a = 'client'; @@ -212,7 +232,7 @@ jQuery( document ).ready( function( $ ) { } width = e[ a+'Width' ]; - // Equalize heights if viewport width is above the specified breakpoint + // Equalize heights if viewport width is above the breakpoint if ( width >= breakPoint ) { if( ( maxHeight ) && tallest > maxHeight ) tallest = maxHeight; return $items.each( function() { @@ -221,14 +241,39 @@ jQuery( document ).ready( function( $ ) { } } - // Start the equalizing - doEqualHeights( $items ); + // Function to trigger the equalizing + function triggerEqualHeights() { - // Attach doEqualHeights as an event handler to the window resize events - // Use $.proxy() to pass in the right $items to keep the context correct - // when dealing with more than one collection of $items - $( window ).on( 'orientationchange.equalheights resize.equalheights equalheights.equalheights', - $.proxy( doEqualHeights, null, $items ) ); + // Loop through each object in our global + $.each( window.equalHeightsItems, function( selector, args ) { + + // Call doEqualHeights and pass in the current object + doEqualHeights( selector, args ); + }); + } + + // Grab the event data from the window object + eventData = $( window ).data('events'); + + // Check if the window has the smartresize event + if ( eventData.resize ) { + + // Check if the smartresize event has our namespace + $( eventData.resize ).each( function() { + + // It does, so store this information in a variable + if( this.namespace == 'equalheights' ) { resizeSet = true; } + }); + } + + // Bind the window smartresize event to our trigger function if we + // haven't already done so + if ( ! resizeSet ) { + $( window ).on( 'resize.equalheights', triggerEqualHeights ); + } + + // Trigger the first equalizing + triggerEqualHeights(); } })( jQuery ); From 33e7a5b3db66fddfb7f235cc4cc241f60c7d4945 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 2 Feb 2015 23:53:13 -0800 Subject: [PATCH 10/31] Rewrite of equalHeights plugin, now it's bulletproof --- includes/js/theme-jquery.js | 353 +++++++++++++++++++++--------------- 1 file changed, 205 insertions(+), 148 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index d33dd9e..44fd758 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -35,115 +35,115 @@ jQuery( document ).ready( function( $ ) { $( '.site-header .title-area' ).after( '
' ); $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { - // Store target - $target = $( this ); + // Store target + $target = $( this ); - // Scope variables - var $target, buttonClass, targetClass; + // Scope variables + var $target, buttonClass, targetClass; - // Setup classes - buttonClass = 'toggle-button'; - targetClass = $target.attr( 'class' ).split( /\s+/ ); + // Setup classes + buttonClass = 'toggle-button'; + targetClass = $target.attr( 'class' ).split( /\s+/ ); - // Add targets-[] class to buttonClass - $.each( targetClass, function( index, value ) { - buttonClass += ' targets-' + value; - }); + // Add targets-[] class to buttonClass + $.each( targetClass, function( index, value ) { + buttonClass += ' targets-' + value; + }); - // Add nav-toggle class to buttonClass if the button is for the nav - if ( $target.is( 'nav' ) ) { - buttonClass += ' nav-toggle'; - } + // Add nav-toggle class to buttonClass if the button is for the nav + if ( $target.is( 'nav' ) ) { + buttonClass += ' nav-toggle'; + } - // Add toggle buttons to header - $( '.toggle-buttons' ).prepend( 'Toggle' ); + // Add toggle buttons to header + $( '.toggle-buttons' ).prepend( 'Toggle' ); - // Add target class to nav and widget areas - $target.addClass( 'toggle-target-' + i ); - }); + // Add target class to nav and widget areas + $target.addClass( 'toggle-target-' + i ); + }); - // Toggle widget areas and primary nav - $( '.site-header .toggle-button' ).click( function( event ) { + // Toggle widget areas and primary nav + $( '.site-header .toggle-button' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Scope our variables - var $button, $target; + // Scope our variables + var $button, $target; - // Get toggle button that was clicked - $button = $( this ); + // Get toggle button that was clicked + $button = $( this ); - //Remove focus - $button.blur(); + //Remove focus + $button.blur(); - // Match the button to the right target - $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); + // Match the button to the right target + $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); - // Toggle buttons - $button.toggleClass( 'open' ); - $( '.site-header .toggle-button' ).not( $button ).removeClass( 'open' ); + // Toggle buttons + $button.toggleClass( 'open' ); + $( '.site-header .toggle-button' ).not( $button ).removeClass( 'open' ); - // Toggle targets - $target.toggleClass( 'open' ); - $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); - }); + // Toggle targets + $target.toggleClass( 'open' ); + $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); + }); - // Mobile navigation icons - var closedIcon = '+'; - var openIcon = '-'; + // Mobile navigation icons + var closedIcon = '+'; + var openIcon = '-'; - // Insert the icons into the nav where appropriate - $( '.nav-primary' ).find( '.genesis-nav-menu .parent:not( .current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ).after( '' + closedIcon + '' ); - $( '.nav-primary' ).find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ).after( '' + openIcon + '' ); + // Insert the icons into the nav where appropriate + $( '.nav-primary' ).find( '.genesis-nav-menu .parent:not( .current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ).after( '' + closedIcon + '' ); + $( '.nav-primary' ).find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ).after( '' + openIcon + '' ); - // Mobile navigation expand/contract functionality - $( '.sub-icon' ).click( function( event ) { + // Mobile navigation expand/contract functionality + $( '.sub-icon' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Get icon click - var $icon = $( this ); + // Get icon click + var $icon = $( this ); - // Remove focus - $icon.blur(); + // Remove focus + $icon.blur(); - // Expand/contract - $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); + // Expand/contract + $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); - // Change the icon to indicate open/closed - if ( $icon.text().indexOf( closedIcon ) !== -1 ) - $icon.text( openIcon ); - else if ( $icon.text().indexOf( openIcon ) !== -1 ) - $icon.text( closedIcon ); - }); + // Change the icon to indicate open/closed + if ( $icon.text().indexOf( closedIcon ) !== -1 ) { + $icon.text( openIcon ); + } else if ( $icon.text().indexOf( openIcon ) !== -1 ) { + $icon.text( closedIcon ); + } + }); - // Header widget area expand/contract functionality - $( '.widget-area-toggle' ).click( function( event ) { + // Header widget area expand/contract functionality + $( '.widget-area-toggle' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Get button clicked - var $button = $( this ); + // Get button clicked + var $button = $( this ); - // Remove focus - $button.blur(); + // Remove focus + $button.blur(); - // Expand/contract - $button.toggleClass( 'open' ).next( '.widget-area' ).slideToggle(); - }); + // Expand/contract + $button.toggleClass( 'open' ).next( '.widget-area' ).slideToggle(); + }); - // Executes when complete page is fully loaded, including all frames, objects, and images - $( window ).on( 'load', function() { + // Executes when complete page is fully loaded, including all frames, objects, and images + $( window ).on( 'load', function() { - // Equal height homepage cols - $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { - $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); - }); - - }); + // Equal height homepage cols + $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { + $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); + }); + }); }); /* end of page load scripts */ @@ -151,7 +151,7 @@ jQuery( document ).ready( function( $ ) { * Equal Heights Plugin * * Equalize the heights of elements. Great for columns or any elements - * that need to be the same size (floats, etc). + * that need to be the same height (floats, etc). * * Based on Rob Glazebrook's (cssnewbie.com) script * @@ -163,18 +163,53 @@ jQuery( document ).ready( function( $ ) { * * Usage: jQuery( object ).equalHeights( [minHeight], [maxHeight], [breakPoint] ); * - * Example 1: jQuery( ".cols" ).equalHeights(); Sets all columns to the same height. - * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all cols to at least 400px tall. + * Example 1: jQuery( ".cols" ).equalHeights(); Sets all .cols to the same height. + * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all .cols to at least 400px tall. * Example 3: jQuery( ".cols" ).equalHeights( 100, 300 ); Cols are at least 100 but no more * than 300 pixels tall. Elements with too much content will gain a scrollbar. - * Example 4: jQuery( ".cols" ).equalHeights( null, null, 768 ); Only resize columns above 768px viewport + * Example 4: jQuery( ".cols" ).equalHeights( null, null, 768 ); Only resize .cols above 768px viewport */ ( function( $ ) { - $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { + // debouncing function from John Hann + // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ + var debounce = function( func, threshold ) { + + // The timer + var timeout; + + return function debounced() { + + // Store the passed in function and args + var obj = this; + var args = arguments; + + // This is the callback that the timer triggers when debouncing is complete + function delayed() { + + // We have successfully debounced, trigger the function + func.apply( obj, args ); + + // And clear the timer + timeout = null; + } + + // If the timer is active, clear it + if ( timeout ) { + clearTimeout( timeout ); + } + + // Set the timer to 100ms and have it call delayed() when it completes + timeout = setTimeout( delayed, threshold || 50 ); + }; + }; + + // Main plugin function + $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { // Scope our variables - var selector, args, eventData, resizeSet; + var selector, minHeight, maxHeight, breakPoint, eventData, + ourEvents, eventName, eventSet; // Get the selector used to call equalHeights selector = this.selector; @@ -184,15 +219,14 @@ jQuery( document ).ready( function( $ ) { maxHeight = maxHeight || null; breakPoint = breakPoint || 0; - // Combine args into an array - args = [ minHeight, maxHeight, breakPoint ]; + // Combine args into an object + args = { minHeight: minHeight, maxHeight: maxHeight, breakPoint: breakPoint }; // Check if our global already exists if ( window.equalHeightsItems ) { // It does, so add or overwrite the current object in it window.equalHeightsItems[selector] = args; - } else { // It doesn't, so create the global and store the current object in it @@ -200,80 +234,103 @@ jQuery( document ).ready( function( $ ) { window.equalHeightsItems[selector] = args; } - // Function to do the equalizing of the heights - function doEqualHeights( selector, args ) { + // Grab the current event data from the window object + eventData = $( window ).data( 'events' ); - // Scope our variables - var $items, tallest, e, a, width; + // Store the events that will retrigger doEqualHeights() + ourEvents = [ 'resize', 'orientationchange', 'equalheights' ]; - // Grab the collection of items fresh from the DOM - $items = $( selector ); + // Loop through each event and attach our handler if it isn't attached already + $( ourEvents ).each( function() { - // Store the passed in args - minHeight = args[0]; - maxHeight = args[1]; - breakPoint = args[2]; + // Reset our flag to false + eventSet = false; - // Calculate the tallest item - tallest = ( minHeight ) ? minHeight : 0; - $items.each( function() { - $( this ).height( 'auto' ); - if( $( this ).outerHeight() > tallest ) { - tallest = $( this ).outerHeight(); - } - }); + // Store this event + thisEvent = this; - // Get viewport width (taking scrollbars into account) - e = window; - a = 'inner'; - if ( !( 'innerWidth' in window ) ) { - a = 'client'; - e = document.documentElement || document.body; - } - width = e[ a+'Width' ]; + // Add the namespace + eventName = this + '.equalheights'; - // Equalize heights if viewport width is above the breakpoint - if ( width >= breakPoint ) { - if( ( maxHeight ) && tallest > maxHeight ) tallest = maxHeight; - return $items.each( function() { - $( this ).height( tallest ); - }); - } - } + // Check whether this event is already on the window + if ( eventData[ thisEvent ] ) { - // Function to trigger the equalizing - function triggerEqualHeights() { + // Be careful not to disturb any unrelated listeners + $( eventData[ thisEvent ] ).each( function() { - // Loop through each object in our global - $.each( window.equalHeightsItems, function( selector, args ) { + // Confirm that the event has our namespace + if ( this.namespace == 'equalheights' ) { - // Call doEqualHeights and pass in the current object - doEqualHeights( selector, args ); - }); - } + // It does, so set our flag to true + eventSet = true; + } + }); + } - // Grab the event data from the window object - eventData = $( window ).data('events'); + // If our flag is still false then we can safely attach the event + if ( ! eventSet ) { - // Check if the window has the smartresize event - if ( eventData.resize ) { + // Namespace it and debounce it to be safe + $( window ).on( eventName, debounce( triggerEqualHeights ) ); + } + }); - // Check if the smartresize event has our namespace - $( eventData.resize ).each( function() { + // Trigger the first equalizing + triggerEqualHeights(); + }; - // It does, so store this information in a variable - if( this.namespace == 'equalheights' ) { resizeSet = true; } + // Function to trigger the equalizing + function triggerEqualHeights() { + + // Loop through each object in our global + $.each( window.equalHeightsItems, function( selector, args ) { + + // Call doEqualHeights and pass in the current object + doEqualHeights( selector, args ); + }); + } + + // Function to do the equalizing of the heights + function doEqualHeights( selector, args ) { + + // Scope our variables + var $items, minHeight, maxHeight, breakPoint, tallest, e, a, width; + + // Grab the collection of items fresh from the DOM + $items = $( selector ); + + // Store the passed in args + minHeight = args.minHeight; + maxHeight = args.maxHeight; + breakPoint = args.breakPoint; + + // Calculate the tallest item + tallest = ( minHeight ) ? minHeight : 0; + $items.each( function() { + $( this ).height( 'auto' ); + if( $( this ).outerHeight() > tallest ) { + tallest = $( this ).outerHeight(); + } + }); + + // Get viewport width (taking scrollbars into account) + e = window; + a = 'inner'; + if ( !( 'innerWidth' in window ) ) { + a = 'client'; + e = document.documentElement || document.body; + } + width = e[ a+'Width' ]; + + // Equalize heights if viewport width is above the breakpoint + if ( width >= breakPoint ) { + if ( ( maxHeight ) && tallest > maxHeight ) { + tallest = maxHeight; + } + return $items.each( function() { + $( this ).height( tallest ); }); } - - // Bind the window smartresize event to our trigger function if we - // haven't already done so - if ( ! resizeSet ) { - $( window ).on( 'resize.equalheights', triggerEqualHeights ); - } - - // Trigger the first equalizing - triggerEqualHeights(); } })( jQuery ); From 25a6a73defc3b5c61dcb48db7550735389670749 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 2 Feb 2015 23:56:28 -0800 Subject: [PATCH 11/31] Formatting --- includes/js/theme-jquery.js | 66 ++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 44fd758..81110c7 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -207,34 +207,34 @@ jQuery( document ).ready( function( $ ) { // Main plugin function $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { - // Scope our variables - var selector, minHeight, maxHeight, breakPoint, eventData, - ourEvents, eventName, eventSet; - - // Get the selector used to call equalHeights - selector = this.selector; - - // Use the args that were passed in or use the defaults - minHeight = minHeight || null; - maxHeight = maxHeight || null; - breakPoint = breakPoint || 0; - - // Combine args into an object - args = { minHeight: minHeight, maxHeight: maxHeight, breakPoint: breakPoint }; - - // Check if our global already exists - if ( window.equalHeightsItems ) { - - // It does, so add or overwrite the current object in it - window.equalHeightsItems[selector] = args; - } else { - - // It doesn't, so create the global and store the current object in it - window.equalHeightsItems = {}; - window.equalHeightsItems[selector] = args; - } - - // Grab the current event data from the window object + // Scope our variables + var selector, minHeight, maxHeight, breakPoint, eventData, + ourEvents, eventName, eventSet; + + // Get the selector used to call equalHeights + selector = this.selector; + + // Use the args that were passed in or use the defaults + minHeight = minHeight || null; + maxHeight = maxHeight || null; + breakPoint = breakPoint || 0; + + // Combine args into an object + args = { minHeight: minHeight, maxHeight: maxHeight, breakPoint: breakPoint }; + + // Check if our global already exists + if ( window.equalHeightsItems ) { + + // It does, so add or overwrite the current object in it + window.equalHeightsItems[selector] = args; + } else { + + // It doesn't, so create the global and store the current object in it + window.equalHeightsItems = {}; + window.equalHeightsItems[selector] = args; + } + + // Grab the current event data from the window object eventData = $( window ).data( 'events' ); // Store the events that will retrigger doEqualHeights() @@ -271,12 +271,12 @@ jQuery( document ).ready( function( $ ) { if ( ! eventSet ) { // Namespace it and debounce it to be safe - $( window ).on( eventName, debounce( triggerEqualHeights ) ); - } + $( window ).on( eventName, debounce( triggerEqualHeights ) ); + } }); - - // Trigger the first equalizing - triggerEqualHeights(); + + // Trigger the first equalizing + triggerEqualHeights(); }; // Function to trigger the equalizing From e9cf7c26f541faa26e7c4ccad0c85b4d4a9559cb Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 2 Feb 2015 23:59:02 -0800 Subject: [PATCH 12/31] Formatting --- includes/js/theme-jquery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 81110c7..c2ec45e 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -331,6 +331,6 @@ jQuery( document ).ready( function( $ ) { $( this ).height( tallest ); }); } - } + } })( jQuery ); From aa1fb81226a0e55612221d14ed001a958ef7e3c0 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 16 Feb 2015 12:24:34 -0800 Subject: [PATCH 13/31] Remove all references to equalHeights as this is now a plugin --- includes/js/theme-jquery.js | 196 ------------------------------------ 1 file changed, 196 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index c2ec45e..781141a 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -9,10 +9,6 @@ // Executes when the document is ready jQuery( document ).ready( function( $ ) { - // Get PHP vars passed via wp_localize_script() - trestleEqualColsBreakpoint = trestle_vars.trestle_equal_cols_breakpoint; - trestleEqualHeightCols = trestle_vars.trestle_equal_height_cols; - // Remove .no-jquery body class $( 'body' ).removeClass( 'no-jquery' ); @@ -139,198 +135,6 @@ jQuery( document ).ready( function( $ ) { // Executes when complete page is fully loaded, including all frames, objects, and images $( window ).on( 'load', function() { - // Equal height homepage cols - $( '.equal-height-genesis-extender-cols .ez-home-container-area' ).each( function() { - $( this ).children( '.widget-area' ).equalHeights( null, null, trestleEqualColsBreakpoint ); - }); }); }); /* end of page load scripts */ - -/** - * Equal Heights Plugin - * - * Equalize the heights of elements. Great for columns or any elements - * that need to be the same height (floats, etc). - * - * Based on Rob Glazebrook's (cssnewbie.com) script - * - * Features - * - ability to include a break point (the minimum viewport width at which the script does anything) - * - binds to window resize events (resize and orientationchange) - * - will automatically detect new elements added to the DOM - * - can be called multiple times without duplicating any events - * - * Usage: jQuery( object ).equalHeights( [minHeight], [maxHeight], [breakPoint] ); - * - * Example 1: jQuery( ".cols" ).equalHeights(); Sets all .cols to the same height. - * Example 2: jQuery( ".cols" ).equalHeights( 400 ); Sets all .cols to at least 400px tall. - * Example 3: jQuery( ".cols" ).equalHeights( 100, 300 ); Cols are at least 100 but no more - * than 300 pixels tall. Elements with too much content will gain a scrollbar. - * Example 4: jQuery( ".cols" ).equalHeights( null, null, 768 ); Only resize .cols above 768px viewport - */ -( function( $ ) { - - // debouncing function from John Hann - // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ - var debounce = function( func, threshold ) { - - // The timer - var timeout; - - return function debounced() { - - // Store the passed in function and args - var obj = this; - var args = arguments; - - // This is the callback that the timer triggers when debouncing is complete - function delayed() { - - // We have successfully debounced, trigger the function - func.apply( obj, args ); - - // And clear the timer - timeout = null; - } - - // If the timer is active, clear it - if ( timeout ) { - clearTimeout( timeout ); - } - - // Set the timer to 100ms and have it call delayed() when it completes - timeout = setTimeout( delayed, threshold || 50 ); - }; - }; - - // Main plugin function - $.fn.equalHeights = function( minHeight, maxHeight, breakPoint ) { - - // Scope our variables - var selector, minHeight, maxHeight, breakPoint, eventData, - ourEvents, eventName, eventSet; - - // Get the selector used to call equalHeights - selector = this.selector; - - // Use the args that were passed in or use the defaults - minHeight = minHeight || null; - maxHeight = maxHeight || null; - breakPoint = breakPoint || 0; - - // Combine args into an object - args = { minHeight: minHeight, maxHeight: maxHeight, breakPoint: breakPoint }; - - // Check if our global already exists - if ( window.equalHeightsItems ) { - - // It does, so add or overwrite the current object in it - window.equalHeightsItems[selector] = args; - } else { - - // It doesn't, so create the global and store the current object in it - window.equalHeightsItems = {}; - window.equalHeightsItems[selector] = args; - } - - // Grab the current event data from the window object - eventData = $( window ).data( 'events' ); - - // Store the events that will retrigger doEqualHeights() - ourEvents = [ 'resize', 'orientationchange', 'equalheights' ]; - - // Loop through each event and attach our handler if it isn't attached already - $( ourEvents ).each( function() { - - // Reset our flag to false - eventSet = false; - - // Store this event - thisEvent = this; - - // Add the namespace - eventName = this + '.equalheights'; - - // Check whether this event is already on the window - if ( eventData[ thisEvent ] ) { - - // Be careful not to disturb any unrelated listeners - $( eventData[ thisEvent ] ).each( function() { - - // Confirm that the event has our namespace - if ( this.namespace == 'equalheights' ) { - - // It does, so set our flag to true - eventSet = true; - } - }); - } - - // If our flag is still false then we can safely attach the event - if ( ! eventSet ) { - - // Namespace it and debounce it to be safe - $( window ).on( eventName, debounce( triggerEqualHeights ) ); - } - }); - - // Trigger the first equalizing - triggerEqualHeights(); - }; - - // Function to trigger the equalizing - function triggerEqualHeights() { - - // Loop through each object in our global - $.each( window.equalHeightsItems, function( selector, args ) { - - // Call doEqualHeights and pass in the current object - doEqualHeights( selector, args ); - }); - } - - // Function to do the equalizing of the heights - function doEqualHeights( selector, args ) { - - // Scope our variables - var $items, minHeight, maxHeight, breakPoint, tallest, e, a, width; - - // Grab the collection of items fresh from the DOM - $items = $( selector ); - - // Store the passed in args - minHeight = args.minHeight; - maxHeight = args.maxHeight; - breakPoint = args.breakPoint; - - // Calculate the tallest item - tallest = ( minHeight ) ? minHeight : 0; - $items.each( function() { - $( this ).height( 'auto' ); - if( $( this ).outerHeight() > tallest ) { - tallest = $( this ).outerHeight(); - } - }); - - // Get viewport width (taking scrollbars into account) - e = window; - a = 'inner'; - if ( !( 'innerWidth' in window ) ) { - a = 'client'; - e = document.documentElement || document.body; - } - width = e[ a+'Width' ]; - - // Equalize heights if viewport width is above the breakpoint - if ( width >= breakPoint ) { - if ( ( maxHeight ) && tallest > maxHeight ) { - tallest = maxHeight; - } - return $items.each( function() { - $( this ).height( tallest ); - }); - } - } - -})( jQuery ); From 098a9062ef5bc3c8cfae4f8ee4057bf307fa7dea Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 16 Feb 2015 12:28:00 -0800 Subject: [PATCH 14/31] Remove all references to equalHeights as this is now a plugin --- includes/admin/admin.php | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/includes/admin/admin.php b/includes/admin/admin.php index cf09130..d0d342d 100644 --- a/includes/admin/admin.php +++ b/includes/admin/admin.php @@ -48,8 +48,6 @@ function trestle_custom_defaults( $defaults ) { 'trestle_read_more_text' => __( 'Read More »', 'trestle' ), 'trestle_revisions_number' => 3, 'trestle_footer_widgets_number' => 3, - 'trestle_equal_height_cols' => 1, - 'trestle_equal_cols_breakpoint' => 768, ); // Populate Trestle settings with default values if they don't yet exist @@ -102,7 +100,6 @@ function trestle_register_social_sanitization_filters() { 'trestle_auto_nav_depth', 'trestle_revisions_number', 'trestle_footer_widgets_number', - 'trestle_equal_cols_breakpoint', ) ); @@ -303,15 +300,6 @@ function trestle_settings_box() { ?>

- -

-

- /> -

-

- -

-

/>
@@ -518,4 +506,4 @@ function trestle_register_required_plugins() { ); tgmpa( $plugins, $config ); -} \ No newline at end of file +} From a660a1924abd009674b40083febc4b3a64858fe7 Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Thu, 19 Feb 2015 14:52:07 -0800 Subject: [PATCH 15/31] Update styles to include better input styleing. --- style.css | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/style.css b/style.css index 0ef9402..7e07657 100644 --- a/style.css +++ b/style.css @@ -177,7 +177,7 @@ textarea:focus, -ms-transition: all 0.1s ease-in-out; -o-transition: all 0.1s ease-in-out; transition: all 0.1s ease-in-out; - + -webkit-appearance: none; -moz-appearance: none; } @@ -466,6 +466,7 @@ textarea { width: 100%; } +input[type="radio"], input[type="radio"], input[type="checkbox"] { width: auto; @@ -587,7 +588,7 @@ body .red:hover { .genesis-nav-menu .button:hover { background-color: #555; - border-color: #555; + border-color: #555; } body .blue { @@ -1167,7 +1168,7 @@ body .mapp-layout { .simple-section-nav .current_page_item > a, .simple-section-nav .current_page_ancestor > a { - + } .simple-section-nav .current_page_item > a, @@ -2082,19 +2083,19 @@ Media Queries font-size: 16px; font-size: 1.6rem; } - + } /* Responsive Tables CSS --------------------------------------------- */ @media (max-width: 600px) { - + table { clear: both; } tr { - padding: 0.5em; + padding: 0.5em; } th, @@ -2385,7 +2386,7 @@ Media Queries .five-sixths { width: 82.90598290598291%; } - + .first, .footer-widgets .footer-widgets-1 { clear: both; @@ -2554,7 +2555,7 @@ Media Queries /* Plugins --------------------------------------------- */ - + /* Events Manager */ .em-calendar-wrapper .fullcalendar tr { display: table-row !important; From 86520f1f8684e4d53284ff08654479aaa8a9cf66 Mon Sep 17 00:00:00 2001 From: Braad Martin Date: Mon, 23 Feb 2015 16:03:37 -0800 Subject: [PATCH 16/31] Remove references to equal heights --- includes/functions/theme-functions.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index ea71f76..2efc389 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -42,12 +42,6 @@ function trestle_header_actions() { if ( is_readable( $upload_path . $custom_js_file ) ) wp_enqueue_script( 'trestle-custom-jquery', $upload_url . $custom_js_file, array( 'jquery' ), CHILD_THEME_VERSION, true ); - // Pass PHP variables to theme jQuery - $php_vars = array ( - 'trestle_equal_cols_breakpoint' => genesis_get_option( 'trestle_equal_cols_breakpoint' ), - ); - wp_localize_script( 'theme-jquery', 'trestle_vars', $php_vars ); - } /*=========================================== From 69a86d4c2d54d8d5464177b2fb9647184b570af8 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:02:35 -0700 Subject: [PATCH 17/31] Updates to functions.php --- functions.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/functions.php b/functions.php index 20b3121..aae0238 100644 --- a/functions.php +++ b/functions.php @@ -2,9 +2,9 @@ /** * Theme functionality - * + * * @since 1.0.0 - * + * * @package Trestle */ @@ -18,6 +18,9 @@ require_once dirname( __FILE__ ) . '/includes/functions/theme-functions.php'; // Admin functionality require_once dirname( __FILE__ ) . '/includes/admin/admin.php'; +// Customizer controls +require_once dirname( __FILE__ ) . '/includes/admin/customizer.php'; + // Shortcodes require_once dirname( __FILE__ ) . '/includes/shortcodes/shortcodes.php'; @@ -57,5 +60,4 @@ function trestle_theme_setup() { // Add support for footer widgets if specified in Trestle settings $trestle_footer_widgets_number = esc_attr( genesis_get_option( 'trestle_footer_widgets_number' ) ); add_theme_support( 'genesis-footer-widgets', $trestle_footer_widgets_number ); - } From bf244dce13bea9291374d4bdac7b8c58e3f81a7b Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:09:37 -0700 Subject: [PATCH 18/31] Remove admin.css --- includes/admin/admin.css | 122 --------------------------------------- 1 file changed, 122 deletions(-) delete mode 100644 includes/admin/admin.css diff --git a/includes/admin/admin.css b/includes/admin/admin.css deleted file mode 100644 index 8a9bf26..0000000 --- a/includes/admin/admin.css +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Trestle admin styles - * - * @since 1.0.0 - * - * @package Trestle - */ - -.trestle-layout img { - margin-right: 10px; - border: 4px solid transparent; - cursor: pointer; -} - -.trestle-layout img:hover { - border-color: #EEE; -} - -.trestle-layout img.checked { - border-color: #CCC; -} - -/* Columns ---------------------------------------------- */ -.five-sixths, -.four-sixths, -.one-fourth, -.one-half, -.one-sixth, -.one-third, -.three-fourths, -.three-sixths, -.two-fourths, -.two-sixths, -.two-thirds, -.footer-widgets .widget-area { - float: left; - margin: 0; - width: 100%; -} - - -/* Media Queries ---------------------------------------------- */ -@media (min-width: 768px) { - - /* Columns - --------------------------------------------- */ - - .five-sixths, - .four-sixths, - .one-fourth, - .one-half, - .one-sixth, - .one-third, - .three-fourths, - .three-sixths, - .two-fourths, - .two-sixths, - .two-thirds, - .footer-widgets .widget-area { - margin-left: 2.564102564102564%; - } - - .one-half, - .three-sixths, - .two-fourths, - .footer-widgets-number-2 .footer-widgets .widget-area { - width: 48.717948717948715%; - } - - .one-third, - .two-sixths, - .sidebar-primary, - .title-area, - .footer-widgets-number-3 .footer-widgets .widget-area { - width: 31.623931623931625%; - } - - .four-sixths, - .two-thirds, - .content { - width: 65.81196581196582%; - } - - .one-fourth, - .footer-widgets-number-4 .footer-widgets .widget-area { - width: 23.076923076923077%; - } - - .three-fourths { - width: 74.35897435897436%; - } - - .one-fifth, - .footer-widgets-number-5 .footer-widgets .widget-area { - width: 17.948717949%; - } - - .one-sixth, - .footer-widgets-number-6 .footer-widgets .widget-area { - width: 14.52991452991453%; - } - - .five-sixths { - width: 82.90598290598291%; - } - - .first, - .footer-widgets .footer-widgets-1 { - clear: both; - margin-left: 0; - } - - /* Lists inside columns (to remove bottom margin as needed at mobile sizes */ - .no-list-margin ul, - .no-list-margin ol { - margin-bottom: 26px; - margin-bottom: 2.6rem; - } - -} \ No newline at end of file From d6542d2091db5460e5c4dfc5a88925f060875e05 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:10:02 -0700 Subject: [PATCH 19/31] Remove admin.js --- includes/admin/admin.js | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 includes/admin/admin.js diff --git a/includes/admin/admin.js b/includes/admin/admin.js deleted file mode 100644 index c580186..0000000 --- a/includes/admin/admin.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * jQuery that runs in the WordPress admin - * - * @since 1.0.0 - * - * @package Trestle - */ - -// Executes when the document is ready -jQuery(document).ready(function() { - - // Hide Trestle layout radio buttons - jQuery('.trestle-layout img').next('input[type="radio"]').hide(); - - // Add radio button functionality to layout icons - jQuery('.trestle-layout img').click(function() { - jQuery(this).next('input[type="radio"]').attr('checked', true); - jQuery('.trestle-layout img').removeClass('checked'); - jQuery(this).addClass('checked'); - }); - - // Add drop-down functionality for Post Info & Meta options - if( ! jQuery('#genesis-settings\\[trestle_manual_post_info_meta\\]').is(':checked') ) { - jQuery('.trestle-post-info-meta').hide(); - } - - jQuery('#genesis-settings\\[trestle_manual_post_info_meta\\]').change(function() { - jQuery('.trestle-post-info-meta').slideToggle(); - }); - - // Add drop-down functionality for equal height breakpoint - if( ! jQuery('#genesis-settings\\[trestle_equal_height_cols\\]').is(':checked') ) { - jQuery('.trestle-equal-columns-breakpoint').hide(); - } - - jQuery('#genesis-settings\\[trestle_equal_height_cols\\]').change(function() { - jQuery('.trestle-equal-columns-breakpoint').slideToggle(); - }); - -}); /* end of as page load scripts */ From 5d8a55bd03ab55aaffad92b69b0887797c512d9b Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:11:50 -0700 Subject: [PATCH 20/31] Update admin.php --- includes/admin/admin.php | 271 ++------------------------------------- 1 file changed, 11 insertions(+), 260 deletions(-) diff --git a/includes/admin/admin.php b/includes/admin/admin.php index d0d342d..7fafbff 100644 --- a/includes/admin/admin.php +++ b/includes/admin/admin.php @@ -14,37 +14,28 @@ add_action( 'admin_enqueue_scripts', 'trestle_admin_actions' ); * @since 1.0.0 */ function trestle_admin_actions() { - // Add admin jQuery - wp_enqueue_script( 'trestle-admin-jquery', get_stylesheet_directory_uri() . '/includes/admin/admin.js', array( 'jquery' ), '1.0.0', true ); - // Add admin jQuery - wp_enqueue_style( 'trestle-admin', get_stylesheet_directory_uri() . '/includes/admin/admin.css' ); - - // Add admin CSS - add_editor_style( get_stylesheet_directory_uri() . '/includes/admin/editor-style.css' ); + // Include the main stylesheet in the editor + add_editor_style( get_stylesheet_uri() ); } add_filter( 'genesis_theme_settings_defaults', 'trestle_custom_defaults' ); /** * Sets up Trestle default settings. * - * @since 1.0.0 + * @since 1.0.0 * - * @param array $defaults Genesis default settings. - * @return array Genesis settings updated to include Trestle defaults. + * @param array $defaults Genesis default settings. + * @return array Genesis settings updated to include Trestle defaults. */ function trestle_custom_defaults( $defaults ) { + // Trestle default key/value pairs $trestle_defaults = array( 'trestle_layout' => 'solid', 'trestle_logo_url' => '', 'trestle_logo_url_mobile' => '', 'trestle_nav_primary_location' => 'full', - 'trestle_auto_nav' => 0, - 'trestle_auto_nav_depth' => 0, - 'trestle_include_home_link' => 0, - 'trestle_home_link_text' => __( 'Home', 'trestle' ), - 'trestle_nav_button_text' => '[icon name="icon-list-ul"] ' . __( 'Navigation', 'trestle' ), 'trestle_read_more_text' => __( 'Read More »', 'trestle' ), 'trestle_revisions_number' => 3, 'trestle_footer_widgets_number' => 3, @@ -54,267 +45,26 @@ function trestle_custom_defaults( $defaults ) { $options = get_option( GENESIS_SETTINGS_FIELD ); foreach ( $trestle_defaults as $k => $v ) { + // Add defaults to Genesis default settings array $defaults[$k] = $v; // Update actual options if they don't yet exist - if ( $options && ! array_key_exists( $k, $options ) ) + if ( $options && ! array_key_exists( $k, $options ) ) $options[$k] = $v; } // Update options with defaults update_option( GENESIS_SETTINGS_FIELD, $options ); - + return $defaults; } -add_action( 'genesis_settings_sanitizer_init', 'trestle_register_social_sanitization_filters' ); -/** - * Adds sanitization for various Trestle admin settings. - * - * @since 1.0.0 - */ -function trestle_register_social_sanitization_filters() { - // 1 or 0 - genesis_add_option_filter( - 'one_zero', - GENESIS_SETTINGS_FIELD, - array( - 'trestle_auto_nav', - 'trestle_include_home_link', - 'trestle_custom_nav_extras', - 'trestle_manual_post_info_meta', - 'trestle_equal_height_cols', - 'trestle_external_link_icons', - 'trestle_email_link_icons', - 'trestle_pdf_link_icons', - 'trestle_doc_link_icons', - ) - ); - - // Integer - genesis_add_option_filter( - 'absint', - GENESIS_SETTINGS_FIELD, - array( - 'trestle_auto_nav_depth', - 'trestle_revisions_number', - 'trestle_footer_widgets_number', - ) - ); - - // No HTML - genesis_add_option_filter( - 'no_html', - GENESIS_SETTINGS_FIELD, - array( - 'trestle_layout', - 'trestle_nav_primary_location' - ) - ); - - // Safe HTML - genesis_add_option_filter( - 'safe_html', - GENESIS_SETTINGS_FIELD, - array( - 'trestle_logo_url', - 'trestle_logo_url_mobile', - 'trestle_home_link_text', - 'trestle_nav_button_text', - 'trestle_custom_nav_extras_text', - 'trestle_read_more_text' - ) - ); -} - -add_action( 'genesis_theme_settings_metaboxes', 'trestle_register_settings_box' ); -/** - * Registers Trestle admin settings box. - * - * @since 1.0.0 - * - * @global array $_genesis_admin_settings Genesis admin settings. - * - * @param string $_genesis_theme_settings_pagehook Hook for main Genesis settings page in admin. - */ -function trestle_register_settings_box( $_genesis_theme_settings_pagehook ) { - global $_genesis_admin_settings; - - // Create Trestle settings metabox - $settings_box_title = __( 'Trestle Settings by', 'trestle' ) . ' MIGHTYminnow'; - add_meta_box( 'trestle-settings', $settings_box_title, 'trestle_settings_box', $_genesis_theme_settings_pagehook, 'main', 'high' ); -} - -/** - * Outputs contents of Trestle admin settings box on Genesis settings page. - * - * @since 1.0.0 - */ -function trestle_settings_box() { - // Set path for image radio inputs - $img_path = get_stylesheet_directory_uri() . '/images/admin/'; - - ?> -

-

- /> - /> - /> - /> -

- -

-

-
- -

-

-
- -

- -

-

-
- -

-

- /> -
- /> -

- -

-
- -

- -

-
- -

- -

-

- /> -

-

-
- -

- -

-

- : -

-

- - -

- -

-

- /> -

- - -

-

- - -

-

-

- />
- />
- />
- /> -

- Date: Thu, 19 Mar 2015 15:14:31 -0700 Subject: [PATCH 21/31] Add customizer.php --- includes/admin/customizer.php | 324 ++++++++++++++++++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 includes/admin/customizer.php diff --git a/includes/admin/customizer.php b/includes/admin/customizer.php new file mode 100644 index 0000000..39e7526 --- /dev/null +++ b/includes/admin/customizer.php @@ -0,0 +1,324 @@ +add_section( + 'trestle_settings_section', + array( + 'title' => __( 'Trestle Settings', 'trestle' ), + 'priority' => 160, + ) + ); + + // Layout + $wp_customize->add_setting( + 'genesis-settings[trestle_layout]', + array( + 'default' => '', + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_layout_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_layout]', + 'label' => __( 'Layout', 'trestle' ), + 'type' => 'radio', + 'choices' => array( + 'bubble' => __( 'Bubble', 'trestle' ), + 'solid' => __( 'Solid', 'trestle' ), + ) + ) + ); + + // Upload a logo + $wp_customize->add_setting( + 'genesis-settings[trestle_logo_url]', + array( + 'default' => genesis_get_option( 'trestle_logo_url' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + new WP_Customize_Image_Control( + $wp_customize, + 'trestle_logo_control', + array( + 'label' => __( 'Upload a logo', 'trestle' ), + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_logo_url]', + ) + ) + ); + + // Upload a mobile logo + $wp_customize->add_setting( + 'genesis-settings[trestle_logo_url_mobile]', + array( + 'default' => genesis_get_option( 'trestle_logo_url_mobile' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + new WP_Customize_Image_Control( + $wp_customize, + 'trestle_mobile_logo_control', + array( + 'label' => __( 'Upload a logo for mobile', 'trestle' ), + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_logo_url_mobile]', + ) + ) + ); + + // Primary nav style + $wp_customize->add_setting( + 'genesis-settings[trestle_nav_primary_location]', + array( + 'default' => genesis_get_option( 'trestle_nav_primary_location' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_nav_primary_location_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_nav_primary_location]', + 'label' => __( 'Menu style', 'trestle' ), + 'type' => 'select', + 'choices' => array( + 'full' => __( 'Full Width', 'trestle' ), + 'header' => __( 'Header Right', 'trestle' ), + ) + ) + ); + + // Blog post custom read more link text + $wp_customize->add_setting( + 'genesis-settings[trestle_read_more_text]', + array( + 'default' => genesis_get_option( 'trestle_read_more_text' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + 'sanitize_callback' => 'wp_kses_post', + ) + ); + $wp_customize->add_control( + 'trestle_read_more_text_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_read_more_text]', + 'label' => __( 'Custom read more link text', 'trestle' ), + ) + ); + + // Post revisions number + $wp_customize->add_setting( + 'genesis-settings[trestle_revisions_number]', + array( + 'default' => genesis_get_option( 'trestle_revisions_number' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_revisions_number_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_revisions_number]', + 'label' => __( 'Number of post revisions', 'trestle' ), + 'type' => 'select', + 'choices' => array( + '-1' => __( 'Unlimited', 'trestle' ), + '0' => '0', + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + '7' => '7', + '8' => '8', + '9' => '9', + '10' => '10', + ) + ) + ); + + // Footer Widget Areas + $wp_customize->add_setting( + 'genesis-settings[trestle_footer_widgets_number]', + array( + 'default' => genesis_get_option( 'trestle_footer_widgets_number' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_footer_widgets_number_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_footer_widgets_number]', + 'label' => __( 'Number of footer widgets', 'trestle' ), + 'type' => 'select', + 'choices' => array( + '0' => '0', + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + ) + ) + ); + + // Add a label for the link icons + $wp_customize->add_setting( + 'genesis-settings[trestle_link_icons_title]', + array( + 'default' => '', + 'type' => 'option', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_link_icons_title', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_link_icons_title]', + 'label' => __( 'Icon links', 'trestle' ), + 'type' => 'hidden', + ) + ); + + // External Link Icons + $wp_customize->add_setting( + 'genesis-settings[trestle_external_link_icons]', + array( + 'default' => genesis_get_option( 'trestle_external_link_icons' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_external_link_icons', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_external_link_icons]', + 'label' => __( 'Add icons to external links', 'trestle' ), + 'type' => 'checkbox', + ) + ); + + // E-mail Link Icons + $wp_customize->add_setting( + 'genesis-settings[trestle_email_link_icons]', + array( + 'default' => genesis_get_option( 'trestle_email_link_icons' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_email_link_icons', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_email_link_icons]', + 'label' => __( 'Add icons to email links', 'trestle' ), + 'type' => 'checkbox', + ) + ); + + // PDF Link Icons + $wp_customize->add_setting( + 'genesis-settings[trestle_pdf_link_icons]', + array( + 'default' => genesis_get_option( 'trestle_pdf_link_icons' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_pdf_link_icons', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_pdf_link_icons]', + 'label' => __( 'Add icons to .pdf links', 'trestle' ), + 'type' => 'checkbox', + ) + ); + + // Doc Link Icons + $wp_customize->add_setting( + 'genesis-settings[trestle_doc_link_icons]', + array( + 'default' => genesis_get_option( 'trestle_doc_link_icons' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_doc_link_icons', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_doc_link_icons]', + 'label' => __( 'Add icons to .doc links', 'trestle' ), + 'type' => 'checkbox', + ) + ); + +} From b23e0e3f7be1288b82967b0c9838ba9d38d83c70 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:15:50 -0700 Subject: [PATCH 22/31] Add customizer.js --- includes/admin/customizer.js | 137 +++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 includes/admin/customizer.js diff --git a/includes/admin/customizer.js b/includes/admin/customizer.js new file mode 100644 index 0000000..b6fb4ea --- /dev/null +++ b/includes/admin/customizer.js @@ -0,0 +1,137 @@ +/** + * JavaScript for the Customizer Preview + * + * @since 1.0.0 + */ + +( function( $ ) { + + // Layout + wp.customize( 'genesis-settings[trestle_layout]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + + switch ( value ) { + case 'solid': + $body.removeClass( 'bubble' ); + break; + case 'bubble': + $body.addClass( 'bubble' ); + break; + } + + }); + }); + + // Custom logo + wp.customize( 'genesis-settings[trestle_logo_url]', function( value ) { + value.bind( function( url ) { + + var $body = $( 'body' ); + + if ( 0 === $.trim( url ).length ) { + $body.removeClass( 'has-logo' ); + $( '.site-title a.image-link' ).remove(); + } else { + $body.addClass( 'has-logo' ); + $( '.site-title a.image-link' ).remove(); + $( '.site-title' ).append( '' ); + } + + }); + }); + + // Primary Nav Location + wp.customize( 'genesis-settings[trestle_nav_primary_location]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + var $nav = $( '.nav-primary' ); + + switch ( value ) { + case 'full': + $body.removeClass( 'nav-primary-location-header' ) + .addClass( 'nav-primary-location-full' ); + $nav.remove().insertAfter( '.site-header' ); + break; + case 'header': + $body.removeClass( 'nav-primary-location-full' ) + .addClass( 'nav-primary-location-header' ); + $nav.remove().appendTo( '.site-header .wrap' ); + break; + } + + }); + }); + + // Custom Read More Link Text + wp.customize( 'genesis-settings[trestle_read_more_text]', function( value ) { + value.bind( function( value ) { + + $( 'a.more-link' ).text( value ); + + }); + }); + + // External Links + wp.customize( 'genesis-settings[trestle_external_link_icons]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + + if ( value ) { + $body.addClass( 'external-link-icons' ); + } else { + $body.removeClass( 'external-link-icons' ); + } + + }); + }); + + // Email Links + wp.customize( 'genesis-settings[trestle_email_link_icons]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + + if ( value ) { + $body.addClass( 'email-link-icons' ); + } else { + $body.removeClass( 'email-link-icons' ); + } + + }); + }); + + // PDF Links + wp.customize( 'genesis-settings[trestle_pdf_link_icons]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + + if ( value ) { + $body.addClass( 'pdf-link-icons' ); + } else { + $body.removeClass( 'pdf-link-icons' ); + } + + }); + }); + + // Doc Links + wp.customize( 'genesis-settings[trestle_doc_link_icons]', function( value ) { + value.bind( function( value ) { + + var $body = $( 'body' ); + + if ( value ) { + $body.addClass( 'doc-link-icons' ); + } else { + $body.removeClass( 'doc-link-icons' ); + } + + }); + }); + +})( jQuery ); From 47ca5a873acfb576e184b113fd238fc4668c7917 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:16:41 -0700 Subject: [PATCH 23/31] Remove editor-style.css --- includes/admin/editor-style.css | 36 --------------------------------- 1 file changed, 36 deletions(-) delete mode 100644 includes/admin/editor-style.css diff --git a/includes/admin/editor-style.css b/includes/admin/editor-style.css deleted file mode 100644 index 4d17d21..0000000 --- a/includes/admin/editor-style.css +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Trestle editor styles - * - * @since 1.0.0 - * - * @package Trestle - */ - -@import url( '../../style.css' ); - -/* Overrides ---------------------------------------------- */ -body { - padding: 8px 16px; - background-color: #FFF; - background-image: none; -} - -.content { - width: 100%; - font-size: 1.6rem; -} - -.content a { - color: #f15123; -} - -.content a:hover { - color: #333; -} - -.content ul, -.content ol { - margin: 0 0 26px 40px; - margin: 0 0 2.6rem 4rem; -} \ No newline at end of file From 26278516b694ec19851135b10b72966c162136d5 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:18:43 -0700 Subject: [PATCH 24/31] Update theme-functions.php --- includes/functions/theme-functions.php | 48 +++++++++++++++----------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index 2efc389..40309e6 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -20,7 +20,7 @@ add_action( 'wp_enqueue_scripts', 'trestle_header_actions' ); * @since 1.0.0 */ function trestle_header_actions() { - + // Google fonts wp_enqueue_style( 'theme-google-fonts', '//fonts.googleapis.com/css?family=Lato:300,400,700' ); @@ -36,7 +36,7 @@ function trestle_header_actions() { $custom_css_file = '/trestle/custom.css'; if ( is_readable( $upload_path . $custom_css_file ) ) wp_enqueue_style( 'trestle-custom-css', $upload_url . $custom_css_file ); - + // Custom jQuery (if it exists) $custom_js_file = '/trestle/custom.js'; if ( is_readable( $upload_path . $custom_js_file ) ) @@ -58,7 +58,7 @@ add_filter( 'body_class', 'trestle_body_classes' ); * @return array Updated body classes. */ function trestle_body_classes( $classes ) { - + // Add 'no-jquery' class to be removed by jQuery if enabled $classes[] = 'no-jquery'; @@ -79,19 +79,15 @@ function trestle_body_classes( $classes ) { // Add menu style class if ( genesis_get_option( 'trestle_nav_primary_location' ) ) $classes[] = 'nav-primary-location-' . esc_attr( genesis_get_option( 'trestle_nav_primary_location' ) ); - + // Add footer widget number class if ( genesis_get_option( 'trestle_footer_widgets_number' ) ) $classes[] = 'footer-widgets-number-' . esc_attr( genesis_get_option( 'trestle_footer_widgets_number' ) ); - // Add class for equal height Genesis Extender columns - if ( 1 == genesis_get_option( 'trestle_equal_height_cols' ) ) - $classes[] = 'equal-height-genesis-extender-cols'; - // Add logo class if ( genesis_get_option( 'trestle_logo_url' ) || genesis_get_option( 'trestle_logo_url_mobile' ) ) $classes[] = 'has-logo'; - + return $classes; } @@ -108,6 +104,7 @@ add_filter( 'genesis_seo_title', 'trestle_do_logos', 10, 3 ); * @since 1.0.0 */ function trestle_do_logos( $title, $inside, $wrap ) { + $logo_url = genesis_get_option( 'trestle_logo_url' ); $logo_url_mobile = genesis_get_option( 'trestle_logo_url_mobile' ); $logo_html = ''; @@ -125,7 +122,7 @@ function trestle_do_logos( $title, $inside, $wrap ) { $logo_html .= sprintf( '', implode(' ', $classes), esc_attr( get_bloginfo( 'name' ) ), - $logo_url + $logo_url ); } @@ -142,8 +139,8 @@ function trestle_do_logos( $title, $inside, $wrap ) { $logo_html .= sprintf( '', implode(' ', $classes), esc_attr( get_bloginfo( 'name' ) ), - $logo_url_mobile - ); + $logo_url_mobile + ); } if ( $logo_html ) { @@ -154,11 +151,11 @@ function trestle_do_logos( $title, $inside, $wrap ) { ); } - //* Build the title + // Build the title $title = genesis_html5() ? sprintf( "<{$wrap} %s>", genesis_attr( 'site-title' ) ) : sprintf( '<%s id="title">%s', $wrap, $inside, $wrap ); $title .= genesis_html5() ? "{$inside}" : ''; - //* Echo (filtered) + // Echo (filtered) return $title; } @@ -179,6 +176,7 @@ add_action( 'init', 'trestle_nav_modifications' ); * @see trestle_nav_placeholder() */ function trestle_nav_modifications() { + global $trestle_nav_title; // Set title for Trestle placeholder navigation menu @@ -193,7 +191,7 @@ function trestle_nav_modifications() { if ( 1 == genesis_get_option( 'trestle_custom_nav_extras' ) ) { // Remove default nav extras remove_filter( 'wp_nav_menu_items', 'genesis_nav_right' ); - + // Add custom nav extras add_filter( 'wp_nav_menu_items', 'trestle_custom_nav_extras', 10, 2 ); } @@ -227,6 +225,7 @@ function trestle_nav_primary_location() { * @return string
  • list of (modified) navigation menu items. */ function trestle_auto_nav_items( $nav_items, stdClass $menu_args ) { + if ( 'primary' == $menu_args->theme_location ) { $args = array( 'depth' => genesis_get_option( 'trestle_auto_nav_depth' ) ? genesis_get_option( 'trestle_auto_nav_depth' ) : 0, @@ -249,7 +248,7 @@ function trestle_auto_nav_items( $nav_items, stdClass $menu_args ) { // Remove closing
  • $nav_items = preg_replace( '/<\/ul>\s*<\/div>/', '', $nav_items ); } - + return $nav_items; } @@ -263,6 +262,7 @@ function trestle_auto_nav_items( $nav_items, stdClass $menu_args ) { * @return string
  • list of menu items with custom navigation extras
  • appended. */ function trestle_custom_nav_extras( $nav_items, stdClass $menu_args ) { + if ( 'primary' == $menu_args->theme_location ) { $custom_text = esc_attr( genesis_get_option( 'trestle_custom_nav_extras_text' ) ); return $nav_items . '
  • ' . do_shortcode( genesis_get_option( 'trestle_custom_nav_extras_text' ) ) . '
  • '; @@ -281,6 +281,7 @@ function trestle_custom_nav_extras( $nav_items, stdClass $menu_args ) { * @since 1.0.0 */ function trestle_nav_placeholder() { + global $trestle_nav_title; // Create placeholder menu for 'primary' spot if auto-nav is selected - this ensures that nav extras can be used even when no custom menu is formally set to primary @@ -309,7 +310,7 @@ function trestle_nav_placeholder() { add_filter( 'wp_revisions_to_keep', 'trestle_update_revisions_number', 10, 2 ); /** - * Sets the number of post revisions. + * Sets the number of post revisions. * * @since 1.0.0 * @@ -317,6 +318,7 @@ add_filter( 'wp_revisions_to_keep', 'trestle_update_revisions_number', 10, 2 ); * @return int Number of post revisions specified in Trestle admin panel. */ function trestle_update_revisions_number( $num ) { + $trestle_revisions_number = esc_attr( genesis_get_option( 'trestle_revisions_number' ) ); if ( isset( $trestle_revisions_number ) ) @@ -335,13 +337,14 @@ add_action( 'the_post', 'trestle_post_info_meta', 5 ); * @global object $post The current $post object. */ function trestle_post_info_meta() { + if ( ! is_admin() && in_the_loop() && genesis_get_option( 'trestle_manual_post_info_meta' ) ) { global $post; // Get post type $post_type = get_post_type( $post->ID ); - + // Remove all Post Info & Meta remove_action( 'genesis_entry_header', 'genesis_post_info', 12 ); remove_action( 'genesis_entry_footer', 'genesis_post_meta' ); @@ -350,7 +353,7 @@ function trestle_post_info_meta() { if ( is_singular() ) { $single_info_option = 'trestle_post_info_' . $post_type . '_single'; $single_meta_option = 'trestle_post_meta_' . $post_type . '_single'; - + // Post Info if ( genesis_get_option( $single_info_option ) ) add_action( 'genesis_entry_header', 'genesis_post_info', 12 ); @@ -364,7 +367,7 @@ function trestle_post_info_meta() { if ( ! is_singular() ) { $archive_info_option = 'trestle_post_info_' . $post_type . '_archive'; $archive_meta_option = 'trestle_post_meta_' . $post_type . '_archive'; - + // Post Info if ( genesis_get_option( $archive_info_option ) ) add_action( 'genesis_entry_header', 'genesis_post_info', 12 ); @@ -390,7 +393,9 @@ add_filter( 'genesis_get_image_default_args', 'trestle_featured_image_fallback' * @return array Updated image args */ function trestle_featured_image_fallback( $args ) { + $args['fallback'] = false; + return $args; } @@ -411,10 +416,11 @@ add_filter( 'the_content_more_link', 'trestle_read_more_link' ); * @return string (Updated) "read more" text. */ function trestle_read_more_link( $default_text ) { + // Get Trestle custom "read more" link text $custom_text = esc_attr( genesis_get_option( 'trestle_read_more_text' ) ); - if ( $custom_text ) + if ( $custom_text ) return '… ' . $custom_text . ''; else return $default_text; From 2d87079e05dfa1d6ba70a2bb7fba853e4e8f1f97 Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:20:37 -0700 Subject: [PATCH 25/31] Update theme-jquery.js --- includes/js/theme-jquery.js | 186 ++++++++++++++++++------------------ 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index 781141a..514b840 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -9,132 +9,132 @@ // Executes when the document is ready jQuery( document ).ready( function( $ ) { - // Remove .no-jquery body class - $( 'body' ).removeClass( 'no-jquery' ); + // Remove .no-jquery body class + $( 'body' ).removeClass( 'no-jquery' ); - // External Links - var h = window.location.host.toLowerCase(); - $( '[href^="http"]' ).not( '[href*="' + h + '"]' ).addClass( 'external-link' ).attr( "target", "_blank" ); + // External Links + var h = window.location.host.toLowerCase(); + $( '[href^="http"]' ).not( '[href*="' + h + '"]' ).addClass( 'external-link' ).attr( "target", "_blank" ); - // Add classes to different types of links - $( 'a[href^="mailto:"]' ).addClass( 'email-link' ); - $( 'a[href$=".pdf"]' ).attr({ "target":"_blank" }).addClass( 'pdf-link' ); - $( 'a[href$=".doc"]' ).attr({ "target":"_blank" }).addClass( 'doc-link' ); - $( 'a' ).has( 'img' ).addClass( 'image-link' ); + // Add classes to different types of links + $( 'a[href^="mailto:"]' ).addClass( 'email-link' ); + $( 'a[href$=".pdf"]' ).attr({ "target":"_blank" }).addClass( 'pdf-link' ); + $( 'a[href$=".doc"]' ).attr({ "target":"_blank" }).addClass( 'doc-link' ); + $( 'a' ).has( 'img' ).addClass( 'image-link' ); - // Add classes to parts of lists - $( 'li:last-child' ).addClass( 'last' ); - $( 'li:first-child' ).addClass( 'first' ); - $( 'ul, ol' ).parent( 'li' ).addClass( 'parent' ); + // Add classes to parts of lists + $( 'li:last-child' ).addClass( 'last' ); + $( 'li:first-child' ).addClass( 'first' ); + $( 'ul, ol' ).parent( 'li' ).addClass( 'parent' ); - // Mobile header toggle buttons - $( '.site-header .title-area' ).after( '
    ' ); - $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { + // Mobile header toggle buttons + $( '.site-header .title-area' ).after( '
    ' ); + $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { - // Store target - $target = $( this ); + // Store target + $target = $( this ); - // Scope variables - var $target, buttonClass, targetClass; + // Scope variables + var $target, buttonClass, targetClass; - // Setup classes - buttonClass = 'toggle-button'; - targetClass = $target.attr( 'class' ).split( /\s+/ ); + // Setup classes + buttonClass = 'toggle-button'; + targetClass = $target.attr( 'class' ).split( /\s+/ ); - // Add targets-[] class to buttonClass - $.each( targetClass, function( index, value ) { - buttonClass += ' targets-' + value; - }); + // Add targets-[] class to buttonClass + $.each( targetClass, function( index, value ) { + buttonClass += ' targets-' + value; + }); - // Add nav-toggle class to buttonClass if the button is for the nav - if ( $target.is( 'nav' ) ) { - buttonClass += ' nav-toggle'; - } + // Add nav-toggle class to buttonClass if the button is for the nav + if ( $target.is( 'nav' ) ) { + buttonClass += ' nav-toggle'; + } - // Add toggle buttons to header - $( '.toggle-buttons' ).prepend( 'Toggle' ); + // Add toggle buttons to header + $( '.toggle-buttons' ).prepend( 'Toggle' ); - // Add target class to nav and widget areas - $target.addClass( 'toggle-target-' + i ); - }); + // Add target class to nav and widget areas + $target.addClass( 'toggle-target-' + i ); + }); - // Toggle widget areas and primary nav - $( '.site-header .toggle-button' ).click( function( event ) { + // Toggle widget areas and primary nav + $( '.site-header .toggle-button' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Scope our variables - var $button, $target; + // Scope our variables + var $button, $target; - // Get toggle button that was clicked - $button = $( this ); + // Get toggle button that was clicked + $button = $( this ); - //Remove focus - $button.blur(); + //Remove focus + $button.blur(); - // Match the button to the right target - $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); + // Match the button to the right target + $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); - // Toggle buttons - $button.toggleClass( 'open' ); - $( '.site-header .toggle-button' ).not( $button ).removeClass( 'open' ); + // Toggle buttons + $button.toggleClass( 'open' ); + $( '.site-header .toggle-button' ).not( $button ).removeClass( 'open' ); - // Toggle targets - $target.toggleClass( 'open' ); - $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); - }); + // Toggle targets + $target.toggleClass( 'open' ); + $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); + }); - // Mobile navigation icons - var closedIcon = '+'; - var openIcon = '-'; + // Mobile navigation icons + var closedIcon = '+'; + var openIcon = '-'; - // Insert the icons into the nav where appropriate - $( '.nav-primary' ).find( '.genesis-nav-menu .parent:not( .current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ).after( '' + closedIcon + '' ); - $( '.nav-primary' ).find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ).after( '' + openIcon + '' ); + // Insert the icons into the nav where appropriate + $( '.nav-primary' ).find( '.genesis-nav-menu .parent:not( .current-menu-item, .current_page_item, .current_page_parent, .current_page_ancestor) > a' ).after( '' + closedIcon + '' ); + $( '.nav-primary' ).find( '.genesis-nav-menu .parent.current-menu-item > a, .genesis-nav-menu .parent.current_page_item > a, .genesis-nav-menu .parent.current_page_parent > a, .genesis-nav-menu .parent.current_page_ancestor > a' ).after( '' + openIcon + '' ); - // Mobile navigation expand/contract functionality - $( '.sub-icon' ).click( function( event ) { + // Mobile navigation expand/contract functionality + $( '.sub-icon' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Get icon click - var $icon = $( this ); + // Get icon click + var $icon = $( this ); - // Remove focus - $icon.blur(); + // Remove focus + $icon.blur(); - // Expand/contract - $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); + // Expand/contract + $icon.next( 'ul' ).slideToggle().toggleClass( 'open' ); - // Change the icon to indicate open/closed - if ( $icon.text().indexOf( closedIcon ) !== -1 ) { - $icon.text( openIcon ); - } else if ( $icon.text().indexOf( openIcon ) !== -1 ) { - $icon.text( closedIcon ); - } - }); + // Change the icon to indicate open/closed + if ( $icon.text().indexOf( closedIcon ) !== -1 ) { + $icon.text( openIcon ); + } else if ( $icon.text().indexOf( openIcon ) !== -1 ) { + $icon.text( closedIcon ); + } + }); - // Header widget area expand/contract functionality - $( '.widget-area-toggle' ).click( function( event ) { + // Header widget area expand/contract functionality + $( '.widget-area-toggle' ).click( function( event ) { - // Prevent default behavior - event.preventDefault(); + // Prevent default behavior + event.preventDefault(); - // Get button clicked - var $button = $( this ); + // Get button clicked + var $button = $( this ); - // Remove focus - $button.blur(); + // Remove focus + $button.blur(); - // Expand/contract - $button.toggleClass( 'open' ).next( '.widget-area' ).slideToggle(); - }); + // Expand/contract + $button.toggleClass( 'open' ).next( '.widget-area' ).slideToggle(); + }); - // Executes when complete page is fully loaded, including all frames, objects, and images - $( window ).on( 'load', function() { + // Executes when complete page is fully loaded, including all frames, objects, and images + $( window ).on( 'load', function() { - }); + }); }); /* end of page load scripts */ From 9de3310f116bb4f7dd5323ca40b16f2fe4160dcd Mon Sep 17 00:00:00 2001 From: Braad Date: Thu, 19 Mar 2015 15:21:54 -0700 Subject: [PATCH 26/31] Update style.css --- style.css | 89 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/style.css b/style.css index 144a514..3aaf97d 100644 --- a/style.css +++ b/style.css @@ -151,6 +151,10 @@ body { line-height: 1.625; } +body.mce-content-body { + width: 100%; /* Used in the editor */ +} + body.bubble { background-color: #f5f5f5; } @@ -177,7 +181,7 @@ textarea:focus, -ms-transition: all 0.1s ease-in-out; -o-transition: all 0.1s ease-in-out; transition: all 0.1s ease-in-out; - + -webkit-appearance: none; -moz-appearance: none; } @@ -213,7 +217,9 @@ ul { } .site-inner ol, -.site-inner ul { +.site-inner ul, +.mce-content-body ol, /* Used in the editor */ +.mce-content-body ul { /* used in the editor */ margin-left: 40px; margin-left: 4rem; margin-bottom: 26px; @@ -296,12 +302,14 @@ a:hover { color: #333; } -.site-inner a { +.site-inner a, +.mce-content-body a { /* Used in the Editor */ border-bottom: 1px solid #ddd; color: #f15123; } -.site-inner a:hover { +.site-inner a:hover, +.mce-content-body a:hover { /* Used in the Editor */ color: #333; } @@ -442,8 +450,12 @@ button, .genesis-nav-menu a, .genesis-nav-menu > .right, #subscribe-email input, /* Begin Jetpack - Blog Subscription */ -div.gform_wrapper input[type="email"], /* Begin Gravity Forms */ -div.gform_wrapper input[type="text"], +div.gform_wrapper input[type=text], +div.gform_wrapper input[type=url], +div.gform_wrapper input[type=email], +div.gform_wrapper input[type=tel], +div.gform_wrapper input[type=number], +div.gform_wrapper input[type=password], div.gform_wrapper textarea, div.gform_wrapper .ginput_complex label { padding: 15px; @@ -463,7 +475,8 @@ textarea { } input[type="radio"], -input[type="checkbox"] { +input[type="checkbox"], +input[type="image"] { width: auto; } @@ -537,11 +550,6 @@ body .button:hover, /* Sidebar Forms, Buttons, & Inputs */ -.sidebar input, -.sidebar select, -.sidebar textarea, -.sidebar button, -.sidebar .button, .sidebar #subscribe-email input, /* Begin Jetpack - Blog Subscription */ .sidebar div.gform_wrapper input[type="email"], /* Begin Gravity Forms */ .sidebar div.gform_wrapper input[type="text"], @@ -555,11 +563,6 @@ body .button:hover, padding: 0.5em; } -.sidebar input[type="radio"], -.sidebar input[type="checkbox"] { - width: auto !important; -} - .sidebar input[type="file"] { padding: 0; } @@ -593,7 +596,7 @@ body .red:hover { .genesis-nav-menu .button:hover { background-color: #555; - border-color: #555; + border-color: #555; } body .blue { @@ -1061,8 +1064,12 @@ div.gform_wrapper { max-width: 100%; } -div.gform_wrapper input[type="email"], -div.gform_wrapper input[type="text"], +div.gform_wrapper input[type=text], +div.gform_wrapper input[type=url], +div.gform_wrapper input[type=email], +div.gform_wrapper input[type=tel], +div.gform_wrapper input[type=number], +div.gform_wrapper input[type=password], div.gform_wrapper textarea { font-size: 16px; font-size: 1.6rem; @@ -1169,10 +1176,11 @@ body .mapp-layout { .simple-section-nav .current_page_item > a, .simple-section-nav .current_page_ancestor > a { - + } -.simple-section-nav .current_page_item > a { +.simple-section-nav .current_page_item > a, +.simple-section-nav .custom-custom-post-type-parent > a { font-weight: bold; } @@ -1360,9 +1368,14 @@ Site Header .site-header .widget-area { width: 100%; - padding: 20px; background-color: #eee; border: 1px solid #ddd; + border-width: 0; + overflow: hidden; +} + +.site-header .widget-area.open { + padding: 20px; border-width: 1px 0; } @@ -1383,7 +1396,6 @@ Site Header .site-header .toggle-button { margin-left: 15px; - outline: none; } .site-header .toggle-button.open { @@ -1404,7 +1416,7 @@ Site Header .nav-primary, -.site-header .nav-primary, +/*.site-header .nav-primary,*/ .site-header .widget-area { position: absolute; top: 100%; @@ -1414,11 +1426,11 @@ Site Header opacity: 0; box-shadow: 0 4px 8px 1px rgba(0,0,0,0.4); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - -webkit-transition: all .5s ease; - -moz-transition: all .5s ease; - -ms-transition: all .5s ease; - -o-transition: all .5s ease; - transition: all .5s ease; + -webkit-transition: all .5s ease, padding 0s .5s; + -moz-transition: all .5s ease, padding 0s .5s; + -ms-transition: all .5s ease, padding 0s .5s; + -o-transition: all .5s ease, padding 0s .5s; + transition: all .5s ease, padding 0s .5s; } .site-container > .nav-primary { @@ -1430,7 +1442,12 @@ Site Header z-index: 50; max-height: 9999px; opacity: 1; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + -webkit-transition: opacity .5s ease, padding 0s 0s; + -moz-transition: opacity .5s ease, padding 0s 0s; + -ms-transition: opacity .5s ease, padding 0s 0s; + -o-transition: opacity .5s ease, padding 0s 0s; + transition: opacity .5s ease, padding 0s 0s; } @@ -2084,19 +2101,19 @@ Media Queries font-size: 16px; font-size: 1.6rem; } - + } /* Responsive Tables CSS --------------------------------------------- */ @media (max-width: 600px) { - + table { clear: both; } tr { - padding: 0.5em; + padding: 0.5em; } th, @@ -2387,7 +2404,7 @@ Media Queries .five-sixths { width: 82.90598290598291%; } - + .first, .footer-widgets .footer-widgets-1 { clear: both; @@ -2556,7 +2573,7 @@ Media Queries /* Plugins --------------------------------------------- */ - + /* Events Manager */ .em-calendar-wrapper .fullcalendar tr { display: table-row !important; From 8890f6e41382959d5464f11cfc40aeddf919fa11 Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Mon, 23 Mar 2015 12:19:09 -0700 Subject: [PATCH 27/31] Fix merge conflict causing PHP error. --- includes/functions/theme-functions.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index b79732d..eb49a3b 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -462,11 +462,7 @@ function trestle_read_more_link( $default_text ) { // Get Trestle custom "read more" link text $custom_text = esc_attr( genesis_get_option( 'trestle_read_more_text' ) ); -<<<<<<< HEAD - if ( $custom_text ) { -======= - if ( $custom_text ) ->>>>>>> 9de3310f116bb4f7dd5323ca40b16f2fe4160dcd + if ( $custom_text ) { return '… ' . $custom_text . ''; } else { return $default_text; From 189b5fe9951a58bbf0c743084ad6270263b9dbd7 Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Mon, 23 Mar 2015 12:33:33 -0700 Subject: [PATCH 28/31] Re-add favicon functionality. --- includes/admin/admin.php | 1 + includes/admin/customizer.js | 10 ++++++++++ includes/admin/customizer.php | 24 +++++++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/includes/admin/admin.php b/includes/admin/admin.php index a4a4f76..4fd5bc4 100644 --- a/includes/admin/admin.php +++ b/includes/admin/admin.php @@ -35,6 +35,7 @@ function trestle_custom_defaults( $defaults ) { 'trestle_layout' => 'solid', 'trestle_logo_url' => '', 'trestle_logo_url_mobile' => '', + 'trestle_favicon_url' => '', 'trestle_nav_primary_location' => 'full', 'trestle_read_more_text' => __( 'Read More »', 'trestle' ), 'trestle_revisions_number' => 3, diff --git a/includes/admin/customizer.js b/includes/admin/customizer.js index b6fb4ea..5249096 100644 --- a/includes/admin/customizer.js +++ b/includes/admin/customizer.js @@ -42,6 +42,16 @@ }); }); + // Favicon + wp.customize( 'genesis-settings[trestle_favicon_url]', function( value ) { + value.bind( function( url ) { + + var $faviconElem = $( 'link[rel="Shortcut Icon"]' ); + $faviconElem.attr( 'href', url ); + + }); + }); + // Primary Nav Location wp.customize( 'genesis-settings[trestle_nav_primary_location]', function( value ) { value.bind( function( value ) { diff --git a/includes/admin/customizer.php b/includes/admin/customizer.php index 39e7526..b8a319e 100644 --- a/includes/admin/customizer.php +++ b/includes/admin/customizer.php @@ -108,13 +108,35 @@ function trestle_customizer_controls( $wp_customize ) { $wp_customize, 'trestle_mobile_logo_control', array( - 'label' => __( 'Upload a logo for mobile', 'trestle' ), + 'label' => __( 'Upload a mobile logo', 'trestle' ), 'section' => 'trestle_settings_section', 'settings' => 'genesis-settings[trestle_logo_url_mobile]', ) ) ); + // Upload a mobile logo + $wp_customize->add_setting( + 'genesis-settings[trestle_favicon_url]', + array( + 'default' => genesis_get_option( 'trestle_favicon_url' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + new WP_Customize_Image_Control( + $wp_customize, + 'trestle_favicon_control', + array( + 'label' => __( 'Upload a favicon', 'trestle' ), + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_favicon_url]', + ) + ) + ); + // Primary nav style $wp_customize->add_setting( 'genesis-settings[trestle_nav_primary_location]', From c8861270e18a9d0da83c0d99e141aedf2d185922 Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Mon, 23 Mar 2015 12:53:21 -0700 Subject: [PATCH 29/31] Remove nav functionality that now lives in Auto Menu From Pages plugin. --- includes/functions/theme-functions.php | 148 +------------------------ 1 file changed, 2 insertions(+), 146 deletions(-) diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index eb49a3b..33a3789 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -14,13 +14,13 @@ ===========================================*/ add_action( 'init', 'trestle_load_bfa' ); -/** +/** * Initialize the Better Font Awesome Library. * * @since 2.0.0 */ function trestle_load_bfa() { - + // Set the library initialization args $args = array( 'version' => 'latest', @@ -202,150 +202,6 @@ function trestle_do_logos( $title, $inside, $wrap ) { } -/*=========================================== - * Navigation -===========================================*/ - -add_action( 'init', 'trestle_nav_modifications' ); -/** - * Performs modifications to the primary navigation menu - * - * @since 1.0.0 - * - * @see trestle_add_mobile_nav() - * @see trestle_auto_nav_items() - * @see trestle_custom_nav_extras() - * @see trestle_nav_placeholder() - */ -function trestle_nav_modifications() { - - global $trestle_nav_title; - - // Set title for Trestle placeholder navigation menu - $trestle_nav_title = __( 'Trestle Auto Nav Placeholder', 'trestle' ); - - // Auto-generate nav if Genesis theme setting is checked - if ( 1 == genesis_get_option( 'trestle_auto_nav' ) ) { - add_filter( 'wp_nav_menu_items', 'trestle_auto_nav_items', 9, 2 ); - } - - // Do custom nav extras - if ( 1 == genesis_get_option( 'trestle_custom_nav_extras' ) ) { - // Remove default nav extras - remove_filter( 'wp_nav_menu_items', 'genesis_nav_right' ); - - // Add custom nav extras - add_filter( 'wp_nav_menu_items', 'trestle_custom_nav_extras', 10, 2 ); - } - - // Create placeholder navigation menu object if needed - trestle_nav_placeholder(); -} - -add_action( 'init', 'trestle_nav_primary_location' ); -/** - * Move primary navigation into the header if need be. - * - * @since 1.2.0 - */ -function trestle_nav_primary_location() { - - if ( 'header' == genesis_get_option( 'trestle_nav_primary_location' ) ) { - remove_action( 'genesis_after_header', 'genesis_do_nav' ); - add_action( 'genesis_header', 'genesis_do_nav', 12 ); - } - -} - -/** - * Auto-generates list of pages for use in the primary navigation menu. - * - * @since 1.0.0 - * - * @param string $nav_items
  • list of navigation menu items. - * @param stdClass $menu_args Arguments for the menu. - * @return string
  • list of (modified) navigation menu items. - */ -function trestle_auto_nav_items( $nav_items, stdClass $menu_args ) { - - if ( 'primary' == $menu_args->theme_location ) { - $args = array( - 'depth' => genesis_get_option( 'trestle_auto_nav_depth' ) ? genesis_get_option( 'trestle_auto_nav_depth' ) : 0, - 'echo' => false, - 'show_home' => ( genesis_get_option( 'trestle_include_home_link' ) && genesis_get_option( 'trestle_home_link_text' ) ) ? do_shortcode( genesis_get_option( 'trestle_home_link_text' ) ): genesis_get_option( 'trestle_include_home_link' ), - 'menu_class' => 'auto-menu' - ); - - $ul_class = 'menu genesis-nav-menu menu-primary'; - - $menu_args = new stdClass(); - - $menu_args->theme_location = 'primary'; - - $nav_items = wp_page_menu( $args ); - - // Remove opening
      - $nav_items = preg_replace( '/]*>\s*
        /', '', $nav_items ); - - // Remove closing
    - $nav_items = preg_replace( '/<\/ul>\s*<\/div>/', '', $nav_items ); - } - - return $nav_items; -} - -/** - * Replaces standard Genesis navigation extras with custom input navigation extras. - * - * @since 1.0.0 - * - * @param string $nav_items
  • list of menu items. - * @param stdClass $menu_args Arguments for the menu. - * @return string
  • list of menu items with custom navigation extras
  • appended. - */ -function trestle_custom_nav_extras( $nav_items, stdClass $menu_args ) { - - if ( 'primary' == $menu_args->theme_location ) { - $custom_text = esc_attr( genesis_get_option( 'trestle_custom_nav_extras_text' ) ); - return $nav_items . '
  • ' . do_shortcode( genesis_get_option( 'trestle_custom_nav_extras_text' ) ) . '
  • '; - } - - return $nav_items; -} - -/** - * Generates a placeholder navigation menu object. - * - * When using Trestle's auto-generated navigation feature, - * it is necessary to ensure that some nav menu object is - * selected as primary otherwise no navigation will be generated. - * - * @since 1.0.0 - */ -function trestle_nav_placeholder() { - - global $trestle_nav_title; - - // Create placeholder menu for 'primary' spot if auto-nav is selected - this ensures that nav extras can be used even when no custom menu is formally set to primary - if ( 1 == genesis_get_option( 'trestle_auto_nav' ) && ! wp_get_nav_menu_object( $trestle_nav_title ) ) { - wp_create_nav_menu( $trestle_nav_title ); - } - - // Assign placeholder menu to 'primary' if auto-nav is selected and there is no current primary menu - if ( 1 == genesis_get_option( 'trestle_auto_nav' ) && ! wp_get_nav_menu_object( $trestle_nav_title ) && ! has_nav_menu( 'primary' ) ) { - $menu_locations = get_theme_mod( 'nav_menu_locations' ); - $menu_locations['primary'] = wp_get_nav_menu_object( $trestle_nav_title )->term_id; - set_theme_mod( 'nav_menu_locations', $menu_locations ); - } - - // Remove placeholder menu if auto-nav is disabled - $menus = get_registered_nav_menus(); - - if ( 1 != genesis_get_option( 'trestle_auto_nav' ) && wp_get_nav_menu_object( $trestle_nav_title ) && $trestle_nav_title != $menus['primary'] ) - wp_delete_nav_menu( $trestle_nav_title ); -} - - /*=========================================== * Posts & Pages ===========================================*/ From 8a097c4be21d99371ec51979687e1229859fb88a Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Mon, 23 Mar 2015 13:32:00 -0700 Subject: [PATCH 30/31] Fix mobile nav CSS and jQuery --- includes/js/theme-jquery.js | 14 ++++++++------ style.css | 37 +++++++++++++++---------------------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/includes/js/theme-jquery.js b/includes/js/theme-jquery.js index aacf0df..f51aa81 100644 --- a/includes/js/theme-jquery.js +++ b/includes/js/theme-jquery.js @@ -27,7 +27,7 @@ jQuery( document ).ready( function( $ ) { $( 'li:first-child' ).addClass( 'first' ); $( 'ul, ol' ).parent( 'li' ).addClass( 'parent' ); - // Mobile header toggle buttons + // Create mobile header toggle buttons $( '.site-header .title-area' ).after( '
    ' ); $( '.site-header .widget-area, .nav-primary' ).each( function( i ) { @@ -58,7 +58,7 @@ jQuery( document ).ready( function( $ ) { $target.addClass( 'toggle-target-' + i ); }); - // Toggle widget areas and primary nav + // A widget areas and primary nav mobile toggle functionality $( '.site-header .toggle-button' ).click( function( event ) { // Prevent default behavior @@ -70,11 +70,9 @@ jQuery( document ).ready( function( $ ) { // Get toggle button that was clicked $button = $( this ); - //Remove focus - $button.blur(); - // Match the button to the right target $target = $( '.toggle-target-' + $button.attr( 'id' ).match( /\d+/ ) ); + console.log( 'Target: ' + $target.attr('class')); // Toggle buttons $button.toggleClass( 'open' ); @@ -82,7 +80,11 @@ jQuery( document ).ready( function( $ ) { // Toggle targets $target.toggleClass( 'open' ); - $( '[class^="toggle-target"]' ).not( $target ).removeClass( 'open' ); + $( '[class*="toggle-target"]' ).not( $target ).removeClass( 'open' ); + + // Remove focus + $button.blur(); + }); // Mobile navigation icons diff --git a/style.css b/style.css index 3aaf97d..68fd7e7 100644 --- a/style.css +++ b/style.css @@ -1368,15 +1368,11 @@ Site Header .site-header .widget-area { width: 100%; + padding: 20px; background-color: #eee; border: 1px solid #ddd; - border-width: 0; - overflow: hidden; -} - -.site-header .widget-area.open { - padding: 20px; border-width: 1px 0; + overflow: hidden; } .site-header .search-form { @@ -1414,23 +1410,21 @@ Site Header content: "\f0c9"; } - .nav-primary, -/*.site-header .nav-primary,*/ .site-header .widget-area { position: absolute; + z-index: -999; top: 100%; left: 0; right: 0; - max-height: 0; opacity: 0; + filter: alpha(opacity=0); box-shadow: 0 4px 8px 1px rgba(0,0,0,0.4); - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - -webkit-transition: all .5s ease, padding 0s .5s; - -moz-transition: all .5s ease, padding 0s .5s; - -ms-transition: all .5s ease, padding 0s .5s; - -o-transition: all .5s ease, padding 0s .5s; - transition: all .5s ease, padding 0s .5s; + -webkit-transition: opacity 0.25s ease, z-index 0s 0.25s; + -moz-transition: opacity 0.25s ease, z-index 0s 0.25s; + -ms-transition: opacity 0.25s ease, z-index 0s 0.25s; + -o-transition: opacity 0.25s ease, z-index 0s 0.25s; + transition: opacity 0.25s ease, z-index 0s 0.25s; } .site-container > .nav-primary { @@ -1440,14 +1434,13 @@ Site Header .nav-primary.open, .widget-area.open { z-index: 50; - max-height: 9999px; opacity: 1; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - -webkit-transition: opacity .5s ease, padding 0s 0s; - -moz-transition: opacity .5s ease, padding 0s 0s; - -ms-transition: opacity .5s ease, padding 0s 0s; - -o-transition: opacity .5s ease, padding 0s 0s; - transition: opacity .5s ease, padding 0s 0s; + filter: alpha(opacity=100); + -webkit-transition: z-index 0s ease, opacity 0.25s 0s; + -moz-transition: z-index 0s ease, opacity 0.25s 0s; + -ms-transition: z-index 0s ease, opacity 0.25s 0s; + -o-transition: z-index 0s ease, opacity 0.25s 0s; + transition: z-index 0s ease, opacity 0.25s 0s; } From ade79de867e9929001adebccd188c46f41a22dfa Mon Sep 17 00:00:00 2001 From: MickeyKay Date: Mon, 23 Mar 2015 15:47:56 -0700 Subject: [PATCH 31/31] Update responsive header/full menu behavior. --- includes/admin/customizer.js | 2 +- includes/admin/customizer.php | 20 +++++++++++++ includes/functions/theme-functions.php | 39 ++++++++++++++++++++++++++ style.css | 24 ++++++++-------- 4 files changed, 72 insertions(+), 13 deletions(-) diff --git a/includes/admin/customizer.js b/includes/admin/customizer.js index 5249096..7a44eb4 100644 --- a/includes/admin/customizer.js +++ b/includes/admin/customizer.js @@ -79,7 +79,7 @@ wp.customize( 'genesis-settings[trestle_read_more_text]', function( value ) { value.bind( function( value ) { - $( 'a.more-link' ).text( value ); + $( 'a.more-link' ).html( value ); }); }); diff --git a/includes/admin/customizer.php b/includes/admin/customizer.php index b8a319e..93df40a 100644 --- a/includes/admin/customizer.php +++ b/includes/admin/customizer.php @@ -161,6 +161,26 @@ function trestle_customizer_controls( $wp_customize ) { ) ); + // Primary nav extras + $wp_customize->add_setting( + 'genesis-settings[trestle_custom_nav_extras_text]', + array( + 'default' => genesis_get_option( 'trestle_custom_nav_extras_text' ), + 'type' => 'option', + 'transport' => 'postMessage', + 'capability' => 'edit_theme_options', + ) + ); + $wp_customize->add_control( + 'trestle_custom_nav_extras_text_control', + array( + 'section' => 'trestle_settings_section', + 'settings' => 'genesis-settings[trestle_custom_nav_extras_text]', + 'label' => __( 'Add search to mobile navigation', 'trestle' ), + 'type' => 'checkbox', + ) + ); + // Blog post custom read more link text $wp_customize->add_setting( 'genesis-settings[trestle_read_more_text]', diff --git a/includes/functions/theme-functions.php b/includes/functions/theme-functions.php index 33a3789..0946233 100644 --- a/includes/functions/theme-functions.php +++ b/includes/functions/theme-functions.php @@ -202,6 +202,45 @@ function trestle_do_logos( $title, $inside, $wrap ) { } +/*=========================================== + * Navigation +===========================================*/ + +add_action( 'init', 'trestle_nav_primary_location' ); +/** + * Move primary navigation into the header if need be. + * + * @since 1.2.0 + */ +function trestle_nav_primary_location() { + + if ( 'header' == genesis_get_option( 'trestle_nav_primary_location' ) ) { + remove_action( 'genesis_after_header', 'genesis_do_nav' ); + add_action( 'genesis_header', 'genesis_do_nav', 12 ); + } + +} + +add_filter( 'wp_nav_menu_items', 'trestle_custom_nav_extras', 10, 2 ); +/** + * Add custom nav extras. + * + * @since 1.0.0 + * + * @param string $nav_items
  • list of menu items. + * @param stdClass $menu_args Arguments for the menu. + * @return string
  • list of menu items with custom navigation extras
  • appended. + */ +function trestle_custom_nav_extras( $nav_items, stdClass $menu_args ) { + + if ( 'primary' == $menu_args->theme_location && genesis_get_option( 'trestle_custom_nav_extras_text' ) ) { + return $nav_items . '
  • ' . get_search_form( false ) . '
  • '; + } + + return $nav_items; +} + + /*=========================================== * Posts & Pages ===========================================*/ diff --git a/style.css b/style.css index 68fd7e7..8c5cdc8 100644 --- a/style.css +++ b/style.css @@ -1616,7 +1616,7 @@ Site Navigation .genesis-nav-menu > .right .search-form { display: inline-block; - padding: 0; + padding: 8px 0; } .genesis-nav-menu > .right input[type="submit"] { @@ -1675,12 +1675,6 @@ Site Navigation padding: 0; } -.site-header .nav-primary a:hover, -.site-header .nav-primary [class*="current-"] > a, -.site-header .nav-primary [class*="current_"] > a { - color: #333; -} - .site-header .right { padding-right: 0; } @@ -2474,7 +2468,7 @@ Media Queries --------------------------------------------- */ .genesis-nav-menu > .right { - display: inline-block; + display: none; float: right; border-top: none; } @@ -2484,10 +2478,6 @@ Media Queries margin: 0 0 0 2rem; } - .genesis-nav-menu > .search form { - padding-right: 0; - } - .genesis-nav-menu > .right input[type="submit"] { display: inline-block; } @@ -2563,6 +2553,16 @@ Media Queries padding: 0.6em 1.2em; } + .site-header .nav-primary .menu > li:last-of-type:not(.right) { + padding-right: 0; + } + + .site-header .nav-primary a:hover, + .site-header .nav-primary [class*="current-"] > a, + .site-header .nav-primary [class*="current_"] > a { + color: #333; + } + /* Plugins --------------------------------------------- */