From e5647d641cc4afca02e6a17dc360ed4a25e7ea3f Mon Sep 17 00:00:00 2001 From: umbrae Date: Sat, 21 Feb 2015 01:58:03 -0800 Subject: [PATCH] Embeds: use our session-appending redirector to track link clicks --- r2/example.ini | 1 + r2/r2/lib/embeds.py | 1 + r2/r2/public/static/js/embed/embed.js | 22 ++++++++++++++++------ r2/r2/public/static/js/embed/utils.js | 13 +++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/r2/example.ini b/r2/example.ini index 56be76605..6679500af 100644 --- a/r2/example.ini +++ b/r2/example.ini @@ -124,6 +124,7 @@ adtracker_url = /pixel/of_doom.png adframetracker_url = /pixel/of_defenestration.png # redirector to bounce clicks off of on sponsored links for tracking clicktracker_url = /click +event_clicktracker_url = /event_click # url to request to track interaction statistics uitracker_url = /pixel/of_discovery.png # embeds pixel tracking url diff --git a/r2/r2/lib/embeds.py b/r2/r2/lib/embeds.py index 0a4613713..9af0c6ccb 100644 --- a/r2/r2/lib/embeds.py +++ b/r2/r2/lib/embeds.py @@ -80,6 +80,7 @@ def set_up_embed(embed_key, sr, thing, showedits): c.embed_config = { "eventtracker_url": g.eventtracker_url or "", "anon_eventtracker_url": g.anon_eventtracker_url or "", + "event_clicktracker_url": g.event_clicktracker_url or "", "created": iso_timestamp, "showedits": showedits, "thing": { diff --git a/r2/r2/public/static/js/embed/embed.js b/r2/r2/public/static/js/embed/embed.js index cb97e181e..386953fb0 100644 --- a/r2/r2/public/static/js/embed/embed.js +++ b/r2/r2/public/static/js/embed/embed.js @@ -73,18 +73,28 @@ var base = document.getElementsByTagName('base'); var target = el.target || (base && base[0] && base[0].target); var newTab = target === '_blank'; - var payload = { + var payload = createPayload(type, 'click', { 'redirect_url': el.href, 'redirect_type': el.getAttribute('data-redirect-type'), 'redirect_dest': el.host, 'redirect_thing_id': el.getAttribute('data-redirect-thing'), + }); + var redirectParams = { + "data": JSON.stringify(payload), + "url": el.href, }; - tracker.send(createPayload(type, 'click', payload), function() { - if (!newTab) { - window.top.location.href = el.href; - } - }); + // Use a DOM object for easier query manipulation + var tmpLink = document.createElement('a') + tmpLink.href = config.event_clicktracker_url; + tmpLink.search = '?' + App.utils.serialize(redirectParams); + + // Rewrite our URL to our event-driven URL + el.href = tmpLink.href; + + if (!newTab) { + window.top.location.href = el.href; + } return newTab; } diff --git a/r2/r2/public/static/js/embed/utils.js b/r2/r2/public/static/js/embed/utils.js index 84e1e2e7b..82e79745c 100644 --- a/r2/r2/public/static/js/embed/utils.js +++ b/r2/r2/public/static/js/embed/utils.js @@ -51,4 +51,17 @@ return uuid; }; + // Given an object, serialize it into a set of urlencoded query parameters + App.utils.serialize = function(obj) { + var params = []; + + for (var p in obj) { + if (obj.hasOwnProperty(p)) { + params.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p])); + } + } + + return params.join('&'); + } + })((window.rembeddit = window.rembeddit || {}), this);