path.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. window.Tracker = window.Tracker || {};
  2. Tracker.Path = function(){
  3. var protocolRegx, absoluteRegx, rootRegx, doubleDotRegx, singleDotRegx;
  4. protocolRegx = /^\w+:\/\//;
  5. absoluteRegx = /^\//;
  6. rootRegx = /^(\w*:?\/?\/?)([\w.]+)(\/)/;
  7. doubleDotRegx = /\/[^\/\.]+\/\.\.\//;
  8. singleDotRegx = /\/\.\//;
  9. return {
  10. getBase: function( document ){
  11. var base, url;
  12. base = document.querySelector( "base[href]" );
  13. if( base )
  14. url = base.href;
  15. else
  16. url = document.URL;
  17. url = url.split( /[?#]/ )[ 0 ];
  18. return url.slice( 0, url.lastIndexOf( "/" ) + 1 );
  19. },
  20. merge: function( base, url ){
  21. if( url.indexOf( "//" ) === 0 )
  22. return pageBaseProtocol + ":" + url;
  23. if( protocolRegx.test( url ) )
  24. return url;
  25. if( absoluteRegx.test( url ) ){
  26. if( rootRegx.test( base ) )
  27. url = RegExp.$1 + RegExp.$2 + url;
  28. else
  29. return url;
  30. }else{
  31. url = base + url;
  32. }
  33. while( doubleDotRegx.test( url ) )
  34. url = url.replace( doubleDotRegx, "/" );
  35. while( singleDotRegx.test( url ) )
  36. url = url.replace( singleDotRegx, "/" );
  37. return url;
  38. }
  39. }
  40. }();