tracks-ajax.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* global jpTracksAJAX, jQuery */
  2. (function( $, jpTracksAJAX ) {
  3. window.jpTracksAJAX = window.jpTracksAJAX || {};
  4. window.jpTracksAJAX.record_ajax_event = function ( eventName, eventType, eventProp ) {
  5. var data = {
  6. tracksNonce: jpTracksAJAX.jpTracksAJAX_nonce,
  7. action: 'jetpack_tracks',
  8. tracksEventType: eventType,
  9. tracksEventName: eventName,
  10. tracksEventProp: eventProp || false
  11. };
  12. return $.ajax( {
  13. type: 'POST',
  14. url: jpTracksAJAX.ajaxurl,
  15. data: data
  16. } );
  17. };
  18. $( document ).ready( function () {
  19. $( 'body' ).on( 'click', '.jptracks a, a.jptracks', function( event ) {
  20. // We know that the jptracks element is either this, or its ancestor
  21. var $jptracks = $( this ).closest( '.jptracks' );
  22. // We need an event name at least
  23. var eventName = $jptracks.attr( 'data-jptracks-name' );
  24. if ( undefined === eventName ) {
  25. return;
  26. }
  27. var eventProp = $jptracks.attr( 'data-jptracks-prop' ) || false;
  28. var url = $( this ).attr( 'href' );
  29. var target = $( this ).get( 0 ).target;
  30. if ( url && target && '_self' !== target ) {
  31. var newTabWindow = window.open( '', target );
  32. newTabWindow.opener = null;
  33. }
  34. event.preventDefault();
  35. window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProp ).always( function() {
  36. // Continue on to whatever url they were trying to get to.
  37. if ( url ) {
  38. if ( newTabWindow ) {
  39. newTabWindow.location = url;
  40. return;
  41. }
  42. window.location = url;
  43. }
  44. } );
  45. } );
  46. } );
  47. } )( jQuery, jpTracksAJAX );