'use strict'; /** * Creates a Beacon object with given params. * * @param {string} beaconId Id of the beacon from HelpScout. * @param {string} confirmationMessage Message shown to user to get his confirmation for Beacon initialization. * @param {string} searchElementsClass Css class of elements which modifies beacon search. * @constructor */ function HsBeacon(beaconId, confirmationMessage, searchElementsClass) { this.beaconId = beaconId; this.confirmationMessage = confirmationMessage; this.searchElementsClass = searchElementsClass; } /** * HelpScout Beacon implementation. Can ask for permission before initialize&show. */ HsBeacon.prototype = { initialized: false, confirmationMessage: '', beaconId: '', searchElementsClass: '', searchQuery: '', /** * Attach ask&show event to given class. * * @param {string} buttonClass */ attachBeaconEvents: function (buttonClass) { const self = this; if (this.confirmationMessage !== '') { jQuery('.' + buttonClass).click(function () { jQuery(this).blur(); if (self.showBeaconIfConfirmed()) { jQuery(this).fadeOut("slow"); } }); } else { this.ensureBeaconInitialization(); } if (this.searchElementsClass !== '') { this.attachSearchListener(); } }, /** * Listen on focus events to modify search query on beacon. */ attachSearchListener: function () { let beacon = this; jQuery(document).on('focus','.' + this.searchElementsClass,function(){ if (jQuery(this).attr('data-beacon_search') !== undefined) { beacon.searchQuery = jQuery(this).attr('data-beacon_search'); if (window.Beacon !== undefined) { window.Beacon('search', beacon.searchQuery); } } }); }, /** * Show confirmation dialog and then show Beacon if user confirmed. Must be initialized first. * * @returns {boolean} */ showBeaconIfConfirmed: function () { let wantBeaconRun = confirm(this.confirmationMessage); if (wantBeaconRun) { this.ensureBeaconInitialization(); this.beaconShow(); } return wantBeaconRun; }, /** * Initilize Beacon libs. */ ensureBeaconInitialization: function () { if (!this.initialized) { this.initialized = true; !function (e, t, n) { function a() { var e = t.getElementsByTagName("script")[0], n = t.createElement("script"); n.type = "text/javascript", n.async = !0, n.src = "https://beacon-v2.helpscout.net", e.parentNode.insertBefore(n, e) } if (e.Beacon = n = function (t, n, a) { e.Beacon.readyQueue.push({method: t, options: n, data: a}) }, n.readyQueue = [], "complete" === t.readyState) return a(); e.attachEvent ? e.attachEvent("onload", a) : e.addEventListener("load", a, !1) }(window, document, window.Beacon || function () { }); window.Beacon('init', this.beaconId); } }, /** * Show Beacon. Must be initialized first. */ beaconShow: function () { window.Beacon('open'); if (this.searchQuery !== '') { window.Beacon('search', this.searchQuery); } } };