@@ -47,12 +47,14 @@ function trackerCore(base64, callback) {
47
47
* Returns a copy of a JSON with undefined and null properties removed
48
48
*
49
49
* @param object eventJson JSON to clean
50
+ * @param object exemptFields Set of fields which should not be removed even if empty
50
51
* @return object A cleaned copy of eventJson
51
52
*/
52
- function removeEmptyProperties ( eventJson ) {
53
+ function removeEmptyProperties ( eventJson , exemptFields ) {
53
54
var ret = { } ;
55
+ exemptFields = exemptFields || { } ;
54
56
for ( var k in eventJson ) {
55
- if ( eventJson [ k ] !== null && typeof eventJson [ k ] !== 'undefined' ) {
57
+ if ( exemptFields [ k ] || ( eventJson [ k ] !== null && typeof eventJson [ k ] !== 'undefined' ) ) {
56
58
ret [ k ] = eventJson [ k ] ;
57
59
}
58
60
}
@@ -82,6 +84,7 @@ function trackerCore(base64, callback) {
82
84
* @param sb object Payload
83
85
* @param array contexts Custom contexts relating to the event
84
86
* @param number tstamp Timestamp of the event
87
+ * @return object Payload after the callback is applied
85
88
*/
86
89
function track ( sb , context , tstamp ) {
87
90
sb . addDict ( payloadPairs ) ;
@@ -91,12 +94,11 @@ function trackerCore(base64, callback) {
91
94
sb . addJson ( 'cx' , 'co' , completeContexts ( context ) ) ;
92
95
}
93
96
94
- var payload = sb . build ( ) ;
95
97
if ( typeof callback === 'function' ) {
96
- callback ( payload ) ;
98
+ callback ( sb ) ;
97
99
}
98
100
99
- return payload ;
101
+ return sb ;
100
102
}
101
103
102
104
/**
@@ -161,7 +163,7 @@ function trackerCore(base64, callback) {
161
163
* @param string version
162
164
*/
163
165
setTrackerVersion : function ( version ) {
164
- addPayloadPair ( 'tv' , version )
166
+ addPayloadPair ( 'tv' , version ) ;
165
167
} ,
166
168
167
169
/**
@@ -179,7 +181,7 @@ function trackerCore(base64, callback) {
179
181
* @param string appId
180
182
*/
181
183
setAppId : function ( appId ) {
182
- addPayloadPair ( 'aid' , appId )
184
+ addPayloadPair ( 'aid' , appId ) ;
183
185
} ,
184
186
185
187
/**
@@ -253,7 +255,7 @@ function trackerCore(base64, callback) {
253
255
* @param string appId
254
256
*/
255
257
setIpAddress : function ( ip ) {
256
- addPayloadPair ( 'ip' , ip )
258
+ addPayloadPair ( 'ip' , ip ) ;
257
259
} ,
258
260
259
261
trackUnstructEvent : trackUnstructEvent ,
@@ -280,16 +282,24 @@ function trackerCore(base64, callback) {
280
282
* by sending a page ping.
281
283
*
282
284
* @param string pageTitle The page title to attach to this page ping
285
+ * @param minxoffset Minimum page x offset seen in the last ping period
286
+ * @param maxXOffset Maximum page x offset seen in the last ping period
287
+ * @param minYOffset Minimum page y offset seen in the last ping period
288
+ * @param maxYOffset Maximum page y offset seen in the last ping period
283
289
* @param array context Custom contexts relating to the event
284
290
* @param number tstamp Timestamp of the event
285
291
* @return object Payload
286
292
*/
287
- trackPagePing : function ( pageUrl , pageTitle , referrer , context , tstamp ) {
293
+ trackPagePing : function ( pageUrl , pageTitle , referrer , minXOffset , maxXOffset , minYOffset , maxYOffset , context , tstamp ) {
288
294
var sb = payload . payloadBuilder ( base64 ) ;
289
- sb . add ( 'e' , 'pp' ) ; // 'pv ' for Page View
295
+ sb . add ( 'e' , 'pp' ) ; // 'pp ' for Page Ping
290
296
sb . add ( 'url' , pageUrl ) ;
291
297
sb . add ( 'page' , pageTitle ) ;
292
298
sb . add ( 'refr' , referrer ) ;
299
+ sb . add ( 'pp_mix' , minXOffset ) ;
300
+ sb . add ( 'pp_max' , maxXOffset ) ;
301
+ sb . add ( 'pp_miy' , minYOffset ) ;
302
+ sb . add ( 'pp_may' , maxYOffset ) ;
293
303
294
304
return track ( sb , context , tstamp ) ;
295
305
} ,
@@ -364,7 +374,7 @@ function trackerCore(base64, callback) {
364
374
* @return object Payload
365
375
*/
366
376
trackEcommerceTransactionItem : function ( orderId , sku , name , category , price , quantity , currency , context , tstamp ) {
367
- var sb = payload . payloadBuilder ( base64 )
377
+ var sb = payload . payloadBuilder ( base64 ) ;
368
378
sb . add ( "e" , "ti" ) ; // 'tr' for Transaction Item
369
379
sb . add ( "ti_id" , orderId ) ;
370
380
sb . add ( "ti_sk" , sku ) ;
@@ -398,22 +408,24 @@ function trackerCore(base64, callback) {
398
408
/**
399
409
* Log the link or click with the server
400
410
*
411
+ * @param string targetUrl
401
412
* @param string elementId
402
413
* @param array elementClasses
403
414
* @param string elementTarget
404
- * @param string targetUrl
415
+ * @param string elementContent innerHTML of the link
405
416
* @param array context Custom contexts relating to the event
406
417
* @param number tstamp Timestamp of the event
407
418
* @return object Payload
408
419
*/
409
- trackLinkClick : function ( targetUrl , elementId , elementClasses , elementTarget , context , tstamp ) {
420
+ trackLinkClick : function ( targetUrl , elementId , elementClasses , elementTarget , elementContent , context , tstamp ) {
410
421
var eventJson = {
411
- schema : 'iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-0 ' ,
422
+ schema : 'iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1 ' ,
412
423
data : removeEmptyProperties ( {
413
424
targetUrl : targetUrl ,
414
425
elementId : elementId ,
415
426
elementClasses : elementClasses ,
416
- elementTarget : elementTarget
427
+ elementTarget : elementTarget ,
428
+ elementContent : elementContent
417
429
} ) ,
418
430
} ;
419
431
@@ -520,8 +532,156 @@ function trackerCore(base64, callback) {
520
532
} ;
521
533
522
534
return trackUnstructEvent ( eventJson , context , tstamp ) ;
535
+ } ,
536
+
537
+ /**
538
+ * Track a social event
539
+ *
540
+ * @param string action Social action performed
541
+ * @param string network Social network
542
+ * @param string target Object of the social action e.g. the video liked, the tweet retweeted
543
+ * @param array Custom contexts relating to the event
544
+ * @param number tstamp Timestamp of the event
545
+ * @return object Payload
546
+ */
547
+ trackSocialInteraction : function ( action , network , target , context , tstamp ) {
548
+ var eventJson = {
549
+ schema : 'iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0' ,
550
+ data : removeEmptyProperties ( {
551
+ action : action ,
552
+ network : network ,
553
+ target : target
554
+ } )
555
+ } ;
556
+
557
+ return trackUnstructEvent ( eventJson , context , tstamp ) ;
558
+ } ,
559
+
560
+ /**
561
+ * Track an add-to-cart event
562
+ *
563
+ * @param string sku Required. Item's SKU code.
564
+ * @param string name Optional. Product name.
565
+ * @param string category Optional. Product category.
566
+ * @param string unitPrice Optional. Product price.
567
+ * @param string quantity Required. Quantity added.
568
+ * @param string currency Optional. Product price currency.
569
+ * @param array context Optional. Context relating to the event.
570
+ * @param number tstamp Optional. Timestamp of the event
571
+ * @return object Payload
572
+ */
573
+ trackAddToCart : function ( sku , name , category , unitPrice , quantity , currency , context , tstamp ) {
574
+ return trackUnstructEvent ( {
575
+ schema : 'iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0' ,
576
+ data : removeEmptyProperties ( {
577
+ sku : sku ,
578
+ name : name ,
579
+ category : category ,
580
+ unitPrice : unitPrice ,
581
+ quantity : quantity ,
582
+ currency : currency
583
+ } )
584
+ } , context , tstamp ) ;
585
+ } ,
586
+
587
+ /**
588
+ * Track a remove-from-cart event
589
+ *
590
+ * @param string sku Required. Item's SKU code.
591
+ * @param string name Optional. Product name.
592
+ * @param string category Optional. Product category.
593
+ * @param string unitPrice Optional. Product price.
594
+ * @param string quantity Required. Quantity removed.
595
+ * @param string currency Optional. Product price currency.
596
+ * @param array context Optional. Context relating to the event.
597
+ * @param number tstamp Optional. Timestamp of the event
598
+ * @return object Payload
599
+ */
600
+ trackRemoveFromCart : function ( sku , name , category , unitPrice , quantity , currency , context , tstamp ) {
601
+ return trackUnstructEvent ( {
602
+ schema : 'iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0' ,
603
+ data : removeEmptyProperties ( {
604
+ sku : sku ,
605
+ name : name ,
606
+ category : category ,
607
+ unitPrice : unitPrice ,
608
+ quantity : quantity ,
609
+ currency : currency
610
+ } )
611
+ } , context , tstamp ) ;
612
+ } ,
613
+
614
+ /**
615
+ * Track the value of a form field changing
616
+ *
617
+ * @param string formId The parent form ID
618
+ * @param string elementId ID of the changed element
619
+ * @param string nodeName "INPUT", "TEXTAREA", or "SELECT"
620
+ * @param string type Type of the changed element if its type is "INPUT"
621
+ * @param array elementClasses List of classes of the changed element
622
+ * @param string value The new value of the changed element
623
+ * @param array context Optional. Context relating to the event.
624
+ * @param number tstamp Optional. Timestamp of the event
625
+ * @return object Payload
626
+ */
627
+ trackFormChange : function ( formId , elementId , nodeName , type , elementClasses , value , context , tstamp ) {
628
+ return trackUnstructEvent ( {
629
+ schema : 'iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0' ,
630
+ data : removeEmptyProperties ( {
631
+ formId : formId ,
632
+ elementId : elementId ,
633
+ nodeName : nodeName ,
634
+ type : type ,
635
+ elementClasses : elementClasses ,
636
+ value : value
637
+ } , { 'value' : true } )
638
+ } , context , tstamp ) ;
639
+ } ,
640
+
641
+ /**
642
+ * Track a form submission event
643
+ *
644
+ * @param string formId ID of the form
645
+ * @param array formClasses Classes of the form
646
+ * @param array elements Mutable elements within the form
647
+ * @param array context Optional. Context relating to the event.
648
+ * @param number tstamp Optional. Timestamp of the event
649
+ * @return object Payload
650
+ */
651
+ trackFormSubmission : function ( formId , formClasses , elements , context , tstamp ) {
652
+ return trackUnstructEvent ( {
653
+ schema : 'iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0' ,
654
+ data : removeEmptyProperties ( {
655
+ formId : formId ,
656
+ formClasses : formClasses ,
657
+ elements : elements
658
+ } )
659
+ } , context , tstamp ) ;
660
+ } ,
661
+
662
+ /**
663
+ * Track an internal search event
664
+ *
665
+ * @param array terms Search terms
666
+ * @param object filters Search filters
667
+ * @param totalResults Number of results
668
+ * @param pageResults Number of results displayed on page
669
+ * @param array context Optional. Context relating to the event.
670
+ * @param number tstamp Optional. Timestamp of the event
671
+ * @return object Payload
672
+ */
673
+ trackSiteSearch : function ( terms , filters , totalResults , pageResults , context , tstamp ) {
674
+ return trackUnstructEvent ( {
675
+ schema : 'iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0' ,
676
+ data : removeEmptyProperties ( {
677
+ terms : terms ,
678
+ filters : filters ,
679
+ totalResults : totalResults ,
680
+ pageResults : pageResults
681
+ } )
682
+ } , context , tstamp ) ;
523
683
}
524
684
} ;
525
- }
685
+ } ;
526
686
527
687
module . exports = trackerCore ;
0 commit comments