mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 07:38:01 +08:00
FIX: Allow click tracking to work with different origins
This commit is contained in:
parent
4f6283ba56
commit
71aed34e64
|
@ -85,7 +85,7 @@ Discourse.ClickTrack = {
|
|||
}
|
||||
|
||||
// If we're on the same site, use the router and track via AJAX
|
||||
if ((href.indexOf(Discourse.URL.origin()) === 0) && !href.match(/\/uploads\//i)) {
|
||||
if (Discourse.URL.isInternal(href) && !href.match(/\/uploads\//i)) {
|
||||
Discourse.ajax("/clicks/track", {
|
||||
data: {
|
||||
url: href,
|
||||
|
|
|
@ -89,6 +89,23 @@ Discourse.URL = Em.Object.createWithMixins({
|
|||
window.location = Discourse.getURL(url);
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines whether a URL is internal or not
|
||||
*
|
||||
* @method isInternal
|
||||
* @param {String} url
|
||||
**/
|
||||
isInternal: function(url) {
|
||||
if (url && url.length) {
|
||||
if (url.indexOf('/') === 0) { return true; }
|
||||
if (url.indexOf(this.origin()) === 0) { return true; }
|
||||
if (url.replace(/^http[^s]/, 'https').indexOf(this.origin()) === 0) { return true; }
|
||||
if (url.replace(/^https/, 'http').indexOf(this.origin()) === 0) { return true; }
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
@private
|
||||
|
||||
|
|
|
@ -1,5 +1,20 @@
|
|||
module("Discourse.URL");
|
||||
|
||||
test("isInternal with a HTTP url", function() {
|
||||
this.stub(Discourse.URL, "origin").returns("http://eviltrout.com");
|
||||
|
||||
ok(!Discourse.URL.isInternal(null), "a blank URL is not internal");
|
||||
ok(Discourse.URL.isInternal("/test"), "relative URLs are internal");
|
||||
ok(Discourse.URL.isInternal("http://eviltrout.com/tophat"), "a url on the same host is internal");
|
||||
ok(Discourse.URL.isInternal("https://eviltrout.com/moustache"), "a url on a HTTPS of the same host is internal");
|
||||
ok(!Discourse.URL.isInternal("http://twitter.com"), "a different host is not internal");
|
||||
});
|
||||
|
||||
test("isInternal with a HTTPS url", function() {
|
||||
this.stub(Discourse.URL, "origin").returns("https://eviltrout.com");
|
||||
ok(Discourse.URL.isInternal("http://eviltrout.com/monocle"), "HTTPS urls match HTTP urls");
|
||||
});
|
||||
|
||||
test("navigatedToHome", function() {
|
||||
var fakeListController = { refresh: function() { return true; } };
|
||||
var mock = sinon.mock(fakeListController);
|
||||
|
|
Loading…
Reference in New Issue
Block a user