define("jira/viewissue/tabs/analytics", [ 'jquery', 'jira/analytics', 'jira/util/strings', 'jira/viewissue/analytics-utils', 'jira/components/analytics-tracker/tracker', 'underscore' ], function ( jQuery, analytics, StringUtils, AnalyticsUtils, tracker, _ ) { var privacyPolicyWhitlistedTabs = [ "com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel", "com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel", "com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel", "com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel", "com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab" ]; function whitelistedTabId (tabId) { if (privacyPolicyWhitlistedTabs.indexOf(tabId) > -1) { return tabId; } return StringUtils.hashCode(tabId); } function getTabData($tabElement) { return { tab: whitelistedTabId($tabElement.attr('data-key')), tabPosition: $tabElement.index() } } function baseEventData(openedInNewWindow, triggeredByKeyboard) { return { inNewWindow: openedInNewWindow, keyboard: triggeredByKeyboard, context: AnalyticsUtils.context() } } function elementHasAttachmentId($element) { var elementId = $element.attr("id"); if (elementId) { return /\d+_thumb/.test(elementId); } return false; } function getLinkType($linkElement) { if ($linkElement.hasClass("issue-link")) { return "issue"; } else if ($linkElement.hasClass("external-link")) { return "external"; } else if (elementHasAttachmentId($linkElement)) { return "attachment"; } else { return "unknown"; } } function triggerLinkClickedEvent($elementClicked, linkType, openedInNewWindow, triggeredByKeyboard) { var $parentTab = $elementClicked.closest(".mod-content").find("#issue-tabs li.active"); var data = baseEventData(openedInNewWindow, triggeredByKeyboard); _.extend(data, getTabData($parentTab)); _.extend(data, { linkType: linkType }); tracker.trackEvent("viewissue", "tab.link.clicked", data); } return { tabClicked: function($elementClicked, openedInNewWindow, triggeredByKeyboard) { var $parent = $elementClicked.parent(); var data = _.extend({}, baseEventData(openedInNewWindow, triggeredByKeyboard), getTabData($parent)); analytics.send({ name: "jira.viewissue.tab.clicked", data: data }); tracker.trackEvent("viewissue", "tab.clicked", data); }, buttonClicked: function($elementClicked, openedInNewWindow, triggeredByKeyboard) { if (!$elementClicked.is("[data-tab-sort]")) { return; } var order = $elementClicked.data("order"); var $activeTab = $elementClicked.parents(".tabwrap").find("li.active"); analytics.send({ name: "jira.viewissue.tabsort.clicked", data: _.extend({}, baseEventData(openedInNewWindow, triggeredByKeyboard), getTabData($activeTab), { order: order }) }); }, permalinkClicked: function(commentId, triggeredByKeyboard) { tracker.trackEvent("viewissue", "comment.permalink.click", {commentId: commentId, keyboard: triggeredByKeyboard}); }, permalinkContextMenuOpened: function(commentId, triggeredByKeyboard) { tracker.trackEvent("viewissue", "comment.permalink.contextmenu.opened", {commentId: commentId, keyboard: triggeredByKeyboard}); }, tabItemDetailsLinkClicked: function($elementClicked, openedInNewWindow, triggeredByKeyboard) { triggerLinkClickedEvent($elementClicked, "profile", openedInNewWindow, triggeredByKeyboard); }, tabItemBodyLinkClicked: function($elementClicked, openedInNewWindow, triggeredByKeyboard) { triggerLinkClickedEvent($elementClicked, getLinkType($elementClicked), openedInNewWindow, triggeredByKeyboard); } }; });