March 6, 2014
No Comments
Stupid little javascript workaround for when you are too lazy to do it in the html. Pretty fast, saves pain.
requires this little function:
function strripos(haystack, needle, offset) {
// discuss at: http://phpjs.org/functions/strripos/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// bugfixed by: Onno Marsman
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// input by: saulius
// example 1: strripos('Kevin van Zonneveld', 'E');
// returns 1: 16
haystack = (haystack + '')
.toLowerCase();
needle = (needle + '')
.toLowerCase();
var i = -1;
if (offset) {
i = (haystack + '')
.slice(offset)
.lastIndexOf(needle); // strrpos' offset indicates starting point of range till end,
// while lastIndexOf's optional 2nd argument indicates ending point of range from the beginning
if (i !== -1) {
i += offset;
}
} else {
i = (haystack + '')
.lastIndexOf(needle);
}
return i >= 0 ? i : false;
}
and the jQuery bit:
jQuery(document).ready(function($) {
// add target="_blank" to all *external*
//create array of all *internal* urls that should NOT go to a separate window
var internal_urls = Array('domain.tld','127.0.0.1','domain.tld');
$('a').attr('target',function(){
var url = $(this).attr('href');
var target = $(this).attr('target');
if(url == '#' || strripos(url,'http',0)===false){
return '_self';
} else {
var i=0;
while (internal_urls[i]){
if(strripos(url, internal_urls[i], 0)){
return target;
}
i++;
}
return '_blank';
}
});
});