This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/unomi-tracker.git


The following commit(s) were added to refs/heads/main by this push:
     new e4c5a1d  UNOMI-668: add a small improvement to form event building to 
automati… (#6)
e4c5a1d is described below

commit e4c5a1d2dbf899835ce66c3af42627c40abb2f72
Author: kevan Jahanshahi <[email protected]>
AuthorDate: Fri Sep 16 11:44:53 2022 +0200

    UNOMI-668: add a small improvement to form event building to automati… (#6)
    
    * UNOMI-668: add a small improvement to form event building to 
automatically extract form fields
    
    * UNOMI-668: add a small improvement to form event building to 
automatically extract form fields
---
 dist/apache-unomi-tracker.cjs.js | 51 ++++++++++++++++++++++++----------------
 dist/apache-unomi-tracker.esm.js | 51 ++++++++++++++++++++++++----------------
 dist/apache-unomi-tracker.umd.js | 51 ++++++++++++++++++++++++----------------
 src/tracker/tracker.js           | 43 +++++++++++++++++----------------
 4 files changed, 114 insertions(+), 82 deletions(-)

diff --git a/dist/apache-unomi-tracker.cjs.js b/dist/apache-unomi-tracker.cjs.js
index facc450..12784c7 100644
--- a/dist/apache-unomi-tracker.cjs.js
+++ b/dist/apache-unomi-tracker.cjs.js
@@ -376,11 +376,13 @@ var newTracker = function newTracker() {
     /**
      * This function will send an event to Apache Unomi
      * @param {object} event The event object to send, you can build it using 
wem.buildEvent(eventType, target, source)
-     * @param {function} successCallback will be executed in case of success
-     * @param {function} errorCallback will be executed in case of error
+     * @param {function} successCallback optional, will be executed in case of 
success
+     * @param {function} errorCallback optional, will be executed in case of 
error
      * @return {undefined}
      */
-    collectEvent: function collectEvent(event, successCallback, errorCallback) 
{
+    collectEvent: function collectEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
       wem.collectEvents({
         events: [event]
       }, successCallback, errorCallback);
@@ -390,13 +392,16 @@ var newTracker = function newTracker() {
      * This function will send the events to Apache Unomi
      *
      * @param {object} events Javascript object { events: [event1, event2] }
-     * @param {function} successCallback will be executed in case of success
-     * @param {function} errorCallback will be executed in case of error
+     * @param {function} successCallback optional, will be executed in case of 
success
+     * @param {function} errorCallback optional, will be executed in case of 
error
      * @return {undefined}
      */
-    collectEvents: function collectEvents(events, successCallback, 
errorCallback) {
+    collectEvents: function collectEvents(events) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
+
       if (wem.fallback) {
-        // in case of fallback we dont want to collect any events
+        // in case of fallback we don't want to collect any events
         return;
       }
 
@@ -419,11 +424,14 @@ var newTracker = function newTracker() {
      * This function will build an event of type click and send it to Apache 
Unomi
      *
      * @param {object} event javascript
-     * @param {function} [successCallback] will be executed if case of success
-     * @param {function} [errorCallback] will be executed if case of error
+     * @param {function} [successCallback] optional, will be executed if case 
of success
+     * @param {function} [errorCallback] optional, will be executed if case of 
error
      * @return {undefined}
      */
-    sendClickEvent: function sendClickEvent(event, successCallback, 
errorCallback) {
+    sendClickEvent: function sendClickEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
+
       if (event.target.id || event.target.name) {
         console.info('[WEM] Send click event');
         var targetId = event.target.id ? event.target.id : event.target.name;
@@ -461,11 +469,13 @@ var newTracker = function newTracker() {
      * This function will build an event of type video and send it to Apache 
Unomi
      *
      * @param {object} event javascript
-     * @param {function} [successCallback] will be executed if case of success
-     * @param {function} [errorCallback] will be executed if case of error
+     * @param {function} [successCallback] optional, will be executed if case 
of success
+     * @param {function} [errorCallback] optional, will be executed if case of 
error
      * @return {undefined}
      */
-    sendVideoEvent: function sendVideoEvent(event, successCallback, 
errorCallback) {
+    sendVideoEvent: function sendVideoEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
       console.info('[WEM] catching video event');
       var videoEvent = wem.buildEvent('video', 
wem.buildTarget(event.target.id, 'video', {
         action: event.type
@@ -529,10 +539,16 @@ var newTracker = function newTracker() {
      * This function return an event of type form
      *
      * @param {string} formName The HTML name of id of the form to use in the 
target of the event
+     * @param {HTMLFormElement} form optional HTML form element, if provided 
will be used to extract the form fields and populate the form event
      * @returns {object} the form event
      */
     buildFormEvent: function buildFormEvent(formName) {
-      return wem.buildEvent('form', wem.buildTarget(formName, 'form'), 
wem.buildSourcePage());
+      var form = arguments.length > 1 && arguments[1] !== undefined ? 
arguments[1] : undefined;
+      var formEvent = wem.buildEvent('form', wem.buildTarget(formName, 
'form'), wem.buildSourcePage());
+      formEvent.flattenedProperties = {
+        fields: form ? wem._extractFormData(form) : {}
+      };
+      return formEvent;
     },
 
     /**
@@ -1331,12 +1347,7 @@ var newTracker = function newTracker() {
         eventCopy.initEvent('submit', event.bubbles, event.cancelable);
         event.stopImmediatePropagation();
         event.preventDefault();
-        var formEvent = wem.buildFormEvent(formName); // merge form properties 
with event properties
-
-        formEvent.flattenedProperties = {
-          fields: wem._extractFormData(form)
-        };
-        wem.collectEvent(formEvent, function () {
+        wem.collectEvent(wem.buildFormEvent(formName, form), function () {
           form.removeEventListener('submit', wem._formSubmitEventListener, 
true);
           form.dispatchEvent(eventCopy);
 
diff --git a/dist/apache-unomi-tracker.esm.js b/dist/apache-unomi-tracker.esm.js
index 00c6ef6..8f1c756 100644
--- a/dist/apache-unomi-tracker.esm.js
+++ b/dist/apache-unomi-tracker.esm.js
@@ -368,11 +368,13 @@ var newTracker = function newTracker() {
     /**
      * This function will send an event to Apache Unomi
      * @param {object} event The event object to send, you can build it using 
wem.buildEvent(eventType, target, source)
-     * @param {function} successCallback will be executed in case of success
-     * @param {function} errorCallback will be executed in case of error
+     * @param {function} successCallback optional, will be executed in case of 
success
+     * @param {function} errorCallback optional, will be executed in case of 
error
      * @return {undefined}
      */
-    collectEvent: function collectEvent(event, successCallback, errorCallback) 
{
+    collectEvent: function collectEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
       wem.collectEvents({
         events: [event]
       }, successCallback, errorCallback);
@@ -382,13 +384,16 @@ var newTracker = function newTracker() {
      * This function will send the events to Apache Unomi
      *
      * @param {object} events Javascript object { events: [event1, event2] }
-     * @param {function} successCallback will be executed in case of success
-     * @param {function} errorCallback will be executed in case of error
+     * @param {function} successCallback optional, will be executed in case of 
success
+     * @param {function} errorCallback optional, will be executed in case of 
error
      * @return {undefined}
      */
-    collectEvents: function collectEvents(events, successCallback, 
errorCallback) {
+    collectEvents: function collectEvents(events) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
+
       if (wem.fallback) {
-        // in case of fallback we dont want to collect any events
+        // in case of fallback we don't want to collect any events
         return;
       }
 
@@ -411,11 +416,14 @@ var newTracker = function newTracker() {
      * This function will build an event of type click and send it to Apache 
Unomi
      *
      * @param {object} event javascript
-     * @param {function} [successCallback] will be executed if case of success
-     * @param {function} [errorCallback] will be executed if case of error
+     * @param {function} [successCallback] optional, will be executed if case 
of success
+     * @param {function} [errorCallback] optional, will be executed if case of 
error
      * @return {undefined}
      */
-    sendClickEvent: function sendClickEvent(event, successCallback, 
errorCallback) {
+    sendClickEvent: function sendClickEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
+
       if (event.target.id || event.target.name) {
         console.info('[WEM] Send click event');
         var targetId = event.target.id ? event.target.id : event.target.name;
@@ -453,11 +461,13 @@ var newTracker = function newTracker() {
      * This function will build an event of type video and send it to Apache 
Unomi
      *
      * @param {object} event javascript
-     * @param {function} [successCallback] will be executed if case of success
-     * @param {function} [errorCallback] will be executed if case of error
+     * @param {function} [successCallback] optional, will be executed if case 
of success
+     * @param {function} [errorCallback] optional, will be executed if case of 
error
      * @return {undefined}
      */
-    sendVideoEvent: function sendVideoEvent(event, successCallback, 
errorCallback) {
+    sendVideoEvent: function sendVideoEvent(event) {
+      var successCallback = arguments.length > 1 && arguments[1] !== undefined 
? arguments[1] : undefined;
+      var errorCallback = arguments.length > 2 && arguments[2] !== undefined ? 
arguments[2] : undefined;
       console.info('[WEM] catching video event');
       var videoEvent = wem.buildEvent('video', 
wem.buildTarget(event.target.id, 'video', {
         action: event.type
@@ -521,10 +531,16 @@ var newTracker = function newTracker() {
      * This function return an event of type form
      *
      * @param {string} formName The HTML name of id of the form to use in the 
target of the event
+     * @param {HTMLFormElement} form optional HTML form element, if provided 
will be used to extract the form fields and populate the form event
      * @returns {object} the form event
      */
     buildFormEvent: function buildFormEvent(formName) {
-      return wem.buildEvent('form', wem.buildTarget(formName, 'form'), 
wem.buildSourcePage());
+      var form = arguments.length > 1 && arguments[1] !== undefined ? 
arguments[1] : undefined;
+      var formEvent = wem.buildEvent('form', wem.buildTarget(formName, 
'form'), wem.buildSourcePage());
+      formEvent.flattenedProperties = {
+        fields: form ? wem._extractFormData(form) : {}
+      };
+      return formEvent;
     },
 
     /**
@@ -1323,12 +1339,7 @@ var newTracker = function newTracker() {
         eventCopy.initEvent('submit', event.bubbles, event.cancelable);
         event.stopImmediatePropagation();
         event.preventDefault();
-        var formEvent = wem.buildFormEvent(formName); // merge form properties 
with event properties
-
-        formEvent.flattenedProperties = {
-          fields: wem._extractFormData(form)
-        };
-        wem.collectEvent(formEvent, function () {
+        wem.collectEvent(wem.buildFormEvent(formName, form), function () {
           form.removeEventListener('submit', wem._formSubmitEventListener, 
true);
           form.dispatchEvent(eventCopy);
 
diff --git a/dist/apache-unomi-tracker.umd.js b/dist/apache-unomi-tracker.umd.js
index d4e3b88..3bd0c2d 100644
--- a/dist/apache-unomi-tracker.umd.js
+++ b/dist/apache-unomi-tracker.umd.js
@@ -2023,11 +2023,13 @@
       /**
        * This function will send an event to Apache Unomi
        * @param {object} event The event object to send, you can build it 
using wem.buildEvent(eventType, target, source)
-       * @param {function} successCallback will be executed in case of success
-       * @param {function} errorCallback will be executed in case of error
+       * @param {function} successCallback optional, will be executed in case 
of success
+       * @param {function} errorCallback optional, will be executed in case of 
error
        * @return {undefined}
        */
-      collectEvent: function collectEvent(event, successCallback, 
errorCallback) {
+      collectEvent: function collectEvent(event) {
+        var successCallback = arguments.length > 1 && arguments[1] !== 
undefined ? arguments[1] : undefined;
+        var errorCallback = arguments.length > 2 && arguments[2] !== undefined 
? arguments[2] : undefined;
         wem.collectEvents({
           events: [event]
         }, successCallback, errorCallback);
@@ -2037,13 +2039,16 @@
        * This function will send the events to Apache Unomi
        *
        * @param {object} events Javascript object { events: [event1, event2] }
-       * @param {function} successCallback will be executed in case of success
-       * @param {function} errorCallback will be executed in case of error
+       * @param {function} successCallback optional, will be executed in case 
of success
+       * @param {function} errorCallback optional, will be executed in case of 
error
        * @return {undefined}
        */
-      collectEvents: function collectEvents(events, successCallback, 
errorCallback) {
+      collectEvents: function collectEvents(events) {
+        var successCallback = arguments.length > 1 && arguments[1] !== 
undefined ? arguments[1] : undefined;
+        var errorCallback = arguments.length > 2 && arguments[2] !== undefined 
? arguments[2] : undefined;
+
         if (wem.fallback) {
-          // in case of fallback we dont want to collect any events
+          // in case of fallback we don't want to collect any events
           return;
         }
 
@@ -2066,11 +2071,14 @@
        * This function will build an event of type click and send it to Apache 
Unomi
        *
        * @param {object} event javascript
-       * @param {function} [successCallback] will be executed if case of 
success
-       * @param {function} [errorCallback] will be executed if case of error
+       * @param {function} [successCallback] optional, will be executed if 
case of success
+       * @param {function} [errorCallback] optional, will be executed if case 
of error
        * @return {undefined}
        */
-      sendClickEvent: function sendClickEvent(event, successCallback, 
errorCallback) {
+      sendClickEvent: function sendClickEvent(event) {
+        var successCallback = arguments.length > 1 && arguments[1] !== 
undefined ? arguments[1] : undefined;
+        var errorCallback = arguments.length > 2 && arguments[2] !== undefined 
? arguments[2] : undefined;
+
         if (event.target.id || event.target.name) {
           console.info('[WEM] Send click event');
           var targetId = event.target.id ? event.target.id : event.target.name;
@@ -2108,11 +2116,13 @@
        * This function will build an event of type video and send it to Apache 
Unomi
        *
        * @param {object} event javascript
-       * @param {function} [successCallback] will be executed if case of 
success
-       * @param {function} [errorCallback] will be executed if case of error
+       * @param {function} [successCallback] optional, will be executed if 
case of success
+       * @param {function} [errorCallback] optional, will be executed if case 
of error
        * @return {undefined}
        */
-      sendVideoEvent: function sendVideoEvent(event, successCallback, 
errorCallback) {
+      sendVideoEvent: function sendVideoEvent(event) {
+        var successCallback = arguments.length > 1 && arguments[1] !== 
undefined ? arguments[1] : undefined;
+        var errorCallback = arguments.length > 2 && arguments[2] !== undefined 
? arguments[2] : undefined;
         console.info('[WEM] catching video event');
         var videoEvent = wem.buildEvent('video', 
wem.buildTarget(event.target.id, 'video', {
           action: event.type
@@ -2176,10 +2186,16 @@
        * This function return an event of type form
        *
        * @param {string} formName The HTML name of id of the form to use in 
the target of the event
+       * @param {HTMLFormElement} form optional HTML form element, if provided 
will be used to extract the form fields and populate the form event
        * @returns {object} the form event
        */
       buildFormEvent: function buildFormEvent(formName) {
-        return wem.buildEvent('form', wem.buildTarget(formName, 'form'), 
wem.buildSourcePage());
+        var form = arguments.length > 1 && arguments[1] !== undefined ? 
arguments[1] : undefined;
+        var formEvent = wem.buildEvent('form', wem.buildTarget(formName, 
'form'), wem.buildSourcePage());
+        formEvent.flattenedProperties = {
+          fields: form ? wem._extractFormData(form) : {}
+        };
+        return formEvent;
       },
 
       /**
@@ -2978,12 +2994,7 @@
           eventCopy.initEvent('submit', event.bubbles, event.cancelable);
           event.stopImmediatePropagation();
           event.preventDefault();
-          var formEvent = wem.buildFormEvent(formName); // merge form 
properties with event properties
-
-          formEvent.flattenedProperties = {
-            fields: wem._extractFormData(form)
-          };
-          wem.collectEvent(formEvent, function () {
+          wem.collectEvent(wem.buildFormEvent(formName, form), function () {
             form.removeEventListener('submit', wem._formSubmitEventListener, 
true);
             form.dispatchEvent(eventCopy);
 
diff --git a/src/tracker/tracker.js b/src/tracker/tracker.js
index 1ffbf7b..7aa1674 100644
--- a/src/tracker/tracker.js
+++ b/src/tracker/tracker.js
@@ -352,11 +352,11 @@ export const newTracker = () => {
         /**
          * This function will send an event to Apache Unomi
          * @param {object} event The event object to send, you can build it 
using wem.buildEvent(eventType, target, source)
-         * @param {function} successCallback will be executed in case of 
success
-         * @param {function} errorCallback will be executed in case of error
+         * @param {function} successCallback optional, will be executed in 
case of success
+         * @param {function} errorCallback optional, will be executed in case 
of error
          * @return {undefined}
          */
-        collectEvent: function (event, successCallback, errorCallback) {
+        collectEvent: function (event, successCallback = undefined, 
errorCallback = undefined) {
             wem.collectEvents({ events: [event] }, successCallback, 
errorCallback);
         },
 
@@ -364,13 +364,13 @@ export const newTracker = () => {
          * This function will send the events to Apache Unomi
          *
          * @param {object} events Javascript object { events: [event1, event2] 
}
-         * @param {function} successCallback will be executed in case of 
success
-         * @param {function} errorCallback will be executed in case of error
+         * @param {function} successCallback optional, will be executed in 
case of success
+         * @param {function} errorCallback optional, will be executed in case 
of error
          * @return {undefined}
          */
-        collectEvents: function (events, successCallback, errorCallback) {
+        collectEvents: function (events, successCallback = undefined, 
errorCallback = undefined) {
             if (wem.fallback) {
-                // in case of fallback we dont want to collect any events
+                // in case of fallback we don't want to collect any events
                 return;
             }
 
@@ -393,11 +393,11 @@ export const newTracker = () => {
          * This function will build an event of type click and send it to 
Apache Unomi
          *
          * @param {object} event javascript
-         * @param {function} [successCallback] will be executed if case of 
success
-         * @param {function} [errorCallback] will be executed if case of error
+         * @param {function} [successCallback] optional, will be executed if 
case of success
+         * @param {function} [errorCallback] optional, will be executed if 
case of error
          * @return {undefined}
          */
-        sendClickEvent: function (event, successCallback, errorCallback) {
+        sendClickEvent: function (event, successCallback = undefined, 
errorCallback = undefined) {
             if (event.target.id || event.target.name) {
                 console.info('[WEM] Send click event');
                 var targetId = event.target.id ? event.target.id : 
event.target.name;
@@ -438,11 +438,11 @@ export const newTracker = () => {
          * This function will build an event of type video and send it to 
Apache Unomi
          *
          * @param {object} event javascript
-         * @param {function} [successCallback] will be executed if case of 
success
-         * @param {function} [errorCallback] will be executed if case of error
+         * @param {function} [successCallback] optional, will be executed if 
case of success
+         * @param {function} [errorCallback] optional, will be executed if 
case of error
          * @return {undefined}
          */
-        sendVideoEvent: function (event, successCallback, errorCallback) {
+        sendVideoEvent: function (event, successCallback = undefined, 
errorCallback = undefined) {
             console.info('[WEM] catching video event');
             var videoEvent = wem.buildEvent('video', 
wem.buildTarget(event.target.id, 'video', { action: event.type }), 
wem.buildSourcePage());
 
@@ -503,10 +503,15 @@ export const newTracker = () => {
          * This function return an event of type form
          *
          * @param {string} formName The HTML name of id of the form to use in 
the target of the event
+         * @param {HTMLFormElement} form optional HTML form element, if 
provided will be used to extract the form fields and populate the form event
          * @returns {object} the form event
          */
-        buildFormEvent: function (formName) {
-            return wem.buildEvent('form', wem.buildTarget(formName, 'form'), 
wem.buildSourcePage());
+        buildFormEvent: function (formName, form = undefined) {
+            const formEvent = wem.buildEvent('form', wem.buildTarget(formName, 
'form'), wem.buildSourcePage());
+            formEvent.flattenedProperties = {
+                fields: form ? wem._extractFormData(form) : {}
+            };
+            return formEvent;
         },
 
         /**
@@ -1221,13 +1226,7 @@ export const newTracker = () => {
                 event.stopImmediatePropagation();
                 event.preventDefault();
 
-                var formEvent = wem.buildFormEvent(formName);
-                // merge form properties with event properties
-                formEvent.flattenedProperties = {
-                    fields: wem._extractFormData(form)
-                };
-
-                wem.collectEvent(formEvent,
+                wem.collectEvent(wem.buildFormEvent(formName, form),
                     function () {
                         form.removeEventListener('submit', 
wem._formSubmitEventListener, true);
                         form.dispatchEvent(eventCopy);

Reply via email to