mirror of
https://github.com/discourse/discourse.git
synced 2025-06-02 04:08:41 +08:00
FIX: Allow click tracking to work with different origins
This commit is contained in:
@ -85,7 +85,7 @@ Discourse.ClickTrack = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we're on the same site, use the router and track via AJAX
|
// 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", {
|
Discourse.ajax("/clicks/track", {
|
||||||
data: {
|
data: {
|
||||||
url: href,
|
url: href,
|
||||||
|
@ -89,6 +89,23 @@ Discourse.URL = Em.Object.createWithMixins({
|
|||||||
window.location = Discourse.getURL(url);
|
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
|
@private
|
||||||
|
|
||||||
|
@ -1,5 +1,20 @@
|
|||||||
module("Discourse.URL");
|
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() {
|
test("navigatedToHome", function() {
|
||||||
var fakeListController = { refresh: function() { return true; } };
|
var fakeListController = { refresh: function() { return true; } };
|
||||||
var mock = sinon.mock(fakeListController);
|
var mock = sinon.mock(fakeListController);
|
||||||
|
Reference in New Issue
Block a user