bullet_train-fields 1.0.8 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/fields.esm.js +2 -0
- data/app/assets/javascripts/fields.esm.js.map +1 -0
- data/app/assets/javascripts/fields.js +2 -0
- data/app/assets/javascripts/fields.js.map +1 -0
- data/app/assets/javascripts/fields.modern.js +2 -0
- data/app/assets/javascripts/fields.modern.js.map +1 -0
- data/app/assets/javascripts/fields.umd.js +2 -0
- data/app/assets/javascripts/fields.umd.js.map +1 -0
- data/app/assets/javascripts/intl-tel-input-utils.js +502 -0
- data/app/javascript/controllers/fields/password_controller.js +2 -2
- data/lib/bullet_train/fields/version.rb +1 -1
- metadata +11 -2
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"fields.umd.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/fields/button_toggle_controller.js","../../javascript/controllers/fields/cloudinary_image_controller.js","../../javascript/controllers/fields/color_picker_controller.js","../../javascript/controllers/fields/date_controller.js","../../javascript/controllers/fields/file_field_controller.js","../../javascript/controllers/fields/password_controller.js","../../javascript/controllers/fields/phone_controller.js","../../javascript/controllers/fields/super_select_controller.js","../../javascript/controllers/index.js","../../javascript/trix_editor.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"shadowField\" ]\n\n clickShadowField(event) {\n // we have to stop safari from doing what we originally expected.\n event.preventDefault();\n\n // then we need to manually click the hidden checkbox or radio button ourselves.\n this.shadowFieldTarget.click()\n }\n}","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"uploadButton\", \"hiddenField\", \"thumbnail\" ]\n static values = { \n signaturesUrl: String,\n height: Number,\n width: Number,\n cloudName: String,\n apiKey: String,\n googleApiKey: String,\n urlFormat: String,\n sources: String,\n searchByRights: Boolean\n }\n static classes = [ \"thumbnailShown\" ]\n\n pickImageAndUpload(event) {\n // don't submit the form.\n event.preventDefault()\n\n // prepare the list of default sources a user can upload an image from.\n var defaultSources = ['local', 'url', 'camera']\n if (this.hasGoogleApiKeyValue) {\n defaultSources.push('image_search')\n }\n\n // configure cloudinary's uploader's options.\n // many of these are configurable at the point where the `shared/fields/cloudinary_image` partial is included.\n var options = {\n cloud_name: this.cloudNameValue,\n apiKey: this.apiKeyValue,\n upload_preset: this.uploadPresetValue,\n upload_signature: this.getCloudinarySignature.bind(this),\n multiple: false,\n sources: this.hasSourcesValue ? this.sourcesValue.split(',') : defaultSources,\n search_by_rights: this.hasSearchByRightsValue && this.searchByRightsValue === false ? false : true // default to true.\n }\n \n if (this.hasGoogleApiKeyValue) {\n options['google_api_key'] = this.googleApiKeyValue\n }\n \n // open cloudinary's upload widget.\n cloudinary.openUploadWidget(options, this.handleWidgetResponse.bind(this))\n }\n \n clearImage(event) {\n // don't submit the form.\n event.preventDefault()\n\n // clear the cloudinary id.\n this.hiddenFieldTarget.value = null\n \n // remove any existing image from the button.\n this.removeThumbnail()\n }\n \n getCloudinarySignature(callback, paramsToSign) {\n $.ajax({\n url: this.signaturesUrlValue,\n type: \"GET\",\n dataType: \"text\",\n data: {data: paramsToSign},\n complete: function() { console.log(\"complete\") },\n success: function(signature, textStatus, xhr) { callback(signature) },\n error: function(xhr, status, error) { console.log(xhr, status, error) }\n })\n }\n \n handleWidgetResponse(error, response) {\n // after the user has successfully uploaded a single file ..\n if (!error && response && response.event === \"success\") { \n const data = response.info\n \n // update the cloudinary id field in the form.\n this.hiddenFieldTarget.value = data.public_id\n\n // remove any existing image.\n this.removeThumbnail()\n\n // generate a new image preview url.\n this.addThumbnail(this.urlFormatValue.replace('CLOUDINARY_ID', data.public_id))\n }\n }\n \n addThumbnail(url) {\n var $imageElement = $(`<img src=\"${url}\" width=\"${this.widthValue}\" height=\"${this.heightValue}\" data-${this.identifier}-target=\"thumbnail\" />`)\n $(this.uploadButtonTarget).prepend($imageElement)\n\n // mark the image as present.\n this.uploadButtonTarget.classList.add(this.thumbnailShownClass)\n }\n \n removeThumbnail() {\n if (!this.hasThumbnailTarget) { return }\n this.uploadButtonTarget.removeChild(this.thumbnailTarget)\n this.uploadButtonTarget.classList.remove(this.thumbnailShownClass)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport '@simonwep/pickr/dist/themes/monolith.min.css'\n\nimport Pickr from '@simonwep/pickr';\n\nexport default class extends Controller {\n static targets = [ \"colorPickerValue\", \"colorField\", \"colorInput\", \"userSelectedColor\", \"colorOptions\" ];\n static values = { initialColor: String }\n\n connect() {\n this.initPluginInstance()\n this.colorOptions = $(this.colorOptionsTarget).find('button').map(function (_, button) { return $(button).attr('data-color'); }).get()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n pickColor(event) {\n event.preventDefault();\n\n const targetEl = event.target;\n const color = targetEl.dataset.color;\n\n $(this.colorInputTarget).val(color);\n $(this.colorPickerValueTarget).val(color);\n $(this.userSelectedColorTarget).data('color', color);\n $('.button-color').removeClass('ring-2 ring-offset-2');\n\n this.pickr.setColor(color);\n\n targetEl.classList.add('ring-2', 'ring-offset-2');\n }\n\n pickRandomColor(event) {\n event.preventDefault();\n\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n\n this.pickr.setColor(`rgb ${r} ${g} ${b}`);\n const hexColor = this.pickr.getColor().toHEXA().toString();\n this.pickr.setColor(hexColor);\n\n this.showUserSelectedColor(hexColor);\n }\n\n showUserSelectedColor(color) {\n $(this.colorInputTarget).val(color);\n $(this.colorPickerValueTarget).val(color);\n\n $('.button-color').removeClass('ring-2 ring-offset-2');\n\n $(this.userSelectedColorTarget)\n .addClass('ring-2')\n .addClass('ring-offset-2')\n .css('background-color', color)\n .css('--tw-ring-color', color)\n .attr('data-color', color)\n .show();\n }\n\n unpickColor(event) {\n event.preventDefault();\n $(this.colorPickerValueTarget).val('');\n $(this.colorInputTarget).val('');\n $(this.userSelectedColorTarget).hide();\n $('.button-color').removeClass('ring-2 ring-offset-2');\n }\n\n togglePickr(event) {\n event.preventDefault();\n }\n\n initPluginInstance() {\n this.pickr = Pickr.create({\n el: '.btn-pickr',\n theme: 'monolith',\n useAsButton: true,\n default: this.initialColorValue || '#1E90FF',\n components: {\n // Main components\n preview: true,\n hue: true,\n\n // Input / output Options\n interaction: {\n input: true,\n save: true,\n },\n }\n });\n\n this.pickr.on('save', (color, _instance) => {\n const hexaColor = color.toHEXA().toString()\n if (!this.colorOptions.includes(hexaColor)) {\n this.showUserSelectedColor(hexaColor);\n }\n this.pickr.hide();\n });\n\n const that = this\n\n $('input[type=\"text\"].pcr-result').on('keydown', function (e) {\n if (e.key === 'Enter') {\n that.pickr.applyColor(false)\n }\n })\n }\n\n teardownPluginInstance() {\n this.pickr.destroy()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"daterangepicker/daterangepicker.css\");\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport 'daterangepicker';\n\nexport default class extends Controller {\n static targets = [ \"field\", \"clearButton\", \"currentTimeZoneWrapper\", \"timeZoneButtons\", \"timeZoneSelectWrapper\", \"timeZoneField\" ]\n static values = {\n includeTime: Boolean,\n defaultTimeZones: Array,\n cancelButtonLabel: { type: String, default: \"Cancel\" },\n applyButtonLabel: { type: String, default: \"Apply\" }\n }\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n clearDate(event) {\n // don't submit the form, unless it originated from the cancel/clear button\n event.preventDefault()\n\n $(this.fieldTarget).val('')\n }\n\n applyDateToField(event, picker) {\n const format = this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n $(this.fieldTarget).val(picker.startDate.format(format))\n }\n\n showTimeZoneButtons(event) {\n // don't follow the anchor\n event.preventDefault()\n\n $(this.currentTimeZoneWrapperTarget).toggleClass('hidden')\n $(this.timeZoneButtonsTarget).toggleClass('hidden')\n }\n\n showTimeZoneSelectWrapper(event) {\n // don't follow the anchor\n event.preventDefault()\n\n $(this.timeZoneButtonsTarget).toggleClass('hidden')\n\n if (this.hasTimeZoneSelectWrapperTarget) {\n $(this.timeZoneSelectWrapperTarget).toggleClass('hidden')\n }\n }\n\n resetTimeZoneUI(e) {\n e && e.preventDefault()\n\n $(this.currentTimeZoneWrapperTarget).removeClass('hidden')\n $(this.timeZoneButtonsTarget).addClass('hidden')\n\n if (this.hasTimeZoneSelectWrapperTarget) {\n $(this.timeZoneSelectWrapperTarget).addClass('hidden')\n }\n }\n\n setTimeZone(event) {\n // don't follow the anchor\n event.preventDefault()\n\n const currentTimeZoneEl = this.currentTimeZoneWrapperTarget.querySelector('a')\n const {value} = event.target.dataset\n\n $(this.timeZoneFieldTarget).val(value)\n $(currentTimeZoneEl).text(value)\n\n $('.time-zone-button').removeClass('button').addClass('button-alternative')\n $(event.target).removeClass('button-alternative').addClass('button')\n\n this.resetTimeZoneUI()\n }\n\n initPluginInstance() {\n $(this.fieldTarget).daterangepicker({\n singleDatePicker: true,\n timePicker: this.includeTimeValue,\n timePickerIncrement: 5,\n autoUpdateInput: false,\n locale: {\n cancelLabel: this.cancelButtonLabelValue,\n applyLabel: this.applyButtonLabelValue,\n format: this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n }\n })\n\n $(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n $(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n\n this.pluginMainEl = this.fieldTarget\n this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n // Init time zone select\n if (this.includeTimeValue && this.hasTimeZoneSelectWrapperTarget) {\n this.timeZoneSelect = this.timeZoneSelectWrapperTarget.querySelector('select.select2')\n\n $(this.timeZoneSelect).select2({\n width: 'style'\n })\n\n const self = this\n\n $(this.timeZoneSelect).on('change.select2', function(event) {\n const currentTimeZoneEl = self.currentTimeZoneWrapperTarget.querySelector('a')\n const {value} = event.target\n\n $(self.timeZoneFieldTarget).val(value)\n $(currentTimeZoneEl).text(value)\n\n const selectedOptionTimeZoneButton = $('.selected-option-time-zone-button')\n\n if (self.defaultTimeZonesValue.includes(value)) {\n $('.time-zone-button').removeClass('button').addClass('button-alternative')\n selectedOptionTimeZoneButton.addClass('hidden').attr('hidden', true)\n $(`a[data-value=\"${value}\"`).removeClass('button-alternative').addClass('button')\n } else {\n // deselect any selected button\n $('.time-zone-button').removeClass('button').addClass('button-alternative')\n\n selectedOptionTimeZoneButton.text(value)\n selectedOptionTimeZoneButton.attr('data-value', value).removeAttr('hidden')\n selectedOptionTimeZoneButton.removeClass(['hidden', 'button-alternative']).addClass('button')\n }\n\n self.resetTimeZoneUI()\n })\n }\n }\n\n teardownPluginInstance() {\n if (this.plugin === undefined) { return }\n\n $(this.pluginMainEl).off('apply.daterangepicker')\n $(this.pluginMainEl).off('cancel.daterangepicker')\n\n // revert to original markup, remove any event listeners\n this.plugin.remove()\n\n if (this.includeTimeValue) {\n $(this.timeZoneSelect).select2('destroy');\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\n \"fileField\",\n \"removeFileFlag\",\n \"downloadFileButton\",\n \"removeFileButton\",\n \"selectFileButton\",\n \"progressBar\",\n ];\n\n connect() {\n // Add upload event listeners\n const initializeListener = document.addEventListener(\n \"direct-upload:initialize\",\n (event) => {\n this.selectFileButtonTarget.classList.add(\"hidden\");\n this.progressBarTarget.innerText = \"0%\";\n this.progressBarTarget.style.width = \"0%\";\n this.progressBarTarget.setAttribute(\"aria-valuenow\", 0);\n this.progressBarTarget.parentNode.classList.remove(\"hidden\");\n }\n );\n\n const progressListener = document.addEventListener(\n \"direct-upload:progress\",\n (event) => {\n const { progress } = event.detail;\n const width = `${progress.toFixed(1)}%`;\n\n this.progressBarTarget.innerText = width;\n this.progressBarTarget.setAttribute(\"aria-valuenow\", progress);\n this.progressBarTarget.style.width = width;\n }\n );\n\n const errorListener = document.addEventListener(\n \"direct-upload:error\",\n (event) => {\n event.preventDefault();\n\n const { error } = event.detail;\n this.progressBarTarget.innerText = error;\n }\n );\n\n this.uploadListeners = {\n \"direct-upload:initialize\": initializeListener,\n \"direct-upload:progress\": progressListener,\n \"direct-upload:error\": errorListener,\n };\n }\n\n disconnect() {\n // Teardown event listeners\n for (const event in this.uploadListeners) {\n document.removeEventListener(event, this.uploadListeners[event]);\n }\n }\n\n uploadFile() {\n this.fileFieldTarget.click();\n }\n\n removeFile() {\n if (this.hasDownloadFileButtonTarget) {\n this.downloadFileButtonTarget.classList.add(\"hidden\");\n }\n\n this.removeFileButtonTarget.classList.add(\"hidden\");\n this.removeFileFlagTarget.value = true;\n }\n\n handleFileSelected() {\n const statusText = this.selectFileButtonTarget.querySelector(\"span\");\n const icon = this.selectFileButtonTarget.querySelector(\"i\");\n\n if (this.hasDownloadFileButtonTarget) {\n this.downloadFileButtonTarget.remove();\n }\n\n statusText.innerText = \"Select Another File\";\n icon.classList.remove(\"ti-upload\");\n icon.classList.add(\"ti-check\");\n }\n}\n","import { Controller } from \"stimulus\";\nimport zxcvbn from \"zxcvbn\";\n\nexport default class extends Controller {\n static targets = [\"strengthIndicator\"];\n\n estimateStrength(e) {\n const result = zxcvbn(e.target.value);\n\n if (result.feedback) {\n this.strengthIndicatorTarget.innerText = `${result.feedback.warning}.`;\n this.strengthIndicatorTarget.classList.remove(\"hidden\");\n } else {\n this.strengthIndicatorTarget.classList.add(\"hidden\");\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"intl-tel-input/build/css/intlTelInput.css\");\nimport intlTelInput from 'intl-tel-input';\n\nexport default class extends Controller {\n static targets = [ \"field\" ]\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n initPluginInstance() {\n let options = {\n hiddenInput: this.fieldTarget.dataset.method,\n customContainer: \"w-full\"\n }\n\n // TODO: add instructions on how to copy this asset into the application's assets path and write the meta tag into the head (via the engine?)\n const utilsScriptPath = metaContent(\"intl_tel_input_utils_path\")\n if (utilsScriptPath) {\n options['utilsScript'] = utilsScriptPath\n }\n\n this.plugin = intlTelInput(this.fieldTarget, options);\n }\n\n teardownPluginInstance() {\n if (this.plugin === undefined) { return }\n\n // revert to original markup, remove any event listeners\n this.plugin.destroy()\n }\n}\n\nfunction metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"select2/dist/css/select2.min.css\");\nimport select2 from \"select2\";\n\nexport default class extends Controller {\n static targets = [ \"select\" ]\n static values = {\n acceptsNew: Boolean,\n enableSearch: Boolean,\n searchUrl: String,\n }\n \n // will be reissued as native dom events name prepended with '$' e.g. '$change', '$select2:closing', etc\n static jQueryEventsToReissue = [ \"change\", \"select2:closing\", \"select2:close\", \"select2:opening\", \"select2:open\", \"select2:selecting\", \"select2:select\", \"select2:unselecting\", \"select2:unselect\", \"select2:clearing\", \"select2:clear\" ]\n \n\n initialize() {\n this.dispatchNativeEvent = this.dispatchNativeEvent.bind(this)\n if (this.isSelect2LoadedOnWindowJquery) {\n select2(window.$)\n }\n }\n\n get isSelect2LoadedOnWindowJquery() {\n return (window.$ !== undefined && window.$.select2 === undefined)\n }\n\n connect() {\n if (this.isSelect2LoadedOnWindowJquery) {\n this.initPluginInstance()\n }\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n cleanupBeforeInit() {\n $(this.element).find('.select2-container--default').remove()\n }\n\n initPluginInstance() {\n let options = {};\n\n if (!this.enableSearchValue) {\n options.minimumResultsForSearch = -1;\n }\n\n options.tags = this.acceptsNewValue\n\n if (this.searchUrlValue) {\n options.ajax = {\n url: this.searchUrlValue,\n dataType: 'json',\n // We enable pagination by default here\n data: function(params) {\n var query = {\n search: params.term,\n page: params.page || 1\n }\n return query\n }\n // Any additional params go here...\n }\n }\n\n options.templateResult = this.formatState;\n options.templateSelection = this.formatState;\n options.width = 'style';\n\n this.cleanupBeforeInit() // in case improperly torn down\n this.pluginMainEl = this.selectTarget // required because this.selectTarget is unavailable on disconnect()\n $(this.pluginMainEl).select2(options);\n\n this.initReissuePluginEventsAsNativeEvents()\n }\n\n teardownPluginInstance() {\n if (this.pluginMainEl === undefined) { return }\n\n // ensure there are no orphaned event handlers\n this.teardownPluginEventsAsNativeEvents()\n \n // revert to original markup, remove any event listeners\n $(this.pluginMainEl).select2('destroy');\n }\n\n initReissuePluginEventsAsNativeEvents() {\n this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n $(this.pluginMainEl).on(eventName, this.dispatchNativeEvent)\n })\n }\n \n teardownPluginEventsAsNativeEvents() {\n this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n $(this.pluginMainEl).off(eventName)\n })\n }\n \n dispatchNativeEvent(event) {\n const nativeEventName = '$' + event.type // e.g. '$change.select2'\n this.element.dispatchEvent(new CustomEvent(nativeEventName, { detail: { event: event }, bubbles: true, cancelable: false }))\n }\n\n // https://stackoverflow.com/questions/29290389/select2-add-image-icon-to-option-dynamically\n formatState(opt) {\n var imageUrl = $(opt.element).attr('data-image');\n var imageHtml = \"\";\n if (imageUrl) {\n imageHtml = '<img src=\"' + imageUrl + '\" /> ';\n }\n return $('<span>' + imageHtml + sanitizeHTML(opt.text) + '</span>');\n }\n}\n\n// https://portswigger.net/web-security/cross-site-scripting/preventing\nfunction sanitizeHTML(str) {\n return str.replace(/[^\\w. ]/gi, function (c) {\n return '&#' + c.charCodeAt(0) + ';';\n });\n};\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport ButtonToggleController from './fields/button_toggle_controller'\nimport CloudinaryImageController from './fields/cloudinary_image_controller'\nimport ColorPickerController from './fields/color_picker_controller'\nimport DateController from './fields/date_controller'\nimport FileFieldController from './fields/file_field_controller'\nimport PasswordController from './fields/password_controller'\nimport PhoneController from './fields/phone_controller'\nimport SuperSelectController from './fields/super_select_controller'\n\nexport const controllerDefinitions = [\n [ButtonToggleController, 'fields/button_toggle_controller.js'],\n [CloudinaryImageController, 'fields/cloudinary_image_controller.js'],\n [ColorPickerController, 'fields/color_picker_controller.js'],\n [DateController, 'fields/date_controller.js'],\n [FileFieldController, 'fields/file_field_controller.js'],\n [PasswordController, 'fields/password_controller.js'],\n [PhoneController, 'fields/phone_controller.js'],\n [SuperSelectController, 'fields/super_select_controller.js'],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n ButtonToggleController,\n CloudinaryImageController,\n ColorPickerController,\n DateController,\n FileFieldController,\n PasswordController,\n PhoneController,\n SuperSelectController,\n}","import Tribute from 'tributejs'\nrequire(\"trix/dist/trix.css\");\n\nrequire(\"trix\")\nrequire(\"@rails/actiontext\")\n\n// only show the editor tool bar when the user is editing the field.\n// inspired by https://github.com/basecamp/trix/issues/343 and `app/assets/stylesheets/account/fields/trix_editor.scss`\n\nexport function trixEditor() {\n document.addEventListener('trix-initialize', function() {\n addEventListener(\"trix-focus\", updateTrixToolbarVisability);\n addEventListener(\"trix-blur\", updateTrixToolbarVisability);\n updateTrixToolbarVisability();\n initializeTribute();\n })\n}\n\nfunction updateTrixToolbarVisability() {\n document.querySelectorAll(\"trix-editor\").forEach((editorElement, index) => {\n var toolbarElement = editorElement.toolbarElement;\n if (editorElement == document.activeElement) {\n toolbarElement.classList.add('visible');\n } else {\n // don't hide the toolbar if we've unfocused to focus on the link dialog.\n if (!toolbarElement.contains(document.activeElement)) {\n toolbarElement.classList.remove('visible');\n }\n }\n })\n}\n\nfunction initializeTribute() {\n document.querySelectorAll(\"trix-editor\").forEach((el, index) => {\n var editor = el.editor;\n \n var mentionConfig = {\n trigger: '@',\n values: JSON.parse(editor.element.dataset.mentions),\n selectTemplate: function (item) {\n item = item.original;\n return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n },\n menuItemTemplate: function (item) {\n return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n },\n requireLeadingSpace: true,\n replaceTextSuffix: ''\n }\n \n var topicConfig = {\n trigger: '#',\n values: JSON.parse(editor.element.dataset.topics),\n selectTemplate: function (item) {\n item = item.original;\n return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n },\n menuItemTemplate: function (item) {\n return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n },\n requireLeadingSpace: true,\n replaceTextSuffix: ''\n }\n \n var tribute = new Tribute({\n collection: [topicConfig, mentionConfig],\n });\n \n tribute.attach(el);\n })\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","clickShadowField","event","preventDefault","this","shadowFieldTarget","click","targets","pickImageAndUpload","defaultSources","hasGoogleApiKeyValue","push","options","cloud_name","cloudNameValue","apiKey","apiKeyValue","upload_preset","uploadPresetValue","upload_signature","getCloudinarySignature","bind","multiple","sources","hasSourcesValue","sourcesValue","split","search_by_rights","hasSearchByRightsValue","searchByRightsValue","googleApiKeyValue","cloudinary","openUploadWidget","handleWidgetResponse","clearImage","hiddenFieldTarget","value","removeThumbnail","callback","paramsToSign","$","ajax","url","signaturesUrlValue","type","dataType","data","complete","console","log","success","signature","textStatus","xhr","error","status","response","info","public_id","addThumbnail","urlFormatValue","$imageElement","widthValue","heightValue","identifier","uploadButtonTarget","prepend","classList","add","thumbnailShownClass","hasThumbnailTarget","removeChild","thumbnailTarget","remove","values","signaturesUrl","String","height","Number","width","cloudName","googleApiKey","urlFormat","searchByRights","Boolean","classes","connect","initPluginInstance","colorOptions","colorOptionsTarget","find","map","_","button","attr","get","disconnect","teardownPluginInstance","pickColor","targetEl","target","color","dataset","colorInputTarget","val","colorPickerValueTarget","userSelectedColorTarget","removeClass","pickr","setColor","pickRandomColor","r","Math","floor","random","g","b","hexColor","getColor","toHEXA","toString","showUserSelectedColor","addClass","css","show","unpickColor","hide","togglePickr","Pickr","create","el","theme","useAsButton","default","initialColorValue","components","preview","hue","interaction","input","save","on","_instance","hexaColor","includes","that","e","applyColor","destroy","initialColor","require","clearDate","fieldTarget","applyDateToField","picker","format","includeTimeValue","startDate","showTimeZoneButtons","currentTimeZoneWrapperTarget","toggleClass","timeZoneButtonsTarget","showTimeZoneSelectWrapper","hasTimeZoneSelectWrapperTarget","timeZoneSelectWrapperTarget","resetTimeZoneUI","setTimeZone","currentTimeZoneEl","querySelector","timeZoneFieldTarget","text","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","locale","cancelLabel","cancelButtonLabelValue","applyLabel","applyButtonLabelValue","pluginMainEl","plugin","timeZoneSelect","select2","self","selectedOptionTimeZoneButton","defaultTimeZonesValue","removeAttr","undefined","off","includeTime","defaultTimeZones","Array","cancelButtonLabel","applyButtonLabel","initializeListener","document","addEventListener","selectFileButtonTarget","progressBarTarget","innerText","style","setAttribute","parentNode","progressListener","progress","detail","toFixed","errorListener","uploadListeners","removeEventListener","uploadFile","fileFieldTarget","removeFile","hasDownloadFileButtonTarget","downloadFileButtonTarget","removeFileButtonTarget","removeFileFlagTarget","handleFileSelected","statusText","icon","estimateStrength","result","zxcvbn","feedback","strengthIndicatorTarget","warning","hiddenInput","method","customContainer","utilsScriptPath","name","element","head","content","metaContent","intlTelInput","initialize","dispatchNativeEvent","isSelect2LoadedOnWindowJquery","window","cleanupBeforeInit","enableSearchValue","minimumResultsForSearch","tags","acceptsNewValue","searchUrlValue","params","search","term","page","templateResult","formatState","templateSelection","selectTarget","initReissuePluginEventsAsNativeEvents","teardownPluginEventsAsNativeEvents","constructor","jQueryEventsToReissue","forEach","eventName","dispatchEvent","CustomEvent","bubbles","cancelable","opt","imageUrl","imageHtml","c","charCodeAt","acceptsNew","enableSearch","searchUrl","controllerDefinitions","ButtonToggleController","CloudinaryImageController","ColorPickerController","DateController","FileFieldController","PasswordController","PhoneController","SuperSelectController","d","controller","controllerConstructor","updateTrixToolbarVisability","querySelectorAll","editorElement","index","toolbarElement","activeElement","contains","editor","mentionConfig","trigger","JSON","parse","mentions","selectTemplate","item","original","protocol","model","id","label","menuItemTemplate","photo","string","requireLeadingSpace","replaceTextSuffix","topicConfig","topics","Tribute","collection","attach"],"mappings":"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"}
|