{"version":3,"file":"js/application-f494bf49b56a05570551.js","mappings":"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","sources":["webpack://stornaway/./app/webpack/images/ sync ^\\.\\/.*$","webpack://stornaway/./app/webpack/scripts/studio/lib/sidebar_loading_concurrency.js","webpack://stornaway/./app/webpack/scripts/lib/choices/locations.js","webpack://stornaway/./app/webpack/scripts/lib/choices/custom_button_positions.js","webpack://stornaway/./app/webpack/scripts/lib/choice_property_details.js","webpack://stornaway/./app/webpack/scripts/lib/choices/time_validation.js","webpack://stornaway/./app/webpack/scripts/lib/file_upload.js","webpack://stornaway/./app/webpack/scripts/studio/lib/express_embed.js","webpack://stornaway/./app/webpack/scripts/studio/lib/select_fieldsets.js","webpack://stornaway/./app/webpack/scripts/studio/index.js","webpack://stornaway/./app/webpack/scripts/lib/form_tabs.js","webpack://stornaway/./app/webpack/scripts/lib/with_js.js","webpack://stornaway/./app/webpack/scripts/lib/form_tabs_labels.js","webpack://stornaway/./app/webpack/scripts/lib/cocoon/limit.js","webpack://stornaway/./app/webpack/scripts/lib/cocoon/choices_advanced_logic.js","webpack://stornaway/./app/webpack/scripts/lib/cocoon/index.js","webpack://stornaway/./app/webpack/scripts/lib/cocoon/position.js","webpack://stornaway/./app/webpack/scripts/lib/cocoon/reorder.js","webpack://stornaway/./app/webpack/scripts/lib/roving_tabindex.js","webpack://stornaway/./app/webpack/scripts/lib/file_upload_on_change.js","webpack://stornaway/./app/webpack/scripts/lib/ujs_busy.js","webpack://stornaway/./app/webpack/scripts/lib/ujs_form_errors.js","webpack://stornaway/./app/webpack/scripts/lib/file_upload_progress.js","webpack://stornaway/./app/webpack/scripts/lib/color_picker.js","webpack://stornaway/./app/webpack/scripts/lib/variable_form_value_type.js","webpack://stornaway/./app/webpack/scripts/lib/check_export.js","webpack://stornaway/./app/webpack/scripts/lib/check_project_creation.js","webpack://stornaway/./app/webpack/scripts/lib/show_hide.js","webpack://stornaway/./app/webpack/scripts/lib/island_edit_modes.js","webpack://stornaway/./app/webpack/scripts/lib/update_checkboxes.js","webpack://stornaway/./app/webpack/scripts/lib/script_editor.js","webpack://stornaway/./app/webpack/scripts/lib/confirm_out_of_form_navigation.js","webpack://stornaway/./app/webpack/scripts/lib/internal_link_options.js","webpack://stornaway/./app/webpack/scripts/lib/password_toggler.js","webpack://stornaway/./app/webpack/scripts/lib/check_duplication_state.js","webpack://stornaway/./app/webpack/scripts/lib/variant_behaviour_fields.js","webpack://stornaway/./app/webpack/scripts/lib/condition_group_sync_logical_operators.js","webpack://stornaway/./app/webpack/scripts/lib/generic_project_variable_within_form.js","webpack://stornaway/./app/webpack/scripts/lib/js_select2.js","webpack://stornaway/./app/webpack/scripts/lib/variant_behaviour_actions_handler.js","webpack://stornaway/./app/webpack/scripts/lib/condition_variable_types_handler.js","webpack://stornaway/./app/webpack/scripts/lib/file_upload_validation.js","webpack://stornaway/./app/webpack/scripts/lib/plan_variants.js","webpack://stornaway/./app/webpack/scripts/lib/file_upload_modal.js","webpack://stornaway/./app/webpack/scripts/lib/project_export_page.js","webpack://stornaway/./app/webpack/packs/application.js","webpack://stornaway/./app/webpack/scripts/videoPlayer/index.js","webpack://stornaway/./app/webpack/scripts/lib/plan_variants_sync.js","webpack://stornaway/./app/webpack/scripts/lib/collapsible_field.js","webpack://stornaway/./app/webpack/scripts/lib/role_button.js","webpack://stornaway/./app/webpack/scripts/lib/ujs_busy_target.js","webpack://stornaway/./app/webpack/scripts/lib/external_url_options.js","webpack://stornaway/./app/webpack/scripts/lib/dashboard/project_templates.js","webpack://stornaway/./app/webpack/scripts/lib/ujs_error_notifications.js","webpack://stornaway/./app/webpack/scripts/lib/dom.js","webpack://stornaway/./app/webpack/scripts/lib/is_within.js","webpack://stornaway/./app/webpack/scripts/lib/load_modal_content.js","webpack://stornaway/./app/webpack/scripts/lib/notifications.js","webpack://stornaway/./app/webpack/scripts/lib/stripe.js","webpack://stornaway/./app/webpack/scripts/lib/turbolinks_before_cache.js","webpack://stornaway/./app/webpack/scripts/lib/url.js","webpack://stornaway/./app/webpack/scripts/studio/lib/drawer.js","webpack://stornaway/./app/webpack/scripts/studio/lib/highlightIsland.js","webpack://stornaway/./app/webpack/scripts/studio/lib/iframe_modal.js","webpack://stornaway/./app/webpack/scripts/studio/lib/project_errors.js","webpack://stornaway/./app/webpack/vendor/fountainjs/fountain.js"],"sourcesContent":["var map = {\n\t\"./add.svg\": 3211,\n\t\"./assign-outpoints.svg\": 7523,\n\t\"./badges/badge-new.svg\": 8939,\n\t\"./bin.svg\": 6149,\n\t\"./cancel.svg\": 7240,\n\t\"./checkbox-check.svg\": 9802,\n\t\"./chevron-down.svg\": 3636,\n\t\"./chevron-right.svg\": 8870,\n\t\"./clone-regular.svg\": 7326,\n\t\"./cloud_upload_icon.svg\": 6645,\n\t\"./dashboard-empty.png\": 3397,\n\t\"./dashboard-new.png\": 8412,\n\t\"./error.svg\": 7084,\n\t\"./expand-arrows-light.svg\": 2826,\n\t\"./export.svg\": 6024,\n\t\"./favicon.svg\": 870,\n\t\"./home-lg-alt-light.svg\": 4494,\n\t\"./icon-adobe.svg\": 1207,\n\t\"./icon-circle-down.svg\": 3243,\n\t\"./icon-cog-light.svg\": 5204,\n\t\"./icon-game-controller.svg\": 5429,\n\t\"./icon-google.svg\": 47,\n\t\"./icon-heart.svg\": 1206,\n\t\"./icon-more.svg\": 7469,\n\t\"./icon-sort-down.svg\": 2691,\n\t\"./icon-sort-up.svg\": 4108,\n\t\"./icon-star.svg\": 1034,\n\t\"./icon-tick.svg\": 5849,\n\t\"./icons/icon-arrows-up-down-left-right-solid.svg\": 7849,\n\t\"./icons/icon-play.svg\": 6411,\n\t\"./image-line.svg\": 7660,\n\t\"./image-screens.svg\": 5705,\n\t\"./incoming-links.svg\": 4738,\n\t\"./info.svg\": 862,\n\t\"./invalid-input.svg\": 904,\n\t\"./link-regular.svg\": 7661,\n\t\"./linked-story-islands.svg\": 3424,\n\t\"./list.svg\": 6962,\n\t\"./loader.svg\": 9183,\n\t\"./logo-stornaway--icon.svg\": 2243,\n\t\"./logo-stornaway.svg\": 2710,\n\t\"./media.svg\": 4422,\n\t\"./og-default.png\": 263,\n\t\"./outpoint-styling.svg\": 8577,\n\t\"./placeholder-project.svg\": 8533,\n\t\"./player-exit-fullscreen.svg\": 8368,\n\t\"./player-fullscreen.svg\": 1341,\n\t\"./player-redo.svg\": 174,\n\t\"./player-undo.svg\": 2072,\n\t\"./plus-light.svg\": 7857,\n\t\"./prompt.svg\": 3752,\n\t\"./question-circle-light.svg\": 7960,\n\t\"./replace.svg\": 1813,\n\t\"./script.svg\": 5531,\n\t\"./search-minus-light.svg\": 4062,\n\t\"./search-plus-light.svg\": 8068,\n\t\"./send.svg\": 9320,\n\t\"./stars-thin.svg\": 3203,\n\t\"./step-backward.svg\": 2062,\n\t\"./step-forward.svg\": 6300,\n\t\"./stornaway-logo-icon.svg\": 5630,\n\t\"./stornaway-logo-white.svg\": 8268,\n\t\"./stornaway-logo.png\": 4843,\n\t\"./stornaway-logo.svg\": 2972,\n\t\"./story-island.svg\": 3905,\n\t\"./tab-background-filled.svg\": 1877,\n\t\"./tab-background-left.svg\": 2066,\n\t\"./tab-background-middle.svg\": 7793,\n\t\"./tab-background-right.svg\": 9001,\n\t\"./user-circle-light.svg\": 5871,\n\t\"./variant-end.svg\": 4749,\n\t\"./variant-restart.svg\": 5775,\n\t\"./variant-start.svg\": 5878,\n\t\"./variant.svg\": 3001,\n\t\"./visibility-off.svg\": 2542,\n\t\"./visibility.svg\": 6686,\n\t\"./w-and-rp.svg\": 412,\n\t\"./watchandreplay.svg\": 4927\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 = 7546;","const SELECTOR = '.js-load-modal-content';\n\nexport default function setupSidebarLoadingConcurrency() {\n let xhr;\n $(document).on('ajax:beforeSend', SELECTOR, function({ originalEvent }) {\n if (xhr) {\n // Not ideal, but there's no way to distinguish\n // between an aborted request and a request that had a network error\n // through the content of the xhr when it errors :'(\n xhr._wasAborted = true;\n xhr.abort();\n }\n xhr = originalEvent.detail[0];\n });\n $(document).on('ajax:success', SELECTOR, function() {\n xhr = null;\n });\n $(document).on('ajax:error', SELECTOR, function({ originalEvent }) {\n const eventXHR = originalEvent.detail[2];\n // Only consider non aborted requests\n if (!eventXHR._wasAborted) {\n xhr = null;\n }\n });\n}\n","export default function toggleLocationField(target) {\n const enabledLocationField = enableLocationFieldForSelectedStyle(target);\n enableStyleFieldIfRequired(target);\n target\n .closest('.form-group')\n .querySelector('.form-text')\n .classList.toggle('d-none', !enabledLocationField);\n}\n\n/**\n * Enable the location field corresponding to the currently selected value\n * of given input and returns if it enabled the selection field\n * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} promptStyleInput\n * @return Boolean\n */\nfunction enableLocationFieldForSelectedStyle(promptStyleInput) {\n // A flag to track if a location field is enabled\n let enabledLocationField;\n\n // Loop through all elements with the class 'js-choice-location-field'\n document.querySelectorAll('.js-choice-location-field').forEach((input) => {\n // Check if the current element's style matches the selected style\n const selectedStyle = input.dataset.promptStyle == promptStyleInput.value;\n\n // If the styles match, set the flag to true\n if (selectedStyle) {\n enabledLocationField = true;\n }\n\n // Get the wrapper of the current element\n const locationWrapper = input.closest('.js-choice-location-wrapper');\n\n // If the selected style is 'custom_button_positions'\n // add the 'd-none' class to the wrapper - this will hide the location field\n if (['custom_button_positions'].includes(promptStyleInput.value)) {\n locationWrapper.classList.add('d-none');\n } else {\n // Toggle the 'd-none' class to show location field if the style is selected, and hide it otherwise\n locationWrapper.classList.toggle('d-none', !selectedStyle);\n }\n // Disable the input if the style is not selected\n input.disabled = !selectedStyle;\n });\n\n // Return the flag indicating whether a location field is enabled\n return enabledLocationField;\n}\n\nfunction enableStyleFieldIfRequired(promptStyleInput) {\n const selectedPromptStyle = selectedOption(promptStyleInput);\n const requiresSubstyle = JSON.parse(\n selectedPromptStyle.dataset.requiresSubstyle || 'false'\n );\n const defaultSubstyle = selectedPromptStyle.dataset.defaultSubstyle;\n\n // Make it a proper Array so that browsers without `forEach`\n // on NodeList are OK\n const substyleFields = [\n ...document.querySelectorAll('.js-prompt-substyle-field'),\n ];\n\n substyleFields.forEach((input) => {\n // Selected style may not allow all substyles...\n updateVisibleOptions(input, requiresSubstyle);\n // ... and if the currently selected substyle just got hidden\n // we need to update which option is selected now\n updateSelectedOptionIfHidden(input);\n\n // Shows the substyle field\n input\n .closest('.js-prompt-substyle-wrapper')\n .classList.toggle('d-none', !requiresSubstyle);\n input.disabled = !requiresSubstyle;\n\n if (defaultSubstyle) {\n selectOption(input, defaultSubstyle);\n }\n });\n}\n\nfunction updateVisibleOptions(input, requiredSubstyles) {\n if (Array.isArray(requiredSubstyles)) {\n input.querySelectorAll('option').forEach((option) => {\n const isAvailable = requiredSubstyles.includes(option.value);\n option.disabled = !isAvailable;\n option.classList.toggle('d-none', !isAvailable);\n });\n\n // Because we may have hidden the option\n } else {\n input.querySelectorAll('option').forEach((option) => {\n option.disabled = false;\n option.classList.remove('d-none');\n });\n }\n}\n\nfunction updateSelectedOptionIfHidden(select) {\n const selected = selectedOption(select);\n if (selected.classList.contains('d-none')) {\n select.selectedIndex = 0;\n }\n}\n\nfunction selectedOption(select) {\n return select.options[select.selectedIndex];\n}\n\nfunction selectOption(select, value) {\n const options = [...select.options];\n select.selectedIndex = options.indexOf(\n options.find((o) => o.value === value)\n );\n}\n","const SELECTOR_ACTIVE_VARIANT_TAB = '.js-variant-tabs__tab.active';\n\nexport default function toggleCustomButtonPositionsDetails(promptStyleInput) {\n const activeVariantTabIndex = $(SELECTOR_ACTIVE_VARIANT_TAB).index();\n\n // Get all the height and width inputs for the active tab variant\n // NOTE: newly created variants do not have a variant index to appended to class,\n // so here we also look for elements without index as a fallback\n const choiceHeightInputs = document.querySelectorAll(`.js-custom-button-height-input-${activeVariantTabIndex}, .js-custom-button-height-input-`);\n const choiceWidthInputs = document.querySelectorAll(`.js-custom-button-width-input-${activeVariantTabIndex}, .js-custom-button-width-input-`);\n\n // To ensure the link is always disabled for variants that aren't in the database yet,\n // we aren't looking for elements with the class without a variant index\n const customButtonPositionsLink = document.querySelector(`#js-custom-button-positions-editor-link-${activeVariantTabIndex}`);\n\n if (['custom_button_positions'].includes(promptStyleInput.value)) {\n // Enable choice's form inputs for width and height\n choiceHeightInputs.forEach(function (input) {\n input.disabled = false;\n });\n\n choiceWidthInputs.forEach(function (input) {\n input.disabled = false;\n });\n console.log('Custom button positions selected');\n } else {\n // Disable choice's form inputs for width and height\n choiceHeightInputs.forEach(function (input) {\n input.disabled = true;\n });\n\n choiceWidthInputs.forEach(function (input) {\n input.disabled = true;\n });\n\n // Disable link to edit custom positions\n // NOTE: This link doesn't exist in a project edit form\n if (customButtonPositionsLink) {\n customButtonPositionsLink.classList.add('disabled');\n customButtonPositionsLink.classList.remove('btn--with-arrows');\n }\n }\n}\n","import toggleLocationField from './choices/locations';\nimport toggleCustomButtonPositionsDetails from './choices/custom_button_positions';\nimport applyTimeValidation from './choices/time_validation';\n\nexport default function setupChoicePropertyFieldsAndDetails() {\n $(document).on('change', '.js-prompt-style-field', (e) => {\n const target = e.target;\n console.log('Change to prompt style detected');\n toggleLocationField(target);\n toggleCustomButtonPositionsDetails(target);\n });\n\n $(document).on('input', '.js-show-hide-at', (e) => {\n const target = e.target;\n console.log('Change detected');\n applyTimeValidation(target);\n });\n\n // Add more rows when the Add More button is clicked\n $(document).on('click', '[id^=\"add-show-hide-at-row-\"]', function (event) {\n event.preventDefault();\n\n // Get variant and form indices from the clicked button's data attributes\n const variantIndex = $(this).data('variant-index');\n const formIndex = $(this).data('form-index');\n\n // Find the dynamic form container for the specific variant and form\n const parentContainer = $(`#dynamic-form-container-${variantIndex}-${formIndex}`);\n\n // Calculate the current row index based on the number of rows inside the container\n const rowIndex = parentContainer.find('.row').length;\n\n // Template for the new row\n const newRow = `\n
\n
\n \n \n
Use the format 0m5s
\n
\n
\n \n \n
Use the format 1m7s
\n
\n
\n `;\n\n // Append the new row to the correct dynamic form container\n parentContainer.append(newRow);\n });\n}\n","export default function applyTimeValidation(input) {\n // Attach event listener to input for real-time validation\n input.addEventListener('input', function (event) {\n const value = event.target.value.trim(); // Trim whitespace from input\n const isValid = validateTimeFormat(value);\n\n console.log('Time validation applied');\n\n if (isValid || value === '') {\n // Apply the 'is-valid' class if valid or empty (considering empty as valid)\n event.target.classList.remove('is-invalid');\n event.target.classList.add('is-valid');\n } else {\n // Apply the 'is-invalid' class if invalid\n event.target.classList.remove('is-valid');\n event.target.classList.add('is-invalid');\n }\n });\n}\nfunction validateTimeFormat(value) {\n // Regular expression to match time format like 1m2s or 3m34.3s\n const regex = /^[0-9]+m(([0-5]?[0-9])(\\.[0-9]+)?)s$/;\n return regex.test(value);\n}\n","/**\n * Enhances a `type=\"file\"` input with a nicer UI\n * handling the replacement and deletion of the file\n *\n * UI updates are driven by the `change` event of the input\n * fields (with `CustomEvent` being triggered when we change\n * the value ourselves)\n *\n * @module lib/file_upload\n */\nimport isWithin from './is_within';\n\n/** CSS selector for the wrapper element */\nexport const SELECTOR = '.js-file-upload';\n/** CSS selector for the element that should trigger a file selection */\nconst SELECTOR_SELECT_FILE = '.js-file-upload__selectFile';\n/** CSS selector for the upload input itself */\nconst SELECTOR_FIELD = '.js-file-upload__field';\n/** CSS selector for the thumbnail */\nconst SELECTOR_THUMBNAIL = '.js-file-upload__thumbnail';\n/** CSS selector for the cancel button */\nconst SELECTOR_CANCEL = '.js-file-upload__cancel';\n/** CSS selector for the remove button */\nconst SELECTOR_REMOVE = '.js-file-upload__remove';\n/** CSS selector for the input triggering the deletion of the file */\nconst SELECTOR_REMOVE_FIELD = '.js-file-upload__remove_field';\n/** CSS selector for the element displaying the filename */\nconst SELECTOR_FILENAME = '.js-file-upload__filename';\n/** CSS selector for sections to be disabled when file is present */\nconst SELECTOR_DISABLE = '.js-file-upload__disable';\nexport const ADOBE_FILE_UPLOAD = '.js-adobe-file-upload';\nexport const LOCAL_FILE_UPLOAD = '.js-local-file-upload';\nexport const IMAGE_UPLOAD = '.js-general-image-upload';\n\n// The different states of the field\nconst CLASS_EMPTY = 'wrp-file-upload--empty';\nexport const CLASS_WITH_SELECTION = 'wrp-file-upload--with-selection';\nconst CLASS_IS_REMOVING = 'wrp-file-upload--is-removing';\n\n// Attribute for storing the original thumbnail URL\nconst DATA_THUMBNAIL_SRC = 'data-value';\n\nexport const updateSelectorClasses = (\n selector,\n classListRemove,\n classListAdd\n) => {\n const element = document.querySelector(selector);\n\n if (element) {\n element.classList.remove(...classListRemove);\n element.classList.add(...classListAdd);\n }\n};\n\nexport default function setupFileUpload() {\n $(document).on('click', SELECTOR, ({ target, currentTarget }) => {\n if (isWithin(SELECTOR_SELECT_FILE, target)) {\n selectFile(currentTarget);\n return;\n }\n\n if (isWithin(SELECTOR_CANCEL, target)) {\n cancelUpload(currentTarget);\n return;\n }\n\n if (isWithin(SELECTOR_REMOVE, target)) {\n cancelUpload(currentTarget);\n return toggleFileRemoval(currentTarget);\n }\n });\n\n $(document).on('change', SELECTOR, ({ target, currentTarget }) => {\n if (isWithin(SELECTOR_REMOVE_FIELD, target)) {\n handleRemoveChange(target, currentTarget);\n }\n\n if (isWithin(SELECTOR_FIELD, target)) {\n handleFileChange(target, currentTarget);\n }\n });\n}\n\nfunction handleRemoveChange(removeInputElement, fileUploadContainer) {\n $(fileUploadContainer).toggleClass(\n CLASS_IS_REMOVING,\n removeInputElement.checked\n );\n}\n\nfunction handleFileChange(fileInputElement, fileUploadContainer) {\n const img = fileUploadContainer.querySelector(SELECTOR_THUMBNAIL);\n const filename = fileUploadContainer.querySelector(SELECTOR_FILENAME);\n\n if (fileInputElement.value) {\n // Swap to having selection\n $(fileUploadContainer)\n .removeClass(CLASS_EMPTY)\n .addClass(CLASS_WITH_SELECTION);\n\n // render image preview\n if (img) {\n renderThumbnail(fileInputElement, img);\n\n updateSelectorClasses(ADOBE_FILE_UPLOAD, ['w-50'], ['d-none']);\n updateSelectorClasses(\n LOCAL_FILE_UPLOAD,\n ['d-flex', 'flex-space-evenly'],\n []\n );\n updateSelectorClasses(IMAGE_UPLOAD, ['w-50'], []);\n }\n // Backup text for restoring it\n $(filename).attr('data-text', $(filename).text());\n $(filename).text(fileInputElement.files[0].name);\n // If the field was set to remove the image, cancel it\n cancelFileRemoval(fileUploadContainer);\n $(SELECTOR_DISABLE, fileUploadContainer).attr('disabled', '');\n } else {\n $(fileUploadContainer)\n .removeClass(CLASS_WITH_SELECTION)\n // Only revert to the empty state if there wasn't a thumbnail image already\n .toggleClass(CLASS_EMPTY, isEmpty(fileUploadContainer));\n // Restore thumbnail to its original source\n if (img) {\n img.src = fileUploadContainer.getAttribute(DATA_THUMBNAIL_SRC);\n }\n $(filename).text($(filename).attr('data-text'));\n $(SELECTOR_DISABLE, fileUploadContainer).removeAttr('disabled');\n }\n}\n\nfunction isEmpty(fileUploadContainer) {\n return !(\n fileUploadContainer.getAttribute(DATA_THUMBNAIL_SRC) ||\n $(fileUploadContainer)\n .find('.js-file-upload-on-change__attachment_id')\n .prop('value')\n );\n}\n\nfunction cancelFileRemoval(fileUploadContainer) {\n const input = fileUploadContainer.querySelector(SELECTOR_REMOVE_FIELD);\n if (input) {\n input.checked = false;\n $(input).trigger('change');\n }\n}\n\nfunction toggleFileRemoval(fileUploadContainer) {\n const input = fileUploadContainer.querySelector(SELECTOR_REMOVE_FIELD);\n if (input) {\n input.checked = !input.checked;\n $(input).trigger('change');\n }\n}\n\nexport function selectFile(fileUploadContainer) {\n fileUploadContainer.querySelector(SELECTOR_FIELD).click();\n}\n\nexport function filesSelected(fileUploadContainer, files) {\n let field = fileUploadContainer.querySelector(SELECTOR_FIELD);\n field.files = files;\n $(field).trigger('change');\n}\n\nfunction cancelUpload(fileUploadContainer) {\n const input = fileUploadContainer.querySelector(SELECTOR_FIELD);\n input.value = null;\n $(input).trigger('change');\n}\n\nfunction renderThumbnail(fileInputElement, imgElement) {\n var reader = new FileReader();\n reader.onload = function () {\n var dataURL = reader.result;\n imgElement.src = dataURL;\n };\n reader.readAsDataURL(fileInputElement.files[0]);\n}\n","import { updateSelectorClasses } from '../../lib/file_upload.js';\n\nexport default function setUpExpressEmbed() {\n ((document, url) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = async () => {\n if (!window.CCEverywhere) {\n return;\n }\n\n const ccEverywhere = await window.CCEverywhere.initialize({\n // TODO: store in env variables\n clientId: '7d291c3bbcd14485bb4ab008f2931091',\n appName: 'Stornaway Adobe Express Projects',\n });\n\n // Create Image Button Selector\n const createAdobeImageEl = '.js-create-adobe-image';\n // Create Video Button Selector\n const createAdobeVideoEl = '.js-create-adobe-video';\n\n // Edit Image Button Selector\n const editAdobeImageEl = '.js-edit-adobe-image';\n // Edit Video Button Selector\n const editAdobeVideoEl = '.js-edit-adobe-video';\n\n const setUpDrawer = () => {\n const getEl = document.querySelector('.wrp-studio-drawer');\n getEl.classList.remove('z-index-1050');\n };\n\n const setUpAdobe = (mediaType, adobeProjectId) => {\n let fileInput;\n let fileContainer;\n let allowedFileTypes;\n let outputType;\n\n if (mediaType === 'image') {\n allowedFileTypes = ['image/png', 'image/jpeg'];\n outputType = 'base64';\n } else if (mediaType === 'video') {\n allowedFileTypes = ['video/mp4'];\n outputType = 'url';\n }\n\n async function fetchVideo(url, videoFileReader) {\n let blob = await fetch(url).then((r) => r.blob());\n videoFileReader.readAsArrayBuffer(blob);\n }\n\n const getActiveVariantTabId = () => {\n const activeElement = document.querySelector('.js-variant-tabs__tablist .active');\n\n if (activeElement) {\n let dataTarget = activeElement.dataset.target;\n const splitDataTarget = dataTarget.split('');\n const getVariantIDFromTarget = splitDataTarget[splitDataTarget.length - 1];\n\n return getVariantIDFromTarget;\n }\n };\n\n const getAssetName = (variantIndexId, fallbackName) => {\n let variantNameInput = document.querySelectorAll('.js-variant-field-name')[variantIndexId];\n let storyIslandName = document.querySelector('.js-island-label').textContent;\n let variantName = fallbackName;\n\n if (variantNameInput && storyIslandName) {\n if (variantNameInput.value) {\n let islandLabel = storyIslandName.trim().split(' ').pop();\n variantName = `${islandLabel} ${variantNameInput.value}`;\n } else {\n variantName = storyIslandName;\n }\n }\n return variantName;\n };\n\n const observer = new MutationObserver(getActiveVariantTabId);\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n\n const variantIndexId = getActiveVariantTabId();\n\n observer.disconnect();\n\n const createDesignCallback = {\n onCancel: () => {},\n onPublish: (publishParams) => {\n const localData = {\n project: publishParams.projectId,\n asset: publishParams.asset[0].data,\n filename: publishParams.asset[0].fileName,\n };\n\n // =======================================================================================================\n // VIDEO\n // =======================================================================================================\n if (mediaType === 'video') {\n // Pass through adobe's project id as the query param to the , so it can be saved against the image blob right away\n let element = document.getElementById(`js-file-upload__adobe_project_id-video-${variantIndexId}`);\n let fileUploadUrl = element.dataset.fileUploadUrl;\n element.dataset.fileUploadUrl = `${fileUploadUrl}&adobe_project_id=${localData.project}`;\n\n // Initialise file reader so it can create data from a blob that we can get from a url\n let videoFileReader = new FileReader();\n\n // Once the readAsArrayBuffer is successful,\n videoFileReader.addEventListener('load', function () {\n // get the result from the function\n let arrayBuffer = videoFileReader.result;\n\n // Find the file input element\n let videoFileInput = document.querySelector(`#video-container-${variantIndexId} .js-file-upload__field`);\n\n // And initialise the container where to place the file to\n let videoFileContainer = new DataTransfer();\n\n // Create the file from data\n let variantName = getAssetName(variantIndexId, 'Adobe_Express_Video');\n let videoFile = new File([new Uint8Array(arrayBuffer)], `${variantName}.mp4`, { type: 'video/mp4', lastModified: new Date().getTime() });\n\n videoFileContainer.items.add(videoFile);\n // Place the file to the input field (value/files) bypassing the read-only validation\n videoFileInput.files = videoFileContainer.files;\n\n // Trigger the change event for the input field so we see the video file displayed after the upload\n let changeEvent = new Event('change', { bubbles: true });\n videoFileInput.dispatchEvent(changeEvent);\n });\n\n fetchVideo(localData.asset, videoFileReader);\n }\n\n // =======================================================================================================\n // IMAGE\n // =======================================================================================================\n if (mediaType === 'image') {\n // Finds the input field to target and add the image file to\n fileInput = document.querySelector(`#image-container-${variantIndexId} .js-file-upload__field`);\n\n // Create a DataTransfer (container) to place the created file in there\n fileContainer = new DataTransfer();\n\n // Create a file from the Adobe response for image data (base64):\n // Encoding\n // Read more here: https://stackoverflow.com/a/71481069\n let imageDataArray = localData.asset.split(',');\n let mimeType = imageDataArray[0].match(/:(.*?);/)[1];\n let binaryString = atob(imageDataArray[1]);\n let lengthOfBinary = binaryString.length;\n let encodedArray = new Uint8Array(lengthOfBinary);\n let imageFileExtension = mimeType.split('/')[1];\n\n while (lengthOfBinary--) {\n encodedArray[lengthOfBinary] = binaryString.charCodeAt(lengthOfBinary);\n }\n\n // Create file from encoded array\n let variantName = getAssetName(variantIndexId, 'Adobe_Express_Image');\n let imageFile = new File([encodedArray], `${variantName}.${imageFileExtension}`, {\n type: mimeType,\n lastModified: new Date().getTime(),\n });\n\n // Place the file to a datatransfer\n fileContainer.items.add(imageFile);\n\n // Place the DataTransfer file to the input field files\n fileInput.files = fileContainer.files;\n\n // Trigger file upload handling\n let changeEvent = new Event('change', { bubbles: true });\n fileInput.dispatchEvent(changeEvent);\n\n updateSelectorClasses(`#image-container-${variantIndexId} .js-create-adobe-image`, ['w-50'], ['d-none']);\n updateSelectorClasses(`#js-local-file-upload-${variantIndexId}`, ['d-flex', 'flex-space-evenly'], []);\n updateSelectorClasses(`IMAGE_UPLOAD`, ['w-50'], []);\n\n // Insert adobe's project id to the hidden form input, so it can be saved against the image blob right away\n document.getElementById(`js-file-upload__adobe_project_id-${variantIndexId}`).value = localData.project;\n }\n },\n onError: (err) => {\n console.error('Error received is', err.toString());\n },\n };\n\n let adobeParams = {\n callbacks: createDesignCallback,\n modalParams: {\n borderRadius: 20,\n padding: 10,\n backgroundColor: 'darkest',\n },\n inputParams: {\n templateType: 'video',\n editorPanelView: 'templates',\n canvasSize: {\n height: 1080,\n width: 1920,\n unit: 'px',\n },\n exportOptions: [\n {\n id: 'stornaway-export',\n label: 'Save and Export to Stornaway',\n target: 'Host',\n closeTargetOnExport: true,\n variant: 'accent',\n optionType: 'button',\n buttonType: 'custom',\n },\n ],\n },\n outputParams: {\n outputType: outputType,\n allowedFileTypes: allowedFileTypes,\n },\n };\n\n if (adobeProjectId) {\n adobeParams.inputParams.projectId = adobeProjectId;\n ccEverywhere.editDesign(adobeParams);\n } else {\n ccEverywhere.createDesign(adobeParams);\n }\n };\n\n // CREATE\n $(document).on('click', createAdobeImageEl, () => {\n setUpDrawer();\n setUpAdobe('image');\n });\n\n $(document).on('click', createAdobeVideoEl, () => {\n setUpDrawer();\n setUpAdobe('video');\n });\n\n // EDIT\n $(document).on('click', editAdobeImageEl, (e) => {\n const adobeProjectId = e.target.dataset.adobeProjectId;\n\n setUpDrawer();\n setUpAdobe('image', adobeProjectId);\n });\n\n $(document).on('click', editAdobeVideoEl, (e) => {\n const adobeProjectId = e.target.dataset.adobeProjectId;\n\n setUpDrawer();\n setUpAdobe('video', adobeProjectId);\n });\n };\n\n document.body.appendChild(script);\n })(document, 'https://sdk.cc-embed.adobe.com/v3/CCEverywhere.js');\n}\n","const SELECTOR_ACTIVE_VARIANT_TAB = '.js-variant-tabs__tab.active';\n\nexport default function selectFieldsets() {\n const activeVariantTabIndex = $(SELECTOR_ACTIVE_VARIANT_TAB).index();\n\n const dropdown = document.querySelector(`.form-check-input-radio-${activeVariantTabIndex}`);\n\n const toggleElements = (showElement, hideElements) => {\n showElement.classList.remove('d-none');\n hideElements.forEach((element) => {\n element.classList.add('d-none');\n });\n };\n\n $(document).on('change', dropdown, (e) => {\n const {\n value,\n dataset: { variantIndexId },\n } = e.target;\n\n const videoContainer = document.querySelector(`#video-container-${variantIndexId}`);\n const imageContainer = document.querySelector(`#image-container-${variantIndexId}`);\n const embedContainer = document.querySelector(`#embed-container-${variantIndexId}`);\n\n const mediaTypeOperations = {\n video: {\n show: videoContainer,\n hide: [imageContainer, embedContainer],\n },\n image: {\n show: imageContainer,\n hide: [videoContainer, embedContainer],\n },\n embed: {\n show: embedContainer,\n hide: [imageContainer, videoContainer],\n },\n };\n\n // Pass in the media type based on the target value\n const selectedMediaType = mediaTypeOperations[value];\n\n if (selectedMediaType) {\n toggleElements(selectedMediaType.show, selectedMediaType.hide);\n }\n });\n}\n","import setupProjectErrors from './lib/project_errors';\nimport setupDrawer from './lib/drawer';\nimport setupSidebarLoadingConcurrency from './lib/sidebar_loading_concurrency';\nimport setupChoicePropertyFieldsAndDetails from '../lib/choice_property_details';\nimport setupIframeModal from './lib/iframe_modal';\nimport setUpExpressEmbed from './lib/express_embed.js';\nimport selectFieldsets from './lib/select_fieldsets';\n\nconst SELECTOR = '.js-studio';\nconst SELECTOR_LOADER = '.js-studio__loader';\n\nexport default function setupStudio() {\n const el = document.querySelector(SELECTOR);\n // When Chrome restores tabs after having been closed\n // the `turbolinks:load` event gets triggered and would\n // re-run the studio set up if hooked to Turbolinks\n // so adding a little safety to make sure we don't\n // re-set up the studio, leading to two graphs getting\n // displayed, splitting the viewport\n if (el && !el.hasAttribute('data-studio-setup')) {\n el.setAttribute('data-studio-setup', '');\n if (window.wrpIslands) {\n import(\n /* webpackMode: \"lazy\" */\n /* webpackChunkName: \"studio-js\" */\n './studio'\n )\n .then(({ default: setupIslandEditor }) => {\n const teardown = setupIslandEditor(el, window.wrpIslands);\n $(SELECTOR_LOADER).remove();\n return teardown;\n })\n .catch((e) => {\n throw e;\n });\n }\n }\n\n // TODO: These may be best be loaded from the `studio.js` file\n // to ensure proper code splitting. There may also be some code\n // inside the `lib` folder that would be worth sending there too\n setupProjectErrors();\n setupDrawer();\n setupSidebarLoadingConcurrency();\n setupChoicePropertyFieldsAndDetails();\n setupIframeModal();\n setUpExpressEmbed();\n selectFieldsets();\n}\n","/**\n * Manages tabs when cocoon elements are added or removed\n * @module lib/form_tabs\n */\nconst SELECTOR_ALL_TABPANELS = '.js-tabs__tabpanel';\nconst SELECTOR_CHOICES_TABLABEL = '.nav-choices';\nconst SELECTOR_CHOICES_TABPANEL = '.js-tab-content-choices';\nconst SELECTOR_ADD_CHOICE = '.js-choice-tabs__insert-before';\nconst SELECTOR_NUMBER = '.js-tab-number';\n\nconst ATTR_TAB_INDEX = 'data-tabs-index';\nconst SELECTOR_TAB = '[role=tab]';\n\nexport default function setupFormTabs() {\n $(document).on('cocoon:after-insert', (event, [tabpanel]) => {\n // Get panel type eg. variant, choice\n const type = getTypeFrom(tabpanel);\n\n if ($(tabpanel).hasClass(`js-${type}-tabs__tabpanel`)) {\n const index = getNextTabIndex(event.target);\n // Add IDs to tab panel\n addIds(tabpanel, index, type);\n\n // Get the tablist for current type\n const $tabList = $(`.js-${type}-tabs__tablist`);\n // Assign tab label attributes from tab panel\n const tab = addTabForPanel(tabpanel, $tabList, type);\n\n // Make the new tab visible\n tab.click();\n\n updateNumbering($tabList);\n }\n });\n\n $(document).on('cocoon:after-remove', (event, [tabpanel]) => {\n const type = getTypeFrom(tabpanel);\n if ($(tabpanel).hasClass(`js-${type}-tabs__tabpanel`)) {\n const $tabList = $(`.js-${type}-tabs__tablist`);\n removeTabForPanel(tabpanel, $tabList);\n updateNumbering($tabList);\n }\n });\n}\n\nfunction removeTabForPanel(tabpanel, $tablist) {\n const tab = $tablist.find(`[id=\"${tabpanel.getAttribute('aria-labelledby')}\"]`);\n\n const visibleTab = tab[0].previousElementSibling || tab[0].nextElementSibling;\n if (visibleTab) {\n // Little check for the removal of the last tab\n visibleTab.click();\n }\n\n tab.remove();\n}\n\nfunction updateNumbering($tablist) {\n // Take advantage that the elements will be returned in the right order\n $tablist.find(SELECTOR_NUMBER).each((index, element) => {\n element.textContent = index + 1;\n });\n}\n\nfunction addIds(tabpanel, index, type) {\n if (type === 'variant') {\n tabpanel.setAttribute('id', `tabpanel_${type}_${index}`);\n tabpanel.setAttribute('aria-labelledby', `tab_${type}_${index}`);\n\n // Set the variant index as attribute so choices can reference it\n $(SELECTOR_CHOICES_TABLABEL)[index].setAttribute('data-variant-index', index);\n\n // Get the first choice panel for the new variant\n const firstPanel = $(SELECTOR_CHOICES_TABPANEL).children().last()[0];\n\n // Give it a variant ID\n firstPanel.setAttribute('id', `tabpanel_variant_${index}_choice_0`);\n\n // Set variant index for data association insertion\n const addChoiceBtn = $(tabpanel).find(SELECTOR_ADD_CHOICE)[0];\n const targetTabPanel = $(tabpanel).find(SELECTOR_CHOICES_TABPANEL)[0];\n\n firstPanel.setAttribute('aria-labelledby', `tab_variant_${index}_choice_0`);\n addChoiceBtn.setAttribute('data-association-insertion-node', `.js-cocoon-variant-${index}-choices`);\n $(targetTabPanel).removeClass('js-cocoon-variant--choices').addClass(`js-cocoon-variant-${index}-choices`);\n\n // Set variant index ids and set as data attributes\n // Targets media select drop down container and a link to create image in Adobe\n $(tabpanel)\n .find('[data-variant-index-id]')\n .each(function () {\n $(this)[0].setAttribute('data-variant-index-id', index);\n });\n\n // Set unique ids for the hidden fields storing adobe project ids for variant thumbnails\n $(tabpanel)\n .find('#js-file-upload__adobe_project_id-')\n .each(function () {\n $(this)[0].setAttribute('id', `js-file-upload__adobe_project_id-${index}`);\n });\n\n // Set unique ids for video file input elements\n $(tabpanel)\n .find('#js-file-upload__adobe_project_id-video-')\n .each(function () {\n $(this)[0].setAttribute('id', `js-file-upload__adobe_project_id-video-${index}`);\n });\n\n // Set unique ids for media select options\n // to be used in media select drop down and options\n const mediaElementsContainerIds = ['embed-container-', 'image-container-', 'video-container-', 'variant-media-video-', 'variant-media-image-', 'variant-media-embed-'];\n $.each(mediaElementsContainerIds, function (i, value) {\n // Embed-container is not rendered at all if the feature flag is off!\n $(tabpanel).find(`#${value}`)[0]?.setAttribute('id', `${value}${index}`);\n });\n\n // Set unique \"for\" attributes to the radio (button) labels.\n // Label \"for\" attribute needs to match the id of the radio (button) input\n // Ids for radio inputs are set above\n const mediaElementLabels = ['variant-media-video', 'variant-media-image', 'variant-media-embed'];\n $.each(mediaElementLabels, function (i, value) {\n $(tabpanel)\n .find(`.${value}`)\n ?.each(function () {\n $(this).attr('for', `${value}-${index}`);\n });\n });\n\n // Set unique \"name\" for the radio (button) inputs\n // A group of radio (button) inputs with the same name can have only one input checked,\n // this way each variant has its own group of radio (buttons) with one value preselected by default\n const mediaElementInputs = ['variant-media-radio-button-'];\n $.each(mediaElementInputs, function (i, value) {\n $(tabpanel)\n .find(`#${value}`)\n ?.each(function () {\n $(this).attr('name', `${value}${index}`);\n });\n });\n } else if (type === 'choice') {\n // Get variant index\n const variantIndex = getVariantIndexForChoice(tabpanel);\n\n tabpanel.setAttribute('id', `tabpanel_variant_${variantIndex}_choice_${index}`);\n tabpanel.setAttribute('aria-labelledby', `tab_variant_${variantIndex}_choice_${index}`);\n }\n\n tabpanel.setAttribute(ATTR_TAB_INDEX, index);\n}\n\nfunction addTabForPanel(tabpanel, $tablist, type) {\n // Get the new variant index\n const variantIndex = getVariantIndex(tabpanel);\n const newTab = $tablist.find(SELECTOR_TAB)[0].cloneNode(true);\n\n // Cleanup active markers in case they're there\n $(newTab).removeClass('show active wrp-tab--has-error');\n\n // Link the tab and its tabpanel\n newTab.setAttribute('data-target', `#${tabpanel.getAttribute('id')}`);\n newTab.setAttribute('id', tabpanel.getAttribute('aria-labelledby'));\n newTab.setAttribute('aria-controls', tabpanel.getAttribute('id'));\n\n const SELECTOR_INSERT_BEFORE = `.js-${type}-tabs__insert-before`;\n\n // For new variant, pass the variant index to first choice tab label\n if (type === 'variant') {\n // Get the new choice label\n const firstLabel = $(SELECTOR_CHOICES_TABLABEL).children('button').last()[0];\n\n firstLabel.setAttribute('id', `tab_variant_${variantIndex}_choice_0`);\n firstLabel.setAttribute('data-target', `#tabpanel_variant_${variantIndex}_choice_0`);\n\n $tablist.find(SELECTOR_INSERT_BEFORE).before(newTab);\n } else if (type === 'choice') {\n const variantIndexForChoice = getVariantIndexForChoice(tabpanel);\n\n $($tablist[variantIndexForChoice]).find(SELECTOR_INSERT_BEFORE).before(newTab);\n }\n\n return newTab;\n}\n\nfunction getNextTabIndex(tabpanelContainer) {\n // Get all tabpanels for current container\n const index = [...$(tabpanelContainer).children(SELECTOR_ALL_TABPANELS)].reduce((max, tabpanelEl) => {\n // Fetch the index of the panel\n const currentIndex = parseInt(tabpanelEl.getAttribute(ATTR_TAB_INDEX), 10);\n console.info('Current tab index', currentIndex, 'larger number', currentIndex > max ? currentIndex : max);\n // Get the larger number\n return currentIndex > max ? currentIndex : max;\n }, -Infinity);\n\n return index + 1;\n}\n\nfunction getTypeFrom(tabpanel) {\n const tabPanelType = $(tabpanel).hasClass('js-variant-tabs__tabpanel');\n\n return tabPanelType ? 'variant' : 'choice';\n}\n\nfunction getVariantIndex(tabpanel) {\n const index = $(tabpanel).find('.nav-choices').attr('data-variant-index');\n\n return index;\n}\n\nfunction getVariantIndexForChoice(tabpanel) {\n const index = $(tabpanel).parent().prev().children()[0].getAttribute('data-variant-index');\n\n return index;\n}\n","/**\n * Declare DOM updates to be run only when JS is available\n * @module lib/with_js\n */\n// TODO: Maybe replace with the NPM package: https://www.npmjs.com/package/@cookieshq/with-js. Note that you'll need to pass a specific list of actions due to different naming for default values as well as some specific behaviours on the addAttribute\n\nimport { EVENT_WILL_INSERT } from './dom';\n\nconst SELECTOR = '[class*=\"js-with-js\"]';\n\nconst ACTIONS = {\n injectText: function(el) {\n el.parentNode.replaceChild(document.createTextNode(el.innerText), el);\n },\n addClass: function(el, className) {\n el.classList.add(className);\n },\n removeClass: function(el, className) {\n el.classList.remove(className);\n },\n addAttribute: function(el, attributes) {\n const [attributeName, attributeValue] = attributes.split('--');\n if (attributeName == 'data-toggle-target') {\n el.setAttribute(attributeName, '#' + attributeValue);\n } else {\n el.setAttribute(attributeName, attributeValue || '');\n }\n },\n removeAttribute: function(el, attribute) {\n el.removeAttribute(attribute);\n }\n};\n\nfunction prepareElement(el) {\n Array.from(el.classList)\n .filter(c => /js-with-js--/.test(c))\n .map(c => {\n const [actionName, param] = c.replace(/js-with-js--/, '').split('__');\n const action = ACTIONS[actionName];\n if (action) {\n action(el, param);\n }\n });\n}\n\nexport function withJS(el = document) {\n [...el.querySelectorAll(SELECTOR)].forEach(prepareElement);\n}\n\nexport default function setupWithJS(el = document) {\n withJS(el);\n $(document).on('turbolinks:load', () => {\n withJS(el);\n });\n $(document).on(EVENT_WILL_INSERT, function({ detail }) {\n withJS(detail.html);\n });\n $(document).on('cocoon:before-insert', (e, [tabpanel]) => {\n withJS(tabpanel);\n });\n}\n","/**\n * Binds the text of a tab to an input within its tabpanel,\n * @module lib/form_tabs_labels\n */\n/** CSS selector to mark the tabpanels */\nconst SELECTOR_CHOICE_TABPANEL = '.js-choice-tabs__tabpanel';\n/** CSS selector that marks the input that feeds the tab name */\nconst SELECTOR_CHOICE_TAB_LABEL_SOURCE = '.js-choice-tabs-labels__source';\n\nconst EMPTY_LABEL = '???';\n\nexport default function setupFormTabsLabels() {\n $(document).on(\n 'input',\n SELECTOR_CHOICE_TABPANEL,\n ({ target, currentTarget }) => {\n if ($(target).is(SELECTOR_CHOICE_TAB_LABEL_SOURCE)) {\n const tab = getTabFor(currentTarget);\n setTabLabel(tab, target);\n }\n }\n );\n\n // After new tab inserted, set text to empty label\n $(document).on('cocoon:after-insert', (event, [tabpanel]) => {\n if ($(tabpanel).is(SELECTOR_CHOICE_TABPANEL)) {\n const tab = getTabFor(tabpanel);\n\n const nameInput = tabpanel.querySelector(\n SELECTOR_CHOICE_TAB_LABEL_SOURCE\n );\n if (nameInput) {\n setTabLabel(tab, nameInput);\n }\n }\n });\n}\n\nfunction setTabLabel(tab, nameInput) {\n tab.textContent = nameInput.value || EMPTY_LABEL;\n}\n\nfunction getTabFor(tabpanel) {\n // Relies on the tabpanel being labelled by its tab\n return document.getElementById(tabpanel.getAttribute('aria-labelledby'));\n}\n","/**\n * Adds limitation to the number of repetitions allowed\n * in a field managed by cocoon\n * See the relevant `app/helpers/cocoon_limit_helper.rb` helper\n * for the setting of the options, as well as the relevant styles in\n * `app/webpack/styles/*components/_cocoon_limit.scss`\n * @module lib/cocoon_limit\n */\n\n// The class marking the feature. To be set on one of the parents\n// of both the cocoon fields and any \"link_to_add_association\" related\n// to it. Use a `.js-cocoon-limit--` to serparate styles\n// between different sections\nconst SELECTOR = '.js-cocoon-limit';\n\n// Stores the current number of elements\nconst ATTR_COUNT = 'data-cocoon-limit-count';\n// The maximum number of elements allowed\nconst ATTR_MAX = 'data-cocoon-limit-max';\n// The minimum of elements allowed\nconst ATTR_MIN = 'data-cocoon-limit-min';\n\n// The feature works by adding two classes that'll hide\n// either the add (when max limit is reached) or\n// delete button (when min limit is reached)\nconst CLASS_NO_ADD = 'wrp-cocoon-limit--no-add';\nconst CLASS_NO_DELETE = 'wrp-cocoon-limit--no-delete';\n\n// Help limit the amount fo\nexport default function setupCocoonLimit() {\n $(document).on('cocoon:after-insert', (event, [tabpanel]) => {\n updateTabCount(tabpanel, 1);\n });\n // Need to use before remove to find the appropriate container\n // after-remove, the tabpanel has no parent\n $(document).on('cocoon:before-remove', (event, [tabpanel]) => {\n const classList = event.target.classList;\n const elementTargetType = event.target.dataset.targetType;\n\n // TODO: Move the confirmation code out of this module\n // and into its own `cocoon-confirm` module\n const question = `Are you sure you want to delete this ${\n elementTargetType || targetType(classList)\n }? This is a permanent action and cannot be recovered.`;\n const removeVariant = confirm(question);\n\n if (removeVariant) {\n updateTabCount(tabpanel, -1);\n if ($('.island-behaviour').length == 1) {\n var addBehaviourLink = $('.cocoon-add-behaviours-association');\n var linkText = addBehaviourLink.html();\n addBehaviourLink.html(\n linkText.replace('Add another change', 'Add change')\n );\n }\n } else {\n event.preventDefault();\n event.result.val = false;\n }\n });\n}\n\nfunction targetType(classList) {\n if (classList.contains('js-cocoon-variants')) {\n return 'variant';\n } else if (classList.contains('js-cocoon-behaviour-blocks')) {\n return 'behaviour block';\n } else if (classList.contains('js-cocoon-behaviours')) {\n return 'behaviour';\n } else if (classList.contains('js-cocoon-variant-behaviours')) {\n return 'variant behaviour';\n } else if (classList.contains('js-cocoon-condition-blocks')) {\n return 'condition block';\n } else if (classList.contains('js-cocoon-condition-groups')) {\n return 'condition group';\n } else if (classList.contains('js-cocoon-conditions')) {\n return 'condition';\n } else if (classList.contains('js-cocoon-choices')) {\n return 'choice';\n }\n}\n\nfunction updateTabCount(tabpanel, amount) {\n const $widget = $(tabpanel).closest(SELECTOR);\n const currentCount = parseInt($widget.attr(ATTR_COUNT), 10);\n const newCount = currentCount + amount;\n $widget.attr(ATTR_COUNT, currentCount + amount);\n $widget.toggleClass(CLASS_NO_ADD, newCount >= $widget.attr(ATTR_MAX));\n $widget.toggleClass(CLASS_NO_DELETE, newCount <= $widget.attr(ATTR_MIN));\n}\n","import { EVENT_WILL_INSERT } from '../dom';\n\nconst ADD_BEHAVIOURS_BTN_CLASSNAME = 'cocoon-add-behaviours-association';\n\nexport default function setupChoicesAdvancedLogic() {\n $(document).on('cocoon:after-insert', (event, [wrapper]) => {\n // when adding a behaviour block, add a first behaviour by default\n if (wrapper.classList.contains('behaviour-block-fields')) {\n $(wrapper).find(`.${ADD_BEHAVIOURS_BTN_CLASSNAME}`).trigger('click');\n }\n\n const addLink = event.target.children[0];\n if (addLink.classList.contains(ADD_BEHAVIOURS_BTN_CLASSNAME)) {\n updateAddBehaviourCopytext(wrapper);\n }\n });\n\n const choiceTabSelector = '.js-choice-tabs__tabpanel';\n\n $(document).on('turbolinks:load', function () {\n moveElseIfBtn(document);\n\n $(document)\n .find(choiceTabSelector)\n .each(function () {\n // apply for each tab found\n listenLinkToChanges(this);\n });\n });\n\n $(document).on(EVENT_WILL_INSERT, function ({ detail }) {\n moveElseIfBtn(detail.html);\n\n $(detail.html)\n .find(choiceTabSelector)\n .each(function () {\n // apply for each tab found\n listenLinkToChanges(this);\n });\n });\n\n $(document).on('cocoon:before-insert', function (e, [wrapper]) {\n moveElseIfBtn(wrapper);\n // wrapper is the choice tab itself\n listenLinkToChanges(wrapper);\n });\n}\n\nfunction updateAddBehaviourCopytext(wrapper) {\n var addBehaviourLink = $(wrapper).closest('.behaviour-block-fields').find(`.${ADD_BEHAVIOURS_BTN_CLASSNAME}`);\n\n var linkText = addBehaviourLink.html();\n addBehaviourLink.html(linkText.replace('Add change', 'Add another change'));\n}\n\nfunction moveElseIfBtn(wrapper) {\n $(wrapper)\n .find('.condition-blocks-wrapper')\n .each(function () {\n const $blocksWrapper = $(this);\n const $btn = $blocksWrapper.find('.add-else-if-condition-btn').detach();\n $blocksWrapper.find('.if--condition-block-fields:last').after($btn);\n });\n}\n\nfunction listenLinkToChanges(choiceTab) {\n const IF_SELECTOR = '.d-if--conditional-block',\n UNLESS_SELECTOR = '.d-unless--conditional-block';\n\n const $choiceTab = $(choiceTab),\n $select = $choiceTab.find('.js-linked-variant-select:first'),\n $collapsibleConditionBlocks = $choiceTab.find('.conditional-logic-blocks-collapsible .js-collapsible-field');\n\n $select.on('change', function (e) {\n const $ifContent = $choiceTab.find(IF_SELECTOR),\n $unlessContent = $choiceTab.find(UNLESS_SELECTOR);\n /** we'll set style='display: none' to toggle these elements\n */\n if (e.target.value === 'advanced_logic') {\n $ifContent.removeAttr('style');\n $unlessContent.css('display', 'none');\n $collapsibleConditionBlocks.addClass('show');\n } else {\n $ifContent.css('display', 'none');\n $unlessContent.removeAttr('style');\n $collapsibleConditionBlocks.removeClass('show');\n }\n });\n\n // trigger once so UI is in sync\n $select.trigger('change');\n}\n","/**\n * Shared cocoon constants and helpers\n */\n\nexport const SELECTOR_ALL_FIELDS = '.nested-fields-choices';\n\n// Cocoon leaves deleted fields in the DOM so they can\n// be submitted to the server, so we'll need to mark them\n// ourselves and provide a selector to ignore them\nexport const CLASS_DELETED = 'js-cocoon__deleted';\nexport const SELECTOR_FIELDS = SELECTOR_ALL_FIELDS + `:not(.${CLASS_DELETED})`;\n\nexport function markDeleted(fields) {\n fields.classList.add(CLASS_DELETED);\n}\n","/**\n * Add tracking of cocoon fields position\n * into an actual form field to allow storage\n * of the field positions using `act_as_list`\n * on the backend\n * @module lib/cocoon_position\n */\nimport { SELECTOR_FIELDS, markDeleted } from '.';\n\nconst SELECTOR = '.js-cocoon-position';\n\nconst SELECTOR_POSITION_FIELD = '.js-cocoon-reorderable__position-input';\n\nexport default function setupCocoonPosition() {\n $(document).on('cocoon:after-insert', SELECTOR, ({ target }) => {\n updatePositions(target);\n });\n\n $(document).on('cocoon:after-remove', SELECTOR, ({ target }, [field]) => {\n markDeleted(field);\n updatePositions(target);\n });\n}\n\nexport function updatePositions(fieldsWrapper) {\n const fields = [...fieldsWrapper.querySelectorAll(SELECTOR_FIELDS)];\n\n fields.forEach((field, index) => {\n const input = field.querySelector(SELECTOR_POSITION_FIELD);\n input.value = index + 1;\n // Dispatch a synthetic `input` event\n // to notify that the input's value changed\n const event = new CustomEvent('input', { bubbles: true });\n input.dispatchEvent(event);\n });\n}\n","import { updatePositions } from './position';\nimport { SELECTOR_FIELDS } from '.';\n\nconst SELECTOR_TOGGLE = '.js-cocoon-reorder-toggle';\nconst ATTRIBUTE_OFFSET = 'data-cocoon-reorder-offset';\n\nexport default function setupCocoonReorder() {\n $(document).on('click', SELECTOR_TOGGLE, event => {\n const offset = parseInt(event.currentTarget.getAttribute(ATTRIBUTE_OFFSET));\n const field = event.currentTarget.closest(SELECTOR_FIELDS);\n\n shiftFields(field, offset);\n });\n}\n\nfunction shiftFields(nestedField, offset) {\n const hasMoved = shift(nestedField, offset, {\n selector: SELECTOR_FIELDS\n });\n if (hasMoved) {\n updatePositions(nestedField.parentElement);\n moveTab(nestedField, offset);\n }\n}\n\nfunction shift(nestedField, offset = 1, { selector } = {}) {\n let fields = selector\n ? nestedField.parentElement.querySelectorAll(selector)\n : nestedField.parentElement.children;\n\n // Need to transform it into an Array to be sure to have `indexOf`\n fields = [...fields];\n\n const fieldPosition = fields.indexOf(nestedField);\n const newPosition = fieldPosition + offset;\n\n // Only move if the new position is in range\n const fieldAtNewPosition = fields[newPosition];\n if (fieldAtNewPosition) {\n fieldAtNewPosition.insertAdjacentElement(\n offset > 0 ? 'afterend' : 'beforebegin',\n nestedField\n );\n }\n\n // Return whether a move happened or not\n return !!fieldAtNewPosition;\n}\n\nfunction moveTab(field, offset) {\n // Go back up to the closest list of tabs\n const tab = document.querySelector(`[data-target=\"#${field.id}\"]`);\n if (tab) {\n shift(tab, offset);\n }\n}\n\nwindow.shiftFields = shiftFields;\n","/**\n * Implementation of keyboard controls for moving focus\n * with arrow keys in a tab component\n * Based on https://glitch.com/~roving-tabindex by Rob Dodson\n * Copyright 2018 Google LLC.\n * SPDX-License-Identifier: Apache-2.0\n * @module lib/roving_tabindex\n */\nconst SELECTOR = '.js-roving-tabindex';\nconst SELECTOR_TARGET = 'button,[role=\"button\"]';\nconst SELECTOR_ACTIVE = '.active';\n\nconst KEYCODE = {\n LEFT: 37,\n RIGHT: 39\n};\n\nexport default function setupRovingTabindex() {\n $(document).on('keydown', SELECTOR, onKeyDown);\n $(document).on('click', SELECTOR, onClick);\n $(document).on('focusout', SELECTOR, onFocusOut);\n}\n\nfunction onFocusOut({ currentTarget }) {\n // During focusout, the focus is reset to the body :(\n // So we need to listen to the next 'focusin' event\n // To see if it is within our container or not\n $(document).one('focusin', ({ target }) => {\n if (!currentTarget.contains(target)) {\n activate(currentTarget.querySelector(SELECTOR_ACTIVE), currentTarget, {\n focus: false\n });\n }\n });\n}\n\nfunction onKeyDown({ keyCode, currentTarget }) {\n switch (keyCode) {\n case KEYCODE.RIGHT:\n event.preventDefault();\n focusNextItem(currentTarget);\n break;\n case KEYCODE.LEFT:\n event.preventDefault();\n focusPreviousItem(currentTarget);\n break;\n }\n}\n\nfunction onClick({ target, currentTarget }) {\n // Make sure the clicked item is one of the buttons and\n // not something random :)\n const buttons = [...currentTarget.querySelectorAll(SELECTOR_TARGET)];\n if (buttons.indexOf(target) == -1) {\n return;\n }\n activate(target, currentTarget);\n}\n\n// Figure out if the current element has a next sibling.\n// If so, moving focus to it.\nfunction focusNextItem(container) {\n const item = document.activeElement;\n if (item.nextElementSibling) {\n activate(item.nextElementSibling, container);\n } else {\n // Activate first element\n activate(container.querySelector(SELECTOR_TARGET), container);\n }\n}\n\n// Figure out if the current element has a previous sibling.\n// If so, moving focus to it.\nfunction focusPreviousItem(container) {\n const item = document.activeElement;\n if (item.previousElementSibling) {\n activate(item.previousElementSibling, container);\n } else {\n activate(last(container.querySelectorAll(SELECTOR_TARGET)), container);\n }\n}\n\n// This is where the roving tabindex magic happens!\nfunction activate(item, container, { focus = true } = {}) {\n // Set all of the buttons to tabindex -1\n container\n .querySelectorAll(SELECTOR_TARGET)\n .forEach(btn => (btn.tabIndex = -1));\n\n // Make the current button \"active\"\n item.tabIndex = 0;\n if (focus) {\n item.focus();\n }\n}\n\nfunction last(array) {\n return array[array.length - 1];\n}\n","/**\n * Handles the upload on a file as soon as the file gets picked,\n * dispatching events as the upload progresses\n * @module lib/file_upload_on_change\n */\n\n// CSS Selector for the input itself\nconst SELECTOR = '.js-file-upload-on-change';\n// CSS Selector for the hidden field that will get the ID returned by the server\nexport const SELECTOR_HIDDEN_FIELD = '.js-file-upload-on-change__attachment_id';\n\n// The URL to which upload the file\nconst ATTR_UPLOAD_URL = 'data-file-upload-url';\n\nexport const EVENT_START = 'file-upload:start';\nexport const EVENT_SUCCESS = 'file-upload:success';\nexport const EVENT_PROGRESS = 'file-upload:progress';\nexport const EVENT_UPLOADED = 'file-upload:uploaded';\nexport const EVENT_ERROR = 'file-upload:error';\nexport const EVENT_COMPLETE = 'file-upload:complete';\n\nexport default function setupFileUploadOnChange() {\n $(document).on('change', SELECTOR, ({ target }) => {\n // We only want to upload if there are files set already\n if (target.files.length) {\n // Submit the field\n const data = new FormData();\n data.append('video', target.files[0]);\n let xhr;\n $.ajax({\n // A little bit of gymnastic to get the upload progress\n // visible from jQuery's request\n xhr() {\n xhr = $.ajaxSettings.xhr();\n xhr.upload.addEventListener(\n 'progress',\n ({ lengthComputable, loaded, total }) => {\n if (lengthComputable) {\n const progressPercent = (100 * loaded) / total;\n $(target).trigger(EVENT_PROGRESS, progressPercent, xhr);\n if (progressPercent == 100) {\n $(target).trigger(EVENT_UPLOADED, xhr);\n }\n }\n }\n );\n $(target).trigger(EVENT_START, xhr);\n return xhr;\n },\n url: target.getAttribute(ATTR_UPLOAD_URL),\n data,\n processData: false,\n contentType: false,\n type: 'POST',\n success: data => {\n const $attachmentField = findAttachmentField(target);\n // Backup only the original one in case of multiple replacements\n if (!$attachmentField.attr('data-value')) {\n $attachmentField.attr('data-value', $attachmentField.attr('value'));\n }\n $attachmentField.prop('value', data.video_uuid);\n $(target).trigger(EVENT_SUCCESS, xhr);\n },\n error: () => {\n $(target).trigger(EVENT_ERROR, xhr);\n }\n });\n } else {\n const $attachmentField = findAttachmentField(target);\n $attachmentField.attr('value', $attachmentField.attr('data-value') || '');\n }\n });\n\n // Disables the field before submit so it doesn't get sent\n // alongside the form\n $(document).on('submit ajax:before', ({ target }) => {\n $(SELECTOR, target).prop('disabled', true);\n });\n\n // Re-enable the field after the upload ajax finishes\n // in case of errors\n $(document).on('ajax:complete', ({ target }) => {\n $(SELECTOR, target).prop('disabled', false);\n });\n}\n\nfunction findAttachmentField(fileInput) {\n return $(fileInput)\n .closest('fieldset')\n .find(SELECTOR_HIDDEN_FIELD);\n}\n","/**\n * Marks sources of UJS busy with the `wrp-busy` class\n * while the request is happening\n * @module lib/ujs_busy\n */\nconst CLASS_BUSY = 'wrp-busy';\n\nexport default function setupUjsBusy() {\n $(document).on('ajax:beforeSend', ({ target }) => {\n const $target = $(target);\n $target.addClass(CLASS_BUSY);\n $target.one('ajax:complete', () => {\n $(target).removeClass(CLASS_BUSY);\n });\n });\n}\n","/**\n * Rendering of the UJS errors after submitting the form in the sidebar\n * Allows the server to send back a 422 error with a pre-rendered form\n * ready to replace the existing form, or JSON with a `flash.error` field\n * @module lib/ujs_form_errors\n */\nimport { replace } from './dom';\nimport { ERROR, NOTIFICATION, notify } from './notifications';\n\n/** Container for the form errors */\nconst SELECTOR_ERRORS = '.js-form-errors';\n\nexport default function setupUjsFormErrors() {\n $(document).on('ajax:error', (event) => {\n event.preventDefault();\n const [response, , xhr] = event.detail;\n if (!xhr._wasAborted) {\n // If the status is 422, we expect the server to have sent\n // us back the updated form with errors\n if (xhr.status == 422 && event.target instanceof HTMLFormElement) {\n renderHTMLError(response, event.target);\n } else {\n // Otherwise we need to render our own error\n renderOtherErrors(response, event.target);\n }\n }\n });\n}\n\nfunction renderHTMLError(response, target) {\n const html = response.body.children[0];\n // Before replacing check where the focus is\n const focus = target.contains(document.activeElement);\n // When focus is outside the target, set a role=\"alert\"\n // to trigger the vocalisation when the element get replaced\n if (!focus) {\n html.querySelector(SELECTOR_ERRORS).setAttribute('role', 'alert');\n }\n replace(html, target);\n // If focus is within the element, focus the errors\n if (focus) {\n const errors = html.querySelector(SELECTOR_ERRORS);\n if (errors) {\n errors.setAttribute('tabindex', -1);\n errors.focus();\n errors.setAttribute('role=\"alert\"');\n } else {\n html.setAttribute('tabindex', -1);\n html.focus();\n }\n }\n}\n\nfunction renderOtherErrors(response, target) {\n if (target instanceof HTMLFormElement) {\n const errorContainer = target.querySelector(SELECTOR_ERRORS);\n if (errorContainer) {\n $(errorContainer).html(`\n
\n

Sorry, we could not save your data!

\n
\n `);\n errorContainer.setAttribute('tabindex', -1);\n errorContainer.focus();\n }\n } else if (response.flash && response.flash.error) {\n notify(response.flash.error, ERROR);\n } else if (response.flash && response.flash.notification) {\n notify(response.flash.notification, NOTIFICATION);\n } else {\n notify('Sorry, an error occured.', ERROR);\n }\n}\n","/**\n * Complements the `lib/file_upload` module to add a progress bar\n * while a file is uploading.\n * See the `app/views/shared/forms/_file_upload.html.haml` partial\n * for the HTML supporting it and the `app/webpack/styles/components/_file_upload.scss` SCSS file for the styling\n * @module lib/file_upload_progress\n */\n\nimport {\n EVENT_START,\n EVENT_SUCCESS,\n EVENT_ERROR,\n EVENT_PROGRESS,\n EVENT_UPLOADED\n} from './file_upload_on_change';\n// Re-use the SELECTOR from the file_upload module\nimport { SELECTOR } from './file_upload';\n\n/** CSS selector for the progress bar */\nconst SELECTOR_PROGRESS = '.js-file-upload__progress';\n/** CSS selector for the status text */\nconst SELECTOR_STATUS = '.js-file-upload__status';\n/** CSS selector for the cancle button */\nconst SELECTOR_CANCEL = '.js-file-upload__cancel-upload';\n\nconst CLASS_UPLOADING = 'wrp-file-upload--is-uploading';\nconst CLASS_HAS_ERRORS = 'wrp-file-upload--has-errors';\n\nexport default function setupFileUploadProgress() {\n $(document).on(EVENT_START, SELECTOR, (event, xhr) => {\n startUpload($(event.currentTarget), xhr, $(event.target));\n });\n $(document).on(EVENT_PROGRESS, SELECTOR, (event, progressPercent) => {\n updateProgress($(event.currentTarget), progressPercent);\n });\n $(document).on(EVENT_UPLOADED, SELECTOR, event => {\n updateStatus($(event.currentTarget));\n });\n $(document).on(EVENT_SUCCESS, SELECTOR, event => {\n endUpload($(event.currentTarget));\n });\n $(document).on(EVENT_ERROR, SELECTOR, (event, xhr) => {\n handleError($(event.currentTarget), xhr);\n });\n}\n\nfunction startUpload($fileUploader, xhr, $input) {\n $fileUploader.removeClass(CLASS_HAS_ERRORS);\n $fileUploader.addClass(CLASS_UPLOADING);\n $fileUploader.find(SELECTOR_PROGRESS).css('width', `0%`);\n $fileUploader.find(SELECTOR_STATUS).text('Uploading');\n $fileUploader.find(SELECTOR_PROGRESS).removeClass('progress-bar-animated');\n $fileUploader.find(SELECTOR_CANCEL).one('click', () => {\n xhr.abort();\n $fileUploader.removeClass(CLASS_UPLOADING);\n $input.val(null);\n $input.trigger('change');\n removeError($fileUploader);\n });\n}\n\nfunction updateProgress($fileUploader, progressPercent) {\n const $progress = $fileUploader.find(SELECTOR_PROGRESS);\n $progress.css('width', `${progressPercent}%`);\n}\n\nfunction updateStatus($fileUploader) {\n $fileUploader.find(SELECTOR_STATUS).text('Processing your upload');\n $fileUploader.find(SELECTOR_PROGRESS).addClass('progress-bar-animated');\n}\n\nfunction endUpload($fileUploader) {\n $fileUploader.removeClass(CLASS_UPLOADING);\n removeError($fileUploader);\n}\n\nfunction handleError($fileUploader, xhr) {\n $fileUploader.find(SELECTOR_STATUS).text('Sorry, the upload failed');\n $fileUploader.find(SELECTOR_PROGRESS).removeClass('progress-bar-animated');\n $fileUploader.addClass(CLASS_HAS_ERRORS);\n removeError($fileUploader);\n // Only render our own errors;\n if (xhr.status == 422) {\n try {\n const errors = JSON.parse(xhr.response);\n if (errors.message) {\n renderError($fileUploader, errors.message);\n }\n } catch {\n /* Just don't stop the JS execution */\n }\n }\n}\n\nfunction removeError($fileUploader) {\n $fileUploader\n .closest('.form-group')\n .find('.form-group.file .invalid-feedback')\n .remove();\n}\n\nfunction renderError($fileUploader, message) {\n if (message) {\n $fileUploader\n .closest('.form-group')\n .find('.form-group:first')\n .append(`

${message}

`);\n }\n}\n","/**\n * Sets up a color picker based on https://github.com/Simonwep/pickr\n * See `app/helpers/color_picker_helper.rb` for a helper to set it up in the views\n * @module lib/color_picker\n */\nimport Pickr from '@simonwep/pickr/src/js/pickr';\nimport { EVENT_WILL_INSERT } from './dom';\n\n/**\n * The class to set on the colopicker's form-group\n */\n\nconst SELECTOR = '.js-color-picker';\nconst SELECTOR_FIELD = 'input';\nconst SELECTOR_LABEL = 'label';\n\n/**\n * Attribute for setting the default color of the color picker\n */\n\nconst ATTR_DEFAULT_COLOR = 'data-color-picker-default';\n\nexport default function setupColorPicker() {\n let pickrs = [];\n $(document).on('turbolinks:load', function() {\n pickrs = setup();\n });\n // The EVENT_WILL_INSERT means the form has been completely\n // replaced, so we can tear down previous color pickers\n $(document).on(EVENT_WILL_INSERT, function({ detail }) {\n teardown();\n pickrs = setup(detail.html);\n });\n\n // Cocoon will just add new tabs so we don't want to teardown\n // existing color pickrs, just keep track of them\n $(document).on('cocoon:before-insert', (e, [tabpanel]) => {\n pickrs = [...pickrs, ...setup(tabpanel)];\n });\n\n pickrs = setup();\n\n $(document).on('turbolinks:before-cache', function() {\n teardown();\n });\n\n function teardown() {\n pickrs.forEach(pickr => {\n pickr.destroyAndRemove();\n });\n pickrs = [];\n }\n}\n\nfunction setup(parent = document) {\n // Not jQuery to get a proper array\n const pickrs = [...parent.querySelectorAll(SELECTOR)].map(el => {\n if (el.classList.contains('stornaway-pickr')) {\n return null;\n }\n el.classList += ' stornaway-pickr';\n const field = el.querySelector(SELECTOR_FIELD);\n // Create a placeholder that'll get replaced by\n const placeholder = document.createElement('div');\n el.insertBefore(placeholder, field);\n\n const pickr = new Pickr({\n el: placeholder,\n container: el,\n theme: 'monolith',\n color: null,\n components: {\n preview: true,\n palette: true,\n hue: true,\n opacity: true,\n interaction: {\n input: true,\n save: true,\n cancel: true,\n clear: true\n }\n },\n comparison: true,\n swatches: null,\n closeOnScroll: true,\n //\n adjustableNumbers: false,\n default: el.getAttribute(ATTR_DEFAULT_COLOR),\n position: 'bottom-end',\n strings: {\n save: 'Select'\n }\n });\n\n // Hide the field (but don't disable it so it still submits)\n $(field).addClass('d-none');\n pickr.on('init', function() {\n pickr.setColor(field.value || null);\n\n // Make the popup focusable so it can be focused on show\n pickr.getRoot().app.setAttribute('tabindex', '-1');\n pickr.on('show', (color, instance) => {\n instance.getRoot().app.focus();\n });\n\n // Style the 'clear' state to show the default color as placeholder\n pickr.getRoot().button.style.backgroundColor = el.getAttribute(\n ATTR_DEFAULT_COLOR\n );\n\n // Carry the values from the picker to the field that'll be submitted\n pickr.on('save', (color, instance) => {\n if (color) {\n field.value = `${color.toHEXA()}`;\n // Dispatch events on the original field so other components\n // can listen to changes like on a regular form element\n field.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n field.dispatchEvent(new CustomEvent('change', { bubbles: true }));\n }\n instance.hide();\n instance.getRoot().button.focus();\n });\n pickr.on('clear', (color, instance) => {\n field.value = '';\n instance.hide();\n instance.getRoot().button.focus();\n });\n pickr.on('cancel', (color, instance) => {\n instance.hide();\n instance.getRoot().button.focus();\n });\n adjustPickerUI(pickr);\n });\n\n $(el).on('click', SELECTOR_LABEL, () => {\n pickr.show();\n });\n\n return pickr;\n });\n\n return pickrs.filter((pickr) => pickr);\n}\n\nfunction adjustPickerUI(pickr) {\n const app = pickr.getRoot().app;\n const clearButton = app.querySelector('.pcr-clear');\n // Avoid creating 8 digit hex (with transparency), that are not yet supported in browsers\n $('.pcr-result', app)\n .attr('maxLength', 7)\n .addClass('form-control');\n $('.pcr-swatches', app).remove();\n\n // Reorder buttons so they go \"clear\", \"cancel\", \"save\"\n const interaction = app.querySelector('.pcr-interaction');\n interaction.insertBefore(app.querySelector('.pcr-save'), clearButton);\n\n // Create an input-group to link the clean button to the result\n const inputGroup = $(`
\n
\n
`)[0];\n\n inputGroup.insertBefore(\n app.querySelector('.pcr-result'),\n inputGroup.childNodes[0]\n );\n inputGroup.querySelector('.input-group-append').appendChild(clearButton);\n clearButton.value = '×';\n\n interaction.insertBefore(inputGroup, app.querySelector('.pcr-cancel'));\n\n interaction.addEventListener(\n 'keydown',\n e => {\n if (e.key === 'Enter') {\n pickr.applyColor(); // \"Saves\" the color\n pickr.hide(); // Hides the modal\n // You may call e.stopImmediatePropagation(); if you want to prevent event-bubbling\n }\n },\n true\n );\n}\n","import { EVENT_WILL_INSERT } from './dom';\n\nexport default function setupVariableFormValueType() {\n setup();\n setListeners();\n}\n\nfunction setListeners() {\n $(document).on('turbolinks:load', function () {\n setup();\n });\n\n $(document).on(EVENT_WILL_INSERT, ({ detail }) => {\n setup(detail.html);\n });\n}\n\nfunction setup(parent = document) {\n const SELECTOR = 'form select#variable_variable_value_type';\n const $select = $(parent).find(SELECTOR);\n\n if ($select.length === 0) {\n return;\n }\n\n $select.on('change', (e) => {\n const variableType = e.target.value;\n toggleListsHint(variableType);\n toggleBoolSelect(variableType);\n });\n\n $select.trigger('change');\n}\n\nfunction toggleBoolSelect(variableType) {\n const $target = $('#variable_variable_starting_value'),\n $booleanWrapper = $('.boolean-starting-value-wrapper'),\n $nonBooleanWrapper = $('.non-boolean-starting-value-wrapper');\n switch (variableType) {\n case 'list':\n $target.attr('type', 'text');\n hideEl($booleanWrapper);\n showEl($nonBooleanWrapper);\n break;\n case 'text':\n $target.attr('type', 'text');\n hideEl($booleanWrapper);\n showEl($nonBooleanWrapper);\n break;\n case 'number':\n $target.attr('type', 'number');\n hideEl($booleanWrapper);\n showEl($nonBooleanWrapper);\n break;\n case 'boolean':\n showEl($booleanWrapper);\n hideEl($nonBooleanWrapper);\n break;\n default:\n break;\n }\n}\n\nfunction toggleListsHint(variableType) {\n const $badge = $('.variable_variable_starting_value .badge');\n if (variableType === 'list') {\n $badge.show();\n } else {\n $badge.hide();\n }\n}\n\nfunction showEl($wrapper) {\n $wrapper.removeClass('d-none');\n $wrapper.find('input, select').removeAttr('disabled');\n}\n\nfunction hideEl($wrapper) {\n $wrapper.addClass('d-none');\n $wrapper.find('input, select').attr('disabled', 'disabled');\n}\n","/**\n * A module for periodically polling the exports's result\n * @module lib/check_export\n */\nconst PATH_ATTRIBUTE = 'data-check-export-path';\n\nexport default function checkExport() {\n let interval;\n\n // Expose the function to `window` so that the backend can call it\n window.setUpExportCheck = function() {\n const element = document.querySelector(`[${PATH_ATTRIBUTE}]`);\n\n if (element) {\n interval = setInterval(() => {\n $.get(element.getAttribute(PATH_ATTRIBUTE));\n }, 1000);\n }\n };\n\n $(document).on('turbolinks:before-cache', () => {\n clearInterval(interval);\n });\n\n // TODO: Looks like dead code\n window.notifyExportIsAvailable = function() {\n clearInterval(interval);\n };\n}\n","/**\n * A module for periodically checking the project's from template creation status\n * Status is currently introduced via the model TemplateCreationJob that holds the data\n * needed for the background job Templates::AttachButtonImages\n * which is responsible for creating, storing and attaching button images to the choices\n * that were created via template\n * @module lib/check_project_creation\n */\nconst PATH_ATTRIBUTE = 'data-check-project-creation';\n\nexport default function checkProjectCreation() {\n let interval;\n\n // Expose the function to `window` so that the backend can call it\n window.setUpProjectCreationCheck = function () {\n const element = document.querySelector(`[${PATH_ATTRIBUTE}]`);\n\n if (element) {\n interval = setInterval(() => {\n $.get(element.getAttribute(PATH_ATTRIBUTE), (response) => {\n if (response.completed === true) {\n // Enable button and update its copy\n const button = document.getElementById('js-project-ready-button');\n button.innerHTML = 'Go to project';\n button.classList.remove('disabled');\n button.classList.add('text-white');\n\n // Show flash message (success)\n const flashMessage = document.getElementById('js-project-ready-flash');\n flashMessage.classList.remove('d-none');\n\n // Remove overlay on button click\n $(document).on('click', button, function () {\n element.classList.add('d-none');\n });\n\n // Stop listening to the project creation progress\n clearInterval(interval);\n }\n });\n }, 1000);\n }\n };\n\n $(document).on('turbolinks:before-cache', () => {\n clearInterval(interval);\n });\n}\n","/**\n * A module for showing and hiding elements via a checkbox/toggle\n * @module lib/show_hide\n */\n\nexport default function showHide() {\n // attach on page load\n runShowHide();\n\n // reattach on turbolinks load (e.g. publish/unpublish project)\n document.addEventListener('turbolinks:load', () => {\n runShowHide();\n });\n\n // reattach when form is replaced\n document.addEventListener('ajax:error', (event) => {\n if (event.target instanceof HTMLFormElement) {\n runShowHide();\n }\n });\n}\n\nfunction runShowHide() {\n document.querySelectorAll('[data-show-hide]').forEach((element) => {\n const targets = document.querySelectorAll(`[data-show-hide-target=\"${element.dataset.showHide}\"]`);\n\n // use dataset to know if we need to attach the event listener. This avoids attaching the event listener twice on initial page load where turbolinks:load sometimes is fired and sometimes is not\n if (!element.dataset.attached) {\n element.dataset.attached = true;\n\n element.addEventListener('change', () => {\n targets.forEach((target) => {\n target.classList.toggle('d-none');\n });\n });\n }\n });\n}\n","/**\n * Handles the Rails UJS response for replacing form\n * when switching between script and non script edition\n * of the islands.\n * @module lib/island_edit_modes\n */\nimport { replace } from './dom';\n\n/** CSS selector for the element on which to listen to the UJS events*/\nconst SELECTOR = '.js-island-edit-modes';\n/** CSS selector to target specific elements more specifically */\nconst SELECTOR_SOURCE = '.js-island-edit-modes__trigger';\n\nexport default function setupIslandEditModes() {\n $(document).on('ajax:success', SELECTOR_SOURCE, ({ target, detail }) => {\n if ($(target).is(SELECTOR_SOURCE)) {\n const [response] = detail;\n const existing = findExisting(target)[0];\n const updated = response.querySelector(SELECTOR);\n replace(updated, existing);\n }\n });\n\n // We don't want to do unnecessary replacement on active tabs\n $(document).on('ajax:before', SELECTOR_SOURCE, event => {\n if ($(event.target).hasClass('active')) {\n event.preventDefault();\n }\n });\n}\n\nfunction findExisting(source) {\n return $(source).closest(SELECTOR);\n}\n","const SELECTOR = '.js-default-choice';\nconst SELECTOR_TAB_PANEL = '.js-tab-content-choices';\n\nexport default function setupUpdateCheckboxes() {\n $(document).on('drawer:did-open', () => {\n $(document).on('change', SELECTOR, limitDefaultChoices);\n });\n\n $(document).on('drawer:did-close', teardown);\n\n $(document).on('turbolinks:before-cache', teardown);\n\n function limitDefaultChoices() {\n const checkboxList = $(this)\n .closest(SELECTOR_TAB_PANEL)\n .find(SELECTOR);\n\n checkboxList.each((ind, el) => {\n if (!$(el).is(this)) {\n $(el).prop('checked', false);\n }\n });\n }\n\n function teardown() {\n $(document).off('change', SELECTOR, limitDefaultChoices);\n $(document).off('turbolinks:before-cache', teardown);\n }\n}\n","/**\n * Setup of the SimpleMDE editor and its binding to FountainJS\n * @module lib/script_editor\n */\nimport SimpleMDE from 'simplemde/src/js/simplemde';\n\nimport { EVENT_WILL_INSERT } from './dom';\n\nconst SELECTOR = '.js-script-editor';\n\nconst ATTR_ISLAND_LABEL = 'data-island-label';\n\n// Attempt at using fountain to compile the markdown\nimport fountain from '../../vendor/fountainjs/fountain.js';\nSimpleMDE.prototype.markdown = function(text) {\n let script;\n let title;\n fountain.parse(text, function(output) {\n title = output.html.title_page || '';\n // Fountain returns `

undefined

` if the input string is empty\n script = text ? output.html.script : '';\n });\n return `\n
\n
\n ${title && `
${title}
`}\n
\n ${script}\n
\n
\n
\n `;\n};\n\nexport function setupScriptEditor() {\n $(document).on('turbolinks:load', () => setup());\n $(document).on(EVENT_WILL_INSERT, ({ detail }) => {\n setup(detail.html);\n });\n $(document).on('cocoon:before-insert', (e, [tabpanel]) => {\n setup(tabpanel);\n });\n\n $(document).on('shown.bs.tab', '[id^=tab_variant_]', ({ target }) => {\n $(`#${target.getAttribute('aria-controls')}`)\n .find(SELECTOR)\n .each((index, el) => {\n el.__editor.codemirror.refresh();\n });\n });\n\n setup();\n}\n\nfunction setup(parent = document) {\n $(parent)\n .find(SELECTOR)\n .each((index, el) => {\n const editor = new SimpleMDE({\n element: el,\n status: ['line', 'words'],\n spellChecker: false,\n toolbar: [\n 'bold',\n 'italic',\n '|',\n 'preview',\n 'side-by-side',\n 'fullscreen'\n ],\n parsingConfig: {\n highlightFormatting: false\n }\n });\n // Cache the editor on the element for easier access\n // when refreshing it when tabs load\n el.__editor = editor;\n setupFullscreenTitle(editor, el);\n });\n}\n\nfunction setupFullscreenTitle(editor, el) {\n editor.codemirror.on('optionChange', function(codemirror, optionName) {\n if (optionName == 'fullScreen') {\n if (codemirror.getOption('fullScreen')) {\n // We need to grab a couple of information from the form\n // as the user might have made edits that we want reflected\n // in the fullscreen title\n const summary = $(editor.element)\n .closest('.js-script-editor-title__variant')\n .find('.js-script-editor-title__summary-field')\n .val();\n\n const name = $(editor.element)\n .closest('.js-script-editor-title__island')\n .find('.js-script-editor-title__name-field')\n .val();\n\n // Tempting to read that value when the editor is created\n // but as users can add and remove tabs, we need to do it\n // when fullscreen gets triggered\n const tabPanel = $(editor.element).closest(\n '.js-variant-tabs__tabpanel'\n );\n const tabIndex = [...tabPanel.parent().children('div')].indexOf(\n tabPanel[0]\n );\n\n $(editor.gui.toolbar)\n .find('.js-script-editor-title__island-name')\n .text(name || 'Untitled island');\n $(editor.gui.toolbar)\n .find('.js-script-editor-title__islandSummary')\n .text(summary || 'No summary');\n $(editor.gui.toolbar)\n .find('.js-script-editor-title__variant-number')\n .text(tabIndex + 1);\n }\n }\n });\n\n $(\n `
\n

\n ${el.getAttribute(\n ATTR_ISLAND_LABEL\n )}.:\n Island title

\n

Island summary

\n
`\n ).appendTo(editor.gui.toolbar);\n}\n","/**\n * Adds confirmation for actions that would close the form\n * making users lose the edits they have already made\n * @module lib/confirm_out_of_form_navigation\n */\nimport { EVENT_WILL_INSERT } from './dom';\nimport isWithin from './is_within';\n\n/** CSS selector for the form on which to track the changes */\nconst SELECTOR_FORM = '.js-confirm-out-of-form-navigation__form';\n/** CSS selector for a unique element whose events (click, drawer:will-close) should trigger confirmation */\nconst SELECTOR_TRIGGER = '.js-confirm-out-of-form-navigation__trigger';\n/** CSS selector for an element inside which events within it should strigger confirmation */\n// TODO: See if it can be merged to SELECTOR_TRIGGER as `.js-confirm-out-of-form-navigation__area *`\nconst SELECTOR_AREA = '.js-confirm-out-of-form-navigation__area';\n\nconst MESSAGE = `\nStop!\n\nClick Cancel to go back and save your changes.\n\nIf you click OK, you will lose your unsaved changes.\n`;\n\n/**\n * Tracks the modifications in the form and prompts for confirmation\n * when selected links/buttons (or links/buttons in selected areas)\n * are activated\n */\nexport default function setupConfirmOutOfFormNavigation() {\n let formHasChanges = false;\n // We want to know as soon as user input any data\n // as they can press \"Escape\" to close the modal\n // while focused on a field\n $(document).on('input', SELECTOR_FORM, () => {\n formHasChanges = true;\n });\n // Adding/removing variants and choices is another form\n // of editing the form\n $(document).on('cocoon:after-insert', () => {\n formHasChanges = true;\n });\n $(document).on('cocoon:after-remove', () => {\n formHasChanges = true;\n });\n // Reset when the form gets replaced\n $(document).on(EVENT_WILL_INSERT, SELECTOR_FORM, () => {\n formHasChanges = false;\n });\n document.addEventListener(\n 'ajax:success',\n event => {\n if (isWithin(SELECTOR_FORM, event.target)) {\n formHasChanges = false;\n }\n },\n true\n );\n // Use capture to make sure the check happens before anything\n // and can prevent any other behaviour\n document.addEventListener('click', maybePreventAction, true);\n // TODO: Use capture for this event as well\n $(document).on('drawer:will-close', maybePreventAction);\n // Used by island highlighting to know if it can do it or not\n document.addEventListener(\n 'studio:cell:pointerclick',\n maybePreventAction,\n true\n );\n\n // Because of how JointJS handles its events, `studio:cell:pointerclick`\n // will happen during the same interaction as `click` due to being triggered\n // by the `mouseup` event corresponding to that click.\n // In that scenario, we:\n // - only want to ask once\n // - but cancel the click following the interaction\n let alreadyAskedDuringInteraction;\n let prevent;\n\n function maybePreventAction(event) {\n if (\n // Only consider actions that should actually target the confirmation\n isWithin(SELECTOR_AREA, event.target) ||\n $(event.target).is(SELECTOR_TRIGGER)\n ) {\n if (formHasChanges) {\n // Only ask if we haven't asked already\n if (!alreadyAskedDuringInteraction) {\n // Store the answer for subsequent events\n prevent = !confirm(MESSAGE);\n alreadyAskedDuringInteraction = true;\n // At the start of a new interaction,\n // clear that we've asked so we ask again properly\n $(document).one('mousedown touchstart keydown', () => {\n alreadyAskedDuringInteraction = false;\n });\n }\n\n if (prevent) {\n // Prevent default browser behaviour\n event.preventDefault();\n // Sadly, Rails UJS doesn't account for default being prevented\n // before triggering the `data-remote` handler :(\n event.stopImmediatePropagation();\n } else {\n formHasChanges = false;\n }\n }\n }\n }\n}\n","const SELECTOR = '.js-internal-link-options';\nconst SELECTOR_SELECT = '.js-internal-link-options__select';\nconst SELECTOR_OPTIONS = '.js-internal-link-options__options';\n\nexport default function setupInternalLinkOptions() {\n document.addEventListener('change', ({ target }) => {\n const wrapper = target.closest(SELECTOR);\n // Not only do we need to check that we're inside the component\n // but also that it's the select that triggered the change\n if (wrapper && target.closest(SELECTOR_SELECT)) {\n const options = wrapper.querySelector(SELECTOR_OPTIONS);\n // There can be multiple links for a given choice\n const selects = [...wrapper.querySelectorAll(SELECTOR_SELECT)];\n if (selects.some(select => select.value === 'external_url')) {\n options.setAttribute('disabled', '');\n } else {\n options.removeAttribute('disabled');\n }\n }\n });\n}\n","import $ from 'jquery';\nconst SELECTOR = '.js-password-toggle';\n\n$(document).on('click', SELECTOR, ({ target }) => {\n toggle(target.previousSibling);\n});\n\nfunction toggle(input) {\n if (input.type === 'password') {\n input.type = 'text';\n } else {\n input.type = 'password';\n }\n}\n","import Rails from 'rails-ujs';\nimport Turbolinks from 'turbolinks';\n\ndocument.addEventListener('turbolinks:load', () => {\n const elements = document.querySelectorAll('[data-check-duplication-url]');\n\n elements.forEach(element => {\n let interval;\n\n interval = setInterval(() => {\n Rails.ajax({\n type: 'GET',\n url: element.dataset.checkDuplicationUrl,\n dataType: 'json',\n success: data => {\n switch (data.state) {\n case 'complete':\n clearInterval(interval);\n Turbolinks.visit(window.location);\n break;\n case 'failed':\n clearInterval(interval);\n element.insertAdjacentHTML('afterend', data.html);\n element.remove();\n break;\n }\n }\n });\n }, 3000);\n\n document.addEventListener('turbolinks:before-cache', () => {\n clearInterval(interval);\n });\n });\n});\n","import $ from 'jquery';\nimport { EVENT_WILL_INSERT } from './dom';\n\n$(document).on(EVENT_WILL_INSERT, function ({ detail }) {\n addIndex(detail.html);\n});\n\n$(document).on('cocoon:after-insert', function (e, $insertedItem) {\n const nextIndex = $insertedItem.parent().find('.variant-behaviour').length;\n\n var title = 'Change ' + nextIndex;\n $insertedItem.find('.form-title').html(title);\n});\n\n$(document).on('cocoon:after-remove', function () {\n $('.js-cocoon-variant-behaviours').each(function () {\n addIndex(this);\n });\n});\n\nfunction addIndex(wrapper) {\n let index = 0;\n $(wrapper)\n .find('.variant-behaviour')\n .each(function () {\n // heads up\n // cocoon will add style=display:none to the element when\n // removing the relationship. So ignore these to calculate\n // correctly the index.\n // we could listen for cocoon:before-remove event and add\n // another class to target better these; however we'd need\n // to make sure we do remove the element; as there's a\n // confirmation happening.\n // - see scripts/lib/cocoon/limit.js\n const ignoreEl = $(this).css('display') === 'none';\n if (!ignoreEl) {\n index++;\n var title = 'Change ' + index;\n $(this).find('.form-title').html(title);\n }\n });\n}\n\n$(document).on('change', '.behaviour-type-select', function () {\n var form = $(this).closest('.nested-fields');\n var toggleables = form.find('.toggleable-on-behaviour-type');\n var valueInputDiv = form.find('.value-input');\n\n if ($(this).val() === 'variable_within_text') {\n toggleables.each(function () {\n $(this).hide();\n });\n valueInputDiv.removeClass('d-flex');\n } else {\n toggleables.each(function () {\n $(this).show();\n });\n valueInputDiv.addClass('d-flex');\n }\n});\n\n$(document).on('change', '.point-in-video-select', function () {\n toggleTimePickers(this);\n});\n\n$(document).on(EVENT_WILL_INSERT, function ({ detail }) {\n $(detail.html)\n .find('.point-in-video-select')\n .each(function () {\n toggleTimePickers(this);\n });\n});\n\nfunction toggleTimePickers(wrapper) {\n const $wrapper = $(wrapper);\n const timePickers = $wrapper.parent().find('.time-into-video-picker');\n\n if ($wrapper.find('select').val() === 'specific_time') {\n timePickers.show();\n } else {\n timePickers.hide();\n }\n}\n","const inputSelector = '.condition--logical-statement--input-wrapper select';\n\nexport default function setupConditionGroupsUI(){\n const wrapperSelector = '.conditions-wrapper';\n\n $(document).on('change', inputSelector, function(e){\n const $wrapper = $(this).parents(wrapperSelector);\n $wrapper.find(inputSelector).val( e.target.value );\n });\n\n $(document).on('cocoon:after-insert', function (e, [conditionEl]) {\n const cocoonSelector = 'nested-fields-condition-fields';\n if (conditionEl.classList.contains(cocoonSelector)) {\n applyCurrentOperatorToNewCondition(conditionEl);\n }\n });\n}\n\nfunction applyCurrentOperatorToNewCondition(conditionEl) {\n const currentOperator =\n $(conditionEl.parentElement)\n .find(inputSelector)\n .first()\n .val();\n\n $(conditionEl).find(inputSelector).val(currentOperator);\n}\n","export default function GenericProjectVariableWithinForm(wrapper){\n this.$nonBoolValueInput = $(wrapper).find('.non-boolean-value-input');\n this.$boolValueInput = $(wrapper).find('.boolean-value-select');\n}\n\nGenericProjectVariableWithinForm.prototype.varValueTypeWillBe = function(valueType){\n const initMethodName = `handleValueType_${valueType}`;\n this[initMethodName]();\n};\n\n\nGenericProjectVariableWithinForm.prototype.handleValueType_boolean = function(){\n this.useNonBoolInputs(false);\n};\n\nGenericProjectVariableWithinForm.prototype.handleValueType_number = function(){\n this.useNonBoolInputs(true);\n};\n\nGenericProjectVariableWithinForm.prototype.handleValueType_text = function(){\n this.useNonBoolInputs(true);\n};\n\nGenericProjectVariableWithinForm.prototype.useNonBoolInputs = function(value){\n if (value) {\n this.enableInputsFor(this.$nonBoolValueInput);\n this.disableInputsFor(this.$boolValueInput);\n } else {\n this.enableInputsFor(this.$boolValueInput);\n this.disableInputsFor(this.$nonBoolValueInput);\n }\n};\n\nGenericProjectVariableWithinForm.prototype.enableInputsFor = function($el){\n $el.removeClass('d-none');\n $el.find('input, select').removeAttr('disabled');\n};\n\nGenericProjectVariableWithinForm.prototype.disableInputsFor = function($el){\n $el.addClass('d-none');\n $el.find('input, select').attr('disabled', 'disabled');\n};\n","/**\n * Apply select2 automatically\n * @module lib/js_select2\n */\n\nimport { EVENT_WILL_INSERT } from './dom';\n\nexport const DEFAULT_SELECT2_OPTS = {\n theme: 'bootstrap'\n};\n\nexport default function setupJsSelect2() {\n $(document).on('cocoon:after-insert', (event, [wrapper]) => {\n setupSelect2Automatically(wrapper);\n });\n\n $(document).on('turbolinks:load', function () {\n setupSelect2Automatically(document);\n });\n\n $(document).on(EVENT_WILL_INSERT, function ({ detail }) {\n setupSelect2Automatically(detail.html);\n });\n}\n\nfunction setupSelect2Automatically(wrapper) {\n $(wrapper)\n .find('.js-select2')\n .each(function () {\n $(this).select2( DEFAULT_SELECT2_OPTS );\n });\n}\n","import { EVENT_WILL_INSERT } from './dom';\nimport GenericProjectVariableWithinForm from './generic_project_variable_within_form';\nimport { DEFAULT_SELECT2_OPTS } from './js_select2';\n\nexport default function setupBehaviourActionsHandler() {\n setup();\n setListeners();\n}\n\nfunction setListeners() {\n $(document).on('turbolinks:load', function () {\n setup();\n });\n\n $(document).on(EVENT_WILL_INSERT, ({ detail }) => {\n setup(detail.html);\n });\n\n $(document).on('cocoon:before-insert', function (e, [wrapper]) {\n if (wrapper.classList.contains('nested-fields-behaviour-fields')) {\n new BehaviourWrapper(wrapper);\n }\n });\n}\n\nfunction setup(parent = document) {\n const BEHAVIOUR_SELECTOR = '.nested-fields-behaviour-fields';\n $(parent)\n .find(BEHAVIOUR_SELECTOR)\n .each(function () {\n new BehaviourWrapper(this);\n });\n}\n\nfunction BehaviourWrapper(wrapperEl) {\n this.wrapperEl = wrapperEl;\n this.$toByText = $(wrapperEl).find('.to-by-text');\n this.$actionSelect = $(wrapperEl).find('.behaviour-action-select');\n this.$variablesSelect = $(wrapperEl).find('.variables-js-select2');\n this.currentAction = this.$actionSelect.val();\n\n this.behaviourValueInput = new BehaviourValueInput(wrapperEl);\n\n this.listenForEvents();\n this.initializeInputType();\n this.updateToByText();\n}\n\nBehaviourWrapper.prototype.listenForEvents = function () {\n const self = this;\n\n self.$actionSelect.on('change', function (e) {\n self.currentAction = e.target.value;\n self.applySelect2();\n self.updateToByText();\n self.toggleTargetVariableWrapper();\n });\n\n self.$variablesSelect.on('select2:select', function (e) {\n self.valueInputTypeWillBe(e.params.data.value_type);\n });\n\n self.$actionSelect.trigger('change');\n};\n\nBehaviourWrapper.prototype.initializeInputType = function () {\n const currentVars = this.$variablesSelect.select2('data');\n const valueType = currentVars[0] ? currentVars[0].value_type : 'text';\n this.valueInputTypeWillBe(valueType);\n};\n\nBehaviourWrapper.prototype.toggleTargetVariableWrapper = function () {\n if (this.currentAction === 'add_up') {\n this.behaviourValueInput.disableTargetVarSelect(false); // Enable the Target Variable field for add_up action\n } else if (this.currentAction === 'toggle') {\n this.behaviourValueInput.hideValueInputForToggle(); // Hide the value fields for toggle action\n } else {\n this.behaviourValueInput.disableTargetVarSelect(true); // Enable the value fields for set and change action\n }\n};\n\nBehaviourWrapper.prototype.valueInputTypeWillBe = function (valueType) {\n this.behaviourValueInput.typeWillBe(valueType);\n};\n\nBehaviourWrapper.prototype.updateToByText = function () {\n if (this.currentAction === 'change') {\n this.$toByText.text('by');\n } else {\n this.$toByText.text('to');\n }\n};\n\nBehaviourWrapper.prototype.shouldDestroySelect2 = function () {\n if (this.$variablesSelect.hasClass('select2-hidden-accessible')) {\n this.$variablesSelect.html('');\n this.$variablesSelect.select2('destroy');\n }\n};\n\n/**\n * support applying or re-applying select2.\n * different options are required for select2 depending on\n * the behaviour's actionType.\n */\nBehaviourWrapper.prototype.applySelect2 = function () {\n this.shouldDestroySelect2();\n\n const varsCollections = this.$variablesSelect.data('variables-collections');\n\n if (this.currentAction === 'set') {\n const select2Data = varsCollections.all_variables; // Show all variables for set\n this.initializeSelect2(select2Data);\n } else if (this.currentAction === 'toggle') {\n const select2Data = varsCollections.boolean_variables; // Show only boolean variables for toggle\n this.initializeSelect2(select2Data);\n } else {\n const select2Data = varsCollections.number_variables; // Show only number variables for add_up and change\n this.initializeSelect2(select2Data);\n }\n this.toggleTargetVariableWrapper();\n};\n\n// Function for handling select2Data\nBehaviourWrapper.prototype.initializeSelect2 = function (select2Data) {\n const select2Opts = {\n ...DEFAULT_SELECT2_OPTS,\n data: select2Data,\n };\n\n if (['set', 'change', 'toggle'].includes(this.currentAction)) {\n select2Opts.maximumSelectionLength = 1;\n }\n\n this.$variablesSelect.select2(select2Opts);\n};\n\nfunction BehaviourValueInput(wrapperEl) {\n this.$textValueInputWrapper = $(wrapperEl).find('.non-boolean-value-input'); // Wrapper for text and number inputs\n this.$valueInputsWrapper = $(wrapperEl).find('.value-inputs-wrapper'); // Wrapper for boolean inputs\n this.$targetVarWrapper = $(wrapperEl).find('.target-variable-field'); // Wrapper for target variable field\n this.genericVarForm = new GenericProjectVariableWithinForm(wrapperEl);\n}\n\nBehaviourValueInput.prototype.typeWillBe = function (valueType) {\n const initMethodName = `handleType_${valueType}`;\n this[initMethodName]();\n this.genericVarForm.varValueTypeWillBe(valueType);\n};\n\nBehaviourValueInput.prototype.handleType_number = function () {\n this.setValueInputType('number');\n};\n\nBehaviourValueInput.prototype.disableTargetVarSelect = function (value) {\n if (value) {\n this.genericVarForm.enableInputsFor(this.$valueInputsWrapper);\n this.genericVarForm.disableInputsFor(this.$targetVarWrapper);\n } else {\n this.genericVarForm.enableInputsFor(this.$targetVarWrapper);\n this.genericVarForm.disableInputsFor(this.$valueInputsWrapper);\n }\n};\n\nBehaviourValueInput.prototype.handleType_list = function () {\n this.handleType_text();\n};\n\nBehaviourValueInput.prototype.handleType_text = function () {\n this.setValueInputType('text');\n};\n\nBehaviourValueInput.prototype.handleType_boolean = function () {};\n\nBehaviourValueInput.prototype.setValueInputType = function (type) {\n const $valueInput = this.$textValueInputWrapper.find('input');\n $valueInput.attr('type', type);\n};\n\nBehaviourValueInput.prototype.hideValueInputForToggle = function () {\n // Remove the boolean input field to avoid sending any value with the form (Boolean variable value otherwise sends true or false)\n this.$valueInputsWrapper.find('.boolean-value-select').val('').hide().remove();\n\n // Remove the non-boolean value input field\n this.$textValueInputWrapper.find('input').hide().remove();\n\n // Remove the '.to-by-text' label and the value label\n const $valueInputsWrapper = this.$textValueInputWrapper.closest('.value-inputs-wrapper');\n $valueInputsWrapper.find('.to-by-text').hide().remove();\n $valueInputsWrapper.children('label').hide().remove();\n};\n","import { EVENT_WILL_INSERT } from './dom';\nimport GenericProjectVariableWithinForm from './generic_project_variable_within_form';\n\n// We need 3 different handlers for different types of objects that are inserted by cocoon methods, otherwise the script doesn't find the value fields nested many layers down.\nconst CONDITION_NESTED_FIELDS_CLASSNAME1 = 'nested-fields-condition-fields'; // when a new condition field is added by cocoon\nconst CONDITION_NESTED_FIELDS_CLASSNAME2 = 'nested-fields-condition-block-fields'; // when a new condition block is added by cocoon\nconst CONDITION_NESTED_FIELDS_CLASSNAME3 = 'js-choice-tabs__tabpanel'; // when a new choice tab is added by cocoon\n\nexport default function setupConditionVariableTypesHandler() {\n $(document).on(EVENT_WILL_INSERT, ({ detail }) => {\n setup(detail.html);\n });\n\n $(document).on('cocoon:before-insert', function (e, [wrapper]) {\n if (wrapper.classList.contains(CONDITION_NESTED_FIELDS_CLASSNAME1) || wrapper.classList.contains(CONDITION_NESTED_FIELDS_CLASSNAME2)) {\n new ConditionWrapper(wrapper);\n } else if (wrapper.classList.contains(CONDITION_NESTED_FIELDS_CLASSNAME3)) {\n // When a new choice tab is added by cocoon, the script won't see nested-fields-condition-fields so we need to find it inside the tab\n const nestedConditionFields = $(wrapper).find(`.${CONDITION_NESTED_FIELDS_CLASSNAME1}`);\n if (nestedConditionFields.length) {\n nestedConditionFields.each(function () {\n new ConditionWrapper(this);\n });\n }\n }\n });\n}\n\nfunction setup(parent = document) {\n $(parent)\n .find(`.${CONDITION_NESTED_FIELDS_CLASSNAME1}`)\n .each(function () {\n new ConditionWrapper(this);\n });\n}\n\nfunction ConditionWrapper(wrapperEl) {\n const $wrapper = $(wrapperEl);\n const variableWrapperSelector = '.condition-fields-variable-wrapper';\n\n this.varsCollection = $wrapper.find(variableWrapperSelector).data('all-variables-collection');\n this.$nonBoolValueInput = $wrapper.find('.non-boolean-value-input');\n this.$operatorWrapper = $wrapper.find('.condition-fields-operator-wrapper');\n this.$variableSelect = $wrapper.find(`${variableWrapperSelector} select`);\n this.genericVariableTypeForm = new GenericProjectVariableWithinForm(wrapperEl);\n\n this.setVariableListener();\n}\n\nConditionWrapper.prototype.setVariableListener = function () {\n const self = this;\n this.$variableSelect.on('change', function (e) {\n // if we removed blank option from the select we could\n // skip this\n if (!e.target.value) {\n return;\n }\n\n const selectedVar = self.varsCollection.find(function (varData) {\n return varData.id == e.target.value;\n });\n self.handleEnabledOperatorsFor(selectedVar.value_type);\n self.handleInputValueTypeFor(selectedVar.value_type);\n self.genericVariableTypeForm.varValueTypeWillBe(selectedVar.value_type);\n });\n this.$variableSelect.trigger('change');\n};\n\nConditionWrapper.prototype.handleInputValueTypeFor = function (valueType) {\n if (valueType == 'number') {\n this.$nonBoolValueInput.find('input').attr('type', 'number');\n } else {\n this.$nonBoolValueInput.find('input').attr('type', 'text');\n }\n};\n\nConditionWrapper.prototype.handleEnabledOperatorsFor = function (valueType) {\n const disabledOperators = valueType == 'number' ? [] : ['<', '>'];\n\n this.$operatorWrapper.find('select option').each(function () {\n if (disabledOperators.includes(this.value)) {\n this.setAttribute('disabled', 'disabled');\n } else {\n this.removeAttribute('disabled');\n }\n });\n\n if (valueType != 'number') {\n this.$operatorWrapper.find('select').val('==');\n }\n};\n","import isWithin from './is_within';\n\nconst SELECTOR = '.js-file-upload-validate';\n\nconst SELECTOR_ERROR_BOUNDARY = '.js-file-upload-validate__error-boundary';\nconst SELECTOR_ERROR_MESSAGE = '.invalid-feedback';\nconst SELECTOR_ADD_DESCRIPTION = '.js-file-upload-validate__add-description';\n\nconst ERROR_POSITION = 'afterbegin';\n\n// 4GB\nconst MAX_SIZE = 4000 * 1024 * 1024;\n\nexport default function setupFileUploadValidation() {\n // Prepare the rendering of the validation errors\n document.addEventListener(\n 'change',\n (event) => {\n clearError(event.target);\n },\n true\n );\n\n document.addEventListener(\n 'invalid',\n (event) => {\n displayError(event.target);\n },\n true\n );\n\n // Validate on the capture phase so we can stop the propagation\n // and prevent any further behaviour from happening\n document.addEventListener(\n 'change',\n (event) => {\n if (isWithin(SELECTOR, event.target)) {\n const field = event.target;\n const file = field.files[0];\n if (file && file.size > MAX_SIZE) {\n field.setCustomValidity(\n `Please pick a file less than ${formatFileSize(\n MAX_SIZE\n )}. See Help for more details.`\n );\n field.reportValidity();\n // Would be better to preventDefault\n // but the rest of the listeners is not working this way\n event.stopPropagation();\n } else {\n field.setCustomValidity(null);\n }\n }\n },\n true\n );\n}\n\nfunction clearError(field) {\n const boundary = field.closest(SELECTOR_ERROR_BOUNDARY);\n if (!boundary) return;\n\n const errorMessage = boundary.querySelector(SELECTOR_ERROR_MESSAGE);\n if (errorMessage) {\n errorMessage.parentElement.removeChild(errorMessage);\n }\n\n const description = boundary.querySelector(SELECTOR_ADD_DESCRIPTION);\n removeDOMToken(description, 'aria-describedby', errorId(field));\n removeDOMToken(field, 'aria-describedby', errorId(field));\n}\n\nfunction displayError(field) {\n const boundary = field.closest(SELECTOR_ERROR_BOUNDARY);\n\n boundary.insertAdjacentHTML(\n ERROR_POSITION,\n error(field.validationMessage, { id: errorId(field) })\n );\n\n const description = boundary.querySelector(SELECTOR_ADD_DESCRIPTION);\n prependDOMToken(description, 'aria-describedby', errorId(field));\n prependDOMToken(field, 'aria-describedby', errorId(field));\n}\n\nfunction removeDOMToken(element, attributeName, token) {\n if (!element.getAttribute(attributeName)) return;\n element.setAttribute(\n attributeName,\n element.getAttribute(attributeName).replace(token, '').trim()\n );\n}\n\nfunction prependDOMToken(element, attributeName, token) {\n element.setAttribute(\n attributeName,\n [token, element.getAttribute(attributeName)].filter(Boolean).join(' ')\n );\n}\n\nfunction formatFileSize(sizeInBytes) {\n return `${sizeInBytes / 1024 / 1024}Mb`;\n}\n\nfunction errorId(field) {\n return field.id + '_error';\n}\n\nfunction error(message, { id }) {\n return `

${message}

`;\n}\n","const SELECTOR = '.js-plan-variants';\nexport const SELECTOR_CONTROL = '.js-plan-variants__control';\nconst SELECTOR_PANEL = '.js-plan-variants__panel';\n\nexport default function setupPlanVariants() {\n console.log('Set up');\n $(document).on('change', SELECTOR_CONTROL, event => {\n const panels = $(event.target)\n .closest(SELECTOR)\n .find(SELECTOR_PANEL);\n panels.each(function(index, panel) {\n if (panel.dataset.variantId == event.target.value) {\n panel.classList.remove('d-none');\n } else {\n panel.classList.add('d-none');\n }\n });\n });\n}\n","import { selectFile, filesSelected } from './file_upload';\n\nexport default function setupFileUploadOnModal() {\n const browseFileSelector = '.js-file-upload__selectFileModal';\n\n $(document).on('click', browseFileSelector, ({ currentTarget }) => {\n let wrapperSelector = $(currentTarget).data('target-wrapper');\n selectFile(document.querySelector(wrapperSelector));\n $('.modal.show').modal('hide');\n return;\n });\n\n const uploadFileWrapper = '.upload-a-file-wrapper';\n\n ['dragenter', 'dragover', 'dragleave', 'drop'].forEach((eventName) => {\n $(document).on(eventName, uploadFileWrapper, preventDefaults);\n });\n\n function preventDefaults(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n ['dragenter', 'dragover'].forEach((eventName) => {\n $(document).on(eventName, uploadFileWrapper, highlight);\n });\n\n ['dragleave', 'drop'].forEach((eventName) => {\n $(document).on(eventName, uploadFileWrapper, unhighlight);\n });\n\n function highlight(e) {\n e.currentTarget.classList.add('highlight');\n }\n\n function unhighlight(e) {\n e.currentTarget.classList.remove('highlight');\n }\n\n $(document).on('drop', uploadFileWrapper, handleDrop);\n\n function handleDrop(e) {\n let dt = e.originalEvent.dataTransfer;\n let files = dt.files;\n let browseBtn = e.currentTarget.querySelector(browseFileSelector);\n let wrapperSelector = $(browseBtn).data('target-wrapper');\n let $inputWrapper = document.querySelector(wrapperSelector);\n filesSelected($inputWrapper, files);\n $('.modal.show').modal('hide');\n }\n\n // toggle modal-backdrop\n const modalSelector = '.modal-upload-video';\n\n $(document).on('show.bs.modal', modalSelector, (event) => {\n let modalWrapper = event.currentTarget;\n $(modalWrapper).next('.modal-backdrop').removeClass('d-none');\n\n const getEl = document.querySelector('.wrp-studio-drawer');\n getEl.classList.add('z-index-1050');\n });\n\n $(document).on('hide.bs.modal', modalSelector, (event) => {\n let modalWrapper = event.currentTarget;\n $(modalWrapper).next('.modal-backdrop').addClass('d-none');\n });\n}\n","function disableExportBtn(status) {\n const $exportBtn = $('.require-read-yt-information-page');\n $exportBtn.prop('disabled', status);\n}\n\nexport default function setupProjectExportPage() {\n const flagName = 'readYTInformationPage';\n const $input = $('input[type=checkbox]#read_youtube_information_page');\n $input.prop('checked', window.localStorage.getItem(flagName));\n $input.on('change', () => {\n if ($input.prop('checked')) {\n window.localStorage.setItem(flagName, true);\n disableExportBtn(false);\n } else {\n window.localStorage.removeItem(flagName);\n disableExportBtn(true);\n }\n });\n $input.trigger('change');\n}\n","import Turbolinks from 'turbolinks';\nimport setupStudio from '../scripts/studio';\nimport setupRoleButton from '../scripts/lib/role_button';\nimport setupFormTabs from '../scripts/lib/form_tabs';\nimport setupFileUpload from '../scripts/lib/file_upload';\nimport setupWithJS from '../scripts/lib/with_js';\nimport setupFormTabsLabels from '../scripts/lib/form_tabs_labels';\nimport setupCocoonLimit from '../scripts/lib/cocoon/limit';\nimport setupChoicesAdvancedLogic from '../scripts/lib/cocoon/choices_advanced_logic';\nimport setupCocoonReorder from '../scripts/lib/cocoon/reorder';\nimport setupCocoonPosition from '../scripts/lib/cocoon/position';\nimport setupRovingTabindex from '../scripts/lib/roving_tabindex';\nimport setupFileUploadOnChange from '../scripts/lib/file_upload_on_change';\nimport setupLoadModalContent from '../scripts/lib/load_modal_content';\nimport setupVideo from '../scripts/videoPlayer';\nimport setupUjsBusy from '../scripts/lib/ujs_busy';\nimport setupUjsFormErrors from '../scripts/lib/ujs_form_errors';\nimport setupUjsErrorNotifications from '../scripts/lib/ujs_error_notifications';\nimport setupFileUploadProgress from '../scripts/lib/file_upload_progress';\nimport setupColorPicker from '../scripts/lib/color_picker';\nimport setupVariableFormValueType from '../scripts/lib/variable_form_value_type';\nimport checkExport from '../scripts/lib/check_export';\nimport checkProjectCreation from '../scripts/lib/check_project_creation';\nimport showHide from '../scripts/lib/show_hide';\nimport setupIslandEditModes from '../scripts/lib/island_edit_modes';\nimport setupUpdateCheckboxes from '../scripts/lib/update_checkboxes';\nimport { setupScriptEditor } from '../scripts/lib/script_editor';\nimport setupConfirmOutOfFormNavigation from '../scripts/lib/confirm_out_of_form_navigation';\nimport setupCollapsibleField from '../scripts/lib/collapsible_field';\nimport { EVENT_WILL_INSERT } from '../scripts/lib/dom';\nimport setupUjsBusyTarget from '../scripts/lib/ujs_busy_target';\nimport setupExternalUrlOptions from '../scripts/lib/external_url_options';\nimport setupInternalLinkOptions from '../scripts/lib/internal_link_options';\nimport '../scripts/lib/stripe';\nimport '../scripts/lib/password_toggler';\nimport '../scripts/lib/check_duplication_state';\nimport '../scripts/lib/turbolinks_before_cache';\nimport '../scripts/lib/variant_behaviour_fields';\nimport setupConditionGroupsUI from '../scripts/lib/condition_group_sync_logical_operators';\nimport setupBehaviourActionsHandler from '../scripts/lib/variant_behaviour_actions_handler';\nimport setupConditionVariableTypesHandler from '../scripts/lib/condition_variable_types_handler';\nimport setupFileUploadValidation from '../scripts/lib/file_upload_validation';\nimport setupPlanVariants from '../scripts/lib/plan_variants';\nimport setupPlanVariantsSync from '../scripts/lib/plan_variants_sync';\nimport setupFileUploadOnModal from '../scripts/lib/file_upload_modal';\nimport setupProjectExportPage from '../scripts/lib/project_export_page';\nimport setupJsSelect2 from '../scripts/lib/js_select2';\nimport { projectTemplates } from '../scripts/lib/dashboard/project_templates';\n\ndocument.documentElement.classList.remove('no-js');\n// Skip first frame to ensure no animation happens on first render\nsetTimeout(() => {\n document.documentElement.classList.remove('no-transitions');\n}, 0);\n\nimport(/* webpackChunkName: \"vendor\" */ '../scripts/vendor')\n .then(function () {\n setupConfirmOutOfFormNavigation();\n setupCollapsibleField();\n setupRoleButton();\n setupUjsBusy();\n setupUjsBusyTarget();\n setupUjsFormErrors();\n setupWithJS();\n setupStudio();\n setupVideo();\n setupFormTabs();\n setupFormTabsLabels();\n setupCocoonLimit();\n setupChoicesAdvancedLogic();\n setupCocoonReorder();\n setupCocoonPosition();\n setupFileUploadOnChange();\n setupFileUploadProgress();\n setupFileUpload();\n setupFileUploadValidation();\n setupFileUploadOnModal();\n setupRovingTabindex();\n setupLoadModalContent();\n setupColorPicker();\n setupConditionGroupsUI();\n setupBehaviourActionsHandler();\n setupConditionVariableTypesHandler();\n setupVariableFormValueType();\n setupIslandEditModes();\n setupScriptEditor();\n setupUpdateCheckboxes();\n checkExport();\n checkProjectCreation();\n showHide();\n setupExternalUrlOptions();\n setupInternalLinkOptions();\n setupPlanVariants();\n setupPlanVariantsSync();\n setupProjectExportPage();\n projectTemplates();\n setupJsSelect2();\n // Set up last so that other modules can preventDefault\n // to implement custom rendering of errors\n setupUjsErrorNotifications();\n\n $(document).on(EVENT_WILL_INSERT, ({ detail }) => {\n $('[data-toggle=\"tooltip\"]', detail.html)\n .tooltip({\n trigger: 'click',\n })\n .on('shown.bs.tooltip', function () {\n const tooltip = $(this);\n setTimeout(() => {\n tooltip.tooltip('hide');\n }, 5000); // Hide the tooltip after 5 seconds\n });\n });\n\n return true;\n })\n .catch(() => {});\n\nrequire.context('../images', true);\nTurbolinks.start();\n","const SELECTOR = '.js-video';\nexport default function setupVideo() {\n const el = document.querySelector(SELECTOR);\n if (el && !el.hasAttribute('data-player-setup')) {\n el.setAttribute('data-player-setup', '');\n import(\n /* webpackMode: \"lazy\" */\n /* webpackChunkName: \"videoPlayer\" */\n './video'\n )\n .then(({ default: setupPlayer }) => {\n return setupPlayer(el);\n })\n .catch(e => {\n throw e;\n });\n }\n}\n","import { SELECTOR_CONTROL } from './plan_variants';\n\nconst SELECTOR = '.js-plan-variants-sync';\n\n/*\n * Synchronises selected plan variant between\n * monthly and annual tabs for easier comparison\n */\nexport default function setupPlanVariantsSync() {\n $(document).on(\n 'change',\n SELECTOR_CONTROL,\n unlessRunning(({ target }) => {\n const controls = $(target)\n .closest(SELECTOR)\n .find(SELECTOR_CONTROL);\n\n const selectedPlanLevel = selectedOption(target).dataset.planLevel;\n\n controls.each(function(index, element) {\n if (element !== target) {\n // No need to process the visible select\n const planIndex = [...element.options].findIndex(\n option => option.dataset.planLevel == selectedPlanLevel\n );\n element.selectedIndex = planIndex;\n element.dispatchEvent(new CustomEvent('change', { bubbles: true }));\n }\n });\n })\n );\n}\n\nfunction selectedOption(selectElement) {\n return selectElement.options[selectElement.selectedIndex];\n}\n\nfunction unlessRunning(fn) {\n let running;\n return (...args) => {\n try {\n if (!running) {\n running = true;\n return fn(...args);\n }\n } finally {\n running = false;\n }\n };\n}\n","/**\n * Helps focusing the actual form control when clicking the label\n * of the field\n * @module lib/collapsible_field\n */\n\nconst SELECTOR = '.js-collapsible-field';\nconst SELECTOR_INPUT = 'input,textarea,select';\n\nexport default function setupCollapsibleField() {\n $(document).on('shown.bs.collapse', SELECTOR, ({ target }) => {\n $(target)\n .find(SELECTOR_INPUT)\n .first()\n .focus();\n });\n}\n","/**\n * Adds the missing space key keyboard interactions for links\n * with `[role=\"button\"]`\n */\nexport default function setupRoleButton() {\n $(document).on('keydown', '[role=\"button\"]:not(button)', event => {\n if (!event.isDefaultPrevented()) {\n if (event.keyCode == 32) {\n event.preventDefault();\n event.currentTarget.click();\n }\n }\n });\n}\n","/**\n * Sets specific element to 'aria-busy' when a UJS request is happening\n */\n\nconst ATTR_BUSY_TARGET = 'data-remote-updates';\n\nexport default function setupUjsBusyTarget() {\n $(document).on('ajax:beforeSend', ({ target }) => {\n const $target = $(target);\n const selectors = $target.attr(ATTR_BUSY_TARGET);\n if (selectors) {\n const $elements = $(selectors);\n $elements.attr('aria-busy', true);\n $target.one('ajax:complete', () => {\n $elements.removeAttr('aria-busy');\n });\n }\n });\n}\n","/**\n * Toggles the options for external URLs when the value\n * gets selected in the linked field\n */\n\nconst SELECTOR = '.js-external-url-options';\nconst SELECTOR_SELECT = '.js-external-url-options__select';\nconst SELECTOR_OPTIONS = '.js-external-url-options__options';\n\nexport default function setupExternalUrlOptions() {\n document.addEventListener('change', ({ target }) => {\n const wrapper = target.closest(SELECTOR);\n // Not only do we need to check that we're inside the component\n // but also that it's the select that triggered the change\n if (wrapper && target.closest(SELECTOR_SELECT)) {\n const options = wrapper.querySelector(SELECTOR_OPTIONS);\n if (target.value === 'external_url') {\n $(options).collapse('show');\n } else {\n $(options).collapse('hide');\n }\n }\n });\n}\n","export function projectTemplates() {\n const links = document.querySelectorAll('.js-create-template');\n\n // Once the template link is clicked,\n // Hide all of the links and show the loader bar instead\n links.forEach((link) => {\n const showLoadersOnClick = () => {\n document.querySelector('.templates-wrapper').classList.toggle('d-none');\n document.querySelector('.template-loader').classList.toggle('d-none');\n };\n\n link.addEventListener('click', showLoadersOnClick);\n });\n}\n","/**\n * A generic error handler for displaying when UJS requests fail\n * The default rendering can be disabled by using `preventDefault`\n * on the `ajax:error` event\n */\n// TODO: Duplicate of the `ujs_form_errors` default behaviour probably\n\nimport { notify, ERROR } from './notifications';\n\nexport default function setupUjsErrorNotifications() {\n $(document).on('ajax:error', event => {\n // Allow skipping default event notification\n if (!event.isDefaultPrevented()) {\n notify('Sorry, an error occured', ERROR);\n }\n });\n}\n","/**\n * Light DOM manipulation functions that notify when an event is inserted\n * @module lib/dom\n */\n\nexport const EVENT_WILL_INSERT = 'dom:will-insert';\nexport const EVENT_DID_INSERT = 'dom:did-insert';\n\n/**\n * Replaces `oldNode` with `newNode`, emiting a bubbling `dom:will-insert`\n * event and a `dom:did-insert` event respectively before and after the\n * replacement happens\n * Signature matches the Node.replaceChild signature (https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild)\n * @param {*} newNode\n * @param {*} oldNode\n */\nexport function replace(newNode, oldNode) {\n const event = new CustomEvent(EVENT_WILL_INSERT, {\n bubbles: true,\n detail: { html: newNode }\n });\n oldNode.dispatchEvent(event);\n const result = $(oldNode).replaceWith(newNode);\n newNode.dispatchEvent(\n new CustomEvent(EVENT_DID_INSERT, {\n bubbles: true\n })\n );\n return result;\n}\n\n/**\n * Replaces the content of the `parent` node with the `newNode`,\n * emitting a `dom:will-insert` and `dom:did-insert` event\n * respectively before and after the replacement happens\n * @param {*} newNode\n * @param {*} parent\n */\nexport function replaceContent(newNode, parent) {\n const event = new CustomEvent(EVENT_WILL_INSERT, {\n bubbles: true,\n detail: { html: newNode }\n });\n parent.dispatchEvent(event);\n const result = $(parent)\n .empty()\n .append(newNode);\n newNode.dispatchEvent(\n new CustomEvent(EVENT_DID_INSERT, {\n bubbles: true\n })\n );\n return result;\n}\n","/**\n * Little helper to check if given element is matches or is within,\n * mainly used for doing event delegation\n * @param {*} selector\n * @param {*} el\n * @returns The closest matching elements\n */\nexport default function isWithin(selector, el) {\n return $(el).closest(selector)[0];\n}\n","/**\n * Controls the loading of the sidebar content through Rails UJS\n * and offers helpers for configuring the URL used for loading the content\n * as well as triggering loads programmatically.\n * @module lib/load_modal_content\n */\nimport isWithin from './is_within';\nimport { replaceContent, EVENT_DID_INSERT } from './dom';\nimport { addQueryParameter } from './url';\n\n/** Attribute storing the URL */\nexport const ATTR_CONTENT_URL = 'data-url';\n\n/** Class for showing the errors */\nconst CLASS_HAS_ERROR = 'wrp-modal-with-loading--has-error';\n/** Used to keep wheel from showing on certain contexts such as updading an island via the form. */\nconst CLASS_IS_HIDDEN = 'wrp-load-modal-content__hidden';\n\n/** Wrapper around the content itself, the loading overlay and the error message */\nconst SELECTOR = `.js-load-modal-content`;\n/** Element to replace with the loaded content */\nconst SELECTOR_CONTENT = '.js-load-modal-content__content';\n/** Element onto which to trigger the loading by setting `aria-busy=\"true\"` */\nconst SELECTOR_TRIGGER_LOADING = '.js-load-modal-content__trigger-loading';\n/** Element onto which to reset the scroll */\n// TODO: Move it in its own module\nconst SELECTOR_RESET_SCROLL = '.js-load-modal-content__reset-scroll';\n/** Element to use for checking if the script tab is active */\nconst SELECTOR_SCRIPT_TAB = '.js-load-modal-content__script-tab';\n\nexport default function setupLoadModalContent() {\n // Handle loading state when switching form tabs\n $(document).on('ajax:beforeSend', SELECTOR, ({ currentTarget, target }) => {\n // Only set the loader if the target is marked to trigger it\n if (currentTarget == target || isWithin(SELECTOR_TRIGGER_LOADING, target)) {\n currentTarget.setAttribute('aria-busy', 'true');\n }\n });\n\n $(document).on(\n 'ajax:success',\n SELECTOR,\n ({ currentTarget, target, detail }) => {\n if (currentTarget == target) {\n $(currentTarget).removeClass(CLASS_HAS_ERROR);\n const [response] = detail;\n const form = response.body.children[0];\n const parent = target.querySelector(SELECTOR_CONTENT);\n return replaceContent(form, parent);\n }\n }\n );\n\n $(document).on(\n 'ajax:error',\n SELECTOR,\n ({ currentTarget, target, detail }) => {\n const xhr = detail[2];\n if (!xhr._wasAborted) {\n if (\n currentTarget == target ||\n isWithin(SELECTOR_TRIGGER_LOADING, target)\n ) {\n $(currentTarget).addClass(CLASS_HAS_ERROR);\n }\n }\n }\n );\n\n $(document).on('ajax:complete', SELECTOR, ({ currentTarget, target }) => {\n if (currentTarget == target || isWithin(SELECTOR_TRIGGER_LOADING, target)) {\n currentTarget.removeAttribute('aria-busy');\n }\n });\n\n $(document).on(EVENT_DID_INSERT, SELECTOR, ({ currentTarget }) => {\n currentTarget.removeAttribute('aria-busy');\n // Looks like Firefox is anchoring the scroll when replacing elements\n // Unfortunately, the `overflow-anchor` CSS property doesn't seem\n // to have any effect here so we need to take the matter in our own hands\n resetScroll(currentTarget);\n });\n}\n\nexport function resetScroll(container = document) {\n $(container)\n .find(SELECTOR_RESET_SCROLL)\n .scrollTop(0);\n}\n\nexport function loadModalContent(modal, showLoadingModal) {\n $(modal).removeClass(CLASS_HAS_ERROR);\n showLoadingModal\n ? $(modal).removeClass(CLASS_IS_HIDDEN)\n : $(modal).addClass(CLASS_IS_HIDDEN);\n const event = new CustomEvent('trigger-data-remote', { bubbles: true });\n modal.dispatchEvent(event);\n}\n\nexport function configureContentUrl(modal, url) {\n if ($(SELECTOR_SCRIPT_TAB, modal).hasClass('active')) {\n url = addQueryParameter(url, 'edit_mode', 'script');\n }\n modal.setAttribute('data-url', url);\n}\n","/**\n * Helper for displaying notifications\n * @module lib/notifications\n */\nexport const SUCCESS = 'success';\nexport const ERROR = 'danger';\nexport const NOTIFICATION = 'notification';\n\nexport function notify(message, notificationType = SUCCESS) {\n $('.js-notifications').html(`\n
\n ${message}\n \n
\n `);\n}\n","const V3_URL = 'https://js.stripe.com/v3';\nlet stripe;\nlet displayError;\nlet successPath;\nlet submitButton;\nlet paymentMethodPath;\nlet name;\nlet country;\nlet couponCodeId;\nlet vat;\nlet plan_id;\nlet is_business;\nlet business_line1;\nlet business_line2;\nlet business_city;\nlet business_postcode;\nlet business_number;\nlet company_name;\nlet options = {\n style: {\n base: {\n iconColor: '#0074e6',\n color: '#444',\n fontWeight: 400,\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif',\n fontSize: '16px',\n fontSmoothing: 'antialiased',\n\n '::placeholder': {\n color: '#adb5bd',\n },\n },\n invalid: {\n iconColor: 'red',\n color: 'red',\n },\n },\n};\n\ndocument.addEventListener('turbolinks:load', function () {\n const form = document.querySelector('.js-stripe-form');\n\n form &&\n (async () => {\n const Stripe = await loadStripe();\n const publishableKey = document.querySelector(\n \"meta[name='stripe-publishable-key']\"\n ).content;\n stripe = Stripe(publishableKey);\n displayError = document.getElementById('card-errors');\n successPath = form.getAttribute('data-success-path');\n paymentMethodPath = form.getAttribute('action');\n submitButton = document.getElementById('card-submit');\n name = document.getElementById('card-name');\n country = document.getElementById('country');\n vat = document.getElementById('vat-number');\n plan_id = document.getElementById('plan-id');\n is_business = document.getElementById('is_business');\n business_number = document.getElementById('business_number');\n business_line1 = document.getElementById('business-address-line-1');\n business_line2 = document.getElementById('business-address-line-2');\n business_city = document.getElementById('business-address-city');\n business_postcode = document.getElementById('business-address-postcode');\n company_name = document.getElementById('company_name');\n const elements = stripe.elements();\n\n const card = elements.create('card', options);\n card.mount('#card-element');\n\n card.addEventListener('change', ({ error }) => {\n if (error) {\n displayError.textContent = error.message;\n } else {\n displayError.textContent = '';\n }\n });\n\n form.addEventListener('submit', async (event) => {\n event.preventDefault();\n submitButton.disabled = true;\n\n stripe\n .createPaymentMethod(paymentMethodParams(card))\n .then(stripePaymentMethodHandler)\n .catch(() => {\n displayError.textContent = 'An error occurred';\n submitButton.disabled = false;\n });\n });\n })();\n\n const couponForm = document.querySelector('.js-subscription-coupon-form');\n const couponSubmitButton = document.getElementById('js-coupon-submit-button');\n\n if (!couponForm) return;\n couponForm.addEventListener('submit', (event) => {\n event.preventDefault();\n const subscriptionCouponRedeemPath = couponForm.getAttribute('action');\n\n const couponId = document.getElementById(\n 'subscription_coupon_coupon_id'\n ).value;\n const subscriptionCouponRedeemFormPayload = {\n coupon_id: couponId,\n plan_id: document.getElementById('plan-id').value,\n };\n\n fetch(subscriptionCouponRedeemPath, {\n method: 'post',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\").content,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(subscriptionCouponRedeemFormPayload),\n credentials: 'same-origin',\n })\n .then(function (result) {\n if (result.ok) {\n return result.json();\n }\n throw new Error(result);\n })\n .then(function (response) {\n console.log('response', response);\n\n // show the discount row\n document\n .querySelector('.js-coupon-row-wrapper')\n .classList.remove('d-none');\n // show the coupon name\n document.querySelector('.js-coupon-code-display').innerHTML = couponId;\n\n // show the discounted amounts\n document.querySelector('.js-coupon-discount-amount').innerHTML =\n '-$' + (response.discount / 100).toFixed(2);\n document.querySelector('.js-total-payment-element').innerHTML =\n '$' + (response.discounted_total / 100).toFixed(2);\n\n // Show information\n document\n .querySelector('.js-coupon-payment-info')\n .classList.remove('d-none');\n // Hide coupon form\n couponForm.classList.add('d-none');\n\n // Set coupon id for payload later\n couponCodeId = couponId;\n\n return response;\n })\n .catch(() => {\n // Enable the button for a new check\n couponSubmitButton.disabled = false;\n\n // Display error message\n let errorMessageElement = document.querySelector('.js-coupon-error');\n errorMessageElement.innerHTML =\n 'Your coupon code is invalid. Please try again.';\n errorMessageElement.classList.remove('d-none');\n });\n });\n});\nfunction stripePaymentMethodHandler(result) {\n if (result.error) {\n displayError.textContent = result.error.message;\n submitButton.disabled = false;\n } else {\n fetch(paymentMethodPath, {\n method: 'post',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\").content,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(payload(result.paymentMethod.id)),\n credentials: 'same-origin',\n })\n .then(function (result) {\n return result.json();\n })\n .then(paymentMethodResponseHandler)\n .catch(() => {\n displayError.textContent = 'An error occurred';\n submitButton.disabled = false;\n });\n }\n}\n\nfunction paymentMethodResponseHandler(response) {\n if (response.success) {\n window.location.replace(successPath);\n } else if (response.requires_action) {\n stripe\n .confirmCardPayment(response.payment_intent_client_secret)\n .then(confirmCardPaymentHandler)\n .catch(() => {\n displayError.textContent = 'An error occurred';\n submitButton.disabled = false;\n });\n } else if (response.errors) {\n submitButton.disabled = false;\n renderErrors(response.errors);\n } else {\n submitButton.disabled = false;\n displayError.textContent = response.error_message;\n }\n}\n\nfunction confirmCardPaymentHandler(result) {\n if (result.error) {\n submitButton.disabled = false;\n displayError.textContent = result.error.message;\n } else {\n window.location.replace(successPath);\n }\n}\n\nfunction loadStripe() {\n if (window.Stripe) {\n return window.Stripe;\n }\n\n const script = document.querySelector(`script[src=\"${V3_URL}\"]`);\n\n return new Promise((resolve, reject) => {\n script.addEventListener('load', () => {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Failed to load Stripe.js'));\n }\n });\n\n script.addEventListener('error', () => {\n reject(new Error('Failed to load Stripe.js'));\n });\n });\n}\n\nfunction clearErrors() {\n displayError.textContent = '';\n document\n .querySelectorAll('.invalid-feedback')\n .forEach((el) => el.parentNode.removeChild(el));\n document\n .querySelectorAll('.is-invalid')\n .forEach((el) => el.classList.remove('is-invalid'));\n}\n\nfunction renderErrors(errors) {\n clearErrors();\n\n const attributes = Object.keys(errors);\n for (const attribute of attributes) {\n const element = document.querySelector(\n `[name='subscriptions_subscription_creator[${attribute}]']`\n );\n\n if (element) {\n const errorSpan = document.createElement('span');\n errorSpan.textContent = errors[attribute];\n errorSpan.classList.add('invalid-feedback');\n element.classList.add('is-invalid');\n element.insertAdjacentElement('afterend', errorSpan);\n }\n }\n}\n\nfunction paymentMethodParams(card) {\n var params = {\n type: 'card',\n card: card,\n billing_details: {\n name: name.value || undefined,\n },\n };\n\n if (country) {\n params['billing_details']['address'] = {\n country: country.value || undefined,\n };\n }\n\n if (vat) {\n params['metadata'] = { vat_number: vat.value || undefined };\n }\n\n return params;\n}\n\nfunction payload(paymentMethodId) {\n if (paymentMethodPath == '/subscriptions') {\n return {\n subscription: {\n payment_method_id: paymentMethodId,\n country: country.value,\n vat_number: vat.value,\n name: name.value,\n company_name: company_name.value,\n plan_id: plan_id.value,\n is_business: is_business.checked,\n business_number: business_number.value,\n business_address_line1: business_line1.value,\n business_address_line2: business_line2.value,\n business_address_city: business_city.value,\n business_address_postcode: business_postcode.value,\n coupon_code: couponCodeId,\n },\n };\n } else {\n return {\n payment_method: {\n payment_method_id: paymentMethodId,\n name: name.value,\n },\n };\n }\n}\n","const REMOVE_SELECTOR = '.js-turbolinks-remove-before-cache';\n\ndocument.addEventListener('turbolinks:before-cache', () => {\n document.querySelectorAll(REMOVE_SELECTOR).forEach(el => el.remove());\n});\n","export function addQueryParameter(url, name, value) {\n const joiningCharacter = url.indexOf('?') == -1 ? '?' : '&';\n const variantParam = `${name}=${value}`;\n return url + joiningCharacter + variantParam;\n}\n","import { configureContentUrl, loadModalContent } from '../../lib/load_modal_content';\n\nimport { SELECTOR_HIGHLIGHT_ISLAND, SELECTOR_HIGHLIGHTED_ISLAND, highlightView } from './highlightIsland';\n\nconst SELECTOR_TOGGLE = '.js-drawer__toggle';\nconst SELECTOR_OPEN = '.js-drawer__open';\nexport const SELECTOR_LOAD = '.js-drawer__load';\nexport const SELECTOR = '.js-drawer';\nconst SELECTOR_HIGHLIGHTED = '.wrp-highlighted';\n\n// Used to determine the state of the drawer.\n// Drawer loaded is currently used to leave toggle button highlighted in certain contexts.\nconst CLASS_OPEN = 'wrp-studio--open';\nconst CLASS_LOAD = 'wrp-studio--drawer-loaded';\n\n// Events to coordinate with the other parts of the code\nexport const EVENT_WILL_OPEN = 'drawer:will-open';\nexport const EVENT_WILL_CLOSE = 'drawer:will-close';\nexport const EVENT_DID_OPEN = 'drawer:did-open';\nexport const EVENT_DID_CLOSE = 'drawer:did-close';\nexport const EVENT_CANCEL_CLOSE = 'drawer:cancel-close';\n\nconst KEYCODE_ESCAPE = 27;\n\n/**\n * Controls the opening and closing of the drawer, either by:\n * - clicks on a toggle that will open/close according to the current state\n * - click on an \"open\" button (for ex. over each island)\n * - hitting the \"Escape\" key to close it\n */\nexport default function setupDrawer() {\n $(document).on('click', SELECTOR_TOGGLE, function (event) {\n if (!event.isDefaultPrevented()) {\n event.preventDefault();\n if ($(document.body).hasClass(CLASS_OPEN)) {\n closeDrawer();\n } else if ($(document.body).hasClass(CLASS_LOAD)) {\n openDrawer();\n } else {\n appendAlertToNotifications('Please select an island first to edit it, or Add Island.', 'alert-info');\n }\n }\n });\n\n $(document).on('click', SELECTOR_OPEN, function (event) {\n if (!event.isDefaultPrevented()) {\n event.preventDefault();\n\n if ($(document.body).hasClass(CLASS_OPEN)) {\n const close_confirmed = confirm('Are you sure? Unsaved changes will be lost.');\n close_confirmed ? openDrawer() : cancelClosingDrawer();\n } else {\n openDrawer();\n }\n }\n });\n\n // JointJS prevents clicks when a `touchend` event happens\n // so we need to hook on the `studio:cell:pointerclick` event\n // to trigger the drawer opening. However on devices where the `click`\n // is left alone, this would trigger the handler twice so we need\n // a little scheduling code to ensure the handler only runs once.\n // Thanks to events being synchronous, we can just set a flag to\n // check if it already happend during the current frame.\n let triggered;\n $(document).on('click studio:cell:pointerclick', SELECTOR_LOAD, function (event) {\n if (!triggered) {\n triggered = true;\n requestAnimationFrame(() => (triggered = false));\n\n if (!event.isDefaultPrevented() && !event.target.closest(SELECTOR_HIGHLIGHTED)) {\n event.preventDefault();\n populateDrawer({ toggle: event.currentTarget });\n }\n }\n });\n\n $(document).on('keydown', (event) => {\n if (event.keyCode == KEYCODE_ESCAPE) {\n closeDrawer();\n }\n });\n\n // When all islands become unselected an event will be issued closing the drawer and clearing selections.\n $(document).on('studio:unselect-all', '.paper-scroller-background', () => {\n closeDrawer();\n });\n\n /**\n * Function to append the Bootstrap alert to the notifications container\n * @param {string} message - The message to display in the alert\n * @param {string} alertType - The type of alert ('alert-success', 'alert-info', 'alert-danger', etc.)\n */\n function appendAlertToNotifications(message, alertType) {\n // Define the alert HTML\n const alertHtml = `\n
\n ${message}\n \n
\n `;\n\n // Append the alert to the notifications container\n $('.wrp-notifications__container.rythm-2.js-notifications').append(alertHtml);\n\n // Optionally, automatically dismiss the alert after 5 seconds\n setTimeout(() => {\n $('.wrp-notifications__container .alert').alert('close');\n }, 5000);\n }\n}\n\n/**\n * Opens form drawer and toggles the appropriate ARIA attributes\n * on the toggle.\n */\nexport function openDrawer() {\n const toggle = document.querySelector(SELECTOR_TOGGLE);\n const drawer = document.querySelector(SELECTOR);\n toggle.setAttribute('aria-expanded', 'true');\n $(document.body).addClass(CLASS_OPEN);\n const event = new CustomEvent(EVENT_DID_OPEN, { bubbles: true });\n drawer.dispatchEvent(event);\n}\n\n/**\n * Closes form drawer.\n */\nexport function closeDrawer() {\n const toggle = document.querySelector(SELECTOR_TOGGLE);\n const drawer = document.querySelector(SELECTOR);\n const event = new CustomEvent(EVENT_WILL_CLOSE, {\n bubbles: true,\n cancelable: true,\n });\n drawer.dispatchEvent(event);\n if (!event.defaultPrevented) {\n toggle.setAttribute('aria-expanded', 'false');\n $(document.body).removeClass(CLASS_OPEN);\n const event = new CustomEvent(EVENT_DID_CLOSE, { bubbles: true });\n drawer.dispatchEvent(event);\n }\n}\n\nexport function cancelClosingDrawer() {\n const drawer = document.querySelector(SELECTOR);\n true;\n const event = new CustomEvent(EVENT_CANCEL_CLOSE, {\n detail: true,\n bubbles: true,\n });\n drawer.dispatchEvent(event);\n}\n\n/**\n * Adds a class to the body of the studio markup to determine whether the drawer is populated.\n * Used to keep toggle button highlighted when the drawer is populated, even when closed.\n * @param {Boolean} remove Whether to remove or add the class.\n */\nconst updateDrawerLoadedClass = (remove = false) => {\n if (remove) {\n document.body.classList.remove(CLASS_LOAD);\n } else {\n document.body.classList.add(CLASS_LOAD);\n }\n};\n\n/**\n * Responsible for loading the contents of the drawer, requires url to populate form.\n * @param {HTMLElement} toggle Element interacted with which triggers further logic.\n * @param {HTMLElement} drawer Element of the drawer itself, required for content to injected to it.\n * @param {String} url Used to request form markup and data.\n * @param {Boolean} triggeredFromLink Used to define if the request was triggered from a link (e.g Add island)\n */\nexport function populateDrawer({\n toggle = document.querySelector(SELECTOR_TOGGLE),\n drawer = document.querySelector(SELECTOR),\n url = toggle.getAttribute('data-modal-content-url') || toggle.href,\n triggeredFromLink = false,\n withLoadingModal = true,\n} = {}) {\n const highligthSelectors = [SELECTOR_HIGHLIGHT_ISLAND.slice(1, SELECTOR_HIGHLIGHT_ISLAND.length), SELECTOR_HIGHLIGHTED_ISLAND.slice(1, SELECTOR_HIGHLIGHTED_ISLAND.length)];\n\n const isHighlighted = toggle.classList.contains(highligthSelectors[0]) && toggle.classList.contains(highligthSelectors[1]);\n const anyHighlighted = document.querySelectorAll(`${SELECTOR_HIGHLIGHTED_ISLAND}`).length;\n const isToggleButton = toggle.classList.contains(SELECTOR_TOGGLE.slice(1, SELECTOR_TOGGLE.length));\n\n // Clears the drawer loaded class if present.\n updateDrawerLoadedClass(true);\n\n // The following conditions were separated into their own if statements for readability.\n\n // Used to load form content for new island.\n if (!anyHighlighted && isToggleButton) {\n configureContentUrl(drawer, url);\n loadModalContent(drawer, withLoadingModal);\n updateDrawerLoadedClass();\n }\n\n // An island that is not highlighted will have its contents loaded.\n // Runs when an island is clicked.\n if (!isHighlighted && !isToggleButton) {\n configureContentUrl(drawer, url);\n loadModalContent(drawer, withLoadingModal);\n updateDrawerLoadedClass();\n }\n\n // An island that has been created from the navbar.\n if (triggeredFromLink && isToggleButton) {\n configureContentUrl(drawer, url);\n loadModalContent(drawer, withLoadingModal);\n updateDrawerLoadedClass();\n }\n}\n\n/**\n * Opens and selects starting island when a fresh project is created.\n * @param {Object} options.graph JointJS graph. Required to find number of islands in the project.\n * @param {Object} options.paper JointJS paper. Required to find island view for highlighting\n */\nexport function openDrawerOnNewProject({ paper, graph }) {\n // Search for search params to check drawer should be open.\n const urlParams = new URLSearchParams(window.location.search);\n const shouldDrawerOpen = urlParams.get('drawer') == 'open';\n const islands = graph.getElements();\n\n setTimeout(() => {\n // There should be a single island at the creation of the project.\n if (shouldDrawerOpen && islands.length === 1) {\n const onlyIsland = islands[0];\n const view = paper.findViewByModel(islands[0]);\n highlightView(view);\n // highlightArea.classList.add(highlightClass);\n\n openDrawer();\n\n populateDrawer({\n toggle: view.el,\n url: onlyIsland.attributes.links.edit,\n });\n }\n });\n}\n","const CLASS_HIGHLIGHTED = 'wrp-highlighted';\n\nexport const SELECTOR_HIGHLIGHT_ISLAND = '.js-highlight-island';\nexport const SELECTOR_HIGHLIGHTED_ISLAND = '.' + CLASS_HIGHLIGHTED;\n\nexport const EVENT_WILL_POPULATE = 'studio:unselect-all';\n\nconst HIGHLIGHT_OPTIONS = {\n highlighter: {\n name: 'addClass',\n options: {\n className: CLASS_HIGHLIGHTED\n }\n }\n};\n\nconst highlightedViews = [];\n\nexport default function setupHighlightIsland(paper) {\n // Bind to the CustomEvent so we detect properly\n // whether it was prevented or not and react accordingly\n // Handle \"regular\" clicks originating from keyboard interactions too\n $(document).on(\n 'click studio:cell:pointerclick',\n SELECTOR_HIGHLIGHT_ISLAND,\n handleCellPointerClick\n );\n // Tidy up as we are using some global listeners\n $(document).on('turbolinks:before-cache', teardown);\n\n paper.model.on('add', cell => {\n if (cell.isElement()) {\n // Skip a frame to let the clearing from the sidebar closing\n // happen\n setTimeout(() => {\n const view = paper.findViewByModel(cell);\n highlightView(view);\n }, 0);\n }\n });\n\n /**\n * Highlight views if event wasn't prevented\n * @param {CustomEvent} event\n */\n function handleCellPointerClick(event) {\n if (!event.defaultPrevented) {\n const view = paper.findView(event.target);\n highlightView(view);\n }\n }\n\n /**\n * Do a little cleanup of the global listerners\n * when the page gets torn down\n */\n function teardown() {\n $(document).off('turbolinks:before-cache', teardown);\n $(document).off('studio:cell:pointerclick', handleCellPointerClick);\n }\n}\n\n/**\n * An island will only be highlighted if user has confirmed it in the prompt.\n * This is tracked using window.confirmedDrawerClose which becomes undefined each time this function runs.\n */\nexport function highlightView(cellView) {\n $(document).on(\n 'drawer:cancel-close',\n '#studio-drawer',\n () => (window.confirmedDrawerClose = false)\n );\n const confirmed =\n typeof window.confirmedDrawerClose == 'undefined'\n ? true\n : window.confirmedDrawerClose;\n\n if (confirmed) {\n clearHighlightedViews();\n cellView.highlight(null, HIGHLIGHT_OPTIONS);\n highlightedViews.push(cellView);\n }\n\n window.confirmedDrawerClose = undefined;\n}\n\nexport function isHighlighted(view) {\n return view.el.classList.contains(CLASS_HIGHLIGHTED);\n}\n\nfunction clearHighlightedViews() {\n if (highlightedViews.length) {\n // Cleans up highlighted parent class in order to allow content to be loaded on a new island.\n const highlightedIslands = document.querySelectorAll(\n `${SELECTOR_HIGHLIGHT_ISLAND}${SELECTOR_HIGHLIGHTED_ISLAND}`\n );\n highlightedIslands.forEach(island => {\n island.classList.remove(\n SELECTOR_HIGHLIGHTED_ISLAND.slice(1, SELECTOR_HIGHLIGHTED_ISLAND.length)\n );\n });\n\n // Removes highlight of the cellView itself.\n highlightedViews.forEach(cellView =>\n cellView.unhighlight(null, HIGHLIGHT_OPTIONS)\n );\n highlightedViews.splice(0, -1);\n }\n}\n","const SELECTOR = '.js-iframe-modal';\nconst ATTR_URL = 'data-url';\n\nexport default function setupIframeModal() {\n $(document).on('show.bs.modal', SELECTOR, event => {\n // Grab the URL from the button that opened the iframe\n $('iframe', event.target).prop(\n 'src',\n event.relatedTarget.getAttribute(ATTR_URL)\n );\n });\n\n $(document).on('hide.bs.modal', SELECTOR, event => {\n // Clear the source of the modal to stop playback\n $('iframe', event.target).prop('src', '');\n });\n}\n","const SELECTOR = '.js-project-errors';\nconst SELECTOR_MESSAGES = '.js-project-errors__messages';\n\nexport default function setupProjectErrors() {\n // Handle the opending and closing of the error notification\n $(document).on('show.bs.collapse', SELECTOR, ({ currentTarget }) => {\n $(currentTarget).addClass('wrp-project-errors--expanded');\n });\n $(document).on('hide.bs.collapse', SELECTOR, ({ currentTarget }) => {\n $(currentTarget).removeClass('wrp-project-errors--expanded');\n });\n}\n\nexport function renderExportErrors(errorsHTML) {\n if (errorsHTML) {\n $(SELECTOR).removeClass('d-none');\n const $errorMessages = $(SELECTOR_MESSAGES);\n const $replacement = $(errorsHTML);\n if ($errorMessages.hasClass('show')) {\n $replacement.addClass('show');\n }\n $errorMessages.html($replacement);\n } else {\n $(SELECTOR).addClass('d-none');\n }\n}\n","// fountain-js 0.1.10\n// http://www.opensource.org/licenses/mit-license.php\n// Copyright (c) 2012 Matt Daly\n\n//hi\n\n;(function() {\n 'use strict';\n\n var regex = {\n title_page: /^((?:title|credit|author[s]?|source|notes|draft date|date|contact|copyright)\\:)/gim,\n\n scene_heading: /^((?:\\*{0,3}_?)?(?:(?:int|ext|est|i\\/e)[. ]).+)|^(?:\\.(?!\\.+))(.+)/i,\n scene_number: /( *#(.+)# *)/,\n\n transition: /^((?:FADE (?:TO BLACK|OUT)|CUT TO BLACK)\\.|.+ TO\\:)|^(?:> *)(.+)/,\n\n dialogue: /^([A-Z*_]+[0-9A-Z (._\\-')]*)(\\^?)?(?:\\n(?!\\n+))([\\s\\S]+)/,\n parenthetical: /^(\\(.+\\))$/,\n\n action: /^(.+)/g,\n centered: /^(?:> *)(.+)(?: *<)(\\n.+)*/g,\n\n section: /^(#+)(?: *)(.*)/,\n synopsis: /^(?:\\=(?!\\=+) *)(.*)/,\n\n note: /^(?:\\[{2}(?!\\[+))(.+)(?:\\]{2}(?!\\[+))$/,\n note_inline: /(?:\\[{2}(?!\\[+))([\\s\\S]+?)(?:\\]{2}(?!\\[+))/g,\n boneyard: /(^\\/\\*|^\\*\\/)$/g,\n\n page_break: /^\\={3,}$/,\n line_break: /^ {2}$/,\n\n\n emphasis: /(_|\\*{1,3}|_\\*{1,3}|\\*{1,3}_)(.+)(_|\\*{1,3}|_\\*{1,3}|\\*{1,3}_)/g,\n bold_italic_underline: /(_{1}\\*{3}(?=.+\\*{3}_{1})|\\*{3}_{1}(?=.+_{1}\\*{3}))(.+?)(\\*{3}_{1}|_{1}\\*{3})/g,\n bold_underline: /(_{1}\\*{2}(?=.+\\*{2}_{1})|\\*{2}_{1}(?=.+_{1}\\*{2}))(.+?)(\\*{2}_{1}|_{1}\\*{2})/g,\n italic_underline: /(?:_{1}\\*{1}(?=.+\\*{1}_{1})|\\*{1}_{1}(?=.+_{1}\\*{1}))(.+?)(\\*{1}_{1}|_{1}\\*{1})/g,\n bold_italic: /(\\*{3}(?=.+\\*{3}))(.+?)(\\*{3})/g,\n bold: /(\\*{2}(?=.+\\*{2}))(.+?)(\\*{2})/g,\n italic: /(\\*{1}(?=.+\\*{1}))(.+?)(\\*{1})/g,\n underline: /(_{1}(?=.+_{1}))(.+?)(_{1})/g,\n\n splitter: /\\n{2,}/g,\n cleaner: /^\\n+|\\n+$/,\n standardizer: /\\r\\n|\\r/g,\n whitespacer: /^\\t+|^ {3,}/gm\n };\n\n var lexer = function (script) {\n return script.replace(regex.boneyard, '\\n$1\\n')\n .replace(regex.standardizer, '\\n')\n .replace(regex.cleaner, '')\n .replace(regex.whitespacer, '');\n };\n\n var tokenize = function (script) {\n var src = lexer(script).split(regex.splitter)\n , i = src.length, line, match, parts, text, meta, x, xlen, dual\n , tokens = [];\n\n while (i--) {\n line = src[i];\n\n // title page\n if (regex.title_page.test(line)) {\n match = line.replace(regex.title_page, '\\n$1').split(regex.splitter).reverse();\n for (x = 0, xlen = match.length; x < xlen; x++) {\n parts = match[x].replace(regex.cleaner, '').split(/\\:\\n*/);\n tokens.push({ type: parts[0].trim().toLowerCase().replace(' ', '_'), text: parts[1].trim() });\n }\n continue;\n }\n\n // scene headings\n if (match = line.match(regex.scene_heading)) {\n text = match[1] || match[2];\n\n if (text.indexOf(' ') !== text.length - 2) {\n if (meta = text.match(regex.scene_number)) {\n meta = meta[2];\n text = text.replace(regex.scene_number, '');\n }\n tokens.push({ type: 'scene_heading', text: text, scene_number: meta || undefined });\n }\n continue;\n }\n\n // centered\n if (match = line.match(regex.centered)) {\n tokens.push({ type: 'centered', text: match[0].replace(/>| 0) {\n tokens.push({ type: regex.parenthetical.test(text) ? 'parenthetical' : 'dialogue', text: text });\n }\n }\n\n tokens.push({ type: 'character', text: match[1].trim() });\n tokens.push({ type: 'dialogue_begin', dual: match[2] ? 'right' : dual ? 'left' : undefined });\n\n if (dual) {\n tokens.push({ type: 'dual_dialogue_begin' });\n }\n\n dual = match[2] ? true : false;\n continue;\n }\n }\n\n // section\n if (match = line.match(regex.section)) {\n tokens.push({ type: 'section', text: match[2], depth: match[1].length });\n continue;\n }\n\n // synopsis\n if (match = line.match(regex.synopsis)) {\n tokens.push({ type: 'synopsis', text: match[1] });\n continue;\n }\n\n // notes\n if (match = line.match(regex.note)) {\n tokens.push({ type: 'note', text: match[1]});\n continue;\n }\n\n // boneyard\n if (match = line.match(regex.boneyard)) {\n tokens.push({ type: match[0][0] === '/' ? 'boneyard_begin' : 'boneyard_end' });\n continue;\n }\n\n // page breaks\n if (regex.page_break.test(line)) {\n tokens.push({ type: 'page_break' });\n continue;\n }\n\n // line breaks\n if (regex.line_break.test(line)) {\n tokens.push({ type: 'line_break' });\n continue;\n }\n\n tokens.push({ type: 'action', text: line });\n }\n\n return tokens;\n };\n\n var inline = {\n note: '',\n\n line_break: '
',\n\n bold_italic_underline: '$2',\n bold_underline: '$2',\n italic_underline: '$2',\n bold_italic: '$2',\n bold: '$2',\n italic: '$2',\n underline: '$2'\n };\n\n inline.lexer = function (s) {\n if (!s) {\n return;\n }\n\n var styles = [ 'underline', 'italic', 'bold', 'bold_italic', 'italic_underline', 'bold_underline', 'bold_italic_underline' ]\n , i = styles.length, style, match;\n\n s = s.replace(regex.note_inline, inline.note).replace(/\\\\\\*/g, '[star]').replace(/\\\\_/g, '[underline]').replace(/\\n/g, inline.line_break);\n\n // if (regex.emphasis.test(s)) { // this was causing only every other occurence of an emphasis syntax to be parsed\n while (i--) {\n style = styles[i];\n match = regex[style];\n\n if (match.test(s)) {\n s = s.replace(match, inline[style]);\n }\n }\n // }\n\n return s.replace(/\\[star\\]/g, '*').replace(/\\[underline\\]/g, '_').trim();\n };\n\n var parse = function (script, toks, callback) {\n if (callback === undefined && typeof toks === 'function') {\n callback = toks;\n toks = undefined;\n }\n\n var tokens = tokenize(script)\n , i = tokens.length, token\n , title, title_page = [], html = [], output;\n\n while (i--) {\n token = tokens[i];\n token.text = inline.lexer(token.text);\n\n switch (token.type) {\n case 'title': title_page.push('

' + token.text + '

'); title = token.text.replace('
', ' ').replace(/<(?:.|\\n)*?>/g, ''); break;\n case 'credit': title_page.push('

' + token.text + '

'); break;\n case 'author': title_page.push('

' + token.text + '

'); break;\n case 'authors': title_page.push('

' + token.text + '

'); break;\n case 'source': title_page.push('

' + token.text + '

'); break;\n case 'notes': title_page.push('

' + token.text + '

'); break;\n case 'draft_date': title_page.push('

' + token.text + '

'); break;\n case 'date': title_page.push('

' + token.text + '

'); break;\n case 'contact': title_page.push('

' + token.text + '

'); break;\n case 'copyright': title_page.push('

' + token.text + '

'); break;\n\n case 'scene_heading': html.push('' : '>') + token.text + ''); break;\n case 'transition': html.push('

' + token.text + '

'); break;\n\n case 'dual_dialogue_begin': html.push('
'); break;\n case 'dialogue_begin': html.push('
'); break;\n case 'character': html.push('

' + token.text + '

'); break;\n case 'parenthetical': html.push('

' + token.text + '

'); break;\n case 'dialogue': html.push('

' + token.text + '

'); break;\n case 'dialogue_end': html.push('
'); break;\n case 'dual_dialogue_end': html.push('
'); break;\n\n case 'section': html.push('

' + token.text + '

'); break;\n case 'synopsis': html.push('

' + token.text + '

'); break;\n\n case 'note': html.push(''); break;\n case 'boneyard_begin': html.push(''); break;\n\n case 'action': html.push('

' + token.text + '

'); break;\n case 'centered': html.push('

' + token.text + '

'); break;\n\n case 'page_break': html.push('
'); break;\n case 'line_break': html.push('
'); break;\n }\n }\n\n output = { title: title, html: { title_page: title_page.join(''), script: html.join('') }, tokens: toks ? tokens.reverse() : undefined };\n\n if (typeof callback === 'function') {\n return callback(output);\n }\n\n return output;\n };\n\n var fountain = function (script, callback) {\n return fountain.parse(script, callback);\n };\n\n fountain.parse = function (script, tokens, callback) {\n return parse(script, tokens, callback);\n };\n\n if (typeof module !== 'undefined') {\n module.exports = fountain;\n } else {\n this.fountain = fountain;\n }\n}).call(this);\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","SELECTOR","toggleLocationField","target","selectedPromptStyle","requiresSubstyle","defaultSubstyle","enabledLocationField","promptStyleInput","document","querySelectorAll","forEach","input","selectedStyle","dataset","promptStyle","value","locationWrapper","closest","includes","classList","add","toggle","disabled","enableLocationFieldForSelectedStyle","selectedOption","JSON","parse","_toConsumableArray","select","requiredSubstyles","Array","isArray","option","isAvailable","remove","updateVisibleOptions","contains","selectedIndex","options","indexOf","find","selectOption","querySelector","SELECTOR_ACTIVE_VARIANT_TAB","setupChoicePropertyFieldsAndDetails","$","on","activeVariantTabIndex","choiceHeightInputs","choiceWidthInputs","customButtonPositionsLink","console","log","index","concat","addEventListener","event","trim","isValid","test","validateTimeFormat","preventDefault","variantIndex","this","data","formIndex","parentContainer","rowIndex","length","newRow","append","SELECTOR_FIELD","SELECTOR_THUMBNAIL","SELECTOR_REMOVE_FIELD","SELECTOR_FILENAME","SELECTOR_DISABLE","ADOBE_FILE_UPLOAD","LOCAL_FILE_UPLOAD","IMAGE_UPLOAD","CLASS_EMPTY","CLASS_WITH_SELECTION","CLASS_IS_REMOVING","DATA_THUMBNAIL_SRC","updateSelectorClasses","selector","classListRemove","classListAdd","_element$classList","_element$classList2","element","apply","setupFileUpload","_ref","currentTarget","isWithin","selectFile","cancelUpload","checked","trigger","_ref2","removeInputElement","toggleClass","fileInputElement","fileUploadContainer","img","filename","removeClass","addClass","imgElement","reader","FileReader","onload","dataURL","result","src","readAsDataURL","files","renderThumbnail","attr","text","name","cancelFileRemoval","getAttribute","prop","isEmpty","removeAttr","handleFileChange","click","_regeneratorRuntime","t","r","prototype","n","hasOwnProperty","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","then","callInvokeWithMethodAndArg","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","_next","_throw","setUpExpressEmbed","script","createElement","_callee2","ccEverywhere","setUpDrawer","setUpAdobe","_context2","window","CCEverywhere","initialize","clientId","appName","mediaType","adobeProjectId","fileInput","fileContainer","allowedFileTypes","outputType","_fetchVideo","_callee","url","videoFileReader","blob","_context","fetch","readAsArrayBuffer","getActiveVariantTabId","activeElement","splitDataTarget","split","getAssetName","variantIndexId","fallbackName","variantNameInput","storyIslandName","textContent","variantName","islandLabel","observer","MutationObserver","observe","body","childList","subtree","attributes","disconnect","createDesignCallback","onCancel","onPublish","publishParams","localData","project","projectId","asset","fileName","getElementById","fileUploadUrl","arrayBuffer","videoFileInput","videoFileContainer","DataTransfer","videoFile","File","Uint8Array","lastModified","Date","getTime","items","changeEvent","Event","bubbles","dispatchEvent","_x","_x2","fetchVideo","imageDataArray","mimeType","match","binaryString","atob","lengthOfBinary","encodedArray","imageFileExtension","charCodeAt","imageFile","onError","err","error","toString","adobeParams","callbacks","modalParams","borderRadius","padding","backgroundColor","inputParams","templateType","editorPanelView","canvasSize","height","width","unit","exportOptions","label","closeTargetOnExport","variant","optionType","buttonType","outputParams","editDesign","createDesign","appendChild","setupStudio","xhr","dropdown","el","hasAttribute","setAttribute","wrpIslands","teardown","setupIslandEditor","setupProjectErrors","setupDrawer","originalEvent","_wasAborted","abort","detail","setupIframeModal","showElement","hideElements","_e$target","videoContainer","imageContainer","embedContainer","selectedMediaType","video","show","hide","image","embed","SELECTOR_ALL_TABPANELS","SELECTOR_CHOICES_TABLABEL","SELECTOR_CHOICES_TABPANEL","SELECTOR_ADD_CHOICE","SELECTOR_NUMBER","ATTR_TAB_INDEX","SELECTOR_TAB","setupFormTabs","tabpanel","_slicedToArray","getTypeFrom","hasClass","firstPanel","children","last","addChoiceBtn","targetTabPanel","each","mediaElementsContainerIds","_$$find$","mediaElementLabels","_$$find","mediaElementInputs","_$$find2","getVariantIndexForChoice","addIds","tabpanelContainer","reduce","max","tabpanelEl","currentIndex","parseInt","info","Infinity","getNextTabIndex","$tabList","tab","$tablist","getVariantIndex","newTab","cloneNode","SELECTOR_INSERT_BEFORE","firstLabel","before","variantIndexForChoice","addTabForPanel","updateNumbering","_ref3","visibleTab","previousElementSibling","nextElementSibling","removeTabForPanel","parent","ACTIONS","injectText","parentNode","replaceChild","createTextNode","innerText","className","addAttribute","_attributes$split2","attributeName","attributeValue","removeAttribute","attribute","prepareElement","from","filter","_c$replace$split2","replace","actionName","param","action","withJS","undefined","SELECTOR_CHOICE_TABPANEL","SELECTOR_CHOICE_TAB_LABEL_SOURCE","EMPTY_LABEL","setTabLabel","nameInput","getTabFor","ATTR_COUNT","ATTR_MAX","ATTR_MIN","CLASS_NO_ADD","CLASS_NO_DELETE","updateTabCount","amount","$widget","currentCount","newCount","ADD_BEHAVIOURS_BTN_CLASSNAME","setupChoicesAdvancedLogic","wrapper","addBehaviourLink","linkText","html","updateAddBehaviourCopytext","choiceTabSelector","moveElseIfBtn","listenLinkToChanges","EVENT_WILL_INSERT","_ref4","$blocksWrapper","$btn","detach","after","choiceTab","$choiceTab","$select","$collapsibleConditionBlocks","$ifContent","$unlessContent","css","CLASS_DELETED","SELECTOR_FIELDS","SELECTOR_POSITION_FIELD","setupCocoonPosition","updatePositions","field","fieldsWrapper","CustomEvent","shiftFields","nestedField","offset","shift","parentElement","moveTab","fields","fieldPosition","fieldAtNewPosition","insertAdjacentElement","SELECTOR_TARGET","SELECTOR_ACTIVE","KEYCODE","LEFT","RIGHT","onFocusOut","one","activate","focus","onKeyDown","container","item","keyCode","array","focusPreviousItem","onClick","_ref5$focus","btn","tabIndex","SELECTOR_HIDDEN_FIELD","EVENT_START","EVENT_SUCCESS","EVENT_PROGRESS","EVENT_UPLOADED","EVENT_ERROR","findAttachmentField","CLASS_BUSY","SELECTOR_ERRORS","setupUjsFormErrors","_event$detail","response","status","HTMLFormElement","errors","renderHTMLError","errorContainer","flash","notify","ERROR","notification","NOTIFICATION","renderOtherErrors","SELECTOR_PROGRESS","SELECTOR_STATUS","SELECTOR_CANCEL","CLASS_UPLOADING","CLASS_HAS_ERRORS","setupFileUploadProgress","$fileUploader","$input","val","removeError","startUpload","progressPercent","updateProgress","message","renderError","_unused","handleError","SELECTOR_LABEL","ATTR_DEFAULT_COLOR","setup","placeholder","insertBefore","pickr","Pickr","theme","color","components","preview","palette","hue","opacity","interaction","save","cancel","clear","comparison","swatches","closeOnScroll","adjustableNumbers","default","position","strings","setColor","getRoot","app","instance","button","style","toHEXA","clearButton","inputGroup","childNodes","key","applyColor","adjustPickerUI","setupVariableFormValueType","variableType","$badge","toggleListsHint","$target","$booleanWrapper","$nonBooleanWrapper","hideEl","showEl","toggleBoolSelect","$wrapper","PATH_ATTRIBUTE","runShowHide","targets","showHide","attached","SELECTOR_SOURCE","setupIslandEditModes","source","is","existing","updated","ATTR_ISLAND_LABEL","editor","SimpleMDE","spellChecker","toolbar","parsingConfig","highlightFormatting","__editor","codemirror","optionName","getOption","summary","tabPanel","gui","appendTo","setupFullscreenTitle","markdown","title","fountain","output","title_page","SELECTOR_FORM","SELECTOR_SELECT","previousSibling","interval","setInterval","Rails","checkDuplicationUrl","dataType","success","state","clearInterval","Turbolinks","location","insertAdjacentHTML","addIndex","toggleTimePickers","timePickers","$insertedItem","form","toggleables","valueInputDiv","inputSelector","setupConditionGroupsUI","parents","conditionEl","currentOperator","first","applyCurrentOperatorToNewCondition","GenericProjectVariableWithinForm","$nonBoolValueInput","$boolValueInput","varValueTypeWillBe","valueType","handleValueType_boolean","useNonBoolInputs","handleValueType_number","handleValueType_text","enableInputsFor","disableInputsFor","$el","DEFAULT_SELECT2_OPTS","setupSelect2Automatically","select2","setupBehaviourActionsHandler","BehaviourWrapper","wrapperEl","$toByText","$actionSelect","$variablesSelect","currentAction","behaviourValueInput","BehaviourValueInput","listenForEvents","initializeInputType","updateToByText","$textValueInputWrapper","$valueInputsWrapper","$targetVarWrapper","genericVarForm","self","applySelect2","toggleTargetVariableWrapper","valueInputTypeWillBe","params","value_type","currentVars","disableTargetVarSelect","hideValueInputForToggle","typeWillBe","shouldDestroySelect2","varsCollections","select2Data","all_variables","initializeSelect2","boolean_variables","number_variables","select2Opts","_objectSpread","maximumSelectionLength","handleType_number","setValueInputType","handleType_list","handleType_text","handleType_boolean","CONDITION_NESTED_FIELDS_CLASSNAME1","setupConditionVariableTypesHandler","ConditionWrapper","nestedConditionFields","variableWrapperSelector","varsCollection","$operatorWrapper","$variableSelect","genericVariableTypeForm","setVariableListener","selectedVar","varData","handleEnabledOperatorsFor","handleInputValueTypeFor","disabledOperators","SELECTOR_ERROR_BOUNDARY","SELECTOR_ERROR_MESSAGE","SELECTOR_ADD_DESCRIPTION","ERROR_POSITION","MAX_SIZE","setupFileUploadValidation","boundary","errorMessage","removeChild","removeDOMToken","errorId","clearError","validationMessage","prependDOMToken","file","size","setCustomValidity","reportValidity","stopPropagation","token","Boolean","join","SELECTOR_CONTROL","setupFileUploadOnModal","browseFileSelector","wrapperSelector","modal","uploadFileWrapper","preventDefaults","highlight","unhighlight","eventName","dataTransfer","browseBtn","filesSelected","modalSelector","modalWrapper","disableExportBtn","documentElement","setTimeout","fn","running","flagName","alreadyAskedDuringInteraction","prevent","formHasChanges","maybePreventAction","confirm","stopImmediatePropagation","setupConfirmOutOfFormNavigation","isDefaultPrevented","selectors","$elements","setupWithJS","setupPlayer","elementTargetType","targetType","question","FormData","ajax","ajaxSettings","upload","lengthComputable","loaded","total","processData","contentType","$attachmentField","video_uuid","setupLoadModalContent","pickrs","destroyAndRemove","setupColorPicker","refresh","limitDefaultChoices","_this","ind","off","setupUpdateCheckboxes","setUpExportCheck","get","notifyExportIsAvailable","setUpProjectCreationCheck","completed","innerHTML","checkProjectCreation","collapse","some","panel","variantId","selectElement","controls","selectedPlanLevel","planLevel","planIndex","findIndex","localStorage","getItem","setItem","removeItem","link","tooltip","require","EVENT_DID_INSERT","newNode","oldNode","replaceWith","replaceContent","empty","CLASS_HAS_ERROR","CLASS_IS_HIDDEN","SELECTOR_CONTENT","SELECTOR_TRIGGER_LOADING","SELECTOR_RESET_SCROLL","SELECTOR_SCRIPT_TAB","_ref5","resetScroll","scrollTop","loadModalContent","showLoadingModal","configureContentUrl","addQueryParameter","SUCCESS","notificationType","stripe","displayError","successPath","submitButton","paymentMethodPath","country","couponCodeId","vat","plan_id","is_business","business_line1","business_line2","business_city","business_postcode","business_number","company_name","base","iconColor","fontWeight","fontFamily","fontSize","fontSmoothing","invalid","stripePaymentMethodHandler","headers","content","Accept","stringify","payload","paymentMethod","credentials","json","paymentMethodResponseHandler","requires_action","confirmCardPayment","payment_intent_client_secret","confirmCardPaymentHandler","_i","_attributes","errorSpan","renderErrors","error_message","loadStripe","Stripe","reject","paymentMethodParams","card","billing_details","vat_number","paymentMethodId","subscription","payment_method_id","business_address_line1","business_address_line2","business_address_city","business_address_postcode","coupon_code","payment_method","publishableKey","elements","mount","createPaymentMethod","couponForm","couponSubmitButton","subscriptionCouponRedeemPath","couponId","subscriptionCouponRedeemFormPayload","coupon_id","ok","discount","toFixed","discounted_total","errorMessageElement","joiningCharacter","SELECTOR_TOGGLE","SELECTOR_OPEN","SELECTOR_LOAD","SELECTOR_HIGHLIGHTED","CLASS_OPEN","CLASS_LOAD","EVENT_WILL_CLOSE","EVENT_DID_OPEN","EVENT_DID_CLOSE","EVENT_CANCEL_CLOSE","KEYCODE_ESCAPE","triggered","alertHtml","closeDrawer","openDrawer","alert","drawer","cancelClosingDrawer","requestAnimationFrame","populateDrawer","cancelable","defaultPrevented","updateDrawerLoadedClass","_ref$toggle","_ref$drawer","_ref$url","href","_ref$triggeredFromLin","triggeredFromLink","_ref$withLoadingModal","withLoadingModal","highligthSelectors","SELECTOR_HIGHLIGHT_ISLAND","SELECTOR_HIGHLIGHTED_ISLAND","isHighlighted","anyHighlighted","isToggleButton","openDrawerOnNewProject","paper","graph","shouldDrawerOpen","URLSearchParams","search","islands","getElements","onlyIsland","view","findViewByModel","highlightView","links","edit","CLASS_HIGHLIGHTED","HIGHLIGHT_OPTIONS","highlighter","highlightedViews","setupHighlightIsland","handleCellPointerClick","findView","model","cell","isElement","cellView","confirmedDrawerClose","island","splice","clearHighlightedViews","ATTR_URL","relatedTarget","SELECTOR_MESSAGES","renderExportErrors","errorsHTML","$errorMessages","$replacement","regex","scene_heading","scene_number","transition","dialogue","parenthetical","centered","section","synopsis","note","note_inline","boneyard","page_break","line_break","emphasis","bold_italic_underline","bold_underline","italic_underline","bold_italic","bold","italic","underline","splitter","cleaner","standardizer","whitespacer","tokenize","line","parts","meta","x","xlen","dual","lexer","tokens","toLowerCase","depth","inline","styles","callback","toks"],"sourceRoot":""}