| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | // $Id: extlink.js,v 1.8 2010/05/26 01:25:56 quicksketch Exp $(function ($) {function extlinkAttach(context) {  // Strip the host name down, removing ports, subdomains, or www.  var pattern = /^(([^\/:]+?\.)*)([^\.:]{4,})((\.[a-z]{1,4})*)(:[0-9]{1,5})?$/;  var host = window.location.host.replace(pattern, '$3$4');  var subdomain = window.location.host.replace(pattern, '$1');  // Determine what subdomains are considered internal.  if (Drupal.settings.extlink.extSubdomains) {    var subdomains = "([^/]*\\.)?";  }  else if (subdomain == 'www.' || subdomain == '') {    var subdomains = "(www\\.)?";  }  else {    var subdomains = subdomain.replace(".", "\\.");  }  // Build regular expressions that define an internal link.  var internal_link = new RegExp("^https?://" + subdomains + host, "i");  // Extra internal link matching.  var extInclude = false;  if (Drupal.settings.extlink.extInclude) {    extInclude = new RegExp(Drupal.settings.extlink.extInclude.replace(/\\/, '\\'));  }  // Extra external link matching.  var extExclude = false;  if (Drupal.settings.extlink.extExclude) {    extExclude = new RegExp(Drupal.settings.extlink.extExclude.replace(/\\/, '\\'));  }  // Find all links which are NOT internal and begin with http (as opposed  // to ftp://, javascript:, etc. other kinds of links.  // When operating on the 'this' variable, the host has been appended to  // all links by the browser, even local ones.  // In jQuery 1.1 and higher, we'd use a filter method here, but it is not  // available in jQuery 1.0 (Drupal 5 default).  var external_links = new Array();  var mailto_links = new Array();  $("a:not(." + Drupal.settings.extlink.extClass + ", ." + Drupal.settings.extlink.mailtoClass + ")", context).each(function(el) {    try {      var url = this.href.toLowerCase();      if (url.indexOf('http') == 0 && (!url.match(internal_link) || (extInclude && url.match(extInclude))) && !(extExclude && url.match(extExclude))) {        external_links.push(this);      }      else if (url.indexOf('mailto:') == 0) {        mailto_links.push(this);      }    }    // IE7 throws errors often when dealing with irregular links, such as:    // <a href="node/10"></a> Empty tags.    // <a href="http://user:pass@example.com">example</a> User:pass syntax.    catch(error) {      return false;    }  });  if (Drupal.settings.extlink.extClass) {    // Apply the "ext" class to all links not containing images.    if (parseFloat($().jquery) < 1.2) {      $(external_links).not('[img]').addClass(Drupal.settings.extlink.extClass).each(function() { if ($(this).css('display') == 'inline') $(this).after('<span class=' + Drupal.settings.extlink.extClass + '></span>'); });    }    else {      $(external_links).not($(external_links).find('img').parents('a')).addClass(Drupal.settings.extlink.extClass).each(function() { if ($(this).css('display') == 'inline') $(this).after('<span class=' + Drupal.settings.extlink.extClass + '></span>'); });    }  }  if (Drupal.settings.extlink.mailtoClass) {    // Apply the "mailto" class to all mailto links not containing images.    if (parseFloat($().jquery) < 1.2) {      $(mailto_links).not('[img]').addClass(Drupal.settings.extlink.mailtoClass).each(function() { if ($(this).css('display') == 'inline') $(this).after('<span class=' + Drupal.settings.extlink.mailtoClass + '></span>'); });    }    else {      $(mailto_links).not($(mailto_links).find('img').parents('a')).addClass(Drupal.settings.extlink.mailtoClass).each(function() { if ($(this).css('display') == 'inline') $(this).after('<span class=' + Drupal.settings.extlink.mailtoClass + '></span>'); });    }  }  if (Drupal.settings.extlink.extTarget) {    // Apply the target attribute to all links.    $(external_links).attr('target', Drupal.settings.extlink.extTarget);  }  if (Drupal.settings.extlink.extAlert) {    // Add pop-up click-through dialog.    $(external_links).click(function(e) {     return confirm(Drupal.settings.extlink.extAlertText);    });  }  // Work around for Internet Explorer box model problems.  if (($.support && !($.support.boxModel === undefined) && !$.support.boxModel) || ($.browser.msie && parseInt($.browser.version) <= 7)) {    $('span.ext, span.mailto').css('display', 'inline-block');  }}Drupal.behaviors.extlink = {  attach: function(context){    extlinkAttach(context);  }}})(jQuery);
 |