184 lines
4.8 KiB
JavaScript
184 lines
4.8 KiB
JavaScript
/**
|
|
* WP Rollback Scripts
|
|
*
|
|
* @description:
|
|
* @copyright: http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
|
*/
|
|
|
|
var wpr_vars;
|
|
|
|
jQuery.noConflict();
|
|
(function( $ ) {
|
|
|
|
// On DOM Ready
|
|
$( function() {
|
|
|
|
var form = $( '.rollback-form' );
|
|
var form_labels = $( 'label', form.get( 0 ) );
|
|
var form_submit_btn = $( '.magnific-popup' );
|
|
|
|
/**
|
|
* On version click
|
|
*/
|
|
form_labels.on( 'click', function() {
|
|
|
|
// add a selected class
|
|
form_labels.removeClass( 'wpr-selected' );
|
|
form_submit_btn.removeClass( 'wpr-rollback-disabled' );
|
|
$( this ).addClass( 'wpr-selected' );
|
|
|
|
// ensure the radio button always gets clicked
|
|
$( this ).find( 'input' ).prop( 'checked', true );
|
|
|
|
} );
|
|
|
|
/**
|
|
* On view changelog clicked.
|
|
*/
|
|
$( '.wpr-changelog-link' ).on( 'click', function( e ) {
|
|
|
|
e.preventDefault();
|
|
|
|
var changelog_container = $( '.wpr-changelog' );
|
|
var changelog_placement = $( this ).parent( 'li' );
|
|
var version = $( this ).data( 'version' );
|
|
|
|
// Ensure all change log links are visible.
|
|
$('.wpr-changelog-link').removeClass('wpr-hidden-changelog')
|
|
|
|
// If changelog was already fetched, use that data.
|
|
if ( changelog_container.html().length ) {
|
|
wpr_append_changelog_entry( changelog_placement, version );
|
|
return false;
|
|
}
|
|
|
|
// Get changelog via AJAX.
|
|
$.post( ajaxurl, {
|
|
'action': 'wpr_check_changelog',
|
|
'slug': $( 'input[name="plugin_slug"]' ).val()
|
|
}, function( response ) {
|
|
// Add changelog to DOM.
|
|
$( changelog_container ).append( $.parseHTML( response ) );
|
|
|
|
// Show changelog entry.
|
|
wpr_append_changelog_entry( changelog_placement, version );
|
|
|
|
}
|
|
);
|
|
|
|
} );
|
|
|
|
/**
|
|
* Show changelog entry.
|
|
*
|
|
* @param placement
|
|
* @param version
|
|
*/
|
|
function wpr_append_changelog_entry( placement, version ) {
|
|
|
|
var changelog = $( '.wpr-changelog' );
|
|
var changelog_headings = $( changelog ).find( 'h4' );
|
|
|
|
// Remove old entry.
|
|
$( '.wpr-changelog-entry' ).remove();
|
|
|
|
// Hide this change log link.
|
|
$(placement).find('.wpr-changelog-link').addClass('wpr-hidden-changelog');
|
|
|
|
// Append a new one.
|
|
$( placement ).after( '<div class="wpr-changelog-entry"></div>' );
|
|
|
|
// Loop through changelog headings to get changelog entry.
|
|
$( changelog_headings ).each( function( index, value ) {
|
|
|
|
var raw_val = $( value ).text();
|
|
|
|
// Match the changelog version heading using regex from: https://github.com/sindresorhus/semver-regex/blob/master/index.js
|
|
// var regex_symver = /\bv?(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z\-]+(?:\.[\da-z\-]+)*)?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?\b/;
|
|
|
|
// from: https://stackoverflow.com/a/27540795/684352
|
|
var regex_symver = /(?:(\d+)\.)?(?:(\d+)\.)?(?:(\d+)\.\d+)?(?:(\d+)\.\d+)/;
|
|
var found_version_num = raw_val.match( regex_symver );
|
|
var found_version_num = $( found_version_num ).get( 0 );
|
|
|
|
// Match version number.
|
|
if ( found_version_num == version ) {
|
|
|
|
// Assemble entry.
|
|
var changelog_heading = $( value ).clone();
|
|
var changelog_entry = $( value ).nextUntil( 'h4' ).clone();
|
|
|
|
// Append changelog entry.
|
|
$( '.wpr-changelog-entry' ).append( changelog_heading ).append( changelog_entry );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
// If no changelog found, show message.
|
|
if ( ! $( '.wpr-changelog-entry' ).html().length ) {
|
|
$( '.wpr-changelog-entry' ).append( '<p class="wpr-no-changelog-message">' + wpr_vars.text_no_changelog_found + '</p>' );
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Modal rollback.
|
|
*/
|
|
form_submit_btn.on( 'click', function() {
|
|
|
|
var rollback_form_vals = form.serializeArray();
|
|
|
|
var rollback_version = form.find( 'input[name="plugin_version"]:checked' ).val();
|
|
if ( ! rollback_version ) {
|
|
rollback_version = form.find( 'input[name="theme_version"]:checked' ).val();
|
|
}
|
|
var installed_version = form.find( 'input[name="installed_version"]' ).val();
|
|
var new_version = form.find( 'input[name="new_version"]' ).val();
|
|
var rollback_name = form.find( 'input[name="rollback_name"]' ).val();
|
|
|
|
// Ensure a version is selected
|
|
if ( ! rollback_version ) {
|
|
|
|
alert( wpr_vars.version_missing );
|
|
$.magnificPopup.close(); // just for good measure
|
|
|
|
} else {
|
|
|
|
// Passed
|
|
$.magnificPopup.open( {
|
|
items: {
|
|
src: $( '#wpr-modal-confirm' ), // can be a HTML string, jQuery object, or CSS selector
|
|
type: 'inline'
|
|
},
|
|
closeBtnInside: false,
|
|
callbacks: {
|
|
open: function() {
|
|
|
|
$( 'span.wpr-plugin-name' ).text( rollback_name );
|
|
$( 'span.wpr-installed-version' ).text( installed_version );
|
|
$( 'span.wpr-new-version' ).text( rollback_version );
|
|
|
|
}
|
|
}
|
|
} );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
// Modal Close
|
|
$( '.wpr-close' ).on( 'click', function( e ) {
|
|
e.preventDefault();
|
|
$.magnificPopup.close();
|
|
} );
|
|
// Modal Confirm (GO! GO! GO!)
|
|
$( '.wpr-go' ).on( 'click', function( e ) {
|
|
// submit form
|
|
form.submit();
|
|
} );
|
|
|
|
} );
|
|
|
|
})( jQuery );
|