File "themes-wp-rollback.js"

Full path: /home/kosmetik/public_html/wp-content/plugins/wp-rollback/assets/js/themes-wp-rollback.js
File size: 5.09 B
MIME-type: text/html
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

/**
 *  Theme Specific WP Rollback
 *
 *  @description: Adds a rollback option to themes
 *  @copyright: http://opensource.org/licenses/gpl-2.0.php GNU Public License
 */
var wpr_vars;
jQuery.noConflict();

(function( $ ) {

	/**
	 * Content Change DOM Event Listener
	 *
	 * @see: http://stackoverflow.com/questions/3233991/jquery-watch-div/3234646#3234646
	 * @param callback
	 * @returns {*}
	 */
	jQuery.fn.contentChange = function( callback ) {
		var elms = jQuery( this );
		elms.each(
			function( i ) {
				var elm = jQuery( this );
				elm.data( 'lastContents', elm.html() );
				window.watchContentChange = window.watchContentChange ? window.watchContentChange : [];
				window.watchContentChange.push( { 'element': elm, 'callback': callback } );
			}
		);
		return elms;
	};
	setInterval( function() {
		if ( window.watchContentChange ) {
			for ( i in window.watchContentChange ) {
				if ( window.watchContentChange[ i ].element.data( 'lastContents' ) !== window.watchContentChange[ i ].element.html() ) {
					window.watchContentChange[ i ].callback.apply( window.watchContentChange[ i ].element );
					window.watchContentChange[ i ].element.data( 'lastContents', window.watchContentChange[ i ].element.html() );
				}

			}
		}
	}, 150 );

	// On DOM Ready
	$( function() {
		var themes;

		themes = wp.themes = wp.themes || {};
		themes.data = typeof _wpThemeSettings !== 'undefined' ? _wpThemeSettings : '';

		// Is only one theme active?
		if( themes.data.themes.length === 1 ) {
			// Show the rollback button.
			wpr_theme_rollback(themes.data.themes[0].id);
		}

		// On clicking a theme template
		$( '.theme-overlay' ).contentChange( function( e ) {

			// get theme name that was clicked
			var clicked_theme = wpr_get_parameter_by_name( 'theme' );

			// check that rollback button hasn't been placed
			if ( is_rollback_btn_there() ) {
				// button is there, bail
				return false;
			}

			// pass off to rollback function
			wpr_theme_rollback( clicked_theme );

		} );

		/**
		 * Check to see if Rollback button is in place
		 *
		 * @returns {boolean}
		 */
		function is_rollback_btn_there() {

			if ( $( '.wpr-theme-rollback' ).length > 0 ) {
				return true;
			}
			return false;

		}

		/**
		 * Is Theme WordPress.org?
		 *
		 * Rollback only supports WordPress.org themes.
		 *
		 * @param theme
		 */
		function wpr_theme_rollback( theme ) {

			var theme_data = wpr_get_theme_data( theme );

			// ensure this theme can be rolled back (not premium, etc)
			if ( theme_data !== null && typeof theme_data.hasRollback !== 'undefined' && theme_data.hasRollback !== false ) {

				var active_theme = $( '.theme-overlay' ).hasClass( 'active' );

				var rollback_btn_html = '<a href="' + encodeURI( 'index.php?page=wp-rollback&type=theme&theme_file=' + theme + '&current_version=' + theme_data.version + '&rollback_name=' + theme_data.name + '&_wpnonce=' + wpr_vars.nonce ) + '" style="position:absolute;right: ' + (active_theme === true ? '5px' : '80px') + '; bottom: 5px;" class="button wpr-theme-rollback">' + wpr_vars.text_rollback_label + '</a>';

				$( '.theme-wrap' ).find( '.theme-actions' ).append( rollback_btn_html );

			} else {
				// Can't roll back this theme, display the notice.
				$( '.theme-wrap' ).find( '.theme-actions' ).append( '<span class="no-rollback" style="position: absolute;left: 23px;bottom: 16px;font-size: 12px;font-style: italic;color: rgb(181, 181, 181);">' + wpr_vars.text_not_rollbackable + '</span>' );
			}

		}

		/**
		 * Get Theme Data
		 *
		 * @description Loops through the wp.themes.data.themes object, finds a match, and returns the data
		 * @param theme
		 * @returns {*}
		 */
		function wpr_get_theme_data( theme ) {

			var theme_data = wp.themes.data.themes;

			// Loop through complete theme data to find this current theme's data
			for ( var i = 0, len = theme_data.length; i < len; i ++ ) {
				if ( theme_data[ i ].id === theme ) {
					return theme_data[ i ]; // Return as soon as the object is found
				}
			}
			return null; // The object was not found
		}

		/**
		 * JS Ready Query String (Helper)
		 *
		 * Kinda dirty but whatever...
		 *
		 * @see: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
		 * @param name
		 * @returns {string}
		 */
		function wpr_get_parameter_by_name( name ) {
			name = name.replace( /[\[]/, '\\[' ).replace( /[\]]/, '\\]' );
			var regex = new RegExp( '[\\?&]' + name + '=([^&#]*)' ),
				results = regex.exec( location.search );
			return results === null ? '' : decodeURIComponent( results[ 1 ].replace( /\+/g, ' ' ) );
		}

		/**
		 * Get Parameter from Focused Theme
		 *
		 * @returns {*}
		 */
		function wpr_get_parameter_from_focused_theme() {
			var focused_theme = wp.themes.focusedTheme;
			var name = $( focused_theme ).find( '.theme-name' ).attr( 'id' );

			if ( typeof name !== 'undefined' ) {
				name = name.replace( '-name', '' );
			} else {
				return false;
			}

			return name;
		}

		/**
		 * Theme Rollback Button Clicked
		 *
		 * Send them over to rollback.
		 */
		$( 'body' ).on( 'click', '.wpr-theme-rollback', function( e ) {
			window.location = $( this ).attr( 'href' );
		} );

	} );

})( jQuery );