Make WordPress Core

Ticket #26543: 26543-wp-backbone.diff

File 26543-wp-backbone.diff, 1.8 KB (added by matveb, 11 years ago)
  • wp-includes/js/wp-backbone.js

     
    381381
    382382                ready: function() {}
    383383        });
     384
     385        // Backbone.History.prototype
     386        // --------------------------
     387        //
     388        // Extends Backbone.History to support urls with GET queries in WordPress
     389        // Supports basic form ?param=value passing 'paramvalue' as the fragment
     390        _.extend( Backbone.History.prototype, {
     391
     392                // Keep original fragment resolver available
     393                originalFragment: Backbone.History.prototype.getFragment,
     394
     395                // ### Get the fragment
     396                //
     397                // If history constructor includes 'queryUri' param
     398                // Use our own getFragment resolver to handle the location changes
     399                //
     400                // Appends 'location.search' to pathname in order to deal with
     401                // query variables present in URI
     402                //
     403                // Returns fragment '?paramvalue'
     404                getFragment: function( fragment, forcePushState ) {
     405                        var root;
     406
     407                        // If queryUri is not set via Backbone.history.start
     408                        // return the original fragment handler
     409                        if ( ! Backbone.history.options.queryUri ) {
     410                                return this.originalFragment.apply( this, arguments );
     411                        }
     412
     413                        // If we got this far, parse this.location.search
     414                        // since we have a URL with query vars
     415                        if ( fragment == null ) {
     416                                if ( this._hasPushState || ! this._wantsHashChange || forcePushState ) {
     417
     418                                        // Constructs fragment attaching the query parameters
     419                                        fragment = this.location.pathname + this.location.search;
     420                                        root = this.root.replace( /\/$/, '' );
     421
     422                                        if ( ! fragment.indexOf( root ) ) {
     423                                                fragment = fragment.slice( root.length );
     424                                        }
     425
     426                                } else {
     427                                        fragment = this.getHash();
     428                                }
     429                        }
     430
     431                        return fragment.replace(/^\/+|\/+$/g, '');
     432                }
     433        });
     434
    384435}(jQuery));