diff options
Diffstat (limited to 'plugins/CoreAdminHome/templates/jsTrackingGenerator.js')
-rw-r--r-- | plugins/CoreAdminHome/templates/jsTrackingGenerator.js | 661 |
1 files changed, 315 insertions, 346 deletions
diff --git a/plugins/CoreAdminHome/templates/jsTrackingGenerator.js b/plugins/CoreAdminHome/templates/jsTrackingGenerator.js index 10080fd814..d94a037356 100644 --- a/plugins/CoreAdminHome/templates/jsTrackingGenerator.js +++ b/plugins/CoreAdminHome/templates/jsTrackingGenerator.js @@ -5,228 +5,204 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -(function($) { - -$(document).ready(function() { - - var piwikHost = window.location.host, - piwikPath = location.pathname.substring(0, location.pathname.lastIndexOf('/')); - - // - // utility methods - // - - // returns JavaScript code for tracking custom variables based on an array of - // custom variable name-value pairs (so an array of 2-element arrays) and - // a scope (either 'visit' or 'page') - var getCustomVariableJS = function(customVariables, scope) - { - var result = ''; - for (var i = 0; i != 5; ++i) - { - if (customVariables[i]) - { - var key = customVariables[i][0], - value = customVariables[i][1]; - result += ' _paq.push(["setCustomVariable", ' + (i + 1) + ', ' + JSON.stringify(key) + ', ' - + JSON.stringify(value) + ', ' + JSON.stringify(scope) + ']);\n'; - } - } - return result; - }; - - // gets the list of custom variables entered by the user in a custom variable - // section - var getCustomVariables = function (sectionId) - { - var customVariableNames = $('.custom-variable-name', '#' + sectionId), - customVariableValues = $('.custom-variable-value', '#' + sectionId); - - var result = []; - if ($('.section-toggler-link', '#' + sectionId).is(':checked')) - { - for (var i = 0; i != customVariableNames.length; ++i) - { - var name = $(customVariableNames[i]).val(); - - result[i] = null; - if (name) - { - result[i] = [name, $(customVariableValues[i]).val()]; - } - } - } - return result; - }; - - // quickly gets the host + port from a url - var getHostNameFromUrl = function(url) - { - var element = $('<a></a>')[0]; - element.href = url; - return element.hostname; - }; - - // get preloaded server-side data necessary for code generation - var dataElement = $('#js-tracking-generator-data'), - currencySymbols = JSON.parse(dataElement.attr('data-currencies')), - siteUrls = {}, - siteCurrencies = {}, - allGoals = {}, - noneText = $('#image-tracker-goal>option').text(); - - // queries Piwik for needed site info for one site - var getSiteData = function (idSite, sectionSelect, callback) - { - // if data is already loaded, don't do an AJAX request - if (siteUrls[idSite] - && siteCurrencies[idSite] - && typeof allGoals[idSite] !== 'undefined') - { - callback(); - return; - } - - // disable section - $(sectionSelect).find('input,select,textarea').attr('disabled', 'disabled'); - - var ajaxRequest = new ajaxHelper(); - ajaxRequest.setBulkRequests( - // get site info (for currency) - { - module: 'API', - method: 'SitesManager.getSiteFromId', - idSite: idSite - }, - - // get site urls - { - module: 'API', - method: 'SitesManager.getSiteUrlsFromId', - idSite: idSite - }, - - // get site goals - { - module: 'API', - method: 'Goals.getGoals', - idSite: idSite - } - ); - ajaxRequest.setCallback(function (data) { - for (var i = 0; i != data.length; ++i) - { - data[i] = JSON.parse(data[i]); - } - - // set data - var currency = data[0][0].currency || ''; - siteCurrencies[idSite] = currencySymbols[currency.toUpperCase()]; - siteUrls[idSite] = data[1] || []; - allGoals[idSite] = data[2] || []; - - // re-enable controls - $(sectionSelect).find('input,select,textarea').removeAttr('disabled'); - - callback(); - }); - ajaxRequest.setFormat('json'); - ajaxRequest.send(false); - }; - - // resets the select options of a goal select using a site ID - var resetGoalSelectItems = function (idsite, id) - { - var selectElement = $('#' + id).html(''); - - selectElement.append($('<option value=""></option>').text(noneText)); - - var goals = allGoals[idsite] || []; - for (var key in goals) - { - var goal = goals[key]; - selectElement.append($('<option/>').attr('value', goal.idgoal).text(goal.name)); - } - - // set currency string - $('#' + id).parent().find('.currency').text(siteCurrencies[idsite]); - }; - - // function that generates JS code - var generateJsCode = function() - { - // get data - var idSite = $('#js-tracker-website .custom_select_main_link').attr('siteid'), - groupPageTitlesByDomain = $('#javascript-tracking-group-by-domain').is(':checked'), - mergeSubdomains = $('#javascript-tracking-all-subdomains').is(':checked'), - mergeAliasUrls = $('#javascript-tracking-all-aliases').is(':checked'), - visitorCustomVariables = getCustomVariables('javascript-tracking-visitor-cv'), - pageCustomVariables = getCustomVariables('javascript-tracking-page-cv'), - customCampaignNameQueryParam = null, - customCampaignKeywordParam = null, - doNotTrack = $('#javascript-tracking-do-not-track').is(':checked'); - - if ($('#custom-campaign-query-params-check').is(':checked')) - { - customCampaignNameQueryParam = $('#custom-campaign-name-query-param').val(); - customCampaignKeywordParam = $('#custom-campaign-keyword-query-param').val(); - } - - // generate JS - var result = '<!-- Piwik -->\n\ +(function ($) { + + $(document).ready(function () { + + var piwikHost = window.location.host, + piwikPath = location.pathname.substring(0, location.pathname.lastIndexOf('/')); + + // + // utility methods + // + + // returns JavaScript code for tracking custom variables based on an array of + // custom variable name-value pairs (so an array of 2-element arrays) and + // a scope (either 'visit' or 'page') + var getCustomVariableJS = function (customVariables, scope) { + var result = ''; + for (var i = 0; i != 5; ++i) { + if (customVariables[i]) { + var key = customVariables[i][0], + value = customVariables[i][1]; + result += ' _paq.push(["setCustomVariable", ' + (i + 1) + ', ' + JSON.stringify(key) + ', ' + + JSON.stringify(value) + ', ' + JSON.stringify(scope) + ']);\n'; + } + } + return result; + }; + + // gets the list of custom variables entered by the user in a custom variable + // section + var getCustomVariables = function (sectionId) { + var customVariableNames = $('.custom-variable-name', '#' + sectionId), + customVariableValues = $('.custom-variable-value', '#' + sectionId); + + var result = []; + if ($('.section-toggler-link', '#' + sectionId).is(':checked')) { + for (var i = 0; i != customVariableNames.length; ++i) { + var name = $(customVariableNames[i]).val(); + + result[i] = null; + if (name) { + result[i] = [name, $(customVariableValues[i]).val()]; + } + } + } + return result; + }; + + // quickly gets the host + port from a url + var getHostNameFromUrl = function (url) { + var element = $('<a></a>')[0]; + element.href = url; + return element.hostname; + }; + + // get preloaded server-side data necessary for code generation + var dataElement = $('#js-tracking-generator-data'), + currencySymbols = JSON.parse(dataElement.attr('data-currencies')), + siteUrls = {}, + siteCurrencies = {}, + allGoals = {}, + noneText = $('#image-tracker-goal>option').text(); + + // queries Piwik for needed site info for one site + var getSiteData = function (idSite, sectionSelect, callback) { + // if data is already loaded, don't do an AJAX request + if (siteUrls[idSite] + && siteCurrencies[idSite] + && typeof allGoals[idSite] !== 'undefined') { + callback(); + return; + } + + // disable section + $(sectionSelect).find('input,select,textarea').attr('disabled', 'disabled'); + + var ajaxRequest = new ajaxHelper(); + ajaxRequest.setBulkRequests( + // get site info (for currency) + { + module: 'API', + method: 'SitesManager.getSiteFromId', + idSite: idSite + }, + + // get site urls + { + module: 'API', + method: 'SitesManager.getSiteUrlsFromId', + idSite: idSite + }, + + // get site goals + { + module: 'API', + method: 'Goals.getGoals', + idSite: idSite + } + ); + ajaxRequest.setCallback(function (data) { + for (var i = 0; i != data.length; ++i) { + data[i] = JSON.parse(data[i]); + } + + // set data + var currency = data[0][0].currency || ''; + siteCurrencies[idSite] = currencySymbols[currency.toUpperCase()]; + siteUrls[idSite] = data[1] || []; + allGoals[idSite] = data[2] || []; + + // re-enable controls + $(sectionSelect).find('input,select,textarea').removeAttr('disabled'); + + callback(); + }); + ajaxRequest.setFormat('json'); + ajaxRequest.send(false); + }; + + // resets the select options of a goal select using a site ID + var resetGoalSelectItems = function (idsite, id) { + var selectElement = $('#' + id).html(''); + + selectElement.append($('<option value=""></option>').text(noneText)); + + var goals = allGoals[idsite] || []; + for (var key in goals) { + var goal = goals[key]; + selectElement.append($('<option/>').attr('value', goal.idgoal).text(goal.name)); + } + + // set currency string + $('#' + id).parent().find('.currency').text(siteCurrencies[idsite]); + }; + + // function that generates JS code + var generateJsCode = function () { + // get data + var idSite = $('#js-tracker-website .custom_select_main_link').attr('siteid'), + groupPageTitlesByDomain = $('#javascript-tracking-group-by-domain').is(':checked'), + mergeSubdomains = $('#javascript-tracking-all-subdomains').is(':checked'), + mergeAliasUrls = $('#javascript-tracking-all-aliases').is(':checked'), + visitorCustomVariables = getCustomVariables('javascript-tracking-visitor-cv'), + pageCustomVariables = getCustomVariables('javascript-tracking-page-cv'), + customCampaignNameQueryParam = null, + customCampaignKeywordParam = null, + doNotTrack = $('#javascript-tracking-do-not-track').is(':checked'); + + if ($('#custom-campaign-query-params-check').is(':checked')) { + customCampaignNameQueryParam = $('#custom-campaign-name-query-param').val(); + customCampaignKeywordParam = $('#custom-campaign-keyword-query-param').val(); + } + + // generate JS + var result = '<!-- Piwik -->\n\ <script type="text/javascript">\n\ var _paq = _paq || [];\n'; - - if (groupPageTitlesByDomain) - { - result += ' _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);\n'; - } - - if (mergeSubdomains) - { - var mainHostAllSub = '*.' + getHostNameFromUrl(siteUrls[idSite][0]); - result += ' _paq.push(["setCookieDomain", ' + JSON.stringify(mainHostAllSub) + ']);\n'; - } - - if (mergeAliasUrls) - { - var siteHosts = []; - for (var i = 0; i != siteUrls[idSite].length; ++i) - { - siteHosts[i] = '*.' + getHostNameFromUrl(siteUrls[idSite][i]); - } - result += ' _paq.push(["setDomains", ' + JSON.stringify(siteHosts) + ']);\n'; - } - - if (visitorCustomVariables.length) - { - result += ' // you can set up to 5 custom variables for each visitor\n'; - result += getCustomVariableJS(visitorCustomVariables, 'visit'); - } - - if (pageCustomVariables.length) - { - result += ' // you can set up to 5 custom variables for each action (page view, ' + - 'download, click, site search)\n'; - result += getCustomVariableJS(pageCustomVariables, 'page'); - } - - if (customCampaignNameQueryParam) - { - result += ' _paq.push(["setCampaignNameKey", ' + JSON.stringify(customCampaignNameQueryParam) + ']);\n'; - } - - if (customCampaignKeywordParam) - { - result += ' _paq.push(["setCampaignKeywordKey", ' + JSON.stringify(customCampaignKeywordParam) + ']);\n'; - } - - if (doNotTrack) - { - result += ' _paq.push(["setDoNotTrack", true]);\n'; - } - - result += ' _paq.push(["trackPageView"]);\n\ + + if (groupPageTitlesByDomain) { + result += ' _paq.push(["setDocumentTitle", document.domain + "/" + document.title]);\n'; + } + + if (mergeSubdomains) { + var mainHostAllSub = '*.' + getHostNameFromUrl(siteUrls[idSite][0]); + result += ' _paq.push(["setCookieDomain", ' + JSON.stringify(mainHostAllSub) + ']);\n'; + } + + if (mergeAliasUrls) { + var siteHosts = []; + for (var i = 0; i != siteUrls[idSite].length; ++i) { + siteHosts[i] = '*.' + getHostNameFromUrl(siteUrls[idSite][i]); + } + result += ' _paq.push(["setDomains", ' + JSON.stringify(siteHosts) + ']);\n'; + } + + if (visitorCustomVariables.length) { + result += ' // you can set up to 5 custom variables for each visitor\n'; + result += getCustomVariableJS(visitorCustomVariables, 'visit'); + } + + if (pageCustomVariables.length) { + result += ' // you can set up to 5 custom variables for each action (page view, ' + + 'download, click, site search)\n'; + result += getCustomVariableJS(pageCustomVariables, 'page'); + } + + if (customCampaignNameQueryParam) { + result += ' _paq.push(["setCampaignNameKey", ' + JSON.stringify(customCampaignNameQueryParam) + ']);\n'; + } + + if (customCampaignKeywordParam) { + result += ' _paq.push(["setCampaignKeywordKey", ' + JSON.stringify(customCampaignKeywordParam) + ']);\n'; + } + + if (doNotTrack) { + result += ' _paq.push(["setDoNotTrack", true]);\n'; + } + + result += ' _paq.push(["trackPageView"]);\n\ _paq.push(["enableLinkTracking"]);\n\n\ (function() {\n\ var u=(("https:" == document.location.protocol) ? "https" : "http") + "://' + piwikHost + piwikPath + '/";\n\ @@ -237,139 +213,132 @@ $(document).ready(function() { })();\n\ </script>\n\ <!-- End Piwik Code -->'; - - $('#javascript-text textarea').val(result) - }; - - // function that generates image tracker link - var generateImageTrackerLink = function() - { - // get data ( (("https:" == document.location.protocol)?"https://' + piwikHost + '":"http://' + piwikHost + '") ) - var idSite = $('#image-tracker-website .custom_select_main_link').attr('siteid'), - path = document.location.pathname, - piwikURL = ("https:" == document.location.protocol ? "https://" + piwikHost : "http://" + piwikHost) + path.substring(0, path.lastIndexOf('/')) + '/piwik.php', - actionName = $('#image-tracker-action-name').val(), - idGoal = null, - revenue = null; - - if ($('#image-tracking-goal-check').is(':checked')) - { - idGoal = $('#image-tracker-goal').val(); - if (idGoal) - { - revenue = $('#image-tracker-advanced-options .revenue').val(); - } - } - - // generate link HTML - var params = { - idsite: idSite, - rec: 1 - }; - - if (actionName) - { - params.action_name = actionName; - } - - if (idGoal) - { - params.idGoal = idGoal; - if (revenue) - { - params.revenue = revenue; - } - } - - var result = '<!-- Piwik Image Tracker -->\n\ + + $('#javascript-text textarea').val(result) + }; + + // function that generates image tracker link + var generateImageTrackerLink = function () { + // get data ( (("https:" == document.location.protocol)?"https://' + piwikHost + '":"http://' + piwikHost + '") ) + var idSite = $('#image-tracker-website .custom_select_main_link').attr('siteid'), + path = document.location.pathname, + piwikURL = ("https:" == document.location.protocol ? "https://" + piwikHost : "http://" + piwikHost) + path.substring(0, path.lastIndexOf('/')) + '/piwik.php', + actionName = $('#image-tracker-action-name').val(), + idGoal = null, + revenue = null; + + if ($('#image-tracking-goal-check').is(':checked')) { + idGoal = $('#image-tracker-goal').val(); + if (idGoal) { + revenue = $('#image-tracker-advanced-options .revenue').val(); + } + } + + // generate link HTML + var params = { + idsite: idSite, + rec: 1 + }; + + if (actionName) { + params.action_name = actionName; + } + + if (idGoal) { + params.idGoal = idGoal; + if (revenue) { + params.revenue = revenue; + } + } + + var result = '<!-- Piwik Image Tracker -->\n\ <img src="' + piwikURL + '?' + $.param(params) + '" style="border:0" alt="" />\n\ <!-- End Piwik -->'; - result = result.replace("&", "&", "g"); - $('#image-tracking-link textarea').val(result); - }; - - // on image link tracker site change, change available goals - $('#image-tracker-website').bind('piwik:siteSelected', function(e, site) { - getSiteData(site.id, '#image-tracking-code-options', function() { - resetGoalSelectItems(site.id, 'image-tracker-goal'); - generateImageTrackerLink(); - }); - }); - - // on js link tracker site change, change available goals - $('#js-tracker-website').bind('piwik:siteSelected', function(e, site) { - $('.current-site-name', '#optional-js-tracking-options').each(function() { - $(this).text(site.name); - }); - - getSiteData(site.id, '#js-code-options', function() { - var siteHost = getHostNameFromUrl(siteUrls[site.id][0]); - $('.current-site-host', '#optional-js-tracking-options').each(function() { - $(this).text(siteHost); - }); - - var defaultAliasUrl = 'x.' + siteHost; - $('.current-site-alias').text(siteUrls[site.id][1] || defaultAliasUrl); - - resetGoalSelectItems(site.id, 'js-tracker-goal'); - generateJsCode(); - }); - }); - - // on click 'add' link in custom variable section, add a new row, but only - // allow 5 custom variable entry rows - $('.add-custom-variable').click(function(e) { - e.preventDefault(); - - var newRow = '<tr>\ + result = result.replace("&", "&", "g"); + $('#image-tracking-link textarea').val(result); + }; + + // on image link tracker site change, change available goals + $('#image-tracker-website').bind('piwik:siteSelected', function (e, site) { + getSiteData(site.id, '#image-tracking-code-options', function () { + resetGoalSelectItems(site.id, 'image-tracker-goal'); + generateImageTrackerLink(); + }); + }); + + // on js link tracker site change, change available goals + $('#js-tracker-website').bind('piwik:siteSelected', function (e, site) { + $('.current-site-name', '#optional-js-tracking-options').each(function () { + $(this).text(site.name); + }); + + getSiteData(site.id, '#js-code-options', function () { + var siteHost = getHostNameFromUrl(siteUrls[site.id][0]); + $('.current-site-host', '#optional-js-tracking-options').each(function () { + $(this).text(siteHost); + }); + + var defaultAliasUrl = 'x.' + siteHost; + $('.current-site-alias').text(siteUrls[site.id][1] || defaultAliasUrl); + + resetGoalSelectItems(site.id, 'js-tracker-goal'); + generateJsCode(); + }); + }); + + // on click 'add' link in custom variable section, add a new row, but only + // allow 5 custom variable entry rows + $('.add-custom-variable').click(function (e) { + e.preventDefault(); + + var newRow = '<tr>\ <td> </td>\ <td><input type="textbox" class="custom-variable-name"/></td>\ <td> </td>\ <td><input type="textbox" class="custom-variable-value"/></td>\ </tr>', - row = $(this).closest('tr'); - - row.before(newRow); - - // hide add button if max # of custom variables has been reached - // (5 custom variables + 1 row for add new row) - if ($('tr', row.parent()).length == 6) - { - $(this).hide(); - } - - return false; - }); - - // when any input in the JS tracking options section changes, regenerate JS code - $('#optional-js-tracking-options').on('change', 'input', function() { - generateJsCode(); - }); - - // when any input/select in the image tracking options section changes, regenerate - // image tracker link - $('#image-tracking-section').on('change', 'input,select', function() { - generateImageTrackerLink(); - }); - - // on click generated code textareas, select the text so it can be easily copied - $('#javascript-text>textarea,#image-tracking-link>textarea').click(function() { - $(this).select(); - }); - - // initial generation - getSiteData($( - '#js-tracker-website .custom_select_main_link').attr('siteid'), - '#js-code-options,#image-tracking-code-options', - function() { - var imageTrackerSiteId = $('#image-tracker-website .custom_select_main_link').attr('siteid'); - resetGoalSelectItems(imageTrackerSiteId, 'image-tracker-goal'); - - generateJsCode(); - generateImageTrackerLink(); - } - ); -}); + row = $(this).closest('tr'); + + row.before(newRow); + + // hide add button if max # of custom variables has been reached + // (5 custom variables + 1 row for add new row) + if ($('tr', row.parent()).length == 6) { + $(this).hide(); + } + + return false; + }); + + // when any input in the JS tracking options section changes, regenerate JS code + $('#optional-js-tracking-options').on('change', 'input', function () { + generateJsCode(); + }); + + // when any input/select in the image tracking options section changes, regenerate + // image tracker link + $('#image-tracking-section').on('change', 'input,select', function () { + generateImageTrackerLink(); + }); + + // on click generated code textareas, select the text so it can be easily copied + $('#javascript-text>textarea,#image-tracking-link>textarea').click(function () { + $(this).select(); + }); + + // initial generation + getSiteData($( + '#js-tracker-website .custom_select_main_link').attr('siteid'), + '#js-code-options,#image-tracking-code-options', + function () { + var imageTrackerSiteId = $('#image-tracker-website .custom_select_main_link').attr('siteid'); + resetGoalSelectItems(imageTrackerSiteId, 'image-tracker-goal'); + + generateJsCode(); + generateImageTrackerLink(); + } + ); + }); }(jQuery)); |