You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
var Backbone = require('backbone');
|
|
var $ = require('jquery');
|
|
var StatusModel = require('../System/StatusModel');
|
|
|
|
//This module will automatically route all relative links through backbone router rather than
|
|
//causing links to reload pages.
|
|
|
|
var routeBinder = {
|
|
|
|
bind : function() {
|
|
var self = this;
|
|
$(document).on('click contextmenu', 'a[href]', function(event) {
|
|
self._handleClick(event);
|
|
});
|
|
},
|
|
|
|
_handleClick : function(event) {
|
|
var $target = $(event.target);
|
|
|
|
//check if tab nav
|
|
if ($target.parents('.nav-tabs').length) {
|
|
return;
|
|
}
|
|
|
|
var linkElement = $target.closest('a').first();
|
|
var href = linkElement.attr('href');
|
|
|
|
if (href && href.startsWith('http')) {
|
|
// Set noreferrer for external links.
|
|
if (!linkElement.attr('rel')) {
|
|
linkElement.attr('rel', 'noreferrer');
|
|
}
|
|
// Open all external links in new windows.
|
|
if (!linkElement.attr('target')) {
|
|
linkElement.attr('target', '_blank');
|
|
}
|
|
}
|
|
|
|
if (linkElement.hasClass('no-router') || event.type !== 'click') {
|
|
return;
|
|
}
|
|
|
|
if (!href) {
|
|
throw 'couldn\'t find route target';
|
|
}
|
|
|
|
if (!href.startsWith('http')) {
|
|
event.preventDefault();
|
|
|
|
if (event.ctrlKey) {
|
|
window.open(href, '_blank');
|
|
}
|
|
|
|
else {
|
|
var relativeHref = href.replace(StatusModel.get('urlBase'), '');
|
|
|
|
Backbone.history.navigate(relativeHref, { trigger : true });
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = routeBinder; |