{"version":3,"file":"js/application-535e9cfb4476d4be6397.js","mappings":"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","sources":["webpack://ratsanet/./app/javascript/setup.js","webpack://ratsanet/./app/javascript/controllers/products_controller.js","webpack://ratsanet/./app/javascript/controllers/legacy_charts_controller.js","webpack://ratsanet/./app/javascript/controllers/home_controller.js","webpack://ratsanet/./app/javascript/controllers/alerts_controller.js","webpack://ratsanet/./app/javascript/controllers/audit_events_controller.js","webpack://ratsanet/./app/javascript/mixins/parseTableRows.js","webpack://ratsanet/./app/javascript/controllers/course_events_controller.js","webpack://ratsanet/./app/javascript/controllers/charts_controller.js","webpack://ratsanet/./app/javascript/controllers/trainers_management_controller.js","webpack://ratsanet/./app/javascript/controllers/application_controller.js","webpack://ratsanet/./app/javascript/channels/ sync _channel\\.js$","webpack://ratsanet/./app/javascript/controllers/cups_controller.js","webpack://ratsanet/./app/javascript/controllers/manual_event_courses_controller.js","webpack://ratsanet/./app/javascript/channels/index.js","webpack://ratsanet/./app/javascript/controllers/exports_controller.js","webpack://ratsanet/./app/javascript/controllers/clubs_controller.js","webpack://ratsanet/./app/javascript/controllers/mass_mails_controller.js","webpack://ratsanet/./app/javascript/controllers/horses_controller.js","webpack://ratsanet/./app/javascript/ratsanetTable.js","webpack://ratsanet/./app/javascript/mixins/btnLoading.js","webpack://ratsanet/./app/javascript/controllers/events_controller.js","webpack://ratsanet/./app/javascript/controllers/orders_controller.js","webpack://ratsanet/./app/javascript/controllers/stats_controller.js","webpack://ratsanet/./app/javascript/controllers/sanctions_controller.js","webpack://ratsanet/./app/javascript/controllers/entries_controller.js","webpack://ratsanet/./app/javascript/controllers/pony_measurement_events_controller.js","webpack://ratsanet/./app/javascript/controllers/person_trainer_profiles_controller.js","webpack://ratsanet/./app/javascript/controllers/general_posts_controller.js","webpack://ratsanet/./app/javascript/controllers/ sync \\.js$","webpack://ratsanet/./app/javascript/controllers/people_controller.js","webpack://ratsanet/./app/javascript/controllers/marking_sheets_controller.js","webpack://ratsanet/./app/javascript/controllers/event_documents_controller.js","webpack://ratsanet/./app/javascript/channels/consumer.js","webpack://ratsanet/./app/javascript/mixins/backgroundJobToast.js","webpack://ratsanet/./app/javascript/channels/ratsanet_jobs_channel.js","webpack://ratsanet/./app/javascript/controllers/event_informations_controller.js","webpack://ratsanet/./app/javascript/controllers/tracker_definitions_controller.js","webpack://ratsanet/./app/javascript/mixins/toast.js","webpack://ratsanet/./app/javascript/application.js","webpack://ratsanet/./app/javascript/controllers/competitions_controller.js","webpack://ratsanet/./app/javascript/mixins/mobileDialogToggler.js","webpack://ratsanet/./app/javascript/mixins/confirmationDialog.js","webpack://ratsanet/./app/javascript/controllers/event_schedules_controller.js","webpack://ratsanet/./app/javascript/controllers/qualifications_controller.js","webpack://ratsanet/./app/javascript/controllers/chart_configurations_controller.js","webpack://ratsanet/./app/javascript/controllers/noncompetition_registrations_controller.js","webpack://ratsanet/./app/javascript/controllers/manual_event_officials_controller.js"],"sourcesContent":["import { Dropdown, Modal, Tooltip } from \"bootstrap\";\n\n/**\n * Setups up modal, scroll up, datepicker, select2\n * with timeout as\n */\nexport function setupJavascript() {\n setUpModal();\n setupScrollUp();\n setSessionMessage();\n window.initDatepicker();\n window.initSelect2();\n initTooltips();\n\n const navTabs = document.querySelectorAll(\".nav.nav-tabs\");\n if (navTabs.length > 0) {\n navTabs.forEach(el => {\n if (\n el.querySelector(\".nav-link.active\") ||\n (window.location.hash &&\n document.querySelector(\n /* format: xxx-'name here to open tab'*/\n `a.nav-link[href=\"#${window.location.hash.split(\"-\")[1]}\"]`\n ))\n ) {\n /**\n * If there is a nav-tabs with.active class, skip or if hash exists and tab nav found,\n * skip. (Should be handled in its respective controller, e.g people and marking_sheets controller)\n */\n return;\n }\n\n const navLink = el.querySelector(\".nav-link\");\n if (navLink) navLink.click();\n });\n }\n\n document.querySelectorAll(`.dropdown-toggle`).forEach(el => {\n new Dropdown(el, {\n boundary: \"window\"\n });\n });\n\n document.querySelectorAll(`[data-confirm]`).forEach(el => {\n el.addEventListener(\n \"click\",\n evt => {\n evt.preventDefault();\n evt.stopPropagation();\n confirmationDialog(evt);\n },\n { capture: true },\n true\n );\n });\n}\n\nexport function removeVisibleTooltips() {\n document\n .querySelectorAll(`.tooltip[role=\"tooltip\"]`)\n .forEach(el => el.remove());\n}\n\nfunction setUpModal() {\n const modal = document.querySelector(\"#modal\");\n const modalInstance = Modal.getOrCreateInstance(modal);\n function hiddenCallback() {\n const modalContent = modal.querySelector(\"#modalContent\");\n if (!modalContent) return;\n Array.from(modalContent.children).forEach(el => el.remove());\n }\n modal.addEventListener(\"hidden.bs.modal\", hiddenCallback);\n const domObserver = new MutationObserver(mutationList => {\n for (const mutation of mutationList) {\n for (const node of mutation.addedNodes) {\n if (node.name === \"modalClose\") {\n // If found input with that value in name attribute, then close modal automatically\n modalInstance.hide();\n } else if (node.name === \"modalOpen\") {\n // Or if its this value, then automatically open\n modalInstance.show();\n }\n }\n }\n });\n const modalContent = modal.querySelector(\"#modalContent\");\n if (!modalContent) {\n modal.removeEventListener(hiddenCallback);\n return;\n }\n // Observe modal's content for input with name=\"closeModal\"\n domObserver.observe(modalContent, { childList: true });\n}\n\nfunction setupScrollUp() {\n // Element that when hidden from view makes \"scroll up\" button shown\n const scrollBtnTigger = document.querySelector(\"#scrollBtnObserver\");\n scrollBtnTigger.classList.add(\"scroll-observer\");\n\n const scrollbtn = document.querySelector(\".scroll-up\");\n new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0) {\n // When \"#scrollBtnObserver\" is no longer \"visible\" in browser\n scrollbtn.classList.remove(\"d-none\");\n } else {\n // When \"#scrollBtnObserver\" is \"visible\" in browser again\n scrollbtn.classList.add(\"d-none\");\n }\n }).observe(scrollBtnTigger);\n\n scrollbtn.addEventListener(\"click\", () => {\n window.scrollTo(0, 0);\n });\n}\n\nexport function initTooltips() {\n document.querySelectorAll(`[data-bs-toggle=\"tooltip\"]`).forEach(el => {\n new Tooltip(el);\n });\n}\n\nfunction setSessionMessage() {\n const notice = sessionStorage.getItem(\"notice\");\n const alert = sessionStorage.getItem(\"alert\");\n if (notice) {\n sessionStorage.removeItem(\"notice\");\n const noticeBox = document.querySelector(\"#noticeAlert\");\n noticeBox.innerText = notice;\n noticeBox.classList.remove(\"d-none\");\n }\n if (alert) {\n sessionStorage.removeItem(\"alert\");\n const alertBox = document.querySelector(\"#alertAlert\");\n alertBox.innerText = alert;\n alertBox.classList.remove(\"d-none\");\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport axios from \"axios\";\nimport { camelCase } from \"lodash-es\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nlet feiLicences = [];\nlet insurance = null;\nlet textInputDelay = null;\n\nexport default class extends Controller {\n static targets = [\n \"productInput\",\n \"feiLicence\",\n \"personYearlyInsurance\",\n \"personYearlyInsurancePackage2\",\n \"productForm\",\n\n \"orderItemForm\"\n ];\n\n productFormTargetConnected() {\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n }\n\n orderItemFormTargetConnected(form) {\n form.querySelectorAll(\"select\").forEach(el => {\n window.initSelect2(el);\n });\n\n const triggerValidation = () => {\n // Prevent creating record if its still valid\n form.querySelector(`[name=\"order_item[refresh]\"]`).value = true;\n\n const submit = form.querySelector(\"button[type=submit]\");\n submit.disabled = true;\n LoadingSpinnerHandler.add(submit);\n\n const formData = new FormData(form);\n\n // Make inputs be disabled to prevent dumb changes.\n form.querySelectorAll(\"input,select\").forEach(el => {\n if (el.type == \"text\") return;\n el.disabled = true;\n });\n\n const token = document.getElementsByName(\"csrf-token\");\n axios({\n url: form.action,\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": token[0].content,\n Accept: \"text/vnd.turbo-stream.html\"\n },\n data: formData\n })\n .then(({ data }) => {\n Turbo.session.receivedMessageFromStream(data);\n })\n .catch(error => {\n console.error(error);\n });\n };\n\n form\n .querySelectorAll(\"input[type=radio],input[type=checkbox]\")\n .forEach(el => {\n el.addEventListener(\"click\", triggerValidation);\n });\n\n form.querySelectorAll(\"input[type=text]\").forEach(el => {\n el.addEventListener(\"input\", () => {\n clearTimeout(textInputDelay);\n textInputDelay = setTimeout(() => triggerValidation(), 2500);\n });\n });\n\n form.querySelectorAll(\"select\").forEach(el => {\n $(el).on(\"input\", triggerValidation); // Only trough jQuery will select2 trigger that input\n });\n }\n\n insuranceInput(evt) {\n if (evt.target.value && evt.target.value != \"on\") {\n insurance = camelCase(evt.target.value);\n } else {\n insurance = null;\n }\n }\n\n feiLicenceInput(evt) {\n if (evt.target.value === \"endurance\") {\n const targetInput = evt.target.form.querySelector(\n \".order_item_fei_horse_trainer\"\n );\n // If does not exist, then exit function\n if (!targetInput) return;\n if (evt.target.checked) {\n targetInput.classList.remove(\"d-none\");\n } else {\n targetInput.classList.add(\"d-none\");\n targetInput.value = \"\";\n }\n }\n\n if (evt.target.checked) {\n feiLicences.push(evt.target.value);\n } else {\n feiLicences = feiLicences.filter(x => x != evt.target.value);\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport {\n openMobileDialog,\n closeMobileDialog\n} from \"@mixins/mobileDialogToggler.js\";\n\nexport default class extends Controller {\n initialize() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n index() {\n if (window.location.search.includes(\"?tab=\")) {\n const param = new URLSearchParams(window.location.search);\n const disciplineTabNav = document.querySelector(\n `[href=\"#${param.get(\"tab\")}-tab\"]`\n );\n window.history.replaceState(window.history.state, null, \"/legacy_charts\");\n if (disciplineTabNav) disciplineTabNav.click();\n }\n const discipline = window.location.hash;\n const disciplineTabNav = document.querySelector(\n `[href=\"${discipline}-tab\"]`\n );\n if (disciplineTabNav) disciplineTabNav.click();\n }\n\n setHash({ params }) {\n Turbo.visit(window.location.pathname + \"#\" + params.hash, {\n action: \"replace\"\n });\n }\n\n selectDifferentYearWithHash(evt) {\n evt.preventDefault();\n Turbo.visit(`${evt.target.href}${location.hash}`);\n }\n\n openMenu({ currentTarget: target }) {\n openMobileDialog($(target.dataset.target)[0]);\n }\n\n closeMenu({ currentTarget: target }) {\n closeMobileDialog($(target.dataset.target)[0]);\n const selectedText = target\n .closest(`.tab-wrapper`)\n .querySelector(`.currentMenuSelected`);\n if (selectedText) selectedText.innerText = target.innerText;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Carousel } from \"bootstrap\";\n\nexport default class extends Controller {\n\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n index() {\n Array.from(document.querySelectorAll('.carousel')).forEach(el => {\n new Carousel(el, {\n interval: 4500\n });\n })\n }\n};","import { Controller } from \"@hotwired/stimulus\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nexport default class extends Controller {\n static targets = [\"form\"];\n\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n formTargetConnected() {\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\"\nimport parseTableRows from \"@mixins/parseTableRows\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nconst AUDITEVENTS_TABLE_LOAD_MORE_PER_PAGE = 40;\n\nlet controller = null;\n\nexport default class extends Controller {\n static targets = [\"table\"];\n\n static values = {\n pageNumber: Number\n };\n\n connect() {\n controller = new AbortController();\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n disconnect() {\n controller.abort();\n }\n\n loadMore(evt) {\n evt.preventDefault();\n const { target } = evt;\n\n target.disabled = true;\n LoadingSpinnerHandler.add(target);\n\n const form = new FormData($(\"#new_search\")[0])\n form.set(\"search[page]\", this.pageNumberValue);\n form.set(\"load_more\", true);\n const params = new URLSearchParams(form);\n\n axios({\n method: \"GET\",\n url: target.href + \"?\" + params.toString(),\n responseType: \"text\",\n headers: {\n \"Accept\": \"text/html;charset=UTF-8;\"\n },\n signal: controller.signal,\n }).then(({ data }) => {\n this.pageNumberValue++;\n target.disabled = false;\n LoadingSpinnerHandler.remove(target);\n\n const rows = parseTableRows(data);\n if (rows.length < AUDITEVENTS_TABLE_LOAD_MORE_PER_PAGE) {\n target.remove();\n };\n\n // this.tableTarget again, like in people and horse search still claims it doesn't exist\n const table = document.querySelector(\"#audit_events_results > tbody\")\n table.append(...rows);\n }).catch(err => {\n console.error(err);\n })\n\n }\n}\n","// response parameter value should be DOMString\nexport default function (response) {\n // This way it maintains <tr>s\n // Using DOMParser removed <tr> in my experience\n const table = document.createElement(\"table\");\n table.id = \"template\";\n const content = document.createElement(\"tbody\");\n content.innerHTML = response;\n table.append(content);\n return table.querySelectorAll(\"table#template > tbody > tr\");\n}","import { Controller } from \"@hotwired/stimulus\";\nimport dayjs from \"dayjs\";\nimport axios from \"axios\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport { openMobileDialog } from \"@mixins/mobileDialogToggler\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\nlet courseEventTableFormSignal = null;\nlet searchInputDelay = null;\nlet searchQueryDelay = null;\n\nexport default class extends Controller {\n static targets = [\"courseEventForm\", \"courseEventsTableForm\"];\n\n disconnect() {\n courseEventTableFormSignal?.abort();\n clearTimeout(searchInputDelay);\n clearTimeout(searchQueryDelay);\n }\n\n courseEventFormTargetConnected(element) {\n element.addEventListener(\"keydown\", evt => {\n if (evt.code == \"Enter\") evt.preventDefault();\n });\n\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n\n const categoryInput = $(\"#course_event_category\");\n function showOrHideCategoryTextInput(value) {\n if (value == \"misc\") {\n $(\".course_event_category_text\").removeClass(\"d-none\");\n } else {\n $(\".course_event_category_text\").addClass(\"d-none\");\n }\n }\n\n if (categoryInput.val() === \"misc\") {\n showOrHideCategoryTextInput(\"misc\");\n }\n\n categoryInput.on(\"change\", evt => {\n showOrHideCategoryTextInput(evt.target.value);\n });\n\n $(\"#course_event_start_date\").on(\"change\", evt => {\n if (!evt.target.value) return;\n const newDate = dayjs(evt.target.value, \"DD.MM.YYYY\");\n\n const endDateInput = $(\"#course_event_end_date\");\n const endDate = endDateInput.val()\n ? dayjs(endDateInput.val(), \"DD.MM.YYY\")\n : null;\n\n /*const regEndDateInput = $(\"#course_event_registration_end_date\");\n const regEndDate = regEndDateInput.val()\n ? dayjs(regEndDateInput.val(), \"DD.MM.YYY\")\n : null;*/\n\n /*regEndDateInput.datepicker(\n \"setEndDate\",\n newDate.subtract(1, \"days\").toDate()\n );*/\n endDateInput.datepicker(\"setStartDate\", newDate.toDate());\n\n // If registration end date not set or registration end date is after start date now\n /*if (!regEndDate || newDate >= regEndDate) {\n regEndDateInput.datepicker(\n \"setDate\",\n newDate.subtract(3, \"days\").toDate()\n );\n }*/\n\n if (!endDate || newDate > endDate) {\n endDateInput.datepicker(\"setDate\", newDate.toDate());\n }\n });\n }\n\n courseEventsTableFormTargetConnected(element) {\n element.addEventListener(\"submit\", e => e.preventDefault());\n element.addEventListener(\"change\", e => {\n if (e.target.className.includes(\"select2-search__field\")) return; // Do not let select2 textarea trigger query fetch\n clearTimeout(searchQueryDelay);\n searchQueryDelay = setTimeout(() => fetchEvents(), 5); // Check select2.js line 88 for this being a thing\n });\n\n element\n .querySelector(\"input[name='search[search_input]']\")\n .addEventListener(\"input\", () => {\n clearTimeout(searchInputDelay);\n searchInputDelay = setTimeout(() => fetchEvents(), 1000);\n });\n\n const fetchEvents = () => {\n courseEventTableFormSignal?.abort();\n courseEventTableFormSignal = new AbortController();\n\n clearTimeout(searchInputDelay);\n\n const formData = new FormData(element);\n const params = new URLSearchParams(formData);\n const loadingDelay = setTimeout(() => showLoading(), 200);\n\n axios\n .get(element.action + \"?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0,\n signal: courseEventTableFormSignal.signal\n })\n .then(({ data }) => {\n clearTimeout(loadingDelay);\n Turbo.session.receivedMessageFromStream(data);\n courseEventTableFormSignal = null;\n history.replaceState(\n history.state,\n null,\n `${location.pathname}?${params.toString()}`\n );\n })\n .catch(error => {\n if (error.name != \"AbortError\") console.error(error);\n else console.warn(error);\n });\n };\n\n const showLoading = () => {\n if (document.querySelector(\"#tableFormLoadingRow\")) {\n return;\n }\n const loadingIndicatorBtn = document\n .querySelector(\"#courseEventLoadingIndicator\")\n .content.cloneNode(true);\n\n document\n .querySelector(\"[data-course-events-target='courseEventsTableContent']\")\n .prepend(loadingIndicatorBtn);\n };\n }\n\n async loadMoreEvents(evt) {\n const { currentTarget } = evt;\n currentTarget.disabled = true;\n\n LoadingSpinnerHandler.add(currentTarget);\n\n const form = this.courseEventsTableFormTarget;\n const formData = new FormData(form);\n\n formData.append(\"search[page]\", evt.params.tableFormPage);\n formData.append(\"search[load_more]\", true);\n\n const params = new URLSearchParams(formData);\n\n try {\n const { data } = await axios.get(form.action + \"?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0\n });\n\n Turbo.session.receivedMessageFromStream(data);\n } catch (error) {\n console.error(error);\n }\n }\n\n openTableFilters() {\n openMobileDialog($(\"#courseEventFilter\")[0]);\n }\n\n goToCourseEvent(evt) {\n const { params, target } = evt;\n if (target.tagName == \"A\" || target.tagName == \"I\") {\n return;\n }\n Turbo.visit(params.url);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport {\n openMobileDialog,\n closeMobileDialog\n} from \"@mixins/mobileDialogToggler.js\";\n\nexport default class extends Controller {\n initialize() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n index() {\n const searchDisciplineParam = new URLSearchParams(window.location.search);\n if (searchDisciplineParam.has(\"tab\")) {\n const disciplineTabNav = document.querySelector(\n `[href=\"#${searchDisciplineParam.get(\"tab\")}-tab\"]`\n );\n window.history.replaceState(\n window.history.state,\n null,\n window.location.href.split(\"?\")[0] +\n \"#\" +\n searchDisciplineParam.get(\"tab\")\n );\n if (disciplineTabNav) disciplineTabNav.click();\n return;\n }\n\n const discipline = location.hash;\n const disciplineTabNav = document.querySelector(\n `[href=\"${discipline}-tab\"]`\n );\n if (disciplineTabNav) disciplineTabNav.click();\n }\n\n setHash({ params }) {\n Turbo.visit(window.location.pathname + \"#\" + params.hash, {\n action: \"replace\"\n });\n }\n\n selectDifferentYearWithHash(evt) {\n evt.preventDefault();\n Turbo.visit(`${evt.target.href}${location.hash}`);\n }\n\n openMenu({ currentTarget: target }) {\n openMobileDialog($(target.dataset.target)[0]);\n }\n\n closeMenu({ currentTarget: target }) {\n closeMobileDialog($(target.dataset.target)[0]);\n const selectedText = target\n .closest(`.tab-wrapper`)\n .querySelector(`.currentMenuSelected`);\n if (selectedText) selectedText.innerText = target.innerText;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nlet allSelected = false;\n\nexport default class extends Controller {\n toggleAllPeopleSelection() {\n allSelected = !allSelected;\n Array.from(\n document.querySelectorAll(`input[name=\"personSelected[]\"]`)\n ).forEach(el => {\n el.checked = allSelected;\n });\n }\n\n goToMassAssignment(evt) {\n evt.preventDefault();\n\n const params = new URLSearchParams();\n Array.from(\n document.querySelectorAll(`input[name=\"personSelected[]\"]`)\n ).forEach(el => {\n if (el.checked) {\n params.append(\"personSelected[]\", el.value);\n }\n });\n\n Turbo.visit(evt.currentTarget.href + \"?\" + params.toString());\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport {\n openMobileDialog,\n closeMobileDialog\n} from \"@mixins/mobileDialogToggler\";\nimport { createPopper } from \"@popperjs/core\";\nimport { backgroundJobStarted } from \"@channels/ratsanet_jobs_channel\";\nimport * as bootstrap from \"bootstrap\";\n\nimport { setupJavascript } from \"../setup\";\n\nexport default class extends Controller {\n static targets = [\n \"container\",\n \"loginFormPopperAnchor\",\n \"broadcastJobsManualTriggerWatcher\"\n ];\n\n // This is more reliable than connect() due to annoyingly gets called multiple times\n containerTargetConnected() {\n setupJavascript();\n }\n\n broadcastJobsManualTriggerWatcherTargetConnected(el) {\n const domObserver = new MutationObserver(() => {\n backgroundJobStarted();\n });\n\n domObserver.observe(el, {\n childList: true,\n subtree: false,\n attributes: false\n });\n }\n\n openMobileDialog({ currentTarget }) {\n let content;\n if (currentTarget.dataset.target) {\n content = document\n .querySelector(currentTarget.dataset.target)\n .content.cloneNode(true);\n const externalDialog = document.querySelector(\"#mobileDialog\");\n externalDialog.prepend(content);\n openMobileDialog(externalDialog.querySelector(\".mobile-andmed\"));\n externalDialog.classList.remove(\"d-none\");\n } else {\n openMobileDialog($(currentTarget).siblings(\".mobile-andmed\")[0]);\n }\n }\n\n closeMobileDialog(evt) {\n evt.preventDefault();\n // .mobile-andmed is the parent for the whole dialog content\n const dialog = evt.currentTarget.closest(\".mobile-andmed\");\n closeMobileDialog(dialog);\n if (dialog.parentNode.id == \"mobileDialog\") {\n dialog.parentNode.removeChild(dialog);\n dialog.classList.add(\"d-none\");\n }\n }\n\n mobileDialogSubmit(evt) {\n evt.preventDefault();\n // This method is intended for mobile dialog that's used as filter selection\n // It closes the dialog and then submits form\n const {\n currentTarget,\n params: { target }\n } = evt;\n\n const dialog = currentTarget.closest(\".mobile-andmed\");\n closeMobileDialog(dialog);\n\n if (dialog.parentNode.id == \"mobileDialog\") {\n dialog.parentNode.removeChild(dialog);\n dialog.classList.add(\"d-none\");\n }\n\n setTimeout(() => {\n const submit = document.querySelector(`${target} button[type=submit]`);\n document.querySelector(`${target}`).requestSubmit(submit);\n }, 5);\n }\n\n expand({ params }) {\n const target = document.querySelector(params.target);\n if (target) {\n target.classList.toggle(\"d-none\");\n }\n }\n\n async openLoginForm() {\n if (document.querySelector(\"#loginFormOverlay\")) return;\n const loginForm = document.querySelector(\"#modalLoginForm\");\n\n const popperInstance = createPopper(\n this.loginFormPopperAnchorTarget,\n loginForm,\n {\n placement: \"bottom-end\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [10, 20]\n }\n }\n ]\n }\n );\n\n const loginFormExit = () => {\n loginForm.classList.add(\"d-none\");\n document.querySelector(\"#loginFormOverlay\")?.remove();\n document.body.classList.remove(\"modal-login-form-overflow-x\");\n popperInstance.destroy();\n loginForm\n .querySelector(\".close\")\n .removeEventListener(\"click\", loginFormExit);\n };\n\n loginForm.querySelector(\".close\").addEventListener(\"click\", loginFormExit);\n\n const overlay = document.createElement(\"div\");\n overlay.id = \"loginFormOverlay\";\n overlay.classList.add(\"rts-overlay\");\n\n overlay.addEventListener(\"click\", loginFormExit);\n\n document.body.append(overlay);\n document.body.classList.add(\"modal-login-form-overflow-x\");\n\n loginForm.classList.remove(\"d-none\");\n }\n}\n","var map = {\n\t\"./ratsanet_jobs_channel.js\": 8169,\n\t\"channels/ratsanet_jobs_channel.js\": 8169\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 = 3760;","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\nimport { openMobileDialog } from \"@mixins/mobileDialogToggler\";\n\nlet eventTableFormSignal = null;\nlet searchInputDelay = null;\n\nexport default class extends Controller {\n static targets = [\"cupSearch\", \"cupTableContent\", \"eventsForCupInput\"];\n\n disconnect() {\n eventTableFormSignal?.abort();\n }\n\n openCupsFilter() {\n openMobileDialog($(\"#cupSearch\")[0]);\n }\n\n async cupSearchTargetConnected(element) {\n // idk, going to an event page and returning back has a chance\n // selecting new date will just do nothing\n await new Promise(resolve => setTimeout(() => resolve(true), 10));\n\n $(\"#search_years\")\n .datepicker({\n multidate: true,\n clearBtn: false,\n autoclose: true,\n minViewMode: \"years\",\n maxViewMode: \"years\",\n forceParse: true,\n format: {\n toDisplay: function (date) {\n return DayJS(date).format(\"YYYY\");\n },\n toValue: function (date) {\n return DayJS(date + \"-01-15\").toDate();\n }\n }\n })\n .on(\"change\", () => {\n fetchEvents();\n });\n\n element.addEventListener(\"submit\", e => e.preventDefault());\n\n element.querySelectorAll(\"input\").forEach(el => {\n el.addEventListener(\n \"input\",\n () => {\n clearTimeout(searchInputDelay);\n switch (el.name) {\n case \"search[search_input]\":\n searchInputDelay = setTimeout(() => fetchEvents(), 1000);\n break;\n case \"search[years]\":\n // ignore\n break;\n default:\n fetchEvents();\n }\n },\n { passive: true }\n );\n });\n\n element.querySelectorAll(\"[data-behaviour=select2]\").forEach(el => {\n $(el).on(\"change\", () => fetchEvents());\n });\n\n const fetchEvents = () => {\n clearTimeout(searchInputDelay);\n // Refresh the signal\n eventTableFormSignal = new AbortController();\n\n const form = new FormData(document.querySelector(\"#cupSearch\"));\n const params = new URLSearchParams(form);\n\n const loadingDelay = setTimeout(() => showLoading(), 300);\n\n axios\n .get(element.action + \"?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0,\n signal: eventTableFormSignal.signal\n })\n .then(({ data: response }) => {\n clearTimeout(loadingDelay);\n Turbo.renderStreamMessage(response);\n\n if (this.cupTableContentTarget.childElementCount == 0) {\n this.cupTableContentTarget.innerHTML = \"\";\n this.cupTableContentTarget.append(\n document\n .querySelector(\"#cupEmptyResponse\")\n .content.cloneNode(true)\n );\n return;\n }\n })\n .catch(error => {\n if (error.name != \"AbortError\") console.error(error);\n else console.warn(error);\n });\n };\n\n const showLoading = () => {\n const loadingIndicatorBtn = document\n .querySelector(\"#cupLoadingIndicator\")\n .content.cloneNode(true);\n loadingIndicatorBtn.id = \"cupTableLoadingText\";\n this.cupTableContentTarget.prepend(loadingIndicatorBtn);\n };\n }\n\n eventsForCupInputTargetConnected(element) {\n $(element).select2({\n minimumInputLength: 3,\n ajax: {\n delay: 250,\n url: \"/cups/autocomplete_events\",\n dataType: \"json\",\n data(params) {\n console.log(\"HEY\");\n const form = element.form;\n const startdate = form.querySelector(\"[name='cup[startdate]']\").value;\n const enddate = form.querySelector(\"[name='cup[enddate]']\").value;\n const disciplineIds = [];\n $(\"#cup_discipline_ids\")\n .find(\":selected\")\n .each((i, option) => disciplineIds.push(option.value));\n return {\n term: params.term,\n startdate,\n enddate,\n discipline_ids: disciplineIds\n };\n }\n }\n });\n\n document.addEventListener(\n \"turbo:before-cache\",\n () => {\n const select = $(element);\n if (select.hasClass(\"select2-hidden-accessible\"))\n select.select2(\"destroy\");\n },\n { capture: true, once: true }\n );\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nexport default class extends Controller {\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n\n $(\"#startdateDatepicker\").on(\"change\", () => {\n const startDate = DayJS($(\"#startdateDatepicker\").datepicker(\"getDate\"));\n const endDate = DayJS($(\"#enddateDatepicker\").datepicker(\"getDate\"));\n if (startDate.isAfter(endDate)) {\n $(\"#enddateDatepicker\").datepicker(\"setDate\", startDate.toDate());\n }\n $(\"#enddateDatepicker\").datepicker(\"setStartDate\", startDate.toDate());\n });\n\n $(\"#enddateDatepicker\").on(\"change\", () => {\n const startDate = DayJS($(\"#startdateDatepicker\").datepicker(\"getDate\"));\n const endDate = DayJS($(\"#enddateDatepicker\").datepicker(\"getDate\"));\n if (endDate.isBefore(startDate)) {\n $(\"#startdateDatepicker\").datepicker(\"setDate\", startDate.toDate());\n }\n });\n }\n}\n","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\n\nexport default class extends Controller {\n static targets = [\"newHorseOwner\", \"form\"];\n\n newHorseOwnerTargetConnected() {\n var value = $(\".roleType:checked\").val();\n $(\"#\" + value).show();\n\n $(\".roleType\").on(\"change\", function (e) {\n if (e.target.value == \"person\") {\n $(\"#person\").show();\n $(\"#juridical\").hide();\n } else if (e.target.value == \"juridical\") {\n $(\"#person\").hide();\n $(\"#juridical\").show();\n }\n });\n }\n\n formTargetConnected(element) {\n element.addEventListener(\"submit\", async evt => {\n evt.preventDefault();\n const formData = new FormData(evt.target);\n\n const { data } = await axios.post(\n \"/horse/new_horse_owner_validation\",\n formData,\n {\n headers: {\n Accept: \"application/json\"\n }\n }\n );\n\n Turbo.session.receivedMessageFromStream(data.document);\n\n requestAnimationFrame(() => {\n window.initSelect2();\n\n if (data.valid == false) {\n return;\n }\n\n document.querySelector(\"#horseOwnerPdfGenerator form\").submit();\n });\n });\n }\n}\n","import { Modal } from \"bootstrap\";\nimport { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [];\n\n goToClub({ currentTarget }) {\n const path = currentTarget.dataset.clubPath;\n Turbo.visit(path);\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nimport axios from \"axios\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nexport default class extends Controller {\n static targets = [\"body\"];\n\n formTargetConnected(element) {\n tinymceInit({\n toolbar: \"bold italic underline strikethrough | removeformat\"\n });\n\n const getRecipients = function () {\n const formData = [];\n Array.from(\n element.querySelectorAll(\n \"[name='mass_mail[competition_division_difficulty_ids][]']:not(:disabled)\"\n )\n ).forEach(el => {\n if (el.checked) {\n formData.push(el.value);\n }\n });\n\n $(\"#recipients\").hide();\n $(\"#recipients_loader\").show();\n\n if (!$(\"#recipient_rows\").data(\"update-url\")) {\n return;\n }\n axios({\n url: $(\"#recipient_rows\").data(\"update-url\"),\n method: \"POST\",\n data: {\n mass_mail: {\n competition_division_difficulty_ids: formData\n }\n },\n headers: {\n Accept: \"application/json;charset=UTF-8;\",\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n }\n })\n .then(({ data }) => {\n // data is the object that contains all info returned\n let trHTML = \"\";\n if (data) {\n $.each(data, (i, item) => {\n trHTML +=\n '<tr><td><input type=\"checkbox\" checked=\"true\" class=\"recipient-email\" name=\"mass_mail[recipient_person_ids][]\" value=\"' +\n item.id +\n '\"/> </td><td>' +\n item.name +\n \"</td><td>\" +\n item.email +\n \"</td></tr>\";\n });\n }\n\n return Promise.resolve(trHTML);\n })\n .then(html => {\n $(\"#recipient_rows\").empty().append(html);\n countRecipients();\n\n $(\"#recipients_loader\").hide();\n $(\"#recipients\").show();\n $(\"#checkAllRecipients\").prop(\"checked\", true);\n })\n .catch(err => {\n console.error(err);\n alert(\"Tekkis viga. Palun proovi hiljem uuesti.\");\n });\n };\n\n $(\":checkbox[name='mass_mail[competition_division_difficulty_ids][]']\").on(\n \"change\",\n getRecipients\n );\n\n $(\".checkAllDifficulties\").on(\"click\", function (evt) {\n $(this)\n .closest(\"table\")\n .find(\"tbody\")\n .find(\n \":checkbox[name='mass_mail[competition_division_difficulty_ids][]']:not(:disabled)\"\n )\n .prop(\"checked\", $(this).prop(\"checked\"));\n\n getRecipients(evt);\n });\n\n $(\"#checkAllRecipients\").on(\"click\", function (evt) {\n $(\":checkbox.recipient-email:not(:disabled)\").prop(\n \"checked\",\n $(this).prop(\"checked\")\n );\n countRecipients();\n //getRecipients(evt);\n });\n\n const countRecipients = () => {\n const recipientCheckboxes = $(\":checkbox.recipient-email\");\n let recipientsCount = recipientCheckboxes.filter(\":checked\").length;\n $(\"#recipients_count\").html(recipientsCount);\n recipientCheckboxes.on(\"change\", function () {\n recipientsCount = recipientCheckboxes.filter(\":checked\").length;\n $(\"#recipients_count\").html(recipientsCount);\n });\n };\n\n countRecipients();\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Collapse } from \"bootstrap\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport axios from \"axios\";\nimport parseTableRows from \"@mixins/parseTableRows\";\nimport { openMobileDialog } from \"@mixins/mobileDialogToggler\";\nimport RatsanetTable from \"@/ratsanetTable.js\";\n// Check horses_controller.rb \"per_page\" in index and event_results too if changing this value!\nconst HORSE_TABLE_LOAD_MORE_PER_PAGE = 30;\n\nlet controller = null;\nexport default class extends Controller {\n static targets = [\"searchTable\", \"legacyResults\", \"modernResults\", \"form\"];\n\n static values = {\n loadMoreTablePage: Number\n };\n\n connect() {\n controller = new AbortController();\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n disconnect() {\n controller.abort();\n }\n\n goToHorse(evt) {\n const { currentTarget, target } = evt;\n if (target.tagName == \"A\") evt.preventDefault();\n let path = null;\n path = currentTarget.dataset.horsePath;\n if (path) Turbo.visit(path);\n }\n\n openHorseFilter() {\n if (window.innerWidth >= 768) {\n new Collapse(\"#search_details\");\n } else {\n openMobileDialog($(\"#search_details\")[0]);\n }\n }\n\n loadMoreHorses(evt) {\n evt.preventDefault();\n const { target } = evt;\n target.disabled = true;\n LoadingSpinnerHandler.add(target);\n\n const form = new FormData($(\"#horseFiltersForm\")[0]);\n form.set(\"page\", this.loadMoreTablePageValue);\n form.set(\"load_more\", true);\n const params = new URLSearchParams(form);\n\n axios({\n method: \"GET\",\n url: target.href + \"?\" + params.toString(),\n responseType: \"text\",\n headers: {\n Accept: \"text/html;charset=UTF-8;\"\n },\n signal: controller.signal\n })\n .then(({ data }) => {\n this.loadMoreTablePageValue++;\n target.disabled = false;\n LoadingSpinnerHandler.remove(target);\n\n const rows = parseTableRows(data);\n if (rows.length < HORSE_TABLE_LOAD_MORE_PER_PAGE) {\n target.remove();\n }\n // Same thing with person search page: claims doesn't exist but yet here it is\n const table = document.querySelector(\n \"table[data-horses-target=searchTable] > tbody\"\n );\n table.append(...rows);\n })\n .catch(err => {\n console.error(err);\n });\n }\n\n show() {\n if (!window.URLSearchParams) {\n $(\n \"#horse_competition_results [data-action=click->horses#shareCompetitionsLink]\"\n ).prop(\"disabled\", \"disabled\");\n }\n\n if (window.location.search) {\n var url = new URLSearchParams(window.location.toString().split(\"?\")[1]);\n\n $(`[href=\"#results_tab\"]`).trigger(\"click\");\n\n var content = document.querySelector(\"#horse_competition_results\");\n for (let [k, v] of url.entries()) {\n var input = content.querySelector(`[name=\"${k}\"]`);\n if (input) {\n if (input.type == \"checkbox\") {\n input.click();\n } else {\n $(input).val(v);\n }\n }\n }\n content.scrollIntoView();\n window.scrollBy(0, -54);\n }\n }\n\n shareCompetitionsLink() {\n const form = document.querySelector(\"#horse_competition_results form\");\n const formData = new FormData(form);\n const url = new URLSearchParams(formData);\n\n const alert = document.querySelector(\n \"#horse_competition_results .share-link\"\n );\n\n navigator.clipboard\n .writeText(\n window.location.toString().split(\"?\")[0] + \"?\" + url.toString()\n )\n .then(() => {\n alert.classList.remove(\"d-none\");\n setTimeout(() => {\n alert.classList.add(\"d-none\");\n }, 4000);\n });\n }\n\n resultsToggle() {\n this.legacyResultsTarget.classList.toggle(\"d-none\");\n this.modernResultsTarget.classList.toggle(\"d-none\");\n }\n\n modernResultsTargetConnected() {\n new RatsanetTable({\n eagerFetch: true,\n contentBodySelector: \"[data-horses-target='modernResults']\",\n itemsPerPage: 20\n });\n }\n\n new_horse_owner() {\n var value = $(\".roleType:checked\").val();\n $(\"#\" + value).show();\n\n $(\".roleType\").on(\"change\", function (e) {\n if (e.target.value == \"person\") {\n $(\"#person\").show();\n $(\"#juridical\").hide();\n } else if (e.target.value == \"juridical\") {\n $(\"#person\").hide();\n $(\"#juridical\").show();\n }\n });\n }\n\n formTargetConnected() {\n $(\"#horse_color_id\")\n .on(\"change\", function () {\n $(\"#horse_color_id option:selected\").each(function () {\n if ($(this).attr(\"value\") == \"5\") {\n $(\".horse_color_free_text\").show(\"slow\");\n } else {\n $(\".horse_color_free_text\").hide(\"slow\");\n }\n });\n })\n .trigger(\"change\");\n\n $(\"#horse_breed_id\")\n .on(\"change\", function () {\n $(\"#horse_breed_id option:selected\").each(function () {\n if ($(this).attr(\"value\") == \"90\") {\n $(\".horse_breed_free_text\").show(\"slow\");\n } else {\n $(\".horse_breed_free_text\").hide(\"slow\");\n }\n });\n })\n .trigger(\"change\");\n\n if ($(\"[name='horse[horse_type]']\").attr(\"value\") == \"pony\") {\n $(\"#pony_section\").show();\n }\n $(\"[name='horse[horse_type]']\").on(\"click\", function () {\n if ($(this).attr(\"value\") == \"pony\") {\n $(\"#pony_section\").show(\"slow\");\n } else {\n $(\"#pony_section\").hide(\"slow\");\n }\n });\n }\n}\n","const error = `<tr><td colspan=\"99\" class=\"table-danger\">\n <strong>Tekkis tõrge!</strong>\n </td>\n</tr>\n`;\nconst loading = `<tr class=\"rtspage-loading\">\n <td colspan=\"99\">\n <i class=\"fas fa-spinner fa-spin fa-lg me-2\"></i><strong>Laen andmeid..</strong>\n </td>\n</tr>\n`;\n\nimport axios from \"axios\";\n\nexport default class RatsanetTable {\n /**\n * @desc Custom reactive table with features: search, filters, pagination and turbo-stream support\n * @param config.contentBodySelector String. Query selector to parent/wrapper, where it hosts form (search, filters) and table itself\n * @param config.itemsPerPage Integer. Number how much items to display per page\n * @param config.eagerFetch Boolean. When true, automatically fetch results from server\n * @param config.observerTrigger String. Example: When the table is inside a tab and is hidden, set a querySelector string to the tab that gets .active class.\n * When MutationObserver catches the tab element has received .active class, trigger query and disconnect the now redundant observer\n */\n constructor(config) {\n this.contentBodySelector = config.contentBodySelector;\n\n this.searchInputInUse = false;\n\n this._pagesRange = [];\n this.timer = null;\n this.options = {\n currentPageIndex: 0,\n itemsPerPage: config.itemsPerPage || 15,\n foundTotal: 0\n };\n\n if (this.$form) {\n this.$form.addEventListener(\"change\", evt => {\n clearTimeout(this.timer);\n if (evt.target.dataset.searchFilter) {\n this.timer = setTimeout(() => {\n this.options.currentPageIndex = 0;\n this._fetchResults();\n }, 200);\n } else {\n this.options.currentPageIndex = 0;\n this._fetchResults();\n }\n });\n\n if (this.$form.querySelector(\"[data-search-filter]\")) {\n this.$form\n .querySelector(\"[data-search-filter]\")\n .addEventListener(\"input\", ({ target }) => {\n const val = target.value;\n if (val && typeof val === \"string\" && val.length >= 3) {\n this.searchInputInUse = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.options.currentPageIndex = 0;\n this._fetchResults();\n }, 750);\n } else if (this.searchInputInUse) {\n clearTimeout(this.timer);\n this.searchInputInUse = false;\n this.options.currentPageIndex = 0;\n this._fetchResults();\n }\n });\n }\n\n if (this.$table.getAttribute(\"data-rts-init\") != \"true\") {\n if (config.eagerFetch === true) {\n this._fetchResults();\n this.$table.setAttribute(\"data-rts-init\", \"true\");\n } else if (config.observerTrigger) {\n const observer = new MutationObserver(mutationList => {\n mutationList.forEach(mutation => {\n if (this.$table.getAttribute(\"data-rts-init\") === \"true\") return;\n switch (mutation.type) {\n case \"attributes\":\n if (mutation.target.classList.contains(\"active\")) {\n this._fetchResults();\n this.$table.setAttribute(\"data-rts-init\", \"true\");\n observer.disconnect();\n }\n break;\n }\n });\n });\n const targetNode = document.querySelector(config.observerTrigger);\n observer.observe(targetNode, {\n childList: false,\n attributes: true,\n // Omit (or set to false) to observe only changes to the parent node\n subtree: false\n });\n } else {\n console.error(\n \"config.observerTrigger is missing! Add one or set eagerFetch to true\"\n );\n }\n } else {\n if (this.$paginationContainer) {\n // Turbo caches the page without event listeners on navigation control. Need to re-attach listeners for to work again\n this.options.currentPageIndex = Number(\n this.$paginationContainer.getAttribute(\n \"data-rts-current-page-index\"\n )\n );\n this.options.foundTotal = Number(\n this.$paginationContainer.getAttribute(\"data-rts-found-total\")\n );\n\n this.pagesRange = this.options.foundTotal; // Triggers re-render on navigation control\n }\n }\n }\n }\n\n get $contentBody() {\n return document.querySelector(this.contentBodySelector);\n }\n\n get $form() {\n return this.$contentBody.querySelector(\"form\");\n }\n\n get $table() {\n return this.$contentBody.querySelector(\"table\");\n }\n\n get $tableBody() {\n return this.$contentBody.querySelector(\"table tbody\");\n }\n\n get $paginationContainer() {\n return this.$contentBody.querySelector(\n \".pagination.rts-pagination-container\"\n );\n }\n\n get pagesRange() {\n return this._pagesRange;\n }\n\n set pagesRange(v) {\n if (!this.$paginationContainer) return;\n this._pagesRange = this._updatePageRange(v);\n // Set these attributes so when user comes back and turbo gives cached version allow to re-render pagination with listeners\n // to have it work again\n this.$paginationContainer.setAttribute(\n \"data-rts-current-page-index\",\n this.options.currentPageIndex\n );\n this.$paginationContainer.setAttribute(\n \"data-rts-found-total\",\n this.options.foundTotal\n );\n this._renderPagination(); // Refresh pagination elements\n }\n\n _updatePageRange(totalCount) {\n const range = [];\n const pages = Math.ceil(parseInt(totalCount) / this.options.itemsPerPage);\n for (let i = 1; pages >= i; i++) {\n range.push(i);\n }\n return range.flat();\n }\n\n _renderPagination() {\n if (!this.$paginationContainer) return;\n this.$paginationContainer.innerHTML = \"\"; // Clear out to re-render\n\n let renderList = [];\n const pages = this.pagesRange;\n if (pages.length == 0) {\n return; // Do nothing\n } else if (pages.length <= 5) {\n // If only 5 pages, return all\n renderList = pages;\n } else {\n const currentPageIndex = this.options.currentPageIndex;\n if (currentPageIndex + 2 >= pages.length - 1) {\n renderList = pages.slice(renderList.length - 4, renderList.length - 1);\n } else {\n let start = currentPageIndex - 2 <= 0 ? 0 : currentPageIndex - 2;\n let end =\n currentPageIndex + 3 >= pages.length - 1\n ? pages.length - 1\n : currentPageIndex + 3;\n renderList = pages.slice(start, end);\n }\n\n if (!renderList.includes(1)) {\n const leftSide = [1];\n if (!renderList.includes(2)) {\n leftSide.push(\"...\");\n }\n renderList = [...leftSide, ...renderList];\n }\n\n if (!renderList.includes(pages[pages.length - 1])) {\n const rightSide = [pages[pages.length - 1]];\n if (!renderList.includes(pages[pages.length - 2])) {\n rightSide.unshift(\"...\");\n }\n renderList = [...renderList, ...rightSide];\n }\n }\n\n renderList.forEach(pageNum => {\n if (pageNum === \"...\") {\n var el = document.createElement(\"li\");\n el.className = \"page-number disabled rts-pagination-dots\";\n el.setAttribute(\"tabindex\", \"-1\");\n\n const linkElement = document.createElement(\"div\");\n linkElement.classList.add(\"page-link\");\n linkElement.classList.add(\"disabled\");\n linkElement.setAttribute(\"aria-disabled\", \"true\");\n linkElement.innerText = pageNum;\n el.appendChild(linkElement);\n this.$paginationContainer.appendChild(el);\n return;\n }\n var el = document.createElement(\"li\");\n el.className = `${\n pageNum - 1 == this.options.currentPageIndex ? \"active\" : \"\"\n } page-item`;\n el.setAttribute(\"data-page-index\", pageNum - 1);\n\n const linkElement = document.createElement(\"a\");\n linkElement.classList.add(\"page-link\");\n linkElement.innerText = pageNum;\n\n el.appendChild(linkElement);\n el.addEventListener(\"click\", this._changePage.bind(this));\n this.$paginationContainer.appendChild(el);\n });\n }\n\n _changePage({ currentTarget: target }) {\n this.options.currentPageIndex = Number(target.dataset.pageIndex);\n this.$contentBody.scrollIntoView({\n behavior: \"smooth\",\n block: \"end\"\n });\n this._fetchResults();\n }\n\n _fetchResults() {\n if (!this.$tableBody) return;\n this.$tableBody.innerHTML = loading;\n const form = this.$form;\n\n const formData = new FormData(form);\n const params = {\n target: `${this.contentBodySelector} table tbody`,\n offset: this.options.currentPageIndex * this.options.itemsPerPage,\n limit: this.options.itemsPerPage\n };\n\n for (let [key, v] of formData.entries()) {\n if (v) {\n if (v == \"on\") v = \"1\";\n params[key] = v;\n }\n }\n\n const token = document.getElementsByName(\"csrf-token\")[0]?.content;\n axios({\n url: form.action,\n params,\n method: \"get\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html;charset=UTF-8;\",\n \"X-CSRF-Token\": token\n }\n })\n .then(({ data: response }) => {\n Turbo.session.receivedMessageFromStream(response);\n setTimeout(() => {\n const totalFound = this.$tableBody.querySelector(\n \"[data-result-total]\"\n ).dataset.resultTotal;\n this.options.foundTotal = Number(totalFound);\n this.pagesRange = Number(totalFound);\n }, 100);\n })\n .catch(e => {\n console.error(e);\n this.$tableBody.innerHTML = error;\n });\n }\n}\n","export const LOADING_SPINNER =\n '<span class=\"spinner-border spinner-border-sm me-2 rts-bootstrap-loading\" role=\"status\" aria-hidden=\"true\"></span>';\n\nexport const LoadingSpinnerHandler = {\n add: el => {\n const node = document\n .createRange()\n .createContextualFragment(LOADING_SPINNER);\n el.prepend(node);\n if (el.querySelector(\"i.fas\"))\n el.querySelector(\"i.fas\").classList.add(\"d-none\");\n },\n remove: el => {\n el.querySelector(\".rts-bootstrap-loading\").remove();\n if (el.querySelector(\"i.fas\"))\n el.querySelector(\"i.fas\").classList.remove(\"d-none\");\n }\n};\n\nexport function removeLoading() {\n $(\".rts-loading-state\").each(function (i, el) {\n $(el).removeClass(\"disabled\");\n $(el).removeClass(\"rts-loading-state\");\n if ($(el).find(\"i.fa\").length >= 1) {\n $(el).find(\"i.fa\").removeClass(\"d-none\");\n }\n });\n $(\".rts-bootstrap-loading\").each(function (i, el) {\n $(el).remove();\n });\n}\nexport function disableButton(el) {\n $(el).addClass(\"disabled rts-loading-state\");\n}\n\nexport function addLoading(el) {\n $(el).on(\"click\", function () {\n if (this.tagName == \"INPUT\") {\n if ($(this).parent().find(\".rts-bootstrap-loading\").length == 0) {\n $(this).parent().prepend(LOADING_SPINNER);\n }\n } else {\n if ($(this).find(\".rts-bootstrap-loading\").length == 0) {\n $(this).prepend(LOADING_SPINNER);\n }\n }\n if ($(this).find(\"i.fa\").length >= 1) {\n $(this).find(\"i.fa\").first().addClass(\"d-none\");\n }\n\n disableButton(this);\n setTimeout(function () {\n $(\"#confirmation_dialog\").on(\"hide.bs.modal\", function (e) {\n removeLoading();\n });\n }, 750);\n });\n}\n\nexport function initLoadingIndicators() {\n $(\"#modal\").on(\"show.bs.modal\", function () {\n removeLoading();\n });\n\n $(`\n a.btn[href^=\"/\"],\n button.btn,\n input.btn[name=\"commit\"][type=\"submit\"],\n button.btn[value^=\"save\"][type=\"submit\"],\n input.btn[value^=\"save\"][type=\"submit\"],\n input.btn[data_toggle=\"modal\"]\n `).each(function (index, el) {\n addLoading(el);\n });\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\nimport Sortable from \"sortablejs/modular/sortable.core.esm.js\";\nimport parseTableRows from \"@mixins/parseTableRows\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport { openMobileDialog } from \"@mixins/mobileDialogToggler\";\nimport { Modal } from \"bootstrap\";\n\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\n//let timeoutForm = null;\n//const CancelToken = axios.CancelToken;\n//let axionCancelToken = CancelToken.source();\n\nlet eventFormFieldCupsSignal = null;\nlet eventTableFormSignal = null;\nlet searchInputDelay = null;\nlet searchQueryDelay = null;\n\n// Check events_controller.rb \"per_page\" in index and event_results too if changing this value!\nconst EVENT_TABLE_LOAD_MORE_PER_PAGE = 75;\n\nexport default class extends Controller {\n static values = { eventsTableFormPage: Number, eventId: Number };\n static targets = [\n \"eventsTableForm\",\n \"eventsTable\",\n \"eventsTableContent\",\n \"eventsTableFormLoadMore\",\n \"confirmCompetitionOrder\",\n // Competition division results page\n \"participantsTotal\",\n \"updateParticipantsForm\",\n // Event form page\n \"eventForm\",\n // Confirm events from new year to normal projects\n \"confirmEventsForm\",\n // Event form targets\n \"eventFormFieldCups\",\n \"eventFormFieldStartdate\",\n \"eventFormFieldEnddate\",\n \"eventFormFieldDisciplines\",\n\n \"eventOverviewSubmittedExportModalForm\"\n ];\n\n connect() {\n // Refresh the signal\n eventTableFormSignal = window.AbortController\n ? new AbortController()\n : null;\n\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n disconnect() {\n eventTableFormSignal?.abort();\n }\n\n eventFormTargetConnected(formElement) {\n eventForm(formElement);\n }\n\n refreshFormFieldCups() {\n if (!this.hasEventFormFieldCupsTarget) return;\n const disciplines = this.eventFormFieldDisciplinesTargets\n .filter(x => x.checked)\n .map(x => x.value);\n const startDate = this.eventFormFieldStartdateTarget.value;\n const endDate = this.eventFormFieldEnddateTarget.value;\n\n const selected = Array.from(this.eventFormFieldCupsTarget.children)\n .filter(x => x.selected)\n .map(x => Number(x.value));\n\n if (disciplines.length && startDate && endDate) {\n eventFormFieldCupsSignal?.abort();\n eventFormFieldCupsSignal = new AbortController();\n\n const params = new URLSearchParams();\n params.set(\"search[discipline_ids][]\", disciplines);\n params.set(\"search[startdate]\", startDate);\n params.set(\"search[enddate]\", endDate);\n axios({\n url: \"/cups/autocomplete_cups?\" + params.toString(),\n method: \"GET\",\n headers: {\n Accept: \"application/json\"\n },\n signal: eventFormFieldCupsSignal.signal\n })\n .then(({ data }) => {\n while (this.eventFormFieldCupsTarget.firstChild) {\n this.eventFormFieldCupsTarget.removeChild(\n this.eventFormFieldCupsTarget.firstChild\n );\n }\n const seletcedValuesStillExist = [];\n data.results.forEach(cup => {\n const option = new Option(\n cup.text,\n cup.id,\n false, // default selected\n selected.includes(cup.id) // selected\n );\n this.eventFormFieldCupsTarget.appendChild(option);\n if (selected.includes(cup.id)) {\n seletcedValuesStillExist.push(cup.id);\n }\n });\n\n $(this.eventFormFieldCupsTarget).val(seletcedValuesStillExist);\n $(this.eventFormFieldCupsTarget).trigger(\"change\");\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n eventFormFieldDisciplinesTargetConnected(el) {\n if (el.labels[0].textContent === \"Koolisõit\" && el.checked === true) {\n document\n .querySelector(\".event_include_paradressage\")\n ?.classList?.remove(\"d-none\");\n }\n }\n\n async eventsTableFormTargetConnected(element) {\n // idk, going to an event page and returning back has a chance\n // selecting new date will just do nothing\n await new Promise(resolve => setTimeout(() => resolve(true), 10));\n\n element.addEventListener(\"submit\", e => e.preventDefault());\n element.addEventListener(\"change\", e => {\n if (e.target.className.includes(\"select2-search__field\")) return; // Do not let select2 textarea trigger query fetch\n clearTimeout(searchQueryDelay);\n searchQueryDelay = setTimeout(() => fetchEvents(), 5); // Check select2.js line 88 for this being a thing\n });\n\n element\n .querySelector(\"input[name='search[search_input]']\")\n .addEventListener(\"input\", () => {\n clearTimeout(searchInputDelay);\n searchInputDelay = setTimeout(() => fetchEvents(), 1000);\n });\n\n const fetchEvents = () => {\n clearTimeout(searchInputDelay);\n\n const form = new FormData(this.eventsTableFormTarget);\n const params = new URLSearchParams(form);\n const loadingDelay = setTimeout(() => showLoading(), 200);\n\n axios\n .get(\"/events/events_query?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n accept: \"text/html; charset=UTF-8\"\n },\n maxRedirects: 0,\n signal: eventTableFormSignal.signal\n })\n .then(({ data: response }) => {\n // Reset load more related values\n this.eventsTableFormPageValue = 2;\n history.replaceState(\n history.state,\n null,\n `${location.pathname}?${params.toString()}`\n );\n\n clearTimeout(loadingDelay);\n if (!response) {\n this.eventsTableContentTarget.innerHTML = \"\";\n this.eventsTableContentTarget.append(\n document\n .querySelector(\"#eventEmptyResponse\")\n .content.cloneNode(true)\n );\n return;\n }\n\n const rows = parseTableRows(response);\n if (rows.length < EVENT_TABLE_LOAD_MORE_PER_PAGE) {\n // hide load more button as there is no more events to fetch with current params\n this.eventsTableFormLoadMoreTarget.classList.add(\"d-none\");\n } else {\n this.eventsTableFormLoadMoreTarget.classList.remove(\"d-none\");\n }\n\n this.eventsTableContentTarget.innerHTML = response;\n })\n .catch(error => {\n if (error.name != \"AbortError\") console.error(error);\n else console.warn(error);\n });\n };\n\n const showLoading = () => {\n const loadingIndicatorBtn = document\n .querySelector(\"#eventLoadingIndicator\")\n .content.cloneNode(true);\n loadingIndicatorBtn.id = \"eventsTableLoadingText\";\n this.eventsTableContentTarget.prepend(loadingIndicatorBtn);\n };\n }\n\n confirmCompetitionOrderTargetConnected(el) {\n const table = el.closest(\".content-box\").querySelector(\"table > tbody\");\n const button = el\n .closest(\".content-box\")\n .querySelector(`button[data-target=\"submitCompOrder\"]`);\n\n var sortable = new Sortable(table, {\n handle: \".handle-field\",\n dragClass: \".sortable-drag\",\n filter: \".ignore-competition-day-header-row\",\n scroll: true,\n onStart: function (evt) {\n evt.item.classList.add(\"alert-success\");\n },\n onEnd: function (evt) {\n evt.item.classList.remove(\"alert-success\");\n if (evt.oldIndex == evt.newIndex) return false;\n $(button).show();\n table\n .querySelectorAll(\"tr:not(.ignore-competition-day-header-row)\")\n .forEach((tr, i) => {\n tr.attributes[\"order\"].value = i + 1;\n });\n }\n });\n\n button.addEventListener(\"click\", evt => {\n this._confirmCustomCompetitionOrder(evt, sortable);\n });\n }\n\n _confirmCustomCompetitionOrder(evt, sortable) {\n if (!this.hasConfirmCompetitionOrderTarget) return;\n const { target } = evt;\n sortable.option(\"disabled\", true);\n target.disabled = true;\n LoadingSpinnerHandler.add(target);\n\n let rows = evt.target\n .closest(`[data-target=\"table-section\"]`)\n .querySelectorAll(\n \"table > tbody > tr:not(.ignore-competition-day-header-row)\"\n );\n rows = Array.from(rows).map(row => {\n return {\n id: row.attributes[\"competition-id\"].value,\n order: row.attributes[\"order\"].value\n };\n });\n\n axios({\n url: `${this.eventIdValue}/competition_sort`,\n method: \"PATCH\",\n data: { event_id: this.eventIdValue, competitions: JSON.stringify(rows) }\n })\n .then(() => {\n $(target).hide();\n target.disabled = false;\n LoadingSpinnerHandler.remove(target);\n sortable.option(\"disabled\", false);\n })\n .catch(err => {\n console.error(err);\n LoadingSpinnerHandler.remove(target);\n target.innerText = \"Ebaõnnestus!\";\n });\n }\n\n review_payments() {\n $(\"#checkAllPersonSingleLicenses\").on(\"click\", function () {\n $(\":checkbox[class=person_single_license_confirmed]:not(:disabled)\")\n .prop(\"checked\", $(this).prop(\"checked\"))\n .trigger(\"change\");\n });\n\n $(\"#checkAllHorseSingleLicenses\").on(\"click\", function () {\n $(\":checkbox[class=horse_single_license_confirmed]:not(:disabled)\")\n .prop(\"checked\", $(this).prop(\"checked\"))\n .trigger(\"change\");\n });\n\n const horse_checkboxes = $(\n \":checkbox[class=horse_single_license_confirmed]\"\n );\n let countHorseCheckedCheckboxes =\n horse_checkboxes.filter(\":checked\").length;\n $(\"#count_horse_single_license_confirmed\").html(\n countHorseCheckedCheckboxes\n );\n horse_checkboxes.on(\"change\", function () {\n countHorseCheckedCheckboxes = horse_checkboxes.filter(\":checked\").length;\n $(\"#count_horse_single_license_confirmed\").html(\n countHorseCheckedCheckboxes\n );\n });\n\n const person_checkboxes = $(\n \":checkbox[class=person_single_license_confirmed]\"\n );\n let countPersonCheckedCheckboxes =\n person_checkboxes.filter(\":checked\").length;\n $(\"#count_person_single_license_confirmed\").html(\n countPersonCheckedCheckboxes\n );\n person_checkboxes.on(\"change\", function () {\n countPersonCheckedCheckboxes =\n person_checkboxes.filter(\":checked\").length;\n $(\"#count_person_single_license_confirmed\").html(\n countPersonCheckedCheckboxes\n );\n });\n }\n\n loadMoreEvents({ target }) {\n target.disabled = true;\n LoadingSpinnerHandler.add(target);\n\n const form = new FormData(this.eventsTableFormTarget);\n // Add page input\n if (!this.eventsTableFormPageValue) this.eventsTableFormPageValue = 2;\n form.append(\"search[page]\", this.eventsTableFormPageValue);\n\n const params = new URLSearchParams(form);\n\n axios\n .get(\"/events/events_query?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n accept: \"text/html; charset=UTF-8\"\n },\n signal: eventTableFormSignal.signal\n })\n .then(({ data: response }) => {\n this.eventsTableFormPageValue++;\n target.disabled = false;\n\n const rows = parseTableRows(response);\n\n if (rows.length < EVENT_TABLE_LOAD_MORE_PER_PAGE) {\n // hide load more button as there is no more events to fetch with current params\n this.eventsTableFormLoadMoreTarget.classList.add(\"d-none\");\n }\n\n this.eventsTableContentTarget.append(...rows);\n })\n .catch(error => {\n target.disabled = false;\n if (error.name != \"AbortError\") console.error(error);\n else console.warn(error);\n })\n .then(() => {\n LoadingSpinnerHandler.remove(target);\n });\n }\n\n goToEvent(evt) {\n const { params, target } = evt;\n if (target.tagName == \"A\" || target.tagName == \"I\") {\n return;\n }\n Turbo.visit(params.url);\n }\n\n openEventFilter() {\n openMobileDialog($(\"#eventFilter\")[0]);\n }\n\n confirm_events(evt) {\n const btn = evt.target;\n btn.disabled = true;\n\n axios({\n url: \"/events/confirm_events\",\n method: \"get\",\n responseType: \"text\",\n headers: {\n accept: \"text/html; charset=UTF-8\"\n }\n })\n .then(response => {\n $(\"#modal\").html(response.data);\n let modal = new Modal($(\"#modal\")[0]);\n modal.show();\n btn.disabled = false;\n })\n .catch(err => {\n console.error(err);\n btn.disabled = false;\n });\n }\n\n confirmEventsSubmit(evt) {\n evt.preventDefault();\n const formData = new FormData(this.confirmEventsFormTarget);\n\n console.log(this.confirmEventsFormTarget.action);\n axios({\n url: this.confirmEventsFormTarget.action,\n method: \"post\",\n data: formData,\n responseType: \"json\"\n })\n .then(({ data }) => {\n let modal = new Modal($(\"#modal\")[0]);\n modal.hide();\n\n evt.target.disabled = false;\n if (data.success) {\n sessionStorage.setItem(\"notice\", data.message);\n } else {\n sessionStorage.setItem(\"alert\", data.message);\n }\n window.location.reload();\n })\n .catch(err => {\n sessionStorage.setItem(\"alert\", err.message);\n console.error(err);\n evt.target.disabled = false;\n window.location.reload();\n });\n }\n\n toggleParticipantsCount() {\n if (this.hasUpdateParticipantsFormTarget) {\n $(this.participantsTotalTarget).toggleClass(\"d-none\");\n $(this.updateParticipantsFormTarget).toggleClass(\"d-none\");\n }\n }\n\n updateParticipants(evt) {\n evt.preventDefault();\n const formData = new FormData(evt.target);\n const submitBtn = evt.target.querySelector(\"input[type=submit]\");\n const newCount = formData.get(\"competition_division[participated_count]\");\n LoadingSpinnerHandler.add(submitBtn);\n axios({\n method: \"PUT\",\n url: evt.target.action,\n data: formData\n })\n .then(() => {\n LoadingSpinnerHandler.remove(submitBtn);\n submitBtn.disabled = false;\n this.participantsTotalTarget.querySelector(\"span\").innerText = newCount;\n this.toggleParticipantsCount();\n })\n .catch(() => {\n LoadingSpinnerHandler.remove(submitBtn);\n submitBtn.value = \"Tekkis viga!\";\n });\n }\n\n protocolSelection(evt) {\n const submitBtn = document.querySelector(\n \".protocol-file-upload input[type=submit]\"\n );\n submitBtn.disabled = !Boolean(evt.target.value);\n }\n\n // Division's registrations page\n\n showRegistrationDates({ currentTarget }) {\n var headerColumn = document.querySelector(\"#datesHeader\");\n headerColumn.classList.toggle(\"d-none\");\n document.querySelectorAll(\".registration-date\").forEach(function (doc) {\n doc.classList.toggle(\"d-none\");\n });\n //$(element).text(showRegistrationDates ? \"Peida kuupäev\" : \"Näita kuupäeva\");\n }\n\n sortRegistartionDates({ currentTarget: el }) {\n var order = null;\n if (el.classList.contains(\"fa-arrow-up\")) {\n el.classList.remove(\"fa-arrow-up\");\n el.classList.add(\"fa-arrow-down\");\n order = \"ASC\";\n } else if (el.classList.contains(\"fa-arrow-down\")) {\n el.classList.remove(\"fa-arrow-down\");\n el.classList.add(\"fa-arrow-up\");\n order = \"DESC\";\n }\n var tbody = document.querySelector(\"table tbody\");\n\n var rows = Array.from(tbody.querySelectorAll(\"tr\"))\n .reduce((arr, row) => {\n const date = row.querySelector(\"td.registration-date\").dataset[\n \"registrationDate\"\n ];\n arr.push({\n el: row,\n date: DayJS(date, \"YYY-MM-DD HH:mm:ss\")\n });\n return arr;\n }, [])\n .sort(function (a, b) {\n switch (order) {\n case \"DESC\":\n return b.date.unix() > a.date.unix() ? 1 : -1;\n case \"ASC\":\n return a.date.unix() > b.date.unix() ? 1 : -1;\n }\n });\n\n $(tbody).empty();\n\n rows.forEach(row => {\n $(tbody).prepend(row.el);\n });\n\n /*$(\"#dateCancel\").click(function() {\n if(this.classList.contains(\"fa-arrow-down\")) {\n this.classList.remove(\"fa-arrow-down\");\n this.classList.add(\"fa-arrow-up\");\n }\n var tbody = document.querySelector(\"table tbody\");\n $(tbody).empty();\n for(var i = 0; i < originalOrder.length; i++) {\n $(tbody).prepend(originalOrder[i]);\n }\n });*/\n }\n\n eventOverviewSubmittedExportModalFormTargetConnected(element) {\n element.addEventListener(\"submit\", evt => {\n evt.preventDefault();\n const submit = evt.target.querySelector(\"button[type=submit]\");\n submit.disabled = \"disabled\";\n LoadingSpinnerHandler.add(submit);\n const form = evt.target.closest(\"form\");\n const modal = evt.target.closest(\"#modal\");\n axios({\n url: form.action,\n data: {\n year: form.querySelector(\"input[name='year']\").value\n },\n method: \"POST\",\n headers: {\n Accept: \"text/csv;\"\n }\n }).then(response => {\n const blob = new Blob([response.data], { type: \"text/csv\" });\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = `klubide-eksportitud-voistlused.csv`;\n link.click();\n Modal.getInstance(modal).hide();\n });\n });\n }\n\n showParadressageOption(evt) {\n const checkboxWrapper = document.querySelector(\n \".event_include_paradressage\"\n );\n if (evt.target.labels[0].textContent === \"Koolisõit\") {\n checkboxWrapper.classList.remove(\"d-none\");\n } else {\n checkboxWrapper.classList.add(\"d-none\");\n checkboxWrapper.querySelector(\n \"#event_include_paradressage\"\n ).checked = false;\n }\n }\n}\n\nfunction eventForm(formDocument) {\n formDocument.addEventListener(\"keydown\", evt => {\n if (evt.code == \"Enter\") evt.preventDefault();\n });\n\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n\n // Set end date minimum date to be the day as start date\n $(\"#event_enddate\").datepicker(\n \"setStartDate\",\n DayJS($(\"#event_startdate\").datepicker(\"getDate\")).toDate()\n );\n\n // Everytime start date changes, check that it doesn't go above end date\n // Also apply new startDate for end date input\n $(\"#event_startdate\").on(\"change\", () => {\n const startDate = DayJS($(\"#event_startdate\").datepicker(\"getDate\"));\n const endDate = DayJS($(\"#event_enddate\").datepicker(\"getDate\"));\n if (startDate.isAfter(endDate)) {\n $(\"#event_enddate\").datepicker(\"setDate\", startDate.toDate());\n }\n $(\"#event_enddate\").datepicker(\"setStartDate\", startDate.toDate());\n });\n\n $(\"#event_enddate\").on(\"change\", () => {\n const endDate = DayJS($(\"#event_enddate\").datepicker(\"getDate\"));\n $(\"#event_registration_until\").datepicker(\n \"setEndDate\",\n endDate.subtract(1, \"day\").toDate()\n );\n });\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Modal } from \"bootstrap\";\nimport axios from \"axios\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\n\nlet intervalPingPong = null;\n\nexport default class extends Controller {\n static targets = [\n \"invoiceForm\",\n \"bankOptions\",\n \"informTransaction\",\n \"bankingCountrySelect\",\n\n \"stripeForm\",\n \"montonioPaymentMethods\",\n \"pingPongIsOrderPaid\"\n ];\n\n static values = {\n montonioWalletUrl: String,\n montonioSuccessUrl: String,\n montonioCancelUrl: String\n };\n\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n\n const invoiceRequest = document.querySelector(\"#order_invoice_request\");\n if (invoiceRequest?.checked == true) {\n this.showInvoiceForm();\n }\n\n const termsAgreed = document.querySelector(\"#order_terms_agreed\");\n if (termsAgreed?.checked == true) {\n this.agreeTerms();\n }\n\n if (this.hasMontonioPaymentMethodsTarget) {\n const paymentMethod =\n document.querySelector(\".order_montonio_method input:checked\")?.value ??\n \"bank\";\n\n switch (paymentMethod) {\n case \"bank\":\n this.montonioPaymentMethodsTarget.classList.remove(\"d-none\");\n break;\n case \"wallet\":\n this.montonioPaymentMethodsTarget.classList.add(\"d-none\");\n break;\n }\n }\n }\n\n stripeFormTargetConnected(element) {\n const useSandbox = !!element.querySelector(\"[name='sandbox']\");\n element.querySelector(\"[name='sandbox']\")?.remove();\n\n const stripe = {\n stripePublicKey: element.querySelector(\"[name='stripePublicKey']\")?.value,\n stripeClientSecret: element.querySelector(\"[name='stripeClientSecret']\")\n ?.value,\n paymentIntentUuid: element.querySelector(\"[name='uuid']\")?.value,\n onBehalfOf: element.querySelector(\"[name='onBehalfOf']\")?.value,\n amount: element.querySelector(\"[name='grandTotal']\")?.value\n };\n\n const createOrder = () => {\n return axios.post(this.montonioWalletUrlValue, {\n paymentIntentUuid: stripe.paymentIntentUuid\n });\n };\n\n const cancelOrder = () => {\n sessionStorage.setItem(\n \"alert\",\n \"Montonio ühendus tekkis tõrke. Palun proovige uuesti või muu makseviisiga\"\n );\n axios({\n url: this.montonioCancelUrlValue,\n method: \"PATCH\",\n headers: {\n Accept: \"application/json\"\n }\n }).then(({ data }) => {\n if (typeof data === \"string\") {\n window.location.href = data;\n }\n });\n };\n\n const handleExpressCheckoutErrorEvent = event => {\n console.log(\"Express checkout error event\", event);\n cancelOrder();\n };\n const handleExpressCheckoutPaymentCompletedEvent = event => {\n console.log(\"Express checkout payment completed\", event);\n window.location.href = this.montonioSuccessUrlValue;\n };\n\n // Make sure to replace 'montonio-express-checkout' with the id that you specified as expressCheckoutTargetId in the initializePayment method\n const expressCheckoutElement = document.getElementById(\n \"montonio-express-checkout\"\n );\n expressCheckoutElement.addEventListener(\n \"express-payment-completed\",\n handleExpressCheckoutPaymentCompletedEvent\n );\n expressCheckoutElement.addEventListener(\n \"express-payment-error\",\n handleExpressCheckoutErrorEvent\n );\n\n const checkoutCallback = async error => {\n if (error) {\n console.log(error);\n cancelOrder();\n throw error;\n }\n\n await createOrder();\n };\n\n if (Object.values(stripe).filter(Boolean).length === 5) {\n window.onMontonioLoaded = () => {\n let embeddedPayment =\n Montonio.Checkout.EmbeddedPayments.initializePayment({\n stripePublicKey: stripe.stripePublicKey, // this information is obtained from the POST request on the backend side\n stripeClientSecret: stripe.stripeClientSecret, // this information is obtained from the POST request on the backend side\n paymentIntentUuid: stripe.paymentIntentUuid, // this information is obtained from the POST request on the backend side as the `uuid` key in the response.\n locale: \"en\", // the language to display the payment input fields for your customer ('de','en','et','fi','lt','lv','pl','ru')\n country: \"EE\", // country code of your customer (e.g. 'EE', 'PL', 'LV', 'LT'),\n targetId: \"montonio-checkout\", // the target id where you want to display the payment input fields for your customer,\n expressCheckoutTargetId: \"montonio-express-checkout\", // the html div id where you want to display the Apple Pay or Google Pay button\n enableExpressCheckout: true,\n onExpressCheckoutAsync: checkoutCallback, // A callback method that is run when the user confirms the payment in the Apple Pay/Google Pay flow. This callback should create the order using the POST /orders endpoint.\n amount: Number(stripe.amount), // the order grand total denoted as cents e.g. 1 EUR should be specified as 100\n currency: \"eur\", // currency specified as either eur or pln (in lowercase)\n paymentMethod: \"card\",\n onBehalfOf: stripe.onBehalfOf, // use the value from \"onBehalfOf\" in the POST /payment-intents/draft response\n version: \"v2\",\n useSandbox\n });\n\n let form = document.getElementById(\"my-checkout\");\n form.addEventListener(\"submit\", evt => {\n evt.preventDefault();\n const btn = form.querySelector(\"button\");\n btn.disabled = true;\n LoadingSpinnerHandler.add(btn);\n\n // 3. Create a new order from your backend and don't forget to attach the paymentUuid.\n // 3.a. you can access the paymentIntentUuid from the SDK method getPaymentIntentUuid() if needed.\n createOrder()\n .then(async ({ data }) => {\n console.log(data);\n if (!data.response) {\n cancelOrder();\n return;\n }\n // 4. Confirm the payment once the order is created using the SDK method confirmPayment()\n\n embeddedPayment\n .confirmPayment()\n .then(response => {\n //console.log(response);\n window.location.href = this.montonioSuccessUrlValue;\n })\n .catch(error => {\n //console.error(error);\n //LoadingSpinnerHandler.remove(btn);\n //btn.disabled = false;\n cancelOrder();\n });\n })\n .catch(() => {\n cancelOrder();\n });\n });\n };\n }\n }\n\n pingPongIsOrderPaidTargetConnected(element) {\n const url = element.dataset[\"pingPongUrl\"];\n const currentUrl = window.location.href;\n\n // ping pong until server says order is paid\n // assert it only does another query when url remains the same\n // to prevent dumb suprise of forced page reload\n function pingPongUntilPaid() {\n axios({\n url,\n method: \"GET\",\n maxRedirects: 0,\n headers: {\n Accept: \"application/json\"\n }\n }).then(({ data }) => {\n if (window.location.href != currentUrl) {\n return;\n }\n if (data === true) window.location.reload();\n else intervalPingPong = setTimeout(pingPongUntilPaid, 5000);\n });\n }\n\n pingPongUntilPaid();\n }\n\n pingPongIsOrderPaidTargetDisconnected() {\n clearInterval(intervalPingPong);\n }\n\n showHideBankPaymentMethods(evt) {\n if (evt.target.value === \"bank\") {\n this.montonioPaymentMethodsTarget.classList.remove(\"d-none\");\n return;\n }\n this.montonioPaymentMethodsTarget.classList.add(\"d-none\");\n }\n\n showInvoiceForm() {\n this.invoiceFormTarget.classList.toggle(\"d-none\");\n }\n\n agreeTerms() {\n this.bankOptionsTarget.classList.toggle(\"d-none\");\n }\n\n informTransaction() {\n this.informTransactionTarget.classList.toggle(\"d-none\");\n }\n\n expandOrder(evt) {\n const target = document.querySelector(evt.target.dataset.rtsTarget);\n evt.target.querySelector(\"i\").classList.toggle(\"counter-rotate\");\n target.classList.toggle(\"d-none\");\n\n const row = evt.target.closest(\"tr\");\n row.classList.toggle(\"table-active\");\n }\n\n checkAllOrderUpdate(evt) {\n $(\"input.order-select:checkbox\").prop(\n \"checked\",\n $(evt.target).prop(\"checked\")\n );\n }\n\n openOrderItemEdit(evt) {\n evt.preventDefault();\n const href = evt.currentTarget.href;\n axios({\n url: href,\n method: \"POST\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data: response }) => {\n Turbo.session.receivedMessageFromStream(response);\n\n window.requestAnimationFrame(() => {\n window.initSelect2();\n window.initDatepicker();\n });\n });\n }\n\n openConfirmationDialog(evt) {\n evt.preventDefault();\n const href = evt.currentTarget.href;\n axios({\n url: href,\n method: \"POST\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data: response }) => {\n Turbo.session.receivedMessageFromStream(response);\n });\n }\n\n confirmPaymentSubmission(event) {\n // Stimulus doesn't support custom events, so have to do this way\n event.target.addEventListener(\n \"form:submit-end\",\n ({ detail }) => {\n if (detail.formSubmission.result.success === true) {\n document.querySelector(\"#modal\").addEventListener(\n \"hidden.bs.modal\",\n () => {\n detail.formSubmission.formElement.remove();\n },\n { once: true }\n );\n let modal = new Modal($(\"#modal\")[0]);\n modal.hide();\n }\n },\n { once: true }\n );\n }\n\n bankingCountrySelectTargetConnected(el) {\n const value = el.value;\n\n document.querySelectorAll(\".country-bankings\").forEach(el => {\n el.classList.add(\"d-none\");\n });\n\n document\n .querySelector(`#countryBanking-${value}`)\n .classList.remove(\"d-none\");\n }\n\n updateBankSelections(evt) {\n const value = evt.target.value;\n\n document.querySelectorAll(\".country-bankings\").forEach(el => {\n el.classList.add(\"d-none\");\n });\n\n document\n .querySelector(`#countryBanking-${value}`)\n .classList.remove(\"d-none\");\n }\n\n toggleInvoicePayment(evt) {\n evt.target.disabled = true;\n axios({\n url: evt.params.url,\n method: \"PATCH\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n data: {\n value: evt.target.checked ? \"1\" : \"0\"\n }\n }).then(({ data: response }) => {\n evt.target.disabled = false;\n Turbo.session.receivedMessageFromStream(response);\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Collapse } from \"bootstrap\";\nimport axios from \"axios\";\nimport { merge } from \"lodash-es\";\n\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport { Chart } from \"chart.js/auto\";\nimport { Colors } from \"chart.js\";\nChart.register(Colors);\n\nlet abortController = null;\n\nexport default class extends Controller {\n static targets = [\n \"statListNavigation\",\n \"statViews\",\n \"statView\",\n \"statContent\"\n ];\n\n initialize() {\n abortController = new AbortController();\n }\n\n disconnect() {\n abortController.abort();\n }\n\n updateChart({ target }) {\n const root = target.closest(\"[data-stats-target='statContent']\");\n const chartUpdate = new CustomEvent(\"chart:update\", {\n detail: { element: root }\n });\n root.querySelector(\"canvas\").dispatchEvent(chartUpdate);\n }\n\n selectStatistic(evt) {\n evt.preventDefault();\n const {\n target,\n params: { statName }\n } = evt;\n\n window.history.replaceState(window.history.state, null, \"#\" + statName);\n const oldActive = this.statListNavigationTarget.querySelector(\n \"a.list-group-item.active\"\n );\n if (oldActive) {\n oldActive.classList.remove(\"active\");\n }\n target.classList.add(\"active\");\n\n const currentStat = this.statViewTargets.find(\n v => !v.className.includes(\"d-none\")\n ); // Find visible stat\n currentStat?.classList?.add(\"d-none\");\n\n const newStat = document.querySelector(`#${statName}`);\n newStat.classList.remove(\"d-none\");\n\n if (window.innerWidth <= 992) {\n // Scroll into in mobile view\n newStat.scrollIntoView();\n window.scrollBy(0, -52);\n }\n\n if (newStat.querySelector(\".content\").children.length != 0) return;\n\n const loading = newStat.querySelector(\".content-loading\");\n loading?.classList?.add(\"skeleton-chart-animation\");\n\n axios({\n url: `/api/stats/retrieve?view_stat=${statName}`,\n method: \"GET\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\",\n \"Cache-Control\": \"max-age=0\" // 1 hours 3600\n },\n signal: abortController.signal\n })\n .then(({ data: response }) => {\n loading.remove();\n Turbo.session.receivedMessageFromStream(response);\n })\n .catch(error => {\n console.error(error);\n });\n }\n\n expandTable({ currentTarget }) {\n const collapseTarget = currentTarget\n .closest(\"[data-stats-target='statContent']\")\n .querySelector(\".collapse\");\n let collapse = Collapse.getInstance(collapseTarget);\n if (!collapse) {\n collapse = new Collapse(collapseTarget, {\n toggle: false\n });\n }\n collapse.toggle();\n currentTarget\n .querySelector(\"[data-target=visible]\")\n .classList.toggle(\"d-none\");\n currentTarget\n .querySelector(\"[data-target=invisible]\")\n .classList.toggle(\"d-none\");\n }\n\n statViewsTargetConnected(element) {\n const hash = window.location.hash;\n if (hash && element.querySelector(`${hash}`)) {\n document.querySelector(`a[href='${hash}']`).click();\n document\n .querySelector(`a[href='${hash}']`)\n ?.closest(\".list-group\")\n ?.previousElementSibling?.click(); // Expand dropdown\n } else {\n const firstStatId = this.statViewTargets[0].id;\n document.querySelector(`a[href='#${firstStatId}']`).click();\n document\n .querySelector(`a[href='#${firstStatId}']`)\n ?.closest(\".list-group\")\n ?.previousElementSibling?.click(); // Expand dropdown\n }\n }\n\n statListNavigationTargetConnected(element) {\n [].slice.call(element.querySelectorAll(\"div.collapse\")).map(el => {\n el.addEventListener(\"show.bs.collapse\", evt => {\n evt.target.previousElementSibling.querySelector(\"i\").className =\n \"fas fa-angle-down\";\n });\n el.addEventListener(\"hide.bs.collapse\", evt => {\n evt.target.previousElementSibling.querySelector(\"i\").className =\n \"fas fa-angle-right\";\n });\n const collapse = new Collapse(el, {\n parent: el.previousElementSibling,\n toggle: false\n });\n el.previousElementSibling.addEventListener(\"click\", () => {\n // Hide other opened list\n Collapse.getInstance(\n this.statListNavigationTarget.querySelector(\"div.collapse.show\")\n )?.hide();\n\n collapse.toggle();\n });\n return collapse;\n });\n }\n\n async statContentTargetConnected(element) {\n /*const backgroundColor = [\n \"rgb(196,0,31)\",\n \"rgb(24,70,144)\",\n \"rgb(144,102,38)\",\n \"rgb(162,189,48)\",\n \"rgb(227,167,22)\"\n ];*/\n const table = element.querySelector(\"table\");\n const canvas = element.querySelector(\"canvas\");\n\n const { labels, datasets } = parseTableData(element);\n const options = {\n data: {\n labels,\n datasets\n },\n options: {\n responsive: true\n },\n plugins: {\n colors: {\n forceOverride: true\n }\n }\n };\n\n const chart = new Chart(\n canvas,\n merge(options, chartConfig(table.dataset.chartType))\n );\n\n canvas.addEventListener(\n \"chart:update\",\n ({ detail: { element } }) => {\n const { labels, datasets } = parseTableData(element);\n chart.data.labels = labels;\n chart.data.datasets = datasets;\n chart.update();\n },\n { passive: true, signal: abortController.signal }\n );\n }\n\n hydrateAllCache({ target }) {\n LoadingSpinnerHandler.add(target);\n target.disabled = \"disabled\";\n\n const token = document.getElementsByName(\"csrf-token\");\n axios({\n url: `/api/stats/hydrate_all`,\n method: \"GET\",\n headers: {\n \"X-CSRF-Token\": token[0].content\n }\n });\n }\n}\n\nfunction chartConfig(chartType) {\n switch (chartType) {\n case \"column\":\n return {\n type: \"bar\",\n options: {\n scales: {\n x: {\n stacked: true\n },\n y: {\n stacked: true\n }\n }\n }\n };\n case \"line-2-y-axes\":\n return {\n type: \"line\",\n options: {\n scales: {\n y2: {\n type: \"linear\",\n display: true,\n position: \"right\"\n }\n }\n }\n };\n default:\n return { type: chartType };\n }\n}\n\nfunction parseTableData(element) {\n const table = element.querySelector(\"table\");\n const labels = [];\n\n const min = element.querySelector(\"[name='min-year']\");\n const max = element.querySelector(\"[name='max-year']\");\n\n const minIndex = Array.from(min.children).findIndex(\n ({ value }) => value == min.value\n );\n const maxIndex = Array.from(max.children).findIndex(\n ({ value }) => value == max.value\n );\n\n // Get labels like showjumping, dressage, etc that will act as group names\n const groups = Array.from(\n table.querySelectorAll(\"thead tr > th[data-chart-group]\")\n );\n\n groups.forEach(el => {\n // Get (expected to be) years from first colum in each row\n if (el.dataset.chartGroup != \"label\") return;\n Array.from(table.querySelectorAll(`tbody tr > td:first-child`)).forEach(\n column => {\n const year = Number(column.innerText);\n if (Number(min.value) <= year && year <= Number(max.value))\n labels.push(column.innerText);\n }\n );\n });\n\n const datasets = groups.reduce((array, groupLabel, index) => {\n switch (groupLabel.dataset.chartGroup) {\n // Skip if header belongs to these group\n case \"ignore\":\n case \"label\":\n return array;\n }\n\n const columns = Array.from(table.querySelectorAll(`tbody tr`))\n .splice(minIndex, maxIndex + 1) // +1 or last row won't be included\n .map(column => column.children[index].dataset.chartValue);\n\n array.push({\n label: groupLabel.innerText,\n data: columns,\n yAxisID: groupLabel.dataset?.chartYAxesId ?? \"y\"\n });\n\n return array;\n }, []);\n\n return { labels, datasets: Object.values(datasets) };\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\n\nlet sanctionAllTypes = null;\nlet sanctinoAllReasons = null;\n\nlet delaySubmit = null;\n\nexport default class extends Controller {\n static targets = [\"form\", \"primaryForm\", \"reasonRequiresText\", \"searchForm\"];\n\n formTargetConnected() {\n sanctionAllTypes = $(\"#sanction_sanction_type\").html();\n sanctinoAllReasons = $(\"#sanction_reason\").html();\n\n $(\"#sanction_reason\").on(\"select2:select\", evt =>\n this.assertReasonTextRequirement(evt)\n );\n\n const entity = $(`input[name=\"sanction[sanction_entity]\"]:checked`);\n const entityValue = entity[0] ? $(entity).val() : null;\n\n if (entityValue) {\n this.primaryFormTarget.classList.remove(\"d-none\");\n }\n\n switch (entityValue) {\n case \"person\":\n document\n .querySelector(\"#sanction_horse_id\")\n .parentNode.classList.add(\"d-none\");\n\n const horseFutureCompetitionWrapper = document.querySelector(\n \"#horseFutureCompetitions\"\n );\n horseFutureCompetitionWrapper.innerHTML = \"\";\n\n document\n .querySelector(\"#sanction_related_person_id\")\n .parentNode.classList.add(\"d-none\");\n break;\n case \"horse\":\n document\n .querySelector(\"#sanction_person_id\")\n .parentNode.classList.add(\"d-none\");\n break;\n default: {\n }\n }\n\n updateBasedOnEntity(entityValue);\n\n $(\"#sanction_horse_id\").on(\"change\", evt => {\n const horseId = evt.currentTarget.value;\n const horseFutureCompetitionWrapper = document.querySelector(\n \"#horseFutureCompetitions\"\n );\n horseFutureCompetitionWrapper.innerHTML = \"Laadin...<br/><br/>\";\n\n const url = horseFutureCompetitionWrapper.dataset.target;\n axios({\n url,\n method: \"POST\",\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0,\n data: {\n horse_id: horseId\n }\n })\n .then(({ data: response }) => {\n Turbo.session.receivedMessageFromStream(response);\n })\n .catch(() => {\n horseFutureCompetitionWrapper.innerHTML =\n \"<b class='text-danger'>Tekkis viga!</b>\";\n });\n });\n }\n\n updateEntitySelection({ target }) {\n const value = target.value;\n const personSelect = document.querySelector(\n \"#sanction_person_id\"\n ).parentNode;\n const horseSelect = document.querySelector(\"#sanction_horse_id\").parentNode;\n\n personSelect.classList.add(\"d-none\");\n horseSelect.classList.add(\"d-none\");\n\n this.primaryFormTarget.classList.remove(\"d-none\");\n\n switch (value) {\n case \"person\":\n personSelect.classList.remove(\"d-none\");\n break;\n case \"horse\":\n horseSelect.classList.remove(\"d-none\");\n break;\n }\n\n updateBasedOnEntity(value);\n }\n\n assertReasonTextRequirement({ target }) {\n const reasonsThatRequireText = Array.from(\n this.reasonRequiresTextTargets\n ).map(input => input.value);\n const reasonTextWrapper = document.querySelector(\".sanction_reason_text\");\n if (reasonsThatRequireText.includes(target.value)) {\n reasonTextWrapper.classList.remove(\"d-none\");\n } else {\n reasonTextWrapper.classList.add(\"d-none\");\n }\n }\n\n searchFormTargetConnected(element) {\n element.addEventListener(\"change\", () => {\n this.search();\n });\n }\n\n search() {\n clearTimeout(delaySubmit);\n\n delaySubmit = setTimeout(() => {\n const form = document.querySelector(\"#sanctionFilter\");\n const formData = new FormData(form);\n\n form\n .querySelectorAll(\"input, option\")\n .forEach(el => (el.disabled = true));\n\n const loadingIndicator = document\n .querySelector(\"#sanctionsLoadingIndicator\")\n .content.cloneNode(true);\n document.querySelector(\"#sanctionRows\").prepend(loadingIndicator);\n\n axios({\n url: form.action,\n redirect: \"error\",\n method: \"POST\",\n data: formData,\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data: response }) => {\n Turbo.renderStreamMessage(response);\n\n form\n .querySelectorAll(\"input, option\")\n .forEach(el => (el.disabled = false));\n });\n }, 800);\n }\n\n loadMoreSanctions({ params, currentTarget }) {\n const form = document.querySelector(\"#sanctionFilter\");\n const formData = new FormData(form);\n\n currentTarget.disabled = true;\n formData.append(\"search[load_more]\", true);\n formData.append(\"search[page]\", params.page);\n\n form.querySelectorAll(\"input, option\").forEach(el => (el.disabled = true));\n const loadingIndicator = document\n .querySelector(\"#sanctionsLoadingIndicator\")\n .content.cloneNode(true);\n document.querySelector(\"#sanctionRows\").prepend(loadingIndicator);\n\n axios({\n url: form.action,\n redirect: \"error\",\n method: \"POST\",\n data: formData,\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data: response }) => {\n Turbo.renderStreamMessage(response);\n\n form\n .querySelectorAll(\"input, option\")\n .forEach(el => (el.disabled = false));\n currentTarget.disabled = false;\n });\n }\n}\n\nfunction updateBasedOnEntity(entityValue) {\n const blank = new Option(\"\", \"\", true, false);\n\n const personTypes = $(sanctionAllTypes)\n .filter(`optgroup[label=\"person\"]`)\n .prepend(blank)\n .html();\n\n const horseTypes = $(sanctionAllTypes)\n .filter(`optgroup[label=\"horse\"]`)\n .prepend(blank)\n .html();\n\n const personReasons = $(sanctinoAllReasons)\n .filter(`optgroup[label=\"person\"]`)\n .prepend(blank)\n .html();\n\n const horseReasons = $(sanctinoAllReasons)\n .filter(`optgroup[label=\"horse\"]`)\n .prepend(blank)\n .html();\n\n switch (entityValue) {\n case \"person\":\n $(\"#sanction_sanction_type\").html(personTypes);\n $(\"#sanction_reason\").html(personReasons);\n document\n .querySelector(\"#sanction_related_person_id\")\n .parentNode.classList.add(\"d-none\");\n break;\n case \"horse\":\n $(\"#sanction_sanction_type\").html(horseTypes);\n $(\"#sanction_reason\").html(horseReasons);\n document\n .querySelector(\"#sanction_related_person_id\")\n .parentNode.classList.remove(\"d-none\");\n\n break;\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\n\nexport default class extends Controller {\n static targets = [\"formWrapper\", \"formLoading\", \"difficultyCheckbox\"];\n static values = {\n checkUrl: String,\n test: String\n };\n\n registrationFormTargetConnected(element) {\n const updateForm = () => {\n const formData = new FormData(element);\n // Get rid of entry data\n formData.delete(\"registration[competition_division_difficulties][]\");\n for (let [k] of formData.entries()) {\n if (k.includes(\"registration[comments]\")) formData.delete(k);\n }\n\n const loadingDelay = setTimeout(() => {\n $(this.formWrapperTarget).hide();\n $(this.formLoadingTarget).show();\n }, 800);\n\n axios({\n url: this.checkUrlValue,\n method: \"POST\",\n data: formData,\n headers: {\n // Get turbo-stream response\n Accept: \"text/vnd.turbo-stream.html;charset=UTF-8;\",\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n }\n })\n .then(({ data }) => {\n clearTimeout(loadingDelay);\n Turbo.session.receivedMessageFromStream(data);\n })\n .catch(err => {\n console.error(err);\n clearTimeout(loadingDelay);\n alert(\"Tekkis viga. Palun proovi hiljem uuesti.\");\n });\n };\n\n $(() => {\n // It gets retriggered after turbo replace method\n $(this.formLoadingTarget).hide();\n $(this.formWrapperTarget).show();\n window.initSelect2();\n $(\n \"#registration_person_id, #registration_second_horse_id, #registration_horse_id\"\n ).on(\"change\", updateForm);\n });\n }\n\n uncheckOtherDifficulty({ target, params }) {\n const difficulties = Array.from(\n document.querySelectorAll(`input[id^=\"${params.division}_\"]`)\n );\n // If only 1 or none, then don't continue\n if (difficulties.length <= 1) return;\n // Filter the clicked input out and set rest of difficulty inputs to be unchecked\n difficulties\n .filter(x => x.id != target.id)\n .forEach(x => (x.checked = false));\n }\n\n uncheckOtherDivisions({ currentTarget, params }) {\n const otherDivisions = this.difficultyCheckboxTargets.filter(el => {\n return (\n el.dataset.entriesCompetitionNrParam == params.competitionNr &&\n el.dataset.entriesDivisionParam != params.division\n );\n });\n //const checked = currentTarget.checked;\n\n otherDivisions.forEach(el => {\n //el.disabled = checked;\n el.checked = false;\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport dayjs from \"dayjs\";\nimport axios from \"axios\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport { openMobileDialog } from \"@mixins/mobileDialogToggler\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nlet ponyMeasurementEventTableFormSignal = null;\nlet searchInputDelay = null;\nlet searchQueryDelay = null;\n\nexport default class extends Controller {\n static targets = [\n \"ponyMeasurementEventForm\",\n \"ponyMeasurementEventsTableForm\"\n ];\n\n disconnect() {\n ponyMeasurementEventTableFormSignal?.abort();\n clearTimeout(searchInputDelay);\n clearTimeout(searchQueryDelay);\n }\n\n ponyMeasurementEventFormTargetConnected(element) {\n element.addEventListener(\"keydown\", evt => {\n if (evt.code == \"Enter\") evt.preventDefault();\n });\n\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n\n $(\"#pony_measurement_event_start_date\").on(\"change\", evt => {\n if (!evt.target.value) return;\n const newDate = dayjs(evt.target.value, \"DD.MM.YYYY\");\n\n const endDateInput = $(\"#pony_measurement_event_end_date\");\n const endDate = endDateInput.val()\n ? dayjs(endDateInput.val(), \"DD.MM.YYY\")\n : null;\n\n const regEndDateInput = $(\n \"#pony_measurement_event_registration_end_date\"\n );\n const regEndDate = regEndDateInput.val()\n ? dayjs(regEndDateInput.val(), \"DD.MM.YYY\")\n : null;\n\n regEndDateInput.datepicker(\n \"setEndDate\",\n newDate.subtract(1, \"days\").toDate()\n );\n endDateInput.datepicker(\"setStartDate\", newDate.toDate());\n\n // If registration end date not set or registration end date is after start date now\n if (!regEndDate || newDate >= regEndDate) {\n regEndDateInput.datepicker(\n \"setDate\",\n newDate.subtract(3, \"days\").toDate()\n );\n }\n\n if (!endDate || newDate > endDate) {\n endDateInput.datepicker(\"setDate\", newDate.toDate());\n }\n });\n }\n\n ponyMeasurementEventsTableFormTargetConnected(element) {\n element.addEventListener(\"submit\", e => e.preventDefault());\n element.addEventListener(\"change\", e => {\n if (e.target.className.includes(\"select2-search__field\")) return; // Do not let select2 textarea trigger query fetch\n clearTimeout(searchQueryDelay);\n searchQueryDelay = setTimeout(() => fetchEvents(), 5); // Check select2.js line 88 for this being a thing\n });\n\n element\n .querySelector(\"input[name='search[search_input]']\")\n .addEventListener(\"input\", () => {\n clearTimeout(searchInputDelay);\n searchInputDelay = setTimeout(() => fetchEvents(), 1000);\n });\n\n const fetchEvents = () => {\n ponyMeasurementEventTableFormSignal?.abort();\n ponyMeasurementEventTableFormSignal = new AbortController();\n\n clearTimeout(searchInputDelay);\n\n const formData = new FormData(element);\n const params = new URLSearchParams(formData);\n const loadingDelay = setTimeout(() => showLoading(), 200);\n\n axios\n .get(element.action + \"?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0,\n signal: ponyMeasurementEventTableFormSignal.signal\n })\n .then(({ data }) => {\n clearTimeout(loadingDelay);\n Turbo.session.receivedMessageFromStream(data);\n ponyMeasurementEventTableFormSignal = null;\n history.replaceState(\n history.state,\n null,\n `${location.pathname}?${params.toString()}`\n );\n })\n .catch(error => {\n if (error.name != \"AbortError\") console.error(error);\n else console.warn(error);\n });\n };\n\n const showLoading = () => {\n if (document.querySelector(\"#tableFormLoadingRow\")) {\n return;\n }\n const loadingIndicatorBtn = document\n .querySelector(\"#ponyMeasurementEventLoadingIndicator\")\n .content.cloneNode(true);\n\n document\n .querySelector(\n \"[data-pony-measurement-events-target='ponyMeasurementEventsTableContent']\"\n )\n .prepend(loadingIndicatorBtn);\n };\n }\n\n async loadMoreEvents(evt) {\n const { currentTarget } = evt;\n currentTarget.disabled = true;\n\n LoadingSpinnerHandler.add(currentTarget);\n\n const form = this.courseEventsTableFormTarget;\n const formData = new FormData(form);\n\n formData.append(\"search[page]\", evt.params.tableFormPage);\n formData.append(\"search[load_more]\", true);\n\n const params = new URLSearchParams(formData);\n\n try {\n const { data } = await axios.get(form.action + \"?\" + params.toString(), {\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n maxRedirects: 0\n });\n\n Turbo.session.receivedMessageFromStream(data);\n } catch (error) {\n console.error(error);\n }\n }\n\n openTableFilters() {\n openMobileDialog($(\"#measurementsFilter\")[0]);\n }\n\n goToEvent(evt) {\n const { params, target } = evt;\n if (target.tagName == \"A\" || target.tagName == \"I\") {\n return;\n }\n Turbo.visit(params.url);\n }\n\n toggleMasterlistTable() {\n const masterlist = document.querySelector(\"#masterlist\");\n const simplifiedMasterlist = document.querySelector(\n \"#simplifiedMasterlist\"\n );\n\n masterlist.classList.toggle(\"d-none\");\n simplifiedMasterlist.classList.toggle(\"d-none\");\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nexport default class extends Controller {\n static targets = [\"trainerProfileForm\"];\n\n trainerProfileFormTargetConnected() {\n tinymceInit({\n toolbar: \"bold italic underline strikethrough removeformat\"\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport axios from \"axios\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nexport default class extends Controller {\n static targets = [\"form\"];\n\n formTargetConnected() {\n tinymceInit({\n toolbar:\n \"blocks fontsize | forecolor backcolor | bold italic underline strikethrough | link removeformat\"\n });\n }\n\n copyFileLink({ params }) {\n navigator.clipboard.writeText(params.link);\n }\n\n uploadFiles(evt) {\n evt.preventDefault();\n const {\n currentTarget,\n params: { upload }\n } = evt;\n const files = document.querySelector(\"#general_post_files\").files;\n const form = new FormData();\n for (const file of files) {\n form.append(\"general_post[files][]\", file);\n }\n\n currentTarget.disabled = true;\n LoadingSpinnerHandler.add(currentTarget);\n\n axios({\n url: upload,\n method: \"POST\",\n data: form,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n Accept: \"text/vnd.turbo-stream.html;charset=UTF-8;\",\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n }\n })\n .then(({ data }) => {\n Turbo.session.receivedMessageFromStream(data);\n setTimeout(() => {\n currentTarget.disabled = false;\n LoadingSpinnerHandler.remove(currentTarget);\n }, 10);\n })\n .catch(error => {\n console.error(error);\n });\n }\n\n deleteUpload(evt) {\n evt.preventDefault();\n const {\n currentTarget,\n params: { deleteLink }\n } = evt;\n const parent = currentTarget.parentNode;\n parent.childNodes.forEach(e => (e.disabled = true));\n LoadingSpinnerHandler.add(currentTarget);\n axios({\n url: deleteLink,\n method: \"DELETE\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html;charset=UTF-8;\",\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n }\n })\n .then(({ data }) => {\n Turbo.session.receivedMessageFromStream(data);\n })\n .catch(error => {\n console.error(error);\n setTimeout(() => {\n parent.childNodes.forEach(e => (e.disabled = false));\n LoadingSpinnerHandler.remove(currentTarget);\n }, 10);\n });\n }\n}\n","var map = {\n\t\"./alerts_controller.js\": 1827,\n\t\"./application_controller.js\": 3728,\n\t\"./audit_events_controller.js\": 1961,\n\t\"./chart_configurations_controller.js\": 9568,\n\t\"./charts_controller.js\": 3193,\n\t\"./clubs_controller.js\": 4733,\n\t\"./competitions_controller.js\": 8458,\n\t\"./course_events_controller.js\": 2471,\n\t\"./cups_controller.js\": 3829,\n\t\"./entries_controller.js\": 6086,\n\t\"./event_documents_controller.js\": 7821,\n\t\"./event_informations_controller.js\": 8324,\n\t\"./event_schedules_controller.js\": 9285,\n\t\"./events_controller.js\": 5737,\n\t\"./exports_controller.js\": 4347,\n\t\"./general_posts_controller.js\": 7250,\n\t\"./home_controller.js\": 1523,\n\t\"./horses_controller.js\": 4948,\n\t\"./legacy_charts_controller.js\": 1481,\n\t\"./manual_event_courses_controller.js\": 3874,\n\t\"./manual_event_officials_controller.js\": 9774,\n\t\"./marking_sheets_controller.js\": 7814,\n\t\"./mass_mails_controller.js\": 4827,\n\t\"./noncompetition_registrations_controller.js\": 9647,\n\t\"./orders_controller.js\": 5897,\n\t\"./people_controller.js\": 7535,\n\t\"./person_trainer_profiles_controller.js\": 6392,\n\t\"./pony_measurement_events_controller.js\": 6237,\n\t\"./products_controller.js\": 1242,\n\t\"./qualifications_controller.js\": 9432,\n\t\"./sanctions_controller.js\": 6028,\n\t\"./stats_controller.js\": 5935,\n\t\"./tracker_definitions_controller.js\": 8381,\n\t\"./trainers_management_controller.js\": 3682,\n\t\"controllers/alerts_controller.js\": 1827,\n\t\"controllers/application_controller.js\": 3728,\n\t\"controllers/audit_events_controller.js\": 1961,\n\t\"controllers/chart_configurations_controller.js\": 9568,\n\t\"controllers/charts_controller.js\": 3193,\n\t\"controllers/clubs_controller.js\": 4733,\n\t\"controllers/competitions_controller.js\": 8458,\n\t\"controllers/course_events_controller.js\": 2471,\n\t\"controllers/cups_controller.js\": 3829,\n\t\"controllers/entries_controller.js\": 6086,\n\t\"controllers/event_documents_controller.js\": 7821,\n\t\"controllers/event_informations_controller.js\": 8324,\n\t\"controllers/event_schedules_controller.js\": 9285,\n\t\"controllers/events_controller.js\": 5737,\n\t\"controllers/exports_controller.js\": 4347,\n\t\"controllers/general_posts_controller.js\": 7250,\n\t\"controllers/home_controller.js\": 1523,\n\t\"controllers/horses_controller.js\": 4948,\n\t\"controllers/legacy_charts_controller.js\": 1481,\n\t\"controllers/manual_event_courses_controller.js\": 3874,\n\t\"controllers/manual_event_officials_controller.js\": 9774,\n\t\"controllers/marking_sheets_controller.js\": 7814,\n\t\"controllers/mass_mails_controller.js\": 4827,\n\t\"controllers/noncompetition_registrations_controller.js\": 9647,\n\t\"controllers/orders_controller.js\": 5897,\n\t\"controllers/people_controller.js\": 7535,\n\t\"controllers/person_trainer_profiles_controller.js\": 6392,\n\t\"controllers/pony_measurement_events_controller.js\": 6237,\n\t\"controllers/products_controller.js\": 1242,\n\t\"controllers/qualifications_controller.js\": 9432,\n\t\"controllers/sanctions_controller.js\": 6028,\n\t\"controllers/stats_controller.js\": 5935,\n\t\"controllers/tracker_definitions_controller.js\": 8381,\n\t\"controllers/trainers_management_controller.js\": 3682\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 = 7461;","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\nimport { Tab, Collapse } from \"bootstrap\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading.js\";\nimport parseTableRows from \"@mixins/parseTableRows.js\";\nimport {\n openMobileDialog,\n closeMobileDialog\n} from \"@mixins/mobileDialogToggler.js\";\n\nimport RatsanetTable from \"@/ratsanetTable.js\";\n\nconst CancelToken = axios.CancelToken;\nlet axionCancelToken = CancelToken.source();\nlet allSelected = false;\nlet controller = null;\n\n// Check people_controller.rb \"per_page\" in index and event_results too if changing this value!\nconst PERSON_TABLE_LOAD_MORE_PER_PAGE = 30;\n\nexport default class extends Controller {\n static targets = [\n \"officialsSearchForm\",\n \"officialList\",\n \"searchTable\",\n \"formConsents\",\n \"generalCheck\",\n \"trusteeCheck\",\n \"marketingCheck\",\n\n \"primaryMenu\",\n\n \"personOrdersTable\",\n \"personEntriesTable\",\n \"coursesTable\",\n \"eventsOfficialTable\",\n \"personAchievementsTable\",\n \"personPupilsEntriesTable\",\n \"personPupilsGreencardTable\",\n \"personPupilsLevelsTable\",\n \"personPupilsYearsTable\",\n \"personSanctionsTable\"\n ];\n\n static values = {\n loadMoreTablePage: Number\n };\n\n connect() {\n controller = new AbortController();\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n disconnect() {\n controller.abort();\n }\n\n primaryMenuTargetConnected() {\n window.requestAnimationFrame(() => {\n switch (window.location.hash) {\n case \"#ametnik\":\n //Tab.getOrCreateInstance(\"#ametnik-tab\").show()\n document.querySelector(\"#ametnik-tab\").click(); // Will update selected menu text\n window.history.replaceState(\n window.history.state,\n \"\",\n window.location.pathname\n ); // Get rid of hash\n break;\n case \"#treener\":\n //Tab.getOrCreateInstance(\"#treener-tab\").show()\n if (document.querySelector(\"#trainerIndtroductory\")) {\n document.querySelector(\"#trainerIndtroductory\").click();\n } else {\n document.querySelector(\"#treener-tab\").click();\n }\n window.history.replaceState(\n window.history.state,\n \"\",\n window.location.pathname\n ); // Get rid of hash\n break;\n }\n });\n }\n\n formConsentsTargetConnected() {\n if (!this.generalCheckTarget.checked) {\n if (this.hasTrusteeCheckTarget) this.trusteeCheckTarget.checked = false;\n this.marketingCheckTarget.checked = false;\n if (this.hasTrusteeCheckTarget) this.trusteeCheckTarget.disabled = true;\n this.marketingCheckTarget.disabled = true;\n } else {\n if (this.hasTrusteeCheckTarget) this.trusteeCheckTarget.disabled = false;\n this.marketingCheckTarget.disabled = false;\n }\n }\n\n allowOtherConsents(evt) {\n switch (evt.target.checked) {\n case false:\n if (this.hasTrusteeCheckTarget) this.trusteeCheckTarget.checked = false;\n this.marketingCheckTarget.checked = false;\n\n if (this.hasTrusteeCheckTarget) this.trusteeCheckTarget.disabled = true;\n this.marketingCheckTarget.disabled = true;\n break;\n case true:\n if (this.hasTrusteeCheckTarget)\n this.trusteeCheckTarget.disabled = false;\n this.marketingCheckTarget.disabled = false;\n break;\n }\n }\n\n goToPerson(evt) {\n const { currentTarget, target } = evt;\n if ([\"BUTTON\", \"I\", \"INPUT\"].includes(target.tagName)) return;\n if (target.tagName == \"A\") evt.preventDefault();\n let path = null;\n path = currentTarget.dataset.personPath;\n if (path) Turbo.visit(path);\n }\n\n openPersonFilter() {\n if (window.innerWidth >= 768) {\n new Collapse(\"#search_details\");\n } else {\n openMobileDialog($(\"#search_details\")[0]);\n }\n }\n\n openOfficialFilter() {\n if (window.innerWidth >= 768) {\n new Collapse(\"#search_official_details\");\n } else {\n openMobileDialog($(\"#search_official_details\")[0]);\n }\n }\n\n openTrainerFilter() {\n if (window.innerWidth >= 768) {\n new Collapse(\"#search_trainer_details\");\n } else {\n openMobileDialog($(\"#search_trainer_details\")[0]);\n }\n }\n\n loadMorePeople(evt) {\n evt.preventDefault();\n const { target } = evt;\n target.disabled = true;\n LoadingSpinnerHandler.add(target);\n\n const form = new FormData($(\".tab-pane:visible form\")[0]);\n form.set(\"page\", this.loadMoreTablePageValue);\n form.set(\"load_more\", true);\n const params = new URLSearchParams(form);\n\n axios({\n method: \"GET\",\n url: target.href + \"?\" + params.toString(),\n responseType: \"text\",\n headers: {\n Accept: \"text/html;charset=UTF-8;\"\n },\n signal: controller.signal\n })\n .then(({ data }) => {\n this.loadMoreTablePageValue++;\n target.disabled = false;\n LoadingSpinnerHandler.remove(target);\n\n const rows = parseTableRows(data);\n if (rows.length < PERSON_TABLE_LOAD_MORE_PER_PAGE) {\n target.remove();\n }\n\n //console.log(this.hasSearchTableTarget);\n //console.log(this.searchTableTarget); [data-people-target=searchTable] exists and searchTable is in targets array. Yet claims it doesn't exist\n const table = document.querySelector(\n \"[data-people-target=searchTable] > table > tbody\"\n );\n table.append(...rows);\n })\n .catch(err => {\n console.error(err);\n });\n }\n\n index() {\n const queryString = new URLSearchParams(window.location.search);\n let triggerEl = null;\n if (queryString.has(\"search[filter_type]\")) {\n triggerEl = document.querySelector(\n queryString.get(\"search[filter_type]\")\n );\n } else if (queryString.has(\"quick_filter\")) {\n if (queryString.get(\"quick_filter\").includes(\"_officials\")) {\n triggerEl = document.querySelector(\"#officials_tab\");\n } else if (queryString.get(\"quick_filter\") == \"fei_trainers\") {\n triggerEl = document.querySelector(\"#trainers_tab\");\n }\n }\n\n if (triggerEl) {\n const tab = new Tab(triggerEl);\n tab.show();\n }\n }\n\n show() {\n const params = new URLSearchParams(window.location.search);\n\n if (params.has(\"person_competition_results\")) {\n $(`[href=\"#results_tab\"]`).trigger(\"click\");\n\n const content = document.querySelector(\n \"[data-people-target=personEntriesTable]\"\n );\n for (let [k, v] of params.entries()) {\n var input = content.querySelector(`[name=\"${k}\"]`);\n if (!input) return;\n\n if (input.type == \"checkbox\") {\n if (input.checked) return;\n input.click();\n } else $(input).val(v);\n }\n content.scrollIntoView();\n window.scrollBy(0, -54);\n }\n\n if (params.has(\"open_tab\")) {\n $(`[href=\"#${params.get(\"open_tab\")}\"]`).trigger(\"click\");\n }\n\n // Automatically set opened tabs name to mobile element with class currentMenuSelected\n document.querySelectorAll(\".nav.nav-tabs.tab-lists .active\").forEach(el => {\n const selectedText = el\n .closest(`.tab-wrapper`)\n .querySelector(`.currentMenuSelected`);\n if (selectedText) selectedText.innerText = el.innerText;\n });\n }\n\n personOrdersTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#orders_tab\",\n contentBodySelector: \"[data-people-target='personOrdersTable']\",\n itemsPerPage: 20\n });\n }\n\n personEntriesTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#results_tab\",\n contentBodySelector: \"[data-people-target='personEntriesTable']\",\n itemsPerPage: 20\n });\n }\n\n eventsOfficialTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#official_events_tab\",\n contentBodySelector: \"[data-people-target='eventsOfficialTable']\"\n });\n }\n\n coursesTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#courses_tab\",\n contentBodySelector: \"[data-people-target='coursesTable']\"\n });\n }\n\n personAchievementsTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#achievements_tab\",\n contentBodySelector: \"[data-people-target='personAchievementsTable']\",\n itemsPerPage: 30\n });\n }\n\n personPupilsEntriesTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#pupils_entries_tab\",\n contentBodySelector: \"[data-people-target='personPupilsEntriesTable']\"\n });\n }\n\n personPupilsGreencardTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#pupils_greencard_tab\",\n contentBodySelector: \"[data-people-target='personPupilsGreencardTable']\"\n });\n }\n\n personPupilsLevelsTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#pupils_levels_tab\",\n contentBodySelector: \"[data-people-target='personPupilsLevelsTable']\",\n itemsPerPage: Infinity\n });\n }\n\n personPupilsYearsTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#pupils_years_tab\",\n contentBodySelector: \"[data-people-target='personPupilsYearsTable']\",\n itemsPerPage: Infinity\n });\n }\n\n personSanctionsTableTargetConnected() {\n new RatsanetTable({\n observerTrigger: \"#notes_tab\",\n contentBodySelector: \"[data-people-target='personSanctionsTable']\",\n itemsPerPage: Infinity\n });\n }\n\n openProfileMenu({ currentTarget: target }) {\n openMobileDialog($(target.dataset.target)[0]);\n }\n\n closeProfileMenu({ currentTarget: target }) {\n closeMobileDialog($(target.dataset.target)[0]);\n const selectedText = target\n .closest(`.tab-wrapper`)\n .querySelector(`.currentMenuSelected`);\n if (selectedText) selectedText.innerText = target.innerText;\n }\n\n shareCompetitionsLink() {\n const form = document.querySelector(\n \"[data-people-target=personEntriesTable] form\"\n );\n const formData = new FormData(form);\n const url = new URLSearchParams(formData);\n\n url.set(\"person_competition_results\", \"true\");\n\n const alert = document.querySelector(\n \"[data-people-target=personEntriesTable] .share-link\"\n );\n\n navigator.clipboard\n .writeText(\n window.location.toString().split(\"?\")[0] + \"?\" + url.toString()\n )\n .then(() => {\n alert.classList.remove(\"d-none\");\n setTimeout(() => {\n alert.classList.add(\"d-none\");\n }, 4000);\n });\n }\n\n officialsSearchFormTargetConnected() {\n this.updateOfficialList();\n }\n\n updateOfficialList() {\n const form = new FormData(this.officialsSearchFormTarget);\n const disciplines = form\n .getAll(\"search[official_discipline][]\")\n .filter(Boolean);\n\n const types = form.getAll(\"search[official_type][]\").filter(Boolean);\n const issuer = form.getAll(\"search[official_issuer]\").filter(Boolean)[0];\n\n axionCancelToken.cancel(\"Uuem päring\");\n axionCancelToken = CancelToken.source();\n\n const query = new URLSearchParams();\n\n if (disciplines.includes(\"dressage\")) {\n document\n .querySelector(\"#qualificationOfficialRightsWrapper\")\n .classList.remove(\"d-none\");\n } else {\n document\n .querySelector(\"#qualificationOfficialRightsWrapper\")\n .classList.add(\"d-none\");\n }\n\n disciplines.forEach(x => {\n query.append(\"search[official_discipline][]\", x);\n });\n types.forEach(x => {\n query.append(\"search[official_type][]\", x);\n });\n\n if (issuer) {\n query.append(\"search[official_issuer]\", issuer);\n }\n\n axios({\n method: \"get\",\n url: \"people/get_official_list_search?\" + query.toString(),\n headers: {\n Accept: \"application/json\",\n \"content-type\": \"application/x-www-form-urlencoded\"\n },\n cancelToken: axionCancelToken.token\n })\n .then(response => {\n const options = [];\n\n // Create new options\n response.data.forEach(option => {\n options.push(new Option(option[0], option[1], false, false));\n });\n // Remove old options\n Array.from(this.officialListTarget.childNodes).forEach(option => {\n option.remove();\n });\n\n options.forEach(option => {\n this.officialListTarget.append(option);\n });\n\n $(this.officialListTarget).trigger(\"select2.change\");\n })\n .catch(thrown => {\n if (axios.isCancel(thrown)) return;\n console.error(thrown.message);\n });\n }\n\n openOfficialSearchDialogInfo(evt) {\n const target = $(evt.target).siblings(\".mobile-andmed\")[0];\n openMobileDialog(target);\n }\n\n closeOfficialSearchDialogInfo(evt) {\n const target = $(evt.target).parents(\".mobile-andmed\")[0];\n closeMobileDialog(target);\n }\n\n toggleAllPeopleSelection() {\n allSelected = !allSelected;\n Array.from(\n document.querySelectorAll(`input[name=\"personSelected[]\"]`)\n ).forEach(el => {\n el.checked = allSelected;\n });\n }\n\n goToMassAssignment(evt) {\n evt.preventDefault();\n const visibleForm = document.querySelector(\n \"#filters_tab .tab-pane.active form\"\n );\n const filterTab = visibleForm.querySelector(\"[name='search[filter_type]']\");\n const params = new URLSearchParams();\n Array.from(\n document.querySelectorAll(`input[name=\"personSelected[]\"]`)\n ).forEach(el => {\n if (el.checked) {\n params.append(\"personSelected[]\", el.value);\n }\n });\n\n if (filterTab.value === \"#officials_tab\") {\n //let issuer = visibleForm.querySelector(\"search[official_issuer]\").value;\n //if (issuer == \"0\") issuer = \"erl\";\n //else issuer = \"fei\";\n //const discipline = visibleForm.querySelector(\"search[official_issuer]\").value;\n }\n\n Turbo.visit(evt.currentTarget.href + \"?\" + params.toString());\n }\n\n trusteeConsentExport({ params }) {\n const trustee = $(\"#person_consent_trustee_terms\")[0];\n var data = {\n general: $(\"#person_consent_general_terms\")[0].checked ? 1 : 0,\n trustee: trustee ? (trustee.checked ? 1 : 0) : undefined,\n marketing: $(\"#person_consent_marketing_terms\")[0].checked ? 1 : 0\n };\n window.open(params.exportUrl + \"?\" + $.param(data), \"_blank\");\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport {\n openMobileDialog,\n closeMobileDialog\n} from \"@mixins/mobileDialogToggler\";\n\nexport default class extends Controller {\n static targets = [\"menu\"];\n\n menuTargetConnected(element) {\n if (window.location.hash) {\n const discipline = location.hash.split(\"-\")[1];\n const disciplineTabNav = document.querySelector(\n `[href=\"#${discipline}\"]`\n );\n if (disciplineTabNav) disciplineTabNav.click();\n } else {\n const params = new URLSearchParams(window.location.search);\n if (params.get(\"tab\")) {\n element\n .querySelector(`a.nav-link[href=\"#${params.get(\"tab\")}\"]`)\n ?.click();\n }\n }\n }\n\n openMenu({ params }) {\n openMobileDialog($(params.target)[0]);\n }\n\n closeMenu({ target, params }) {\n closeMobileDialog($(params.target)[0]);\n const selectedText = target\n .closest(`.tab-wrapper`)\n .querySelector(`.currentMenuSelected`);\n if (selectedText) selectedText.innerText = target.innerText;\n }\n\n setHash({ params }) {\n if (window.location.hash != \"#tab-\" + params.hash) {\n Turbo.visit(window.location.pathname + \"#tab-\" + params.hash, {\n action: \"replace\"\n });\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\nexport default class extends Controller {\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n newForm() {\n // Needs to be cloned or template #documentRowFormTemplate will lose its elements\n const rowFormTemplate = document\n .querySelector(\"#documentRowFormTemplate\")\n .content.cloneNode(true);\n const tableBody = document.querySelector(\"#uploadedFiles tbody\");\n\n rowFormTemplate\n .querySelector(`input[type=\"file\"]`)\n .addEventListener(\"change\", evt => {\n const btn = evt.target.closest(\"tr\").querySelector(\".btn.btn-submit\");\n btn.disabled = !evt.target.value || evt.target.value.length == 0;\n });\n tableBody.prepend(rowFormTemplate);\n }\n\n editForm(evt) {\n const rowFormTemplate = document\n .querySelector(\"#documentRowFormTemplate\")\n .content.cloneNode(true);\n const row = evt.target.closest(\"tr\");\n\n const inputs = row.querySelectorAll(\"input[name]\");\n inputs.forEach(input => {\n const { value, name } = input.attributes;\n const inputTemplate = rowFormTemplate.querySelector(\n `input[name=\"${name.value}\"]`\n );\n if (inputTemplate) {\n inputTemplate.value = value.value;\n }\n });\n\n const selectInput = row.querySelector(`input[name=\"category\"]`);\n const inputTemplate = rowFormTemplate.querySelector(`select`);\n inputTemplate.value = selectInput.value;\n\n rowFormTemplate.querySelector(\".btn.btn-submit\").disabled = false;\n\n const tableBody = document.querySelector(\"#uploadedFiles tbody\");\n tableBody.insertBefore(rowFormTemplate, row);\n row.classList.add(\"d-none\");\n }\n\n cancelForm(evt) {\n const row = evt.target.closest(\"tr\");\n const id = row.querySelector(`input[name=\"id\"]`).getAttribute(\"value\");\n if (id) {\n const tableBody = document.querySelector(\"#uploadedFiles tbody\");\n tableBody\n .querySelector(`#event_document_${id}`)\n .classList.remove(\"d-none\");\n }\n row.remove();\n }\n\n submitForm(evt) {\n const btn = evt.target;\n btn.innerHTML = \"\";\n btn.innerHTML = `<div class=\"spinner-border text-light spinner-border-sm\" role=\"status\"><div>`;\n btn.disabled = true;\n\n const deleteBtn = evt.target.closest(\"td\").querySelector(\".btn-delete\");\n deleteBtn.disabled = true;\n\n const form = new FormData();\n const inputs = evt.target.closest(\"tr\").querySelectorAll(\"input[name]\");\n inputs.forEach(input => {\n if (input.attributes.name.value == \"document\") {\n if (input.files[0])\n form.append(\n `event_document[${input.attributes.name.value}]`,\n input.files[0]\n );\n } else {\n form.append(\n `event_document[${input.attributes.name.value}]`,\n input.value\n );\n }\n });\n\n const selectInput = evt.target.closest(\"tr\").querySelector(\"select\").value;\n form.append(\"event_document[category]\", selectInput);\n\n const id = form.get(\"event_document[id]\");\n const eventId = form.get(\"event_document[event_id]\");\n const courseEventId = form.get(\"event_document[course_event_id]\");\n\n form.delete(\"event_document[id]\");\n form.delete(\"event_document[event_id]\");\n form.delete(\"event_document[course_event_id]\");\n\n let targetObject;\n if (eventId) {\n targetObject = { target: \"events\", id: eventId };\n } else if (courseEventId) {\n targetObject = { target: \"course_events\", id: courseEventId };\n }\n\n const url = () => {\n if (id)\n return `/${targetObject.target}/${targetObject.id}/event_documents/${id}`;\n return `/${targetObject.target}/${targetObject.id}/event_documents`;\n };\n\n axios({\n url: url(),\n method: id ? \"PATCH\" : \"POST\",\n headers: {\n Accept: \"application/json;charset=UTF-8\",\n \"Content-Type\": form.has(\"event_document[document]\")\n ? \"multipart/form-data\"\n : \"application/json;charset=UTF-8\",\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n },\n data: form\n })\n .then(({ data }) => {\n if (id) {\n updateEventDocumentRow(data);\n this.cancelForm(evt);\n } else createEventDocumentRow(evt, data);\n })\n .catch(err => {\n console.error(err);\n });\n }\n}\n\nfunction updateEventDocumentRow(data) {\n const row = document.querySelector(`#event_document_${data.id}`);\n const columns = row.querySelectorAll(\"td\");\n\n columns[0].querySelector(`input[name=\"category\"]`).value = data.category;\n columns[0].querySelector(`span`).innerText = data.category_i18n;\n\n columns[1].querySelector(`input[name=\"name\"]`).value = data.name;\n columns[1].querySelector(`span`).innerText = data.name;\n\n columns[2].querySelector(`a`).href = data.file_link;\n columns[2].querySelector(`a`).innerText = data.file_name;\n columns[2].querySelector(`small`).innerText = data.file_size;\n}\n\nfunction createEventDocumentRow(evt, data) {\n const rowFormTemplate = document\n .querySelector(\"#documentRowTemplate\")\n .content.cloneNode(true);\n const toBeReplacedRow = evt.target.closest(\"tr\");\n const columns = rowFormTemplate.querySelectorAll(\"td\");\n\n rowFormTemplate\n .querySelector(\"tr\")\n .setAttribute(\"id\", `event_document_${data.id}`);\n\n columns[0].querySelector(`input[name=\"id\"]`).value = data.id;\n columns[0].querySelector(`input[name=\"category\"]`).value = data.category;\n columns[0].querySelector(`span`).innerText = data.category_i18n;\n\n columns[1].querySelector(`input[name=\"name\"]`).value = data.name;\n columns[1].querySelector(`span`).innerText = data.name;\n\n columns[2].querySelector(`a`).href = data.file_link;\n columns[2].querySelector(`a`).innerText = data.file_name;\n columns[2].querySelector(`small`).innerText = data.file_size;\n\n const eventId = data.event_id;\n const courseEventId = data.noncompetition_event_id;\n let targetObject;\n if (eventId) {\n targetObject = { target: \"events\", id: eventId };\n } else if (courseEventId) {\n targetObject = { target: \"course_events\", id: courseEventId };\n }\n\n const deleteLink = document.createElement(\"a\");\n deleteLink.className = \"btn btn-danger\";\n deleteLink.setAttribute(\"data-confirm-fade\", \"true\");\n deleteLink.setAttribute(\"data-confirm-title\", \"Dokument kustutamine\");\n deleteLink.setAttribute(\"data-confirm-proceed-class\", \"btn-danger\");\n deleteLink.setAttribute(\n \"data-confirm\",\n \"Kas oled kindel, et soovid selle dokumenti kustutada?\"\n );\n deleteLink.setAttribute(\"rel\", \"no-follow\");\n deleteLink.setAttribute(\"data-method\", \"delete\");\n deleteLink.setAttribute(\"data-response\", \"application/json\");\n deleteLink.href = `/${targetObject.target}/${targetObject.id}/event_documents/${data.id}/delete`;\n deleteLink.innerHTML = `<i class=\"fas fa-times\"></i>`;\n columns[3].append(deleteLink);\n\n toBeReplacedRow.replaceWith(rowFormTemplate);\n}\n","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\";\n\nexport default createConsumer();\n","import dayjs from \"dayjs\";\nimport { Toast } from \"bootstrap\";\n\nclass BackgroundJobToast {\n constructor(job, callbacks) {\n this.toastId = job.queue_name || job.queue;\n this.name = job.name;\n this.job = job;\n this.callbacks = callbacks;\n\n this.toastHandler = null;\n this.toast = null;\n this.render();\n }\n\n static toggleFailedJobIndicator(type) {\n const indicator = document.querySelector(\"[data-target='job-fail']\");\n switch (type) {\n case true:\n indicator.style.display = \"inline\";\n break;\n case false:\n indicator.style.display = \"none\";\n break;\n }\n }\n\n static getCurrentJobsTotal() {\n return document.querySelector(\"[data-target='jobs-total']\");\n }\n\n static updateTotalJobs(total) {\n const text = document.querySelector(\"[data-target='jobs-total']\");\n text.innerText = total;\n if (total > 0) {\n text.style.display = \"inline\";\n } else {\n text.style.display = \"none\";\n }\n }\n\n // Can also be used to update the toast as a whole\n render() {\n if (!this.toast) {\n $(\"#broadcasts\").append(this.getToastDOMString);\n this.toast = $(`[data-job-queue=\"${this.toastId}\"]`);\n this.toastHandler = new Toast(this.toast[0], {\n autohide: false,\n animation: false\n });\n\n this.toast\n .find(\"[data-dates]\")\n .append(\n `<div>Algatatud: ${dayjs(this.job.created_at).format(\n \"HH:mm:ss\"\n )}</div>`\n );\n\n this.toast.on(\"hidden.bs.toast\", () => {\n this.toast.remove();\n });\n }\n\n this.updateProgress();\n\n if (this.job.success === true || this.job.done_at) {\n this.setSuccessState();\n } else if (\n this.job.error === true ||\n this.job.last_error ||\n this.job.failed_at\n ) {\n this.setFailedState();\n }\n\n this.toastHandler.show();\n }\n\n updateProgress() {\n this.updateStage();\n\n const { progress_current: current, progress_max: max } = this.job;\n const progress = this.toast.find(\".progress-bar\");\n const progressNumber = (current / max) * 100;\n\n progress.css(\"width\", progressNumber + \"%\");\n progress.attr(\"aria-valuenow\", progressNumber);\n\n progress.text(`${current} / ${max}`);\n }\n\n updateStage() {\n this.toast\n .find(\".current-stage\")\n .text(this.job.progress_stage || \"Ootel...\");\n }\n\n setSuccessState() {\n this.updateStage();\n this.toast.data(\"toast-status\", \"success\");\n this.toast\n .find(\"[data-dates]\")\n .append(\n `<div>Tehtud: ${dayjs(this.job.done_at).format(\"HH:mm:ss\")}</div>`\n );\n this.toast.find(\"i[data-toast-icon]\")[0].className =\n \"fas fa-check-circle me-2 text-success\";\n this.toast\n .find(\".progress-bar-animated\")\n .removeClass(\"progress-bar-animated\")\n .addClass(\"bg-success\");\n this.showCloseButton();\n\n const total = BackgroundJobToast.getCurrentJobsTotal().innerText;\n BackgroundJobToast.updateTotalJobs(Number(total) - 1);\n\n this.toast.find(`.dismiss-btn`).on(\"click\", evt => {\n evt.preventDefault();\n this.callbacks.removeJob(this);\n this.toast.remove();\n });\n }\n\n setFailedState() {\n this.toast.data(\"toast-status\", \"failed\");\n this.toast\n .find(\".date\")\n .append(\n `<div>Ebaõnnestus: ${dayjs(this.job.failed_at).format(\n \"HH:mm:ss\"\n )}</div>`\n );\n this.toast.find(\".current-stage\").text(\"Teostamisel tekkis viga!\");\n this.toast.find(\"i[data-toast-icon]\")[0].className =\n \"fas fa-exclamation-circle me-2 text-danger\";\n this.toast\n .find(\".progress-bar-animated\")\n .removeClass(\"progress-bar-animated\")\n .addClass(\"bg-danger\");\n this.showCloseButton();\n\n const total = BackgroundJobToast.getCurrentJobsTotal().innerText;\n BackgroundJobToast.updateTotalJobs(total - 1);\n\n BackgroundJobToast.toggleFailedJobIndicator(true);\n\n this.toast.find(\".dismiss-btn\").on(\"click\", evt => {\n evt.preventDefault();\n evt.target.remove();\n this.callbacks.cancelJob(this);\n this.toast.remove();\n if ($(\"#broadcasts [toast-status='failed']\").length == 0) {\n BackgroundJobToast.toggleFailedJobIndicator(false);\n }\n });\n }\n\n showCloseButton() {\n const btn = `\n <button type=\"button\" class=\"ms-2 mb-1 p-1 btn btn-danger btn-sm dismiss-btn\" style=\"height: 20px\" aria-label=\"Close\">\n <span aria-hidden=\"true\" style=\"position:relative; top: -5px;\">×</span>\n </button>\n `;\n const closeBtnParent = this.toast.find(\".close-button\").append(btn);\n if (closeBtnParent.children().length == 0) {\n closeBtnParent.append(btn);\n } else {\n closeBtnParent.replaceWith(btn);\n }\n }\n\n get getToastDOMString() {\n return `\n <div data-job-queue=\"${this.toastId}\" class=\"toast border\" role=\"alert\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"toast-header\">\n <strong class=\"me-auto\">${this.name}</strong>\n <div class=\"close-button\"></div>\n </div>\n\n <section class=\"toast-body\">\n <div class=\"pb-2\">\n <i data-toast-icon class=\"fas fa-clock me-2\"></i>\n <span class=\"current-stage\"></span>\n </div>\n \n <div class=\"progress\">\n <div \n class=\"progress-bar progress-bar-striped progress-bar-animated\" \n role=\"progressbar\"\n aria-valuenow=\"0\" \n aria-valuemin=\"0\"\n aria-valuemax=\"100\" \n style=\"width: 0%\"\n ></div>\n </div>\n <div data-dates class=\"pt-1 mt-2 border-top\">\n </div>\n </section>\n </div>\n `;\n }\n}\n\nexport default BackgroundJobToast;\n","import consumer from \"./consumer\";\nimport BackgroundJobToast from \"@mixins/backgroundJobToast\";\nimport axios from \"axios\";\n\nconst { subscriptions } = consumer;\n\n// Re-render the toasts after turboloads again\ndocument.addEventListener(\"turbo:load\", () => {\n backgroundJobStarted();\n\n const channel = subscriptions.subscriptions.find(\n x => x.channelName == \"RatsanetJobsChannel\"\n );\n if (channel) {\n Object.keys(channel.jobs).forEach(job => {\n channel.jobs[job].render();\n });\n }\n});\n\nfunction createSubscription(jobs) {\n consumer.subscriptions.create(\"RatsanetJobsChannel\", {\n channelName: \"RatsanetJobsChannel\",\n jobs: {},\n connected() {\n const jobsListed = Object.keys(this.jobs) ?? [];\n jobs.forEach(job => {\n if (!jobsListed.includes(job.queue_name)) {\n this.jobs[job.queue_name] = new BackgroundJobToast(job, {\n removeJob: removeBackgroundJobToast,\n cancelJob: cancelBackgroundJob\n });\n }\n });\n //console.log(\"Hi you are connected!\");\n // Called when the subscription is ready for use on the server\n },\n\n disconnected() {\n //console.log(\"bye ;-;\");\n // Called when the subscription has been terminated by the server\n },\n\n received(jobRespond) {\n if (\n typeof jobRespond === \"string\" &&\n jobRespond.includes(\"<turbo-stream\")\n ) {\n Turbo.session.receivedMessageFromStream(jobRespond);\n window.requestAnimationFrame(() => {\n initSelect2();\n initDatepicker();\n });\n return;\n } else if (jobRespond.turbo_action_url_html_selector) {\n turboStreamUpdateUrl(jobRespond.turbo_action_url_html_selector);\n return;\n }\n\n const toastJob = this.jobs[jobRespond.queue_name];\n if (toastJob) {\n toastJob.job = Object.assign(toastJob.job, jobRespond);\n // Just re-render\n toastJob.render();\n } else {\n this.jobs[jobRespond.queue_name] = new BackgroundJobToast(jobRespond, {\n removeJob: removeBackgroundJobToast,\n cancelJob: cancelBackgroundJob\n });\n }\n }\n });\n}\n\nexport function backgroundJobStarted() {\n const token = document.getElementsByName(\"csrf-token\");\n if (!token || !token[0]?.content) return;\n\n axios({\n url: \"/home/any_background_jobs\",\n method: \"GET\",\n responseType: \"json\",\n headers: {\n \"X-CSRF-Token\": token[0].content,\n Accept: \"application/json\"\n }\n }).then(({ data }) => {\n if (!data) return;\n const channel = subscriptions.subscriptions.find(\n x => x.channelName == \"RatsanetJobsChannel\"\n );\n if (!channel) createSubscription(data);\n if (data.length > 0) {\n BackgroundJobToast.updateTotalJobs(data.length);\n BackgroundJobToast.toggleFailedJobIndicator(\n data.some(({ error }) => error)\n );\n BackgroundJobToast.toggleFailedJobIndicator(false);\n\n if (channel) {\n data.forEach(job => {\n channel.jobs[job.queue_name] = new BackgroundJobToast(job, {\n removeJob: removeBackgroundJobToast,\n cancelJob: cancelBackgroundJob\n });\n });\n }\n }\n });\n}\n\nfunction cancelBackgroundJob(toastJob) {\n axios({\n method: \"DELETE\",\n url: \"/home/delete_background_job_queue?queue=\" + toastJob.job.queue_name,\n maxRedirects: 0 // no redirecting\n })\n .then(({ data }) => {\n if (data.deleted === true) {\n removeBackgroundJobToast(toastJob);\n }\n })\n .catch(err => {\n console.error(err);\n });\n}\n\nfunction removeBackgroundJobToast(toastJob) {\n const channel = subscriptions.subscriptions.find(\n x => x.channelName == \"RatsanetJobsChannel\"\n );\n delete channel.jobs[toastJob.job.queue_name];\n}\n\nfunction turboStreamUpdateUrl(selector) {\n // This only exists because when partial html contains any sign of wardern/cancancan it will just fail\n const url = document.querySelector(selector)?.dataset?.updateParam;\n if (url) {\n const token = document.getElementsByName(\"csrf-token\");\n axios({\n url: url,\n method: \"GET\",\n maxRedirects: 0, // no redirecting,\n headers: {\n \"X-CSRF-Token\": token[0].content,\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data: response }) => {\n Turbo.session.receivedMessageFromStream(response);\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nexport default class extends Controller {\n initialize() {}\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nimport Sortable from \"sortablejs\";\nimport toast from \"@mixins/toast\";\n\nexport default class extends Controller {\n static targets = [\"trackerIndexNav\"];\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n }\n\n trackerIndexNavTargetConnected() {\n if (window.location.hash) {\n document\n .querySelector(`[href=\"#${window.location.hash.split(\"-\")[1]}\"]`)\n ?.click();\n }\n\n [\"#showjumping\", \"#dressage\", \"#eventing\", \"#endurance\"].forEach(\n selector => {\n const nav = document.querySelector(`[href=\"${selector}\"]`);\n\n if (!document.querySelector(selector)) {\n nav.classList.add(\"disabled\");\n nav.removeAttribute(\"data-bs-toggle\");\n nav.setAttribute(\"tab-index\", -1);\n nav.setAttribute(\"aria-disabled\", true);\n }\n\n nav.addEventListener(\"click\", evt => {\n window.location.hash = evt.target.dataset.hash;\n });\n }\n );\n }\n\n manage() {\n if (window.location.search.includes(\"?tab=\")) {\n const param = new URLSearchParams(window.location.search);\n const disciplineTabNav = document.querySelector(\n `[href=\"#${param.get(\"tab\")}\"]`\n );\n if (disciplineTabNav) disciplineTabNav.click();\n }\n\n document.querySelectorAll(\"tbody\").forEach(e => {\n new Sortable(e, {\n handle: \".drag-handler\",\n dragClass: \".drag\",\n scroll: true,\n onEnd: function (evt) {\n if (evt.oldIndex == evt.newIndex) return false;\n evt.target\n .closest(\".tab-pane\")\n .querySelectorAll(\".rank-order\")\n .forEach((row, i) => {\n row.attributes[\"rank-order\"].value = i;\n });\n }\n });\n });\n\n $(\".save-trackers-order\").on(\"click\", function () {\n const el = $(this).parents(\".tab-pane\")[0];\n const rows = Array.from(el.querySelectorAll(\".rank-order\")).map(r => {\n return {\n tracker_id: r.attributes[\"tracker-id\"].value,\n rank_order: r.attributes[\"rank-order\"].value\n };\n });\n\n $.ajax({\n method: \"POST\",\n url: \"/tracker_definitions/update_trackers_rank_order\",\n cache: false,\n headers: {\n \"X-CSRF-Token\": document.getElementsByName(\"csrf-token\")[0].content\n },\n data: { trackers: JSON.stringify(rows) },\n beforeSend: function () {\n $(this).prop(\"disabled\", true);\n }\n })\n .done(function () {\n $(this).prop(\"disabled\", false);\n toast({ state: \"success\" });\n })\n .fail(function (err) {\n console.log(err);\n $(this).prop(\"disabled\", false);\n });\n });\n }\n\n goToTracker({ currentTarget }) {\n const path = currentTarget.dataset.trackerPath;\n Turbo.visit(path);\n }\n}\n","export default function ({ id, title, bodyMessage, state, toastOptions }) {\n if (!toastOptions) {\n toastOptions = { autohide: false, delay: 3000 };\n }\n if (!state) state = \"info\";\n const loadingSpinner = `\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"sr-only\">Laen...</span>\n </div>\n `;\n if (!title) {\n switch (state) {\n case \"success\":\n title = \"Tehtud\";\n if (!bodyMessage) bodyMessage = \"Salvestamine õnnestus!\";\n break;\n case \"loading\":\n title = \"Päring\";\n bodyMessage = loadingSpinner + bodyMessage;\n break;\n case \"error\":\n title = \"Viga\";\n if (!bodyMessage) bodyMessage = \"Salvestamisel tekkis viga!\";\n break;\n }\n }\n\n if (id && $(id)) {\n $(id + \" .toast-header stronger\").text(title);\n $(id + \" .toast-body\").text(bodyMessage);\n $(`#toast${id} .toast`).toast(toastOptions);\n } else {\n id = document.querySelectorAll(\".toast\").length;\n const toast = `\n <div id=\"toast${id}\" class=\"toast\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"p-2 bg-${state}\">\n <b class=\"me-auto\">${title}</b>\n <button type=\"button\" class=\"ms-2 mb-1 close\" data-bs-dismiss=\"toast\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"toast-body\">\n ${bodyMessage}\n </div>\n </div>\n `;\n\n $(\"#toasts\").append(toast);\n $(`#toast${id}`).toast(toastOptions);\n $(`#toast${id}`).toast(\"show\");\n $(`#toast${id}`).on(\"hidden.bs.toast\", () => {\n $(`#toast${id}`).remove();\n });\n return `#toast${id}`;\n }\n}\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\nrequire(\"@rails/activestorage\").start();\nrequire(\"channels\");\n\nimport \"./plugins/hotwired\";\n// Emit events trough window object\nimport EventEmitter from \"events\";\nwindow.emitter = new EventEmitter();\nimport * as bootstrap from \"bootstrap\";\n\nimport jquery from \"jquery\";\n// Makes it usable in views\nwindow.$ = jquery;\n// Required for bootstrap v5. Some places still use with jquery like in bootstrap v3/v4\nwindow.jQuery = jquery;\nwindow.bootstrapModal = bootstrap.Modal;\nimport axios from \"axios\";\n\nrequire(\"@nathanvda/cocoon\");\n\n//import \"./themeMode.js\";\n\nimport \"./plugins/datepicker\";\nimport \"./plugins/dayjs\";\nimport \"./plugins/datepicker\";\nimport \"./plugins/select2\";\nimport hugerte from \"hugerte\";\n\nimport { removeVisibleTooltips, setupJavascript, initTooltips } from \"./setup\";\n\ndocument.addEventListener(\"turbo:visit\", () => {\n document.body.classList.add(\"cursor-loading\");\n});\n\ndocument.addEventListener(\"turbo:before-cache\", () => {\n removeVisibleTooltips();\n hugerte.remove(); // remove or else it will not init again\n const toasts = document.querySelector(\"#toasts\");\n if (toasts.childElementCount) {\n toasts.childNodes.forEach(el => el.remove());\n }\n});\n\ndocument.addEventListener(\"turbo:load\", () => {\n document.body.classList.remove(\"cursor-loading\");\n\n const token = document.getElementsByName(\"csrf-token\");\n if (token && token[0]?.content) {\n axios.defaults.headers.common[\"X-CSRF-Token\"] = token[0].content;\n axios.defaults.headers.common[\"Accept\"] = \"application/json;charset=UTF-8\";\n }\n});\n\ndocument.addEventListener(\"turbo:submit-end\", e => {\n // Reinit tooltips\n hugerte.remove(); // remove or else it will not init again\n removeVisibleTooltips();\n initTooltips();\n\n // Do not scroll if form is inside modal, triggered by shadow form or form with button_to class\n // Shadow form as in rails ujs/turbo confirm is used on <a> and clicking it creates new one\n if (\n !(\n e.target.hidden || // When its link but has data-turbo-method=\"post\" which creates seperate form action\n e.target.closest(\"#modal\") || // When its inside modal or confirmation variant for turbo\n e.target.closest(\"#modalTurbo\") ||\n e.detail.formSubmission.formElement.style.display ==\n \"none\" /* Shadow form is hidden*/ ||\n e.detail.formSubmission.formElement.classList.contains(\"button_to\")\n )\n ) {\n document.querySelector(\"main.container\").scrollIntoView();\n window.scroll(0, -50);\n }\n\n // This custom event needs to be manually attached trough stimulus and not trough data-action because\n // stimulus doesn't support custom events\n e.detail.formSubmission.formElement.dispatchEvent(\n new CustomEvent(\"form:submit-end\", { detail: e.detail })\n );\n\n setTimeout(() => {\n setupJavascript();\n }, 100);\n});\n","import { Controller } from \"@hotwired/stimulus\";\nimport { Collapse } from \"bootstrap\";\nimport axios from \"axios\";\nimport dayjs from \"dayjs\";\n\nexport default class extends Controller {\n static targets = [\n \"competitionForm\",\n \"competitionEntryRuleTemplate\",\n \"initDifficulties\"\n ];\n\n competitionEntryRuleTemplateTargetConnected(element) {\n window.requestAnimationFrame(() => {\n window.initSelect2(element);\n const nestedField = $(element).closest(\".nested-fields\");\n\n $(element).on(\"select2:select\", e => {\n axios({\n url: \"/competition_entry_rule_details\",\n method: \"POST\",\n data: {\n template_id: e.params.data.id\n },\n responseType: \"json\"\n }).then(({ data }) => {\n Object.entries(data).forEach(([k, v]) => {\n let el = null;\n switch (k) {\n case \"allow_single_license\":\n el = nestedField.find(`[data-input-target='${k}']`)[0];\n if (el) el.checked = true;\n break;\n case \"horse_type\":\n case \"amateur_allowance\":\n el = nestedField.find(`input[type=radio][value='${v}']`)[0];\n if (el) el.checked = true;\n break;\n\n case \"athlete_difficulty_results_from_date\":\n case \"athlete_difficulty_results_until_date\":\n case \"horse_difficulty_results_from_date\":\n case \"horse_difficulty_results_until_date\":\n case \"athlete_exclusion_difficulty_results_from_date\":\n case \"athlete_exclusion_difficulty_results_until_date\":\n case \"horse_exclusion_difficulty_results_from_date\":\n case \"horse_exclusion_difficulty_results_until_date\":\n {\n nestedField.find(`[data-input-target='${k}']`).val(v);\n nestedField\n .find(`[data-input-target='${k}']`)\n .prev()\n .datepicker(\"update\", dayjs(v).toDate());\n }\n break;\n default: {\n nestedField\n .find(`[data-input-target='${k}']`)\n .val(v)\n .trigger(\"change\");\n }\n }\n });\n });\n });\n });\n }\n\n competitionFormTargetConnected(element) {\n if (element.closest(\".modal-dialog\")) {\n element\n .closest(\".modal-dialog\")\n .classList.add(\"modal-dialog-competitions-form\");\n }\n\n const eventcodes = $(\"#competition_eventcode\").html();\n const additEventcodes = $(\"#competition_addit_eventcode\").html();\n const types = $(\"#competition_competition_type\").html();\n //const oldDifficulties = $(\".old_difficulty_selection\").html();\n\n const updateBasedOnDiscipline = function (parentElem) {\n const escapedDiscipline = $(\"#competition_discipline :selected\")\n .val()\n .replace(/([ #;&,.+*~\\':\"!^$[\\]()=>|\\/@])/g, \"\\\\$1\");\n\n $(\".combined_diff\").each(function () {\n $(this)[escapedDiscipline == \"combined\" ? \"show\" : \"hide\"]();\n });\n\n const eventcodeOptions = $(eventcodes)\n .filter(`optgroup[label=\"${escapedDiscipline}\"]`)\n .html();\n const additEventcodeOptions = $(additEventcodes)\n .filter(`optgroup[label=\"${escapedDiscipline}\"]`)\n .html();\n const typeOptions = $(types)\n .filter(`optgroup[label=\"${escapedDiscipline}\"]`)\n .html();\n\n if (eventcodeOptions) $(\"#competition_eventcode\").html(eventcodeOptions);\n if (additEventcodeOptions)\n $(\"#competition_addit_eventcode\").html(additEventcodeOptions);\n if (typeOptions) $(\"#competition_competition_type\").html(typeOptions);\n initDifficulties(parentElem);\n };\n\n const initDifficulties = function (parentElem) {\n function setCollapse(el) {\n $(el)\n .find(\"input.class-nr\")\n .on(\"input\", e => {\n $(el).find(\"div.class-details span[data-nr]\").text(e.target.value);\n });\n\n $(el)\n .find(\"input.class-name\")\n .on(\"input\", e => {\n $(el)\n .find(\"div.class-details span[data-name]\")\n .text(e.target.value);\n });\n\n $(el)\n .find(\".division-card\")\n .on(\"click\", () => {\n const body = $(el).find(\".card-body\")[0];\n Collapse.getOrCreateInstance(body).toggle();\n $(el).find(\"div.class-details i\").toggleClass(\"counter-rotate\");\n });\n }\n\n $(parentElem)\n .find(\".difficulty_selection\")\n .each(function () {\n if ($(this).hasClass(\"select2-hidden-accessible\")) {\n $(this).select2(\"destroy\");\n }\n initDifficultyOptions(this);\n });\n\n $(parentElem)\n .find(\".select2\")\n .each(function () {\n if (!$(this).hasClass(\"select2-hidden-accessible\")) {\n window.initSelect2(this);\n }\n });\n\n if ($(parentElem).hasClass(\"nested-fields\")) {\n setCollapse(parentElem);\n } else {\n $(parentElem)\n .find(\".nested-fields\")\n .each(function (i, el) {\n setCollapse(el);\n });\n }\n };\n\n updateBasedOnDiscipline($(\"#division_rows\"));\n\n $(\"#competition_discipline\").on(\"change\", function (evt) {\n updateBasedOnDiscipline($(\"#division_rows\"));\n });\n\n $(\"#division_rows\").on(\"cocoon:after-insert\", function (e, inserted) {\n initDifficulties(inserted);\n });\n\n $(\n \"#competition_entry_rule_rows,#competition_entry_rule_difficulty_rows\"\n ).on(\"cocoon:after-insert\", function (e, inserted) {\n window.initDatepicker();\n initDifficulties(inserted);\n });\n\n document.querySelectorAll(\".nested-fields .card-body\").forEach(el => {\n if (!el.classList.contains(\"show\")) new Collapse(el).show();\n });\n }\n\n competitionFormTargetDisconnected() {\n if (document.querySelector(\"#modal .modal-dialog\")) {\n document\n .querySelector(\"#modal .modal-dialog\")\n .classList.remove(\"modal-dialog-competitions-form\");\n }\n }\n}\n\nfunction initDifficultyOptions(element) {\n const escapedDiscipline = $(\"#competition_discipline :selected\")\n .val()\n .replace(/([ #;&,.+*~\\':\"!^$[\\]()=>|\\/@])/g, \"\\\\$1\");\n\n const difficultyOptions = document.querySelector(\n `[data-select-discipline='selectOptions-${escapedDiscipline}']`\n );\n\n const selected = $(element).val();\n\n $(element).on(\"select2:clear\", () => {\n $(this).parents(\".nested-fields\").find(\".difficulty_value\").val(null);\n $(this).parents(\".nested-fields\").find(\".marking_sheet_value\").val(null);\n });\n\n $(element).on(\"select2:select\", evt => {\n const [difficulty, markingSheet = null] = evt.params.data.id.split(\"__\");\n $(element)\n .closest(\".nested-fields\")\n .find(\".difficulty_value\")\n .val(difficulty);\n $(element)\n .closest(\".nested-fields\")\n .find(\".marking_sheet_value\")\n .val(markingSheet);\n });\n\n if (difficultyOptions) {\n $(element).html(difficultyOptions.cloneNode(true).children);\n }\n $(element).val(selected).trigger(\"change\");\n}\n","export const openMobileDialog = function (target) {\n const overlay = document.createElement(\"div\");\n overlay.classList.add(\n \"modal-backdrop\",\n \"fade\",\n \"show\",\n \"ratsanet-mobile-overlay\"\n );\n overlay.addEventListener(\"mousedown\", () => {\n overlay.remove();\n closeMobileDialog(target);\n });\n\n document.body.append(overlay);\n\n $(target).addClass(\"d-block\");\n $(\"html\").addClass(\"overflow-hidden\");\n //mobileMenuHash(true);\n};\n\nexport const closeMobileDialog = function (target) {\n $(\".ratsanet-mobile-overlay\").remove();\n\n $(target).removeClass(\"d-block\");\n $(\"html\").removeClass(\"overflow-hidden\");\n // mobileMenuHash(false);\n};\n\nfunction mobileMenuHash(openOrClose) {\n /*if (openOrClose == true) {\n } else if (openOrClose == false) {\n }*/\n // This function is only meant for mobile users to make back button work as close button\n /*if (openOrClose) {\n window.location.hash = 'mobileOpen';\n } else if (window.location.hash == '#mobileOpen') {\n // When x is false but hash still has the given value, go back to remove it from url\n window.history.back();\n }*/\n}\n","import { Modal } from \"bootstrap\";\nimport { LoadingSpinnerHandler } from \"./btnLoading\";\n\nexport const turboConfirmationDialog = shadowForm => {\n const modal = document.querySelector(\"#modal\").cloneNode(true);\n modal.setAttribute(\"id\", \"modalTurbo\");\n modal.setAttribute(\"data-turbo\", \"true\");\n const modalInstance = Modal.getOrCreateInstance(modal);\n const modalContent = modal.querySelector(\".modal-content\");\n\n const title = shadowForm.dataset.title || \"Kinnitamine\";\n let description = shadowForm.dataset.turboConfirm;\n let submitText = shadowForm.dataset.submit;\n\n const existingSubmit = shadowForm.querySelector(\n `input[type=submit],button[type=submit]`\n ); // If its button_to helper, it takes the form with inputs\n // If its link_to helper, then it just the form element created by turbo\n\n if (existingSubmit) {\n if (existingSubmit.tagName == \"BUTTON\") {\n existingSubmit.classList.remove(\"btn-lg\");\n existingSubmit.classList.remove(\"btn-sm\");\n if (submitText) existingSubmit.innerText = submitText;\n } else {\n // Convert input to button\n const confirmSubmit = document.createElement(\"button\");\n confirmSubmit.type = \"submit\";\n confirmSubmit.innerText = submitText || existingSubmit.value;\n confirmSubmit.className = existingSubmit.className;\n confirmSubmit.classList.remove(\"btn-lg\");\n confirmSubmit.classList.remove(\"btn-sm\");\n existingSubmit.replaceWith(confirmSubmit);\n }\n if (existingSubmit.dataset.turboConfirm) {\n description = existingSubmit.dataset.turboConfirm;\n }\n\n delete existingSubmit.dataset.turboConfirm;\n delete existingSubmit.dataset.turboMethod;\n } else {\n // Used when form has no submit button\n let submitClass = \"btn\";\n switch (shadowForm.getAttribute(\"method\")) {\n case \"delete\":\n submitClass += \" btn-delete\";\n submitText = submitText || \"Kinnita\";\n break;\n default:\n submitClass += \" btn-submit\";\n }\n\n const confirmSubmit = document.createElement(\"button\");\n confirmSubmit.type = \"submit\";\n confirmSubmit.innerText = submitText || \"Kinnita\";\n confirmSubmit.className = submitClass;\n\n if (!description) {\n fragment.content.querySelector(\".modal-body\").remove();\n }\n\n shadowForm.append(confirmSubmit);\n }\n\n shadowForm.removeAttribute(\"data-turbo-confirm\");\n shadowForm.classList.add(\"d-inline\");\n\n shadowForm.addEventListener(\"submit\", () => {\n const submit = shadowForm.querySelector(\"[type=submit]\");\n submit.disabled = true;\n submit.classList.add(\"disabled\");\n LoadingSpinnerHandler.add(submit);\n });\n\n shadowForm.addEventListener(\"form:submit-end\", () => {\n // This listener gets called in file application.js in turbo:submit-end listener\n\n // Set timeout to ensure turbo_stream handles turbo_stream response\n // Then check if input with the name of do_not_close exists.\n // If exists and value is truthy, then do not close modal\n setTimeout(() => {\n const doNotClose = modal.querySelector(\"input[name='do_not_close']\");\n if (!doNotClose || !doNotClose.value) {\n modalInstance.hide();\n }\n }, 50); // Better have this high as chromium takes few ms more time than firefox before finding the doNotClose inpuy\n });\n\n // Remove content when modal is hidden\n modal.addEventListener(\n \"hidden.bs.modal\",\n () => {\n modal.remove();\n },\n { once: true }\n );\n\n const template = `\n <div id=\"modalContentTurbo\" class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">${title}</h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <p>${description}</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-dark\" data-bs-dismiss=\"modal\">Katkesta</button>\n </div>\n </div>\n `;\n const fragment = document.createElement(\"template\");\n fragment.innerHTML = template;\n\n fragment.content.querySelector(\".modal-footer\").append(shadowForm);\n modalContent.replaceWith(fragment.content);\n\n document.body.append(modal);\n modalInstance.show();\n\n //const modalContentDOM = document.querySelector(\"#modalContentTurbo\");\n //domObserver.observe(modalContentDOM, { childList: true });\n};\n\nexport const createConfirmationDialog = ({\n title,\n description = null,\n action\n}) => {\n const modal = document.querySelector(\"#modal\");\n const modalInstance = Modal.getOrCreateInstance(modal);\n const content = modal.querySelector(\".modal-content\");\n\n const template = `\n <div id=\"modalContent\" class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">${title}</h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <p>${description}</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-danger\" data-bs-dismiss=\"modal\">Katkesta</button>\n <button type=\"button\" class=\"btn btn-submit\">Kinnita</button>\n </div>\n </div>\n `;\n const fragment = document.createDocumentFragment(template);\n\n if (!description) {\n fragment.querySelector(\".modal-body\").remove();\n }\n\n const confirmBtn = fragment.querySelector(\".btn-submit\");\n confirmBtn.setAttribute(\"data-action\", action);\n\n content.replaceWith(fragment);\n\n // Remove content when modal is hidden\n modal.addEventListener(\n \"hidden.bs.modal\",\n evt => {\n const content = evt.target.querySelector(\".modal-content\");\n Array.from(content.children).forEach(el => content.removeChild(el));\n },\n { once: true }\n );\n\n modalInstance.show();\n};\n\nexport default function (evt) {\n let target = evt.target;\n\n if (!target.getAttribute(\"data-confirm\")) {\n // Target might been the button's child node that's displayed as icon\n target = target.parentNode;\n }\n\n const { dataset } = target;\n const modal = document.querySelector(\"#modal\");\n const modalInstance = Modal.getOrCreateInstance(modal);\n\n const content = modal.querySelector(\".modal-content\");\n const description = dataset.description || dataset.confirm;\n const title = target.title || dataset.title || dataset.confirmTitle || \"\";\n\n const template = `\n <div id=\"modalContent\" class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">${title || description}</h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <p>${title ? description : \"\"}</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-outline-danger\" data-bs-dismiss=\"modal\">Katkesta</button>\n <button type=\"button\" class=\"btn btn-submit\" data-remote=\"true\">Kinnita</button>\n </div>\n </div>\n `;\n\n const fragment = document.createRange().createContextualFragment(template);\n if (!title) {\n fragment.querySelector(\".modal-body\").remove();\n }\n\n const confirmBtn = fragment.querySelector(\".btn-submit\");\n\n // Inherit clicked button's data to dialog submit btn\n for (let dataset in target.dataset) {\n confirmBtn.dataset[dataset] = target.dataset[dataset];\n }\n // Removed confirm or it will loop\n delete confirmBtn.dataset.confirm;\n\n // Since button is button, not <a> tag, set data-url\n if (target.href && !confirmBtn.dataset.url) {\n confirmBtn.dataset.url = target.href;\n }\n\n content.replaceWith(fragment);\n\n // Remove content when modal is hidden\n modal.addEventListener(\n \"hidden.bs.modal\",\n evt => {\n const content = evt.target.querySelector(\".modal-content\");\n Array.from(content.children).forEach(el => content.removeChild(el));\n },\n { once: true }\n );\n\n modalInstance.show();\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\nimport { tinymceInit } from \"@/plugins/tinymce\";\n\nexport default class extends Controller {\n static targets = [\"eventScheduleForm\", \"tinymceEditor\"];\n\n eventScheduleFormTargetConnected() {}\n\n tinymceEditorTargetConnected(elements) {\n [elements].flat().forEach(element => {\n tinymceInit({\n selector: null,\n target: element\n });\n });\n }\n\n openModalForm({ params, currentTarget }) {\n currentTarget.disabled = true;\n axios({\n url: params.formUrl,\n method: \"POST\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n }\n }).then(({ data }) => {\n Turbo.session.receivedMessageFromStream(data);\n currentTarget.disabled = false;\n window.requestAnimationFrame(() => {\n document.querySelectorAll(\"#modalContent select\").forEach(el => {\n window.initSelect2(el);\n });\n });\n });\n }\n\n submitOfficial(evt) {\n evt.preventDefault();\n console.log(\"wooo\");\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport axios from \"axios\";\n\nlet controller = null;\nlet initialFetchOfficial = true;\nexport default class extends Controller {\n static targets = [\n \"issuer\",\n \"discipline\",\n \"qualificationType\",\n \"officialSelection\",\n \"qualificationOfficialRightsInput\"\n ];\n\n connect() {\n initialFetchOfficial = true;\n }\n\n disconnect() {\n controller?.abort();\n }\n\n fetchOfficials({ currentTarget }) {\n controller?.abort();\n controller = new AbortController();\n\n const form = currentTarget.closest(\".official-form\");\n const officialInput = form.querySelector(\n \"[data-qualifications-target='officialSelection']\"\n );\n\n const issuer = Array.from(\n form.querySelectorAll(\"[data-qualifications-target='issuer'] input\")\n ).find(x => x.checked)?.value;\n const discipline = Array.from(\n form.querySelectorAll(\"[data-qualifications-target='discipline'] input\")\n ).find(x => x.checked)?.value;\n const qualificationType = Array.from(\n form.querySelectorAll(\n \"[data-qualifications-target='qualificationType'] input\"\n )\n ).find(x => x.checked)?.value;\n\n setQualificationOfficialRightsInput(\n this.qualificationOfficialRightsInputTarget,\n initialFetchOfficial\n );\n\n initialFetchOfficial = false;\n\n if (issuer && discipline && qualificationType) {\n axios({\n url:\n officialInput.dataset.url +\n `?issuer=${issuer}&discipline=${discipline}&qualification_type=${qualificationType}`,\n method: \"GET\",\n headers: {\n Accept: \"application/json\"\n },\n signal: controller.signal\n })\n .then(({ data }) => {\n $(officialInput).empty();\n data.results.forEach((option, index) => {\n const elOption = new Option(option.text, option.id);\n elOption.setAttribute(\"data-fei\", option.is_fei);\n elOption.setAttribute(\"data-default-max\", option.default_max);\n $(officialInput).append(elOption).trigger(\"change\");\n });\n\n // First time initiating this method is just to fetch data only\n const officialId = document.querySelector(\n \"[name='original_official_id']\"\n )?.value;\n\n if (officialId) {\n $(officialInput).val(officialId).trigger(\"change\");\n } else {\n if (data.results.length) {\n $(officialInput).trigger({\n type: \"select2:select\",\n params: {\n data: data.results[0]\n }\n });\n } else {\n $(officialInput).val(null).trigger(\"change\");\n }\n }\n })\n .catch(err => {\n console.error(err);\n });\n }\n }\n\n officialSelectionTargetConnected(element) {\n this.fetchOfficials({ currentTarget: element });\n $(element).on(\"select2:select\", ({ params: { data } }) => {\n const form = element.closest(\".official-form\");\n const validTill = form.querySelector(\n \"[data-qualifications-target='validTill']\"\n );\n\n let isFei, defaultMax;\n if (data.element) {\n isFei = data.element.dataset.is_fei;\n defaultMax = data.element.dataset.default_max;\n } else {\n isFei = data.is_fei;\n defaultMax = data.default_max;\n }\n\n if (defaultMax) {\n let date = DayJS().add(defaultMax, \"years\");\n if (!isFei) date = date.endOf(\"year\");\n $(validTill).datepicker(\"setDate\", date.toDate());\n }\n });\n }\n}\n\nfunction setQualificationOfficialRightsInput(\n inputWrapper,\n doNotAlterInputs = false\n) {\n console.log(doNotAlterInputs);\n const discipline = Array.from(\n document.querySelectorAll(\"[data-qualifications-target='discipline'] input\")\n ).find(x => x.checked)?.value;\n const qualificationType = Array.from(\n document.querySelectorAll(\n \"[data-qualifications-target='qualificationType'] input\"\n )\n ).find(x => x.checked)?.value;\n\n const inputs = inputWrapper.querySelectorAll(\"input[type='checkbox']\");\n\n if (discipline === \"dressage\" && qualificationType === \"judge\") {\n inputWrapper.classList.remove(\"d-none\");\n inputs.forEach(x => {\n if (!doNotAlterInputs) {\n x.checked = false;\n }\n x.disabled = false;\n });\n } else if (discipline === \"dressage\" && qualificationType === \"steward\") {\n inputWrapper.classList.remove(\"d-none\");\n inputs.forEach(x => {\n if (!doNotAlterInputs) {\n x.checked = false;\n }\n\n if (x.labels[0].textContent == \"Para\") {\n x.disabled = false;\n } else {\n x.disabled = true;\n }\n });\n } else {\n inputWrapper.classList.add(\"d-none\");\n inputs.forEach(x => {\n if (!doNotAlterInputs) {\n x.checked = false;\n }\n x.disabled = true;\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport { LoadingSpinnerHandler } from \"@mixins/btnLoading\";\nimport axios from \"axios\";\n\nexport default class extends Controller {\n static targets = [\"configCheckbox\", \"cloneChartConfigsBtn\"];\n\n selectAllChartConfigs({ target }) {\n const checkedVal = target.checked;\n\n const table = target.closest(\"table\");\n Array.from(\n table.querySelectorAll(\"tbody > tr input[name='clone_chart_ids[]']\")\n ).forEach(checkbox => {\n checkbox.checked = checkedVal;\n });\n\n this.cloneChartConfigsUpdate();\n }\n\n cloneChartConfigsUpdate() {\n const btn = this.cloneChartConfigsBtnTarget;\n btn.disabled =\n Array.from(this.configCheckboxTargets).filter(\n checkbox => checkbox.checked\n ).length == 0;\n }\n\n cloneChartConfigs({ params }) {\n const chartIds = Array.from(this.configCheckboxTargets).reduce(\n (arr, checkbox) => {\n if (checkbox.checked) {\n arr.push(checkbox.value);\n }\n return arr;\n },\n []\n );\n\n if (chartIds.length == 0) return;\n\n LoadingSpinnerHandler.add(this.cloneChartConfigsBtnTarget);\n this.cloneChartConfigsBtnTarget.disabled = true;\n axios({\n method: \"POST\",\n url: params.url,\n redirect: \"error\",\n headers: {\n Accept: \"text/vnd.turbo-stream.html\"\n },\n data: {\n clone_chart_ids: chartIds,\n original_year: params.originalYear\n }\n }).then(({ data }) => {\n LoadingSpinnerHandler.remove(this.cloneChartConfigsBtnTarget);\n Turbo.session.receivedMessageFromStream(data);\n });\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"registrationForm\", \"ponySelectionInput\"];\n\n ponySelectionInputTargetConnected(element) {\n window.requestAnimationFrame(() => {\n window.initSelect2(element);\n\n /*$(element).on(\"select2:unselect\", () => {\n const input = $(element);\n input.addClass(\"d-none\");\n const destroyInput = document.createElement(\"input\");\n destroyInput.setAttribute(\"type\", \"hidden\");\n destroyInput.setAttribute(\"autocomplete\", \"off\");\n destroyInput.setAttribute(\n \"id\",\n input.attr(\"id\").replace(\"_id\", \"__destroy\")\n );\n destroyInput.setAttribute(\n \"name\",\n input.attr(\"name\").replace(\"[id]\", \"[_destroy]\")\n );\n destroyInput.setAttribute(\"value\", null);\n input.append(destroyInput);\n });*/\n });\n }\n\n registrationFormTargetConnected() {\n if (\n $(\"#noncompetition_registration_person_is_not_in_ratsanet:checked\")[0]\n ) {\n $(\"#person_details\").removeClass(\"d-none\");\n }\n\n $(\"#noncompetition_registration_person_is_not_in_ratsanet\").on(\n \"change\",\n evt => {\n if (evt.target.checked) {\n $(\"#person_details\").removeClass(\"d-none\");\n } else {\n $(\"#person_details\").addClass(\"d-none\");\n }\n }\n );\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nexport default class extends Controller {\n connect() {\n const actionName = this.element.getAttribute(\"data-action\");\n if (typeof this[actionName] === \"function\") this[actionName]();\n\n $(\"#startdateDatepicker\").on(\"change\", () => {\n const startDate = DayJS($(\"#startdateDatepicker\").datepicker(\"getDate\"));\n const endDate = DayJS($(\"#enddateDatepicker\").datepicker(\"getDate\"));\n if (startDate.isAfter(endDate)) {\n $(\"#enddateDatepicker\").datepicker(\"setDate\", startDate.toDate());\n }\n $(\"#enddateDatepicker\").datepicker(\"setStartDate\", startDate.toDate());\n });\n\n $(\"#enddateDatepicker\").on(\"change\", () => {\n const startDate = DayJS($(\"#startdateDatepicker\").datepicker(\"getDate\"));\n const endDate = DayJS($(\"#enddateDatepicker\").datepicker(\"getDate\"));\n if (endDate.isBefore(startDate)) {\n $(\"#startdateDatepicker\").datepicker(\"setDate\", startDate.toDate());\n }\n });\n }\n}\n"],"names":["setupJavascript","modal","document","querySelector","modalInstance","Modal","getOrCreateInstance","hiddenCallback","modalContent","Array","from","children","forEach","el","remove","addEventListener","domObserver","MutationObserver","mutationList","mutation","node","addedNodes","name","hide","show","removeEventListener","observe","childList","setUpModal","scrollBtnTigger","classList","add","scrollbtn","IntersectionObserver","entries","intersectionRatio","window","scrollTo","setupScrollUp","notice","sessionStorage","getItem","alert","removeItem","noticeBox","innerText","alertBox","setSessionMessage","initDatepicker","initSelect2","initTooltips","navTabs","querySelectorAll","length","location","hash","split","navLink","click","Dropdown","boundary","evt","preventDefault","stopPropagation","confirmationDialog","capture","removeVisibleTooltips","Tooltip","feiLicences","insurance","textInputDelay","_Class","Controller","productFormTargetConnected","tinymceInit","toolbar","orderItemFormTargetConnected","form","triggerValidation","value","submit","disabled","LoadingSpinnerHandler","formData","FormData","type","token","getElementsByName","axios","url","action","method","headers","content","Accept","data","then","Turbo","session","receivedMessageFromStream","catch","error","console","clearTimeout","setTimeout","$","on","insuranceInput","target","camelCase","feiLicenceInput","targetInput","checked","push","filter","x","initialize","actionName","this","element","getAttribute","index","search","includes","param","URLSearchParams","disciplineTabNav","get","history","replaceState","state","discipline","setHash","params","visit","pathname","selectDifferentYearWithHash","href","openMenu","currentTarget","openMobileDialog","dataset","closeMenu","closeMobileDialog","selectedText","closest","connect","Carousel","interval","formTargetConnected","controller","AbortController","disconnect","abort","loadMore","set","pageNumberValue","toString","responseType","signal","rows","parseTableRows","append","err","_defineProperty","pageNumber","Number","response","table","createElement","id","innerHTML","courseEventTableFormSignal","searchInputDelay","searchQueryDelay","_courseEventTableForm","courseEventFormTargetConnected","code","categoryInput","showOrHideCategoryTextInput","removeClass","addClass","val","newDate","dayjs","endDateInput","endDate","datepicker","toDate","courseEventsTableFormTargetConnected","e","className","fetchEvents","_courseEventTableForm2","loadingDelay","showLoading","redirect","maxRedirects","warn","loadingIndicatorBtn","cloneNode","prepend","loadMoreEvents","courseEventsTableFormTarget","tableFormPage","openTableFilters","goToCourseEvent","tagName","searchDisciplineParam","has","allSelected","toggleAllPeopleSelection","goToMassAssignment","containerTargetConnected","broadcastJobsManualTriggerWatcherTargetConnected","backgroundJobStarted","subtree","attributes","externalDialog","siblings","dialog","parentNode","removeChild","mobileDialogSubmit","requestSubmit","expand","toggle","openLoginForm","loginForm","popperInstance","createPopper","loginFormPopperAnchorTarget","placement","modifiers","options","offset","loginFormExit","_document$querySelect","body","destroy","overlay","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","keys","Object","resolve","module","exports","eventTableFormSignal","_eventTableFormSignal","openCupsFilter","cupSearchTargetConnected","Promise","multidate","clearBtn","autoclose","minViewMode","maxViewMode","forceParse","format","toDisplay","date","DayJS","toValue","passive","renderStreamMessage","cupTableContentTarget","childElementCount","eventsForCupInputTargetConnected","select2","minimumInputLength","ajax","delay","dataType","log","startdate","enddate","disciplineIds","find","each","i","option","term","discipline_ids","select","hasClass","once","startDate","isAfter","isBefore","channels","require","newHorseOwnerTargetConnected","async","post","requestAnimationFrame","valid","goToClub","path","clubPath","getRecipients","mass_mail","competition_division_difficulty_ids","trHTML","item","email","html","empty","countRecipients","prop","recipientCheckboxes","recipientsCount","goToHorse","horsePath","openHorseFilter","innerWidth","Collapse","loadMoreHorses","loadMoreTablePageValue","trigger","k","v","input","scrollIntoView","scrollBy","shareCompetitionsLink","navigator","clipboard","writeText","resultsToggle","legacyResultsTarget","modernResultsTarget","modernResultsTargetConnected","RatsanetTable","eagerFetch","contentBodySelector","itemsPerPage","new_horse_owner","attr","loadMoreTablePage","constructor","config","searchInputInUse","_pagesRange","timer","currentPageIndex","foundTotal","$form","searchFilter","_fetchResults","$table","setAttribute","observerTrigger","observer","contains","targetNode","$paginationContainer","pagesRange","$contentBody","$tableBody","_updatePageRange","_renderPagination","totalCount","range","pages","Math","ceil","parseInt","flat","renderList","slice","start","end","leftSide","rightSide","unshift","pageNum","linkElement","appendChild","_changePage","bind","pageIndex","behavior","block","_document$getElements","limit","key","totalFound","resultTotal","LOADING_SPINNER","createRange","createContextualFragment","eventFormFieldCupsSignal","eventFormTargetConnected","formElement","subtract","refreshFormFieldCups","hasEventFormFieldCupsTarget","disciplines","eventFormFieldDisciplinesTargets","eventFormFieldStartdateTarget","eventFormFieldEnddateTarget","selected","eventFormFieldCupsTarget","_eventFormFieldCupsSi","firstChild","seletcedValuesStillExist","results","cup","Option","text","eventFormFieldDisciplinesTargetConnected","labels","textContent","eventsTableFormTargetConnected","eventsTableFormTarget","accept","eventsTableFormPageValue","eventsTableContentTarget","eventsTableFormLoadMoreTarget","confirmCompetitionOrderTargetConnected","button","sortable","Sortable","handle","dragClass","scroll","onStart","onEnd","oldIndex","newIndex","tr","_confirmCustomCompetitionOrder","hasConfirmCompetitionOrderTarget","row","order","eventIdValue","event_id","competitions","JSON","stringify","review_payments","horse_checkboxes","countHorseCheckedCheckboxes","person_checkboxes","countPersonCheckedCheckboxes","goToEvent","openEventFilter","confirm_events","btn","confirmEventsSubmit","confirmEventsFormTarget","success","setItem","message","reload","toggleParticipantsCount","hasUpdateParticipantsFormTarget","participantsTotalTarget","toggleClass","updateParticipantsFormTarget","updateParticipants","submitBtn","newCount","protocolSelection","Boolean","showRegistrationDates","doc","sortRegistartionDates","tbody","reduce","arr","sort","a","b","unix","eventOverviewSubmittedExportModalFormTargetConnected","year","blob","Blob","link","URL","createObjectURL","download","getInstance","showParadressageOption","checkboxWrapper","eventsTableFormPage","eventId","intervalPingPong","invoiceRequest","showInvoiceForm","termsAgreed","agreeTerms","hasMontonioPaymentMethodsTarget","_document$querySelect2","montonioPaymentMethodsTarget","stripeFormTargetConnected","_element$querySelecto","_element$querySelecto2","_element$querySelecto3","_element$querySelecto4","_element$querySelecto5","_element$querySelecto6","useSandbox","stripe","stripePublicKey","stripeClientSecret","paymentIntentUuid","onBehalfOf","amount","createOrder","montonioWalletUrlValue","cancelOrder","montonioCancelUrlValue","expressCheckoutElement","getElementById","event","montonioSuccessUrlValue","checkoutCallback","values","onMontonioLoaded","embeddedPayment","Montonio","Checkout","EmbeddedPayments","initializePayment","locale","country","targetId","expressCheckoutTargetId","enableExpressCheckout","onExpressCheckoutAsync","currency","paymentMethod","version","confirmPayment","pingPongIsOrderPaidTargetConnected","currentUrl","pingPongUntilPaid","pingPongIsOrderPaidTargetDisconnected","clearInterval","showHideBankPaymentMethods","invoiceFormTarget","bankOptionsTarget","informTransaction","informTransactionTarget","expandOrder","rtsTarget","checkAllOrderUpdate","openOrderItemEdit","openConfirmationDialog","confirmPaymentSubmission","detail","formSubmission","result","bankingCountrySelectTargetConnected","updateBankSelections","toggleInvoicePayment","montonioWalletUrl","String","montonioSuccessUrl","montonioCancelUrl","Chart","register","Colors","abortController","updateChart","root","chartUpdate","CustomEvent","dispatchEvent","selectStatistic","_currentStat$classLis","_loading$classList","statName","oldActive","statListNavigationTarget","currentStat","statViewTargets","newStat","loading","expandTable","collapseTarget","collapse","statViewsTargetConnected","previousElementSibling","firstStatId","statListNavigationTargetConnected","call","parent","_Collapse$getInstance","statContentTargetConnected","canvas","datasets","parseTableData","responsive","plugins","colors","forceOverride","chart","merge","chartType","scales","stacked","y","y2","display","position","chartConfig","update","hydrateAllCache","min","max","minIndex","findIndex","maxIndex","groups","chartGroup","column","array","groupLabel","_groupLabel$dataset$c","_groupLabel$dataset","columns","splice","chartValue","label","yAxisID","chartYAxesId","sanctionAllTypes","sanctinoAllReasons","delaySubmit","assertReasonTextRequirement","entity","entityValue","primaryFormTarget","updateBasedOnEntity","horseId","horseFutureCompetitionWrapper","horse_id","updateEntitySelection","personSelect","horseSelect","reasonsThatRequireText","reasonRequiresTextTargets","reasonTextWrapper","searchFormTargetConnected","loadingIndicator","loadMoreSanctions","page","blank","personTypes","horseTypes","personReasons","horseReasons","registrationFormTargetConnected","updateForm","delete","formWrapperTarget","formLoadingTarget","checkUrlValue","uncheckOtherDifficulty","difficulties","division","uncheckOtherDivisions","difficultyCheckboxTargets","entriesCompetitionNrParam","competitionNr","entriesDivisionParam","checkUrl","test","ponyMeasurementEventTableFormSignal","_ponyMeasurementEvent","ponyMeasurementEventFormTargetConnected","regEndDateInput","regEndDate","ponyMeasurementEventsTableFormTargetConnected","_ponyMeasurementEvent2","toggleMasterlistTable","masterlist","simplifiedMasterlist","trainerProfileFormTargetConnected","copyFileLink","uploadFiles","upload","files","file","deleteUpload","deleteLink","childNodes","CancelToken","axionCancelToken","source","primaryMenuTargetConnected","formConsentsTargetConnected","generalCheckTarget","hasTrusteeCheckTarget","trusteeCheckTarget","marketingCheckTarget","allowOtherConsents","goToPerson","personPath","openPersonFilter","openOfficialFilter","openTrainerFilter","loadMorePeople","queryString","triggerEl","Tab","personOrdersTableTargetConnected","personEntriesTableTargetConnected","eventsOfficialTableTargetConnected","coursesTableTargetConnected","personAchievementsTableTargetConnected","personPupilsEntriesTableTargetConnected","personPupilsGreencardTableTargetConnected","personPupilsLevelsTableTargetConnected","Infinity","personPupilsYearsTableTargetConnected","personSanctionsTableTargetConnected","openProfileMenu","closeProfileMenu","officialsSearchFormTargetConnected","updateOfficialList","officialsSearchFormTarget","getAll","types","issuer","cancel","query","cancelToken","officialListTarget","thrown","isCancel","openOfficialSearchDialogInfo","closeOfficialSearchDialogInfo","parents","filterTab","trusteeConsentExport","trustee","general","undefined","marketing","open","exportUrl","menuTargetConnected","newForm","rowFormTemplate","tableBody","editForm","inputTemplate","selectInput","insertBefore","cancelForm","submitForm","courseEventId","targetObject","category","category_i18n","file_link","file_name","file_size","updateEventDocumentRow","toBeReplacedRow","noncompetition_event_id","replaceWith","createEventDocumentRow","createConsumer","BackgroundJobToast","job","callbacks","toastId","queue_name","queue","toastHandler","toast","render","toggleFailedJobIndicator","indicator","style","getCurrentJobsTotal","updateTotalJobs","total","getToastDOMString","Toast","autohide","animation","created_at","updateProgress","done_at","setSuccessState","last_error","failed_at","setFailedState","updateStage","progress_current","current","progress_max","progress","progressNumber","css","progress_stage","showCloseButton","removeJob","cancelJob","closeBtnParent","subscriptions","consumer","createSubscription","jobs","create","channelName","connected","_Object$keys","jobsListed","removeBackgroundJobToast","cancelBackgroundJob","disconnected","received","jobRespond","turbo_action_url_html_selector","selector","updateParam","turboStreamUpdateUrl","toastJob","assign","_token$","channel","some","deleted","trackerIndexNavTargetConnected","nav","removeAttribute","manage","r","tracker_id","rank_order","cache","trackers","beforeSend","done","title","bodyMessage","toastOptions","fail","goToTracker","trackerPath","emitter","EventEmitter","jquery","jQuery","bootstrapModal","bootstrap","hugerte","toasts","defaults","common","hidden","competitionEntryRuleTemplateTargetConnected","nestedField","template_id","prev","competitionFormTargetConnected","eventcodes","additEventcodes","updateBasedOnDiscipline","parentElem","escapedDiscipline","replace","eventcodeOptions","additEventcodeOptions","typeOptions","initDifficulties","setCollapse","difficultyOptions","difficulty","markingSheet","initDifficultyOptions","inserted","competitionFormTargetDisconnected","turboConfirmationDialog","shadowForm","description","turboConfirm","submitText","existingSubmit","confirmSubmit","turboMethod","submitClass","fragment","doNotClose","template","eventScheduleFormTargetConnected","tinymceEditorTargetConnected","elements","openModalForm","formUrl","submitOfficial","initialFetchOfficial","_controller","fetchOfficials","_controller2","_Array$from$find","_Array$from$find2","_Array$from$find3","officialInput","qualificationType","inputWrapper","doNotAlterInputs","_Array$from$find4","_Array$from$find5","inputs","setQualificationOfficialRightsInput","qualificationOfficialRightsInputTarget","elOption","is_fei","default_max","officialId","officialSelectionTargetConnected","validTill","isFei","defaultMax","endOf","selectAllChartConfigs","checkedVal","checkbox","cloneChartConfigsUpdate","cloneChartConfigsBtnTarget","configCheckboxTargets","cloneChartConfigs","chartIds","clone_chart_ids","original_year","originalYear","ponySelectionInputTargetConnected"],"sourceRoot":""}