WordPress.org

Make WordPress Core

Ticket #11420: api.cleanup.diff

File api.cleanup.diff, 11.0 KB (added by koopersmith, 10 years ago)
  • wp-includes/js/tinymce/plugins/wplink/css/wplink.dev.css

     
    4747        height: 185px;
    4848        overflow: auto;
    4949}
    50 #wp-link li {
     50#wp-link li,
     51#wp-link .query-notice {
    5152        margin-bottom: 0;
    5253        border-bottom: 1px solid #f1f1f1;
    5354        color: #333;
     
    6667        cursor: auto;
    6768        color: #333;
    6869}
    69 #wp-link  li.selected {
     70#wp-link li.selected {
    7071        background: #ddd;
    7172        color: #333;
    7273}
  • wp-includes/js/tinymce/plugins/wplink/js/wplink.dev.js

     
     1var wpLink;
     2
    13(function($){
    2         var inputs = {}, results = {}, ed,
     4        var inputs = {}, rivers = {}, ed, River, Query;
     5       
    36        wpLink = {
    47                timeToTriggerRiver: 150,
    58                minRiverAJAXDuration: 200,
     9                riverBottomThreshold: 5,
    610                lastSearch: '',
    7                 riverDefaults: function() {
    8                         return {
    9                                 page : 2,
    10                                 allLoaded: false,
    11                                 active: false
    12                         };
    13                 },
    1411                init : function() {
    1512                        inputs.dialog = $('#wp-link');
    1613                        // URL
     
    2017                        // Advanced Options
    2118                        inputs.openInNewTab = $('#link-target-checkbox');
    2219                        inputs.search = $('#search-field');
    23                         // Result lists
    24                         results.search = $('#search-results');
    25                         results.recent = $('#most-recent-results');
    26                         results.search.data('river', wpLink.riverDefaults() );
    27                         results.recent.data('river', wpLink.riverDefaults() );
    28                         results.group = $('.query-results', inputs.dialog);
     20                        // Build Rivers
     21                        rivers.search = new River( $('#search-results') );
     22                        rivers.recent = new River( $('#most-recent-results') );
     23                        rivers.elements = $('.query-results', inputs.dialog);
    2924
    3025                        // Bind event handlers
    3126                        $('#wp-link-update').click( wpLink.update );
    3227                        $('#wp-link-cancel').click( function() { tinyMCEPopup.close(); } );
    3328                       
    34                         results.group.delegate('li', 'click', wpLink.selectInternalLink )
    35                         results.group.scroll( wpLink.maybeLoadRiver );
     29                        rivers.elements.delegate('li', 'click', wpLink.selectInternalLink )
    3630                       
    3731                        inputs.search.keyup( wpLink.searchInternalLinks );
    3832                       
     
    5549                        }
    5650
    5751                        // Clear previously selected links
    58                         results.group.find('.selected').removeClass('selected');
     52                        rivers.elements.find('.selected').removeClass('selected');
    5953                        // Focus the URL field
    6054                        inputs.url.focus();
     55                        // Load the most recent results if this is the first time opening the panel.
     56                        if ( ! rivers.recent.ul.children().length )
     57                                rivers.recent.ajax();
    6158                },
    6259
    6360                update : function() {
     
    137134                        inputs.title.val( t.children('.item-title').text() );
    138135                },
    139136
    140                 maybeLoadRiver : function() {
    141                         var t = $(this),
    142                                 ul = t.children('ul'),
    143                                 river = t.data('river'),
    144                                 bottom = t.scrollTop() + t.height();
    145 
    146                         if ( bottom != ul.height() || river.active || river.allLoaded )
    147                                 return;
    148 
    149                         setTimeout(function() {
    150                                 var newTop = t.scrollTop(),
    151                                         newBottom = newTop + t.height(),
    152                                         waiting = t.find('.river-waiting');
    153 
    154                                 if ( bottom != newBottom || newBottom != ul.height() || river.active || river.allLoaded )
    155                                         return;
    156 
    157                                 river.active = true;
    158                                 waiting.show();
    159                                 t.scrollTop( newTop + waiting.outerHeight() );
    160 
    161                                 wpLink.linkAJAX( t, { page : river.page }, function(r) {
    162                                         river.page++;
    163                                         river.active = false;
    164                                         river.allLoaded = !r;
    165                                         waiting.hide();
    166                                 }, {
    167                                         append : true,
    168                                         delay : wpLink.minRiverAJAXDuration
    169                                 });
    170                         }, wpLink.timeToTriggerRiver );
    171                 },
    172137                searchInternalLinks : function() {
    173138                        var t = $(this), waiting,
    174                                 title = t.val();
     139                                search = t.val();
    175140
    176                         if ( title.length > 2 ) {
    177                                 results.recent.hide();
    178                                 results.search.show();
     141                        if ( search.length > 2 ) {
     142                                rivers.recent.element.hide();
     143                                rivers.search.element.show();
    179144
    180145                                // Don't search if the keypress didn't change the title.
    181                                 if ( wpLink.lastSearch == title )
     146                                if ( wpLink.lastSearch == search )
    182147                                        return;
    183148
    184                                 wpLink.lastSearch = title;
     149                                wpLink.lastSearch = search;
    185150                                waiting = t.siblings('img.waiting').show();
    186151
    187                                 results.search.data('river', wpLink.riverDefaults() );
    188                                 results.search.scrollTop(0);
    189                                 wpLink.linkAJAX( results.search, { title : title }, function(){ waiting.hide(); });
     152                                rivers.search.change( search );
     153                                rivers.search.ajax( function(){ waiting.hide(); });
    190154                        } else {
    191                                 results.search.hide();
    192                                 results.recent.show();
     155                                rivers.search.element.hide();
     156                                rivers.recent.element.show();
    193157                        }
    194158                },
    195159
    196                 linkAJAX : function( $panel, params, callback, opts ) {
    197                         var response;
    198                         opts = opts || {};
     160                delayedCallback : function( func, delay ) {
     161                        var timeoutTriggered, funcTriggered, funcArgs, funcContext;
    199162
    200                         if ( ! $panel.hasClass('query-results') )
    201                                 $panel = $panel.parents('.query-results');
     163                        if ( ! delay )
     164                                return func;
    202165
    203                         if ( ! $panel.length )
    204                                 return;
     166                        setTimeout( function() {
     167                                if ( funcTriggered )
     168                                        return func.apply( funcContext, funcArgs );
     169                                // Otherwise, wait.
     170                                timeoutTriggered = true;
     171                        }, delay);
    205172
    206                         response = wpLink.delayedCallback( function( results ) {
    207                                 wpLink.processAJAXResponse( $panel, results, callback, opts );
    208                         }, opts.delay );
    209 
    210                         $.post( ajaxurl, $.extend({
    211                                 action : 'wp-link-ajax'
    212                         }, params ), response, "json" );
     173                        return function() {
     174                                if ( timeoutTriggered )
     175                                        return func.apply( this, arguments );
     176                                // Otherwise, wait.
     177                                funcArgs = arguments;
     178                                funcContext = this;
     179                                funcTriggered = true;
     180                        };
     181                }
     182        }
     183       
     184        River = function( element, search ) {
     185                var self = this;
     186                this.element = element;
     187                this.ul = element.children('ul');
     188                this.waiting = element.find('.river-waiting');
     189               
     190                this.change( search );
     191               
     192                element.scroll( function(){ self.maybeLoad(); });
     193        };
     194       
     195        $.extend( River.prototype, {
     196                ajax: function( callback ) {
     197                        var self = this,
     198                                delay = this.query.page == 1 ? 0 : wpLink.minRiverAJAXDuration,
     199                                response = wpLink.delayedCallback( function( results, params ) {
     200                                        self.process( results, params );
     201                                        if ( callback )
     202                                                callback( results, params );
     203                                }, delay );
     204                       
     205                        this.query.ajax( response );
    213206                },
     207                change: function( search ) {
     208                        if ( this.query && this._search == search )
     209                                return;
     210                       
     211                        this._search = search;
     212                        this.query = new Query( search );
     213                        this.element.scrollTop(0);
     214                },
     215                process: function( results, params ) {
     216                        var list = '', alt = true,
     217                                firstPage = params.page == 1;
    214218
    215                 processAJAXResponse: function( $panel, results, callback, opts ) {
    216                         var list = '', alt = true;
    217 
    218219                        if ( !results ) {
    219                                 if ( !opts.append ) {
     220                                if ( firstPage ) {
    220221                                        list += '<li class="unselectable"><span class="item-title"><em>'
    221222                                        + wpLinkL10n.noMatchesFound
    222223                                        + '</em></span></li>';
     
    232233                                });
    233234                        }
    234235
    235                         // Set results
    236                         $panel.children('ul')[ opts.append ? 'append' : 'html' ]( list );
    237 
    238                         // Run callback
    239                         if ( callback )
    240                                 callback( results );
     236                        this.ul[ firstPage ? 'html' : 'append' ]( list );
    241237                },
     238                maybeLoad: function() {
     239                        var self = this,
     240                                el = this.element,
     241                                bottom = el.scrollTop() + el.height();
    242242
    243                 delayedCallback : function( func, delay ) {
    244                         var timeoutTriggered, funcTriggered, funcArgs, funcContext;
     243                        if ( ! this.query.ready() || bottom < this.ul.height() - wpLink.riverBottomThreshold )
     244                                return;
    245245
    246                         if ( ! delay )
    247                                 return func;
     246                        setTimeout(function() {
     247                                var newTop = el.scrollTop(),
     248                                        newBottom = newTop + el.height();
    248249
    249                         setTimeout( function() {
    250                                 if ( funcTriggered )
    251                                         return func.apply( funcContext, funcArgs );
    252                                 // Otherwise, wait.
    253                                 timeoutTriggered = true;
    254                         }, delay);
     250                                if ( ! self.query.ready() || newBottom < self.ul.height() - wpLink.riverBottomThreshold )
     251                                        return;
    255252
    256                         return function() {
    257                                 if ( timeoutTriggered )
    258                                         return func.apply( this, arguments );
    259                                 // Otherwise, wait.
    260                                 funcArgs = arguments;
    261                                 funcContext = this;
    262                                 funcTriggered = true;
    263                         };
     253                                self.waiting.show();
     254                                el.scrollTop( newTop + self.waiting.outerHeight() );
     255
     256                                self.ajax( function() { self.waiting.hide(); });
     257                        }, wpLink.timeToTriggerRiver );
    264258                }
    265         }
     259        });
     260       
     261        Query = function( search ) {
     262                this.page = 1;
     263                this.allLoaded = false;
     264                this.querying = false;
     265                this.search = search;
     266        };
     267       
     268        $.extend( Query.prototype, {
     269                ready: function() {
     270                        return !( this.querying || this.allLoaded );
     271                },
     272                ajax: function( callback ) {
     273                        var self = this,
     274                                query = {
     275                                        action : 'wp-link-ajax',
     276                                        page : this.page
     277                                };
    266278
     279                        if ( this.search )
     280                                query.search = this.search;
     281
     282                        this.querying = true;
     283                       
     284                        $.post( ajaxurl, query, function(r) {
     285                                self.page++;
     286                                self.querying = false;
     287                                self.allLoaded = !r;
     288                                callback( r, query );
     289                        }, "json" );
     290                }
     291        });
     292
    267293        $(document).ready( wpLink.init );
    268294})(jQuery);
     295 No newline at end of file
  • wp-admin/admin-ajax.php

     
    10781078
    10791079        $args = array();
    10801080
    1081         if ( isset( $_POST['title'] ) )
    1082                 $args['s'] = stripslashes( $_POST['title'] );
     1081        if ( isset( $_POST['search'] ) )
     1082                $args['s'] = stripslashes( $_POST['search'] );
    10831083        $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1;
    10841084
    10851085        $results = wp_link_query( $args );
  • wp-admin/includes/internal-linking.php

     
    9494                        </label>
    9595                </div>
    9696                <div id="search-results" class="query-results">
    97                         <ul>
    98                                 <li class="loading-results unselectable"><em><?php _e( 'Loading...' ); ?></em></li>
    99                         </ul>
     97                        <ul></ul>
    10098                        <div class="river-waiting">
    10199                                <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
    102100                        </div>
    103101                </div>
    104                 <?php $most_recent = wp_link_query(); ?>
    105102                <div id="most-recent-results" class="query-results">
    106                         <ul>
    107                                 <li class="unselectable"><em><?php _e( 'No search term specified. Showing recent items.' ); ?></em></li>
    108                                 <?php
    109                                 $alt = true;
    110                                 foreach ( $most_recent as $item ) : ?>
    111                                         <li<?php if ( $alt ) echo ' class="alternate"'; ?>>
    112                                                 <input type="hidden" class="item-permalink" value="<?php echo esc_url( $item['permalink'] ); ?>" />
    113                                                 <span class="item-title"><?php echo $item['title']; ?></span>
    114                                                 <span class="item-info"><?php echo esc_html( $item['info'] ); ?></span>
    115                                         </li>
    116                                 <?php
    117                                 $alt = ! $alt;
    118                                 endforeach; ?>
    119                         </ul>
     103                        <div class="query-notice"><em><?php _e( 'No search term specified. Showing recent items.' ); ?></em></div>
     104                        <ul></ul>
    120105                        <div class="river-waiting">
    121106                                <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
    122107                        </div>