{"version":3,"file":"js/application-6930a2600414631e47ab.js","mappings":"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","sources":["webpack://singletrack-portal/./app/assets/images/liquid/ sync ^\\.\\/.*$","webpack://singletrack-portal/./app/assets/images/ sync ^\\.\\/.*$","webpack://singletrack-portal/./app/components/ sync ^\\.\\/.*\\.js$","webpack://singletrack-portal/./app/assets/javascripts/component_locator.js","webpack://singletrack-portal/./app/assets/javascripts/offline_handler.js","webpack://singletrack-portal/./app/assets/javascripts/component_builder.js","webpack://singletrack-portal/./app/assets/javascripts/router.js","webpack://singletrack-portal/./app/assets/packs/application.js","webpack://singletrack-portal/./app/assets/javascripts/configuration.js.erb","webpack://singletrack-portal/./app/components/about_us/about_us.js","webpack://singletrack-portal/./app/components/actions/download_documents/download_documents.js","webpack://singletrack-portal/./app/components/actions/filter_button/filter_button.js","webpack://singletrack-portal/./app/components/actions/save_subscriptions/save_subscriptions.js","webpack://singletrack-portal/./app/components/actions/scroll_button/scroll_button.js","webpack://singletrack-portal/./app/components/actions/toggle_sidebar/toggle_sidebar.js","webpack://singletrack-portal/./app/components/ajax_error/ajax_error.js","webpack://singletrack-portal/./app/components/available_products/available_products.js","webpack://singletrack-portal/./app/components/base_component/base_component.js","webpack://singletrack-portal/./app/components/carosel/carosel.js","webpack://singletrack-portal/./app/components/change_password/change_password.js","webpack://singletrack-portal/./app/components/confirmation/confirmation.js","webpack://singletrack-portal/./app/components/consent_banner/consent_banner.js","webpack://singletrack-portal/./app/components/contact_actions/contact_actions.js","webpack://singletrack-portal/./app/components/contact_us/contact_us.js","webpack://singletrack-portal/./app/components/custom_dashboard/custom_dashboard.js","webpack://singletrack-portal/./app/components/data_table/__test/stubs/dt_stub.js","webpack://singletrack-portal/./app/components/data_table/data_table.js","webpack://singletrack-portal/./app/components/data_table/filter_context.js","webpack://singletrack-portal/./app/components/data_table/filters/base_filter.js","webpack://singletrack-portal/./app/components/data_table/filters/date_range.js","webpack://singletrack-portal/./app/components/data_table/filters/search.js","webpack://singletrack-portal/./app/components/data_table/filters/tag_search.js","webpack://singletrack-portal/./app/components/data_table/formatters.js","webpack://singletrack-portal/./app/components/data_table/formatters/class_name.js","webpack://singletrack-portal/./app/components/data_table/formatters/date_format.js","webpack://singletrack-portal/./app/components/data_table/formatters/order.js","webpack://singletrack-portal/./app/components/data_table/formatters/orderable.js","webpack://singletrack-portal/./app/components/data_table/formatters/preview.js","webpack://singletrack-portal/./app/components/data_table/formatters/rating.js","webpack://singletrack-portal/./app/components/data_table/formatters/roadshow_request_slot.js","webpack://singletrack-portal/./app/components/data_table/formatters/style.js","webpack://singletrack-portal/./app/components/dialogue/dialogue.js","webpack://singletrack-portal/./app/components/filter_panel/filter_panel.js","webpack://singletrack-portal/./app/components/filter_panel/tag_section.js","webpack://singletrack-portal/./app/components/footer/footer.js","webpack://singletrack-portal/./app/components/grid_view_page/grid_view_page.js","webpack://singletrack-portal/./app/components/hero/hero.js","webpack://singletrack-portal/./app/components/layouts/tabs/tabs.js","webpack://singletrack-portal/./app/components/layouts/tile/tile.js","webpack://singletrack-portal/./app/components/loading/loading.js","webpack://singletrack-portal/./app/components/modal/modal.js","webpack://singletrack-portal/./app/components/navbar/navbar.js","webpack://singletrack-portal/./app/components/pages/preference_center/preference_center.js","webpack://singletrack-portal/./app/components/pages/register/register.js","webpack://singletrack-portal/./app/components/research_document_summary/research_document_summary.js","webpack://singletrack-portal/./app/components/reset_password/reset_password.js","webpack://singletrack-portal/./app/components/roadshow_calendar/roadshow_calendar.js","webpack://singletrack-portal/./app/components/roadshow_details/roadshow_details.js","webpack://singletrack-portal/./app/components/roadshow_request/roadshow_request.js","webpack://singletrack-portal/./app/components/roadshow_slots/roadshow_slots.js","webpack://singletrack-portal/./app/components/scorecard/scorecard.js","webpack://singletrack-portal/./app/components/scripts/favourite_tag_handler/favourite_tag_handler.js","webpack://singletrack-portal/./app/components/scripts/validate_password/validate_password.js","webpack://singletrack-portal/./app/components/search_bar/search_bar.js","webpack://singletrack-portal/./app/components/tabbed_data_table/tabbed_data_table.js","webpack://singletrack-portal/./app/components/team/team.js","webpack://singletrack-portal/./app/components/user_panel/user_panel.js","webpack://singletrack-portal/./app/components/video/video.js","webpack://singletrack-portal/./app/components/video/video_event_handler.js","webpack://singletrack-portal/./app/components/your_research/your_research.js"],"sourcesContent":["var map = {\n\t\"./bg-bottom-cover\": 4233,\n\t\"./bg-bottom-cover.jpg\": 4233,\n\t\"./bg-top-cover\": 4927,\n\t\"./bg-top-cover.jpg\": 4927,\n\t\"./bottom-angle\": 9817,\n\t\"./bottom-angle.png\": 9817,\n\t\"./calendar-icon\": 6224,\n\t\"./calendar-icon.png\": 6224,\n\t\"./caret-down\": 7528,\n\t\"./caret-down.png\": 7528,\n\t\"./caret-up\": 5687,\n\t\"./caret-up.png\": 5687,\n\t\"./contact-icon\": 996,\n\t\"./contact-icon.png\": 996,\n\t\"./event-icon\": 2144,\n\t\"./event-icon.png\": 2144,\n\t\"./logo\": 5843,\n\t\"./logo-bottom\": 2739,\n\t\"./logo-bottom.png\": 2739,\n\t\"./logo.png\": 5843,\n\t\"./summary-icon\": 5708,\n\t\"./summary-icon.png\": 5708,\n\t\"./top-angle\": 3719,\n\t\"./top-angle.png\": 3719\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 319;","var map = {\n\t\"./arete-logo\": 2840,\n\t\"./arete-logo.png\": 2840,\n\t\"./arete-logomark\": 2855,\n\t\"./arete-logomark.png\": 2855,\n\t\"./arete-roadshow-logo\": 1962,\n\t\"./arete-roadshow-logo.jpg\": 1962,\n\t\"./contact-us-img\": 3898,\n\t\"./contact-us-img.png\": 3898,\n\t\"./default-thumbnail\": 4185,\n\t\"./default-thumbnail.png\": 4185,\n\t\"./doctype-image\": 9907,\n\t\"./doctype-image.png\": 9907,\n\t\"./ellipse-1\": 5789,\n\t\"./ellipse-1.png\": 5789,\n\t\"./ellipse-2\": 4022,\n\t\"./ellipse-2.png\": 4022,\n\t\"./ellipse-3\": 7823,\n\t\"./ellipse-3.png\": 7823,\n\t\"./ellipse-4\": 9792,\n\t\"./ellipse-4.png\": 9792,\n\t\"./ellipse-5\": 3993,\n\t\"./ellipse-5.png\": 3993,\n\t\"./ellipse-6\": 5810,\n\t\"./ellipse-6.png\": 5810,\n\t\"./ellipse-7\": 7355,\n\t\"./ellipse-7.png\": 7355,\n\t\"./ellipse-8\": 3340,\n\t\"./ellipse-8.png\": 3340,\n\t\"./favicon.ico\": 4791,\n\t\"./favicon4\": 2349,\n\t\"./favicon4.png\": 2349,\n\t\"./header-motif\": 6984,\n\t\"./header-motif.png\": 6984,\n\t\"./hero\": 9877,\n\t\"./hero-image\": 8341,\n\t\"./hero-image.jpg\": 8341,\n\t\"./hero.jpg\": 9877,\n\t\"./intro-splash\": 1671,\n\t\"./intro-splash.png\": 1671,\n\t\"./liquid/bg-bottom-cover\": 4233,\n\t\"./liquid/bg-bottom-cover.jpg\": 4233,\n\t\"./liquid/bg-top-cover\": 4927,\n\t\"./liquid/bg-top-cover.jpg\": 4927,\n\t\"./liquid/bottom-angle\": 9817,\n\t\"./liquid/bottom-angle.png\": 9817,\n\t\"./liquid/calendar-icon\": 6224,\n\t\"./liquid/calendar-icon.png\": 6224,\n\t\"./liquid/caret-down\": 7528,\n\t\"./liquid/caret-down.png\": 7528,\n\t\"./liquid/caret-up\": 5687,\n\t\"./liquid/caret-up.png\": 5687,\n\t\"./liquid/contact-icon\": 996,\n\t\"./liquid/contact-icon.png\": 996,\n\t\"./liquid/event-icon\": 2144,\n\t\"./liquid/event-icon.png\": 2144,\n\t\"./liquid/logo\": 5843,\n\t\"./liquid/logo-bottom\": 2739,\n\t\"./liquid/logo-bottom.png\": 2739,\n\t\"./liquid/logo.png\": 5843,\n\t\"./liquid/summary-icon\": 5708,\n\t\"./liquid/summary-icon.png\": 5708,\n\t\"./liquid/top-angle\": 3719,\n\t\"./liquid/top-angle.png\": 3719,\n\t\"./logo-nimbus-mini\": 3197,\n\t\"./logo-nimbus-mini.png\": 3197,\n\t\"./logo-x\": 8755,\n\t\"./logo-x.png\": 8755,\n\t\"./map-ny\": 69,\n\t\"./map-ny.png\": 69,\n\t\"./map-uk\": 2562,\n\t\"./map-uk.png\": 2562,\n\t\"./mobile\": 2367,\n\t\"./mobile.png\": 2367,\n\t\"./navbar-header\": 2805,\n\t\"./navbar-header.png\": 2805,\n\t\"./nimbus-login-image\": 243,\n\t\"./nimbus-login-image.png\": 243,\n\t\"./nimbus-login-img\": 2165,\n\t\"./nimbus-login-img.png\": 2165,\n\t\"./nimbus-securities-logo\": 4270,\n\t\"./nimbus-securities-logo-invert\": 3518,\n\t\"./nimbus-securities-logo-invert.png\": 3518,\n\t\"./nimbus-securities-logo-rehash\": 3682,\n\t\"./nimbus-securities-logo-rehash.png\": 3682,\n\t\"./nimbus-securities-logo.png\": 4270,\n\t\"./research-image\": 2474,\n\t\"./research-image-2\": 2179,\n\t\"./research-image-2.png\": 2179,\n\t\"./research-image.png\": 2474,\n\t\"./research_document_cover\": 2720,\n\t\"./research_document_cover.png\": 2720,\n\t\"./roadshows/bg-bottom-cover\": 4789,\n\t\"./roadshows/bg-bottom-cover.jpg\": 4789,\n\t\"./roadshows/bg-top-cover\": 2651,\n\t\"./roadshows/bg-top-cover.jpg\": 2651,\n\t\"./roadshows/bottom-angle\": 2973,\n\t\"./roadshows/bottom-angle.png\": 2973,\n\t\"./roadshows/calendar-icon\": 9652,\n\t\"./roadshows/calendar-icon.png\": 9652,\n\t\"./roadshows/caret-down\": 1188,\n\t\"./roadshows/caret-down.png\": 1188,\n\t\"./roadshows/caret-up\": 2395,\n\t\"./roadshows/caret-up.png\": 2395,\n\t\"./roadshows/top-angle\": 5835,\n\t\"./roadshows/top-angle.png\": 5835,\n\t\"./st_icons/client-actions\": 5204,\n\t\"./st_icons/client-actions.svg\": 5204,\n\t\"./st_icons/client-activities\": 8696,\n\t\"./st_icons/client-activities.svg\": 8696,\n\t\"./themes-header\": 8185,\n\t\"./themes-header.png\": 8185,\n\t\"./totem-splash\": 552,\n\t\"./totem-splash.png\": 552\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2672;","var map = {\n\t\"./about_us/about_us.js\": 3027,\n\t\"./actions/download_documents/download_documents.js\": 4197,\n\t\"./actions/filter_button/filter_button.js\": 2885,\n\t\"./actions/save_subscriptions/save_subscriptions.js\": 7187,\n\t\"./actions/scroll_button/scroll_button.js\": 1137,\n\t\"./actions/toggle_sidebar/toggle_sidebar.js\": 1909,\n\t\"./ajax_error/ajax_error.js\": 1817,\n\t\"./available_products/available_products.js\": 9707,\n\t\"./base_component/base_component.js\": 9517,\n\t\"./carosel/carosel.js\": 5773,\n\t\"./change_password/change_password.js\": 3961,\n\t\"./confirmation/confirmation.js\": 7405,\n\t\"./consent_banner/consent_banner.js\": 541,\n\t\"./contact_actions/contact_actions.js\": 6709,\n\t\"./contact_us/contact_us.js\": 7053,\n\t\"./custom_dashboard/custom_dashboard.js\": 3023,\n\t\"./data_table/__test/stubs/dt_stub.js\": 4956,\n\t\"./data_table/data_table.js\": 1649,\n\t\"./data_table/filter_context.js\": 9788,\n\t\"./data_table/filters/base_filter.js\": 6020,\n\t\"./data_table/filters/date_range.js\": 1180,\n\t\"./data_table/filters/search.js\": 7586,\n\t\"./data_table/filters/tag_search.js\": 3743,\n\t\"./data_table/formatters.js\": 9313,\n\t\"./data_table/formatters/class_name.js\": 8526,\n\t\"./data_table/formatters/date_format.js\": 4400,\n\t\"./data_table/formatters/order.js\": 9694,\n\t\"./data_table/formatters/orderable.js\": 14,\n\t\"./data_table/formatters/preview.js\": 7910,\n\t\"./data_table/formatters/rating.js\": 4269,\n\t\"./data_table/formatters/roadshow_request_slot.js\": 6968,\n\t\"./data_table/formatters/style.js\": 4339,\n\t\"./dialogue/dialogue.js\": 8187,\n\t\"./filter_panel/filter_panel.js\": 8121,\n\t\"./filter_panel/tag_section.js\": 2160,\n\t\"./footer/footer.js\": 1513,\n\t\"./grid_view_page/grid_view_page.js\": 3663,\n\t\"./hero/hero.js\": 6067,\n\t\"./layouts/tabs/tabs.js\": 9995,\n\t\"./layouts/tile/tile.js\": 871,\n\t\"./loading/loading.js\": 409,\n\t\"./modal/modal.js\": 2617,\n\t\"./navbar/navbar.js\": 6687,\n\t\"./pages/preference_center/preference_center.js\": 9654,\n\t\"./pages/register/register.js\": 3138,\n\t\"./research_document_summary/research_document_summary.js\": 3789,\n\t\"./reset_password/reset_password.js\": 9805,\n\t\"./roadshow_calendar/roadshow_calendar.js\": 8465,\n\t\"./roadshow_details/roadshow_details.js\": 9887,\n\t\"./roadshow_request/roadshow_request.js\": 5981,\n\t\"./roadshow_slots/roadshow_slots.js\": 8045,\n\t\"./scorecard/scorecard.js\": 4149,\n\t\"./scripts/favourite_tag_handler/favourite_tag_handler.js\": 3642,\n\t\"./scripts/validate_password/validate_password.js\": 1802,\n\t\"./search_bar/search_bar.js\": 3091,\n\t\"./tabbed_data_table/tabbed_data_table.js\": 5201,\n\t\"./team/team.js\": 2685,\n\t\"./user_panel/user_panel.js\": 4227,\n\t\"./video/video.js\": 5485,\n\t\"./video/video_event_handler.js\": 7977,\n\t\"./your_research/your_research.js\": 6761\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7343;","// @flow\nimport camelCase from 'lodash-es/camelCase';\nimport upperFirst from 'lodash-es/upperFirst';\nimport BaseComponent from '../../components/base_component/base_component';\n\nclass ComponentLocator {\n    componentFactories: Map<string, (number, string, any) => BaseComponent>;\n    componentsById: Map<number, BaseComponent>;\n    componentsByName: Map<string, Array<BaseComponent>>;\n    functions: {[string]: Function}\n    f: {[string]: Function}\n    functionList: Map<string, Function[]>\n    awaiters: Array<() => void>;\n    _loaded: boolean;\n\n    constructor() {\n        this.awaiters = [];\n        this.clear();\n    }\n\n    clear() {\n        this.componentFactories = new Map();\n        let componentsById = this.componentsById = new Map();\n        let componentsByName = this.componentsByName = new Map();\n        this.functions = {};\n        window._functions = this.f = this.functions;\n        this.functionList = new Map();\n        window.getComponent = (id: Number | any) => {\n            if (typeof(id) === 'object') {\n                id = $(id).closest('.wrapper').attr('data-component-id');\n                return componentsById.get(id) || componentsById.get(parseInt(id));\n            } else if(isNaN(id)) {\n                let components = (componentsByName.get(id) || [null]);\n                if (components.length !== 1) {\n                    throw `Expected 1 component and found ${components.length}`;\n                }\n                return components[0];\n            }\n            return componentsById.get(id);\n        }\n        this._loaded = false;\n    }\n\n    /**\n     * Sets whether the components are all loaded. Should be set to true only once\n     * @param isLoaded Whether the component is loaded.\n     */\n    set loaded(isLoaded: boolean) {\n        if (isLoaded && this._loaded) return;\n\n        this._loaded = isLoaded;\n        if (isLoaded) {\n            this.awaiters.forEach(awaiter => awaiter());\n            this.awaiters = [];\n            for(let componentId of (window.__componentAdapter.latestBatch || [])) {\n                let component = this.componentsById[componentId];\n                component && component.onReady();\n            };\n            if (!this.f.handleAjaxError) return;\n\n            window.__componentAdapter.ajaxErrors.forEach(e => {\n                this.f.handleAjaxError(...e)\n            });\n        }\n    }\n\n    get loaded(): boolean {\n        return this._loaded;\n    }\n\n    async waitUntilLoaded() {\n        if (this._loaded) return;\n\n        return new Promise(resolve => this.awaiters.push(resolve));\n    }\n\n    registerComponentFactory(name: string, factory: (number, any) => BaseComponent) {\n        this.componentFactories.set(upperFirst(camelCase(name)), factory);\n    }\n\n    createComponent(id: number, name: string, options: any, extra_params: any, jsc: ?string) {\n        let component = this.getFactory(name, jsc)(id, options, extra_params);\n        if (!(component instanceof BaseComponent)) return;\n        \n        this.componentsById.set(id, component);\n        let existingComponents = this.componentsByName.get(name);\n        if (existingComponents) {\n            existingComponents.push(component);\n        } else {\n            this.componentsByName.set(name, [component]);\n        }\n        let functions = component.functions();\n        Object.keys(functions).forEach(func => {\n            this.addFunction(func, functions[func]);\n        })\n        return component;\n    }\n\n    async deleteComponent(id: number) {\n        let component: any = this.componentsById.get(id);\n        if (!component) return;\n\n        this.componentsById.delete(id);\n        let byName = this.componentsByName.get(component.component_name) || [];\n        byName.splice(byName.indexOf(component), 1);\n\n        let functions = component.functions();\n        Object.keys(functions).forEach(func => {\n            let functions = this.functionList.get(func) || [];\n            functions.splice(functions.indexOf(component), 1);\n        })\n        if (component.finalize.then) {\n            await component.finalize();\n        } else {\n            component.finalize();\n        }\n    }\n\n    addFunction(name: string, f: Function) {\n        if (!this.functionList.get(name)) {\n            this.functionList.set(name, []);\n        }\n        (this.functionList.get(name) || []).push(f);\n        this.functions[name] = async (...args: any[]) => {\n            await this.waitUntilLoaded();\n            return (this.functionList.get(name) || []).map(f => f(...args));\n        }\n    }\n\n    getFactory(name: string, fallbackClass: ?string): (number, any, any) => BaseComponent {\n        let titleizedName = upperFirst(camelCase(name));\n\n        let factory = this.componentFactories.get(titleizedName);\n        if (!factory) {\n            fallbackClass = fallbackClass || 'base_component/base_component';\n            let constructor = require(`../../components/${fallbackClass}.js`);\n\n            factory = (id, options, extra_params) => new constructor.default(id, name, options, extra_params);\n            this.componentFactories.set(titleizedName, factory);\n        }\n        return factory;\n    }\n \n    async getById(componentId: number): Promise<?any> {\n        await this.waitUntilLoaded();\n        \n        return this.componentsById.get(componentId);\n    }\n\n    async getAll(componentName: string): Promise<Array<any>> {\n        await this.waitUntilLoaded();\n\n        return this.componentsByName.get(componentName) || [];\n    }\n\n    async getSingle(componentName: string): Promise<any> {\n        await this.waitUntilLoaded();\n\n        let allComponents: ?Array<BaseComponent> = await this.getAll(componentName);\n        if (!allComponents || allComponents.length === 0) {\n            throw 'Could not find a component with name ' + componentName;\n        }\n\n        if (allComponents.length > 1) {\n            throw 'Found multiple components with name ' + componentName;\n        }\n        return allComponents[0];\n    }\n}\n\nexport default new ComponentLocator();\n","import componentLocator from './component_locator';\nimport useServiceWorker from './configuration.js.erb';\n\nconst PAGES = 'pages-v0'; // match this with service_worker.js\nconst BACKUP = 'backup-v0'; // match this with service_worker.js\nconst POST_REQUESTS = 'post-v0';\n\n// TODO for the future:\n// Pre-load everything in install step.\n// What to do with modals?\n// Your Research Suggestions\n\nvar handlingPostRequests = false; // Effectively a mutex.\nclass OfflineHandler {\n    initialize() {\n        if (!useServiceWorker) return;\n\n        $(window).on('offline', () => {\n            this.toggleOfflineClass(false);\n            if (componentLocator.f.onOffline) componentLocator.f.onOffline();\n        });\n        $(window).on('online', () => {\n            this.toggleOfflineClass(true);\n            this.handlePostRequests();\n            if (componentLocator.f.onOnline) componentLocator.f.onOnline();\n        });\n        this.toggleOfflineClass(navigator.onLine)\n        $('body').toggleClass('online', navigator.onLine);\n        $('body').toggleClass('offline', !navigator.onLine);\n        componentLocator.waitUntilLoaded().then(() => this.handlePostRequests());\n\n        // We cache the page's components if they aren't already stored.\n        if (window.caches) this.cacheComponents();\n    }\n\n    toggleOfflineClass(isOnline) {\n        $('body').toggleClass('online', isOnline);\n        $('body').toggleClass('offline', !isOnline);\n    }\n\n    async cacheComponents() {\n        const path = `${location.protocol}//${location.host}${location.pathname}`\n        const compPath = `${location.protocol}//${location.host}/components${location.pathname}`\n\n        if (await caches.match(compPath)) return;\n        if (!(await caches.match(path))) return;\n\n        const cache = await caches.open(PAGES);\n        await cache.put(compPath, new Response(JSON.stringify(window.components)));\n    }\n\n    async getCachedPages() {\n        return (await this._listCachedPages(PAGES))\n            .concat(await this._listCachedPages(BACKUP));\n    }\n\n    async _listCachedPages(cache_name) {\n        const cache = await caches.open(cache_name);\n        const keys = await cache.keys();\n        return keys.map(key => typeof(key) === 'string' ? key : key.url)\n            .filter(key => key.includes('/components/'))\n            .map(key => {\n                let parts = key.split('/');\n                return parts[parts.length - 1];\n            });\n    }\n\n    async clearCaches() { // Mainly helpful for debugging. Clears *all* caches.\n        const cacheNames = await caches.keys();\n        return Promise.all(cacheNames.map(async cacheName => {\n            const cache = await caches.open(cacheName);\n            const cacheKeys = await cache.keys();\n            return Promise.all(cacheKeys.map(async key => cache.delete(key)));\n        }));\n    }\n\n    async handlePostRequests() {\n        if (handlingPostRequests) return;\n\n        handlingPostRequests = true;\n        let cache = await caches.open(POST_REQUESTS);\n        let keys = await cache.keys();\n        await Promise.all(keys.map(async key => {\n            let response = await cache.match(key);\n            let {headers, body} = await response.json();\n            await this.deferrablePost(key.url, body, headers);\n            await cache.delete(key);\n        }));\n        handlingPostRequests = false;\n    }\n\n    // Sends a post request if online, otherwise defers it. Type must be JSON.\n    // Returns a promise, which yields true if the post was deferred, else false.\n    // Discards the response body (as this cannot be effectively deferred).\n    deferrablePost(uri, body, headers={}) {\n        return new Promise(resolve => {\n            if (navigator.onLine || !('serviceWorker' in navigator)) {\n                $.ajax({\n                    type: \"POST\",\n                    url: uri,\n                    data: JSON.stringify(body),\n                    dataType: 'json',\n                    contentType: 'application/json',\n                    headers: headers\n                }).always(() => resolve(false));\n            } else {\n                caches.open(POST_REQUESTS).then(cache => \n                    cache.put(uri, new Response(JSON.stringify({headers: headers, body: body})))\n                ).then(() => resolve(true));\n            }\n        });\n\n    }\n}\n\nconst handler = new OfflineHandler();\n// Remove this once development is completed.\n$(document).ready(() => handler && handler.initialize());\nwindow.clearCaches = handler.clearCaches;\n\nexport default handler;\nexport let deferrablePost = handler.deferrablePost;","// @flow\nimport componentLocator from './component_locator';\nimport offlineHandler from './offline_handler';\nimport $ from 'jquery';\nimport jwtDecode from 'jwt-decode';\n\ntype Component = {\n    id: number,\n    name: string,\n    body: string,\n    jsc: string,\n    children: Array<number>,\n    rerender: boolean,\n    options: ({} | string),\n    extra_params: {},\n    subcomponents: Array<Component>\n}\n\nexport default class ComponentBuilder {\n    queued: boolean;\n    active: boolean;\n\n    constructor() {\n        var queued = false;\n        var active = false;\n    }\n\n    getLocator() {\n        return componentLocator;\n    }\n\n    execute() {\n        if (this.active) return this.queued = true;\n        this.active = true;\n        this.buildComponents();\n        this.active = false;\n        if (!this.queued) return;\n        this.queued = false;\n        this.execute();\n    }\n\n    buildComponents() {\n        let components: {[string]: Component} = {}; // Shallow clone.\n        Object.assign(components, window.__componentAdapter.components);\n        \n        let clearedKeys = [];\n        Object.keys(components).forEach(function(id: string) {\n            let component: Component = components[id];\n            let wrapper = document.getElementById(`wrapper_${id}`);\n            if (!wrapper) return;\n\n            this._renderComponent(wrapper, component);\n            clearedKeys.push(id);\n\n            setTimeout(() => this._createComponentObjects(component), 1);\n            this._scrollToElement(window.location.href); // this needs moving.\n        }, this);\n        clearedKeys.forEach(function(key) {\n            delete window.__componentAdapter.components[key];\n        });\n        this.queued = this.queued && clearedKeys.length !== 0;\n    }\n\n    _renderComponent(wrapper: HTMLElement, component: Component) {\n        if (!wrapper.className.includes(component.name.replace(/_/g, '-'))) {\n            let oldClass = component.name.replace('_', '-'); // Compatibility for legacy code.\n            let newClass = component.name.replace(/_/g, '-');\n            wrapper.className = wrapper.className\n                .replace(/[^ ]*-component/, '')\n                .concat(` ${component.name.replace('_', '-')}-component`)\n            if (oldClass != newClass) {\n                wrapper.className = wrapper.className\n                    .concat(` ${component.name.replace(/_/g, '-')}-component`)\n            }\n            \n        }\n\n        wrapper.innerHTML = component.body;\n        (component.children || []).forEach(child => {\n            if($(`#wrapper_${child}`).length > 0) return;\n            window.__componentAdapter.componentsWaiting -= this._countChildren(child);\n        });\n    }\n\n    _createComponentObjects(component: Component) {\n        this._createJavascriptClass(component);\n        (component.subcomponents || []).forEach(this._createJavascriptClass);\n        \n        window.__componentAdapter.componentsWaiting -= 1;\n        this._dispatchRenderEvent(component.id, component.name, component.options, component.extra_params);\n        if (window.__componentAdapter.componentsWaiting == 0) {\n            componentLocator.loaded = true;\n            this._handleJavascriptOnlyComponents();\n        }\n    }\n\n    _createJavascriptClass(component: Component) {\n        if (!component) return;\n        if (typeof(component.options) === 'string') {\n            component.options = jwtDecode(component.options);\n        }\n        let newComponent: any = null;\n        if (component.jsc) {\n            newComponent = componentLocator.createComponent(component.id,\n                component.name, component.options, component.extra_params, component.jsc);\n        } else {\n            newComponent = window.getComponent(component.id);\n        }\n        if (newComponent && newComponent.onLoad) newComponent.onLoad();\n    }\n\n    _handleJavascriptOnlyComponents() {\n        (window.components || [])\n            .filter(c => !c.controller)\n            .forEach(this._createJavascriptClass);\n    }\n\n    _countChildren(componentId: number) {\n        let component = window.__componentAdapter.components[componentId];\n        if (!component) return 0;\n        let result = component.deferred ? 0 : 1;\n\n        component.children.forEach(child => {\n            result += this._countChildren(child)\n        });\n        return result\n    }\n\n    _scrollToElement(location: string) {\n        if (!componentLocator.loaded || !location.includes('#') || location.substr(-1) === '#') return;\n        \n        let $element = $(location.slice(location.indexOf('#')));\n        if ($element.length > 0) {\n            $element[0].scrollIntoView();\n        }\n    }\n\n    _dispatchRenderEvent(id: number, name: string, options: any, extra_params: any) {\n        let renderedEvent: any = new Event('ComponentRendered');\n        renderedEvent.componentId = id;\n        renderedEvent.componentName = name;\n        renderedEvent.options = options;\n        renderedEvent.extra_params = extra_params;\n        document.dispatchEvent(renderedEvent);\n    }\n}\n\nexport function buildComponents() {\n    // offlineHandler.initialize();\n    const componentBuilder = new ComponentBuilder();\n    window.__componentAdapter.runner = componentBuilder;\n    componentBuilder.execute();\n}\n\nwindow.addEventListener('load', function() {\n    buildComponents()\n})\n","// @flow\nimport componentLocator from './component_locator';\nimport useServiceWorker from './configuration.js.erb';\n\ntype Component = {\n    id: number,\n    hash: string,\n    name: string,\n    deferred: boolean,\n    fixed: boolean,\n    children: Array<number>,\n    options: ({} | string),\n    extra_params: {},\n}\n\nlet latestPageRequest = null;\nclass Router {\n    async loadPage(page: string, ids:?Array<Number>=null) {\n        if (!(await this._waitUntilReady())) return Promise.resolve(); // Queue multiple requests.\n\n        return new Promise(resolve => {\n            $.getJSON(`components/${page}`, {}, async (result, _, xhr: any) => {\n                $('meta[name=\"csrf-token\"]').attr('content', xhr.getResponseHeader('x-authenticity-token'));\n                if (useServiceWorker && ('serviceWorker' in navigator)) {\n                    $('body').toggleClass('online', navigator.onLine);\n                    $('body').toggleClass('offline', !navigator.onLine);\n                }\n                await new ComponentReloader(result).reload();\n                await this.updateDocumentMetadata(page);\n                resolve();\n            }).fail(() => {\n                window.location.href = `/${page}`; // Load the page normally.\n            });\n        });\n    }\n\n    async updateDocumentMetadata(page: string) {\n        $(document).attr(\"title\", page.toLowerCase().split('_')\n            .map((str) => str.charAt(0).toUpperCase() + str.substring(1)).join(' ')); \n        \n        let oldBodyClass = $('body').attr('class').split(' ').slice(0, -1).join(' ');\n        $('body').attr('class', `${oldBodyClass} ${page.toLowerCase().replace(' ', '_')}`);\n\n        window.history.pushState({st_async: true}, null, encodeURIComponent(page));\n\n        if (componentLocator.f.selectPage) {\n            await componentLocator.f.selectPage(page);\n        }\n    }\n\n    async _waitUntilReady() {\n        let requestId = Math.random();\n        latestPageRequest = requestId;\n        let fallbackTimer = new Promise(resolve => setTimeout(resolve, 1000))\n\n        // Wait for components to load, or 1 second (whichever comes first).\n        await Promise.race([componentLocator.waitUntilLoaded(), fallbackTimer]);\n        return latestPageRequest = latestPageRequest == requestId;\n    }\n}\n\nclass ComponentReloader {\n    oldComponents: Map<number, Component>;\n    result: Array<Component>;\n    componentsToReload: Set<number>;\n\n    constructor(new_components: Array<Component>) {\n        this.result = new_components;\n        this.oldComponents = this.groupById(window.components);\n        this.componentsToReload = new Set();\n    }\n\n    async reload() {\n        await this.recursiveDelete(0);\n        this.rerender();\n    }\n\n    rerender() {\n        window.__componentAdapter.fragments = window.__componentAdapter.fragments || {}; // TODO: Move to the end.\n        window.components = this.result;\n        window.__componentAdapter.componentsWaiting = 0;\n        window.__componentAdapter.render(0, false);\n    }\n\n    async recursiveDelete(id: number) {\n        let component: any = this.oldComponents.get(id);\n        component.children.forEach(child => this.recursiveDelete(child));\n        await componentLocator.deleteComponent(component.id);\n        // window.__componentAdapter.fragments[component.hash] = [\n        //     component.children,  $(`#wrapper_${component.id}`).html()\n        // ];\n        $(`#wrapper_${component.id}`).html('');\n        // // close but wrong\n        // if (id !== 0 && window.__componentAdapter.fragments[component.hash]) {\n        //     $(`#wrapper_${component.id}`).find('div[id^=\"wrapper_\"]').each(function() { this.id = `_${this.id}`});\n        //     $(`#wrapper_${component.id}`).attr('id', `_wrapper_${component.id}`);\n        // } else {\n        //     $(`#wrapper_${component.id}`).html('');\n        // }\n    }\n\n    groupById(items: Array<Component>): Map<number, Component> {\n        return items.reduce((map, e) => map.set(e.id, e), new Map());\n    }\n}\n\nexport default new Router();","import {} from 'jquery-ujs'\n\nimport 'jquery';\nimport 'jquery-ui/ui/widgets/accordion';\nwindow.$ = $;\n\nimport 'bootstrap-sass/assets/javascripts/bootstrap';\nimport '@fortawesome/fontawesome-free/css/all.css'; // This is huge, we should import specific icons.\nimport '../stylesheets/application.scss';\n\nimport BaseComponent from '../../components/base_component/base_component';\nwindow.BaseComponent = BaseComponent;\nimport '../javascripts/offline_handler';\nimport '../javascripts/component_builder';\nimport router from '../javascripts/router';\nwindow.loadPage = router.loadPage.bind(router);\n\nimport '../images/header-motif.png';\n\nrequire.context('../images', true)\n\nlet result = false;\nif (result) {\n    let logo = 'logo.png';\n    require(`../images/liquid/${logo}`); // Forces webpack to pack entire liquid folder.\n}\n","const useServiceWorker = false && ('serviceWorker' in navigator);\nexport default useServiceWorker;","//@flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class AboutUs extends BaseComponent {\n\n    constructor(id: number, component_name: string) {\n        super(id, component_name);\n        this.navActivate();\n    }\n\n    navActivate() {\n        $(this.component).find('.holder-about .nav-open').click(function (){\n            if ($(this).hasClass('rotate-180')) {\n                $('.holder-about .screen-this').fadeOut();\n                $('.holder-about .nav-open').removeClass('rotate-180');\n                $('.about-nav').removeClass('about-nav-expand');\n            }\telse {\n                $('.holder-about .screen-this').fadeIn();\n                $('.holder-about .nav-open').addClass('rotate-180');\n                $('.about-nav').addClass('about-nav-expand');\n                if ($('.holder-about .nav-open').hasClass('rotate-180')) {\n                    $('.holder-about .nav-slice').click(function() {\n                        $('.holder-about .screen-this').fadeOut();\n                        $('.holder-about .nav-open').removeClass('rotate-180');\n                        $('.holder-about .about-nav').removeClass('about-nav-expand');\n                    });\n                }\n            }\n        });\n    }\n\n}\n","// @flow\nimport BaseComponent from '../../base_component/base_component'\n\nexport default class DownloadDocuments extends BaseComponent {\n    download() {\n        $(this.component)\n            .closest('.data-table-component')\n            .find('input[type=\"checkbox\"]:checked')\n            .each((i: number, element: Element) => {\n                let name = element.getAttribute('data-filename');\n                let id = element.getAttribute('data-id');\n                if (!name || !id) return;\n\n                window.open(`/file/${name}?docRef=${id}`);\n            })\n    }\n}\n","// @flow\nimport BaseComponent from '../../base_component/base_component'\nimport componentLocator from '../../../assets/javascripts/component_locator'\n\nexport default class SearchBar extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        this.enableFilters();\n    }\n\n    enableFilters() {\n        let filtersActive = false;\n        let $filterIcon = $(this.component).find('.filter-icon')\n        componentLocator.getAll('filter_panel').then((filters: any[]) => {\n            $filterIcon.click(() => {\n                filtersActive = !filtersActive;\n                filters.forEach((filter: any) => filter.toggle(filtersActive));\n                $filterIcon.toggleClass('active', filtersActive);\n            })\n            filters.forEach(f => f.callbacks.push(isActive => {\n                filtersActive = isActive;\n                $filterIcon.toggleClass('active', isActive);\n            }))\n        });\n    }\n}","// @flow\nimport BaseComponent from '../../base_component/base_component';\nimport {deferrablePost} from '../../../assets/javascripts/offline_handler';\n\nexport default class DownloadDocuments extends BaseComponent {\n    save() {\n        let selectedProducts = $('input[type=\"checkbox\"][data-type=\"product\"]:checked')\n            .map((i, e) => `${$(e).data('id')}`).get();\n        let availableProducts = $('input[type=\"checkbox\"][data-type=\"product\"]')\n            .map((i, e) => `${$(e).data('id')}`).get();\n\n        let updateData = {\n            'available_products': availableProducts,\n            'selected_products': selectedProducts\n        }\n        let headers: any = { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') };\n\n        this.find('.title').hide();\n        this.find('.fa-spinner').show();\n\n        deferrablePost('/update_cris', updateData, headers).then(deferred => {\n            setTimeout(() => {\n                this.find('.fa-spinner').hide();\n                this.find('.title').show();\n            }, deferred ? 200 : 0);\n        });\n    }\n}\n","function scrollToElement(elements, inverse=false, outer='main') {\n    let $outer = $(outer)\n    let viewportScroll = $outer.scrollTop();\n    let viewportTop = $outer.offset().top;\n    let found = false;\n    elements.each((_, dt) => {\n        if (found) return;\n        let elementTop = $(dt).offset().top;\n        if (((elementTop - 1) > viewportTop && !inverse) ||\n                ((elementTop + 1) < viewportTop && inverse)) {\n            found = true;\n            $outer.animate({scrollTop: (viewportScroll + elementTop - viewportTop)}, 500);\n        }\n    });\n}\n\nexport default function (id, _name, options) {\n    let wrapper = options.wrapper || '.main-content__inner'\n    let outer = options.outer || 'main'\n    $(`#wrapper_${id}`).find('.scroll-holder.down').click(() => {\n        scrollToElement($(wrapper), false, outer);\n    });\n\n    $(`#wrapper_${id}`).find('.scroll-holder.up').click(() => {\n        scrollToElement($($(wrapper).get().reverse()), true, outer);\n    });\n}\n","export default (id, _name, options) => {\n    $(`#wrapper_${id}`).find('.toggle-holder').click(function() {\n        $(this).toggleClass('active');\n        let chevron = $(this).find('i');\n        chevron.toggleClass('fa-chevron-left');\n        chevron.toggleClass('fa-chevron-right');\n        $(options.target).toggleClass('hidden');\n        $(window).trigger('resize');\n    });\n}\n","import BaseComponent from '../base_component/base_component'\n\nexport default class AjaxError extends BaseComponent {\n\n    initialize() {\n        this.errorCount = 0;\n        this.find('.error-notification').click(() => {\n            this.find('.error-container').show();\n        })\n    }\n\n    functions() {\n        return {\n            handleAjaxError: this.addError.bind(this)\n        }\n    }\n\n    close() {\n        this.find('.error-container').hide();\n    }\n\n    addError(body, component) {\n        this._injectError(body, component.name);\n        this.find('.error-container style').remove();\n\n        this.errorCount += 1;\n        this.find('.error-notification .count').text(this.errorCount);\n        this.find('.error-notification').show();\n    }\n\n    _injectError(body, name) {\n        let id = `${this.id}_collapse${this.errorCount}`\n        let template = `\n            <div class=\"panel-heading\">\n            <h4 class=\"panel-title\">\n                <a data-toggle=\"collapse\" data-parent=\"${this.id}_accordion\" href=\"#${id}\">\n                    <span class=panel-title>${name.replace(/_/g, ' ')}</span>\n                </a>\n            </h4>\n            </div>\n            <div id=\"${id}\" class=\"panel-collapse collapse${this.errorCount == 0 ? ' in' : ''}\">\n                <div class=\"panel-body\">\n                    ${body}\n                </div>\n            </div>\n        `\n        this.find('.panel-default').append(template);\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component';\nimport {deferrablePost} from '../../assets/javascripts/offline_handler';\n\nexport default class AvailableProducts extends BaseComponent {\n    functions() {\n        return {\n            addSearch: (term: string) => this.filterBy(term),\n            removeSearch: () => this.find('.product').show()\n        }\n    }\n\n    filterBy(term: string) {\n        this.find('.product').each((i, product) => {\n            if ($(product).data('name').includes(term)) return;\n\n            $(product).hide();\n        })\n    }\n\n    request() {\n        let requestedProducts = this.find('input[type=\"checkbox\"][data-type=\"product\"]:checked')\n            .map((i, e) => `${$(e).data('name')}`).get();\n        let headers: any = { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') };\n        if (requestedProducts.length == 0) return;\n\n        let paramsData = {products: requestedProducts}\n        this.find('.title').hide();\n        this.find('.fa-spinner').show();\n        deferrablePost('/request_products', paramsData, headers).then(deferred => {\n            this.find('.fa-spinner').hide();\n            this.find('.title').show();\n            this.find('.success-overlay').show();\n            this.find(`.request-sent-${deferred ? 'off' : 'on'}line`).show();\n            this.find(`.request-sent-${deferred ? 'on' : 'off'}line`).hide();\n        })\n    }\n\n    hide() {\n        this.find('.success-overlay').hide();\n    }\n}","export default class BaseComponent {\n\n    constructor(id, component_name, options = {}, extra_params = {}) {\n        this.id = id;\n        this.component_name = component_name;\n        let component = document.getElementById('wrapper_' + this.id);\n        this.options = options;\n        this.extra_params = extra_params;\n        \n        if (component) {\n            this.component = component\n        };\n        this.initialize();\n    }\n\n    // Called when the component is first created.\n    initialize() {}\n\n    find(selector) {\n        return $(this.component).find(selector);\n    }\n\n    // Called when the component is removed from the page.\n    finalize() {}\n\n    // Called when the component has been loaded onto the page.\n    onLoad() {}\n\n    // Called once *all* components have bee loaded onto the page.\n    onReady() {}\n\n    // Functions exposed by the component (call via componentLocator.f.functionName(arg, ar2).\n    functions() {\n        return {};\n    }\n\n    // Called to remove the object from the page. Usually best left as-is.\n    dismount() {\n        this.component.innerHTML = '';\n    }\n\n    // Loads the component onto the page (calling the controller).\n    // Use for deferred or updated components.\n    rerender(asRerender = true) {\n        window.__componentAdapter.render(this.id, asRerender);\n    }\n\n    // Sets an extraParam value for the component (injected via constructor).\n    setParam(key, value) {\n        window.__componentAdapter.setExtraParam(this.id, key, value);\n    }\n}\n","// @flow\nimport BaseComponent from '../base_component/base_component'\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\nimport 'slick-carousel';\nimport {isEqual, snakeCase} from \"lodash-es\";\n\nexport default class Carosel extends BaseComponent {\n    carosel: JQuery;\n    data: Array;\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n\n        this.load(true);\n    }\n\n    load(initialLoad=false) {\n        let self = this;\n        var headers: any = {'Component-Initial-Table-Load': initialLoad.toString()};\n        $.ajax({\n            dataType: 'json',\n            headers: headers,\n            url: this.options.controller,\n            success: (response) => { self.initCarosel(response); }\n        });\n\n    }\n\n    initCarosel(data) {\n        let container = $(this.component).find('.carosel-container');\n        if (this.options.height) {\n            container.css('height', this.options.height);\n        }\n        if (this.options.centerMode != false && !this.options.hero) {\n            container.addClass('centered');\n        }\n        if (this.options.hero) {\n            container.addClass('hero');\n        }\n        if (!this.options.hero && !this.options.responsive) {\n            this.options.responsive = [\n                {\n                    breakpoint: 600,\n                    settings: {\n                        slidesToShow: 2,\n                        slidesToScroll: 2\n                    }\n                },\n                {\n                    breakpoint: 480,\n                    settings: {\n                        slidesToShow: 1,\n                        slidesToScroll: 1\n                    }\n                }\n            ]\n        }\n\n        let carosel = $(this.component).find('.carosel')\n        this.data = data.data;\n        if (this.data.length > 0) {\n            this.setContent(this.data)\n            this.carosel = carosel.slick(this.getOptions(this.options))\n        } else {\n            this.setContent(\n                `<div class='no-content-message'>\n                    <span>No data available</span>\n                </div>`\n            );\n        }\n\n        $(this.component).find('.carosel-spinner').hide();\n    }\n\n    setContent(content) { $(this.component).find('.carosel').html(content) }\n\n    getOptions(options) {\n        let slidesToShow, slidesToScroll, centerMode;\n        if (options.hero) {\n            slidesToShow = 1;\n            slidesToScroll = 1;\n            centerMode = false;\n        } else {\n            slidesToShow = options.slidesToShow ? options.slidesToShow : 3;\n            slidesToScroll = options.slidesToScroll ? options.slidesToScroll : 3;\n            centerMode = options.centerMode ? options.centerMode : true;\n            if (slidesToShow > this.data.length) {\n                slidesToShow = this.data.length;\n                slidesToScroll = slidesToShow;\n                centerMode = false;\n            }\n        }\n        return {\n            dots: options.dots ? options.dots : true,\n            infinite: true,\n            slidesToShow: slidesToShow,\n            slidesToScroll: slidesToScroll,\n            centerMode: centerMode,\n            centerPadding: '60px',\n            responsive: options.responsive\n        }\n    }\n}","import BaseComponent from '../base_component/base_component'\nimport {validatePassword} from '../scripts/validate_password/validate_password'\n\nexport default class ChangePassword extends BaseComponent {\n    constructor(id: number, component_name: string) {\n        super(id, component_name);\n        $(this.component).find('#old_password').focus();\n        this.addAsyncHooks();\n    }\n\n    addAsyncHooks() {\n        this.find('#confirm').keyup(event => {\n            let oldPassword = $('#new_password').val();\n            let isMatch = oldPassword === $(event.target).val();\n            this.whenInactiveFor(300, () => {\n                let hint = this.find('#change_password_error');\n                hint.text(isMatch ? '' : 'Password and confirmed password must be the same.');\n                hint.toggle(!isMatch);\n            });\n        });\n        this.find('#new_password').keyup(event => {\n            let password = $(event.target).val();\n            let result = password.length < 3 ? null : validatePassword(password);\n            this.whenInactiveFor(300, () => {\n                let hint = this.find('#change_password_error');\n                hint.text(result);\n                hint.toggle(!!result);\n            });\n        });\n    }\n\n    whenInactiveFor(time, callback) {\n        let timeout = this.timeoutId = setTimeout(() => {\n            this.timeoutId == timeout ? callback() : null\n        }, time)\n    }\n\n    validate($this: JQuery, $: JQueryStatic) {\n        $ = $ || window.$;\n        $this = $this || $(this.component);\n        var old_password = $.trim(($this.find('#old_password').val(): any));\n        var new_password = $.trim(($this.find('#new_password').val(): any));\n        var confirm = $.trim(($this.find('#confirm').val(): any));\n        let validationResult = validatePassword(new_password);\n        if (old_password == '') {\n            $this.find('#change_password_error').show();\n            $this.find('#change_password_error').text(\"You must enter your old password.\");\n            $this.find('#old_password').focus();\n            return false;\n        } else if (validationResult) {\n            $this.find('#change_password_error').text(validationResult);\n            this.clearPasswords($this);\n            return false;\n        } else if (new_password != confirm) {\n            $this.find('#change_password_error').text(\"Password and confirmed password must be the same.\");\n            this.clearPasswords($this);\n            return false;\n        } else {\n            $this.find('#change_password_error').hide();\n            $this.find('button#change_password').prop('disabled', true);\n            return true;\n        }\n    }\n\n    clearPasswords($this: JQuery) {\n        $this.find('#change_password_error').show();\n        $this.find('#new_password').val('');\n        $this.find('#confirm').val('');\n        $this.find('#password').focus();\n    }\n}","import BaseComponent from '../base_component/base_component'\n\nexport default class Confirmation extends BaseComponent {\n    result: boolean;\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n    }\n\n    ok(){\n        getComponent('modal').close();\n        this.result = true;\n    }\n\n    cancel(){\n        getComponent('modal').close();\n        this.result =  false;\n    }\n\n    getConfirmationResult(){\n        return this.result;\n        // return 5;\n    }\n\n    functions() {\n        return {\n            getConfirmationResult: () => this.getConfirmationResult()\n        }\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class ConsentBanner extends BaseComponent {\n    constructor(id: number, component_name: string) {\n        super(id, component_name);\n        this.acceptCookies();\n        this.setCookiesOnScroll();\n        this.hideCookieMessage();\n    }\n\n    setCookie() {\n        document.cookie = 'acceptedSingletrackCookies=1';\n        document.cookie = \"path=''\";\n    }\n\n    hideCookieMessage() {\n        const self = this;\n        if (document.cookie.includes('acceptedSingletrackCookies=1')) {\n            self.hideClass('.cookieMessage');\n        }\n    }\n\n    hideClass(class_name: string) {\n        $(class_name).hide();\n    }\n\n    acceptCookies() {\n        const self = this;\n        $('#acceptCookies').click(function() {\n            self.setCookie();\n            self.hideClass('.cookieMessage')\n        });\n    }\n\n    setCookiesOnScroll() {\n        const self = this;\n        $(window).scroll( function () {\n            if ($(window).scrollTop() > 50) {\n                self.setCookie();\n                self.hideClass('.cookieMessage')\n            }\n        });\n    }\n}\n","\nimport BaseComponent from '../base_component/base_component'\nimport componentLocator from \"../../assets/javascripts/component_locator\";\n\nexport default class ContactActions extends BaseComponent {\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n    }\n\n     getSelectedContacts() {\n        let selectedContacts = [];\n        let selectedContactsMap = new Map();\n\n        $(this.component)\n            .closest('.data-table-component')\n            .find('input[type=\"checkbox\"]:checked')\n            .each((i: number, element: Element) => {\n                let contactId = element.getAttribute('data-contact-id');\n                let contactName = element.getAttribute('data-contact-name');\n                if (contactId){\n                    selectedContacts.push(contactId);\n                    if(contactName){\n                        selectedContactsMap.set(contactId, contactName);\n                    }\n                }\n            });\n        return selectedContactsMap;\n    }\n\n    expireContacts(){\n\n        let contactsMap = this.getSelectedContacts();\n        let contactIds = [ ...contactsMap.keys() ];\n        let contactNames = [ ...contactsMap.values() ];\n        getComponent('modal').show('confirmation', {title: 'Confirm Deactivation', message: `Are you sure you want to deactivate these contacts?\\n\\n${contactNames.join('\\n')}`});\n        let result = false;\n        /*componentLocator.waitUntilLoaded().then(async () => {\n            result = componentLocator.f.getConfirmationResult();\n            debugger;\n        });*/\n\n        // if(!result)\n        //     return;\n\n        let headers: {[string]: any} = {\n            'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')\n        };\n        $.ajax({\n            type: \"POST\",\n            url: '/expire_contacts',\n            data: JSON.stringify({\n                'contact_ids': contactIds\n            }),\n            dataType: 'json',\n            contentType: 'application/json',\n            headers: headers,\n            success: function(data) {\n                console.log('Successfully deactivated contacts');\n                componentLocator.f.reloadData()\n                return data;\n            },\n            error: function() {\n                console.log('Error: unable to deactivate contacts');\n            }\n        });\n\n    }\n\n}","//@flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class ContactUs extends BaseComponent {\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n\n        $('body').on('click', '#contact-form-submit', () => {\n            if  (this.validForm()) {\n                this.startRequest();\n                this.submitForm().done( () => { this.finishRequest() });\n            }\n            return false;\n        })\n    }\n\n    validForm() {\n        let acceptedPrivacyPolicy = $('#compliance-1').is(\":checked\");\n        let hasEmail = $('#contact_email').val();\n        if (!hasEmail) {\n            this.displayRequiredLabel('#email-required-span');\n            $('#contact_email').css({\"border\": \"2px solid red\"});\n            return false;\n        } else if (!acceptedPrivacyPolicy) {\n            this.displayRequiredLabel('#compliance-required-span');\n            return false;\n        }\n        return true;\n    }\n\n    displayRequiredLabel(id: string) {\n        $(id).css(\"display\", \"inline-block\");\n    }\n\n    startRequest() {\n        $('#contact-form-submit i').remove();\n        $('#contact-form-submit').append(' <i class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\"></i>')\n    }\n\n    submitForm(){\n        let firstName = $('#contact_first_name').val();\n        let lastName = $('#contact_last_name').val();\n        let email = $('#contact_email').val();\n        let company = $('#contact_company').val();\n        let mobileNumber = $('#contact_mobile_number').val();\n        let message = $('#contact_message').val();\n        let acceptedPrivacyPolicy = $('#compliance-1').is(\":checked\");\n        let acceptedMbMarketing = $('#compliance-2').is(\":checked\");\n        let acceptedMbGroupMarketing = $('#compliance-3').is(\":checked\");\n\n        let headers: {[string]: any} = {\n            'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')\n        };\n        return $.ajax({\n            type: \"POST\",\n            url: '/contact_us',\n            dataType: 'json',\n            data: JSON.stringify({\n                'first_name': firstName,\n                'last_name': lastName,\n                'email': email,\n                'company': company,\n                'mobile_number': mobileNumber,\n                'message': message,\n                'accepted_privacy_policy': acceptedPrivacyPolicy\n            }),\n            contentType: 'application/json',\n            headers: headers\n        });\n    }\n\n    finishRequest() {\n        $('.contact-form-inner').html(`\n            <h2 class=\"form-title\">Thank you for email, someone will reach out to you soon.</h2>\n        `)\n    }\n}\n","// @flow\nimport BaseComponent from '../base_component/base_component';\nimport componentLocator from '../../assets/javascripts/component_locator';\nimport {deferrablePost} from '../../assets/javascripts/offline_handler';\nimport startCase from 'lodash-es/startCase';\n\nvar rowTemplate = `\n    <div class=\"empty row custom-row item-group x12 s6\">\n        <div class=mover></div>\n        <div class=remove-row><i class=\"fa fa-close\"></i></div>\n        <div class=add-item><i class=\"fa fa-plus\"></i></div>\n        <div class=\"row-items item-container h-12\"></div>\n    </div>\n`;\n\nvar cols = [[12], [6, 6], [4, 4, 4], [3, 3, 3, 3],\n            [2, 3, 2, 3, 2], [2, 2, 2, 2, 2]];\n\nexport default class CustomDashboard extends BaseComponent {\n\n    initialize() {\n        this.isEditing = false;\n        this.handlers = {};\n        this.activeMenu = null;\n        this.attachHandlers();\n        this.handleMovers();\n        this.find('.item-container .wrapper').each((_, e) => {\n            let parts = $(e).attr('id').split('_');\n            window.__componentAdapter.render(parts[parts.length - 1], false);\n        });\n    }\n\n    attachHandlers() {\n        this.find('.custom-dashboard').on('click', '.remove-item', (e: JQueryEventObject) => {\n            this._removeComponent(e.target);\n        })\n        this.find('.custom-dashboard').on('click', '.remove-row', (e: JQueryEventObject) => {\n            this._removeRow(e.target);\n        })\n        this.handlers.addMenuItem = (e: JQueryEventObject) => {\n            this._openAddMenu($(e.target));\n            e.stopPropagation();\n        }\n        this.find('.custom-dashboard').on('click', '.add-item', this.handlers.addMenuItem);\n        this.find('.add-row').click(() => {\n            if (this.find('.rows > .row').length >= 4) return;\n\n            this.find('.rows').append(rowTemplate);\n            this._fixRowHeight();\n        });\n        this.find('.create-sidebar, .remove-sidebar').click(() => {\n            this.find('.sidebar-content').toggle();\n            this.find('.create-sidebar').toggle();\n        });\n    }\n\n    _removeComponent(element: EventTarget) {\n        let $wrapper = $(element).closest('.remove-item').next();\n        let component = window.getComponent($wrapper[0]);\n        if (component) {\n            component.dismount();\n            componentLocator.deleteComponent(\n                parseInt($wrapper.first().attr('data-component-id')));\n        }\n        let $outer = $wrapper.closest('.outer-item-group');\n        $outer.removeClass('full');\n        $outer.closest('.custom-dashboard').removeClass(`${$outer.attr('class').split(' ')[0]}-full`);\n\n        let $row = $wrapper.closest('.row');\n        $wrapper.parent().remove();\n        if ($row.find('.col').length === 0) {\n            $row.find('.remove-row').show();\n            $row.addClass('empty');\n        } else {\n            this._fixColWidth($row);\n        }\n    }\n\n    _removeRow(element: EventTarget) {\n        $(element).closest('.row').remove();\n        this._fixRowHeight();\n    }\n\n    _openAddMenu($element: JQuery) {\n        if (this.activeMenu && this.activeMenu.is($element.closest('.add-item'))) {\n            return this._addItem($element);\n        } else if (this.activeMenu) {\n            this._closeAddMenu();\n        }\n        $element = $element.closest('.add-item');\n        $element.addClass('active');\n        $element.find('.option').remove();\n        this._getPossibleElements($element.closest('.outer-item-group')).forEach(component => {\n            $element.append(`<div class=option data-val=${component}>` +\n                `${startCase(component)}</div>`);\n        });\n\n        this.activeMenu = $element;\n        this.handlers.closeMenu = this._closeAddMenu.bind(this);\n        $(document).on('click', this.handlers.closeMenu);\n    }\n\n    _getPossibleElements(itemGroup: JQuery): Array<any> {\n        let activeElements = itemGroup.find('.item-container .col')\n            .map((_, e) => $(e).attr('data-name')).toArray();\n        return this.options[itemGroup.attr('data-items')].filter(e => !activeElements.includes(e));\n    }\n\n    _closeAddMenu() {\n        $(document).off('click', this.handlers.closeMenu);\n\n        if (this.activeMenu === null || this.activeMenu === undefined) return;\n\n        this.activeMenu.removeClass('active');\n        this.activeMenu = null;\n    }\n\n    _addItem($element: JQuery) {\n        if (!$element.is('.option')) return;\n\n        let $row = $element.closest('.item-group');\n        let $rows = $element.closest('.outer-item-group');\n        let name = $element.attr('data-val');\n        let id = this.options[name].toString();\n        let element = this._generateElement(id, name);\n        $row.find('.item-container').append(element);\n        window.__componentAdapter.render(id, false);\n\n        let isFull = $rows.is($row) || this._getPossibleElements($rows).length == 0;\n        $rows.toggleClass('full', isFull);\n        $rows.closest('.custom-dashboard').toggleClass(`${$rows.attr('class').split(' ')[0]}-full`, isFull);\n\n        $row.removeClass('empty');\n        this._fixColWidth($row);\n        this._closeAddMenu();\n    }\n\n    _generateElement(id: string, name: string) {\n        return `<div class=\"col x12 s12 h-12\" data-name=\"${name}\">\n            <div class=\"remove-item\"><i class=\"fa fa-close\"></i></div>\n            <div class=\"wrapper\" id=\"wrapper_${id}\" data-component-id=\"${id}\"></div>\n        </div>`;\n    }\n\n    handleMovers() {\n        let $component = $(this.component);\n        let originalY = 0; // MouseY at move\n        let netChange = 0;\n        let [upperElement, upperHeight, upperH] = [$(), 0, 0];\n        let [lowerElement, lowerHeight, lowerH] = [$(), 0, 0];\n\n        let dragger = event => {\n            let distanceMoved = event.pageY - originalY;\n            if (distanceMoved > 0) {\n                netChange = (distanceMoved / lowerHeight) * lowerH;\n            } else if (distanceMoved < 0) {\n                netChange = (distanceMoved / upperHeight) * upperH;\n            }\n            if (Math.abs(netChange) <= 0.8) return; \n            netChange = Math.round(netChange);\n\n            let newUpperH = Math.max(1, Math.min(upperH + lowerH - 1, upperH + netChange));\n            let newLowerH = Math.max(1, Math.min(upperH + lowerH - 1, lowerH - netChange));\n            this._setRowClass(upperElement, newUpperH);\n            this._setRowClass(lowerElement, newLowerH);\n        };\n        let onMouseUp = () => {\n            $(window).off('mouseup', onMouseUp);\n            $component.off('mousemove', dragger);\n        }\n        this.find('.custom-dashboard').on('mousedown', '.mover', (event: JQueryEventObject) => {\n            lowerElement = $(event.target).parent();\n            upperElement = lowerElement.prev();\n\n            originalY = event.pageY;\n\n            lowerH = this._getHClass(lowerElement);\n            lowerHeight = lowerElement.height();\n            upperH = this._getHClass(upperElement);\n            upperHeight = upperElement.height();\n\n            $(window).on('mouseup', onMouseUp);\n            $component.on('mousemove', dragger);\n        })\n    }\n\n    _getHClass(element: JQuery) {\n        let hClass = element.attr('class').split(/\\s+/)\n            .filter(c => c.match(/s[0-9]{1,2}/))[0].substr(1);\n        return parseInt(hClass);\n    }\n\n    _fixColWidth(row: JQuery) {\n        let rowItems = row.find('.row-items').children();\n        let colWidths = cols[rowItems.length - 1];\n        rowItems.each((i, child) => this._setRowClass($(child), colWidths[i]));\n    }\n\n    _fixRowHeight(ignoreEmpty:boolean=false) {\n        let rowCount = this.find(`.rows > .row${ignoreEmpty ? ':not(.empty)' : ''}`).length;\n        this.find(`.rows > .row${ignoreEmpty ? ':not(.empty)' : ''}`).each((_, element) => {\n            this._setRowClass($(element), 12 / rowCount)\n        })\n        this.find('.add-row').toggleClass('hide', this.find('.rows > .row').length === 4);\n    }\n\n    _setRowClass($row: JQuery, newValue: (string|number)) {\n        $row.removeClass((_, name) => (name.match (/s[0-9]{1,2}/g) || []).join(' '))\n            .addClass(`s${newValue}`);\n    }\n\n    functions() {\n        return {\n            toggle: (mode: string) => mode == 'EditLayout' ? this.toggleEditMode() : null\n        }\n    }\n\n    toggleEditMode() {\n        this.isEditing = !this.isEditing;\n        this.find('.custom-dashboard').toggleClass('editing', this.isEditing);\n        this._fixRowHeight(!this.isEditing);\n\n        if (!this.isEditing) {\n            this.saveStructure();\n        };\n    }\n\n    saveStructure() {\n        let sidebarName = $('.sidebar-items .col').attr('data-name');\n        let topbarName = $('.topbar-items .col').attr('data-name');\n        let layout = {sidebar: (sidebarName || null), top: (topbarName || null), rows: []}\n        this.find('.rows > .row').each((_, row) => {\n            let heightClass = row.className.match(/(?:^| )(s[0-9]{1,2})(?:$| )/)\n            layout.rows.push({\n                height: heightClass ? heightClass[1].substr(1) : '12',\n                components: $(row).find('.row-items > .col[data-name]')\n                    .map((_, e) => $(e).attr('data-name')).toArray()\n            })\n        });\n        deferrablePost('/save_layout', {layout: JSON.stringify(layout)});\n    }\n}","export default class DtStub {\n    constructor() {\n        this.col = null;\n        this.term = null;\n        this.drawn = false;\n        this.isVisible = null;\n    }\n\n    column(col) {\n        this.col = col;\n        return this;\n    }\n\n    columns() {\n        return this;\n    }\n\n    search(term, regex?, smart?) {\n        this.term = term;\n        return this;\n    }\n\n    draw() {\n        this.drawn = true;\n    }\n\n    visible(val) {\n        this.isVisible = val;\n        return val;\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\nimport {snakeCase, camelCase, isEqual} from 'lodash-es'\nimport formatters from './formatters';\nimport 'datatables.net';\nimport FilterContext from './filter_context';\n\nimport type {FilterFunctions} from './filter_context'\nimport type DataTables from 'datatables.net';\n\nexport default class DataTable extends BaseComponent {\n    columnIndexes: {[string]: number};\n    filterContext: FilterContext;\n    params\n    dismounting: boolean;\n    currentRequest: object;\n    reloadTimeout: ?TimeoutID\n\n    constructor(id: number, component_name: string, options: any, extra_params: {}) {\n        super(id, component_name, options, extra_params);\n        let callback = this._handleFiltered.bind(this);\n        this.filterContext = new FilterContext(this.id, null, callback, this.options.sync_only);\n        this.load(true);\n    }\n\n    onReady() {\n        if (this.filterContext.table) {\n            this.filterContext.table.draw();\n        }\n    }\n\n    _handleFiltered() {\n        if (this.options.reload) {\n            this.reload();\n        }\n        if (window._functions.dataTableModified) {\n            window._functions.dataTableModified();\n        }\n    }\n\n    reload() {\n        $(this.component).find('.dataTables_scrollBody .loading').remove();\n        $(this.component).find('.dataTables_scrollBody')\n            .append('<div class=\"loading\">Loading more results</div>');\n        if (this.reloadTimeout) clearTimeout(this.reloadTimeout);\n        this.reloadTimeout = setTimeout(() => {\n            this.reloadTimeout = null;\n            this.load(false, true);\n        }, 400);\n    }\n\n    addFilter(column: ?string): FilterFunctions {\n        return this.filterContext.add(column);\n    }\n\n    setFilter(column: ?string): FilterFunctions {\n        return this.filterContext.set(column);\n    }\n\n    toggleFilter(column: ?string, isSet: boolean) {\n        return isSet ? this.addFilter(column) : this.removeFilter(column);\n    }\n\n    removeFilter(column: ?string): FilterFunctions {\n        return this.filterContext.clear(column);\n    }\n\n    removeFilters(column: ?string): void {\n        this.filterContext.clearAll(column);\n    }\n\n    clear() {\n        if (!this.filterContext.table) return;\n        this.filterContext.table.destroy();\n        $(this.component).find('table').html('');\n    }\n\n\n    functions() {\n        return {\n            addSearch: (term: string, col: ?string) => this.addFilter(col).search(term),\n            removeSearch: (term: ?string, col: ?string) => this.removeFilter(col).search(term),\n            showColumn: (name: string) => this.filterContext.toggleColumn(name, true),\n            hideColumn: (name: string) => this.filterContext.toggleColumn(name, false),\n            addDateFilter: (startDate: any, endDate: any) => this.addFilter('Date').dateRange(startDate, endDate),\n            removeDateFilter: () => this.filterContext.table ? this.removeFilter('Date').dateRange() : null,\n            toggleTag: (value: string, category: string, checked: boolean) => this\n                .toggleFilter('Tags', checked).tagSearch(value, category),\n            reloadData: () => this.load()\n        }\n    }\n\n    load(initialLoad:boolean=false, isReload:boolean=false) {\n        let self = this;\n        let description = self.filterContext.getDescription();\n        if (this.params && isEqual(description, this.params)) return;\n        this.params = Object.assign( {}, this.getParams(), description );\n        var headers: any = {'Component-Initial-Table-Load': initialLoad.toString()};\n        self.currentRequest = $.ajax({\n            dataType: 'json',\n            headers: headers,\n            url: this.options.controller,\n            data: this.params,\n            beforeSend : function()    {\n                if (self.currentRequest != null) self.currentRequest.abort();\n            },\n            success: (response) => {\n                if (self.dismounting) return;\n                self.finishedLoading();\n                let options = self.getDefaultOptions(response);\n                let $component = $(self.component);\n                self.clear();\n                response.columns.forEach(column => {\n                    $component.find('.headers').append(\n                        `<th class=\"col_${snakeCase(column[0])}\">${column[0]}</th>`);\n                    self.handleFormatters(column, options, $component);\n                });\n\n            if (self.dismounting) return;\n            self.filterContext.table = $(self.component).find('table').DataTable(options);\n            self.filterContext.columnIndexes = self.columnIndexes;\n            self.filterContext.apply(isReload);\n            self.addIcons();\n            let trs = self.filterContext.table.$('tr');\n            Object.entries(response.extraClasses || {}).forEach(([className, rows: any]) => {\n                rows.forEach(i => $(trs[i]).addClass(className));\n            });\n            $component.find('.action-wrapper').show();\n\n                if (window._functions && window._functions.dataTableModified) {\n                    window._functions.dataTableModified();\n                }\n                // Hide the header containing the page size options\n                $('.dataTables_length').hide();\n        }});\n    }\n    \n    finalize() {\n        this.dismounting = true;\n        this.filterContext.dismount();\n    }\n\n    handleFormatters(column: Array<Map<String, String> | String>, options: any, $component: JQuery) {\n        column.slice(1).forEach((formatter) => {\n            let config = null;\n            if (typeof(formatter) == 'object') {\n                Object.keys(formatter).forEach( (fm) => {\n                    config = formatter[fm]\n                    this.handleFormatter(column, config, fm, options, $component)\n                });\n            } else {\n                this.handleFormatter(column, config, formatter, options, $component)\n            }\n        }, this);\n    }\n\n    handleFormatter(column: Array<Map<String, String> | String>, config: any, formatter: any, options: any, $component: JQuery) {\n        let formatterFunc = formatters[camelCase(formatter)];\n        if (!formatterFunc) {\n            throw `Could not find formatter with name ${camelCase(formatter)}`;\n        }\n        formatterFunc(column[0], config, options, $component);\n    }\n\n    getDefaultOptions(response: any): DataTables$Settings {\n        this.columnIndexes = response.columns.reduce((acc, column, index) => {\n            acc[column[0]] = index;\n            return acc;\n        }, {});\n        let stripes = this.options.stripe ? this.options.stripe.split(';') : ['odd', 'even']\n        stripes = stripes.map(name => `stripe_${this.id} ${name}`)\n        return {\n            data: response.data,\n            columns: response.columns.map(column =>\n                ({name: column[0], title: column[0], orderable: false})),\n            paging: !!this.options.paging,\n            pagingType: this.options.paging,\n            pageLength: this.options.page_length,\n            destroy: true,\n            scrollX: true,\n            scrollY: this.options.height ? `${this.options.height}` : '100%',\n            scrollCollapse: false,\n            stripeClasses: stripes,\n            order: ([]: any),\n            oLanguage: {\n                sEmptyTable: this.options.empty_message ? this.options.empty_message : 'No data available'\n            },\n            dom: 'lrtp'\n        };\n    }\n\n    getParams() {\n        let opts = Object.assign({}, this.options);\n        opts.async = true;\n        Object.keys(this.extra_params || {}).forEach((param) => {\n            opts[`param_${param}`] = this.extra_params[param]\n        })\n        return Object.keys(opts).filter( key => key.startsWith('param_') )\n                     .reduce((params, key) => {\n                                params[key] = opts[key]; \n                                return params\n                            }, {})\n    }\n\n    addIcons() {\n        let $component = $(this.component);\n        $component.find('.file_type').html('<i class=\"fa fa-file-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.application_pdf').html('<i class=\"fa fa-file-pdf-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.text_html').html('<i class=\"fa fa-file-code-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.text_plain').html('<i class=\"fa fa-file-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.video_mp4').html('<i class=\"fa fa-file-video-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.image_jpeg, .file_type.image_gif, .file_type.image_png')\n            .html('<i class=\"fa fa-file-image-o\" aria-hidden=\"true\"></i>');\n        $component.find('.file_type.application_vnd_ms_excel, .file_type.application_vnd_openxmlformats_officedocument_spreadsheetml_sheet')\n            .html('<i class=\"fa fa-file-excel-o\" aria-hidden=\"true\"></i>');\n    }\n\n    finishedLoading() {\n        $(this.component).find('.loading-content').hide()\n    }\n}\n","//@flow\n\nimport Search from \"./filters/search\";\nimport DateRange from \"./filters/date_range\";\nimport TagSearch from \"./filters/tag_search\";\n\nimport type DataTables from 'datatables.net';\nimport type BaseFilter from './filters/base_filter';\n\nexport type FilterFunctions = {\n    search: (searchText: ?string) => void,\n    tagSearch: (value: ?string, category: ?string) => void,\n    dateRange: (minDate: ?Date, maxDate: ?Date) => void\n}\n\nexport default class FilterContext {\n    id: number;\n    async: boolean;\n    table: DataTables.Api;\n    filters: {search: Search, dateRange: DateRange, tagSearch: TagSearch};\n    columnIndexes: {[string]: number};\n    functions: ((settings: any, data: string[],\n                 dataIndex: number, columnIndex: {[string]: number}) => boolean)[];\n    filterFunc: (settings: any, data: any, dataIndex: number) => void;\n    callback: () => void;\n\n    constructor(id: number, table: DataTables.Api, callback: () => void, sync_only:boolean=false) {\n        this.table = table;\n        this.id = id;\n        this.functions = [];\n        this.callback = callback;\n        this.async = !sync_only;\n        \n        this.filters = this.getFilters(this.apply.bind(this));\n        this.filterFunc = this.filterFunction.bind(this);\n        $.fn.dataTable.ext.search.push(this.filterFunc);\n    }\n\n    getFilters(apply: () => void) {\n        return {\n            search: new Search(apply),\n            dateRange: new DateRange(apply),\n            tagSearch: new TagSearch(apply)\n        }\n    }\n\n    toggleColumn(name: string, visible: ?boolean = undefined) {\n        let column = this.table.column(this.columnIndexes[name]);\n        visible = visible == undefined ? !column.visible() : visible;\n        column.visible(visible);\n    }\n\n    getContexts(): FilterFunctions {\n        if (this.callback) this.callback();\n        \n        return {\n            search: this.filters.search.context,\n            dateRange: this.filters.dateRange.context,\n            tagSearch: this.filters.tagSearch.context\n        }\n    }\n\n    add(column: ?string): FilterFunctions {\n        Object.values(this.filters).forEach((filter: any) => {\n            filter.prime(column, filter.addFilter);\n        })\n        return this.getContexts();\n    }\n\n    set(column: ?string): FilterFunctions {\n        Object.values(this.filters).forEach((filter: any) => {\n            filter.prime(column, filter.setFilter);\n        })\n        return this.getContexts();\n    }\n\n    clear(column: ?string): FilterFunctions {\n        Object.values(this.filters).forEach((filter: any) => {\n            filter.prime(column, filter.clearFilter);\n        })\n        return this.getContexts();\n    }\n\n    clearAll(column: ?string): void {\n        Object.values(this.filters).forEach((filter: any) =>\n            filter.prime(undefined, filter.clearFilter).call());\n    }\n\n    apply(isReload: boolean=false) {\n        this.table.search('').columns().search('');\n        this.functions = [];\n        if (this.async && !isReload) {\n            Object.values(this.filters).forEach((filter: any) => {\n                let func = filter.asFunction();\n                if (func) {\n                    this.functions.push(func);\n                } else {\n                    filter.apply(this.table);\n                }\n            }, this);\n        }\n        this.table.draw();\n    }\n\n    dismount() {\n        let funcIndex = $.fn.dataTable.ext.search.indexOf(this.filterFunc);\n        if (funcIndex !== -1) {\n            $.fn.dataTable.ext.search.splice(funcIndex, 1);\n        }\n    }\n\n    filterFunction(settings: any, data: any, dataIndex: number) {\n        return this.functions.every(f => f(settings, data, dataIndex, this.columnIndexes));\n    }\n\n    getDescription() {\n        return (Object.values(this.filters)).reduce((array, filter: any) =>\n            ({...array, ...filter.getDescription()}), {});\n    }\n}","//@flow\nimport type DataTables from 'datatables.net';\n\nexport default class BaseFilter {\n    callback: () => void;\n    invoke: () => void;\n    column: ?string;\n\n    constructor(callback: () => void) {\n        this.callback = callback;\n        this.column = null;\n    }\n\n    prime(column: ?string, func: () => void) {\n        this.invoke = () => {\n            this.column = column;\n            func.bind(this)();\n            this.callback();\n        }\n        return this;\n    }\n\n    addFilter(): void {\n        throw 'addFilter is not defined for this filter.';\n    }\n    setFilter(): void {\n        throw 'setFilter is not defined for this filter.';\n    }\n    clearFilter(): void {\n        throw 'clearFilter is not defined for this filter.';\n    }\n\n    apply(dataTable: DataTables.Api) {}\n    asFunction(): (void | ((settings: any, data: any, dataIndex: number,\n                            columnIndex: {[string]: number}) => boolean)) {}\n\n    getDescription() {\n        return {}\n    }\n}","//@flow\nimport BaseFilter from './base_filter'\nimport type DataTables from 'datatables.net';\n\nexport default class DateRange extends BaseFilter {\n    filters: {[string]: [?Date, ?Date]}\n    minDate: ?Date\n    maxDate: ?Date\n    context: (minDate: ?Date, maxDate: ?Date) => void\n\n    constructor(callback: () => void) {\n        super(callback);\n        this.filters = {}\n        this.context = this.call.bind(this);\n    }\n\n    call(minDate: ?Date, maxDate: ?Date): void {\n        this.minDate = minDate;\n        this.maxDate = maxDate;\n        this.invoke()\n    }\n\n    addFilter(): void {\n        return this.setFilter();\n    }\n\n    setFilter(): void {\n        if (!this.column) throw 'Cannot filter date across all columns';\n        this.filters[this.column] = [this.minDate, this.maxDate];\n    }\n\n    clearFilter(): void {\n        if (this.column) {\n            delete this.filters[this.column];\n        } else {\n            this.filters = {}\n        }\n    }\n\n    asFunction(): (void | ((settings: any, data: string[], dataIndex: number,\n                            columnIndex: {[string]: number}) => boolean)) {\n        let filters = this.filters;\n        if (Object.keys(filters).length === 0) return undefined;\n        return (settings, data: string[], dataIndex: number, columnIndex: {[string]: number}) => {\n            return Object.keys(filters).every(column => {\n                let [minDate, maxDate] = filters[column];\n                let foundDate = new Date(data[columnIndex[column]].substring(0, 10));\n                return (minDate || new Date(0)) <= foundDate &&\n                        foundDate <= (maxDate || new Date(9999, 1));\n            })\n        };\n    }\n\n    getDescription(): any {\n        let keys = Object.keys(this.filters);\n        if (keys.length === 0) return {};\n        if (keys.length === 1) {\n            let [startDate, endDate] = this.filters[keys[0]];\n            let result = {};\n            if (endDate) {\n                endDate.setHours(23,59,59,999);\n            }\n            if (startDate) result.start_date = startDate.toISOString();\n            if (endDate) result.end_date = endDate.toISOString();\n            return result;\n        } \n        return {dateFilters: this.filters}\n    }\n}","//@flow\nimport BaseFilter from './base_filter'\nimport type DataTables from 'datatables.net';\n\nexport default class Search extends BaseFilter {\n    filters: {[string|null|void]: Set<string>}\n    searchText: ?string\n    context: (searchText: ?string) => void\n\n    constructor(callback: () => void) {\n        super(callback);\n        this.filters = {}\n        this.searchText = null;\n        this.context = this.call.bind(this);\n    }\n\n    call(searchText: ?string): void {\n        this.searchText = searchText;\n        this.invoke()\n    }\n\n    addFilter(): void {\n        this.filters[this.column] = this.filters[this.column] || new Set();\n        this.filters[this.column].add(this.searchText ||'');\n    }\n\n    setFilter(): void {\n        this.filters[this.column] = new Set([this.searchText || '']);\n    }\n\n    clearFilter(): void {\n        if (this.searchText) {\n            if (this.filters[this.column]) {\n                this.filters[this.column].delete(this.searchText);\n            }\n            return;\n        }\n        if (this.column) {\n            this.filters[this.column] = new Set();\n        } else {\n            this.filters = {}\n        }\n    }\n\n    apply(dataTable: DataTables.Api): void {\n        Object.keys(this.filters).forEach(filter => {\n            if (this.filters[filter].size === 0) return;\n            let filterText = `${Array.from(this.filters[filter]).join(' ')}`;\n\n            if (filter !== 'undefined') {\n                dataTable.column(`${filter}:name`)\n                    .search(filterText, false, true);\n            } else {\n                dataTable.search(filterText, false, true);\n            }\n        }, this);\n    }\n\n    getDescription(): any {\n        let keys = Object.keys(this.filters);\n        switch(keys.length) {\n            case 0: return {}\n            case 1: return {text: Array.from(this.filters[keys[0]]).join(' ')}\n            default: return {text: this.filters}\n        }\n    }\n}\n","//@flow\nimport BaseFilter from './base_filter'\nimport type DataTables from 'datatables.net';\n\nexport default class TagSearch extends BaseFilter {\n    filters: {[string|null|void]: {[string]: Set<string>}};\n    searchText: ?string;\n    category: ?string;\n    context: (searchText: ?string) => void;\n\n    constructor(callback: () => void) {\n        super(callback);\n        this.filters = {}\n        this.searchText = this.category = null;\n        this.context = this.call.bind(this);\n    }\n\n    call(searchText: ?string, category: ?string): void {\n        this.searchText = searchText;\n        this.category = category;\n        this.invoke()\n    }\n\n    addFilter(): void {\n        let cat = this.category || ''\n        if (!this.filters[this.column] || !this.filters[this.column][cat]) {\n            return this.setFilter();\n        }\n\n        this.filters[this.column][cat].add(this.searchText ||'');\n    }\n\n    setFilter(): void {\n        let col = this.filters[this.column] = this.filters[this.column] || {};\n        col[this.category || ''] = new Set([this.searchText || '']);\n    }\n\n    clearFilter(): void {\n        if (this.searchText) {\n            let set = this.filters[this.column][this.category || ''];\n            set.delete(this.searchText);\n            if (set.size === 0) {\n                delete this.filters[this.column][this.category || '']\n            }\n            return;\n        }\n        if (this.column) {\n            this.filters[this.column] = {};\n        } else {\n            this.filters = {}\n        }\n    }\n\n    apply(dataTable: DataTables.Api): void {\n        Object.keys(this.filters).forEach(filter => {\n            if (!this.filters[filter] ||\n                 Object.keys(this.filters[filter]).length === 0) return;\n            let filterTags = new Set();\n            Object.values(this.filters[filter]).forEach((tags: any) =>\n                          tags.forEach(t => filterTags.add(t)));\n            let filterText = `((^|,|;)(${Array.from(filterTags).join('|')})($|,|;))`;\n\n            if (filter !== 'undefined') {\n                dataTable.column(`${filter}:name`).search(filterText, true, false);\n            } else {\n                dataTable.search(filterText, true, false);\n            }\n        }, this);\n    }\n\n    getDescription(): any {\n        let tagFilters = {}\n        Object.values(this.filters).forEach((tags: any) => {\n            Object.keys(tags).forEach((category: string) => {\n                let cat = tagFilters[category] = tagFilters[category] || new Set();\n                tags[category].forEach(tag => cat.add(tag));\n            })\n        })\n        let categories = Object.keys(tagFilters);\n        if (categories.length === 0) return {};\n        categories.forEach(category => {\n            tagFilters[category] = Array.from(tagFilters[category]).join(';');\n        })\n        return {tag_filters: tagFilters}\n    }\n}","// @flow\nimport dateFormat from \"./formatters/date_format\";\nimport orderable from \"./formatters/orderable\";\nimport preview from './formatters/preview';\nimport style from './formatters/style';\nimport rating from './formatters/rating';\nimport order from './formatters/order';\nimport className from './formatters/class_name';\nimport roadshowRequestSlot from './formatters/roadshow_request_slot';\n\nexport default {\n    dateFormat: dateFormat,\n    orderable: orderable,\n    preview: preview,\n    style: style,\n    rating: rating,\n    order: order,\n    roadshowRequestSlot: roadshowRequestSlot,\n    className: className\n};","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function className(column: String, options: any,\n    dtSettings: DataTables.Settings, component: JQuery) {\n        let col = dtSettings.columns.find(c => c.title == column);\n        col.className = options;\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function dateFormat(column: String, options: any,\n        dtSettings: DataTables.Settings, component: JQuery) {\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function order(column: String, options: any,\n    dtSettings: DataTables.Settings, component: JQuery) {\n        let col = dtSettings.columns.find(c => c.title == column);\n        let colIndex = dtSettings.columns.indexOf(col);\n        dtSettings.order.push([colIndex, options]);\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function orderable(column: String, options: any,\n    dtSettings: DataTables.Settings, component: JQuery) {\n        dtSettings.columns.find(c => c.title == column).orderable = (options == null ? true : options);\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function preview(column: String, options: any,\n    dtSettings: DataTables.Settings, component: JQuery) {\n        dtSettings.columns.find(c => c.title == column).visible = (options == null ? false : !options);\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function rating(column: String, options: any, dtSettings: DataTables.Settings, component: JQuery) {\n    dtSettings.columns.find(c => c.title == column).rating = (options == null ? true : options);\n    $('body').on('mouseover', '.activity-rating-star', function () {\n        $(this).addClass('selected')\n        $(this).prevAll().addClass('selected')\n    })\n\n    $('body').on('mouseout', '.activity-rating-star', function () {\n        $(this).removeClass('selected')\n        $(this).prevAll().removeClass('selected')\n    })\n}","// @flow\nimport type {DataTables} from 'datatables.net';\n\nexport default function roadshowRequestSlot(column: String, options: any, dtSettings: DataTables.Settings, component: JQuery) {\n    dtSettings.columns.find(c => c.title == column).roadshowRequestSlot = (options == null ? true : options);\n    $('body').on('click', '.request-slot', function () {\n        let roadshowId = $(this).data('roadshow-id')\n        \n        let buttonContent = $(this).text()\n        $(this).html(buttonContent + ' <i class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\"></i>')\n\n        function requestDone(button){\n            button.addClass('btn-success')\n            button.html('Request Sent! <i class=\"fa fa-check\" aria-hidden=\"true\"></i>')\n        }\n        setTimeout(requestDone, 1500, $(this));\n    })\n}","// @flow\nimport snakeCase from 'lodash-es/snakeCase';\nimport type {DataTables} from 'datatables.net';\n\nexport default function style(column: String, options: any,\n    dtSettings: DataTables.Settings, component: JQuery) {\n        let dtColumn= dtSettings.columns.find(c => c.title == column);\n        Object.keys(options).forEach(option => dtColumn[snakeCase(option)] = options[option]);\n}","export default class Dialogue extends BaseComponent {\n    functions() {\n        return {\n            setDialogHeader: text => this.find('.dialogue-header').text(text),\n            setDialogText: this.setText.bind(this),\n            showDialog: name => this.show(name),\n            hideDialog: this.hide.bind(this),\n            completeDialogLoading: () => this.find('.loading').removeClass('loading')\n        }\n    }\n\n    setTitle(text) {\n        this.find('.title-text').html(text + '<div class=title-triangle></div>')\n    }\n\n    setText(text) {\n        this.find('.dialogue-text').html(text)\n    }\n\n    show(name) {\n        if (name && this.options.name != name) {\n            return;\n        }\n        this.find('.dialogue-container').removeAttr('hidden');\n    }\n\n    hide() {\n        this.find('.dialogue-container').attr('hidden', 'hidden');\n    }\n\n    handleOk() {\n        if (_functions.handleDialogOk) {\n            _functions.handleDialogOk(this.options.name);\n        }\n        this.hide();\n    }\n\n    handleCancel() {\n        if (_functions.handleDialogCancel) {\n            _functions.handleDialogCancel(this.options.name);\n        }\n        this.hide();\n    }\n}","\n//@flow\nimport BaseComponent from '../base_component/base_component'\nimport componentLocator from '../../assets/javascripts/component_locator'\nimport TagSection from './tag_section'\nimport 'bootstrap-datepicker';\n\nimport type DataTable from '../data_Table/data_table'\n\nexport default class FilterPanel extends BaseComponent {\n    isOpen: boolean;\n    dateSet: boolean;\n    $component: JQuery;\n    datePickers: JQuery;\n    tagContainer: JQuery;\n    tagSections: TagSection[];\n    dataTables: DataTable[]\n    callbacks: (boolean => void)[]\n\n    // TODO: Filter panel takes 100ms to initialise due to a *lot* of jquery selectors.\n    // These can be significantly reduced via n+1 techniques,\n    // but it's probably not a priority for now.\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        this.isOpen = false;\n        this.$component = $(this.component);\n        this.dataTables = [];\n        this.callbacks = [];\n\n        this.initPanel();\n        this.initFiltering(options['tag_filters']);\n    }\n\n    finalize() {\n        this.resetDateFilter();\n        $(this.component).find('input[type=\"checkbox\"]:checked').click();\n    }\n\n    initPanel() {\n        this.datePickers = this.$component.find('.datepicker');\n        this.datePickers.on('keydown', (e) => {\n            if (e.key === 'Backspace') {\n                this.resetDateFilter();\n            }\n        });\n        this.tagContainer = this.$component.find('.selected-tags');\n\n        this.initDatePicker();\n        this.$component.find('.screen,.search-button').on('click', () => this.closePanel());\n        this.$component.find('.clear-button').on('click', () => this.closePanel(true));\n    }\n\n    initDatePicker() {\n        this.$component.find('.datepicker-container').datepicker({\n            inputs: this.datePickers,\n            format: (this.options.date_format || 'dd/mm/yyyy'),\n            autoclose: true,\n            keepEmptyValues: true,\n            orientation: 'bottom'\n        });\n    }\n\n    async initFiltering(tagFilters: {[string]: string[]}[]) {\n        this.dataTables = await componentLocator.getAll('data_table');\n        this.tagSections = $(this.$component).find('.tag_filters').children().toArray().map(element => {\n            let name = element.getAttribute('data-group-name') || '';\n            return new TagSection(name, this, element);\n        })\n\n        this.datePickers.change(this.filterDates.bind(this));\n    }\n\n    filterDates(picker) {\n        let start = $(this.datePickers[0]);\n        let end = $(this.datePickers[1]);\n        if (start.val() === '' && end.val() === '') {\n            return this.removePill('dateRange');\n        };\n        if (start.val() === '' || end.val() == '') {\n            (start.val() == '' ? start : end).datepicker('show');\n            return;\n        }\n        this.dateSet = true;\n\n        let startDate = start.datepicker('getUTCDate');\n        let endDate = end.datepicker('getUTCDate');\n        this.showPill('dateRange',\n            `${(start.val(): any)} - ${(end.val(): any)}`,\n            this.resetDateFilter.bind(this));\n        this.dataTables.forEach(dt => dt.addFilter('Date').dateRange(startDate, endDate));\n    }\n\n    showPill(key: string, text: string, callback: () => any) {\n        this.removePill(key, true);\n        let pill = `\n            <button class=\"btn btn-default\" type=\"button\" data-key=\"${key}\">\n                <span class=\"glyphicon glyphicon-remove\"></span> ${text}\n            </button>\n        `\n        let $tags = this.tagContainer.append(pill);\n        $tags.find(`[data-key=\"${key}\"]`).click(callback);\n    }\n\n    removePill(key: string, adding: boolean = false) {\n        let pill = $(this.component).find(`[data-key=\"${key}\"]`)\n        this.tagContainer.toggleClass('empty',\n            !!(pill.length && this.tagContainer.children().length <= 1 && !adding));\n        return pill.remove();\n    }\n    \n    closePanel(reset: boolean = false) {\n        this.toggle(false);\n\n        if (reset) this.finalize();\n\n        this.tagSections && this.tagSections.forEach(section => section.toggle(false));\n    }\n\n    resetDateFilter() {\n        this.datePickers.datepicker('clearDates');\n        this.dataTables.forEach(dt => dt.removeFilter('Date').dateRange());\n        this.removePill('dateRange');\n        this.dateSet = false;\n    }\n\n    toggle(isOpen: ?boolean) {\n        this.isOpen = isOpen == null ? !this.isOpen : isOpen;\n        this.$component.find('.filters-panel').toggleClass('active', this.isOpen);\n        this.$component.find('.screen').toggleClass('active', this.isOpen);\n        this.callbacks.forEach(callback => callback(this.isOpen));\n        if (isOpen) {\n            componentLocator.getAll('user_panel')\n                .then(panel => panel.forEach((p: any) => p.toggle(false)));\n        }\n    }\n}","//@flow\nimport componentLocator from '../../assets/javascripts/component_locator'\nimport type DataTable from '../data_table/data_table'\nimport type FilterPanel from './filter_panel';\n\nexport default class TagSection {\n    groupName: string;\n    dataTables: DataTable[];\n    panel: FilterPanel;\n    isOpen: boolean;\n    header: JQuery\n    content: JQuery\n    checkboxes: JQuery\n    accordion: JQuery\n\n    constructor(groupName: string, panel: FilterPanel, element: Element) {\n        this.groupName = groupName;\n        this.isOpen = false;\n        this.panel = panel;\n\n        this.findChildren(element);\n        this.initEvents(panel);\n    }\n\n    findChildren(element: Element) {\n        this.header = $(element.children[0]);\n        this.accordion = this.header.find('.accordion');\n        this.accordion_i = this.accordion.find('i')\n        this.content = $(element.children[1]);\n        this.checkboxes = this.content.find('li');\n    }\n\n    initEvents(panel: FilterPanel) {\n        this.accordion.on('click', () => this.toggle());\n        this.header.find('input').keyup(e => this.filter(($(e.target).val(): string)));\n\n        this.checkboxes.each((i, checkbox) => {\n            $(checkbox).find('input').change(e => {\n                this.handleCheckboxChecked(panel, e);\n            })\n        });\n    }\n\n    handleCheckboxChecked(panel: FilterPanel, e: Event) {\n        let filter = decodeURIComponent($(e.target).attr('data-value'));\n        let checked = $(e.target).prop('checked');\n        panel.dataTables.forEach(dt =>\n             dt.toggleFilter('Tags', checked).tagSearch(filter, this.groupName));\n        let key = `${this.groupName}-${filter}`;\n        if (checked) {\n            panel.showPill(key, filter, () => $(e.target).click());\n        } else {\n            panel.removePill(key);\n        }\n    }\n\n    toggle(isOpen: ?boolean) {\n        isOpen = this.isOpen = isOpen == null ? !this.isOpen : isOpen;\n\n        this.content.toggleClass('hidden', !isOpen);\n        this.accordion_i.toggleClass('fa-angle-down', !isOpen);\n        this.accordion_i.toggleClass('fa-angle-up', isOpen);\n        if (!isOpen) return;\n\n        this.panel.tagSections.forEach(section => {\n            if (section !== this) section.toggle(false);\n        });\n    }\n\n\n    filter(filterText: string) {\n        this.toggle(true);\n        this.checkboxes.each((i, checkbox) => {\n            let label = $(checkbox).find('label').text().toLowerCase().trim();\n            $(checkbox).toggleClass('hidden', !label.includes(filterText.toLowerCase()));\n        })\n    }\n}","import BaseComponent from '../base_component/base_component';\n\nexport default class Footer extends BaseComponent {\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        this.load(true);\n    }\n\n    load(initialLoad= false) {\n        $('.user-panel-component').find('.user-panel__minimise').click(() => this.toggleFooterSize());\n        $('.close-footer').click(() => this.closeFooter());\n    }\n\n    toggleFooterSize() {\n        let footer = $('.footer-component footer');\n        if (footer.hasClass('minimised')) {\n            footer.removeClass('minimised');\n        } else {\n            footer.addClass('minimised');\n        }\n    }\n\n    closeFooter() {\n        $('.footer-component footer').addClass('hidden');\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class GridViewPage extends BaseComponent {\n\n    initialize() {\n        this.isGridView = false;\n        this.cold = true;\n        this.previousData = null;\n        if (typeof(Storage) !== \"undefined\") {\n            this.pricingData = JSON.parse(window.localStorage.getItem('pricingData')) || {}\n        } else {\n            this.pricingData = {}; // TODO: LocalStorage\n        }\n    }\n\n    functions() {\n        return {\n            toggle: (type: string) => type == 'GridView' ? this.toggleGridView() : null,\n            dataTableModified: () => this.isGridView ? this._refreshData() : null\n        }\n    }\n\n    toggleGridView() {\n        this.isGridView = !this.isGridView;\n        this.find('.table-view').toggle(!this.isGridView);\n        let gridView = this.find('.grid-view');\n        gridView.toggle(this.isGridView);\n\n        if (this.isGridView && this.cold) {\n            this._refreshData();\n        }\n    }\n\n    _refreshData() {\n        let gridView = $('.grid-view');\n        let templateHTML = gridView.find('.template')[0].outerHTML;\n        let rows = this.find('.dataTables_wrapper .dataTables_scrollBody table.dataTable')\n        .DataTable().rows({ filter : 'applied'}).data().toArray();\n        if (this.previousData == rows.toString()) {\n            return this.previousData = rows.toString();\n        }\n        \n        gridView.find('.grid-item:not(.template)').remove();\n        this.previousData = rows.toString();\n        rows.forEach(([\n                    star, img, company, __, date, content_icon, ticker, title, summary\n                ]) => {\n            let newHTML: any = new String(templateHTML);\n            newHTML = newHTML.replace('[[COMPANY]]',\n                company.match('company_name\">\\\\s*([^\\\\n]*)')[1].trim() + '\\n' +\n                star);\n            newHTML = newHTML\n                .replace('[[DATE]]', date || '')\n                .replace('[[TICKER_NAME]]', (ticker || '').toLowerCase().replace(' ', '_'))\n                .replace('[[TICKER]]', ticker || '')\n                .replace('[[IMAGE]]', img)\n                .replace(' template\"', '\"');\n\n            let url = (content_icon || '').match(/href=\"([^\"]*)\"/);\n            if (url) {\n                newHTML = newHTML\n                    .replace('[[URL]]', url[1])\n                    .replace('[[TITLE]]', title || '')\n                    .replace('[[BODY]]', summary || '')\n            } else {\n                newHTML = newHTML.replace('grid-item', 'grid-item no-doc')\n            }\n            \n            this.cold = false;\n            gridView.append(newHTML);\n            if (ticker && ticker !== '' ) { this._getPricingData(ticker) }; // !== ''\n        });\n    }\n\n    _getPricingData(ticker: string) {\n        let outDatedTime = new Date();\n        outDatedTime.setMinutes(outDatedTime.getMinutes() - 5);\n        let checkedTime = this.pricingData[ticker] && this.pricingData[ticker].time;\n        if (typeof(checkedTime) === 'string') checkedTime = new Date(Date.parse(checkedTime));\n\n        if (!this.pricingData[ticker] || checkedTime < outDatedTime) {\n            $.get(this._getPricingApi(ticker), result => {\n                if (result['Error Message'] || !result['Global Quote']) {\n                    this.pricingData[ticker] = {\n                        result: result['Error Message'] || 'No result found.',\n                        time: new Date()\n                    }\n                } else {\n                    this.pricingData[ticker] = {\n                        result: 'Success',\n                        prev: result['Global Quote']['08. previous close'].match(/[0-9]*\\.?[0-9]/)[0],\n                        now: result['Global Quote']['05. price'].match(/[0-9]*\\.?[0-9]/)[0],\n                        change: parseFloat(result['Global Quote']['09. change']),\n                        time: new Date()\n                    }\n                    if (typeof(Storage) !== \"undefined\") {\n                        window.localStorage.setItem('pricingData', JSON.stringify(this.pricingData))\n                    }\n                };\n                this._updateTicker(ticker);\n            });\n        } else {\n            this._updateTicker(ticker);\n        }\n    }\n\n    _getPricingApi(ticker: string) {\n        return `https://www.alphavantage.co/query?function=GLOBAL_QUOTE` +\n            `&symbol=${ticker}&apikey=${this.options.api_key}`;\n    }\n\n    _updateTicker(ticker: string) {\n        let pricingData = this.pricingData[ticker];\n        if (pricingData.result !== 'Success') return;\n\n        let $element = this.find(`.${ticker.toLowerCase().replace(' ', '_')}-pricing`);\n        $element.children().first().html(`<span class=visible-lg-blockx>Prev: </span>$${pricingData.prev}`);\n        let $currentData = $element.children().last();\n\n        $currentData.html(`<span class=visible-lg-blockx>Now: </span>$${pricingData.now}`);\n        $currentData.toggleClass('up', pricingData.change > 0);\n        $currentData.toggleClass('down', pricingData.change < 0);\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class Hero extends BaseComponent {\n\n    constructor(id: number, component_name: string) {\n        super(id, component_name);\n        this.addAndRemoveBackground();\n        this.overrideLoginBehaviour();\n    }\n\n    // Captures the ?r= param.\n    overrideLoginBehaviour() {\n      let $form = $(this.component).find('#login-form')\n      let redirectString = this._getRedirectString();\n      $form.submit((event: JQueryEventObject) => {\n        if (!redirectString) return;\n\n        $form.attr('action', `/login?r=${redirectString}`);\n      })\n    }\n\n    _getRedirectString(): ?string {\n      let match = window.location.href.match(/[\\?&]r=([^$\\&]*)/);\n      return match ? match[1] : null;\n    }\n\n    scrollTo(target: string) {\n      let $target = $(`#${target}`);\n      if ($target.length === 0) {\n        return window.location.href = `/landing_page#${target}`\n      }\n      $('html, body').animate({\n        scrollTop: $target.offset().top\n      }, 'slow');\n      return false;\n    }\n\n    addAndRemoveBackground() {\n      $(window).scroll( function (event) {\n        if ($(window).scrollTop() > 50) {\n            $('.nimbus-securities-logo').addClass('logo-shrink');\n            $('.hero-login-mobile').addClass('logo-shrink');\n            $('.header-fixed').css({'position': 'fixed', 'background':'#eea200', 'transition':'0.5s'});\n        } else {\n          $('.nimbus-securities-logo').removeClass('logo-shrink');\n          $('.hero-login-mobile').removeClass('logo-shrink');\n          $('.header-fixed').css({'position': 'fixed', 'background': '', 'z-index': '', 'transition': ''});\n        };\n      });\n    }\n\n     showLogin() {\n      if ($('#about').length === 0) {\n        return window.location.href = `/landing_page#home`\n      }\n      $(this.component).find('.hero-login').attr('style', '');\n      this.scrollTo('home');\n    }\n\n    showForm(name: string) {\n        $(this.component).find('#login-form').toggleClass('hidden', name === 'reset');\n        $(this.component).find('#reset-password-form').toggleClass('hidden', name === 'login');\n        $(this.component).find('.submitted-message').addClass('hidden');\n        return false;\n    }\n\n    resetPassword() {\n        $.post('/resend_email', $('#reset-password-form').serialize(), () => {\n            $(this.component).find('#reset-password-form').addClass('hidden');\n            $('.submitted-message').removeClass('hidden');\n        });\n        return false;\n    }\n}","import BaseComponent from '../../base_component/base_component'\n\nexport default class Tabs extends BaseComponent {\n    initialize() {\n        $(this.component).find('[data-toggle=\"tab\"]').on('shown.bs.tab', function() {\n            let $target = $($(this).attr('href'));\n            let newUrl = window.location.href.replace(\n                /(#.*)?$/, '#' + $(this).attr('data-name'));\n            window.history.pushState({urlPath: newUrl}, {}, newUrl);\n            let tables = $target.find('.dataTables_scrollBody table');\n            if (tables && tables.DataTable) {\n                tables.DataTable().draw();\n            }\n        });\n        if (window.location.href.includes('#')) {\n            let tabName = window.location.href.split('#')[1];\n            this.loadTab(tabName);\n        }\n    }\n\n    functions() {\n        return {loadTab: tabName => this.loadTab(tabName)}\n    }\n\n    loadTab(tabName) {\n        let tab = this.find(`[data-name=\"${tabName}\"`);\n        if (tab.length) {\n            tab.first().click();\n        }\n    }\n}","// @flow\nimport BaseComponent from '../../base_component/base_component'\n\nexport default class Tile extends BaseComponent {\n    initialize() {\n        $.getJSON(this.options.controller, this.initTiles.bind(this));\n    }\n\n    initTiles(data) {\n        this.find('.tile-spinner').hide();\n\n        if (data.length === 0) {\n            return $('.no-content-message').removeAttr('hidden');\n        }\n        let tiles = this.find('.tile');\n\n        data.forEach((element, i) => {\n            this.setTileContent($(tiles[i]), element);\n        });\n    }\n\n    setTileContent(tile, element) {\n        tile.css('visibility', 'visible');\n        tile.find('.title').html(element.title);\n        tile.find('.description').html(element.description);\n        if (element.thumbnail_url) {\n            tile.find('.title-thumbnail').css(\n                'background-image', `url(${element.thumbnail_url})`);\n            tile.find('.hidden-image').attr('src', element.thumbnail_url);\n        }\n    }\n}","import BaseComponent from '../base_component/base_component'\n\nexport default class Loading extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n\n        document.addEventListener('ComponentRendered', event => {\n            if (event.componentId !== options.content) return;\n            $(this.component).find('>.loading_bar').hide();\n        })\n\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\nimport componentLocator from '../../assets/javascripts/component_locator'\nimport kebabCase from 'lodash-es/kebabCase'\n\nexport default class Modal extends BaseComponent {\n    currentComponent: ?string;\n    $modal: JQuery;\n    open: Boolean;\n    $panels: JQuery;\n    persist: Array<string>;\n    locked: boolean;\n    queue: Array<Function>;\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        this.currentComponent = null;\n        this.queue = [];\n\n        this.persist = [].concat(this.options.persist || []);\n        this.persist.forEach(panel => {\n            $(`#wrapper_${this.options[panel]}`).hide();\n        });\n        this.$modal = $(this.component).find('.modal');\n        this.$panels = $(this.component).find('.modal-content > .wrapper');\n        $(document.body).on('keydown', event => this._trapTabInput(event));\n        this.addCloseHandler();\n        this.addImplicitSupport();\n    }\n\n    addCloseHandler() {\n        let self = this;\n        let mouseOffContent = false;\n        this.$modal.mousedown(event => {\n            mouseOffContent = !$(this.component).has(event.target).length;\n        });\n        this.$modal.mouseup(() => {\n            if ($(this.component).find('.modal-content:hover').length === 0 &&\n                    mouseOffContent) {\n                this.close();\n            }\n            mouseOffContent = false;\n        });\n        $(this.component).find('.close-modal').click(() => { this.close(); });\n    }\n\n    addImplicitSupport() { // Because bootstrap does.\n        let self = this;\n        $(document).on('click', '[data-target=\"#modal\"]', (e: JQueryEventObject) => {\n            let remote = $(e.target).closest('[data-target]').attr('data-remote');\n            let [_, path, args] = remote.match(/\\/(.*)\\?(.*)/) || [null, null];\n            if (path === null || args === null) return;\n\n            let argHash = args.split('&').reduce((hash, arg) => {\n                let [key, value] = arg.split('=');\n                hash[key] = value;\n                return hash;\n            }, {});\n            self.show(path, argHash);\n        });\n\n        let paramsArray: any = location.search.match(/([?\\&])([^=]*)=[^$\\&#]*/g);\n        if (!paramsArray) return;\n\n        let params: Map<string, string> = new Map(paramsArray.map(v => v.substr(1).split('=')));\n        if (!params.has('modal')) return;\n        \n        componentLocator.waitUntilLoaded().then(() => {\n            this.show(params.get('modal') || '', Object.fromEntries(params));\n        });\n    }\n\n    changeModalSize(ref: string) {\n        if (ref) {\n            $(\"#modal-id\").addClass(\"document-preview-modal-lg\");\n        } else {\n            $(\"#modal-id\").removeClass(\"document-preview-modal-lg\");\n        }\n    }\n\n    show(panelName: string, extraParams: {[string]: any}={}) {\n        this.changeModalSize(extraParams['ref']);\n        let closedAComponent = this._closeExisting();\n\n        if (this._acquireLock() === false) {\n            this.queue.push(() => this.show(panelName, extraParams));\n            return;\n        }\n\n        let componentId = this._getComponentId(panelName);\n        this.currentComponent = panelName;\n\n        if (this.persist.includes(panelName)) {\n            $(`#wrapper_${componentId}`).show();\n        } else {\n            this._renderComponent(componentId, extraParams);\n        }\n\n        this.$modal.addClass(`${kebabCase(panelName.replace(' ', '-'))}-modal`);\n        this._mountModal(closedAComponent);\n    }\n\n    _trapTabInput(event: JQueryEvent, filterIndex=true) {\n        if (!this.open || event.which != 9) return;\n\n        let items = $(this.component).find('a, button, input, textarea, select, details');\n        if (filterIndex) {\n            items = items.filter(':not([tabindex=\"-1\"])').toArray();\n        }\n        let focussed = $(this.component).find(':focus')[0];\n        let focusIndex = items.indexOf(focussed);\n        let nextItem = null;\n        if (event.shiftKey) {\n            focusIndex = Math.max(focusIndex, 0); // -1 means 'not selected' - reset this to 0.\n            nextItem = items[(focusIndex + items.length - 1) % items.length];\n        } else {\n            nextItem = items[(focusIndex + 1) % items.length];\n        }\n        if (nextItem) nextItem.focus();\n        return false;\n    }\n\n    _closeExisting(): boolean {\n        if (this.currentComponent === null) return false;\n\n        this.close(false);\n        return true;\n    }\n\n    _getComponentId(panelName: string): number {\n        if (!this.options[panelName]) {\n            throw `Could not find a modal panel named ${panelName}`;\n        }\n        return this.options[panelName];\n    }\n\n    _renderComponent(componentId: number, extraParams: {[string]: any}) {\n        Object.keys(extraParams).forEach(param => {\n            window.__componentAdapter.setExtraParam(\n                componentId, param, extraParams[param]);\n        });\n\n        // Render the component, once, then call getReady\n        let setReady = false;\n        window.__componentAdapter.render(componentId, false, () => {\n            if (setReady) return;\n            setReady = true;\n            componentLocator.getById(componentId).then(c => (c ? c.onReady() : null));\n        });\n    }\n    \n    close(closeModal: boolean=true) {\n        if (this._acquireLock() === false) {\n            this.queue.push(() => this.close(closeModal));\n            return;\n        }\n\n        let currentComponent = this.currentComponent;\n        this.$modal.removeClass(`${kebabCase(currentComponent.replace(' ', '-'))}-modal`);\n        if (closeModal && this.$modal.hasClass('in')) {\n            this.$modal.modal('hide');\n            this._handleEvent('hidden.bs.modal', () => {\n                this.open = false;\n                this._dismountModal(currentComponent);\n            });\n        } else {\n            this._dismountModal(currentComponent);\n        }\n        this.currentComponent = null;\n    }\n\n    _handleEvent(eventName: string, callback: Function) {\n        this.$modal.off(eventName);\n        this.$modal.on(eventName, callback);\n    }\n\n    _mountModal(closedAComponent: boolean) {\n        this.$modal.modal('show');\n        if (closedAComponent) {\n            this._releaseLock()\n        } else {\n            this._handleEvent('shown.bs.modal', () => {\n                this.open = true;\n                this._releaseLock()\n            });\n        }\n    }\n\n    _dismountModal(currentComponent: ?string) {\n        let componentId = this.options[currentComponent];\n        let childComponent = window.getComponent(componentId);\n\n        if (this.persist.includes(currentComponent)) {\n            $(`#wrapper_${componentId}`).hide();\n        } else if (childComponent) {\n            childComponent.dismount();\n        } else {\n            $(`#wrapper_${componentId}`).html('');\n        }\n        this._releaseLock();\n    }\n\n    _acquireLock(): boolean {\n        if (!this.locked) {\n            this.locked = true;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    _releaseLock() {\n        this.locked = false;\n        if (this.queue.length > 0) {\n            this.queue.pop()();\n        }\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class Navbar extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        //this.addAndRemoveBackground();\n    }\n\n    // scrollTo(target: string) {\n    //     $('html, body').animate({\n    //         scrollTop: $(`#${target}`).offset().top\n    //     }, 'slow');\n    //     return false;\n    // }\n\n    // addAndRemoveBackground() {\n    //     $(window).scroll( function (event) {\n    //         $('.logo-image').addClass('logo-shrink');\n    //         $('.hero-login-mobile').addClass('logo-shrink');\n    //         $('.header-fixed').css({'position': 'fixed', 'background':'#003366', 'transition': '0.5s'});\n    //     });\n    // }\n\n    // showLogin() {\n    //     $(this.component).find('.hero-login').attr('style', '');\n    //     this.scrollTo('home');\n    // }\n}\n","export default class PreferenceCenter extends BaseComponent {\n    initialize() {\n        this.setupChevrons();\n    }\n\n    functions() {\n        return {\n            addSearch: term => this.addSearch(term),\n            removeSearch: term => this.removeSearch(term)\n        }\n    }\n\n    addSearch(term) {\n        this.removeSearch(term);\n        this.find('.child-holder')\n            .filter((i, tag) => !$(tag).text().toLowerCase().includes(term.toLowerCase()))\n            .attr('hidden', 'hidden');\n        this.find('.tag-group').filter((i, group) => {\n            return $(group).find('.child-holder:not([hidden])').length === 0\n        }).attr('hidden', 'hidden');\n        this.find('.preference-section').filter((i, section) => {\n            return $(section).find('.tag-group:not([hidden])').length === 1\n        }).find('.tag-group:not([hidden]) .chevron-holder .fa-chevron-down').each((i, element) => {\n            let target = $(element)\n            target.attr('class', 'fa fa-chevron-up');\n            target.closest('.tag-group').find('.child-tags').show();\n        })\n    }\n\n    removeSearch(term) {\n        this.find('.tag-group').removeAttr('hidden');\n        this.find('.child-holder').removeAttr('hidden');\n    }\n\n    setupChevrons() {\n        $(this.component).on('click', '.chevron-holder .fa-chevron-down', event => {\n            this.find('.chevron-holder .fa-chevron-up').click();\n            let target = $(event.target);\n            target.attr('class', 'fa fa-chevron-up');\n            target.closest('.tag-group').find('.child-tags').show();\n        });\n        $(this.component).on('click', '.chevron-holder .fa-chevron-up', event => {\n            let target = $(event.target);\n            target.attr('class', 'fa fa-chevron-down');\n            target.closest('.tag-group').find('.child-tags').hide();\n        });\n        $(this.component).on('click', '.toggle-category .fa-chevron-down', event => {\n            let target = $(event.target);\n            target.attr('class', 'fa fa-chevron-up');\n            target.closest('.preference-section').addClass('closed')\n            target.closest('.preference-section').find('.tag-groups').addClass('hidden-xs hidden-sm');\n        });\n        $(this.component).on('click', '.toggle-category .fa-chevron-up', event => {\n            let target = $(event.target);\n            target.attr('class', 'fa fa-chevron-down');\n            target.closest('.preference-section').removeClass('closed')\n            target.closest('.preference-section').find('.tag-groups').removeClass('hidden-xs hidden-sm');\n        });\n        $(this.component).on('click', '.tag-group-header .checkbox', event => {\n            let target = $(event.target);\n            let checked = target.prop('checked');\n            target.closest('.tag-group').find('.child-tags .checkbox').prop('checked', checked);\n        });\n        $(this.component).on('click', '.child-holder .checkbox', event => {\n            let target = $(event.target);\n            let checked = target.prop('checked');\n            this.find(`[name=\"${target.attr('name')}\"]`).prop('checked', checked);\n        });\n    }\n\n    acknowledge() {\n        $.post('/acknowledge_preference_message');\n        this.find('.notification').hide();\n    }\n}","import componentLocator from '../../../assets/javascripts/component_locator'\n\nexport default class Register extends BaseComponent {\n    initialize() {\n        this.bindTermsCheckbox();\n    }\n\n    bindTermsCheckbox() {\n        this.find('input[name=\"accepted-terms\"]').change(() => this.updateSubmitButton());\n        this.find('select[name=\"address-country\"]').change(() => this.updateSubmitButton());\n    }\n\n    updateSubmitButton() {\n        let acceptsTerms = this.find('input[name=\"accepted-terms\"]');\n        let country = this.find('select[name=\"address-country\"] option:selected').val();\n        if (country != 'Select Country' && acceptsTerms.prop('checked')) {\n            this.find('.submit-registration').removeAttr('disabled');\n        } else {\n            this.find('.submit-registration').attr('disabled', 'disabled');\n        }\n    }\n\n    submit() {\n        this.find('[name=\"email\"]')[0].setCustomValidity('');\n        if (!this.find('input,select').toArray().every(e => e.reportValidity())) {\n            return false;\n        }\n        $.post('/register', this.find('form').serialize())\n            .done(data => window.location.href = data.redirect)\n            .fail(error => {\n                if (error.status == 409) {\n                    this.flashError(\n                        this.find('[name=\"email\"]')[0],\n                        'A contact already exists with this email address.'\n                    )\n                }\n            })\n    }\n\n    flashError(element, message) {\n        element.setCustomValidity(message);\n        element.reportValidity();\n    }\n}","import BaseComponent from '../base_component/base_component'\n\nexport default class ResearchDocumentSummary extends BaseComponent {\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options)\n        \n        this.$component = $(this.component)\n        \n        $('.read-report-button').on('click', () => { this.showPopup() })\n    }\n\n    showPopup() {\n        let contactEmail = $('#research-preview-contact-email').text()\n        let popupHtml = `<div class=\"upgrade-popup\">\n                            <i class=\"upgrade-popup-quit fa fa-times-circle\"></i>\n                            <div class=\"upgrade-popup-message\">\n                                <h3>You'll need to upgrade your subscription plan</h3>\n                                <p>Please contact: <a href=\"mailto:${contactEmail}\">${contactEmail}</a></p>\n                            </div>\n                            <div class=\"upgrade-popup-controls\">\n                                <button class=\"upgrade-popup-cancel\">Cancel</button>\n                                <a href=\"mailto:${contactEmail}\">\n                                    <button class=\"upgrade-popup-email\">Email</button>\n                                </a>\n                            </div>\n                        </div>`\n        $('body').prepend(popupHtml)\n        $('.upgrade-popup-quit, .upgrade-popup-cancel').on('click', () => { this.hidePopup() })\n    }\n\n    hidePopup() {\n        $('.upgrade-popup').remove()\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\nimport {validatePassword} from '../scripts/validate_password/validate_password'\n\nexport default class ResetPassword extends BaseComponent {\n    constructor(id: number, component_name: string) {\n        super(id, component_name);\n        $(this.component).find('#password').focus();\n        $(this.component).find('#old_password').focus();\n        this.addAsyncHooks();\n    }\n\n    addAsyncHooks() {\n        this.find('#confirm').keyup(event => {\n            let oldPassword = $('#new_password').val();\n            let isMatch = oldPassword === $(event.target).val();\n            this.whenInactiveFor(300, () => {\n                let hint = this.find('#change_password_error');\n                hint.text(isMatch ? '' : 'Password and confirmed password must be the same.');\n                hint.toggle(!isMatch);\n            });\n        });\n        this.find('#new_password').keyup(event => {\n            let password = $(event.target).val();\n            let result = password.length < 3 ? null : validatePassword(password);\n            this.whenInactiveFor(300, () => {\n                let hint = this.find('#change_password_error');\n                hint.text(result);\n                hint.toggle(!!result);\n            });\n        });\n    }\n\n    whenInactiveFor(time, callback) {\n        let timeout = this.timeoutId = setTimeout(() => {\n            this.timeoutId == timeout ? callback() : null\n        }, time)\n    }\n\n    validate($this: JQuery, $: JQueryStatic) {\n        $ = $ || window.$;\n        $this = $this || $(this.component);\n        var old_password = $.trim(($this.find('#old_password').val(): any));\n        var new_password = $.trim(($this.find('#new_password').val(): any));\n        var confirm = $.trim(($this.find('#confirm').val(): any));\n        let validationResult = validatePassword(new_password);\n        if (validationResult) {\n            $this.find('#reset_password_error').text(validationResult);\n            this.clearPasswords($this);\n            return false;\n        } else if (new_password != confirm) {\n            $this.find('#reset_password_error').text(\"Password and confirmed password must be the same.\");\n            this.clearPasswords($this);\n            return false;\n        } else {\n            $this.find('#reset_password_error').text(\"\");\n            $this.find('button#reset_password').prop('disabled', true);\n            return true;\n        }\n    }\n\n    validateEmail() {\n        var email = this.find('#email').val().toString();\n        if (email == '') {\n            this.find('#reset_password_error').text(\"You must enter an Email Address.\");\n            this.find('#email').focus();\n            return false;\n        } else {\n            this.find('#reset_password_error').text(\"\");\n            this.find('button#reset_password').prop('disabled', true);\n            return true;\n        }\n    }\n\n    clearPasswords($this: JQuery) {\n        $this.find('#new_password').val('');\n        $this.find('#confirm').val('');\n        $this.find('#password').focus();\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class RoadshowCalendar extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n    }\n\n    onLoad() {\n        this.normaliseHeight();\n    }\n\n    normaliseHeight() {\n        let rows = $(this.component).find('.simple-calendar>table>tbody>tr');\n        let numRows = rows.length;\n        rows.css('height', `calc((100vh - 221px) / ${numRows})`);\n    }\n\n    navigate(date: string) {\n        this.setParam('roadshow_current_date', date);\n        this.rerender();\n    }\n\n    showTooltip(id: string) {\n        $(this.component).find(`.roadshow-event-tooltip[data-id=\"${id}\"]`).show();\n    }\n\n    hideTooltip(id: string) {\n        $(this.component).find(`.roadshow-event-tooltip[data-id=\"${id}\"]`).hide();\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class RoadshowDetails extends BaseComponent {\n\n    initialize() {\n        $( \"#accordion\" ).accordion({\n            collapsible: true,\n            event: \"click\",\n            animate:400,\n            active: 0,\n            heightStyle: true,\n            header: '.accordion-header',\n            icons:{header:\"ui-icon-caret-1-s\",activeHeader:\"ui-icon-caret-1-n\"}\n        });\n        let headers = this.headers = new Map();\n        $(this.component).find('.accordion-header').each(function() {\n            headers.set(new Date(Date.parse($(this).text())), $(this).parent());\n        });\n        this.tagFilters = new Set();\n    }\n\n    functions() {\n        return {\n            reloadData: () => {},\n            addDateFilter: (startDate: any, endDate: any) => this.setDateRange(startDate, endDate),\n            removeDateFilter: () => this.setDateRange(),\n            toggleTag: (value: string, category: string, checked: boolean) => this\n                .toggleTag(category, value, checked)\n        }\n    }\n\n    setDateRange(start: ?Date, end: ?Date) {\n        if (!start || !end) {\n            for(let header of this.headers.values()) {\n                header.removeClass('hidden-date');\n            }\n            return;\n        }\n\n        for (let [date, element] of this.headers.entries()) {\n            let displayed = (date >= start) && (date <= end);\n            element.toggleClass('hidden-date', !displayed);\n        }\n    }\n\n    toggleTag(category: string, value: string, checked: boolean) {\n        // Quite a naive approach, but very flexible to changes in the .liquid.\n        if (checked) {\n            this.tagFilters.add(value);\n        } else {\n            this.tagFilters.delete(value);\n        }\n        this._updateTagFilters();\n    }\n\n    _updateTagFilters() {\n        let filters = this.tagFilters;\n        for (let section of this.headers.values()) {\n            let allHidden = true;\n            let skipped = false;\n            section.children().last().find('tr').each(function() {\n                if (!skipped) return (skipped = true);\n                let matched = filters.size === 0;\n                for (let filter of filters) {\n                    matched = matched || $(this).text().includes(filter);\n                }\n                $(this).closest('table').toggleClass('hidden-tag', !matched);\n                allHidden = allHidden && !matched;\n            })\n\n            section.toggleClass('hidden-tag', allHidden);\n        }\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\n\nexport default class RoadshowRequest extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n    \n        const self = this\n        $('body').on('click', '.request-roadshow-slots-toggle', function () {\n            $(this).toggleClass('expanded')\n            $(this).siblings('.request-roadshow-slots').toggleClass('expanded')\n        })\n\n        $('body').on('click', '.request-roadshow-slot', function () {\n            self.requestRoadshowSlot($(this))\n        })\n\n        $('body').on('click', '.request-specific-roadshow-slot-active', function () {\n            self.requestSpecificRoadshowSlot($(this))\n        })\n    }\n\n    requestRoadshowSlot(button: JQuery) {\n        button.removeClass('request-roadshow-slot')\n        button.append(' <i class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\"></i>')\n\n        let roadshowId = button.closest('.request-roadshow').data('roadshow-id')\n        this.requestSlot(roadshowId, undefined).done( () => {\n            button.removeClass('btn-primary')\n            button.addClass('btn-success')\n            button.html('Request Sent! <i class=\"fa fa-check\" aria-hidden=\"true\"></i>')\n        })\n    }\n\n    requestSpecificRoadshowSlot(button: JQuery){\n        button.removeClass('request-specific-roadshow-slot request-specific-roadshow-slot-active')\n        let otherSlots = button.closest('.request-roadshow').find('.request-specific-roadshow-slot')\n        otherSlots.addClass('disabled')\n        otherSlots.removeClass('request-specific-roadshow-slot-active')\n        button.append(' <i class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\"></i>')\n\n        let roadshowId = button.closest('.request-roadshow').data('roadshow-id')\n        let roadshowSlotId = button.data('roadshow-slot-id')\n        this.requestSlot(roadshowId, roadshowSlotId).done( () => {\n            button.addClass('btn-success')\n            button.html('Request Sent! <i class=\"fa fa-check\" aria-hidden=\"true\"></i>')\n        })\n    }\n\n    requestSlot(roadshowId: string, slotId: ?string) {\n        let headers: {[string]: any} = {\n            'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')\n        };\n        return $.ajax({\n            type: \"POST\",\n            url: '/request_slot',\n            data: JSON.stringify({\n                'roadshow_id': roadshowId,\n                'roadshow_slot_id': slotId\n            }),\n            dataType: 'json',\n            contentType: 'application/json',\n            headers: headers\n        });\n    }\n}","import BaseComponent from '../base_component/base_component';\n\nexport default class RoadshowSlots extends BaseComponent {\n    initialize() {\n        this.openFirstSection();\n        $(this.component).find('.panel-heading').click((e) => {\n            $('.collapse').collapse('hide');\n            let accordion = $(e.target).closest('.panel-heading').find('.fa.accordion');\n            if ($(e.target).closest('.panel-default').find('.panel-body.in').length === 0) {\n                accordion.removeClass('fa-angle-down');\n                accordion.addClass('fa-angle-up');\n            } else {\n                accordion.addClass('fa-angle-down');\n                accordion.removeClass('fa-angle-up');\n            }\n        });\n    }\n\n    openFirstSection() {\n        $('.panel-default').children()[0].click()\n    }\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\nrequire( 'jszip' );\nrequire( 'pdfmake' );\nrequire( 'datatables.net' );\nrequire( 'datatables.net-dt' );\nrequire( 'datatables.net-buttons-dt' );\nrequire( 'datatables.net-buttons/js/buttons.colVis.js' );\nrequire( 'datatables.net-buttons/js/buttons.html5.js' );\nrequire( 'datatables.net-buttons/js/buttons.flash.js' );\nrequire( 'datatables.net-buttons/js/buttons.print.js' );\n\n\nexport default class Scorecard extends BaseComponent {\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        this.load();\n        $('#segment_select').on('change', (e) => {\n         this.changeScorecard(e)\n        });\n    }\n\n    load(){\n        let self = this;\n        $(self.component).find('#score-card-table').DataTable({\n            \"ordering\": false,\n            \"searching\": false,\n            \"autoWidth\": true,\n            \"fixedHeader\": true,\n            \"paging\": false,\n            \"info\": false,\n            \"dom\": 'Bft',\n            \"buttons\": {\n                buttons: [\n                    {extend: 'csv', className: 'btn btn-primary'},\n                    {extend: 'excel', className: 'btn btn-primary'},\n                    // {extend: 'pdf', className: 'btn btn-primary'},\n                    {extend: 'print', className: 'btn btn-primary'}]\n            }\n        });\n\n        $(self.component).find('#vote-breakdown-table').DataTable({\n            \"ordering\": true,\n            \"searching\": true,\n            \"autoWidth\": true,\n            \"fixedHeader\": true,\n            \"paging\": true,\n            \"info\": false,\n            \"dom\": 'Bft',\n            \"buttons\": {\n                buttons: [\n                    {extend: 'csv', className: 'btn btn-primary'},\n                    {extend: 'excel', className: 'btn btn-primary'},\n                    // {extend: 'pdf', className: 'btn btn-primary'},\n                    {extend: 'print', className: 'btn btn-primary'}]\n            }\n        });\n    }\n\n    changeScorecard(e){\n        window.location.href = '/scorecard?segment_id='+e.currentTarget.value;\n    }\n}","import {deferrablePost} from '../../../assets/javascripts/offline_handler';\n\nexport default function() {\n    $('body').off('click', '.star-holder');\n    $('body').on('click', '.star-holder', function() {\n        let tag = {category: $(this).attr('data-category'), value: $(this).attr('data-name')}\n        let route = $(this).hasClass('selected') ? '/remove_favourite_tag' : '/add_favourite_tag'\n        deferrablePost(route, {tag: JSON.stringify(tag)});\n        $(this).toggleClass('selected');\n        $(this).closest('.tag-panel').remove();\n    })\n}\n","export function validatePasswordInputs(oldPassword, newPassword, confirmed) {\n    if (oldPassword == '') {\n        return 'Please enter your old password.';\n    }\n    if (newPassword == '') {\n        return 'Please enter your new password.';\n    }\n    if (confirmed != newPassword) {\n        return 'Password and confirmed password must be the same.';\n    }\n\n    return validatePassword(newPassword);\n}\n\nexport function validatePassword(password) {\n    if (password.length < 8) {\n        return 'Password must be at least 8 characters.';\n    }\n    let hasLowerCase = !!password.match(/[a-z]/);\n    let hasUpperCase = !!password.match(/[A-Z]/);\n    let hasNumber = !!password.match(/[0-9]/);\n    let hasSymbol = !!password.match(/[$-/:-?{-~!\"^_`\\[\\]]/);\n\n    if (hasLowerCase + hasUpperCase + hasNumber + hasSymbol >= 3) {\n        return;\n    }\n\n    // Not technically true, but it's easier to understand this way.\n    if (hasLowerCase && hasUpperCase) {\n        return 'Password must contain at least one number or symbol.';\n    }\n    if (hasLowerCase && hasNumber) {\n        return 'Password must contain at least one upper case letter or symbol.';\n    }\n    if (hasLowerCase && hasSymbol) {\n        return 'Password must contain at least one upper case letter or number.';\n    }\n    return 'Password should contain at least three of: ' +\n        'a lower case letter; an upper case number; a symbol or a number.'\n}","// @flow\nimport BaseComponent from '../base_component/base_component'\nimport componentLocator from '../../assets/javascripts/component_locator'\n\nexport default class SearchBar extends BaseComponent {\n    filtersActive: boolean\n    previousSearch: Array<string>\n    target: any\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n\n        this.find('.quick-search-input').keyup(() => this.handleSearch());\n        this.previousSearch = [];\n        if (options.target) {\n            componentLocator.getSingle(options.target).then(c => {\n                this.target = c.functions()\n            });\n        } else {\n            this.target = componentLocator.f; // All searchables.\n        }\n    }\n    \n    handleSearch() {\n        let $searchBar = this.find('.quick-search-input');\n\n        let text: any = ($searchBar.val() || '');\n        if (text) {\n            this.target.removeSearch();\n            (text || '').split(' ').forEach(word => {\n                this.target.addSearch(word)\n            });\n        } else {\n            this.target.removeSearch();\n        }\n    }\n}","// @flow\nimport DataTable from '../data_table/data_table'\nimport {snakeCase, isEqual} from 'lodash-es'\nimport type FilterContext from '../data_table/filter_context'\n\nexport default class TabbedDataTable extends DataTable {\n\n    constructor(id: number, component_name: string, options: any, extra_params: {}) {\n        super(id, component_name, options, extra_params);\n        $(this.component).find('[data-toggle=\"tab\"]').on('shown.bs.tab', function() {\n            let $target = $($(this).attr('href'));\n            $target.find('.dataTables_scrollBody table').DataTable().draw();\n        });\n    }\n\n    load() {\n        let self = this;\n        let description = self.filterContext.getDescription();\n        if (this.params && isEqual(description, this.params)) return;\n        this.params = Object.assign( {}, this.getParams(), description );\n        $.getJSON(this.options.controller, this.params, (response) => {\n            if (self.dismounting) return;\n\n            self.finishedLoading();\n            let $component = $(self.component);\n            self.clear();\n            \n            let tabIndex = 0;\n            for (const tabName of Object.keys(response)) {\n                let tableData = response[tabName]\n                let tabClass = `.tab-${tabIndex}`\n                let options = self.getDefaultOptions(tableData);\n                tableData.columns.forEach(column => {\n                    $component.find(tabClass).find('.headers').append(\n                        `<th class=\"col_${snakeCase(column[0])}\">${column[0]}</th>`);\n                    self.handleFormatters(column, options, $component);\n                });\n                if (self.dismounting) return;\n                self.filterContext.table = $(self.component).find(tabClass).DataTable(options);\n                self.filterContext.columnIndexes = self.columnIndexes;\n                self.filterContext.apply();\n                self.addIcons();\n                $component.find('.action-wrapper').show();\n                tabIndex++;\n\n            }\n        })\n    }\n}\n","import BaseComponent from '../base_component/base_component'\n\nexport default class Team extends BaseComponent {\n    constructor(id: number, component_name: string, options: any, extra_params: {}) {\n        super(id, component_name, options, extra_params);\n    }\n\n    showPopup(id) {\n        $(`#team-member-popup-overlay-${id}`).show()\n        $(`#team-member-popup-${id}`).show('fast')\n    }\n\n    hidePopup(id) {\n        $(`#team-member-popup-overlay-${id}`).hide()\n        $(`#team-member-popup-${id}`).hide('fast')\n    }\n}\n","// @flow\nimport BaseComponent from '../base_component/base_component';\nimport offlineHandler from '../../assets/javascripts/offline_handler';\n\nexport default class UserPanel extends BaseComponent {\n    minimised: ?boolean;\n    $userPanel: JQuery;\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n\n        this.minimised = options.minimised || window.innerWidth < 768;\n        this.$userPanel = $(this.component).find('.user-panel');\n\n        if (this.minimised) {\n            this.$userPanel.toggleClass('minimised', this.minimised);\n        }\n        setTimeout(() => this.$userPanel.removeClass('loading'), 10);\n        let resizeTimer, width = window.innerWidth, delay = 500;\n        $(window).on('resize', () => {\n            clearTimeout(resizeTimer);\n            resizeTimer = setTimeout(() => {\n                if ((width < 768 && window.innerWidth >= 768 && this.minimised) ||\n                    (window.innerWidth < 768 && width >= 768 && !this.minimised)) {\n                        this.toggle()\n                }\n                width = window.innerWidth\n            }, 150);\n        });\n        if(!options.disable_resize) {\n            $(this.component).find('.user-panel__minimise').click(() => this.toggle());\n        }\n    }\n\n    loadPage(pageName: string) {\n        if(navigator.onLine) {\n            window.loadPage(pageName);\n        } else {\n            window.location.href = `/${pageName}`\n        }\n        return false;\n    }\n\n    functions() {\n        return {\n            selectPage: (name: string) => this.setSelected(name),\n            onOnline: () => this.setOnline(),\n            onOffline: () => this.setOffline()\n        }\n    }\n\n    toggle(isOpen: ?boolean) {\n        this.minimised = isOpen == null ? !this.minimised : !isOpen;\n        this.$userPanel.toggleClass('minimised', this.minimised);\n        setTimeout(() => $(window).trigger('resize'), 500);\n    }\n\n    setSelected(menuItem: string) {\n        this.$userPanel.find('[data-page].active').removeClass('active');\n        this.$userPanel.find(`[data-page=\"${menuItem}\"]`).addClass('active');\n    }\n\n    setOnline() {\n        this.find('.nav-pill').removeClass('offline');\n    }\n\n    async setOffline() {\n        if (!('serviceWorker' in navigator)) return;\n\n        const cachedPages = await offlineHandler.getCachedPages();\n        this.find('[data-page]').each((i: number, element: Element) => {\n            let $element = $(element);\n            if (!cachedPages.includes($element.attr('data-page'))) {\n                $element.addClass('offline');\n            }\n        });\n    }\n}\n","import BaseComponent from '../base_component/base_component'\nimport VideoEventHandler from './video_event_handler'\n\nexport default class Video extends BaseComponent {\n\n    constructor(id: number, component_name: string, options: any) {\n        super(id, component_name, options);\n        \n        this.$component = $(this.component);\n\n        this.player = this.$component.find('video')\n        this.initEventHandler(this.player);\n    }\n\n    initEventHandler() {\n        this.eventHandler = new VideoEventHandler(this.player);\n    }\n}","export default class VideoEventHandler {\n\n    constructor(player) {\n        this.player = player\n\n        this.initEventListener()\n    }\n\n    initEventListener() {\n        this.player.on('play', (event) => {\n            console.log(`\"play\" event - time: ${this.currentTime()} secs`)\n        })\n        this.player.on('pause', (event) => {\n            console.log(`\"pause\" event - time: ${this.currentTime()} secs`)\n        })\n        this.player.on('timeupdate', (event) => {\n            console.log(`\"timeupdate\" event - time: ${this.currentTime()} secs`)\n        })\n        this.player.on('seeking', (event) => {\n            console.log(`\"seeking\" event - time: ${this.currentTime()} secs`)\n        })\n        this.player.on('seeked', (event) => {\n            console.log(`\"seeked\" event - time: ${this.currentTime()} secs`)\n        })\n    }\n\n    currentTime() {\n        return this.player[0].currentTime\n    }\n}","import useServiceWorker from '../../assets/javascripts/configuration.js.erb';\nconst DOCS = 'pdf-v0'; // Make sure this lines up with service_worker\n\n// TODO: Online behaviour.\nexport default class YourResearch extends BaseComponent {\n    initialize() {\n        this.find('.document-select').change(element =>\n            this.loadPdf($(element.target).find(':selected')));\n        if (useServiceWorker) {\n            this.populateFromCache();\n        }\n    }\n\n    async populateFromCache() {\n        let cache = await caches.open(DOCS);\n        let keys = await cache.keys();\n        let select = this.find('.document-select');\n        keys.forEach(async key => {\n            let title = await (await cache.match(key)).headers.get('Document-Title')\n            select.append(`\n                <option data-url=${key.url} class=\"offline-only\">${title}</option>\n            `.trim());\n        });\n    }\n\n    loadPdf(element) {\n        this.find('.viewer').removeClass('hidden');\n        _functions.loadPdf(element.attr('data-url'));\n    }\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","constructor","_defineProperty","this","awaiters","clear","componentFactories","Map","componentsById","componentsByName","functions","window","_functions","f","functionList","getComponent","$","closest","attr","get","parseInt","isNaN","components","length","_loaded","loaded","isLoaded","forEach","awaiter","componentId","__componentAdapter","latestBatch","component","onReady","handleAjaxError","ajaxErrors","waitUntilLoaded","_this","_asyncToGenerator","Promise","push","registerComponentFactory","name","factory","set","upperFirst","camelCase","createComponent","options","extra_params","jsc","getFactory","BaseComponent","existingComponents","func","addFunction","deleteComponent","_this2","delete","byName","component_name","splice","indexOf","finalize","then","_this3","_len","arguments","args","Array","_key","fallbackClass","titleizedName","require","default","getById","_this4","getAll","componentName","_this5","getSingle","_this6","allComponents","PAGES","POST_REQUESTS","handlingPostRequests","handler","initialize","useServiceWorker","on","toggleOfflineClass","componentLocator","onOffline","handlePostRequests","onOnline","navigator","onLine","toggleClass","caches","cacheComponents","isOnline","path","location","protocol","host","pathname","compPath","match","cache","open","put","Response","JSON","stringify","getCachedPages","_listCachedPages","concat","cache_name","key","url","filter","includes","parts","split","clearCaches","cacheNames","all","_ref","cacheName","cacheKeys","_ref2","_x2","apply","_x","_ref3","response","headers","body","json","deferrablePost","_x3","uri","undefined","ajax","type","data","dataType","contentType","always","document","ready","ComponentBuilder","getLocator","execute","active","queued","buildComponents","assign","clearedKeys","wrapper","getElementById","_renderComponent","setTimeout","_createComponentObjects","_scrollToElement","href","className","replace","oldClass","newClass","innerHTML","children","child","componentsWaiting","_countChildren","_createJavascriptClass","subcomponents","_dispatchRenderEvent","_handleJavascriptOnlyComponents","jwtDecode","newComponent","onLoad","c","controller","result","deferred","substr","$element","slice","scrollIntoView","renderedEvent","Event","dispatchEvent","addEventListener","componentBuilder","runner","latestPageRequest","ComponentReloader","new_components","oldComponents","groupById","componentsToReload","Set","reload","recursiveDelete","rerender","fragments","render","html","items","reduce","loadPage","page","_waitUntilReady","getJSON","_","xhr","getResponseHeader","updateDocumentMetadata","fail","toLowerCase","str","charAt","toUpperCase","substring","join","oldBodyClass","history","pushState","st_async","encodeURIComponent","selectPage","requestId","Math","random","fallbackTimer","race","router","bind","AboutUs","super","navActivate","find","click","hasClass","fadeOut","removeClass","fadeIn","addClass","DownloadDocuments","download","each","i","element","getAttribute","SearchBar","enableFilters","filtersActive","$filterIcon","filters","toggle","callbacks","isActive","save","selectedProducts","updateData","hide","show","scrollToElement","elements","inverse","$outer","viewportScroll","scrollTop","viewportTop","offset","top","found","dt","elementTop","animate","_name","outer","reverse","chevron","target","trigger","AjaxError","errorCount","addError","close","_injectError","remove","text","template","append","AvailableProducts","addSearch","term","filterBy","removeSearch","product","request","requestedProducts","paramsData","products","selector","dismount","asRerender","setParam","value","setExtraParam","Carosel","load","self","toString","success","initCarosel","container","height","css","centerMode","hero","responsive","breakpoint","settings","slidesToShow","slidesToScroll","carosel","setContent","slick","getOptions","content","dots","infinite","centerPadding","ChangePassword","focus","addAsyncHooks","keyup","event","isMatch","val","whenInactiveFor","hint","password","validatePassword","time","callback","timeout","timeoutId","validate","$this","old_password","trim","new_password","confirm","validationResult","clearPasswords","prop","Confirmation","ok","cancel","getConfirmationResult","ConsentBanner","acceptCookies","setCookiesOnScroll","hideCookieMessage","setCookie","cookie","hideClass","class_name","scroll","ContactActions","getSelectedContacts","selectedContacts","selectedContactsMap","contactId","contactName","expireContacts","contactsMap","contactIds","contactNames","values","title","message","console","log","reloadData","error","ContactUs","validForm","startRequest","submitForm","done","finishRequest","acceptedPrivacyPolicy","is","displayRequiredLabel","firstName","lastName","email","company","mobileNumber","cols","CustomDashboard","isEditing","handlers","activeMenu","attachHandlers","handleMovers","_removeComponent","_removeRow","addMenuItem","_openAddMenu","stopPropagation","_fixRowHeight","$wrapper","next","first","$row","parent","_fixColWidth","_addItem","_closeAddMenu","_getPossibleElements","startCase","closeMenu","itemGroup","activeElements","toArray","off","$rows","_generateElement","isFull","$component","originalY","netChange","upperElement","upperHeight","upperH","lowerElement","lowerHeight","lowerH","dragger","distanceMoved","pageY","abs","round","newUpperH","max","min","newLowerH","_setRowClass","onMouseUp","prev","_getHClass","hClass","row","rowItems","colWidths","ignoreEmpty","rowCount","newValue","mode","toggleEditMode","saveStructure","layout","sidebar","rows","heightClass","DtStub","col","drawn","isVisible","column","columns","search","regex","smart","draw","visible","DataTable","_handleFiltered","filterContext","FilterContext","sync_only","table","dataTableModified","reloadTimeout","clearTimeout","addFilter","add","setFilter","toggleFilter","isSet","removeFilter","removeFilters","clearAll","destroy","showColumn","toggleColumn","hideColumn","addDateFilter","startDate","endDate","dateRange","removeDateFilter","toggleTag","category","checked","tagSearch","initialLoad","isReload","description","getDescription","params","isEqual","getParams","currentRequest","beforeSend","abort","dismounting","finishedLoading","getDefaultOptions","snakeCase","handleFormatters","columnIndexes","addIcons","trs","entries","extraClasses","formatter","config","fm","handleFormatter","formatterFunc","formatters","acc","index","stripes","stripe","orderable","paging","pagingType","pageLength","page_length","scrollX","scrollY","scrollCollapse","stripeClasses","order","oLanguage","sEmptyTable","empty_message","dom","opts","async","param","startsWith","getFilters","filterFunc","filterFunction","fn","dataTable","ext","Search","DateRange","TagSearch","getContexts","context","prime","clearFilter","call","asFunction","funcIndex","dataIndex","every","array","_objectSpread","BaseFilter","invoke","minDate","maxDate","columnIndex","foundDate","Date","setHours","start_date","toISOString","end_date","dateFilters","searchText","size","filterText","from","cat","filterTags","tags","t","tagFilters","tag","categories","tag_filters","dateFormat","preview","style","rating","roadshowRequestSlot","dtSettings","colIndex","prevAll","buttonContent","button","dtColumn","option","Dialogue","setDialogHeader","setDialogText","setText","showDialog","hideDialog","completeDialogLoading","setTitle","removeAttr","handleOk","handleDialogOk","handleCancel","handleDialogCancel","FilterPanel","isOpen","dataTables","initPanel","initFiltering","resetDateFilter","datePickers","tagContainer","initDatePicker","closePanel","datepicker","inputs","format","date_format","autoclose","keepEmptyValues","orientation","tagSections","TagSection","change","filterDates","picker","start","end","removePill","dateSet","showPill","pill","adding","reset","section","panel","p","groupName","findChildren","initEvents","header","accordion","accordion_i","checkboxes","checkbox","handleCheckboxChecked","decodeURIComponent","label","Footer","toggleFooterSize","closeFooter","footer","GridViewPage","isGridView","cold","previousData","Storage","pricingData","parse","localStorage","getItem","toggleGridView","_refreshData","gridView","templateHTML","outerHTML","star","img","__","date","content_icon","ticker","summary","newHTML","String","_getPricingData","outDatedTime","setMinutes","getMinutes","checkedTime","_getPricingApi","now","parseFloat","setItem","_updateTicker","api_key","$currentData","last","Hero","addAndRemoveBackground","overrideLoginBehaviour","$form","redirectString","_getRedirectString","submit","scrollTo","$target","showLogin","showForm","resetPassword","post","serialize","Tabs","newUrl","urlPath","tables","tabName","loadTab","tab","Tile","initTiles","tiles","setTileContent","tile","thumbnail_url","Loading","Modal","currentComponent","queue","persist","$modal","$panels","_trapTabInput","addCloseHandler","addImplicitSupport","mouseOffContent","mousedown","has","mouseup","remote","argHash","hash","arg","paramsArray","v","fromEntries","changeModalSize","ref","panelName","extraParams","closedAComponent","_closeExisting","_acquireLock","_getComponentId","kebabCase","_mountModal","filterIndex","which","focussed","focusIndex","nextItem","shiftKey","setReady","closeModal","modal","_handleEvent","_dismountModal","eventName","_releaseLock","childComponent","locked","pop","Navbar","PreferenceCenter","setupChevrons","group","acknowledge","Register","bindTermsCheckbox","updateSubmitButton","acceptsTerms","setCustomValidity","reportValidity","redirect","status","flashError","ResearchDocumentSummary","showPopup","contactEmail","popupHtml","prepend","hidePopup","ResetPassword","validateEmail","RoadshowCalendar","normaliseHeight","numRows","navigate","showTooltip","hideTooltip","RoadshowDetails","collapsible","heightStyle","icons","activeHeader","setDateRange","displayed","_updateTagFilters","allHidden","skipped","matched","RoadshowRequest","siblings","requestRoadshowSlot","requestSpecificRoadshowSlot","roadshowId","requestSlot","otherSlots","roadshowSlotId","slotId","RoadshowSlots","openFirstSection","collapse","Scorecard","changeScorecard","buttons","extend","currentTarget","route","validatePasswordInputs","oldPassword","newPassword","confirmed","hasLowerCase","hasUpperCase","hasNumber","hasSymbol","handleSearch","previousSearch","word","TabbedDataTable","tabIndex","tableData","tabClass","Team","UserPanel","minimised","innerWidth","$userPanel","resizeTimer","width","disable_resize","pageName","setSelected","setOnline","setOffline","menuItem","cachedPages","offlineHandler","Video","player","initEventHandler","eventHandler","VideoEventHandler","initEventListener","currentTime","YourResearch","loadPdf","populateFromCache","select"],"sourceRoot":""}