window.CTCTRum_SpaType = 'backbone'; // Protection for distui being ready before anything else. requirejs(r_config, ['jquery'], function ($) { window.distuiLoadPromise = $.Deferred(); $(document).on('onDistUiAndDomReady', function () { if (window.performance && typeof window.performance.mark === 'function') { window.performance.mark('em-static.distui.ready'); } window.distuiLoadPromise.resolve(window.DistUI); }); }); if (window.performance && typeof window.performance.mark === 'function') { window.performance.mark('em-static.loading'); } requirejs(r_config, [ 'backbone', 'backbone.marionette', 'underscore', '$i18n', 'campaignui', 'em-static', 'moment', 'hypothesis-static', 'preview-test', 'checkmate-static' ], // eslint-disable-next-line no-unused-vars function (Backbone, Marionette, _, $i18n, CampaignUI, EmStaticUI, moment, HypothesisStaticUI) { var app, $, originalLoadUrlFn, logger, rootView; // https://docs.soasta.com/boomerang/#backbone.js function startMpulse(router) { var hadRouteChange = false; router.on('route', function () { hadRouteChange = true; }); function hook() { if (window.BOOMR && BOOMR.version) { if (BOOMR.plugins && BOOMR.plugins.Backbone) { BOOMR.plugins.Backbone.hook(router, hadRouteChange); } return true; } } if (!hook()) { if (document.addEventListener) { document.addEventListener('onBoomerangLoaded', hook); } else if (document.attachEvent) { document.attachEvent('onpropertychange', function (e) { e = e || window.event; if (e && e.propertyName === 'onBoomerangLoaded') { hook(); } }); } } } if (window.performance && typeof window.performance.mark === 'function') { window.performance.mark('em-static.dependencies.loaded'); } function trackIfEditor(clickActionName) { if (EmStaticUI.Helpers.WindowLocation.isInEditor()) { CampaignUI.Helpers.DistUI.track({ action: clickActionName, info: { _sctLinkLocation: 'editor' } }); } } $ = Backbone.$; window.moment = moment; rootView = new EmStaticUI.Views.RootView(); app = new Backbone.Marionette.Application({ region: '#root_layout', onBeforeStart: function () { app.Router = new EmStaticUI.Controllers.AppRouter({ controller: new EmStaticUI.Controllers.RouteController({ app: app, rootView: rootView }), appRoutes: { 'hello/:type': 'hello', 'accountSetting/:settingName': 'accountSetting', 'create/template/:templateId(/campaignType/:campaignType)(/adopter/:adopter)(/campaignId/:campaignId)(/name/:name)(/startOn/:startOn)(/note/:note)(/lists/:lists)(/stepId/:stepId)': 'create', 'create/template/:templateId(/campaignType/:campaignType)(/adopter/:adopter)(/campaignId/)': 'create', 'copy/activity/:activityId(/campaignType/:campaignType)(/adopter/:adopter)(/campaignId/:campaignId)(/name/:name)(/startOn/:startOn)(/lists/:lists)': 'copy', 'edit/activity/:activityId(/adopter/:adopter)': 'edit', 'edit/external/:externalId(/adopter/:adopter)': 'editExternal', 'schedule/activity/:activityId(/adopter/:adopter)': 'schedule', 'details/activity/:activityId(/adopter/:adopter)(/msg/:msgKey)': 'details', 'details/activity/:activityId(/adopter/:adopter)/msg/': 'details', 'clickreport/activity/:activityId': 'click_report', 'runhistory/activity/:activityId(/adopter/:adopter)': 'run_history', prerender: 'prerender', 'templates/campaignType/:campaignType(/adopter/:adopter)(/campaignId/:campaignId)(/tags/:searchTags)(/tab/:tabName)(/dropdown/:dropdownName)(/view/:packageName)(/name/:name)(/startOn/:startOn)(/note/:note)(/lists/:lists)(/stepId/:stepId)': 'templates', 'error/(:reason)': 'error', '*path': 'error' } }); }, onStart: function () { Backbone.history.start(); if (window.performance && typeof window.performance.mark === 'function') { window.performance.mark('em-static.app.start.history'); } startMpulse(app.Router); this.showView(rootView); } }); window.app = app; logger = CampaignUI.Helpers.Logger(); if (window.location.search.indexOf('debug') >= 0) { logger = CampaignUI.Helpers.Logger(true); } originalLoadUrlFn = Backbone.history.loadUrl; Backbone.history.loadUrl = function () { trackIfEditor('using Backbone to change page'); if (EmStaticUI.Helpers.PageState.hasChanges()) { if (window.confirm($.i18n('unsaved_changes_text'))) { trackIfEditor('left editor page - confirmed dialog'); return originalLoadUrlFn.apply(this, arguments); } /* In this case, the use has already changed the hash on the URL and we want to replace it with the hash they were previously at */ window.location.hash = '#' + Backbone.history.fragment; return false; } trackIfEditor('left editor page - no dialog'); return originalLoadUrlFn.apply(this, arguments); }; $(window).on('beforeunload', function () { if (EmStaticUI.Helpers.PageState.hasChanges()) { /* returning anything that is not undefined will trigger the browsers "stay or leave" dialog, even a false. */ trackIfEditor('considering leaving editor page - dialog showing'); return false; } }); $(window).on('unload', function () { trackIfEditor('left editor page'); }); function startApp() { var isToolkitUser; if (window.performance && typeof window.performance.mark === 'function') { window.performance.mark('em-static.app.start'); } $(document.body).attr('data-statsd-appname', 'em-ui'); // User Environment is looking to Distui to know whether the user is a toolkit user or not // it's possible that distui will not have this information at the time of lookup, // in the case we'll default to true. isToolkitUser = EmStaticUI.Helpers.UserEnvironment.isToolkitUser(); if (isToolkitUser === undefined) { isToolkitUser = true; } $(document.body).attr('data-statsd-toolkit', isToolkitUser); $('body').append('
'); // $.i18n().debug = true; if (!_.isUndefined(window.emui_i18n)) { EmStaticUI.Helpers.i18n.load('emui_i18n', window.emui_i18n); } else { logger.warn('i18n page settings missing.'); } $.ajaxPrefilter(function (options, originalOptions, jqXHR) { // CSRF is not required on retrieves. if ((options.type || '').toLowerCase() !== 'get') { jqXHR.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content')); } }); $(document).on('galileoEditorInitializing', function () { Backbone.trigger('loadingIndicator:show'); }); $(document).on('galileoEditorReady galileoEditorInitializingFailed', function () { Backbone.trigger('loadingIndicator:hide'); }); $(document).on('galileoEditorInitializingFailed', function (event, errorInfo) { var route = 'error'; if (errorInfo && errorInfo.name === 'UnsupportedBrowser') { route = 'error/unsupportedbrowser'; } app.Router.navigate(route, { trigger: true, replace: true }); }); app.start(); } window.distuiLoadPromise.done(function () { CampaignUI.Helpers.DistUI.lib(window.DistUI); CampaignUI.Helpers.DistUI.instance(window.DistUI.instance); startApp(); }); } );