Make WordPress Core

Ticket #24056: 24056-pagination.2.patch

File 24056-pagination.2.patch, 5.3 KB (added by a.hoereth, 12 years ago)

fixes missing last page

  • wp-admin/css/wp-admin.css

     
    36423642        display: block;
    36433643}
    36443644
     3645#diff-paginate {
     3646        text-align: center;
     3647        margin: 10px 0 0 0;
     3648}
     3649
     3650#diff-paginate input {
     3651        margin: 0 2px;
     3652}
     3653
    36453654#diff-title-to strong {
    36463655        display: none;
    36473656}
  • wp-admin/includes/ajax-actions.php

     
    21122112        $right_handle_at = ! empty( $_GET['right_handle_at'] ) ? (int) $_GET['right_handle_at'] : 0;
    21132113        $left_handle_at = ! empty( $_GET['left_handle_at'] ) ? (int) $_GET['left_handle_at'] : 0;
    21142114        $single_revision_id = ! empty( $_GET['single_revision_id'] ) ? absint( $_GET['single_revision_id'] ) : 0;
     2115        $page_size = ! empty( $_GET['page_size'] ) ? absint( $_GET['page_size'] ) : -1;
     2116        $page = ! empty( $_GET['page'] ) ? absint( $_GET['page'] ) : 1;
    21152117        $compare_two_mode = (bool) $post_id;
    21162118
    21172119        $all_the_revisions = array();
     
    21212123        if ( ! current_user_can( 'read_post', $post_id ) )
    21222124                continue;
    21232125
    2124         if ( ! $revisions = wp_get_post_revisions( $post_id ) )
     2126        if ( ! $revisions = wp_get_post_revisions( $post_id, array( 'posts_per_page' => $page_size, 'paged' => $page ) ) )
    21252127                return;
    21262128
    21272129        $left_revision = get_post( $compare_to );
     
    21832185
    21842186        $count = -1;
    21852187
     2188        // append current live revision if not on first page
     2189        if( $page > 1 ) {
     2190                $current = array_pop(wp_get_post_revisions( $post_id, array( 'numberposts' => 1 ) ));
     2191                $revisions[$current->ID] = $current;
     2192        }
     2193       
    21862194        // reverse the list to start with oldest revision
    21872195        $revisions = array_reverse( $revisions );
    21882196
  • wp-admin/js/revisions.js

     
    3838                rightModelLoading: false,       // disallow slider interaction, also repeat loads, while loading
    3939                tickmarkView: null, // the slider tickmarks
    4040                slider: null, // the slider instance
     41                page: null,
    4142
    4243                constructor: function() {
    4344                        var self    = this;
     
    568569                // next and previous buttons, only available in compare one mode
    569570                events: {
    570571                        'click #next':     ! isRtl ? 'nextRevision' : 'previousRevision',
    571                         'click #previous': ! isRtl ? 'previousRevision' : 'nextRevision'
     572                        'click #previous': ! isRtl ? 'previousRevision' : 'nextRevision',
     573                        'click .paginate': 'changePage'
    572574                },
    573575
    574576                render: function() {
     
    630632                        Diff.slider.refresh({
    631633                                value: Diff.rightDiff - 1
    632634                        }, true );
    633                 }
     635                },
     636
     637                changePage: function(e) {
     638                        // suppress event on disabled current page button
     639                        if( Diff.page == $( e.currentTarget ).data( 'id' ) )
     640                                return false;
     641
     642                        // change page
     643                        Diff.page = $( e.currentTarget ).data( 'id' );
     644
     645                        $( '.paginate'  ).removeClass( 'button-disabled' );
     646                        $( e.currentTarget ).addClass( 'button-disabled' );
     647
     648                        // single handle mode
     649                        if ( Diff.slider.singleRevision )
     650                                Diff.reloadModelSingle();
     651
     652                        // compare two mode
     653                        else {
     654                                Diff.revisions.fetch({
     655                                        success: function() {
     656                                                Diff.reloadLeftRight(); // load diffs for left and right handles
     657                                                Diff.revisionView.model = Diff.rightHandleRevisions; // results in a reload of the revisionView.model
     658                                        }
     659                                });
     660                        }
     661                }
    634662        });
    635663
    636664        /**
     
    789817                                'showSplitView': true,
    790818                                'rightHandleAt': 0,
    791819                                'leftHandleAt': 0,
     820                                'page_size' : revisions.model.settings.page_size,
    792821                                'nonce': revisions.model.settings.nonce
    793822                        });
    794823                },
     
    802831                                '&show_split_view=' + this.options.showSplitView + // show in split view or single column view
    803832                                '&right_handle_at=' + this.options.rightHandleAt + // mark point for comparison list
    804833                                '&left_handle_at=' + this.options.leftHandleAt + // mark point for comparison list
     834                                '&page_size=' + this.options.page_size +
     835                                '&page=' + Diff.page +
    805836                                '&nonce=' + this.options.nonce;
    806837                },
    807838
  • wp-admin/revision.php

     
    7878
    7979wp_enqueue_script( 'revisions' );
    8080
     81$page_size = 50;
     82$revisions_idx = array_flip( array_keys( wp_get_post_revisions( $post->ID ) ) );
    8183
    8284$settings = array(
    8385        'post_id'     => $post->ID,
    8486        'nonce'       => wp_create_nonce( 'revisions-ajax-nonce' ),
    85         'revision_id' => $revision_id
     87        'revision_id' => $revision_id,
     88        'page'            => floor((( $revisions_idx[$revision_id] ) / $page_size))+1,
     89        'page_size'   => $page_size
    8690);
    8791
    8892wp_localize_script( 'revisions', 'wpRevisionsSettings', $settings );
     
    172176        </div>
    173177
    174178        <div id="diff-slider" class="wp-slider"></div>
     179
     180        <div id="diff-paginate">
     181                <?php
     182                $pages = floor(count( $revisions_idx ) / $page_size)+1;
     183                for( $i = 1; $i <= $pages; $i++ )
     184                        echo '<input class="button'.( $i == $settings['page'] ? ' button-disabled' : '' ).' paginate" type="button" value="'.( ( $i - 1 ) * $page_size + 1 ) .'-'.( ( $i == $pages ) ? count( $revisions_idx ) : $i * $page_size ).'" data-id="'.$i.'" />';
     185                ?>
     186        </div>
    175187</script>
    176188
    177189<script id="tmpl-revision-ticks" type="text/html">