Changeset 43021 in spip-zone for _squelettes_/mobi.spip


Ignore:
Timestamp:
Dec 19, 2010, 8:51:48 PM (9 years ago)
Author:
cedric@…
Message:

r42858 was not enough in order to take in account base element in loaded or initial page.
We have so store it in variable in case of browser not allow to change it dynamically,
and also to store it in page loaded in order to be able to retrieve it when re-displaying from memory (back navigation)

More over, finding base element in loaded page needs Regexp as it is lost when page injected in <div></div> in Safari.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _squelettes_/mobi.spip/mobile/js/jquery.mobile.js

    r42858 r43021  
    29832983
    29842984                //define baseUrl for use in relative url management
    2985                 baseUrl = getPathDir( location.protocol + '//' + location.host + location.pathname ),
     2985                baseUrl = $('base',$head).length ? $('base',$head).attr('href') : getPathDir( location.protocol + '//' + location.host + location.pathname ),
    29862986
    29872987                //define base element, for use in routing asset urls that are referenced in Ajax-requested markup
    2988                 $base = $.support.dynamicBaseTag ? $("<base>", { href: baseUrl }).prependTo( $head ) : undefined,
     2988                $base = $.support.dynamicBaseTag ? ( $('base',$head).length ? $('base',$head) : $("<base>", { href: baseUrl }).prependTo( $head ) ) : undefined,
    29892989
    29902990                //will be defined as first page element in DOM
     
    30503050        }
    30513051
     3052        var dynamiqueBaseUrl = '';
    30523053        function getBaseURL( nonHashPath ){
    3053                 return getPathDir( nonHashPath || location.hash );
     3054                if (nonHashPath)
     3055                        nonHashPath = nonHashPath.replace( location.protocol + "//" + location.host, "");
     3056                return getPathDir( nonHashPath || dynamiqueBaseUrl || location.hash );
    30543057        }
    30553058
    3056         var setBaseURL = !$.support.dynamicBaseTag ? $.noop : function( nonHashPath ){
    3057                 //set base url for new page assets
    3058                 $base.attr('href', baseUrl + getBaseURL( nonHashPath ));
     3059        var setBaseURL = function( nonHashPath ){
     3060                dynamiqueBaseUrl = nonHashPath.replace( location.protocol + "//" + location.host, "");
     3061                if ($.support.dynamicBaseTag)
     3062                        //set base url for new page assets
     3063                        $base.attr('href', baseUrl + getBaseURL( nonHashPath ));
    30593064        }
    30603065
    3061         var resetBaseURL = !$.support.dynamicBaseTag ? $.noop : function(){
    3062                 $base.attr('href', baseUrl);
     3066        var resetBaseURL = function(){
     3067                dynamiqueBaseUrl = baseUrl.replace( location.protocol + "//" + location.host, "");
     3068                if ($.support.dynamicBaseTag)
     3069                        $base.attr('href', baseUrl);
    30633070        }
    30643071
     
    33293336                // find the "to" page, either locally existing in the dom or by creating it through ajax
    33303337                if ( to.length && !isFormRequest ) {
    3331                         if( fileUrl ){
    3332                                 setBaseURL(fileUrl);
     3338                        var base = to.attr('data-base') || fileUrl;
     3339                        if( base ){
     3340                                setBaseURL(base);
    33333341                        }
    33343342                        enhancePage();
     
    33523360                                        all.get(0).innerHTML = html;
    33533361                                        var base = all.find('base');
    3354                                         base = ((base.length?base.attr('href'):'') || fileUrl);
     3362                                        if (base.length)
     3363                                                base = base.attr('href');
     3364                                        else
     3365                                                // workaround : safari deletes head section when injecting in <div></div>
     3366                                                if (base=html.match(/<base [^>]*href=["']([^"']+)["']/i))
     3367                                                        base = base[1];
     3368                                        base = (base || fileUrl);
    33553369                                        setBaseURL(base);
    33563370                                        to = all.find('[data-role="page"]');
     
    33713385                                                });
    33723386                                        }
     3387
     3388                                        to.attr('data-base',base);
    33733389
    33743390                                        //preserve ID on a retrieved page
Note: See TracChangeset for help on using the changeset viewer.