{"version":3,"file":"js/50-9812cbeeecad0445b613.js","mappings":"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","sources":["webpack://app/./app/javascript/controllers/ sync _controller\\.js$","webpack://app/./app/javascript/controllers/action/active_for_frame_route_controller.js","webpack://app/./app/javascript/controllers/action/dispatch_event_controller.js","webpack://app/./app/javascript/controllers/action/no_data_controller.js","webpack://app/./app/javascript/controllers/action/sortable_controller.js","webpack://app/./app/javascript/controllers/action/toggle_controller.js","webpack://app/./app/javascript/controllers/browser_fp_controller.js","webpack://app/./app/javascript/controllers/collapse/accordion_controller.js","webpack://app/./app/javascript/controllers/collapse/read_more_controller.js","webpack://app/./app/javascript/controllers/dropdown_controller.js","webpack://app/./app/javascript/controllers/form/ages_toggle_controller.js","webpack://app/./app/javascript/controllers/form/auto_complete_controller.js","webpack://app/./app/javascript/controllers/form/city_selector_controller.js","webpack://app/./app/javascript/controllers/form/file_uploader_controller.js","webpack://app/./app/javascript/controllers/form/geolocation_controller.js","webpack://app/./app/javascript/controllers/form/input/autoresize_controller.js","webpack://app/./app/javascript/controllers/form/input/chars_counter_controller.js","webpack://app/./app/javascript/controllers/form/input/clearable_controller.js","webpack://app/./app/javascript/controllers/form/input/collapsable/checkbox_controller.js","webpack://app/./app/javascript/controllers/form/input/collapsable/radio_controller.js","webpack://app/./app/javascript/controllers/form/input/disable_for_user_type_controller.js","webpack://app/./app/javascript/controllers/form/input/emoticonize_controller.js","webpack://app/./app/javascript/controllers/form/input/password_controller.js","webpack://app/./app/javascript/controllers/form/limit_choice_controller.js","webpack://app/./app/javascript/controllers/form/reset_controller.js","webpack://app/./app/javascript/controllers/form/select/multiple_controller.js","webpack://app/./app/javascript/controllers/form/select/to_textarea_controller.js","webpack://app/./app/javascript/controllers/form/slider/age_controller.js","webpack://app/./app/javascript/controllers/form/slider/distance_controller.js","webpack://app/./app/javascript/controllers/gender_filter_controller.js","webpack://app/./app/javascript/controllers/history_controller.js","webpack://app/./app/javascript/controllers/index.js","webpack://app/./app/javascript/controllers/load_on_intersection_controller.js","webpack://app/./app/javascript/controllers/menu_controller.js","webpack://app/./app/javascript/controllers/modal_controller.js","webpack://app/./app/javascript/controllers/pages/customer-supports_controller.js","webpack://app/./app/javascript/controllers/pages/disclaimer_controller.js","webpack://app/./app/javascript/controllers/pages/manage_renew_controller.js","webpack://app/./app/javascript/controllers/pages/sentenses_controller.js","webpack://app/./app/javascript/controllers/pages/subscriptions_controller.js","webpack://app/./app/javascript/controllers/scroll/active_into_view_controller.js","webpack://app/./app/javascript/controllers/scroll/into_view_controller.js","webpack://app/./app/javascript/controllers/scroll/to_top_controller.js","webpack://app/./app/javascript/controllers/slider/infotainment_controller.js","webpack://app/./app/javascript/controllers/slider/tips_controller.js","webpack://app/./app/javascript/controllers/tabs/profile_controller.js","webpack://app/./app/javascript/controllers/tabs/switch-panel_controller.js","webpack://app/./app/javascript/controllers/toast_controller.js","webpack://app/./app/javascript/controllers/upload-media_controller.js","webpack://app/./app/javascript/controllers/video/layer_controller.js","webpack://app/./app/javascript/controllers/video/player_controller.js","webpack://app/./app/javascript/controllers/vue/chat_status_controller.js","webpack://app/./app/javascript/controllers/vue/notification_bar_controller.js","webpack://app/./app/javascript/controllers/vue/user_consent_controller.js","webpack://app/./app/javascript/libs/dialog.js","webpack://app/./app/javascript/libs/geolocation.js","webpack://app/./app/javascript/libs/toast.js","webpack://app/./app/javascript/libs/user_consent.js","webpack://app/./app/javascript/libs/utils/emoticonize.js","webpack://app/./app/javascript/locales/i18n.js","webpack://app/./app/javascript/stores/chat_store.js","webpack://app/./app/javascript/stores/common_store.js","webpack://app/./app/javascript/stores/index.js","webpack://app/./app/javascript/stores/notifications_store.js","webpack://app/./app/javascript/turbo_streams/toast.js","webpack://app/./app/javascript/turbo_streams/dialog.js","webpack://app/./app/javascript/turbo_streams/attributes.js","webpack://app/./app/javascript/lib/me/core.js.coffee","webpack://app/./app/javascript/config.js.erb"],"sourcesContent":["var map = {\n\t\"./action/active_for_frame_route_controller.js\": 8115,\n\t\"./action/dispatch_event_controller.js\": 6338,\n\t\"./action/no_data_controller.js\": 5115,\n\t\"./action/sortable_controller.js\": 49,\n\t\"./action/toggle_controller.js\": 1653,\n\t\"./browser_fp_controller.js\": 6285,\n\t\"./collapse/accordion_controller.js\": 1834,\n\t\"./collapse/read_more_controller.js\": 8384,\n\t\"./dropdown_controller.js\": 9247,\n\t\"./form/ages_toggle_controller.js\": 8732,\n\t\"./form/auto_complete_controller.js\": 1122,\n\t\"./form/city_selector_controller.js\": 7612,\n\t\"./form/file_uploader_controller.js\": 36,\n\t\"./form/geolocation_controller.js\": 5034,\n\t\"./form/input/autoresize_controller.js\": 1795,\n\t\"./form/input/chars_counter_controller.js\": 9488,\n\t\"./form/input/clearable_controller.js\": 2317,\n\t\"./form/input/collapsable/checkbox_controller.js\": 8798,\n\t\"./form/input/collapsable/radio_controller.js\": 6730,\n\t\"./form/input/disable_for_user_type_controller.js\": 8583,\n\t\"./form/input/emoticonize_controller.js\": 260,\n\t\"./form/input/password_controller.js\": 5881,\n\t\"./form/limit_choice_controller.js\": 4224,\n\t\"./form/reset_controller.js\": 4114,\n\t\"./form/select/multiple_controller.js\": 1376,\n\t\"./form/select/to_textarea_controller.js\": 6708,\n\t\"./form/slider/age_controller.js\": 5370,\n\t\"./form/slider/distance_controller.js\": 1356,\n\t\"./gender_filter_controller.js\": 4640,\n\t\"./history_controller.js\": 6804,\n\t\"./load_on_intersection_controller.js\": 660,\n\t\"./menu_controller.js\": 349,\n\t\"./modal_controller.js\": 9415,\n\t\"./pages/customer-supports_controller.js\": 284,\n\t\"./pages/disclaimer_controller.js\": 3674,\n\t\"./pages/manage_renew_controller.js\": 9828,\n\t\"./pages/sentenses_controller.js\": 8519,\n\t\"./pages/subscriptions_controller.js\": 4043,\n\t\"./scroll/active_into_view_controller.js\": 3380,\n\t\"./scroll/into_view_controller.js\": 3192,\n\t\"./scroll/to_top_controller.js\": 4929,\n\t\"./slider/infotainment_controller.js\": 2434,\n\t\"./slider/tips_controller.js\": 2396,\n\t\"./tabs/profile_controller.js\": 9930,\n\t\"./tabs/switch-panel_controller.js\": 8118,\n\t\"./toast_controller.js\": 4173,\n\t\"./upload-media_controller.js\": 112,\n\t\"./video/layer_controller.js\": 6907,\n\t\"./video/player_controller.js\": 7319,\n\t\"./vue/chat_status_controller.js\": 1322,\n\t\"./vue/notification_bar_controller.js\": 5700,\n\t\"./vue/user_consent_controller.js\": 2137,\n\t\"controllers/action/active_for_frame_route_controller.js\": 8115,\n\t\"controllers/action/dispatch_event_controller.js\": 6338,\n\t\"controllers/action/no_data_controller.js\": 5115,\n\t\"controllers/action/sortable_controller.js\": 49,\n\t\"controllers/action/toggle_controller.js\": 1653,\n\t\"controllers/browser_fp_controller.js\": 6285,\n\t\"controllers/collapse/accordion_controller.js\": 1834,\n\t\"controllers/collapse/read_more_controller.js\": 8384,\n\t\"controllers/dropdown_controller.js\": 9247,\n\t\"controllers/form/ages_toggle_controller.js\": 8732,\n\t\"controllers/form/auto_complete_controller.js\": 1122,\n\t\"controllers/form/city_selector_controller.js\": 7612,\n\t\"controllers/form/file_uploader_controller.js\": 36,\n\t\"controllers/form/geolocation_controller.js\": 5034,\n\t\"controllers/form/input/autoresize_controller.js\": 1795,\n\t\"controllers/form/input/chars_counter_controller.js\": 9488,\n\t\"controllers/form/input/clearable_controller.js\": 2317,\n\t\"controllers/form/input/collapsable/checkbox_controller.js\": 8798,\n\t\"controllers/form/input/collapsable/radio_controller.js\": 6730,\n\t\"controllers/form/input/disable_for_user_type_controller.js\": 8583,\n\t\"controllers/form/input/emoticonize_controller.js\": 260,\n\t\"controllers/form/input/password_controller.js\": 5881,\n\t\"controllers/form/limit_choice_controller.js\": 4224,\n\t\"controllers/form/reset_controller.js\": 4114,\n\t\"controllers/form/select/multiple_controller.js\": 1376,\n\t\"controllers/form/select/to_textarea_controller.js\": 6708,\n\t\"controllers/form/slider/age_controller.js\": 5370,\n\t\"controllers/form/slider/distance_controller.js\": 1356,\n\t\"controllers/gender_filter_controller.js\": 4640,\n\t\"controllers/history_controller.js\": 6804,\n\t\"controllers/load_on_intersection_controller.js\": 660,\n\t\"controllers/menu_controller.js\": 349,\n\t\"controllers/modal_controller.js\": 9415,\n\t\"controllers/pages/customer-supports_controller.js\": 284,\n\t\"controllers/pages/disclaimer_controller.js\": 3674,\n\t\"controllers/pages/manage_renew_controller.js\": 9828,\n\t\"controllers/pages/sentenses_controller.js\": 8519,\n\t\"controllers/pages/subscriptions_controller.js\": 4043,\n\t\"controllers/scroll/active_into_view_controller.js\": 3380,\n\t\"controllers/scroll/into_view_controller.js\": 3192,\n\t\"controllers/scroll/to_top_controller.js\": 4929,\n\t\"controllers/slider/infotainment_controller.js\": 2434,\n\t\"controllers/slider/tips_controller.js\": 2396,\n\t\"controllers/tabs/profile_controller.js\": 9930,\n\t\"controllers/tabs/switch-panel_controller.js\": 8118,\n\t\"controllers/toast_controller.js\": 4173,\n\t\"controllers/upload-media_controller.js\": 112,\n\t\"controllers/video/layer_controller.js\": 6907,\n\t\"controllers/video/player_controller.js\": 7319,\n\t\"controllers/vue/chat_status_controller.js\": 1322,\n\t\"controllers/vue/notification_bar_controller.js\": 5700,\n\t\"controllers/vue/user_consent_controller.js\": 2137\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 = 5124;","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = { frameId: String }\n\n connect() {\n document.getElementById(this.frameIdValue).addEventListener('turbo:frame-render', (event) => {\n const headers = event.detail.fetchResponse.response.headers\n this.activate(headers.get('X-Controller'), headers.get('X-Action'))\n })\n }\n\n activate(controller, action) {\n this.element.querySelectorAll('[data-active-for-route]').forEach((elmnt) => {\n const routes = elmnt.dataset.activeForRoute.split(' ')\n\n routes.some((route) => {\n let c, a\n [c, a] = route.split('#')\n const match = c == controller && (!a || a == action)\n elmnt.toggleAttribute('active', match)\n return match\n })\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = { event: String, target: String }\n\n dispatch() {\n const target = this.hasTargetValue ? document.querySelector(this.targetValue) : document\n target.dispatchEvent(new Event(this.eventValue))\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n initialize() {\n this.observer = null\n this.checkData()\n }\n\n connect() {\n this.observer = new MutationObserver((_mutationList, _observer) => { this.checkData() })\n this.observer.observe(this.element, { childList: true })\n }\n\n disconnect() {\n this.observer.disconnect()\n }\n\n checkData() {\n this.element.setAttribute('no-data', this.element.childElementCount > 0)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Sortable from 'sortablejs'\n\nexport default class extends Controller {\n static values = {\n handle: String\n }\n\n connect() {\n this.sortable = Sortable.create(this.element, {\n animation: 350,\n onEnd: this.onEnd.bind(this),\n ...(this.hasHandleValue && { handle: this.handleValue })\n })\n }\n\n disconnect() {\n this.sortable.destroy();\n }\n\n onEnd(event) {\n const { newIndex, item } = event\n const url = item.dataset['sortableUrl']\n\n fetch(url, {\n method: 'PATCH',\n headers: {\n 'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\").content,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n },\n body: JSON.stringify({ position: newIndex + 1 })\n })\n }\n}","/*\n Trigger\n ---------------\n \n\n Target\n ---------------\n \n */\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = { target: String }\n\n connect() {\n this.element.addEventListener('click', () => {\n document.querySelector(this.targetValue)?.toggleAttribute('hidden')\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport FingerprintJS from '@fingerprintjs/fingerprintjs'\n\nexport default class extends Controller {\n connect() {\n const footer = document.querySelector('footer:not([bfp])')\n if (!footer) return\n\n const fpPromise = FingerprintJS.load()\n\n fpPromise\n .then(fp => fp.get())\n .then(result => {\n\n const seed = Math.random().toString(16).substring(2, 7)\n const img = document.createElement('img')\n img.src = `/images/bfp-${result.visitorId}-${seed}.png`\n footer.appendChild(img)\n footer.toggleAttribute('bfp', true)\n })\n }\n}\n","/*\n UI COMPONENT: Accordion Management\n ---------------------------------------------------\n Triggered by \"open\" attribute on top-level element. Labels, icons, and sizes are controlled by CSS.\n\n \n \n \n \n HTML CONTENTโ€ฆ\n \n\n Status (Attribute as Summary Element)\n ---------------------------------------------------\n Open Accordion - attribute \"open\"\n */\nimport {Controller} from '@hotwired/stimulus';\n\nexport default class extends Controller {\n toggle() {\n this.element.toggleAttribute('open')\n\n if (this.element.hasAttribute('open')) {\n this.element.querySelector('button').scrollIntoView({\n behavior: 'smooth',\n block: 'center'\n })\n }\n }\n}\n","/*\n UI COMPONENT: Agnostic structure read more content\n ---------------------------------------------------\n\n Example: Hidden/Show (content totally hidden)\n
\n // initialize with hidden attribute\n \n\n \n
\n\n Example: Multiline with line-clamp css class\n Display Trigger: add data-collapse--read-more-target=\"trigger\"\n
\n\n // Class line-clamp-[x]\n
\n CONTENT โ€ฆ\n
\n\n \n
\n\n Trigger: automatic label management with data-attribute.\n Icon: V1 has only one variant (+/-)\n \n */\nimport {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['content', 'trigger']\n\n connect() {\n this.#checkDisplay()\n }\n\n toggle() {\n this.contentTarget.toggleAttribute('hidden')\n }\n\n toggle_lines() {\n this.contentTarget.classList.toggle('line-clamp-none')\n }\n\n #checkDisplay() {\n if(!this.hasTriggerTarget) return\n\n const isSmaller = this.contentTarget.scrollHeight <= this.contentTarget.clientHeight\n this.triggerTarget.toggleAttribute('hidden', isSmaller)\n }\n}\n","/*\n \n \n \n \n \n \n\n - Open management with \"open\" attribute\n - Direction management with \"direction\" attribute. Cumalative values: top, right, bottom, left\n*/\nimport { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['panel']\n\n connect() {\n document.addEventListener('click', () => this.#clickOutside(event));\n }\n\n disconnect() {\n document.removeEventListener('click', () => this.#clickOutside(event));\n }\n\n toggle() {\n this.element.toggleAttribute('open')\n }\n\n #clickOutside(event) {\n if (!this.element.contains(event.target)) {\n this.element.toggleAttribute('open', false);\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ \"toggles\" ]\n\n connect() {\n const toggles = this.togglesTarget.querySelectorAll('label input[type=\"radio\"]')\n toggles.forEach( toggle => toggle.addEventListener( \"click\", (event) => this.#toggle(event) ) )\n }\n\n #toggle(event) {\n this.element.dataset.userType = event.currentTarget.value\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['input', 'list', 'button']\n static values = {\n url: String,\n dataId: String,\n dataLabel: String,\n min: { type: Number, default: 3 }\n }\n\n static selectClasses = ['selected']\n\n connect() {\n const itemTemplate = this.listTarget.querySelector('template')\n this.itemTemplate = itemTemplate.content.cloneNode(true)\n itemTemplate.remove()\n\n this.buttonTarget.addEventListener('click', () => this.toggle())\n\n this.inputTarget.addEventListener('keyup', event => {\n switch (event.key) {\n case 'ArrowDown': this.selectFirst()\n break\n default:\n if (event.key.length != 1 && !['Backspace','Delete'].includes(event.key)) return\n this.search()\n }\n })\n\n this.listTarget.addEventListener('keydown', event => {\n event.preventDefault()\n switch (event.key) {\n case 'ArrowDown': this.selectNext()\n break\n case 'ArrowUp': this.selectPrevious()\n break\n case 'Enter': this.setSelected()\n break\n }\n })\n\n this.listTarget.addEventListener('click', event => {\n this.select(event.target)\n this.setSelected()\n })\n\n this.element.addEventListener('keydown', event => {\n if (event.key != 'Escape') return\n\n event.preventDefault()\n this.close()\n })\n\n document.addEventListener('click', event => this.closeOutside(event))\n\n this.search(false)\n }\n\n disconnect() {\n document.removeEventListener('click', event => this.closeOutside(event))\n }\n\n isOpen = () => !this.listTarget.classList.contains('hidden')\n\n open() {\n if (this.listTarget.childNodes.length === 0) return\n\n this.listTarget.classList.remove('hidden')\n }\n\n close() {\n this.listTarget.classList.add('hidden')\n this.unselect()\n }\n\n toggle = () => (this.isOpen() ? this.close() : this.open())\n\n closeOutside = event => !this.element.contains(event.target) && this.close()\n\n selectFirst() {\n const first = this.listTarget.firstElementChild\n if (!first) return\n\n this.open()\n this.select(first)\n this.listTarget.focus()\n this.listTarget.scrollTo(0,0)\n }\n\n selectPrevious() {\n const previous = this.selected()?.previousElementSibling\n if (!previous) {\n this.unselect()\n this.inputTarget.focus()\n return\n }\n\n this.select(previous)\n\n if (previous.getBoundingClientRect().top < this.listTarget.getBoundingClientRect().top)\n previous.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n\n selectNext() {\n const next = this.selected() ? this.selected().nextElementSibling : this.listTarget.firstElementChild\n if (!next) return\n\n this.select(next)\n\n if (next.getBoundingClientRect().bottom > this.listTarget.getBoundingClientRect().bottom)\n next.scrollIntoView({ behavior: 'smooth', block: 'nearest' })\n }\n\n select(item) {\n this.unselect()\n item.classList.add(...this.constructor.selectClasses)\n item.dataset.selected = 'true'\n this.dispacthEvent('select', item, { 'id': item.getAttribute('data-auto-complete-item'), 'label': item.innerHTML })\n }\n\n selected = () => this.listTarget.querySelector('[data-selected]')\n\n unselect() {\n const item = this.selected()\n if (!item) return\n item.classList.remove(...this.constructor.selectClasses)\n delete item.dataset.selected\n this.dispacthEvent('unselect', item, { 'id': item.getAttribute('data-auto-complete-item'), 'label': item.innerHTML })\n }\n\n setSelected() {\n const item = this.selected()\n this.inputTarget.value = item.innerText\n this.listTarget.querySelectorAll('[data-auto-complete-item]:not([data-selected])').forEach(elmt => elmt.remove())\n this.close()\n this.inputTarget.focus()\n this.dispacthEvent('change', this.inputTarget, { 'id': item.getAttribute('data-auto-complete-item'), 'label': item.innerHTML })\n }\n\n search(openList=true) {\n if (this.inputTarget.value === '') {\n this.close()\n this.resetList()\n this.dispacthEvent('search', this.inputTarget, { 'search': '' })\n return\n } else if (this.inputTarget.value.length < this.minValue) {\n return\n }\n\n const url = new URL(this.urlValue)\n const searchParams = new URLSearchParams()\n searchParams.set('search', this.inputTarget.value)\n url.search = searchParams.toString()\n fetch(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.json())\n .then(data => {\n this.resetList()\n\n if (data.length <= 0) {\n this.close()\n return\n }\n\n data.forEach(obj => this.addItem(obj[this.dataIdValue], obj[this.dataLabelValue]))\n if (openList) this.open()\n })\n this.dispacthEvent('search', this.inputTarget, { 'search': this.inputTarget.value })\n }\n\n addItem(id, label) {\n const itemNode = this.itemTemplate.cloneNode(true)\n const item = itemNode.querySelector('[data-auto-complete-item]')\n label = label.replace(new RegExp(`(${this.inputTarget.value})`, 'gi'), '$1')\n item.setAttribute('data-auto-complete-item', id)\n item.innerHTML = label\n this.listTarget.appendChild(itemNode)\n }\n\n resetList = () => this.listTarget.innerHTML = ''\n\n dispacthEvent(type, node, detail=null) {\n const event = new CustomEvent(`auto-complete:${type}`, { bubbles: true, detail: detail })\n node.dispatchEvent(event)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Toast from 'libs/toast'\n\nexport default class extends Controller {\n static values = { url: String }\n static targets = ['country', 'zip', 'city']\n\n connect() {\n this.countryTarget.addEventListener('change', (event) => { this.#reset() })\n this.zipTarget.addEventListener('keyup', (event) => { this.#checkZip() })\n }\n\n #checkZip() {\n if (this.zipTarget.value === '') {\n this.#reset()\n return\n }\n\n const mask = new RegExp(this.countryTarget.querySelector(':checked').dataset.zipCodeMask)\n\n if (this.zipTarget.value.match(mask)) {\n this.zipTarget.blur()\n this.#searchCity()\n } else if (this.zipTarget.value.length == 5) {\n new Toast(I18n.t('js.me_location.unknow'), { type: 'alert' }).show()\n this.#reset()\n }\n }\n\n #searchCity() {\n const url = new URL(this.urlValue)\n url.search = new URLSearchParams({ country_id: this.countryTarget.value, zip_code: this.zipTarget.value }).toString()\n fetch(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.json())\n .then(data => {\n this.cityTarget.replaceChildren()\n if (data.length != 1)\n this.cityTarget.add(new Option(I18n.t(data.length == 0 ? 'js.me_location.unknow' : 'common.choose'), ''))\n data.forEach(city => this.cityTarget.add(new Option(city.name, city.id)))\n this.cityTarget.classList.toggle('one-option', data.length <= 1)\n this.cityTarget.removeAttribute('disabled')\n if (data.length > 1) this.cityTarget.focus()\n })\n }\n\n #reset() {\n this.zipTarget.value = ''\n this.cityTarget.replaceChildren()\n this.cityTarget.toggleAttribute('disabled', true)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\n/*\n Custom progress or Rails progress ?\n let xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url);\n xhr.upload.addEventListener(\"progress\", ({loaded, total}) =>{})\n*/\nexport default class FileUploaderController extends Controller {\n static targets = [ 'file', 'button' ]\n\n connect() {\n this.element.addEventListener('turbo:submit-start', () => this.#submitStart(event))\n this.element.addEventListener('turbo:submit-end', () => this.#submitEnd(event))\n }\n\n browse() {\n this.fileTarget.click()\n }\n\n submit() {\n this.element.requestSubmit()\n }\n\n #submitStart() {\n this.buttonText = this.buttonTarget.innerText\n this.buttonTarget.innerText = I18n.t('js.upload.lock')\n this.buttonTarget.toggleAttribute('disabled', true)\n }\n\n #submitEnd() {\n this.buttonTarget.innerText = this.buttonText\n this.buttonTarget.toggleAttribute('disabled', false)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport geolocation from 'libs/geolocation'\nimport Toast from 'libs/toast'\nimport { i18n } from 'locales/i18n'\n\nclass GeolocationController extends Controller {\n static AVAILABLE = 1\n static UNAVAILABLE = 2\n static DENIED = 3\n static targets = ['geolocation', 'city', 'error', 'citySearch', 'radius']\n static values = { searchCityUrl: String }\n\n positionStatus = GeolocationController.UNAVAILABLE\n #boundPositionUpdated\n #boundPositionDenied\n #boundPositionUnavailable\n\n initialize() {\n this.#boundPositionUpdated = this.#positionUpdated.bind(this)\n this.#boundPositionDenied = this.#positionDenied.bind(this)\n this.#boundPositionUnavailable = this.#positionUnavailable.bind(this)\n }\n\n connect() {\n document.addEventListener('position:updated', this.#boundPositionUpdated)\n document.addEventListener('position:denied', this.#boundPositionDenied)\n document.addEventListener('position:unavailable', this.#boundPositionUnavailable)\n\n if (geolocation.isAvailable())\n this.#updateStatus(GeolocationController.AVAILABLE)\n else\n this.startGeolocation()\n }\n\n disconnect() {\n document.removeEventListener('position:updated', this.#boundPositionUpdated)\n document.removeEventListener('position:denied', this.#boundPositionDenied)\n document.removeEventListener('position:unavailable', this.#boundPositionUnavailable)\n }\n\n geolocationMode(){\n this.geolocationTarget.querySelector('input[type=\"radio\"]').checked = true\n this.citySearchTarget.toggleAttribute('hidden', true)\n if (this.positionStatus == GeolocationController.DENIED)\n this.startGeolocation()\n }\n\n cityMode(){\n this.cityTarget.querySelector('input[type=\"radio\"]').checked = true\n this.citySearchTarget.removeAttribute('hidden')\n this.radiusTarget.dispatchEvent(new CustomEvent('update-radius', { detail: { radius: 50 } }))\n }\n\n startGeolocation() {\n this.geolocationTarget.toggleAttribute('progress', true)\n geolocation.start()\n }\n\n searchCity(event) {\n const keys = /^[a-zA-Z\\s]{1}$/\n if (!event.key?.match(keys)) return\n\n const url = new URL(this.searchCityUrlValue)\n const searchParams = new URLSearchParams()\n searchParams.set('name', this.citySearchTarget.querySelector('input').value)\n url.search = searchParams.toString()\n fetch(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.json())\n .then(data => {\n const list = this.citySearchTarget.querySelector('datalist')\n list.replaceChildren()\n data.forEach((city) => {\n let option = document.createElement('option')\n option.value = city.label\n option.dataset.id = city.id\n list.appendChild(option)\n })\n })\n }\n\n updateCityId(event) {\n if (event.inputType && event.inputType != 'insertReplacementText') return\n const cityName = event.currentTarget.value\n const cityId = this.citySearchTarget.querySelector('datalist').querySelector(`option[value=\"${cityName}\"]`)?.dataset?.id\n this.cityTarget.querySelector('input').value = cityId\n }\n\n #updateStatus(status) {\n this.positionStatus = status\n this.geolocationTarget.removeAttribute('progress')\n\n if (this.positionStatus == GeolocationController.AVAILABLE) {\n this.errorTarget.toggleAttribute('hidden', true)\n this.geolocationTarget.removeAttribute('unavailable')\n } else {\n //this.errorTarget.textContent = i18n.t(`js.geolocation.error.${this.positionStatus == GeolocationController.UNAVAILABLE ? 'unavailable' : 'denied'}`)\n this.errorTarget.removeAttribute('hidden')\n //new Toast(i18n.t('js.geolocation.error.toast', 'alert')).show()\n this.geolocationTarget.toggleAttribute('unavailable', true)\n this.cityMode()\n }\n }\n\n #positionUpdated(event) {\n this.#updateStatus(GeolocationController.AVAILABLE)\n }\n\n #positionUnavailable(event) {\n this.#updateStatus(GeolocationController.UNAVAILABLE)\n }\n\n #positionDenied(event) {\n this.#updateStatus(GeolocationController.DENIED)\n }\n}\n\nexport default GeolocationController\n","/*\n CSS is the key. Textarea works with by shadow content ::before to resize easily by CSS and not computed height with JS.\n\n
\n \n
\n*/\n\nimport {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect() {\n const textarea = this.element.querySelector('textarea')\n textarea.addEventListener('input', this.#update)\n this.#update({currentTarget: textarea})\n }\n\n #update({currentTarget}) {\n currentTarget.parentNode.dataset.content = currentTarget.value\n }\n}\n","/*\n\n // Input drive Current and Length (event input + Init connect)\n
\n \n \n 0/0\n \n
\n\n // Need to Reset (example: clearable input)\n \n */\n\nimport {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['input', 'current', 'length']\n\n connect() {\n this.lengthTarget.textContent = this.inputTarget.maxLength\n this.update()\n }\n\n update() {\n this.currentTarget.textContent = this.inputTarget.value.length\n }\n\n reset() {\n this.currentTarget.textContent = 0\n }\n}\n","/*\n \n \n \n \n */\n\nimport {Controller} from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n button = null\n input = null\n wrapper = null\n\n connect() {\n this.button = this.element.querySelector('button')\n this.input = this.button.previousElementSibling\n this.wrapper = this.input.parentNode\n this.button.addEventListener('click', () => this.#clear())\n }\n\n #clear () {\n this.input.value = ''\n this.wrapper.dataset.content = ''\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['panel']\n\n toggle(event) {\n const isHidden = !event.currentTarget.checked\n this.panelTarget.toggleAttribute('hidden', isHidden)\n isHidden && (this.panelTarget.querySelector('input').value = '')\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['panel', 'validator']\n connect() {\n this.element.querySelectorAll('input[type=radio]').forEach( radio => {\n radio.addEventListener('change', (event) => this.#toggle(event))\n })\n }\n\n disconnect() {\n this.element.querySelectorAll('input[type=radio]').forEach( radio => {\n radio.removeEventListener('change', (event) => this.#toggle(event))\n })\n }\n\n #toggle(event) {\n this.panelTarget.toggleAttribute('hidden', event.currentTarget!==this.validatorTarget)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n initialize() {\n this.form = this.element.closest('form')\n }\n\n connect() {\n this.update()\n }\n\n update() {\n const userTypes = [...this.form.querySelectorAll('[data-user-type-id]:checked')].map(cb => parseInt(cb.dataset.userTypeId))\n\n if (userTypes.length == 1 && userTypes.includes(2)) {\n this.#toggleFemale(false)\n this.#toggleMale(true)\n } else if (!userTypes.includes(1) && !userTypes.includes(2) && userTypes.length > 0) {\n this.#toggleFemale(true)\n this.#toggleMale(false)\n } else {\n this.#toggleFemale(false)\n this.#toggleMale(false)\n }\n }\n\n #toggleFemale(disabled) {\n this.#toggle('female', disabled)\n }\n\n #toggleMale(disabled) {\n this.#toggle('male', disabled)\n }\n\n #toggle(type, disabled) {\n this.form.querySelectorAll(`[data-disabled-for-gender=\"${type}\"]`).forEach(e => e.toggleAttribute('disabled', disabled))\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport emoticonize from 'libs/utils/emoticonize'\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener('keyup', this.#emoticonize)\n }\n\n #emoticonize(event) {\n const node = event.target\n let text = node.value\n let position = node.selectionStart - text.length\n text = emoticonize(text)\n position += text.length\n node.value = text\n node.setSelectionRange(position, position)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['input', 'icon']\n\n toggle() {\n const isPassword = this.inputTarget.type === 'password';\n this.inputTarget.type = isPassword ? 'text' : 'password';\n this.iconTarget.classList.toggle('show--off', isPassword);\n this.iconTarget.classList.toggle('show--on', !isPassword);\n\n }\n}\n","/*\n\n data-controller=\"form--limit-choice\"\n data-form--limit-choice-max-value=\"8\"\n\n Example:\n\n \n <% UserDetail::bitfields[:swinging].keys.each_with_index do |swinging_type, i|%>\n \n <% end %>\n \n */\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n static values = {\n max: Number\n }\n\n checkboxes = null\n connect() {\n this.checkboxes = [...this.element.querySelectorAll('input[type=\"checkbox\"]')]\n this.element.addEventListener('change', (event) => {\n if (event.target.type === 'checkbox') this.#toggleSwitch()\n })\n this.#toggleSwitch()\n }\n\n #toggleSwitch() {\n this.checkboxes.map(checkbox => {\n checkbox.parentElement.toggleAttribute('disabled', !checkbox.checked && this.#checkMax() >= this.maxValue)\n })\n }\n\n #checkMax() {\n return this.checkboxes\n .filter(checkbox => checkbox.checked)\n .reduce((sum, checkbox) => sum + parseInt(checkbox.value, 10), 0)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n reset() {\n this.element.reset()\n }\n}\n","import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['switch', 'panel']\n static checkboxes = null\n\n connect() {\n this.checkboxes = this.panelTarget.querySelectorAll('input[type=\"checkbox\"]')\n\n this.switchTarget.addEventListener(\"change\", () => this.#toggleSwitch() )\n this.checkboxes.forEach(checkbox => checkbox.addEventListener('change', () => this.#toggleType(event)))\n\n this.#toggleType()\n }\n\n disconnect() {\n this.switchTarget.removeEventListener(\"change\", () => this.#toggleSwitch() )\n this.checkboxes.forEach(checkbox => checkbox.removeEventListener('change', () => this.#toggleType(event)))\n }\n\n #toggleSwitch () {\n const isChecked = this.switchTarget.checked\n this.panelTarget.toggleAttribute('hidden', !isChecked)\n this.checkboxes.forEach(checkbox => checkbox.checked = isChecked)\n }\n\n #toggleType() {\n const isSomeChecked = [...this.checkboxes].some(checkbox => checkbox.checked)\n this.panelTarget.toggleAttribute('hidden', !isSomeChecked)\n this.switchTarget.checked = isSomeChecked\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = { selector: String }\n\n connect() {\n this.element.addEventListener('change', () => this.#populate(event) )\n }\n\n #populate(event) {\n document.querySelector(this.selectorValue).value = event.target.value\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport noUiSlider from 'nouislider'\n\nexport default class extends Controller {\n static targets = ['slider', 'inputMin', 'inputMax']\n\n connect() {\n this.slider = noUiSlider.create(this.sliderTarget, {\n start: [this.inputMinTarget.value, this.inputMaxTarget.value],\n connect: true,\n step: 1,\n margin: 5,\n range: { 'min': 18, 'max': 99 }\n })\n\n this.slider.on('update', (values, handle) => {\n this.sliderTarget.querySelector(`[data-handle='${handle}'`).dataset.label = parseInt(values[handle])\n })\n\n this.slider.on('set', (values) => {\n [this.inputMinTarget.value, this.inputMaxTarget.value] = values.map(d => parseInt(d, 10))\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport noUiSlider from 'nouislider'\n\nexport default class extends Controller {\n static targets = ['slider', 'input']\n\n connect() {\n this.slider = noUiSlider.create(this.sliderTarget, {\n start: this.inputTarget.value,\n connect: 'lower',\n step: 1,\n margin: 5,\n range: { 'min': 0, 'max': 200 }\n })\n\n this.slider.on('update', (values, handle) => {\n this.sliderTarget.querySelector(`[data-handle='${handle}'`).dataset.label = parseInt(values[handle])\n })\n\n this.slider.on('set', (values) => {\n this.inputTarget.value = parseInt(values[0])\n })\n }\n\n setDefaultRadius(event) {\n const radius = event.detail.radius || 50\n this.slider.set(radius)\n }\n}\n","/*\n UI COMPONENT: Gender Filter Accordion management\n ---------------------------------------------------\n Compound Component : List custom Toggle + Linked Accordion + Toggle list\n All part are linked.\n\n HTML Structure\n ---------------------------------------------------\n \n\n // Part 1 - TOP\n \n
  • \n \n
  • \n [Continueโ€ฆ]\n
    \n\n // Part 2 - BOTTOM\n
    \n
    \">\n gender-filter#togglePanel:prevent\">\n \n \n \n\n // Part 3 - CONTENT (TOGGLE LIST)\n \n \n [Continueโ€ฆ]\n \n
    \n [Continueโ€ฆ]\n
    \n
    \n */\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['typeCheckbox', 'accordion', 'accordionPanel']\n\n connect() {\n this.accordionPanelTargets.forEach(\n (panel, index) => {\n panel.querySelectorAll('.toggle-button').forEach(\n button => button.addEventListener('change', () => this.#toggleChoice(panel, index))\n )\n this.#toggleChoice(panel, index);\n }\n )\n }\n\n toggleType(event) {\n const {index} = event.params\n const checked = event.currentTarget.checked\n const toggles = this.accordionTargets[index]?.querySelectorAll('input[type=\"checkbox\"]')\n toggles?.forEach(toggle => toggle.checked = checked)\n }\n\n #toggleChoice(panel, index) {\n const checkboxes = panel.querySelectorAll('input[type=\"checkbox\"]')\n this.typeCheckboxTargets[index].checked = [...checkboxes].some(checkbox => checkbox.checked)\n this.typeCheckboxTargets[index].dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n togglePanel({params: {index}}) {\n this.accordionTargets.forEach((panel, current) => panel.open = index === current ? !panel.open : false)\n }\n}\n","/*\n History management\n*/\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n // History\n addAnchorToCurrentState(event) {\n const anchor = event.currentTarget.dataset.anchor\n let url = new URL(window.location.href)\n url.hash = anchor\n // Use Turbo internals to generate a proper restoration state\n Turbo.navigator.history.update(history.replaceState, url)\n }\n}\n","import { Application } from '@hotwired/stimulus'\nimport { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'\n\nconst application = Application.start()\nconst context = require.context('.', true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n","/*\n Load url with Turbo Stream headers when element\n intersect with viewport or custom container\n ---------------------------------------------------\n\n
    \">\n
    \n\n Parameters\n ---------------------------------------------------\n data-load-on-intersection-url-value=\"url\"\n data-load-on-intersection-root-value=\"#selector\" (optional)\n data-load-on-intersection-root-margin-value=\"200px\" (optional)\n*/\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = { url: String, root: String, rootMargin: String }\n\n initialize() {\n const options = {\n root: (this.rootValue ? document.querySelector(this.rootValue) : null),\n rootMargin: this.rootMarginValue || '50%'\n }\n\n this.intersectionObserver = new IntersectionObserver(entries => this.processIntersectionEntries(entries), options)\n }\n\n connect() {\n this.intersectionObserver.observe(this.element)\n }\n\n disconnect() {\n this.intersectionObserver.unobserve(this.element)\n }\n\n processIntersectionEntries(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.load()\n }\n })\n }\n\n load() {\n fetch(this.urlValue, { headers: { accept: 'text/vnd.turbo-stream.html', 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.text())\n .then((data) => {\n Turbo.renderStreamMessage(data)\n })\n .then(_ => history.replaceState(history.state, '', this.urlValue))\n }\n}\n","/*\n UI COMPONENT: Menu open/close management\n ---------------------------------------------------\n */\nimport {Controller} from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n // $(document).on 'click', '[data-menu-burger]', (e) ->\n // $('body').toggleClass 'navigation-menu--open'\n\n // $(document).on 'click', '[data-menu] a', (e) ->\n // $('body').removeClass 'navigation-menu--open'\n \n toggle() {\n document.body.toggleAttribute('menu-is-open')\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Toast from 'libs/toast'\n\nexport default class extends Controller {\n open() {\n this._toggle(true)\n }\n\n close(event) {\n const response = event.detail?.fetchResponse?.response\n\n if (event.type == 'turbo:submit-end') {\n const headers = response.headers\n if (headers.get('x-message'))\n new Toast(decodeURIComponent(escape(headers.get('x-message'))), { type: headers.get('x-message-type') }).show()\n\n if (!event.detail.success) return\n else if (headers.get('redirect-to')) this.#redirect(headers.get('redirect-to'))\n }\n\n if (response?.status != 206) // Do not close on Partial Content\n this._toggle(false)\n }\n\n #redirect(url) {\n history.pushState(\n { turbo_frame_history: true },\n '',\n url\n )\n\n Turbo.visit(url)\n }\n\n _toggle(state) {\n this.element.toggleAttribute('hidden', !state)\n document.body.classList.toggle('modal-is-open', state) // Main scroll lock\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n panels = null\n form = null\n\n connect() {\n this.form = this.element.querySelector('fieldset')\n this.panels = this.element.querySelectorAll('panel-buttons')\n }\n\n toggle() {\n this.panels.forEach(panel => panel.toggleAttribute('hidden'))\n this.form.toggleAttribute('disabled')\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['day', 'month', 'year', 'error']\n\n check(event) {\n const birthDate = new Date(this.yearTarget.value, this.monthTarget.value, this.dayTarget.value)\n birthDate.setFullYear(birthDate.getFullYear() + 18)\n\n if (!this.yearTarget.value) {\n this.errorTarget.classList.remove('hidden')\n event.stopImmediatePropagation()\n } else if (birthDate > new Date()) {\n location.href = 'https://www.google.fr'\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [ 'product', 'newProduct', 'confirm' ]\n\n connect() {\n this.productTargets.forEach((element) => {\n element.addEventListener('click', () => { this.selectProduct(element) })\n })\n }\n\n selectProduct(product) {\n this.productTargets.forEach((element) => element.firstElementChild.removeAttribute('active'))\n product.firstElementChild.toggleAttribute('active', true)\n\n this.newProductTarget.firstElementChild.replaceWith(product.firstElementChild.cloneNode(true))\n\n this.confirmTarget.querySelector('form').elements['product_id'].value = product.dataset.productId\n this.confirmTarget.removeAttribute('hidden')\n\n //this.confirmTarget.scrollIntoView({ behavior: 'smooth', block: \"end\" })\n\n const elementTop = this.confirmTarget.getBoundingClientRect().top + window.scrollY\n const offset = 55 // 55 = header height - 1px (hr)\n window.scrollTo({ top: elementTop - offset, behavior: 'smooth' })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static values = {\n target: String,\n backPath: String\n }\n\n use(event) {\n const sentense = document.getElementById(event.currentTarget.dataset.target).innerText\n\n if (this.targetValue) {\n const target = document.getElementById(this.targetValue)\n const [start, end] = [target.selectionStart, target.selectionEnd]\n target.setRangeText(sentense, start, end, 'end')\n target.dispatchEvent(new Event('input'))\n target.focus()\n } else if(this.backPathValue) {\n const frame = this.element.closest('turbo-frame#modal')\n if (!frame) return\n\n frame.src = `${this.backPathValue}?text=${encodeURIComponent(sentense)}`\n frame.reload()\n event.stopImmediatePropagation()\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { loadStripe } from '@stripe/stripe-js/pure'\nimport { MeConfig } from 'config.js'\n\nexport default class extends Controller {\n static targets = [ 'product', 'stripe', 'stripeElements', 'stripeError', 'stripeSubmit', 'selectedAmount', 'selectedDuration' ]\n\n connect() {\n if (!this.hasProductTarget) return\n\n this.paymentIntent = null\n this.stripeElements = null\n this.stripeOptions = JSON.parse(this.stripeTarget.dataset.options)\n delete this.stripeTarget.dataset.options\n\n loadStripe(MeConfig.stripe.publicKey).then(stripe => this.stripe = stripe)\n\n this.productTargets.forEach((element) => {\n element.addEventListener('click', () => { this.selectProduct(element) })\n })\n }\n\n selectProduct(product) {\n this.productTargets.forEach((element) => element.firstElementChild.removeAttribute('active'))\n product.firstElementChild.toggleAttribute('active', true)\n\n this.#disableStripeSubmit()\n\n const url = new URL(product.dataset.url)\n if (this.paymentIntent) // Reuse existing intent if exists\n url.search = new URLSearchParams({ stripe_pi: this.paymentIntent }).toString()\n\n fetch(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.json())\n .then(data => {\n this.selectedDurationTarget.textContent = I18n.t('js.subscriptions.duration')[data.duration]\n this.selectedAmountTarget.textContent = data.amount.toLocaleString(I18n.locale, { style: 'currency', currency: 'EUR', minimumFractionDigits: Math.ceil(data.amount % 1) * 2 })\n\n if (this.stripeElements) {\n this.stripeElements.fetchUpdates().then(() => {\n this.#enableStripeSubmit();\n this.stripeTarget.scrollIntoView({ behavior: 'smooth' })\n })\n } else {\n this.#initStripeElements(data.client_secret)\n }\n })\n }\n\n #initStripeElements(clientSecret){\n this.stripeElements = this.stripe.elements({\n clientSecret,\n appearance: { variables: { colorPrimary: window.getComputedStyle(document.documentElement).getPropertyValue('--color-payment-form') } }\n })\n\n const paymentElements = this.stripeElements.create('payment', { fields: { billingDetails: { name: 'auto', email: 'never', address: 'never' } }, terms: { card: 'never' } });\n paymentElements.on('ready', () => {\n this.stripeTarget.removeAttribute('hidden')\n this.#enableStripeSubmit()\n this.stripeTarget.scrollIntoView({ behavior: 'smooth' })\n })\n paymentElements.mount(this.stripeElementsTarget)\n\n const paymentIntent = clientSecret.split('_secret_')[0]\n\n this.stripeTarget.querySelector('form').addEventListener('submit', (event) => {\n event.preventDefault()\n this.#disableStripeSubmit();\n\n this.stripe.confirmPayment({\n elements: this.stripeElements,\n confirmParams: {\n return_url: this.stripeOptions.returnUrl,\n payment_method_data: {\n billing_details: {\n email: this.stripeOptions.user_email, phone: '',\n address: { city: '', country: this.stripeOptions.user_country, line1: '', line2: '', postal_code: '', state: '' }\n }\n }\n }\n }).then((result) => {\n if (result.error) {\n if (result.error.type !== 'validation_error') { this.stripeError.textContent = result.error.message }\n this.#enableStripeSubmit()\n }\n })\n })\n }\n\n #enableStripeSubmit(){\n this.stripeSubmitTarget.removeAttribute('disabled')\n }\n\n #disableStripeSubmit(){\n this.stripeSubmitTarget.toggleAttribute('disabled', true)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n offset = 24\n\n initialize() {\n this.observer = null\n }\n\n connect() {\n this.#scrollIntoView(this.element.querySelector('[active]'))\n\n this.observer = new MutationObserver((mutationList, _observer) => {\n mutationList.some((mutation) => {\n const match = mutation.type == 'attributes' && mutation.attributeName == 'active' && mutation.target.hasAttribute('active')\n if (match) this.#scrollIntoView(mutation.target)\n return match\n })\n })\n this.observer.observe(this.element, { attributes: true, subtree: true, attributeFilter: ['active'] })\n }\n\n disconnect() {\n this.observer.disconnect()\n }\n\n #scrollIntoView(element) {\n if (!element) return\n\n const container = element.parentNode\n const child_offsetRight = element.offsetLeft + element.offsetWidth;\n const container_scrollRight = container.scrollLeft + container.offsetWidth\n\n if (container.scrollLeft > element.offsetLeft) {\n container.scrollLeft = element.offsetLeft - this.offset\n } else if (container_scrollRight < child_offsetRight) {\n container.scrollLeft += child_offsetRight - container_scrollRight + this.offset\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect() {\n this.element.scrollIntoView()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n connect() {\n window.addEventListener('scroll', () => this.#checkScroll())\n }\n\n disconnect() {\n window.removeEventListener('scroll', () => this.#checkScroll())\n }\n\n go () {\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n })\n }\n\n #checkScroll() {\n this.#display(window.scrollY > window.innerHeight * 2)\n }\n\n #display (toggle) {\n this.element.toggleAttribute('show', toggle)\n }\n}\n","/*\n UI COMPONENT: Slider in Infotainment Cards\n ---------------------------------------------------\n\n Stimulus API in HTML\n ---------------------------------------------------\n data-action=\"slider#prev\"\n data-action=\"slider#next\"\n */\nimport { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n imagesDisplay = 2\n imagesLength\n imageWidth\n scrollIndex = 0\n scroller\n prevButton\n nextButton\n\n connect() {\n const images = this.element.querySelectorAll('infotainment-picture > img')\n this.imagesLength = images.length\n this.imageWidth = images[0].clientWidth\n\n this.scroller = this.element.querySelector('infotainment-picture')\n this.scroller.addEventListener('scroll', () => this.#scrollHandler())\n\n this.prevButton = this.element.querySelector('infotainment-pictures > button.start')\n this.nextButton = this.element.querySelector('infotainment-pictures > button.end')\n\n this.#reset()\n }\n\n prev() {\n this.scrollIndex = Math.max(this.scrollIndex - this.imagesDisplay, 0)\n this.#scroll()\n }\n\n next() {\n this.scrollIndex = Math.min(this.scrollIndex + this.imagesDisplay, this.imagesLength - this.imagesDisplay)\n this.#scroll()\n }\n\n #scroll() {\n this.scroller.scrollTo({\n left: this.scrollIndex * this.imageWidth,\n behavior: 'smooth'\n })\n this.#updateButtonState()\n }\n\n #scrollHandler() {\n this.scrollIndex = Math.round(this.scroller.scrollLeft / this.imageWidth)\n this.#updateButtonState()\n }\n\n #updateButtonState() {\n this.prevButton.disabled = this.scrollIndex === 0\n this.nextButton.disabled = this.scrollIndex >= this.imagesLength - this.imagesDisplay\n }\n\n #reset() {\n this.scroller.scrollTo({\n left: 0,\n })\n this.#updateButtonState()\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n slider = null\n slideWidth = 0\n slidesCount = 0\n interval = null\n index = 0\n buttons = null\n\n connect() {\n this.slider = this.element.querySelector('slider-stripe')\n this.slideWidth = this.element.clientWidth\n this.slidesCount = this.slider.querySelectorAll('tips-card').length\n\n if (this.slidesCount < 2) return\n\n this.#startAutoSlide()\n this.slider.addEventListener('touchstart', () => this.#stopAutoSlide())\n this.slider.addEventListener('scroll', () => this.#scrollHandler())\n this.slider.addEventListener('wheel', (event) => { if (Math.abs(event.deltaX) > 1) this.#stopAutoSlide() })\n\n this.#createSliderNav(this.slidesCount)\n this.buttons = this.element.querySelectorAll('slider-nav>button')\n }\n\n #scroll() {\n this.slider.scrollTo({\n left: this.index * this.slideWidth,\n behavior: 'smooth'\n })\n }\n\n #startAutoSlide() {\n this.interval = setInterval(() => this.#autoSlide(), 3000)\n }\n\n #stopAutoSlide() {\n clearInterval(this.interval)\n }\n\n #stopAutoSlideAfterLoop() {\n if (this.index === this.slidesCount - 1) this.#stopAutoSlide()\n }\n\n #autoSlide() {\n this.#stopAutoSlideAfterLoop()\n\n this.index = (this.index + 1) % this.buttons.length;\n\n this.#scroll()\n this.#updateButtonState()\n }\n\n #scrollHandler() {\n this.index = Math.round(this.slider.scrollLeft / this.slideWidth)\n this.#updateButtonState()\n }\n\n #buttonHandler(button, index) {\n button.index = index\n button.addEventListener('click', () => {\n this.index = button.index\n this.#stopAutoSlide()\n this.#scroll()\n this.#updateButtonState()\n })\n }\n\n #updateButtonState() {\n this.buttons.forEach((button, index) => button.toggleAttribute('active', index === this.index))\n }\n\n #createButton(label, active=false) {\n const button = document.createElement('button')\n if (active) button.setAttribute('active', '')\n\n const span = document.createElement('span')\n span.classList.add('sr-only')\n span.textContent = label\n button.appendChild(span)\n\n return button;\n }\n\n #createSliderNav(count=1) {\n const nav = document.createElement('slider-nav');\n\n let index = 0;\n while (index < count) {\n const button = this.#createButton(index, index === 0)\n nav.appendChild(button)\n this.#buttonHandler(button, index)\n index++\n }\n\n this.element.appendChild(nav)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n\n connect() {\n this.buttons = this.element.querySelectorAll('switch-nav > button')\n this.sections = this.element.querySelectorAll('info-group')\n\n this.buttons.forEach(button => button.addEventListener('click', () => {\n this.#toggleInfos()\n this.#toggleButtons(button.dataset.target)\n }))\n }\n\n #toggleButtons (target) {\n this.buttons.forEach( button => button.toggleAttribute('active', target === button.dataset.target))\n }\n\n #toggleInfos () {\n this.sections.forEach( section => section.toggleAttribute('hidden'))\n }\n}\n","/*\n UI COMPONENT: Switch tabs/panel management\n ---------------------------------------------------\n\n \n \n \n \n \n \n \n \n \n \n\n ---------------------------------------------------\n Open tab - remove attribute \"hidden\"\n Active button - attribute \"active\"\n\n Stimulus API in HTML\n ---------------------------------------------------\n data-tabs--switch-panel-target=\"trigger\"\n data-action=\"tabs--switch-panel#toggle\"\n*/\nimport {Controller} from '@hotwired/stimulus';\n\nexport default class extends Controller {\n static targets = ['trigger', 'panel'];\n\n toggle({currentTarget}) {\n this.triggerTargets.forEach(button => button.toggleAttribute('active', button === currentTarget))\n this.panelTargets.forEach((panel, index) => panel.toggleAttribute('hidden', this.triggerTargets[index] !== currentTarget))\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Toast from 'libs/toast'\n\nexport default class extends Controller {\n\n connect() {\n new Toast(this.element.textContent, { type: this.element.getAttribute('type') }).show()\n this.element.remove()\n }\n}\n","/*\n\n \n <%= f.file_field :avatar, id: 'uploaded_file', data: { action: 'upload-media#preview' } %>\n <%= f.label :avatar, t('buttons.add_photo'), class: 'my-8 flex justify-center text-neutral-medium icon+text-label-md' do %>\n <%= t 'buttons.download_photo' %>\n <%end %>\n <%= hidden_field_tag :delete_file, false, data: { upload_media_target: 'delete' } %>\n \n \n \n <%= error_message_for f, :avatar %>\n\n*/\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['preview', 'delete']\n\n connect() {\n this.#setPreviewActive(this.previewTarget.src)\n }\n\n preview(event) {\n const node = event.currentTarget\n const file = node.files[0]\n if (!file) return\n\n if (file.type.startsWith('image/'))\n this.#previewImage(file)\n else if (file.type.startsWith('video/'))\n this.#previewVideo(file, node.dataset.previewFallback)\n else\n this.#setPreviewActive(false)\n }\n\n delete() {\n this.#setPreviewActive(false)\n this.previewTarget.src = ''\n }\n\n #previewImage(file) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n reader.onload = (event) => {\n this.previewTarget.src = event.target.result\n this.#setPreviewActive(true)\n }\n }\n\n #previewVideo(file, fallback) {\n const video = document.createElement('video')\n\n // Fire a seek event to make it work on Chrome\n video.addEventListener('loadedmetadata', () => {\n video.currentTime = video.duration > 5 ? 5 : video.duration / 2\n })\n\n video.addEventListener('seeked', () => {\n const canvas = document.createElement('canvas')\n canvas.width = video.videoWidth\n canvas.height = video.videoHeight\n const ctx = canvas.getContext('2d')\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height)\n canvas.toBlob((blob) => {\n this.previewTarget.src = URL.createObjectURL(blob)\n }, 'image/jpeg', 0.6)\n this.#setPreviewActive(true)\n }, { once: true })\n\n if (fallback) {\n video.addEventListener('error', () => {\n this.previewTarget.src = fallback\n this.#setPreviewActive(true)\n })\n }\n\n video.src = URL.createObjectURL(file)\n }\n\n #setPreviewActive(active = false) {\n this.element.toggleAttribute('uploaded', active)\n if (!active) this.previewTarget.removeAttribute('src')\n if (this.hasDeleteTarget)\n this.deleteTarget.value = !active\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n\n open({ params: { url} }) {\n const layer = document.createElement('layer-video')\n layer.innerHTML = this.#build(url)\n document.body.appendChild(layer)\n }\n\n #build(url) {\n return `\n \n \n \n `\n }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\"resize\", () => {\n this.#resize()\n })\n }\n\n #resize(){\n const video = this.element\n const width = video.videoWidth\n const height = video.videoHeight\n video.style.maxWidth = `${width}px`\n video.style.maxHeight = `${height}px`\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { pinia } from 'stores'\nimport { mapState } from 'pinia'\nimport { createApp } from 'vue'\nimport { useChatStore } from 'stores/chat_store'\n\nexport default class extends Controller {\n initialize() {\n this.app = createApp({\n name: 'ChatStatus',\n compilerOptions: { isCustomElement: tag => tag.includes('-') },\n computed: mapState(useChatStore, ['isConnected', 'status', 'conversationCount']),\n methods: {\n hide(){\n $.me.chat.hide()\n },\n\n toggle(){\n $.me.chat.toggle()\n },\n\n showNewMessages(){\n $.me.chat.showNewMessages()\n }\n }\n }).use(pinia)\n }\n\n connect() {\n this.app.mount(this.element)\n }\n\n disconnect() {\n this.app.unmount()\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { pinia } from 'stores'\nimport { mapState, mapStores } from 'pinia'\nimport { createApp } from 'vue'\nimport { useNotificationsStore } from 'stores/notifications_store'\nimport { useChatStore } from 'stores/chat_store'\n\nexport default class extends Controller {\n initialize() {\n this.app = createApp({\n name: 'NotificationBar',\n compilerOptions: { isCustomElement: tag => tag.includes('-') },\n computed: {\n ...mapState(useNotificationsStore, ['chatMessages', 'pmessages', 'kisses', 'formViews', 'friendships', 'testimonials', 'socialNotifications', 'events']),\n ...mapStores(useChatStore),\n requests() { return this.friendships + this.testimonials },\n all() { return this.kisses + this.formViews + this.friendships + this.testimonials + this.socialNotifications }\n },\n methods: {\n openChat(e) {\n if (this.chatMessages == 0) return\n e.preventDefault()\n return $.me.chat.selectConversationIfExists()\n },\n\n toggleChat() {\n return $.me.chat.toggle()\n },\n\n hideChat() {\n return $.me.chat.hide()\n },\n\n format(value, max) {\n if (max == null) max = 99\n if (value == 0) return ''\n if (value > max) return `${max}+`\n return value.toString()\n }\n }\n }).use(pinia)\n }\n\n connect() {\n this.app.mount(this.element)\n }\n\n disconnect() {\n this.app.unmount()\n }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport { createApp } from 'vue'\nimport userConsent from 'libs/user_consent'\n\nexport default class extends Controller {\n initialize() {\n this.app = createApp({\n name: 'UserConsent',\n compilerOptions: { isCustomElement: tag => tag.includes('-') },\n computed: {\n allConsents: {\n get() { return Object.values(this.consent).reduce((acc, cur) => (acc && cur), true) },\n set(value) { Object.keys(this.consent).forEach(key => this.consent[key] = value) }\n }\n },\n data() {\n return {\n bannerVisible: false,\n modalOpened: false,\n consent: userConsent.defaultConsent\n }\n },\n methods: {\n showDetails(){ this.modalOpened = true },\n\n hideDetails(){ this.modalOpened = false },\n\n save(){\n userConsent.setCookie(this.consent)\n userConsent.sendToGtm()\n this.hideDetails()\n this.bannerVisible = false\n },\n\n acceptAll(){\n this.allConsents = true\n this.save()\n },\n\n refuseAll(){\n this.allConsents = false\n this.save()\n }\n },\n mounted(){\n const consent = userConsent.getCookie()\n if (consent)\n this.consent = consent\n else\n this.bannerVisible = true\n\n this.$el.parentNode.addEventListener('me:open', () => this.modalOpened = true)\n }\n })\n }\n\n connect() {\n this.app.mount(this.element)\n }\n\n disconnect() {\n this.app.unmount()\n }\n}\n","/*\n Dialog\n */\nimport { i18n } from 'locales/i18n'\n\nexport default class Dialog {\n constructor(message, options = {}) {\n this.message = message\n this.title = options.title\n this.okLabel = options.okLabel || i18n.t('buttons.ok')\n }\n\n show() {\n this.buildNode()\n\n document.body.appendChild(this.element)\n\n return new Promise((resolve, reject) => {\n this.element.querySelectorAll('[data-dialog-resolve]').forEach((button) => {\n button.addEventListener('click', (e) => {\n this.remove()\n resolve(e.target.dataset.dialogResolve === 'true')\n }, { once: true })\n })\n })\n }\n\n remove() {\n this.element.remove()\n }\n\n buildNode() {\n const placeholder = document.createElement('div')\n placeholder.innerHTML = this.template()\n if (this.message instanceof DocumentFragment)\n placeholder.querySelector('[data-dialog-message]').replaceWith(this.message)\n else\n placeholder.querySelector('[data-dialog-message]').innerHTML = this.message\n\n this.element = placeholder.firstElementChild\n }\n\n template() {\n return `\n \n \n \n \n ${this.templateContent()}\n \n \n \n \n `\n }\n\n templateContent() {\n return `\n ${this.templateTitle()}\n
    \n \n \n \n `\n }\n\n templateTitle() {\n return `

    ${this.title || ''}

    `\n }\n}\n","/*\n Geolocation\n*/\n\nclass Geolocation {\n lat = null\n lng = null\n #watcherHandler = null\n #timestamp = null\n\n start() {\n if (this.#watcherHandler) return\n\n this.#watcherHandler = navigator.geolocation.watchPosition(\n (position) => this.#success(position),\n (error) => this.#error(error)\n )\n }\n\n stop() {\n if (!this.#watcherHandler) return\n\n navigator.geolocation.clearWatch(this.#watcherHandler)\n this.#watcherHandler = null\n this.#timestamp = null\n }\n\n restart() {\n this.stop()\n this.start()\n }\n\n isAvailable() {\n return this.#timestamp != null\n }\n\n #success(position) {\n this.lat = position.coords.latitude\n this.lng = position.coords.longitude\n\n if (this.#timestamp && position.timestamp - this.#timestamp < 900000)\n return\n\n this.#timestamp = position.timestamp\n this.#updatePosition()\n\n const event = new CustomEvent('position:updated', { detail: { lat: this.lat, lng: this.lng } })\n document.dispatchEvent(event)\n }\n\n #error(error) {\n if (error.code == error.PERMISSION_DENIED) {\n this.stop()\n document.dispatchEvent(new Event('position:denied'))\n } else if (!this.isAvailable()) {\n document.dispatchEvent(new Event('position:unavailable'))\n }\n }\n\n #updatePosition() {\n fetch('/update_position', {\n method: 'PUT',\n headers: {\n 'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\").content,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n },\n body: JSON.stringify({ lat: this.lat, lng: this.lng })\n })\n }\n}\n\nexport default new Geolocation()\n","/*\n Toast message\n*/\n\nexport default class Toast {\n constructor(message, options = {}) {\n this.message = message\n this.type = options.type || 'notice'\n\n this.element = this.buildNode()\n }\n\n show() {\n document.body.appendChild(this.element)\n }\n\n close() {\n this.element.remove()\n }\n\n buildNode() {\n const node = document.createElement('toast-component')\n node.innerHTML = this.#template(this.type)\n node.addEventListener('animationend', () => this.close())\n node.querySelector('button').addEventListener('click', () => this.close())\n return node\n }\n\n #template(type) {\n return `\n \n ${this.message}\n \n \n `\n }\n}\n","/*\n User Consent Management\n*/\n\nconst userConsent = {\n defaultConsent: {\n analyticsStorage: false,\n adStorage: false,\n adUserData: false,\n adPersonalization: false,\n functionalityStorage: true,\n personalizationStorage: false,\n securityStorage: false\n },\n\n getCookie() {\n const cookies = Object.fromEntries(document.cookie.split('; ').map(v=>v.split(/=(.*)/s).map(decodeURIComponent)))\n if (!cookies['user_consent']) return undefined\n return JSON.parse(cookies['user_consent'])\n },\n\n setCookie(value) {\n const encodedValue = encodeURIComponent(JSON.stringify(value))\n const expiry = new Date()\n expiry.setTime(expiry.getTime() + (365 * 24 * 3600 * 1000))\n document.cookie = `user_consent=${encodedValue}; expires=${expiry.toUTCString()}; path=/`\n },\n\n sendToGtm() {\n const consent = userConsent.getCookie()\n userConsent.gtag('consent', 'update', userConsent.gtmConsent(consent || userConsent.defaultConsent))\n userConsent.gtag('event', 'cookie_consent_update')\n },\n\n start() {\n document.addEventListener('turbo:load', () => {\n userConsent.gtag('consent', 'default', userConsent.gtmConsent(userConsent.defaultConsent))\n userConsent.sendToGtm()\n })\n },\n\n gtmConsent(consent) {\n return Object.fromEntries(\n Object.entries(consent).map(\n ([k, v]) => [k.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(), v ? 'granted' : 'denied']\n )\n )\n },\n\n gtag(){ dataLayer?.push(arguments) }\n}\n\nexport default userConsent","const emojiPatterns = {\n '๐Ÿ˜Š': \":\\\\\\)\",\n '๐Ÿ˜': \":D\",\n '๐Ÿ˜‰': \";[\\\\\\)D]{1}\",\n '๐Ÿ˜‚': \":'[\\\\\\)D]{1}\",\n '๐Ÿคฃ': \"[xX]{1}[\\\\\\)D]{1}\",\n '๐Ÿ˜': \":p\",\n '๐Ÿ˜': \"\\\\\\<3\",\n '๐Ÿ˜˜': \":[\\\\\\*x]{1}\",\n '๐Ÿ˜ฎ': \":[oO]{1}\",\n '๐Ÿ˜': \":\\\\\\|\",\n '๐Ÿ˜ž': \":\\\\\\(\",\n '๐Ÿ˜ข': \":'\\\\\\(\",\n '๐Ÿ˜ก': \">:[\\\\\\(\\\\\\[]{1}\",\n '๐Ÿ˜ตโ€๐Ÿ’ซ': \"%[|\\\\\\)]{1}\",\n '๐Ÿ˜ธ': \"\\\\\\^{2}\"\n}\n\nconst emojiMatchers = Object.fromEntries(\n Object.entries(emojiPatterns).map(\n ([emoji, pattern]) => [emoji, new RegExp(`(^|\\\\s)(${pattern})($|\\\\s)`, 'gi')]\n )\n)\n\nexport default function emoticonize(text) {\n for (const [emoji, matcher] of Object.entries(emojiMatchers) ) {\n text = text.replace(matcher, `$1${emoji}$3`)\n }\n return text\n}\n","import { I18n } from 'i18n-js'\nimport locales from './locales.json'\n\nexport const i18n = new I18n()\ni18n.store(locales)\ni18n.defaultLocale = 'fr'\ni18n.enableFallback = true\ni18n.locale = document.documentElement.lang","import { defineStore } from 'pinia'\n\nexport const useChatStore = defineStore('chat', {\n state: () => {\n return {\n isConnected: false,\n status: 0, // Disconnected, 1: Connected, 2: Conversations 3: New Messages, 4: WebRTC\n conversationCount: 0,\n isOpened: false,\n call: {\n enabled: false,\n kind: null\n }\n }\n },\n actions: {\n setChatOpen(isOpened) {\n this.isOpened = isOpened\n },\n\n setCall(enabled, kind) {\n this.call.enabled = enabled\n if (kind)\n this.call.kind = kind\n }\n }\n})\n","import { defineStore } from 'pinia'\n\nexport const useCommonStore = defineStore('common', {\n state: () => {\n return {\n currentUser: null,\n location: null,\n device: 0\n }\n },\n actions: {\n isDesktopDevice() {\n this.device == 0\n },\n\n isMobileDevice() {\n this.device == 1\n },\n\n isTabletDevice() {\n this.device == 2\n }\n }\n})\n","import { createPinia } from 'pinia'\n\nexport const pinia = createPinia()\n","import { defineStore } from 'pinia'\n\nexport const useNotificationsStore = defineStore('notifications', {\n state: () => {\n return {\n chatMessages: 0,\n pmessages: 0,\n kisses: 0,\n formViews: 0,\n friendships: 0,\n testimonials: 0,\n socialNotifications: 0,\n events: 0\n }\n },\n actions: {\n set(field, value) {\n this[field] = value\n },\n\n increment(field) {\n this[field]++\n return this[field]\n },\n\n decrement(field) {\n if (this[field] > 0)\n this[field]--\n return this[field]\n }\n }\n})\n","import { StreamActions } from '@hotwired/turbo'\nimport Toast from 'libs/toast'\n\nStreamActions.toast = function() {\n const message = this.getAttribute('message')\n const type = this.getAttribute('type')\n new Toast(message, { type: type }).show()\n}\n","import { StreamActions } from '@hotwired/turbo'\nimport Dialog from 'libs/dialog'\n\nStreamActions.dialog = function() {\n const message = this.templateContent\n const title = this.getAttribute('title')\n const redirectTo = this.getAttribute('redirect_to')\n const okLabel = this.getAttribute('ok_label')\n\n new Dialog(message, { title: title, okLabel: okLabel }).show().then(() => {\n if (!redirectTo) return\n\n if (window.ReactNativeWebView) {\n window.location.href = redirectTo\n } else {\n Turbo.visit(redirectTo)\n }\n })\n}\n","import { StreamActions } from '@hotwired/turbo'\n\nStreamActions.toggle_attribute = function() {\n const name = this.getAttribute('name')\n let force = this.getAttribute('force')?.toLowerCase()\n if (force) force = force === 'true'\n\n this.targetElements.forEach((e => e.toggleAttribute(name, force)))\n}\n\nStreamActions.set_attribute = function() {\n const name = this.getAttribute('name')\n const value = this.getAttribute('value')\n\n this.targetElements.forEach((e => e.setAttribute(name, value)))\n}\n\nStreamActions.toggle_css_class = function() {\n const classes = this.getAttribute('classes')\n let force = this.getAttribute('force')?.toLowerCase()\n if (force) force = force === 'true'\n\n this.targetElements.forEach((e => e.classList.toggle(classes, force)))\n}\n","#\n# Meeting Engine core JS\n#\n\n# import Rails from '@rails/ujs'\n# import { createApp } from 'vue/dist/vue.esm-bundler'\n# import { createStore, mapState } from 'vuex/dist/vuex.esm-bundler'\n# import Toast from 'libs/toast'\n\n$.me = $.me || {}\n$.extend true, $.me, {\n #----------------------------#\n # Execute a function by name #\n #----------------------------#\n executeByName: (name, context=@, args...) ->\n namespaces = name.split '.'\n fn = namespaces.pop()\n\n try\n context = context[namespace] for namespace in namespaces\n throw(false) unless $.isFunction context[fn]\n catch e\n return false\n\n context[fn].apply context, args\n\n #-----------------------------#\n # Execute the action callback #\n #-----------------------------#\n actionCallback: (controller, action) ->\n $.me.executeByName \"#{controller}.#{action}_act\" if controller && action\n\n #---------------------------------------------#\n # Execute the action callback from xhr object #\n #---------------------------------------------#\n # actionCallbackXhr: (xhr) -> @actionCallback xhr.getResponseHeader('X-Controller'), xhr.getResponseHeader('X-Action')\n\n # intersectionObserver: (callback, observe, options = {}) ->\n # return unless IntersectionObserver?\n # vpObserver = new IntersectionObserver callback, options\n # vpObserver.observe observe\n\n # $(document).one 'turbo:before-visit', ->\n # vpObserver.disconnect()\n\n # scrollIntoView: ($elmt, inWindow = true) ->\n # return unless MutationObserver?\n\n # position = $($elmt).position()\n # if position && position.top > $('body').height()\n # observer = new MutationObserver ->\n # if inWindow\n # window.scrollTo\n # top: position.top,\n # left: 0,\n # behavior: 'smooth'\n # else\n # $($elmt).get(0).scrollIntoView\n # behavior: 'smooth'\n\n # observer.disconnect()\n # return\n # observer.observe $('body').get(0),\n # childList: true\n # return\n\n #---------#\n # Storage #\n #---------#\n # TODO : Useless, to be Removed\n # storage:\n # set: (key, value) -> sessionStorage.setItem key, JSON.stringify(value)\n # get: (key) -> JSON.parse sessionStorage.getItem(key)\n # remove: (key) -> sessionStorage.removeItem(key)\n # clear: () -> sessionStorage.clear()\n # keyExists: (key) -> sessionStorage.getItem(key) isnt null\n\n jsonUtils:\n dateTimeFormat: /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?[Z\\+]{1}([\\d\\:]{5})?$/\n\n reviver: (key, value) ->\n if typeof value is 'string' && $.me.jsonUtils.dateTimeFormat.test(value)\n return new Date(value)\n else\n return value\n\n #---------------------------------------------------------------------------#\n # Extend UJS : update DOM on ajax:success with the following actions : #\n # update, prepend, append, replace, remove #\n # A selector should be provided in the data attribute #\n # A replace action without selector will replace the whole template #\n #---------------------------------------------------------------------------#\n # ujsExtended:\n # init: ->\n # $(document).on 'ajax:success', '[data-update],[data-prepend],[data-append],[data-replace],[data-remove],[data-multi-renderer]', (e) =>\n # [data, status, xhr] = e.detail if e.detail\n\n # if $.isPlainObject(data) and elmts = $(e.target).data('multi-renderer')\n # $.each elmts, (verb, selectors) =>\n # $.each selectors.split(','), (index, selector) =>\n # $elmt = $(selector)\n # if $elmt?\n # if verb == 'update' then $elmt.html data[selector.trim()]\n # else if verb == 'prepend' then $elmt.prepend data[selector.trim()]\n # else if verb == 'append' then $elmt.append data[selector.trim()]\n # else if verb == 'replace' then $elmt = $(data[selector.trim()]).replaceAll($elmt)\n\n # @_scroll_and_trigger e, $elmt\n # else if xhr\n # unless xhr.responseText and typeof xhr.responseText is 'string' and xhr.responseText.match(/^Turbo/)\n # if elmt = $(e.target).data 'remove'\n # $(elmt).trigger('me:domRemove').remove()\n # else\n # if (elmt = $(e.target).data 'update')?\n # if elmt\n # $(elmt).html xhr.responseText\n # else\n # elmt = '[data-main-container]'\n # $(elmt).html xhr.responseText\n # window.scrollTo 0,0\n # document.getElementById('container')?.scrollTo 0,0 # TODO : Cleanup this shitty mobile fix\n # $.me.actionCallbackXhr xhr\n # else if elmt = $(e.target).data 'prepend' then $(elmt).prepend xhr.responseText\n # else if elmt = $(e.target).data 'append' then $(elmt).append xhr.responseText\n # else if elmt = $(e.target).data 'replace' then elmt = $(xhr.responseText).replaceAll(elmt)\n\n # @_scroll_and_trigger e, elmt\n\n # _scroll_and_trigger: (e, elmt) ->\n # if elmt\n # if $(e.target).is('[data-scroll-to-elmt]') && $(e.target).data('scroll-to-elmt') != ''\n # scroll_to_elmt = $($(e.target).data('scroll-to-elmt')).get(0)\n # else if $(e.target).is('[data-scroll-to-elmt]')\n # scroll_to_elmt = $(elmt).get(0)\n\n # e.target.reset() if e.target.dataset.formReset\n\n # scroll_to_elmt.scrollIntoView({behavior: 'smooth', block: 'start'}) if scroll_to_elmt\n # $(elmt).trigger 'me:domChanged', elmt\n\n #---------------------------------#\n # Ajax file upload using FormData #\n #---------------------------------#\n # multipart:\n # init: ->\n # $(document).on 'submit', 'form[data-multipart]', (e) ->\n # f = $(e.target)\n # $.ajax({\n # url: f.attr('action'), data: new FormData(f.get(0)), cache: false, contentType : false, processData : false, type: 'POST',\n # beforeSend: (jqXHR, settings) ->\n # if Rails.fire(f.get(0), 'ajax:beforeSend', [jqXHR])\n # $(document).on 'click.lock', (e) ->\n # new Toast(I18n.t('js.upload.lock'), { type: 'alert' }).show()\n # e.preventDefault()\n\n # f.find('button').prop 'disabled', true\n # else\n # false\n # ,\n # complete: (data, status, xhr) ->\n # $(document).off 'click.lock'\n # f.find('button').prop 'disabled', false\n # f.trigger 'ajax:complete', [ data, status, xhr ]\n # $.me.restricted(data) if data.status is 402\n # ,\n # success: (data, status, xhr) ->\n # $(document).off 'click.lock'\n # f.trigger 'ajax:success', [ data, status, xhr ]\n # ,\n # xhr: ->\n # xhr = $.ajaxSettings.xhr()\n # xhr.upload.addEventListener 'progress', (e) ->\n # f.trigger 'me:upload:progress', [ e.loaded, e.total ]\n # , false\n # xhr\n # })\n # false\n\n #--------------#\n # Init objects #\n #--------------#\n init: (objects...) ->\n try\n @[object].init() for object in objects\n catch e\n\n #---------------------#\n # Generic queue class #\n #---------------------#\n # Queue: class\n # constructor: (@_data = []) ->\n # isEmpty: => @_data.length == 0\n # enqueue: (obj) => @_data.push obj\n # shift: => @_data.shift()\n # clear: => @_data = []\n # size: => @_data.length\n\n #------------#\n # Vuex store #\n #------------#\n # store:\n # init: ->\n # $.me.store = createStore()\n\n #---------------#\n # Flash message #\n #---------------#\n # flashMessage:\n # init: ->\n # @reset()\n # $(document).on 'ajax:success', (e) =>\n # return unless e.detail\n\n # xhr = e.detail[2]\n # data = xhr.responseText\n # unless data && typeof data is 'string' && data.match(/^Turbo/)\n # @_createFromXhr(xhr)\n # $(document).on 'ajax:error', (e) => @_createFromXhr(e.detail[2])\n # $(document).on 'click', '[data-flash-message]', (e) =>\n # return unless @_timer\n # clearTimeout(@_timer)\n # @_hide()\n\n # reset: ->\n # @_queue = new $.me.Queue\n # @_displaying = false\n # @\n\n # create: (message, type='notice') ->\n # if @_displaying\n # @_queue.enqueue arguments\n # else\n # @_node().off()\n # @_node().toggleClass 'message-flash--alert', type is 'alert'\n # @_message().text message\n # @_show()\n\n # createFromDom: ->\n # @_show() if !@_displaying && @_message().text()\n\n # _createFromXhr: (xhr) ->\n # if xhr.getResponseHeader('X-Message')\n # @create decodeURIComponent(escape(xhr.getResponseHeader('X-Message'))), xhr.getResponseHeader('X-Message-Type')\n\n # _node: -> $ '[data-flash-message]'\n\n # _message: -> @_node().find 'span'\n\n # _show: ->\n # @_displaying = true\n # @_node().forceDomRendering().addClass('is-show')\n # @_timer = setTimeout =>\n # @_hide()\n # , 3000\n\n # _hide: ->\n # @_timer = null\n # @_node().removeClass 'is-show'\n # @_node().one 'transitionend', => @_onHide()\n\n # _onHide: ->\n # @_node().removeClass 'message-flash--alert'\n # @_message().text ''\n # @_displaying = false\n # @create.apply @, @_queue.shift() unless @_queue.isEmpty()\n\n #------------------#\n # Sticker #\n #------------------#\n # sticker:\n # _$window: $(window),\n # _$html: $('html'),\n # # _trigger: 'is-sticky-subscribe'\n\n # init: ->\n # # @_$window.scroll =>\n # # @_setSticky @_$window, @_$html, @_getOffset(@_$window), @_trigger\n\n # @_$window.resize =>\n # offset = @_getOffset @_$window\n # # @_setSticky @_$window, @_$html, @_getOffset(@_$window), @_trigger\n\n # _getOffset: (viewport) ->\n # value = if viewport.outerWidth() >= 768 then 600 else 480\n # return value\n\n # _setSticky: (viewport, element, offset, trigger) ->\n # if viewport.scrollTop() >= @_getOffset(@_$window)\n # if !element.hasClass(trigger)\n # element.addClass trigger\n # else\n # element.removeClass trigger\n\n #---------#\n # Config #\n #---------#\n # config:\n # init: ->\n # @store = $.me.store\n # @store.registerModule 'config', {\n # state: -> {\n # currentUser: null,\n # location: null,\n # device: 0\n # },\n # mutations: {\n # loadCurrentUser: (state, currentUser) -> state.currentUser = currentUser\n # loadLocation: (state, location) -> state.location = location\n # loadDevice: (state, device) -> state.device = device\n # },\n # actions: {\n # loadCurrentUser: (context, currentUser) -> context.commit('loadCurrentUser', currentUser)\n # loadLocation: (context, location) -> context.commit('loadLocation', location)\n # loadDevice: (context, device) -> context.commit('loadDevice', device)\n # },\n # namespaced: true\n # }\n # @_load()\n\n # _load: ->\n # # Load config\n # $.getJSON '/app_config.json', (data) =>\n # @store.dispatch 'config/loadCurrentUser', data.config.current_user\n # @store.dispatch 'config/loadLocation', data.config.geolocation\n # @store.dispatch 'config/loadDevice', data.config.device\n # $(document).trigger 'me:configLoaded', data\n\n #------------------#\n # Notification bar #\n #------------------#\n # notifications:\n # vues: []\n\n # init: ->\n # @store = $.me.store\n # @store.registerModule 'notifications', {\n # state: -> {\n # chatMessages: 0\n # pmessages: 0\n # kisses: 0\n # formViews: 0\n # friendships: 0\n # testimonials: 0\n # socialNotifications: 0\n # events: 0\n # chat:\n # isOpened: false\n # call:\n # enabled: false\n # kind: null\n # },\n # mutations: {\n # set: (state, payload) -> state[payload.field] = payload.value\n # increment: (state, field) -> state[field] += 1\n # decrement: (state, field) -> state[field] -= 1\n # setChatOpen: (state, isOpened) -> state.chat.isOpened = isOpened\n # setCall: (state, payload) ->\n # state.chat.call.enabled = payload.enabled\n # state.chat.call.kind = payload.kind if payload?.kind\n # },\n # actions: {\n # set: (context, payload) -> context.commit('set', payload)\n # increment: (context, field) -> context.commit('increment', field)\n # decrement: (context, field) -> context.commit('decrement', field)\n # setChatOpen: (context, isOpened) -> context.commit('setChatOpen', isOpened)\n # setCall: (context, payload) -> context.commit('setCall', payload)\n # },\n # namespaced: true\n # }\n\n # @initBars()\n\n # $(document).on 'turbo:load', => @initBars() # Redo this shit\n # $(document).on 'me:configLoaded', (e, data) => @_loadStats(data.stats)\n\n # initBars: () ->\n # @vues.concat $('[data-notification-bar]').map (i, n) =>\n # delete n.dataset.notificationBar\n # createApp({\n # name: \"NotificationBar#{i + @vues.length + 1}\",\n # computed: $.extend(\n # mapState('notifications', ['chatMessages', 'pmessages', 'kisses', 'formViews', 'friendships', 'testimonials', 'socialNotifications', 'events', 'chat'])\n # {\n # requests: -> @friendships + @testimonials,\n # all: -> @kisses + @formViews + @friendships + @testimonials + @events + @socialNotifications,\n # }\n # ),\n # methods: {\n # openChat: (e) ->\n # return if @chatMessages is 0\n # e.preventDefault()\n # $.me.chat.selectConversationIfExists()\n\n # toggleChat: -> $.me.chat.toggle()\n\n # hideChat: -> $.me.chat.hide()\n\n # format: (value, max=100) ->\n # return '' unless value > 0\n # return \"#{max}+\" if value > max\n # value.toString()\n # }\n # }).use(@store).mount(n)\n\n # _loadStats: (stats) ->\n # @store.dispatch 'notifications/set', { field: 'pmessages', value: stats.new_pmessages_count }\n # @store.dispatch 'notifications/set', { field: 'kisses', value: stats.new_kisses_count }\n # @store.dispatch 'notifications/set', { field: 'formViews', value: stats.new_form_views_count }\n # @store.dispatch 'notifications/set', { field: 'friendships', value: stats.new_friends_count }\n # @store.dispatch 'notifications/set', { field: 'testimonials', value: stats.new_testimonials_count }\n # @store.dispatch 'notifications/set', { field: 'socialNotifications', value: stats.new_social_notifications_count }\n # @store.dispatch 'notifications/set', { field: 'events', value: stats.events_count }\n\n #----------------#\n # Trophy #\n #----------------#\n # trophy:\n # init: ->\n # return unless document.querySelector('#trophy')\n # @vue = createApp({\n # name: 'trophy',\n # data: -> {\n # trophy: 0,\n # points: 0,\n # _config: null\n # },\n # computed: {\n # trophyName: -> @_config.stages[@trophy].name if @trophy > 0 && @_config?\n # formatedPoints: ->\n # fp = new Intl.NumberFormat().format(@points) if Intl? && Intl.NumberFormat?\n # I18n.t 'js.trophy.points', { count: @points, points: fp or @points }\n # },\n # watch: {\n # points: (n, o) ->\n # return unless @_config.stages[@trophy + 1]? && n >= @_config.stages[@trophy + 1].points\n # $.ajax(url: '/pages/trophy', method: 'put').done (data) =>\n # if data.updated\n # @trophy = data.trophy\n # else\n # @points = data.points\n # }\n # }).mount('#trophy')\n\n # $(document).on 'me:notification', (e, args) => @_updatePoints(args.type)\n # $(document).on 'me:configLoaded', (e, data) => @_load(data)\n\n # _updatePoints: (type) ->\n # return unless @vue._config?\n # np = @vue._config.reckoner[type]\n\n # return unless np?\n # @vue.points += np\n\n # _load: (data) ->\n # @vue.trophy = data.stats.trophy\n # @vue.points = data.stats.trophy_points\n # @vue._config = data.config.trophy\n\n #--------------------#\n # Sentences #\n #--------------------#\n # sentences:\n # init: ->\n # @store = $.me.store\n # @store.registerModule 'sentences', {\n # state: -> {\n # list: []\n # },\n # mutations: {\n # load: (state, sentences) -> state.list = sentences\n # },\n # actions: {\n # load: (context, sentences) -> context.commit('load', sentences)\n # },\n # namespaced: true\n # }\n\n # $(document).on 'me:configLoaded', (e, data) => @_load(data.config.sentences)\n\n # _load: (sentences) -> @store.dispatch 'sentences/load', sentences\n\n #--------------------#\n # Emoji #\n #--------------------#\n # emoji:\n # library:\n # '๐Ÿ˜Š': \":[\\\\\\)D]{1}\"\n # '๐Ÿ˜‰': \";[\\\\\\)D]{1}\"\n # '๐Ÿ˜‚': \":'[\\\\\\)D]{1}\"\n # '๐Ÿ˜': \":p\"\n # '๐Ÿ˜': \"\\\\\\<3\"\n # '๐Ÿ˜ฒ': \":o\"\n # '๐Ÿ˜–': \":\\\\\\|\"\n # '๐Ÿ˜ž': \":\\\\\\(\"\n # '๐Ÿ˜ข': \":'\\\\\\(\"\n # '๐Ÿ˜ธ': \"\\\\\\^{2}\"\n\n # init: ->\n # @library[k] = new RegExp \"(^|\\\\s)(#{e})($|\\\\s)\", 'gi' for k, e of @library\n # $(document).on 'keyup', 'textarea[data-emoticonize]', (e) => @_emoticonizeInput(e.currentTarget)\n\n # emoticonize: (text) ->\n # text = text.replace(e, \"$1#{k}$3\") for k, e of @library\n # text\n\n # _emoticonizeInput: (node) ->\n # text = node.value\n # curPos = node.selectionStart\n # curLength = text.length\n # text = @emoticonize(text)\n # node.value = text\n # newPos = curPos + text.length - curLength\n # node.setSelectionRange(newPos, newPos)\n\n #--------------------#\n # Field char counter #\n #--------------------#\n # fieldCharCounter:\n # _data_attr: 'char-counter'\n # _selector: '[data-char-counter]'\n\n # init: ->\n # $(document).on 'keyup', @_selector, (e) =>\n # @_count($(e.target))\n # return true\n\n # $(document).on 'me:domChanged', (e) =>\n # $(@_selector).each (i, elmt) =>\n # @_count($(elmt))\n # return true\n\n # _count: (target) ->\n # $(target.data(@_data_attr)).text target.val().length\n\n #----------#\n # Dropdown #\n #----------#\n # dropdown:\n # init: ->\n # $(document).on 'click', '[data-dropdown-trigger]', (e) => @_toggle($(e.currentTarget))\n\n # _toggle: (target) ->\n # elmt = if target.attr('data-dropdown-trigger') isnt ''\n # $(target.attr('data-dropdown-trigger'))\n # else\n # target.closest('[data-dropdown]')\n\n # isOpen = elmt.hasClass 'is-open'\n # if isOpen\n # elmt.removeClass 'is-open'\n # else\n # @_closeAll()\n # elmt.addClass 'is-open'\n # $('body').on 'click.me.dropdown', (e) =>\n # return if $(e.target).is('[data-dropdown-panel]') || $(e.target).closest('[data-dropdown-trigger]').length > 0\n # @_closeAll()\n\n # _closeAll: (target) ->\n # $('[data-dropdown],[data-dropdown-panel]').removeClass 'is-open'\n # $('body').off 'click.me.dropdown'\n\n #------------------------#\n # Remove errors messages #\n #------------------------#\n removeFieldWithError:\n _selector: '[data-error-message], [data-field=with-error] input, [data-field=with-error] select, [data-field=with-error] textarea'\n\n init: ->\n $(document).on 'change', @_selector, (e) => @_remove($(e.target))\n\n removeAll: ($container = null) ->\n $nodes = if $container == null then $(@_selector) else $(@_selector, $($container))\n $nodes.each (i, elmt) =>\n @_remove $(elmt)\n\n _remove: ($target) ->\n _id = if $target.data('error-message') then $target.data('error-message') else $target.attr('id')\n\n # Replace error node with its children node\n while $target.closest('.field_with_errors').length > 0\n $_error_node = $target.closest('.field_with_errors')\n $_children_node = $_error_node.children()\n\n $_error_node.replaceWith $_children_node\n\n if _id\n $('[data-field-error=\"' + _id + '\"]').remove() if $('[data-field-error=\"' + _id + '\"]').length > 0\n\n #----------------------#\n # Auto height textarea #\n #----------------------#\n # textareaAutoHeight:\n # _selector: '[data-behavior=textarea-auto-height]'\n\n # init: ->\n # $(document).on 'focus', @_selector, (e) ->\n # $(e.currentTarget).attr('rows', 2)\n\n # $(e.currentTarget).off('input keyup').on 'input keyup', (e) ->\n # $textarea = $(e.currentTarget).get 0\n\n # if $textarea.clientHeight < $textarea.scrollHeight\n # $(e.currentTarget).css 'height', \"#{$textarea.scrollHeight}px\"\n\n # if $textarea.clientHeight < $textarea.scrollHeight\n # $(e.currentTarget).css 'height', \"#{$textarea.scrollHeight * 2 - $textarea.clientHeight}px\"\n\n # $(document).on 'blur', @_selector, (e) ->\n # if $(e.currentTarget).val() is ''\n # $(e.currentTarget).attr('rows', 1).css 'height', 'auto'\n\n #------------------------------------#\n # Auto submit on on textarea #\n #------------------------------------#\n # textareaSubmitOnEnter:\n # _selector: '[data-submit-on-enter]'\n\n # init: ->\n # $(document).on 'keypress', @_selector, (e) ->\n # if e.which is 13\n # e.preventDefault()\n # e.stopImmediatePropagation()\n # Rails.fire $(e.target).blur().closest('form').get(0), 'submit'\n\n #------------------------#\n # OpenMap route #\n #------------------------#\n # route: ($canvas, coords, buttons = null) ->\n # _route = $canvas.openMap(center:\n # lat: coords.from.lat\n # lng: coords.from.lng).show().direction coords\n\n # _route.buttons buttons if buttons?\n\n # return _route\n\n #------------------------------------#\n # Google places address autocomplete #\n #------------------------------------#\n address_autocomplete: ->\n autocompleteNode = $('[data-field=\"location\"]')\n formSubmit = autocompleteNode.data('submit') || false\n autocompleteNode.keydown (e) ->\n if e.keyCode == 13\n e.preventDefault()\n $(e.target).val('').blur()\n autocompleteNode.change ->\n if autocompleteNode.val() is ''\n $('[data-field=\"lat\"]').val ''\n $('[data-field=\"lng\"]').val ''\n autocomplete = new google.maps.places.Autocomplete autocompleteNode.get(0), { componentRestrictions: { country: ['fr', 'be', 'ch', 'mc', 'lu'] } }\n google.maps.event.addListener autocomplete, 'place_changed', ->\n place = autocomplete.getPlace()\n return if !place.geometry\n\n $('[data-field=\"lat\"]').val place.geometry.location.lat()\n $('[data-field=\"lng\"]').val place.geometry.location.lng()\n $('[data-field=\"lnglat_rand\"]').val place['types']? && place['types'].indexOf('locality') > -1\n autocompleteNode.parents('form').submit() if formSubmit\n}\n\n#------------------------#\n# Document events #\n#------------------------#\n# $(document).on 'submit', 'form[method=get]:not([data-remote])', (e) ->\n# e.preventDefault()\n# Turbo.visit(@action + (if @action.indexOf('?') == -1 then '?' else '&') + $(@).serialize())\n\n# $(document).on 'ajax:beforeSend', 'form[data-multipart][data-me-progress]', (e) ->\n# if $(':file', $(e.target)).val() != ''\n# if $(':file', $(e.target)).get(0).files[0].size <= 367001600\n# $(e.target).on 'me:upload:progress', (e, loaded, total) ->\n# percents = Math.floor((loaded / total) * 1000)/10\n\n# if $.browser.mobile && !$('body').hasClass('tablet')\n# $progress_bar.val percents\n# else\n# $progress_bar.css 'width', \"#{percents}%\"\n\n# $progress_percent.html \"#{percents}%\"\n\n# return\n\n# if $.browser.mobile && !$('body').hasClass('tablet')\n# content = $('[data-me=upload-progress]').detach().first().html()\n# (new $.me.Modal 'content', {content: content}).show()\n\n# $progress_bar = $('[data-me=progress] progress')\n# $progress_percent = $('[data-me=progress] strong')\n# else\n# $('[data-me=upload-progress] div').css 'width', 0\n# $('[data-me=upload-progress]').show()\n\n# $progress_bar = $('[data-me=upload-progress] div')\n# $progress_percent = $('[data-me=upload-progress] span')\n\n# else\n# $.me.alert I18n.t('js.common.title_alert'), I18n.t('js.file_max_size', mb_size: 350)\n# return false\n\n# return true\n\n# $(document).on 'me:layoutLoaded', ->\n# $.me.init 'store', 'config', 'notifications', 'trophy', 'sentences'\n\n# Active for Route\n# $(document).on 'turbo:load', ->\n# controller = document.body.dataset.controller\n# action = document.body.dataset.action\n# document.querySelectorAll('[data-active-for-route]').forEach (e) ->\n# e.classList.remove('active')\n# routes = e.dataset.activeForRoute.split(',')\n# routes.forEach (r) ->\n# [c, a] = r.split('#')\n# e.classList.add('active') if c is controller && (!a? || a is action)\n\n# $(document).on 'turbo:frame-render', (event) ->\n# headers = event.detail.fetchResponse.response.headers\n# $.me.actionCallback headers.get('x-controller'), headers.get('x-action')\n\n#------------------------#\n# On DOM Loaded #\n#------------------------#\n$ ->\n $.me.init 'removeFieldWithError'\n #$.me.init 'dropdown', 'emoji', 'fieldCharCounter', 'sticker', 'removeFieldWithError', 'multipart', 'textareaAutoHeight', 'textareaSubmitOnEnter'\n # $(document).trigger 'me:domChanged', $(document)\n\n # $(document).on 'ajax:error', (e, xhr) ->\n # [data, status, xhr] = e.detail if e.detail\n # if xhr.status is 402\n # $.me.restricted xhr\n # else if xhr.status is 423\n # $.me.privated xhr\n\n # # Remove selector\n # $(document).on 'click', '[data-remove-block]', (e) ->\n # e.preventDefault()\n # $($(e.currentTarget).data('remove-block')).remove()\n\n # # Dirty fix to keep scroll positions\n # $.me.scrollPositions = {\n # online: 0,\n # chat: 0\n # }\n\n # TODO : Check what is that shit for\n # $(document).on 'turbo:before-visit', ->\n # $.me.scrollPositions.online = $('#online-users-container').scrollTop()\n # $.me.scrollPositions.chat = $('#nlv2ChatScrollBox').scrollTop()\n # $(document).on 'turbo:load', ->\n # $('#online-users-container').scrollTop($.me.scrollPositions.online)\n # $('#nlv2ChatScrollBox').scrollTop($.me.scrollPositions.chat)\n\n#---------#\n# Global #\n#---------#\n\n# Subscriber restriction modal\n# $.me.restricted = (xhr) ->\n# lscope = \"js.restrict.actions.#{xhr.getResponseHeader('X-Controller')}.#{xhr.getResponseHeader('X-Action')}\"\n# title = I18n.t('js.restrict.title')\n# message = I18n.t('js.restrict.message')\n# redirect = '/account/subscriptions'\n# $.me.alert title, message, ->\n# $.me.chat.hide()\n# if window.ReactNativeWebView\n# window.location.href = redirect\n# else\n# Turbo.visit redirect, { action: xhr.getResponseHeader('Turbo-Action') }\n\n# # Private restriction modal\n# $.me.privated = (delegate) ->\n# xhr = delegate.xhr or delegate\n# lscope = \"js.private.actions.#{xhr.getResponseHeader('X-Controller')}.#{xhr.getResponseHeader('X-Action')}\"\n# title = I18n.t(\"#{lscope}.title\", { defaultValue: I18n.t('js.private.title') })\n# message = I18n.t(\"#{lscope}.message\", { defaultValue: I18n.t('js.private.message') })\n# $.me.alert title, message, ->\n# Turbo.visit(delegate.referrer, { action: 'replace' }) if delegate.referrer\n\n# Monkey patch Turbolinks to render 404 & 500 normally and to manage special 4xx\n# Turbolinks.HttpRequest.prototype.requestLoaded = ->\n # @endRequest =>\n # if 200 <= @xhr.status < 300 or @xhr.status is 404 or @xhr.status is 500\n # @delegate.requestCompletedWithResponse(@xhr.responseText, @xhr.getResponseHeader('Turbolinks-Location'))\n # else if @xhr.status is 402\n # $.me.restricted @xhr\n # else if @xhr.status is 423\n # $.me.privated @\n # else\n # @failed = true\n # @delegate.requestFailedWithStatusCode(@xhr.status, @xhr.responseText)\n\n# history.scrollRestoration = 'manual' if history.scrollRestoration\n","\nimport { pinia } from 'stores'\nimport { createApp } from 'vue'\nimport { useCommonStore } from 'stores/common_store'\nimport { useNotificationsStore } from 'stores/notifications_store'\n\nexport const MeConfig = {\n locale: \"fr\",\n stripe: {\n publicKey: \"pk_live_51LDrHeF8hBqvIjcaDiZFtm5ot9b20E1SBpnil3cjqLFLkOGTnr8Cw2HQM9Q3TavmyPgrfPYsMLgqReHysGImP5Ho000FPBJ5uz\"\n }\n}\n\nexport const LeafletConfig = {\n markerIconUrl: \"/assets/v21/icons/pin-pink-d0dabc30b0497239a0a0df4853db924b549c79be1606e8d769c408577ef087bd.svg\"\n}\n\nexport function setup() {\n I18n.defaultLocale = \"fr\"\n\n // Load config\n fetch('/app_config.json', { headers: { 'X-Requested-With': 'XMLHttpRequest' } })\n .then(response => response.json())\n .then(appConfig => {\n initStores(appConfig)\n })\n\n document.addEventListener('contextmenu', event => event.preventDefault())\n}\n\nfunction initStores(appConfig) {\n const app = createApp({})\n app.use(pinia)\n\n const common = useCommonStore()\n common.currentUser = appConfig.config.current_user\n common.device = appConfig.config.device\n\n const notifications = useNotificationsStore()\n notifications.pmessages = appConfig.stats.new_pmessages_count\n notifications.kisses = appConfig.stats.new_kisses_count\n notifications.formViews = appConfig.stats.new_form_views_count\n notifications.friendships = appConfig.stats.new_friends_count\n notifications.testimonials = appConfig.stats.new_testimonials_count\n notifications.socialNotifications = appConfig.stats.new_social_notifications_count\n notifications.events = appConfig.stats.events_count\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","Controller","static","frameId","String","connect","document","getElementById","this","frameIdValue","addEventListener","event","headers","detail","fetchResponse","response","activate","get","controller","action","element","querySelectorAll","forEach","elmnt","dataset","activeForRoute","split","some","route","c","a","match","toggleAttribute","target","dispatch","hasTargetValue","querySelector","targetValue","dispatchEvent","Event","eventValue","initialize","observer","checkData","MutationObserver","_mutationList","_observer","observe","childList","disconnect","setAttribute","childElementCount","handle","sortable","Sortable","create","animation","onEnd","bind","hasHandleValue","handleValue","destroy","newIndex","item","url","fetch","method","content","body","JSON","stringify","position","footer","FingerprintJS","then","fp","result","seed","Math","random","toString","substring","img","createElement","src","visitorId","appendChild","toggle","hasAttribute","scrollIntoView","behavior","block","contentTarget","toggle_lines","classList","hasTriggerTarget","isSmaller","scrollHeight","clientHeight","triggerTarget","removeEventListener","contains","togglesTarget","userType","currentTarget","value","dataId","dataLabel","min","type","Number","default","itemTemplate","listTarget","cloneNode","remove","buttonTarget","inputTarget","key","selectFirst","length","includes","search","preventDefault","selectNext","selectPrevious","setSelected","select","close","closeOutside","isOpen","open","childNodes","add","unselect","first","firstElementChild","focus","scrollTo","previous","selected","previousElementSibling","getBoundingClientRect","top","next","nextElementSibling","bottom","constructor","selectClasses","dispacthEvent","getAttribute","innerHTML","innerText","elmt","openList","resetList","minValue","URL","urlValue","searchParams","URLSearchParams","set","json","data","obj","addItem","dataIdValue","dataLabelValue","label","itemNode","replace","RegExp","node","CustomEvent","bubbles","countryTarget","zipTarget","mask","zipCodeMask","blur","Toast","I18n","t","show","country_id","zip_code","cityTarget","replaceChildren","Option","city","name","removeAttribute","FileUploaderController","browse","fileTarget","click","submit","requestSubmit","buttonText","GeolocationController","searchCityUrl","positionStatus","UNAVAILABLE","geolocation","isAvailable","AVAILABLE","startGeolocation","geolocationMode","geolocationTarget","checked","citySearchTarget","DENIED","cityMode","radiusTarget","radius","start","searchCity","searchCityUrlValue","list","option","updateCityId","inputType","cityName","cityId","status","errorTarget","textarea","parentNode","lengthTarget","textContent","maxLength","update","reset","button","input","wrapper","isHidden","panelTarget","radio","validatorTarget","form","closest","userTypes","cb","parseInt","userTypeId","disabled","text","selectionStart","emoticonize","setSelectionRange","isPassword","iconTarget","max","checkboxes","checkbox","parentElement","maxValue","filter","reduce","sum","switchTarget","isChecked","isSomeChecked","selector","selectorValue","slider","noUiSlider","sliderTarget","inputMinTarget","inputMaxTarget","step","margin","range","on","values","d","setDefaultRadius","accordionPanelTargets","panel","index","toggleType","params","toggles","accordionTargets","typeCheckboxTargets","togglePanel","current","addAnchorToCurrentState","anchor","window","location","href","hash","Turbo","navigator","history","replaceState","application","Application","context","require","load","definitionsFromContext","debug","Stimulus","root","rootMargin","options","rootValue","rootMarginValue","intersectionObserver","IntersectionObserver","entries","processIntersectionEntries","unobserve","entry","isIntersecting","accept","renderStreamMessage","_","state","_toggle","decodeURIComponent","escape","success","pushState","turbo_frame_history","visit","panels","check","birthDate","Date","yearTarget","monthTarget","dayTarget","setFullYear","getFullYear","stopImmediatePropagation","productTargets","selectProduct","product","newProductTarget","replaceWith","confirmTarget","elements","productId","elementTop","scrollY","backPath","use","sentense","end","selectionEnd","setRangeText","backPathValue","frame","encodeURIComponent","reload","hasProductTarget","paymentIntent","stripeElements","stripeOptions","parse","stripeTarget","loadStripe","MeConfig","stripe","publicKey","stripe_pi","selectedDurationTarget","duration","selectedAmountTarget","amount","toLocaleString","locale","style","currency","minimumFractionDigits","ceil","fetchUpdates","client_secret","clientSecret","appearance","variables","colorPrimary","getComputedStyle","documentElement","getPropertyValue","paymentElements","fields","billingDetails","email","address","terms","card","mount","stripeElementsTarget","confirmPayment","confirmParams","return_url","returnUrl","payment_method_data","billing_details","user_email","phone","country","user_country","line1","line2","postal_code","error","stripeError","message","stripeSubmitTarget","offset","mutationList","mutation","attributeName","attributes","subtree","attributeFilter","container","child_offsetRight","offsetLeft","offsetWidth","container_scrollRight","scrollLeft","go","innerHeight","imagesDisplay","imagesLength","imageWidth","scrollIndex","scroller","prevButton","nextButton","images","clientWidth","prev","left","round","slideWidth","slidesCount","interval","buttons","abs","deltaX","setInterval","clearInterval","active","span","count","nav","sections","section","triggerTargets","panelTargets","previewTarget","preview","file","files","startsWith","previewFallback","delete","reader","FileReader","readAsDataURL","onload","fallback","video","currentTime","canvas","width","videoWidth","height","videoHeight","getContext","drawImage","toBlob","blob","createObjectURL","once","hasDeleteTarget","deleteTarget","layer","maxWidth","maxHeight","app","createApp","compilerOptions","isCustomElement","tag","computed","mapState","useChatStore","methods","hide","$","me","chat","showNewMessages","pinia","unmount","useNotificationsStore","mapStores","requests","friendships","testimonials","all","kisses","formViews","socialNotifications","openChat","chatMessages","selectConversationIfExists","toggleChat","hideChat","format","allConsents","consent","acc","cur","bannerVisible","modalOpened","userConsent","defaultConsent","showDetails","hideDetails","save","setCookie","sendToGtm","acceptAll","refuseAll","mounted","getCookie","$el","Dialog","title","okLabel","i18n","buildNode","Promise","reject","dialogResolve","placeholder","template","DocumentFragment","templateContent","templateTitle","lat","lng","watchPosition","stop","clearWatch","restart","coords","latitude","longitude","timestamp","PERMISSION_DENIED","analyticsStorage","adStorage","adUserData","adPersonalization","functionalityStorage","personalizationStorage","securityStorage","cookies","fromEntries","cookie","v","encodedValue","expiry","setTime","getTime","toUTCString","gtag","gtmConsent","k","toLowerCase","dataLayer","push","arguments","emojiMatchers","emoji","pattern","matcher","store","locales","defaultLocale","enableFallback","lang","defineStore","isConnected","conversationCount","isOpened","call","enabled","kind","actions","setChatOpen","setCall","useCommonStore","currentUser","device","isDesktopDevice","isMobileDevice","isTabletDevice","createPinia","pmessages","events","field","increment","decrement","StreamActions","toast","dialog","redirectTo","ReactNativeWebView","toggle_attribute","force","targetElements","set_attribute","toggle_css_class","classes","extend","executeByName","args","fn","j","len","namespaces","pop","isFunction","apply","actionCallback","jsonUtils","dateTimeFormat","reviver","test","init","objects","object","results","removeFieldWithError","_selector","_remove","removeAll","$container","each","i","$target","$_children_node","$_error_node","_id","attr","children","address_autocomplete","autocomplete","autocompleteNode","formSubmit","keydown","keyCode","val","change","google","maps","places","Autocomplete","componentRestrictions","addListener","place","getPlace","geometry","indexOf","parents","LeafletConfig","markerIconUrl","setup","appConfig","common","config","current_user","notifications","stats","new_pmessages_count","new_kisses_count","new_form_views_count","new_friends_count","new_testimonials_count","new_social_notifications_count","events_count","initStores"],"sourceRoot":""}