added a screening page for external links. removed forced target = _blank on external links for UX consideration

used http://www.deviantart.com/users/outgoing?http://www.nodebb.org/ for
inspiration
v1.18.x
psychobunny 12 years ago
parent d9fa78a866
commit e66cab23cf

@ -70,7 +70,7 @@ if (!nconf.get('setup') && nconf.get('base_url')) {
config['ROOT_DIRECTORY'] = __dirname; config['ROOT_DIRECTORY'] = __dirname;
templates.init([ templates.init([
'header', 'footer', 'logout', 'admin/header', 'admin/footer', 'admin/index', 'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis', 'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis',

@ -0,0 +1,11 @@
<div class="hero-unit">
<h2 class="form-signin-heading">Now Leaving NodeBB</h2>
<p>
You are now leaving NodeBB.
</p>
<br />
<p>
<button class="btn btn-large" type="button" onclick="window.location='{url}'">Continue to {url}</button>
<button class="btn btn-large btn-inverse" type="button" onclick="history.go(-1); window.location='{home}'">Return to NodeBB</button>
</p>
</div>

@ -148,9 +148,19 @@ var RDB = require('./redis.js'),
if (md.length > 0) { if (md.length > 0) {
var parsedContentDOM = cheerio.load(marked(md)); var parsedContentDOM = cheerio.load(marked(md));
parsedContentDOM('a').attr('rel', 'nofollow').attr('target', '_blank'); parsedContentDOM('a').attr('rel', 'nofollow');
var href = parsedContentDOM('a').attr('href'),
domain = global.nconf.get('url');
if (href && !href.match(domain)) {
parsedContentDOM('a').attr('href', domain + 'outgoing?' + href);
}
html = parsedContentDOM.html(); html = parsedContentDOM.html();
} else html = '<p></p>'; } else {
html = '<p></p>';
}
return html; return html;
} }

@ -278,6 +278,20 @@ var express = require('express'),
}); });
}); });
app.get('/outgoing', function(req, res) {
var url = req.url.split('?');
if (url[1]) {
res.send(app.build_header(res) + templates['outgoing'].parse({
url: url[1],
home: global.nconf.get('url')
}) + templates['footer']);
} else {
res.status(404);
res.redirect(global.nconf.get('relative_path') + '/404');
}
});
}); });
// These functions are called via ajax once the initial page is loaded to populate templates with data // These functions are called via ajax once the initial page is loaded to populate templates with data

Loading…
Cancel
Save