// Get existing session or an empty array
$cart_items = $request->session()->get('cart_items', []);
+ $ga['add'] = [];
+ $ga['remove'] = [];
+
+ $needs_update=false;
+
switch ($request->input('action')) {
case 'add':
// If the item already exists in the cart, increment the quantity
$cart_items[$id] = $quantity;
$needs_update = true;
}
+ $ga['add'][$id] = $quantity;
break;
case 'update':
break;
case 'delete':
- unset($cart_items[$id]);
+ if(isset($cart_items[$id])) {
+ $ga['remove'][$id] = $cart_items[$id];
+ unset($cart_items[$id]);
+ }
+ $needs_update = true;
+
break;
}
require('element-closest');
-
-document.addEventListener('DOMContentLoaded', function () {
- Array.prototype.forEach.call(document.querySelectorAll('meta[data-ga]'), function (el, i) {
- handleGtag(el)
- });
-});
-
-document.addEventListener('click', function (e) {
-
- if (e.target.matches('[data-ga]')) {
- handleGtag(e.target);
- }
- if (e.target.closest('[data-ga]')) {
- handleGtag(e.target.closest('[data-ga]'));
- }
-}, false);
-
-function handleGtag(el) {
- if (el.getAttribute('data-ga') === 'event') {
- console.log(el);
- let action = el.getAttribute('data-ga-action');
- let category = el.getAttribute('data-ga-category');
- let label = el.getAttribute('data-ga-label');
- let value = el.getAttribute('data-ga-value');
- let options = {non_interaction: el.getAttribute('data-ga-noninteraction') === 1};
- if (null !== category) {
- options.event_category = category;
- }
- if (null !== label) {
- options.event_label = label;
- }
- if (null !== value) {
- options.value = value;
- }
- gtag('event', action, options)
- }
-}
+window.cubistga = require('./gtag');
--- /dev/null
+function cubistga() {
+ this.initEvents();
+}
+
+cubistga.prototype.initEvents = function () {
+ var $this = this;
+ document.addEventListener('DOMContentLoaded', function () {
+ Array.prototype.forEach.call(document.querySelectorAll('meta[data-ga]'), function (el, i) {
+ $this.handleGtag(el)
+ });
+ });
+
+ document.addEventListener('click', function (e) {
+ if (e.target.matches('[data-ga]')) {
+ $this.handleGtag(e.target);
+ }
+ if (e.target.closest('[data-ga]')) {
+ $this.handleGtag(e.target.closest('[data-ga]'));
+ }
+ }, false);
+};
+
+cubistga.prototype.addToCart = function (id, name, quantity) {
+ this.event('add_to_cart', 'ecommerce', null, null, false, {
+ items: [
+ {id: id, name: name, quantity: quantity}
+ ]
+ });
+};
+
+cubistga.prototype.removeFromCart = function (id, name, quantity) {
+ this.event('remove_from_cart', 'ecommerce', null, null, false, {
+ items: [
+ {id: id, name: name, quantity: quantity}
+ ]
+ });
+};
+
+cubistga.prototype.event = function (action, category, label, value, noninteraction, options) {
+ if (noninteraction === undefined) {
+ noninteraction = false;
+ }
+ if (options === undefined) {
+ options = {};
+ }
+ options.non_interaction = noninteraction;
+ if (undefined !== category && null !== category) {
+ options.event_category = category;
+ }
+ if (undefined !== label && null !== label) {
+ options.event_label = label;
+ }
+ if (undefined !== value && null !== value) {
+ options.value = value;
+ }
+ console.log('gtag event',action,options);
+ return gtag('event', action, options)
+};
+
+cubistga.prototype.handleGtag = function (el) {
+ if (el.getAttribute('data-ga') === 'event') {
+ let action = el.getAttribute('data-ga-action');
+ let category = el.getAttribute('data-ga-category');
+ let label = el.getAttribute('data-ga-label');
+ let value = el.getAttribute('data-ga-value');
+
+ return this.event(action, category, label, value, el.getAttribute('data-ga-noninteraction') === 1);
+ }
+};
+
+module.exports = new cubistga();