{"version":3,"names":[],"mappings":"","sources":["experiment/PricingUpsellModals.js"],"sourcesContent":["/*jshint multistr: true*/\nwindow.Experiments = window.Experiments || {};\nwindow.Experiments.PricingUpsellModals = (function (\n options, account, user, Current, $, _,\n ga, mercury,\n Handlebars\n) {\n 'use strict';\n\n options = options || {};\n Current = Current || window.Current;\n $ = $ || window.$;\n _ = _ || window._;\n\n ga = ga || window.ga;\n mercury = mercury || window.mercury || {};\n Handlebars = Handlebars || window.Handlebars;\n\n // Variations\n var CONTROL = 'control';\n var TREATMENT = 'treatment'; // Two months free\n var NONE = 'none';\n\n // Actions\n // Actions are all defined by UpgradeDialogView\n\n // Misc Consts\n var SUPPORTED_MODAL_TYPES = ['scheduling', 'sites', 'locations'];\n\n var service = {\n 'id': 'GROW-1106',\n 'name': 'Pricing Upsell Modals',\n 'launchDarklyFlag': 'grow-1106-pricing-upsell-modals',\n 'mercuryEventId': 'experiment::g1106PricingUpsellModals',\n 'mercuryAssignmentEventId': 'experiment::assignments',\n 'account': null,\n 'user': null,\n 'options': {},\n 'variation': null,\n 'version': '1',\n };\n\n var defaultOptions = {\n 'variation': null,\n };\n\n function construct(account, user, options) {\n $.extend(true, service.options, defaultOptions, options);\n service.account = account || Current.Account;\n service.user = user || Current.User;\n service.variation = options.variation;\n\n return service;\n }\n\n function getAccount() {\n return service.account;\n }\n\n function setAccount(account) {\n service.account = account;\n return service;\n }\n\n function getUser() {\n return service.user;\n }\n\n function setUser(user) {\n service.user = user;\n return service;\n }\n\n function getOptions() {\n return service.options;\n }\n\n function init() {\n if (service.getVariation() === CONTROL) {\n initControl();\n } else {\n initVariation();\n }\n }\n\n function isControl() {\n return getVariation() === CONTROL;\n }\n\n function isNone() {\n return getVariation() === NONE;\n }\n\n function isVariation(variation) {\n if (!variation) {\n return !isControl() && !isNone();\n }\n return variation === getVariation();\n }\n\n function getVariation() {\n // there is already a variation set, use that\n if (service.variation) {\n return service.variation;\n }\n\n // Get variation from launch darkly flags\n if (Current && Current.Flags) {\n service.setVariation(Current.Flags[service.launchDarklyFlag]);\n }\n\n return service.variation;\n }\n\n function setVariation(variation) {\n service.variation = variation;\n return service;\n }\n\n function initCommon() {\n $('body').addClass(service.launchDarklyFlag + '-' + service.getVariation());\n waitFor(\n function () {\n return window.UpgradeDialogView;\n },\n function () {\n overrideUpgradeDialogView();\n }\n );\n }\n\n function initControl() {\n initCommon();\n }\n\n function initVariation() {\n initCommon();\n }\n\n function overrideUpgradeDialogView() {\n var oldView = window.UpgradeDialogView;\n // this is dumb right now, make it work with variable features later\n window.UpgradeDialogView = oldView.extend({\n newTemplate: Handlebars.compile('\\\n
\\\n '),\n isSupportedType: function () {\n return _.includes(SUPPORTED_MODAL_TYPES, this.options.type);\n },\n template: function (data) {\n data.type = this.options.type;\n if (service.isVariation() && this.isSupportedType()) {\n var yourAccountAdministratorNeedsToUpgrade = 'Your account administrator needs to upgrade your plan' +\n ' so that you can build out your schedule without restrictions.';\n switch (this.options.type) {\n case 'scheduling':\n data.headline = 'Unlimited Scheduling';\n data.subHeadline = data.canUpgrade ?\n 'Upgrade your plan to build out your schedule as far in advance as \\\n you\\'d like in addition to more great features.' :\n yourAccountAdministratorNeedsToUpgrade;\n break;\n case 'locations':\n data.headline = 'Create Multiple Schedules';\n data.subHeadline = data.canUpgrade ?\n 'Using Schedules makes it easy to share and group employees, upgrade your plan for \\\n multiple Schedules and more great features.' :\n yourAccountAdministratorNeedsToUpgrade;\n break;\n case 'sites':\n data.headline = 'Add Multiple Job Sites';\n data.subHeadline = data.canUpgrade ?\n 'Using Job Sites makes it easy to schedule your employees offsite, upgrade your plan for \\\n Job Sites and more great features.' :\n yourAccountAdministratorNeedsToUpgrade;\n break;\n }\n\n if (Current.Plan.get('type') === 2) {\n // Per-user\n data.pricePerMonth = '$1.50 per month';\n } else {\n // Bucketed\n data.pricePerMonth = '$9 per month';\n }\n\n return this.newTemplate.apply(this, arguments);\n } else {\n return oldView.prototype.template.apply(this, arguments);\n }\n },\n track: function (featureName, action) {\n oldView.prototype.track.apply(this, arguments);\n service.track(action, {featureRequested: featureName});\n },\n typeToIndex: function (type) {\n switch (this.options.type) {\n case 'scheduling':\n return 0;\n case 'locations':\n return 1;\n case 'sites':\n return 2;\n }\n return 0;\n },\n render: function () {\n oldView.prototype.render.apply(this, arguments);\n if (service.isVariation() && this.isSupportedType()) {\n this.$el.width(580);\n this.$('.features').unslider({\n infinite: true,\n autoplay: true,\n arrows: false,\n index: this.typeToIndex(this.options.type),\n speed: 375,\n });\n }\n return this;\n }\n });\n }\n\n function track(action, attributes) {\n var account = service.getAccount();\n var user = service.getUser();\n\n var props = _.extend({\n experimentId: service.id,\n experimentName: service.name,\n variation: service.getVariation(),\n action: action,\n version: service.version,\n featureRequested: null,\n }, attributes);\n\n if (mercury) {\n mercury.track(service.mercuryEventId, props);\n }\n\n if (window.LogRocket) { // only available in production\n window.LogRocket.track([service.mercuryEventId, service.getVariation(), action].join('::'));\n }\n }\n\n function waitFor(test, callback, timeout, maxTries, tries) {\n maxTries = maxTries || 50;\n tries = tries || 0;\n timeout = timeout || 50;\n\n if (test()) {\n callback();\n return;\n }\n if (tries > maxTries) {\n return;\n }\n tries++;\n setTimeout(function () {\n waitFor(test, callback, timeout, maxTries, tries);\n }, timeout);\n }\n\n /* jshint ignore:start */\n // unslider\n !function(t){\"object\"==typeof module&&\"object\"==typeof module.exports?t(require(\"jquery\")):\"function\"==typeof define&&define.amd?define([],t(window.jQuery)):t(window.jQuery)}(function(t){if(!t)return console.warn(\"Unslider needs jQuery\");t.Unslider=function(n,e){var i=this;return i._=\"unslider\",i.defaults={autoplay:!1,delay:3e3,speed:750,easing:\"swing\",keys:{prev:37,next:39},nav:!0,arrows:{prev:'Prev',next:'Next'},animation:\"horizontal\",selectors:{container:\"ul:first\",slides:\"li\"},animateHeight:!1,activeClass:i._+\"-active\",swipe:!0,swipeThreshold:.2},i.$context=n,i.options={},i.$parent=null,i.$container=null,i.$slides=null,i.$nav=null,i.$arrows=[],i.total=0,i.current=0,i.prefix=i._+\"-\",i.eventSuffix=\".\"+i.prefix+~~(2e3*Math.random()),i.interval=[],i.init=function(n){return i.options=t.extend({},i.defaults,n),i.$container=i.$context.find(i.options.selectors.container).addClass(i.prefix+\"wrap\"),i.$slides=i.$container.children(i.options.selectors.slides),i.setup(),t.each([\"nav\",\"arrows\",\"keys\",\"infinite\"],function(n,e){i.options[e]&&i[\"init\"+t._ucfirst(e)]()}),jQuery.event.special.swipe&&i.options.swipe&&i.initSwipe(),i.options.autoplay&&i.start(),i.calculateSlides(),i.$context.trigger(i._+\".ready\"),i.animate(i.options.index||i.current,\"init\")},i.setup=function(){i.$context.addClass(i.prefix+i.options.animation).wrap(''),i.$parent=i.$context.parent(\".\"+i._),\"static\"===i.$context.css(\"position\")&&i.$context.css(\"position\",\"relative\"),i.$context.css(\"overflow\",\"hidden\")},i.calculateSlides=function(){if(i.$slides=i.$container.children(i.options.selectors.slides),i.total=i.$slides.length,\"fade\"!==i.options.animation){var t=\"width\";\"vertical\"===i.options.animation&&(t=\"height\"),i.$container.css(t,100*i.total+\"%\").addClass(i.prefix+\"carousel\"),i.$slides.css(t,100/i.total+\"%\")}},i.start=function(){return i.interval.push(setTimeout(function(){i.next()},i.options.delay)),i},i.stop=function(){for(var t;t=i.interval.pop();)clearTimeout(t);return i},i.initNav=function(){var n=t('');i.$slides.each(function(e){var o=this.getAttribute(\"data-nav\")||e+1;t.isFunction(i.options.nav)&&(o=i.options.nav.call(i.$slides.eq(e),e,o)),n.children(\"ol\").append('