/httpkientrucshome.com/wp-content/themes/genesis/lib/js/admin.js
JavaScript | 338 lines | 102 code | 50 blank | 186 comment | 10 complexity | 1a7de2d1e4e4dab683940455abee57a8 MD5 | raw file
- /**
- * This file controls the behaviours within the Genesis Framework.
- *
- * Note that while this version of the file include 'use strict'; at the function level,
- * the Closure Compiler version strips that away. This is fine, as the compiler may
- * well be doing things that are not use strict compatible.
- *
- * @author StudioPress
- */
- // ==ClosureCompiler==
- // @compilation_level ADVANCED_OPTIMIZATIONS
- // @output_file_name admin.min.js
- // @externs_url http://closure-compiler.googlecode.com/svn/trunk/contrib/externs/jquery-1.8.js
- // ==/ClosureCompiler==
- // http://closure-compiler.appspot.com/home
- /* global genesis, genesisL10n, genesis_toggles, confirm */
- /**
- * Holds Genesis values in an object to avoid polluting global namespace.
- *
- * @since 1.8.0
- *
- * @constructor
- */
- window[ 'genesis' ] = {
- settingsChanged: false,
- /**
- * Inserts a category checklist toggle button and binds the behaviour.
- *
- * @since 1.8.0
- *
- * @function
- */
- categoryChecklistToggleInit: function() {
- 'use strict';
- // Insert toggle button into DOM wherever there is a category checklist
- jQuery( '<p><span id="genesis-category-checklist-toggle" class="button">' + genesisL10n.categoryChecklistToggle + '</span></p>' )
- .insertBefore( 'ul.categorychecklist' );
- // Bind the behaviour to click
- jQuery( document ).on( 'click.genesis.genesis_category_checklist_toggle', '#genesis-category-checklist-toggle', genesis.categoryChecklistToggle );
- },
- /**
- * Provides the behaviour for the category checklist toggle button.
- *
- * On the first click, it checks all checkboxes, and on subsequent clicks it
- * toggles the checked status of the checkboxes.
- *
- * @since 1.8.0
- *
- * @function
- *
- * @param {jQuery.event} event
- */
- categoryChecklistToggle: function( event ) {
- 'use strict';
- // Cache the selectors
- var $this = jQuery( event.target ),
- checkboxes = $this.parent().next().find( ':checkbox' );
- // If the button has already been clicked once, clear the checkboxes and remove the flag
- if ( $this.data( 'clicked' ) ) {
- checkboxes.removeAttr( 'checked' );
- $this.data( 'clicked', false );
- } else { // Mark the checkboxes and add a flag
- checkboxes.attr( 'checked', 'checked' );
- $this.data( 'clicked', true );
- }
- },
- /**
- * Grabs the array of toggle settings and loops through them to hook in
- * the behaviour.
- *
- * The genesis_toggles array is filterable in load-scripts.php before being
- * passed over to JS via wp_localize_script().
- *
- * @since 1.8.0
- *
- * @function
- */
- toggleSettingsInit: function() {
- 'use strict';
- jQuery.each( genesis_toggles, function( k, v ) {
- // Prepare data
- var data = { selector: v[ 0 ], showSelector: v[ 1 ], checkValue: v[ 2 ] };
- // Setup toggle binding
- jQuery( 'div.genesis-metaboxes' )
- .on( 'change.genesis.genesis_toggle', v[ 0 ], data, genesis.toggleSettings );
- // Trigger the check when page loads too.
- // Can't use triggerHandler here, as that doesn't bubble the event up to div.genesis-metaboxes.
- // We namespace it, so that it doesn't conflict with any other change event attached that
- // we don't want triggered on document ready.
- jQuery( v[ 0 ]).trigger( 'change.genesis_toggle', data );
- });
- },
- /**
- * Provides the behaviour for the change event for certain settings.
- *
- * Three bits of event data is passed - the jQuery selector which has the
- * behaviour attached, the jQuery selector which to toggle, and the value to
- * check against.
- *
- * The checkValue can be a single string or an array (for checking against
- * multiple values in a dropdown) or a null value (when checking if a checkbox
- * has been marked).
- *
- * @since 1.8.0
- *
- * @function
- *
- * @param {jQuery.event} event
- */
- toggleSettings: function( event ) {
- 'use strict';
- // Cache selectors
- var $selector = jQuery( event.data.selector ),
- $showSelector = jQuery( event.data.showSelector ),
- checkValue = event.data.checkValue;
- // Compare if a checkValue is an array, and one of them matches the value of the selected option
- // OR the checkValue is _unchecked, but the checkbox is not marked
- // OR the checkValue is _checked, but the checkbox is marked
- // OR it's a string, and that matches the value of the selected option.
- if (
- ( jQuery.isArray( checkValue ) && jQuery.inArray( $selector.val(), checkValue ) > -1) ||
- ( '_unchecked' === checkValue && $selector.is( ':not(:checked)' ) ) ||
- ( '_checked' === checkValue && $selector.is( ':checked' ) ) ||
- ( '_unchecked' !== checkValue && '_checked' !== checkValue && $selector.val() === checkValue )
- ) {
- jQuery( $showSelector ).slideDown( 'fast' );
- } else {
- jQuery( $showSelector ).slideUp( 'fast' );
- }
- },
- /**
- * When a input or textarea field field is updated, update the character counter.
- *
- * For now, we can assume that the counter has the same ID as the field, with a _chars
- * suffix. In the future, when the counter is added to the DOM with JS, we can add
- * a data( 'counter', 'counter_id_here' ) property to the field element at the same time.
- *
- * @since 1.8.0
- *
- * @function
- *
- * @param {jQuery.event} event
- */
- updateCharacterCount: function( event ) {
- 'use strict';
- jQuery( '#' + event.target.id + '_chars' ).html( jQuery( event.target ).val().length.toString() );
- },
- /**
- * Provides the behaviour for the layout selector.
- *
- * When a layout is selected, the all layout labels get the selected class
- * removed, and then it is added to the label that was selected.
- *
- * @since 1.8.0
- *
- * @function
- *
- * @param {jQuery.event} event
- */
- layoutHighlighter: function( event ) {
- 'use strict';
- // Cache class name
- var selectedClass = 'selected';
- // Remove class from all labels
- jQuery('input[name="' + jQuery(event.target).attr('name') + '"]').parent('label').removeClass(selectedClass);
- // Add class to selected layout
- jQuery(event.currentTarget).addClass(selectedClass);
- },
- /**
- * Helper function for confirming a user action.
- *
- * @since 1.8.0
- *
- * @function
- *
- * @param {String} text The text to display.
- * @returns {Boolean}
- */
- confirm: function( text ) {
- 'use strict';
- return confirm( text );
- },
- /**
- * Have all form fields in Genesis metaboxes set a dirty flag when changed.
- *
- * @since 2.0.0
- *
- * @function
- */
- attachUnsavedChangesListener: function() {
- 'use strict';
- jQuery( 'div.genesis-metaboxes :input' ).change( function() {
- genesis.registerChange();
- });
- window.onbeforeunload = function(){
- if ( genesis.settingsChanged ) {
- return genesisL10n.saveAlert;
- }
- };
- jQuery( 'div.genesis-metaboxes input[type="submit"]' ).click( function() {
- window.onbeforeunload = null;
- });
- },
- /**
- * Set a flag, to indicate form fields have changed.
- *
- * @since 2.0.0
- *
- * @function
- */
- registerChange: function() {
- 'use strict';
- genesis.settingsChanged = true;
- },
- /**
- * Ask user to confirm that a new version of Genesis should now be installed.
- *
- * @since 2.0.0
- *
- * @function
- *
- * @return {Boolean} True if upgrade should occur, false if not.
- */
- confirmUpgrade: function() {
- 'use strict';
- return confirm( genesisL10n.confirmUpgrade );
- },
- /**
- * Ask user to confirm that settings should now be reset.
- *
- * @since 2.0.0
- *
- * @function
- *
- * @return {Boolean} True if reset should occur, false if not.
- */
- confirmReset: function() {
- 'use strict';
- return confirm( genesisL10n.confirmReset );
- },
- /**
- * Initialises all aspects of the scripts.
- *
- * Generally ordered with stuff that inserts new elements into the DOM first,
- * then stuff that triggers an event on existing DOM elements when ready,
- * followed by stuff that triggers an event only on user interaction. This
- * keeps any screen jumping from occuring later on.
- *
- * @since 1.8.0
- *
- * @function
- */
- ready: function() {
- 'use strict';
- // Move all messages below our floated buttons
- jQuery( 'h2' ).nextAll( 'div.updated, div.error' ).insertAfter( 'p.top-buttons' );
- // Initialise category checklist toggle button
- genesis.categoryChecklistToggleInit();
- // Initialise settings that can toggle the display of other settings
- genesis.toggleSettingsInit();
- // Initialise form field changing flag.
- genesis.attachUnsavedChangesListener();
- // Bind character counters
- jQuery( '#genesis_title, #genesis_description' ).on( 'keyup.genesis.genesis_character_count', genesis.updateCharacterCount );
- // Bind layout highlighter behaviour
- jQuery('.genesis-layout-selector').on('change.genesis.genesis_layout_selector', 'label', genesis.layoutHighlighter);
- // Bind upgrade confirmation
- jQuery( '.genesis-js-confirm-upgrade' ).on( 'click.genesis.genesis_confirm_upgrade', genesis.confirmUpgrade );
- // Bind reset confirmation
- jQuery( '.genesis-js-confirm-reset' ).on( 'click.genesis.genesis_confirm_reset', genesis.confirmReset );
- }
- };
- jQuery( genesis.ready );
- /* jshint ignore:start */
- /**
- * Helper function for confirming a user action.
- *
- * This function is deprecated in favour of genesis.confirm( text ) which provides
- * the same functionality.
- *
- * @since 1.0.0
- * @deprecated 1.8.0
- */
- function genesis_confirm( text ) {
- 'use strict';
- return genesis.confirm( text );
- }
- /* jshint ignore:end */