Ticket #11420: api.cleanup.diff

File api.cleanup.diff, 11.0 KB (added by koopersmith, 3 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>