tracks-events.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*globals JSON */
  2. ( function( $ ) {
  3. var eventName = 'masterbar_click';
  4. var linksTracksEvents = {
  5. //top level items
  6. 'wp-admin-bar-blog' : 'my_sites',
  7. 'wp-admin-bar-newdash' : 'reader',
  8. 'wp-admin-bar-ab-new-post' : 'write_button',
  9. 'wp-admin-bar-my-account' : 'my_account',
  10. 'wp-admin-bar-notes' : 'notifications',
  11. //my sites - top items
  12. 'wp-admin-bar-switch-site' : 'my_sites_switch_site',
  13. 'wp-admin-bar-blog-info' : 'my_sites_blog_info',
  14. 'wp-admin-bar-site-view' : 'my_sites_view_site',
  15. 'wp-admin-bar-blog-stats' : 'my_sites_blog_stats',
  16. 'wp-admin-bar-plan' : 'my_sites_plan',
  17. 'wp-admin-bar-plan-badge' : 'my_sites_plan_badge',
  18. //my sites - manage
  19. 'wp-admin-bar-edit-page' : 'my_sites_manage_site_pages',
  20. 'wp-admin-bar-new-page-badge' : 'my_sites_manage_add_page',
  21. 'wp-admin-bar-edit-post' : 'my_sites_manage_blog_posts',
  22. 'wp-admin-bar-new-post-badge' : 'my_sites_manage_add_new_post',
  23. 'wp-admin-bar-edit-attachment' : 'my_sites_manage_media',
  24. 'wp-admin-bar-new-attachment-badge' : 'my_sites_manage_add_media',
  25. 'wp-admin-bar-comments' : 'my_sites_manage_comments',
  26. 'wp-admin-bar-edit-testimonial' : 'my_sites_manage_testimonials',
  27. 'wp-admin-bar-new-testimonial' : 'my_sites_manage_add_testimonial',
  28. 'wp-admin-bar-edit-portfolio' : 'my_sites_manage_portfolio',
  29. 'wp-admin-bar-new-portfolio' : 'my_sites_manage_add_portfolio',
  30. //my sites - personalize
  31. 'wp-admin-bar-themes' : 'my_sites_personalize_themes',
  32. 'wp-admin-bar-cmz' : 'my_sites_personalize_themes_customize',
  33. //my sites - configure
  34. 'wp-admin-bar-sharing' : 'my_sites_configure_sharing',
  35. 'wp-admin-bar-people' : 'my_sites_configure_people',
  36. 'wp-admin-bar-people-add' : 'my_sites_configure_people_add_button',
  37. 'wp-admin-bar-plugins' : 'my_sites_configure_plugins',
  38. 'wp-admin-bar-plugins-add' : 'my_sites_configure_manage_plugins',
  39. 'wp-admin-bar-blog-settings' : 'my_sites_configure_settings',
  40. //reader
  41. 'wp-admin-bar-followed-sites' : 'reader_followed_sites',
  42. 'wp-admin-bar-reader-followed-sites-manage': 'reader_manage_followed_sites',
  43. 'wp-admin-bar-discover-discover' : 'reader_discover',
  44. 'wp-admin-bar-discover-search' : 'reader_search',
  45. 'wp-admin-bar-discover-recommended-blogs' : 'reader_recommendations',
  46. 'wp-admin-bar-my-activity-my-likes' : 'reader_my_likes',
  47. //account
  48. 'wp-admin-bar-user-info' : 'my_account_user_name',
  49. // account - profile
  50. 'wp-admin-bar-my-profile' : 'my_account_profile_my_profile',
  51. 'wp-admin-bar-account-settings' : 'my_account_profile_account_settings',
  52. 'wp-admin-bar-billing' : 'my_account_profile_manage_purchases',
  53. 'wp-admin-bar-security' : 'my_account_profile_security',
  54. 'wp-admin-bar-notifications' : 'my_account_profile_notifications',
  55. //account - special
  56. 'wp-admin-bar-get-apps' : 'my_account_special_get_apps',
  57. 'wp-admin-bar-next-steps' : 'my_account_special_next_steps',
  58. 'wp-admin-bar-help' : 'my_account_special_help'
  59. };
  60. var notesTracksEvents = {
  61. openSite: function( data ) {
  62. return {
  63. clicked: 'masterbar_notifications_panel_site',
  64. site_id: data.siteId
  65. };
  66. },
  67. openPost: function( data ) {
  68. return {
  69. clicked: 'masterbar_notifications_panel_post',
  70. site_id: data.siteId,
  71. post_id: data.postId
  72. };
  73. },
  74. openComment: function( data ) {
  75. return {
  76. clicked: 'masterbar_notifications_panel_comment',
  77. site_id: data.siteId,
  78. post_id: data.postId,
  79. comment_id: data.commentId
  80. };
  81. }
  82. };
  83. function parseJson( s, defaultValue ) {
  84. try {
  85. return JSON.parse( s );
  86. } catch ( e ) {
  87. return defaultValue;
  88. }
  89. }
  90. $( document ).ready( function() {
  91. var trackableLinks = '.mb-trackable .ab-item:not(div),' +
  92. '#wp-admin-bar-notes .ab-item,' +
  93. '#wp-admin-bar-user-info .ab-item,' +
  94. '.mb-trackable .ab-secondary';
  95. $( trackableLinks ).on( 'click touchstart', function( e ) {
  96. if ( ! window.jpTracksAJAX || 'function' !== typeof( window.jpTracksAJAX.record_ajax_event ) ) {
  97. return;
  98. }
  99. var $target = $( e.target ),
  100. $parent = $target.closest( 'li' );
  101. if ( ! $target.is( 'a' ) ) {
  102. $target = $target.closest( 'a' );
  103. }
  104. if ( ! $parent || ! $target ) {
  105. return;
  106. }
  107. var trackingId = $target.attr( 'ID' ) || $parent.attr( 'ID' );
  108. if ( ! linksTracksEvents.hasOwnProperty( trackingId ) ) {
  109. return;
  110. }
  111. var eventProps = { 'clicked': linksTracksEvents[ trackingId ] };
  112. if ( $parent.hasClass( 'menupop' ) ) {
  113. window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProps );
  114. } else {
  115. e.preventDefault();
  116. window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProps ).always( function() {
  117. window.location = $target.attr( 'href' );
  118. } );
  119. }
  120. } );
  121. } );
  122. // listen for postMessage events from the notifications iframe
  123. $( window ).on( 'message', function( e ) {
  124. if ( ! window.jpTracksAJAX || 'function' !== typeof( window.jpTracksAJAX.record_ajax_event ) ) {
  125. return;
  126. }
  127. var event = ! e.data && e.originalEvent.data ? e.originalEvent : e;
  128. if ( event.origin !== 'https://widgets.wp.com' ) {
  129. return;
  130. }
  131. var data = ( 'string' === typeof event.data ) ? parseJson( event.data, {} ) : event.data;
  132. if ( 'notesIframeMessage' !== data.type ) {
  133. return;
  134. }
  135. var eventData = notesTracksEvents[ data.action ];
  136. if ( ! eventData ) {
  137. return;
  138. }
  139. window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventData( data ) );
  140. } );
  141. } )( jQuery );