{"version":3,"sources":["webpack:///./app/javascript/src/utils.js","webpack:///./app/javascript/controllers sync _controller\\.js$","webpack:///./app/javascript/controllers/breed_centre_controller.js","webpack:///./app/javascript/controllers/breeding_females_controller.js","webpack:///./app/javascript/controllers/bulk_actions_controller.js","webpack:///./app/javascript/controllers/content_loader_controller.js","webpack:///./app/javascript/controllers/data_table_controller.js","webpack:///./app/javascript/controllers/date_time_picker_controller.js","webpack:///./app/javascript/controllers/editable_input_controller.js","webpack:///./app/javascript/controllers/flash_notice_controller.js","webpack:///./app/javascript/controllers/form_controller.js","webpack:///./app/javascript/controllers/hound_controller.js","webpack:///./app/javascript/controllers/hound_parent_controller.js","webpack:///./app/javascript/controllers/infinite_scroll_controller.js","webpack:///./app/javascript/controllers/lineage_controller.js","webpack:///./app/javascript/controllers/map_controller.js","webpack:///./app/javascript/controllers/modal_controller.js","webpack:///./app/javascript/controllers/modal_form_controller.js","webpack:///./app/javascript/controllers/nested_form_controller.js","webpack:///./app/javascript/controllers/nested_select_controller.js","webpack:///./app/javascript/controllers/number_input_controller.js","webpack:///./app/javascript/controllers/popover_controller.js","webpack:///./app/javascript/controllers/scrollable_table_controller.js","webpack:///./app/javascript/controllers/search_form_controller.js","webpack:///./app/javascript/controllers/select_controller.js","webpack:///./app/javascript/controllers/simple_modal_controller.js","webpack:///./app/javascript/controllers/slideshow_controller.js","webpack:///./app/javascript/controllers/toggle_controller.js","webpack:///./app/javascript/controllers/visibility_toggle_controller.js","webpack:///./app/javascript/controllers/year_input_controller.js","webpack:///./app/javascript/src/confirm.js","webpack:///./app/javascript/src/forms.js","webpack:///./app/javascript/src/table.js","webpack:///./app/javascript/src/mapkick.js","webpack:///./app/javascript/controllers/index.js","webpack:///./app/javascript/src/actiontext.js","webpack:///./app/javascript/src/tooltips.js","webpack:///./app/javascript/src/modal_component.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/src/drag_n_drop.js","webpack:///./app/javascript/controllers/drag_n_drop_controller.js","webpack:///./app/javascript/src/cable.js","webpack:///./app/javascript/controllers/inbreeding_matches_controller.js","webpack:///./app/javascript/src/viewport_entrance_observer.js","webpack:///./app/javascript/controllers/lazy_image_controller.js","webpack:///./app/javascript/src/direct_upload.js","webpack:///./app/javascript/controllers/upload_controller.js"],"names":["findElements","root","selector","document","elements","querySelectorAll","toArray","makeElement","tag","opts","element","createElement","attr","value","setAttribute","removeElement","el","parentNode","removeChild","getMetaValue","name","head","querySelector","getAttribute","getAuthenticityToken","dispatchEvent","type","initEvent","disabled","bubbles","cancelable","detail","event","createEvent","Array","isArray","from","slice","call","insertAfter","ref","insertBefore","nextSibling","animateElementWithClass","tokens","callback","DOMTokenList","prototype","add","apply","classList","className","addEventListener","handleAnimateEnd","remove","removeEventListener","rFetch","resource","_options","query","options","url","setupHeaders","setupContentType","setupAccept","setupCredentials","setupQueryParams","fetch","then","checkStatus","parseResponse","headers","Object","assign","contentType","as","credentials","response","status","error","Error","statusText","method","indexOf","qs","stringify","body","blob","json","text","getPlaceholderImageURL","r","g","b","a","canvas","context","getContext","size","width","height","fillStyle","fillRect","toDataURL","refreshWithScrollLock","scrollPosition","window","scrollTo","scrollX","scrollY","Turbolinks","visit","location","action","isMobile","matchMedia","matches","safeParse","data","JSON","parse","_","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","code","keys","resolve","module","exports","onSuccess","raw","select","slim","xhr","existing","setData","set","modalTarget","getElementById","close","this","Controller","ACTIONS","split","enableButtons","target","checked","isShiftSelected","lastSelectedCheckbox","shiftSelect","selected","ids","selectedCount","selectedIdsFieldTargets","forEach","field","nextFrame","checkboxTargets","checkbox","update","key","shiftSelectEnabled","startTarget","endTarget","start","end","Math","min","max","result","selectedCheckboxTargets","dataset","push","identifier","filter","menuItemTargets","hidden","kind","capitalizeString","string","charAt","toUpperCase","targets","loaded","load","content","innerHTML","get","datatable","DataTable","paging","labels","placeholder","noRows","datepickr","flatpickr","initClearButton","destroy","currentTarget","parent","parentElement","button","clearInput","insertAdjacentHTML","buttonHtml","bind","clear","trim","allowInput","altFormat","altInput","dateFormat","enableSeconds","enableTime","noCalendar","time_24hr","locale","Czech","addEventListeners","form","handleClick","uninstallForm","handleKeyup","handleSubmit","removeEventListeners","visible","preventDefault","stopPropagation","valueTarget","textContent","eventHandlers","templateTarget","slot","setCurrentValue","setPosition","toggleForm","toggleableTarget","toggle","contains","keyCode","Rails","fire","rect","getBoundingClientRect","style","top","ceil","left","formFields","find","checkValidity","children","getElementsByTagName","length","slotTarget","timeout","setTimeout","animateAndRemove","duration","clearTimeout","elem","parseInt","onError","removeExistingErrorMessages","errors","showErrorForInvalidFields","undefined","includes","fieldContainer","closest","existingErrorMessageElement","entries","values","shouldValidateField","showErrorForInvalidField","message","buildFieldErrorHtml","fetchCollection","callbackFn","search","q","fetchAssociations","breed","normalizedBreed","shouldFetchBreedCentres","fetchBreedCentres","shouldFetchParents","fetchParents","shouldFetchExams","fetchExams","shouldFetchTrophies","fetchTrophies","fillBreedingDate","currentlyBreeding","currentlyBreedingInputTarget","dateOfBirth","dateOfBirthInputTarget","datePicker","breedingUntilInputTarget","_flatpickr","parsed","parseDate","Date","setFullYear","getFullYear","setDate","replaceBreedCentresOptions","replaceOptions","replaceParentsOptions","sex","replaceExamsOptions","replaceTrophiesOptions","breedCentresUrl","breed_eq","parentsUrl","examsUrl","trophiesUrl","value_key","text_key","Boolean","some","breeds","bavarian_hound","hanover_hound","handleBreedCentreCreate","handleHoundCreate","formatted_name","formTargets","offsetParent","focusable","focus","intersectionObserver","IntersectionObserver","processIntersectionEntries","rootMargin","observe","observable","unobserve","entry","isIntersecting","loadMore","next_page","paginationTarget","href","isSticky","entriesTarget","pagination","processedImageURLs","has","src","toggled","cachedMaps","coordsFromSuggest","service","createService","mapConfig","inputable","initTogglers","initVisible","initialize","loadScript","mapTarget","scriptLoaded","create","displayMarker","toggleMarkers","toggleType","removeMarker","MapService","Loader","async","suggest","autosuggest","init","embeddableTarget","getCoordsFromInput","latitude","toggleClass","container","toBoolean","ctx","uuid","m","longitude","getCoords","rawCoords","useFallbackCoords","coords","SMap","Coords","fromWGS84","lon","lat","config","marker_layer","enableMarker","enable","hasCoords","draggable","addDefaultLayer","DEF_BASE","DEF_OPHOTO","DEF_HYBRID_SPARSE","addDefaultControls","suggestInput","Suggest","urlParams","bounds","enableCategories","lang","getSignals","controls","getControls","i","Control","Compass","Zoom","removeControl","addListener","func","suggested","setCenterZoom","geometries","icon","geometry","Mapkick","syncPort","layer","getLayer","initMarker","resetMarker","setInputCoords","y","x","markerOptions","markerLayer","Layer","Marker","marker","decorate","Feature","Draggable","addLayer","addMarker","signals","evt","gps","fromEvent","setCoords","Geocoder","Reverse","geocode","dragStop","dragStart","removeAttachedListeners","removeAll","removeLayer","resetInputCoords","_markers","fallback_lon","fallback_lat","getContainer","LAYER_MARKER","cursor","geocoder","results","lat_input_id","lon_input_id","getResults","redraw","listeners","listener","_myHandleFolder","removeListener","latitudeId","longitudeId","latInput","lonInput","geometryConfig","isLoaded","script","onScriptLoad","onScriptError","appendChild","modalContainer","initializeContainer","resetModal","eventType","handleResponse","fragment","render","loadUrl","open","closeModal","addLoader","setLoaded","html","removeLoader","formTarget","wrapperClass","allowanceExceeded","replace","valueOf","addTarget","toggleAddButton","item","newRecord","display","visibleElements","index","limitCount","maxCount","updateOptionsOnInit","activeElement","tagName","updateOptionsOnSelect","items","strategy","contentTarget","createPopper","loadable","show","mouseOut","delay","hide","scheduleScrollSync","raf","scrollable","thead","theadTarget","tbody","tbodyTarget","scrollLeft","assignDimensions","setTableHeight","syncScroll","lastHeadRow","firstCellRow","lastHeadRowCells","firstCellRowCells","tableWidth","tableTarget","scrollWidth","rowWidth","firstCell","isEmpty","hasAttribute","diff","floor","toAdd","total","idx","elem1","elem2","rect1","rect2","width1","width2","maxTemp","minTemp","maxWidth","minWidth","navbar","footer","contentRect","footerRect","tbodyRect","spacer","bottom","tbodyHeight","isLocal","handleKeydown","handleRender","submittableField","setFocus","regexp","test","input","RegExp","handleOpen","info","calculateDropdownPosition","maybeAddSelectOptions","handleSearchDebounced","handleSearch","clientRect","preventAddSelectOptions","current","selectedSize","hasSelectAll","v","hasDeselectAll","applySelectAll","applyDeselectAll","unshift","populateOptions","labelOption","valueOption","allowDeselect","allowDeselectOption","beforeOpen","closeOnSelect","multiple","deselectLabel","hideSelectedOption","onChange","searchPlaceholder","searchText","fetchOnSearch","ajax","searchingText","searchFilter","removeAccents","toLowerCase","SlimSelect","fetchOnConnect","fetchData","placeholderOption","URL","origin","pathname","ignoreQueryPrefix","deps","queryDependencies","filters","reduce","memo","queryFilterName","path","res","preventInit","backgroundHtml","_backgroundHTML","backgroundId","allowBackgroundClose","blur","lockScroll","containerTarget","background","unlockScroll","scrollbarWidth","innerWidth","documentElement","clientWidth","paddingRight","saveScrollPosition","restoreScrollPosition","pageYOffset","scrollTop","showCurrentSlide","toggleButtons","count","slideTargets","buttonTargets","toggleableTargets","shelfTargets","shelf","trigger","triggerOn","yearInputTarget","getYearForInput","date","currentYear","require","old_confirm","confirm","delegate","join","confirmModal","String","random","confirmBtn","confirmButton","cancelBtn","cancelButton","modal","nextElementSibling","removeAttribute","click","createConfirmModal","fileInputToggle","label","labelVal","fileName","files","pop","keycodes","visitDataUrl","dataUrl","getSelection","toString","table","bindTableLinks","MarkerGeometry","processMarkers","coordinates","concat","clusterer","configClusterer","setClusterer","CustomClusterer","JAK","ClassMaker","makeClass","NAME","VERSION","EXTEND","Cluster","elm","getMap","getZoom","card","Card","panel","_card","getBody","addCard","$super","Clusterer","dataSource","fetchDataSource","processData","renderGeometry","geometryName","computeCenterZoom","center","zoom","instance","rawData","errorCatcher","err","errorToConsole","geometryType","markers","popup","console","log","application","Application","definitionsFromContext","register","Dropdown","RevealController","Tabs","Trix","toolbar","getDefaultHTML","bold","italic","strike","link","heading1","quote","bullets","numbers","outdent","indent","attachFiles","undo","redo","urlPlaceholder","unlink","EmbedController","patterns","editor","toolbarElement","hrefElement","embedContainerElement","embedElement","reset","installEventHandlers","didInput","embed","loadPatterns","match","success","pattern","source","regex","encodeURIComponent","showEmbed","currentEmbed","attachment","Attachment","insertAttachment","clipboardTooltip","tippy","showOnCreate","onHidden","clipboard","ClipboardJS","on","ModalComponent","oldValue","newValue","handler","HTMLElement","customElements","define","isListDroppable","newContainer","oldContainer","itemsSortable","props","itemSelector","listSelector","param","containers","sortable","Sortable","mirror","constrainDimensions","plugins","Plugins","ResizeMirror","dragEvent","overContainer","sourceContainer","cancel","newIndex","handle","originalSource","draggableId","formData","FormData","append","_res","columnIdx","initQuintessentialDnD","subscribeTo","channelName","mixin","consumer","subscriptions","subscribeToChannel","unsubscribeFromChannel","connected","streamChannelConnected","received","streamDataReceived","disconnected","streamChannelDisconnected","subscription","unsubscribe","cableReady","CableReady","perform","operations","ViewportEntranceObserver","delegatesByElement","WeakMap","elementWillEnterViewport","stopObserving","viewportEntranceObserver","placeholderImageURL","Set","navigator","userAgent","shouldShowPlaceholderImage","showPlaceholderImage","observeViewportEntrance","stopObservingViewportEntrance","showOriginalImage","isShowingPlaceholderImage","stashAttribute","restoreAttribute","initUppy","fileInput","allowedFileTypes","accept","uppy","Uppy","autoProceed","czechLocale","restrictions","maxNumberOfFiles","uploadServer","use","AwsS3","companionUrl","AwsS3Multipart","XHRUpload","endpoint","uploadedFileData","file","meta","fileData","uploadURL","storage","metadata","filename","mime_type","fileInputTargets","wrapper","hiddenInput","uploadResultElement","imagePreview","previewElement","chooseI18n","fileI18n","FileInput","pretty","strings","chooseFiles","Informer","ProgressBar","ThumbnailGenerator","thumbnailWidth","preview","singleFileUpload"],"mappings":"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","file":"js/application-3d00cda5cdeadf4bc984.chunk.js","sourcesContent":["import qs from \"qs\";\n\nexport const onDocumentReady = (callback) => {\n if (document.readyState !== \"loading\") {\n callback();\n } else {\n document.addEventListener(\"DOMContentLoaded\", callback);\n }\n};\n\nexport const findElement = (root, selector) => {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n};\n\nexport const findElements = (root, selector) => {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n const elements = root.querySelectorAll(selector);\n return toArray(elements);\n};\n\nexport const makeElement = (tag, opts = {}) => {\n let element = document.createElement(tag);\n\n for (const attr in opts) {\n const value = opts[attr];\n element.setAttribute(attr, value);\n }\n\n return element;\n};\n\nexport const removeElement = (el) => {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n};\n\nexport function getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport function getAuthenticityToken() {\n return getMetaValue(\"csrf-token\");\n}\n\nexport const dispatchEvent = (element, type, initEvent = {}) => {\n const { disabled } = element;\n const { bubbles, cancelable, detail } = initEvent;\n const event = document.createEvent(\"Event\");\n\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n};\n\nexport const toArray = (value) => {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n};\n\nexport const insertAfter = (el, ref) => {\n return ref.parentNode.insertBefore(el, ref.nextSibling);\n};\n\nexport const animateElementWithClass = (el, tokens, callback) => {\n if (Array.isArray(tokens)) {\n DOMTokenList.prototype.add.apply(el.classList, tokens);\n } else {\n el.classList.add(className);\n }\n\n const handleAnimateEnd = () => {\n if (Array.isArray(tokens)) {\n DOMTokenList.prototype.remove.apply(el.classList, tokens);\n } else {\n el.classList.remove(className);\n }\n el.removeEventListener(\"animationend\", handleAnimateEnd);\n\n if (typeof callback === \"function\") callback();\n };\n\n el.addEventListener(\"animationend\", handleAnimateEnd());\n};\n\nexport const rFetch = (resource, _options = {}) => {\n const { query, ...options } = _options;\n let url = resource;\n\n setupHeaders();\n setupContentType();\n setupAccept();\n setupCredentials();\n setupQueryParams();\n\n return fetch(url, options).then(checkStatus).then(parseResponse);\n\n function setupHeaders() {\n const headers = Object.assign({}, options.headers);\n headers[\"X-CSRF-Token\"] = getAuthenticityToken();\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n options.headers = headers;\n }\n\n function setupContentType() {\n if (options.contentType)\n options.headers[\"Content-Type\"] = options.contentType;\n }\n\n function setupAccept() {\n if (options.as == \"json\") {\n options.headers[\"Accept\"] = \"application/json\";\n }\n if (options.as == \"xhr\") {\n options.headers[\"Accept\"] = \"text/javascript\";\n }\n if (options.as == \"html\") {\n options.headers[\"Accept\"] = \"text/html\";\n }\n }\n\n function setupCredentials() {\n options.credentials = options.credentials || \"same-origin\";\n }\n\n function checkStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response;\n } else {\n const error = new Error(response.statusText);\n error.response = response;\n throw error;\n }\n }\n\n function setupQueryParams() {\n const method = options.method || \"GET\";\n\n if ([\"GET\", \"DELETE\"].indexOf(method) > -1) {\n url = query ? `${url}?${qs.stringify({ ...query })}` : resource;\n } else {\n if (query && options.body == null) {\n options.body = qs.stringify(query);\n }\n }\n }\n\n function parseResponse(response) {\n switch (options.as) {\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n default:\n return response.text();\n }\n }\n};\n\nexport const getPlaceholderImageURL = (r = 0, g = 0, b = 0, a = 0) => {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n const size = (canvas.width = canvas.height = 1);\n context.fillStyle = `rgba(${r}, ${g}, ${b}, ${a})`;\n context.fillRect(0, 0, size, size);\n\n return canvas.toDataURL(\"image/png\");\n};\n\nexport const refreshWithScrollLock = () => {\n let scrollPosition;\n\n document.addEventListener(\n \"turbolinks:load\",\n () => {\n if (scrollPosition) {\n window.scrollTo.apply(window, scrollPosition);\n scrollPosition = null;\n }\n },\n false\n );\n\n scrollPosition = [window.scrollX, window.scrollY];\n Turbolinks.visit(window.location, { action: \"replace\" });\n};\n\nexport const isMobile = () => {\n return window.matchMedia(\"only screen and (max-width: 760px)\").matches;\n};\n\nexport const safeParse = (data) => {\n try {\n return JSON.parse(data);\n } catch (_) {\n return null;\n }\n};\n","var map = {\n\t\"./breed_centre_controller.js\": 90,\n\t\"./breeding_females_controller.js\": 91,\n\t\"./bulk_actions_controller.js\": 103,\n\t\"./content_loader_controller.js\": 104,\n\t\"./data_table_controller.js\": 105,\n\t\"./date_time_picker_controller.js\": 106,\n\t\"./drag_n_drop_controller.js\": 136,\n\t\"./editable_input_controller.js\": 108,\n\t\"./flash_notice_controller.js\": 109,\n\t\"./form_controller.js\": 110,\n\t\"./hound_controller.js\": 111,\n\t\"./hound_parent_controller.js\": 112,\n\t\"./inbreeding_matches_controller.js\": 137,\n\t\"./infinite_scroll_controller.js\": 113,\n\t\"./lazy_image_controller.js\": 138,\n\t\"./lineage_controller.js\": 114,\n\t\"./map_controller.js\": 115,\n\t\"./modal_controller.js\": 116,\n\t\"./modal_form_controller.js\": 117,\n\t\"./nested_form_controller.js\": 118,\n\t\"./nested_select_controller.js\": 119,\n\t\"./number_input_controller.js\": 120,\n\t\"./popover_controller.js\": 121,\n\t\"./scrollable_table_controller.js\": 122,\n\t\"./search_form_controller.js\": 123,\n\t\"./select_controller.js\": 124,\n\t\"./simple_modal_controller.js\": 125,\n\t\"./slideshow_controller.js\": 126,\n\t\"./toggle_controller.js\": 127,\n\t\"./upload_controller.js\": 139,\n\t\"./visibility_toggle_controller.js\": 129,\n\t\"./year_input_controller.js\": 130\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 = 89;","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\"ajax:success\", this.onSuccess);\n }\n\n disconnect() {\n this.element.removeEventListener(\"ajax:success\", this.onSuccess);\n }\n\n onSuccess = event => {\n const raw = document.querySelector(\"[data-target~=breed-centre-input]\");\n const select = raw ? raw.slim : null;\n const xhr = event.detail[0];\n\n if (select && xhr) {\n const { data: existing } = select.data;\n\n select.setData([...existing, { text: xhr.name, value: xhr.id }]);\n select.set(xhr.id);\n }\n\n const modalTarget = document.getElementById(\"app-modal\");\n if (modalTarget) modalTarget.close();\n };\n}\n","import { Controller } from \"stimulus\";\nimport { refreshWithScrollLock } from \"src/utils\";\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\"ajax:success\", this.onSuccess);\n }\n\n disconnect() {\n this.element.removeEventListener(\"ajax:success\", this.onSuccess);\n }\n\n onSuccess = event => refreshWithScrollLock();\n}\n","import { Controller } from \"stimulus\";\n\nconst ACTIONS = \"initMerge completeMerge\".split(\" \")\n\nexport default class extends Controller {\n static targets = [\n \"checkbox\", \"selectedIdsField\", ...ACTIONS.map(action => `${action}Button`)\n ]\n\n connect() {\n this.enableButtons()\n }\n\n update(event) {\n if (event?.target.checked) {\n if (this.isShiftSelected && this.lastSelectedCheckbox) {\n this.shiftSelect(this.lastSelectedCheckbox, event.target)\n }\n this.lastSelectedCheckbox = event.target\n }\n\n const { ids, selectedCount } = this.selected\n this.selectedIdsFieldTargets.forEach(field => field.value = ids)\n this.enableButtons()\n }\n\n async reset(event) {\n if (event?.type == \"submit\") await nextFrame()\n this.checkboxTargets.forEach(checkbox => checkbox.checked = false)\n this.update()\n }\n\n enableShiftSelect(event) {\n if (event.key == \"Shift\") { this.shiftSelectEnabled = true }\n }\n\n disableShiftSelect(event) {\n if (event.key == \"Shift\") { this.shiftSelectEnabled = false }\n }\n\n shiftSelect(startTarget, endTarget) {\n const start = this.checkboxTargets.indexOf(startTarget)\n const end = this.checkboxTargets.indexOf(endTarget)\n this.checkboxTargets.slice(Math.min(start, end), Math.max(start, end) + 1).forEach(checkbox => checkbox.checked = true)\n }\n\n // Private\n\n get selected() {\n const result = { ids: [], selectedCount: 0 }\n\n this.selectedCheckboxTargets.forEach(({ dataset }) => {\n result.ids.push(dataset.identifier)\n result.selectedCount++\n })\n\n return result\n }\n\n get selectedCheckboxTargets() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked)\n }\n\n get isShiftSelected() {\n return this.shiftSelectEnabled\n }\n\n get enabledMenuItems() {\n return this.menuItemTargets.filter(target => !target.hidden)\n }\n\n enableButtons() {\n const { selectedCount } = this.selected\n\n ACTIONS.forEach(kind => {\n if (this[`has${this.capitalizeString(kind)}ButtonTarget`]) {\n this[`${kind}ButtonTargets`].forEach(target => {\n target.hidden = selectedCount === 0\n })\n }\n })\n }\n\n capitalizeString(string) {\n return string.charAt(0).toUpperCase() + string.slice(1)\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n connect() {\n if (!this.loaded) {\n this.load();\n }\n }\n\n load() {\n fetch(this.url)\n .then(response => {\n return response.text();\n })\n .then(content => {\n this.element.innerHTML = content;\n this.data.set(\"loaded\", true);\n });\n }\n\n get url() {\n return this.data.get(\"url\");\n }\n\n get loaded() {\n return this.data.get(\"loaded\");\n }\n}\n","import { Controller } from \"stimulus\";\nimport { DataTable } from \"simple-datatables\"\n\nexport default class extends Controller {\n static datatable;\n\n connect() {\n this.datatable = new DataTable(this.element, {\n paging: false,\n labels: {\n placeholder: \"Vyhledat\\u2026\",\n noRows: \"Nebyli nalezeni žádní psi.\"\n }\n })\n }\n\n disconnect() {\n this.datatable = null\n }\n}\n","\nimport { Controller } from \"stimulus\";\nimport flatpickr from \"flatpickr\";\nimport { Czech } from \"flatpickr/dist/l10n/cs.js\";\nimport { removeElement } from \"../src/utils\";\n\nexport default class extends Controller {\n static targets = [\"input\"];\n static datepickr;\n\n connect() {\n this.datepickr = flatpickr(this.element, this.options)\n this.initClearButton(this.element)\n }\n\n disconnect() {\n this.datepickr.destroy();\n this.datepickr = null;\n }\n\n handleChange(event) {\n const target = event.currentTarget\n this.initClearButton(target)\n }\n\n initClearButton(element) {\n const value = element.value\n const parent = element.parentElement\n const button = parent.querySelector(\"[data-target~=datepickr-clear-button]\");\n\n if (value === \"\") {\n if (button == null) return;\n\n button.removeEventListener(\"click\", this.clearInput);\n removeElement(button);\n } else {\n if (button == null) {\n element.insertAdjacentHTML(\"afterend\", this.buttonHtml);\n\n const initializedButton = parent.querySelector(\"[data-target~=datepickr-clear-button]\");\n initializedButton.addEventListener(\"click\", this.clearInput.bind(this));\n }\n }\n }\n\n clearInput(event) {\n this.datepickr.clear()\n }\n\n get buttonHtml() {\n return `\n \n \n \n `.trim()\n }\n\n get options() {\n switch (this.type) {\n case \"time\":\n return Object.assign({}, {\n allowInput: true,\n altFormat: \"H:i\",\n altInput: true,\n dateFormat: \"H:i\",\n enableSeconds: false,\n enableTime: true,\n noCalendar: true,\n time_24hr: true,\n locale: Czech\n });\n break;\n case \"date\":\n return Object.assign({}, {\n enableTime: false,\n allowInput: true,\n altInput: true,\n altFormat: \"d.m.Y\",\n dateFormat: \"d.m.Y\",\n locale: Czech\n });\n break;\n case \"datetime\":\n return Object.assign({}, {\n enableTime: true,\n altInput: true,\n altFormat: \"d.m.Y H:i\",\n dateFormat: \"d.m.Y H:i\",\n time_24hr: true,\n locale: Czech\n });\n break;\n default:\n break;\n }\n }\n\n get type() {\n return this.data.get(\"type\");\n }\n}\n","import { Controller } from \"stimulus\";\nimport { removeElement } from \"../src/utils\";\n\nexport default class extends Controller {\n static targets = [\"slot\", \"template\", \"toggleable\", \"value\"];\n static eventHandlers = [];\n\n connect() {\n this.eventHandlers = [];\n }\n\n disconnect() {\n this.eventHandlers = [];\n }\n\n installForm(event) {\n event.preventDefault();\n\n const content = this.templateTarget.innerHTML;\n this.slot.insertAdjacentHTML(\"afterbegin\", content);\n this.visible = true;\n this.setCurrentValue();\n this.setPosition();\n this.addEventListeners();\n this.toggleForm();\n }\n\n uninstallForm(event) {\n event.preventDefault();\n\n removeElement(this.form);\n this.removeEventListeners();\n this.visible = false;\n this.toggleForm();\n }\n\n toggleForm() {\n this.toggleableTarget.classList.toggle(\"hidden\", this.visible);\n }\n\n addEventListeners = () => {\n const form = this.form;\n const close = document.getElementById(\"editable-input-close\");\n\n document.addEventListener(\"click\", this.handleClick.bind(this), true);\n if (close)\n close.addEventListener(\"click\", this.uninstallForm.bind(this), true);\n document.addEventListener(\"keyup\", this.handleKeyup.bind(this));\n if (form) form.addEventListener(\"ajax:success\", this.handleSubmit);\n };\n\n removeEventListeners = () => {\n if (!this.visible) return;\n\n const form = this.form;\n const close = document.getElementById(\"editable-input-close\");\n\n document.removeEventListener(\"click\", this.handleClick, true);\n if (close) close.removeEventListener(\"click\", this.uninstallForm, true);\n document.removeEventListener(\"keyup\", this.handleKeyup);\n if (form) form.removeEventListener(\"ajax:success\", this.handleSubmit);\n };\n\n handleClick(event) {\n const form = this.form;\n const target = event.target;\n\n if (!form) return;\n if (form == target || (form !== target && form.contains(target))) return;\n\n this.uninstallForm(event);\n }\n\n handleKeyup(event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { keyCode } = event;\n\n if (keyCode === 27) {\n this.uninstallForm(event);\n } else if (keyCode === 13) {\n const form = this.form;\n\n if (!form) return;\n\n Rails.fire(form, \"submit\");\n }\n }\n\n handleSubmit = event => {\n event.preventDefault();\n event.stopPropagation();\n\n const xhr = event.detail[0];\n\n if (xhr) {\n const value = xhr[this.field];\n\n this.valueTarget.textContent = value;\n this.value = value;\n }\n\n this.uninstallForm(event);\n };\n\n setCurrentValue() {\n const form = this.form;\n if (form) {\n const field = form.querySelector(`[id$=\"${this.field}\"]`);\n field.value = this.value;\n }\n }\n\n setPosition() {\n const rect = this.element.getBoundingClientRect();\n const form = this.form;\n\n if (form) {\n form.style.top = `${Math.ceil(rect.top) - 16 + window.scrollY}px`;\n form.style.left = `${Math.ceil(rect.left) - 16 + window.scrollX}px`;\n }\n }\n\n resetPosition() {\n const form = this.form;\n\n if (form) {\n form.style.top = 0;\n form.style.left = 0;\n }\n }\n\n get field() {\n return this.data.get(\"field\");\n }\n\n get firstInvalidField() {\n return this.formFields.find(field => !field.checkValidity());\n }\n\n get form() {\n return this.visible ? this.slot.children[0] : null;\n }\n\n get slot() {\n if (this.element.getElementsByTagName(\"SLOT\").length === 0) {\n return document.getElementById(\"editable-input-slot\");\n } else {\n return this.slotTarget;\n }\n }\n\n get value() {\n return this.data.get(\"value\");\n }\n\n set value(value) {\n return this.data.set(\"value\", value);\n }\n\n get visible() {\n return this.data.get(\"visible\") === \"true\";\n }\n\n set visible(value) {\n return this.data.set(\"visible\", value);\n }\n}\n","import { Controller } from \"stimulus\";\nimport { animateElementWithClass, removeElement } from \"../src/utils\";\n\nexport default class extends Controller {\n static timeout;\n\n initialize() {\n this.timeout = setTimeout(() => {\n this.animateAndRemove(this.element);\n }, this.duration);\n }\n\n disconnect() {\n this.timeout = null;\n }\n\n close() {\n clearTimeout(this.timeout);\n this.animateAndRemove(this.element);\n }\n\n animateAndRemove(elem) {\n animateElementWithClass(elem, [\"animated\", \"scaleFadeOut\"], () => {\n removeElement(elem);\n });\n }\n\n get duration() {\n return parseInt(this.data.get(\"duration\")) * 1000;\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\n \"ajax:beforeSend\",\n this.removeExistingErrorMessages.bind(this)\n );\n this.element.addEventListener(\"ajax:success\", this.onSuccess);\n this.element.addEventListener(\"ajax:error\", this.onError);\n }\n\n disconnect() {\n this.element.removeEventListener(\n \"ajax:beforeSend\",\n this.removeExistingErrorMessages.bind(this)\n );\n this.element.removeEventListener(\"ajax:success\", this.onSuccess);\n this.element.removeEventListener(\"ajax:error\", this.onError);\n }\n\n onSuccess = event => {};\n\n onError = event => {\n this.removeExistingErrorMessages();\n\n if (event.detail[2].status !== 422) return;\n const errors = event.detail[0];\n this.showErrorForInvalidFields(errors);\n };\n\n shouldValidateField(field) {\n return (\n !field.disabled &&\n field.type !== undefined &&\n ![\"file\", \"reset\", \"submit\", \"button\"].includes(field.type)\n );\n }\n\n removeExistingErrorMessages() {\n this.formFields.forEach(field => {\n field.classList.remove(\"error\");\n\n const fieldContainer = field.closest(\".form-group\");\n if (!fieldContainer) return;\n const existingErrorMessageElement = fieldContainer.querySelector(\n \"p.error\"\n );\n if (existingErrorMessageElement)\n existingErrorMessageElement.parentNode.removeChild(\n existingErrorMessageElement\n );\n });\n }\n\n showErrorForInvalidFields(errors) {\n for (let [key, values] of Object.entries(errors)) {\n const field = this.element.querySelector(`[id$=\"${key}\"]`);\n\n if (field && this.shouldValidateField(field)) {\n this.showErrorForInvalidField(field, values);\n }\n }\n }\n\n showErrorForInvalidField(field, values) {\n const fieldContainer = field.closest(\".form-group\");\n field.classList.add(\"error\");\n\n values.forEach(message => {\n fieldContainer.insertAdjacentHTML(\n \"beforeend\",\n this.buildFieldErrorHtml(message)\n );\n });\n }\n\n buildFieldErrorHtml(message) {\n return `

${message}

`;\n }\n\n get formFields() {\n return Array.from(this.element.elements);\n }\n\n get firstInvalidField() {\n return this.formFields.find(field => !field.checkValidity());\n }\n}\n","import { Controller } from \"stimulus\";\nimport { rFetch } from \"src/utils\";\n\nconst fetchCollection = (url, callbackFn, search = {}) => {\n rFetch(url, {\n as: \"json\",\n contentType: \"application/json\",\n query: {\n q: search,\n },\n }).then(callbackFn);\n};\n\nexport default class extends Controller {\n static targets = [\"form\", \"breedingUntilInput\", \"currentlyBreedingInput\", \"dateOfBirthInput\"];\n\n fetchAssociations = (event) => {\n const breed = this.normalizedBreed(event.target.value);\n\n if (this.shouldFetchBreedCentres) this.fetchBreedCentres(breed);\n if (this.shouldFetchParents) this.fetchParents(breed);\n if (this.shouldFetchExams) this.fetchExams(breed);\n if (this.shouldFetchTrophies) this.fetchTrophies(breed);\n };\n\n fillBreedingDate = (event) => {\n const currentlyBreeding = this.currentlyBreedingInputTarget && this.currentlyBreedingInputTarget.checked === true\n const dateOfBirth = this.dateOfBirthInputTarget && this.dateOfBirthInputTarget.value\n\n if (!dateOfBirth) return;\n\n const breedingUntil = this.breedingUntilInputTarget\n const datePicker = breedingUntil._flatpickr\n\n let value\n\n if (currentlyBreeding) {\n const parsed = flatpickr.parseDate(dateOfBirth, \"d.m.Y\")\n value = new Date(parsed.setFullYear(parsed.getFullYear() + 8));\n } else {\n value = null\n }\n\n datePicker.setDate(value, true, \"d.m.Y\")\n };\n\n fetchBreedCentres(breed) {\n fetchCollection(this.breedCentresUrl, this.replaceBreedCentresOptions, {\n breed_eq: breed,\n });\n }\n\n fetchParents(breed) {\n fetchCollection(this.parentsUrl, this.replaceParentsOptions, {\n breed_eq: breed,\n });\n }\n\n fetchExams(breed) {\n fetchCollection(this.examsUrl, this.replaceExamsOptions, {\n breed_eq: breed,\n });\n }\n\n fetchTrophies(breed) {\n fetchCollection(this.trophiesUrl, this.replaceTrophiesOptions, {\n breed_eq: breed,\n });\n }\n\n replaceBreedCentresOptions = (result) => {\n const raw = this.element.querySelector(`[data-target~=breed-centre-input]`);\n const select = raw ? raw.slim : null;\n\n this.replaceOptions(select, result, \"id\", \"name\");\n };\n\n replaceParentsOptions = (result) => {\n [\"male\", \"female\"].forEach((sex) => {\n const raw = this.element.querySelector(\n `[data-target~=hound-parent-${sex}-input]`\n );\n\n const select = raw ? raw.slim : null;\n const data = result.filter((el) => el.sex === sex);\n\n this.replaceOptions(select, data, \"id\", \"formatted_name\");\n });\n };\n\n replaceExamsOptions = (result) => {\n const raw = this.element.querySelector(`[data-target~=exam-input]`);\n const select = raw ? raw.slim : null;\n\n this.replaceOptions(select, result, \"abbreviation\", \"name\");\n };\n\n replaceTrophiesOptions = (result) => {\n const selectors = this.element.querySelectorAll(`[data-target~=trophy-input]`);\n\n selectors.forEach(selector => {\n const select = selector ? selector.slim : null;\n\n this.replaceOptions(select, result, \"id\", \"name\");\n })\n };\n\n replaceOptions(select, options, value_key, text_key) {\n if (!select) return;\n const data = options.map((el) => {\n return Object.assign(\n {},\n {\n text: el[text_key],\n value: el[value_key],\n }\n );\n });\n\n if (select) {\n select.setData(data);\n select.set([]);\n }\n }\n\n get shouldFetchBreedCentres() {\n const selector = this.element.querySelector(\n `[data-target~=breed-centre-input]`\n );\n return Boolean(selector);\n }\n\n get shouldFetchParents() {\n return [\"male\", \"female\"].some((sex) => {\n const selector = this.element.querySelector(\n `[data-target~=hound-parent-${sex}-input]`\n );\n\n return Boolean(selector);\n });\n }\n\n get shouldFetchExams() {\n const selector = this.element.querySelector(\n `[data-target~=exam-input]`\n );\n return Boolean(selector);\n }\n\n get shouldFetchTrophies() {\n const selector = this.element.querySelector(\n `[data-target~=trophy-input]`\n );\n return Boolean(selector);\n }\n\n normalizedBreed(breed) {\n return this.breeds[breed];\n }\n\n get breeds() {\n return Object.assign(\n {},\n {\n bavarian_hound: 0,\n hanover_hound: 1,\n }\n );\n }\n\n get breedCentresUrl() {\n return this.data.get(\"breedCentresUrl\");\n }\n\n get parentsUrl() {\n return this.data.get(\"parentsUrl\");\n }\n\n get examsUrl() {\n return this.data.get(\"examsUrl\");\n }\n\n get trophiesUrl() {\n return this.data.get(\"trophiesUrl\");\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"form\"];\n\n connect() {\n this.formTargets.forEach(el => {\n if (el.dataset.type === \"hound\") {\n el.addEventListener(\"ajax:success\", this.handleHoundCreate);\n } else if (el.dataset.type === \"breed-centre\") {\n el.addEventListener(\"ajax:success\", this.handleBreedCentreCreate);\n } else {\n return;\n }\n });\n }\n\n disconnect() {\n this.formTargets.forEach(el => {\n if (el.dataset.type === \"hound\") {\n el.removeEventListener(\"ajax:success\", this.handleHoundCreate);\n } else if (el.dataset.type === \"breed-centre\") {\n el.removeEventListener(\"ajax:success\", this.handleBreedCentreCreate);\n } else {\n return;\n }\n });\n }\n\n handleBreedCentreCreate = event => {\n const raw = this.element.querySelector(\"[data-target~=breed-centre-input]\");\n const select = raw ? raw.slim : null;\n const xhr = event.detail[0];\n\n if (select && xhr) {\n const { data: existing } = select.data;\n\n select.setData([...existing, { text: xhr.name, value: xhr.id }]);\n select.set(xhr.id);\n }\n\n this.toggleForm(event);\n };\n\n handleHoundCreate = event => {\n const xhr = event.detail[0];\n\n if (xhr.length === 0) return;\n\n const { sex } = xhr;\n const raw = document.querySelector(\n `[data-target~=hound-parent-${sex}-input]`\n );\n const select = raw ? raw.slim : null;\n\n if (select) {\n const { data: existing } = select.data;\n\n select.setData([\n ...existing,\n { text: xhr.formatted_name, value: xhr.id }\n ]);\n select.set(xhr.id);\n }\n\n const modalTarget = document.getElementById(\"app-modal\");\n if (modalTarget) modalTarget.close();\n };\n\n toggleForm(event) {\n event.preventDefault();\n this.formTargets.forEach(target => {\n target.classList.toggle(\"hidden\");\n\n if (target.offsetParent !== null) {\n const focusable = target.querySelector(\"[autofocus]\");\n focusable != null && focusable.focus();\n }\n });\n }\n}\n","import { Controller } from \"stimulus\"\nimport { rFetch } from \"src/utils\";\n\nexport default class extends Controller {\n static targets = [\"entries\", \"pagination\"]\n\n initialize() {\n let options = {\n rootMargin: \"200px\",\n }\n\n this.intersectionObserver = new IntersectionObserver(entries => this.processIntersectionEntries(entries), options)\n }\n\n connect() {\n this.intersectionObserver.observe(this.observable)\n }\n\n disconnect() {\n this.intersectionObserver.unobserve(this.observable)\n }\n\n processIntersectionEntries(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.loadMore()\n }\n })\n }\n\n loadMore() {\n let next_page = this.paginationTarget.querySelector(\"a[rel='next']\")\n if (next_page == null) { return }\n let url = next_page.href\n\n rFetch(url, {\n as: \"json\",\n contentType: \"application/json\",\n })\n .then((data) => {\n if (this.isSticky) this.intersectionObserver.unobserve(this.observable)\n\n this.entriesTarget.insertAdjacentHTML(\"beforeend\", data.entries)\n this.paginationTarget.innerHTML = data.pagination\n\n if (this.isSticky) this.intersectionObserver.observe(this.observable)\n })\n }\n\n get shouldShowPlaceholderImage() {\n return !processedImageURLs.has(this.element.src)\n }\n\n get observable() {\n return this.isSticky ?\n this.entriesTarget.querySelector(\"tr:last-of-type\") :\n this.paginationTarget\n }\n\n get isSticky() {\n return this.data.get(\"sticky\") === \"true\";\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n toggleAttributes(event) {\n event.preventDefault();\n\n this.toggled = !this.toggled\n }\n\n\n get toggled() {\n return this.data.has(\"toggled\") && this.data.get(\"toggled\") == \"true\";\n }\n\n set toggled(value) {\n return this.data.set(\"toggled\", value);\n }\n\n}\n","import { Controller } from \"stimulus\";\nimport { findElements, toArray } from \"src/utils\";\n\nexport default class extends Controller {\n static targets = [\"embeddable\", \"modal\", \"markerToggle\"];\n\n connect() {\n if (window.cachedMaps == null) window.cachedMaps = {};\n if (window.coordsFromSuggest == null) window.coordsFromSuggest = {};\n\n this.service = this.createService();\n\n if (this.mapConfig.inputable) this.initTogglers();\n\n if (!this.initVisible) return;\n\n if (this.service) {\n this.service.initialize(() => this.loadScript());\n }\n }\n\n disconnect() {\n window.cachedMaps = null;\n window.coordsFromSuggest = null;\n }\n\n embed(event) {\n const element = this.element.querySelector(`#${event.target.dataset.mapTarget}`);\n if (this.scriptLoaded) this.service.create(this.element, element);\n }\n\n displayMarker(event) {\n const element = this.element.querySelector(`#${event.target.dataset.mapTarget}`);\n if (this.scriptLoaded) {\n this.service.displayMarker(this.element, element);\n this.toggleMarkers(this.element, event.target.dataset.toggleType);\n }\n }\n\n removeMarker(event) {\n const element = this.element.querySelector(`#${event.target.dataset.mapTarget}`);\n if (this.scriptLoaded) {\n this.service.removeMarker(this.element, element);\n this.toggleMarkers(this.element, event.target.dataset.toggleType);\n }\n }\n\n // PRIVATE FUNCTIONS\n\n createService() {\n return new MapService(this);\n }\n\n loadScript() {\n Loader.async = true;\n Loader.load(\n null,\n { suggest: this.mapConfig.autosuggest },\n this.init.bind(this)\n );\n }\n\n init() {\n if (this.scriptLoaded) {\n this.service.create(this.element, this.embeddableTarget);\n }\n }\n\n initTogglers() {\n const [latitude, longitude] = this.service.getCoordsFromInput(this.element);\n\n const hasCoords = longitude !== null && latitude !== null;\n const toggleClass = hasCoords ? \"enable\" : \"disable\";\n\n this.toggleMarkers(this.element, toggleClass);\n }\n\n toggleMarkers(container, toggleClass) {\n const elements = findElements(container, \"[data-role~=map-marker-toggle]\");\n\n toArray(elements).forEach(elem => {\n elem.classList.toggle(\n \"visually-hidden\",\n elem.dataset.toggleType === toggleClass\n );\n });\n }\n\n get initVisible() {\n return this.toBoolean(this.data.get(\"initVisible\"));\n }\n\n get mapConfig() {\n return JSON.parse(this.data.get(\"config\"));\n }\n\n get geometryConfig() {\n return JSON.parse(this.data.get(\"geometries\"));\n }\n\n get mapId() {\n return this.data.get(\"id\");\n }\n\n get scriptLoaded() {\n return !!window.Loader;\n }\n\n toBoolean(value) {\n return value === \"true\";\n }\n}\n\nclass MapService {\n constructor(ctx) {\n this.container = ctx.element;\n this.config = ctx.mapConfig;\n this.geometries = ctx.geometryConfig;\n }\n\n initialize(callback) {\n if (this.isLoaded) {\n callback();\n } else {\n const script = document.createElement(\"script\");\n script.setAttribute(\"async\", true);\n script.setAttribute(\"id\", \"seznam\");\n script.setAttribute(\"src\", \"//api.mapy.cz/loader.js\");\n script.setAttribute(\"type\", \"text/javascript\");\n\n const onScriptLoad = () => callback();\n\n const onScriptError = () => {\n script.remove();\n };\n\n script.addEventListener(\"load\", onScriptLoad);\n script.addEventListener(\"error\", onScriptError);\n\n document.body.appendChild(script);\n\n return () => {\n script.removeEventListener(\"load\", onScriptLoad);\n script.removeEventListener(\"error\", onScriptError);\n };\n }\n }\n\n create = (container, elem) => {\n const uuid = `${container.id}-${elem.id}`\n let m = window.cachedMaps[uuid];\n let coordsFromSuggest = window.coordsFromSuggest;\n\n const [latitude, longitude] = this.getCoordsFromInput(container);\n const [rawCoords, useFallbackCoords] = this.getCoords(container);\n const coords = SMap.Coords.fromWGS84(rawCoords.lon, rawCoords.lat);\n\n const {\n autosuggest,\n inputable,\n marker_layer: { enable: enableMarker, draggable, ...markerOptions }\n } = this.config;\n\n let hasCoords = false;\n if (!inputable || (longitude && latitude)) {\n hasCoords = true;\n }\n\n if (m == null) {\n m = new SMap(elem, coords, useFallbackCoords ? 9 : 17);\n window.cachedMaps[uuid] = m;\n\n m.addDefaultLayer(SMap.DEF_BASE).enable();\n m.addDefaultLayer(SMap.DEF_OPHOTO).enable();\n m.addDefaultLayer(SMap.DEF_HYBRID_SPARSE).enable();\n m.addDefaultControls();\n\n let suggest = null;\n if (autosuggest) {\n const suggestInput = container.querySelector(`#${elem.id}-search-input`);\n suggest = new SMap.Suggest(suggestInput);\n suggest.urlParams({\n bounds: \"48.5370786,12.0921668|51.0746358,18.8927040\", // Omezení pro ČR\n enableCategories: 1,\n lang: \"cs,en\"\n });\n }\n\n const signals = m.getSignals();\n const controls = m.getControls();\n for (let i = 0; i < controls.length; i++) {\n if (\n controls[i] instanceof SMap.Control.Compass ||\n controls[i] instanceof SMap.Control.Zoom\n ) {\n m.removeControl(controls[i]);\n i--;\n }\n }\n\n if (suggest !== null) {\n suggest\n .addListener(\"suggest\", func => {\n const data = func.data;\n const suggested = SMap.Coords.fromWGS84(\n data.longitude,\n data.latitude\n );\n\n window.coordsFromSuggest = Object.assign(coordsFromSuggest, {\n lon: data.longitude,\n lat: data.latitude\n });\n m.setCenterZoom(suggested, 17);\n })\n .addListener(\"close\", () => {});\n }\n\n window.cachedMaps[uuid] = m;\n if (enableMarker && hasCoords) this.displayMarker(container, elem);\n } else {\n window.cachedMaps[uuid] = m;\n\n if (hasCoords) {\n this.displayMarker(container, elem);\n } else {\n this.removeMarker(container, elem);\n }\n }\n\n window.cachedMaps[uuid] = m;\n\n if (Object.keys(this.geometries).length > 0) {\n const { marker_layer: { icon } } = this.config\n\n this.geometries.forEach(geometry => {\n const { type, id, data, options } = geometry\n\n new Mapkick[type](id, data, m, Object.assign(options,{ icon }))\n })\n }\n\n m.syncPort();\n };\n\n displayMarker = (container, elem) => {\n const uuid = `${container.id}-${elem.id}`\n const map = window.cachedMaps[uuid];\n if (map == null) return;\n\n const {\n inputable,\n marker_layer: { id }\n } = this.config;\n const layer = map.getLayer(id);\n const [rawCoords, useFallbackCoords] = this.getCoords(container);\n const coords = SMap.Coords.fromWGS84(rawCoords.lon, rawCoords.lat);\n\n if (layer == null) {\n this.initMarker(container, elem, coords);\n } else {\n this.resetMarker(id, map, layer, coords);\n }\n\n if (inputable) this.setInputCoords(container, coords.y, coords.x);\n map.setCenterZoom(coords, useFallbackCoords ? 9 : 17);\n };\n\n initMarker = (container, elem, coords) => {\n const uuid = `${container.id}-${elem.id}`\n const m = window.cachedMaps[uuid];\n\n const {\n inputable,\n marker_layer: { enable: enableMarker, draggable, ...markerOptions }\n } = this.config;\n\n const { id, icon } = markerOptions;\n const markerLayer = new SMap.Layer.Marker(id);\n const marker = new SMap.Marker(coords, `${id}_marker`, {\n url: icon\n });\n\n if (draggable) marker.decorate(SMap.Marker.Feature.Draggable);\n\n m.addLayer(markerLayer).enable();\n markerLayer.addMarker(marker);\n\n const signals = m.getSignals();\n\n if (inputable) {\n signals.addListener(window, \"map-click\", evt => {\n const gps = SMap.Coords.fromEvent(evt.data.event, m);\n marker.setCoords(gps);\n\n new SMap.Geocoder.Reverse(gps, this.geocode);\n });\n }\n\n if (draggable) {\n signals.addListener(window, \"marker-drag-stop\", this.dragStop);\n signals.addListener(window, \"marker-drag-start\", this.dragStart);\n }\n };\n\n removeMarker = (container, elem) => {\n const uuid = `${container.id}-${elem.id}`\n const { id } = this.config.marker_layer;\n const map = window.cachedMaps[uuid];\n const layer = map.getLayer(id);\n\n this.removeAttachedListeners(map);\n\n if (layer !== null) {\n layer.removeAll();\n map.removeLayer(layer);\n }\n\n this.resetInputCoords(container);\n };\n\n resetMarker = (id, map, layer, coords) => {\n const marker = layer._markers[`${id}_marker`].marker;\n marker.setCoords(coords);\n };\n\n getCoords = (container) => {\n const suggested = window.coordsFromSuggest;\n const [latitude, longitude] = this.getCoordsFromInput(container);\n\n const useFallbackCoords =\n (longitude || (suggested && suggested[\"lon\"]) || this.config.lon) ==\n null &&\n (latitude || (suggested && suggested[\"lat\"]) || this.config.lat) == null;\n\n const coords = Object.assign(\n {},\n {\n lon:\n longitude ||\n (suggested && suggested[\"lon\"]) ||\n this.config.lon ||\n this.config.fallback_lon,\n lat:\n latitude ||\n (suggested && suggested[\"lat\"]) ||\n this.config.lat ||\n this.config.fallback_lat\n }\n );\n\n return [coords, useFallbackCoords];\n };\n\n dragStart = evt => {\n const container = evt.target.getContainer();\n container[SMap.LAYER_MARKER].style.cursor = \"move\";\n };\n\n dragStop = evt => {\n const container = evt.target.getContainer();\n const coords = evt.target.getCoords();\n container[SMap.LAYER_MARKER].style.cursor = \"\";\n\n return new SMap.Geocoder.Reverse(coords, this.geocode);\n };\n\n geocode = geocoder => {\n const { lat_input_id: latitudeId, lon_input_id: longitudeId } = this.config;\n const results = geocoder.getResults();\n const data = Object.assign({\n latitude: results.coords.y,\n longitude: results.coords.x\n });\n\n if (!this.setInputCoords(this.container, data.latitude, data.longitude)) return data;\n };\n\n redraw = (container, map) => {\n const [latitude, longitude] = this.getCoordsFromInput(container);\n const coords = SMap.Coords.fromWGS84(\n longitude || this.config.lon,\n latitude || this.config.lat\n );\n\n map.redraw();\n };\n\n removeAttachedListeners = map => {\n if (map == null) return;\n\n const signals = map.getSignals();\n const { draggable } = this.config.marker_layer;\n let listeners = [\"map-click\"];\n\n if (draggable) {\n listeners.push(\"marker-drag-start\");\n listeners.push(\"marker-drag-stop\");\n }\n\n listeners.forEach(key => {\n const listener = signals._myHandleFolder[key];\n\n Object.keys(listener).forEach(identifier => {\n signals.removeListener(identifier);\n });\n });\n };\n\n getCoordsFromInput = (container) => {\n const { lat_input_id: latitudeId, lon_input_id: longitudeId } = this.config;\n if (latitudeId && longitudeId) {\n const latInput = container.querySelector(`#${latitudeId}`);\n const lonInput = container.querySelector(`#${longitudeId}`);\n\n if (!(latInput && latInput.value) && !(lonInput && lonInput.value)) {\n return [null, null];\n }\n\n return [latInput.value, lonInput.value];\n } else {\n return [null, null];\n }\n };\n\n setInputCoords = (container, lat, lon) => {\n const { lat_input_id: latitudeId, lon_input_id: longitudeId } = this.config;\n if (!(latitudeId && longitudeId)) return false;\n\n const latInput = container.querySelector(`#${latitudeId}`);\n const lonInput = container.querySelector(`#${longitudeId}`);\n\n if (!(latInput && lonInput)) return false;\n\n latInput.value = lat;\n lonInput.value = lon;\n };\n\n resetInputCoords(container) {\n this.setInputCoords(container, null, null);\n }\n\n get isLoaded() {\n return !!window.Loader;\n }\n}\n","import { Controller } from \"stimulus\";\nimport { isMobile, makeElement, rFetch } from \"src/utils\";\n\nexport default class extends Controller {\n static targets = [\"modal\"];\n\n initialize() {\n if (!this.modalContainer) this.initializeContainer();\n }\n\n connect() {\n this.resetModal();\n }\n\n openModal(event) {\n event.preventDefault();\n\n const type = isMobile() ? \"full\" : \"box\";\n this.modalTarget.setAttribute(\"type\", type);\n const eventType = event?.type.split(\":\")\n\n if (eventType && eventType[0] === \"ajax\") {\n this.handleResponse(event, (fragment) => {\n this.render(fragment)\n })\n } else {\n const { currentTarget: { dataset: { url } } } = event;\n this.loadUrl(url);\n }\n\n this.modalTarget.open();\n }\n\n closeModal(event) {\n event.preventDefault();\n\n this.modalTarget.close();\n this.resetModal();\n }\n\n closeWithKeyboard(event) {\n if (event.keyCode === 27) this.closeModal(event);\n }\n\n resetModal() {\n this.modalTarget.innerHTML = \"\";\n this.addLoader();\n this.setLoaded(false);\n }\n\n // Private\n\n loadUrl(url) {\n rFetch(url, { as: \"xhr\", contentType: \"application/javascript\" }).then(\n this.render.bind(this)\n );\n }\n\n render(html) {\n this.removeLoader();\n this.modalTarget.innerHTML = \"\"\n this.modalTarget.innerHTML = html;\n this.setLoaded(true);\n }\n\n addLoader() {\n this.modalTarget.classList.add(\"loading\");\n }\n\n removeLoader() {\n this.modalTarget.classList.remove(\"loading\");\n }\n\n setLoaded(value) {\n this.modalTarget.setAttribute(\"loaded\", value);\n }\n\n initializeContainer() {\n let element = makeElement(\"app-modal\", {});\n element.classList.add(\"loadable\", \"loading\");\n document.body.appendChild(element);\n }\n\n get modalContainer() {\n return document.getElementById(\"app-modal\");\n }\n\n handleResponse(event, callback) {\n const xhr = event.detail[2]\n callback(xhr.response)\n }\n}\n","import { Controller } from \"stimulus\";\nimport { refreshWithScrollLock } from \"src/utils\";\n\nexport default class extends Controller {\n static targets = [\"form\"];\n\n connect() {\n this.formTarget.addEventListener(\"ajax:success\", this.handleSubmit);\n }\n\n disconnect() {\n this.formTarget.removeEventListener(\"ajax:success\", this.handleSubmit);\n }\n\n handleSubmit = event => {\n const modalTarget = document.getElementById(\"app-modal\");\n if (modalTarget) modalTarget.close();\n return refreshWithScrollLock()\n };\n}\n","import { Controller } from \"stimulus\";\nimport { toArray } from \"../src/utils\";\n\nexport default class extends Controller {\n static targets = [\"add\", \"template\", \"toggleable\"];\n\n connect() {\n this.wrapperClass = this.data.get(\"wrapperClass\") || \"nested-fields\";\n }\n\n addAssociation(event) {\n event.preventDefault();\n if (this.allowanceExceeded) return;\n\n const content = this.templateTarget.innerHTML.replace(\n /TEMPLATE_RECORD/g,\n new Date().valueOf()\n );\n this.addTarget.insertAdjacentHTML(\"beforebegin\", content);\n this.toggleAddButton();\n }\n\n removeAssociation(event) {\n event.preventDefault();\n let item = event.currentTarget.closest(`[data-role~=${this.wrapperClass}]`);\n\n if (item.dataset.newRecord === \"true\") {\n item.remove();\n } else {\n item.querySelector(\"input[name*='_destroy']\").value = 1;\n item.style.display = \"none\";\n }\n this.toggleAddButton();\n }\n\n toggleAddButton() {\n this.toggleableTarget.classList.toggle(\n \"visually-hidden\",\n this.allowanceExceeded\n );\n }\n\n get allowanceExceeded() {\n const elements = this.element.querySelectorAll(\n `[data-role~=${this.wrapperClass}]`\n );\n const visibleElements = toArray(elements).filter((item, index) => {\n return item.style.display != \"none\";\n });\n\n return this.limitCount && this.maxCount <= visibleElements.length\n ? true\n : false;\n }\n\n get limitCount() {\n return this.data.has(\"maxCount\");\n }\n\n get maxCount() {\n return this.data.get(\"maxCount\");\n }\n}\n","import { Controller } from \"stimulus\";\nimport { toArray } from \"../src/utils\";\n\nexport default class extends Controller {\n connect() {\n if (this.disabled) return\n this.updateOptionsOnInit()\n }\n\n select(event) {\n if (this.disabled) return\n if ([\"A\", \"BUTTON\"].includes(document.activeElement.tagName)) return\n\n this.updateOptionsOnSelect();\n }\n\n updateOptionsOnInit() {\n const slim = this.element.slim\n if (slim) {\n const { data } = slim.data\n const items = data.map(item => {\n if (this.selected.includes(item.value)) {\n item.disabled = true;\n } else {\n item.disabled = false;\n }\n\n return item\n })\n\n slim.setData(items)\n }\n }\n\n updateOptionsOnSelect() {\n const elements = this.container.querySelectorAll(\"[data-target~=trophy-input]\")\n const selected = this.selected\n\n Array.from(elements).forEach(element => {\n if (element != this.element) {\n Array.from(element.options).forEach(item => {\n if (selected.includes(item.value)) {\n item.disabled = true;\n item.setAttribute(\"disabled\", \"true\")\n } else {\n item.disabled = false;\n item.setAttribute(\"disabled\", \"false\")\n }\n })\n }\n })\n }\n\n get selected() {\n const elements = this.container.querySelectorAll(\"[data-target~=trophy-input]\")\n\n return Array.from(elements).map(element => {\n const select = element ? element.slim : null;\n\n if (select && element != this.element) {\n return select.selected()\n }\n\n return\n }).filter(id => {\n if (id === \"\" || id == null) return null\n return id\n })\n }\n\n get container() {\n return this.element.closest(\"[data-target~=nested-select-container]\");\n }\n\n get disabled() {\n return this.data.get(\"disabled\") === \"true\";\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n clear(evt) {\n const target = evt.target;\n const value = target.value;\n\n if (value && parseInt(value) === 0) {\n target.value = \"\";\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport { createPopper } from \"@popperjs/core/lib/popper-lite.js\";\nimport { rFetch } from \"src/utils\";\n\nexport default class extends Controller {\n static targets = [\"content\"];\n static timeout;\n\n initialize() {\n if (this.strategy === \"center\") {\n this.contentTarget.setAttribute(\n \"style\",\n \"transform:translate(-50%, -50%); top:50%; left:50%; position:fixed;\"\n );\n } else if (this.strategy === \"custom\") {\n this.contentTarget.setAttribute(\n \"style\",\n `transform:translate(${this.data.get(\"translateX\")}, ${this.data.get(\n \"translateY\"\n )});`\n );\n } else {\n createPopper(this.element, this.contentTarget, {\n strategy: \"fixed\",\n });\n }\n\n this.contentTarget.innerHTML = \"\"\n }\n\n connect() {\n if (this.loadable) this.loaded = false\n this.visible = false\n }\n\n disconnect() {\n if (this.loadable) this.loaded = false\n this.visible = false\n }\n\n mouseOver() {\n if (this.visible) return;\n\n this.timeout = setTimeout(() => {\n this.show();\n if (this.loadable) this.load();\n document.addEventListener(\"mousemove\", this.mouseOut.bind(this));\n }, this.delay);\n }\n\n mouseOut(event) {\n if (this.element.contains(event.target)) return;\n\n clearTimeout(this.timeout);\n this.hide();\n this.element.removeEventListener(\"mousemove\", this.mouseOut);\n }\n\n load() {\n if (!this.loaded) {\n this.contentTarget.classList.add(\"loading\");\n\n rFetch(this.url, {\n as: \"xhr\",\n contentType: \"application/javascript\",\n })\n .then((content) => {\n this.contentTarget.innerHTML = content;\n this.data.set(\"loaded\", true);\n })\n .finally(() => this.contentTarget.classList.remove(\"loading\"));\n }\n }\n\n show() {\n this.contentTarget.classList.remove(\"hidden\");\n this.visible = true;\n }\n\n hide() {\n this.contentTarget.classList.add(\"hidden\");\n this.visible = false;\n }\n\n get delay() {\n return (this.data.get(\"delay\") || 0) * 1000;\n }\n\n get loadable() {\n return this.data.has(\"url\");\n }\n\n get loaded() {\n return this.data.has(\"loaded\") && this.data.get(\"loaded\") == \"true\";\n }\n\n set loaded(value) {\n return this.data.set(\"loaded\", value);\n }\n\n get strategy() {\n return this.data.has(\"strategy\") ? this.data.get(\"strategy\") : \"popper\";\n }\n\n get url() {\n return this.data.get(\"url\");\n }\n\n get visible() {\n return this.data.get(\"visibility\") === \"true\";\n }\n\n set visible(value) {\n return this.data.set(\"visibility\", value);\n }\n}\n","import { Controller } from \"stimulus\";\nimport raf from \"raf-schd\";\n\nconst performScroll = (context, scrollable) => {\n const thead = context.theadTarget;\n const tbody = context.tbodyTarget;\n\n if (scrollable === tbody) {\n thead.scrollLeft = tbody.scrollLeft;\n } else if (scrollable === thead) {\n tbody.scrollLeft = thead.scrollLeft;\n }\n};\n\nconst scheduleScrollSync = raf(performScroll);\n\nexport default class extends Controller {\n static targets = [\"table\", \"thead\", \"tbody\"];\n\n connect() {\n setTimeout(() => {\n this.assignDimensions();\n this.setTableHeight();\n }, 300);\n\n this.theadTarget.addEventListener(\n \"scroll\",\n this.syncScroll.bind(this),\n true\n );\n\n this.tbodyTarget.addEventListener(\n \"scroll\",\n this.syncScroll.bind(this),\n true\n );\n }\n\n disconnect() {\n this.theadTarget.removeEventListener(\"scroll\", this.syncScroll, true);\n this.tbodyTarget.removeEventListener(\"scroll\", this.syncScroll, true);\n }\n\n assignDimensions() {\n const lastHeadRow = this.theadTarget.querySelector(\"tr:last-of-type\");\n const firstCellRow = this.tbodyTarget.querySelector(\"tr:first-of-type\");\n\n const lastHeadRowCells = this.theadTarget.querySelectorAll(\n \"tr:last-of-type > th\"\n );\n const firstCellRowCells = this.tbodyTarget.querySelectorAll(\n \"tr:first-of-type > td\"\n );\n\n const tableWidth =\n Math.min(this.tableTarget.getBoundingClientRect().width, this.tbodyTarget.scrollWidth) || 0;\n\n const rowWidth = Math.max(\n lastHeadRow.getBoundingClientRect().width || 0,\n firstCellRow.getBoundingClientRect().width || 0\n );\n\n const scrollbarWidth =\n (this.tableTarget.getBoundingClientRect().width || 0) -\n (this.tbodyTarget.scrollWidth || 0);\n\n const firstCell = firstCellRowCells[0];\n const isEmpty = firstCell.hasAttribute(\"colspan\") &&\n firstCell.getAttribute(\"colspan\") === \"99\";\n\n // 2px KVULI BORDER-WIDTH left <=> right\n const diff = Math.floor(tableWidth - rowWidth - 2);\n const length = isEmpty ? lastHeadRowCells.length : firstCellRowCells.length;\n let toAdd = diff > 0 ? Math.floor(diff / length) : 0;\n\n let total = 0;\n\n for (let idx = 0; idx < length; idx++) {\n const elem1 = lastHeadRowCells[idx];\n const elem2 = isEmpty ? lastHeadRowCells[idx] : firstCellRowCells[idx];\n\n const rect1 = elem1.getBoundingClientRect();\n const rect2 = elem2.getBoundingClientRect();\n\n const width1 = rect1.width;\n const width2 = rect2.width;\n\n let width = 0;\n\n if (idx === 0 && isEmpty) {\n width = Math.ceil(Math.min(width1, width2));\n } else {\n const maxTemp = Math.ceil(Math.max(width1, width2));\n const minTemp = Math.ceil(Math.min(maxTemp, this.maxWidth));\n width = idx === 0 ? maxTemp : minTemp;\n }\n\n total += (width + toAdd);\n\n // JENOM POKUD MÁME TABULKU, KTERÁ BY SE MĚLA VEJÍT NA STRÁNKU\n if (diff > 0 && total > tableWidth) {\n toAdd = toAdd + (tableWidth - total);\n }\n\n elem1.style.width = `${width + toAdd}px`;\n elem1.style.minWidth = `${width + toAdd}px`;\n elem1.style.maxWidth = `${width + toAdd}px`;\n\n elem2.style.width = `${width + toAdd}px`;\n elem2.style.minWidth = `${width + toAdd}px`;\n elem2.style.maxWidth = `${width + toAdd}px`;\n }\n\n if (isEmpty) {\n firstCell.setAttribute(\"colspan\", length);\n firstCell.style.width = `100vw`;\n }\n }\n\n syncScroll(event) {\n scheduleScrollSync(this, event.currentTarget);\n }\n\n setTableHeight() {\n const navbar = document.getElementById(\"app-navbar\");\n const content = document.getElementById(\"app-content\");\n const footer = document.getElementById(\"app-footer\");\n\n if (navbar == null || content == null || footer == null) return;\n\n const tbody = this.tbodyTarget;\n\n const navbarRect = navbar.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const footerRect = footer.getBoundingClientRect();\n const tbodyRect = tbody.getBoundingClientRect();\n\n const spacer = Math.ceil((footerRect.top || 0) - (contentRect.bottom || 0));\n const tbodyHeight = tbodyRect.height + spacer;\n\n tbody.style.height = `${tbodyHeight}px`;\n }\n\n get maxWidth() {\n return 360;\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static timeout;\n\n connect() {\n if (!this.isLocal) {\n this.element.addEventListener(\"change\", this.handleSubmit.bind(this));\n // this.element.addEventListener(\"input\", this.handleInput.bind(this));\n this.element.addEventListener(\"keydown\", this.handleKeydown.bind(this));\n }\n\n this.element.addEventListener(\n \"ajax:beforeSend\",\n this.handleRender.bind(this)\n );\n }\n\n disconnect() {\n if (!this.isLocal) {\n this.element.removeEventListener(\"change\", this.handleSubmit);\n // this.element.removeEventListener(\"input\", this.handleInput);\n this.element.removeEventListener(\"keydown\", this.handleKeydown);\n }\n\n this.element.removeEventListener(\"ajax:beforeSend\", this.handleRender);\n\n this.timeout = undefined;\n }\n\n // handleInput(event) {\n // clearTimeout(this.timeout);\n\n // this.timeout = setTimeout(() => {\n // this.handleSubmit(event);\n // this.setFocus(event.target);\n // }, 999);\n // }\n\n handleKeydown(event) {\n const { keyCode } = event;\n if (keyCode === 13) {\n this.handleSubmit(event);\n }\n }\n\n handleSubmit(event) {\n clearTimeout(this.timeout);\n const performSearch = this.submittableField(event);\n\n if (performSearch) {\n event.preventDefault();\n\n if (event.type === \"change\" && event.target.type === \"number\") {\n this.timeout = setTimeout(() => {\n Rails.fire(this.element, \"submit\");\n this.setFocus(event.target);\n }, 999);\n } else {\n Rails.fire(this.element, \"submit\");\n }\n }\n }\n\n handleRender(event) {\n if (event.target === this.element) {\n event.preventDefault();\n\n const { detail } = event;\n const xhr = detail[0];\n const options = detail[1];\n\n Turbolinks.visit(options.url, { action: \"replace\" });\n }\n }\n\n submittableField(event) {\n const { target: field, type } = event;\n\n if (!this.regexp.test(field.getAttribute(\"name\"))) return false;\n if (!this.formFields.includes(field)) return false;\n\n switch (type) {\n case \"input\":\n case \"keydown\":\n return [\"number\", \"text\"].includes(field.type);\n break;\n case \"change\":\n return [\"number\", \"radio\", \"hidden\", \"select-one\", \"select-multiple\"].includes(field.type);\n break;\n default:\n break;\n }\n }\n\n setFocus(field) {\n return setTimeout(() => {\n const input = document.getElementById(field.id);\n\n if (input && this.regexp.test(input.getAttribute(\"name\"))) {\n input.focus();\n\n const value = input.value;\n input.value = \"\";\n input.value = value;\n }\n }, 2000);\n }\n\n get isLocal() {\n return this.data.get(\"local\") === \"true\"\n }\n\n get formFields() {\n return Array.from(this.element.elements);\n }\n\n get regexp() {\n return new RegExp(\"q[[a-z_]+]\");\n }\n}\n","import { Controller } from \"stimulus\";\nimport SlimSelect, { debounce } from \"slim-select\";\nimport qs from \"qs\";\nimport removeAccents from \"remove-accents\";\nimport { rFetch, safeParse } from \"src/utils\";\n\nconst fetchData = (url, callbackFn, search = {}) => {\n rFetch(url, {\n as: \"json\",\n contentType: \"application/json\",\n query: {\n q: search,\n },\n })\n .then(callbackFn)\n};\n\nexport default class extends Controller {\n static select;\n static timeout;\n\n connect() {\n let opts = {\n allowDeselect: true,\n allowDeselectOption: true,\n beforeOpen: this.handleOpen.bind(this),\n closeOnSelect: !this.element.multiple,\n deselectLabel: '',\n hideSelectedOption: true,\n onChange: this.maybeAddSelectOptions.bind(this),\n placeholder:\n this.element.dataset.placeholder || \"Vyberte z možností\\u2026\",\n searchPlaceholder: \"Hledat\\u2026\",\n searchText: \"Nic nenalezeno\\u2026\",\n select: this.element\n }\n\n if (this.fetchOnSearch) {\n opts = {\n ...opts,\n ajax: this.handleSearchDebounced.bind(this),\n searchingText: \"Probíhá hledání\\u2026\",\n searchFilter: ({ text }, search) => true\n }\n } else {\n opts = {\n ...opts,\n searchFilter: ({ text }, search) =>\n removeAccents(text)\n .toLowerCase()\n .indexOf(removeAccents(search).toLowerCase()) !== -1\n }\n }\n\n this.select = new SlimSelect(opts);\n\n if (this.fetchOnConnect && !this.fetchOnSearch) {\n fetchData(this.url, this.populateOptions)\n }\n }\n\n disconnect() {\n this.select.destroy();\n this.select = null;\n }\n\n handleOpen = (info = null) => {\n this.calculateDropdownPosition();\n this.maybeAddSelectOptions(info);\n };\n\n handleSearchDebounced = (query, callbackFn) => {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => this.handleSearch(query, callbackFn), 300);\n }\n\n handleSearch(query, callbackFn) {\n if (!this.fetchOnSearch) return;\n\n if (query.length < 3) {\n const placeholder = this.placeholderOption || \"Zadejte hledaný výraz\\u2026\"\n callbackFn(placeholder)\n return\n }\n\n const url = new URL(this.url)\n const { origin, pathname, search } = url\n\n const parsed = qs.parse(search, { ignoreQueryPrefix: true })\n const { q } = parsed\n const existing = q == null ? parsed : q\n\n const deps = safeParse(this.queryDependencies) || {}\n let filters = Object.keys(deps).reduce((memo, key) => {\n const selector = `[data-dependency-id~=${deps[key]}]`\n const raw = document.querySelector(`${selector}`)\n let element\n let value\n\n switch (raw.type) {\n case \"radio\":\n case \"checkbox\":\n element = document.querySelector(`${selector}:checked`)\n value = element.dataset.value || element.value\n break;\n default:\n element = document.querySelector(`${selector}`)\n value = element.dataset.value || element.value\n }\n\n if (element && value !== undefined) memo[key] = value\n return memo\n }, {})\n\n filters = Object.assign(filters, {\n [this.queryFilterName]: query\n })\n\n const path = `${origin}${pathname}`\n\n rFetch(path, {\n as: \"json\",\n contentType: \"application/json\",\n query: {\n q: { ...filters, ...existing },\n },\n })\n .then((res) => {\n const data = res.map((el) => {\n return Object.assign(\n {},\n {\n text: el[this.labelOption],\n value: el[this.valueOption],\n }\n );\n });\n\n return data.length > 0 ? callbackFn(data) : callbackFn(\"Nic nenalezeno\\u2026\")\n })\n .catch(false)\n }\n\n calculateDropdownPosition = () => {\n const select = this.element.slim;\n if (select == null) return;\n\n const { container, content } = select.slim;\n if (container.closest(\"th\") == null) return;\n\n const clientRect = container.getBoundingClientRect();\n content.style.left = `${clientRect.left}px`;\n };\n\n maybeAddSelectOptions = (info = null) => {\n if (this.element.type === \"select-one\") return false;\n if (this.element.dataset.preventAddSelectOptions) return false;\n\n const select = this.element.slim;\n const current = select.data.data;\n\n const selectedSize = info ? info.length : select.selected().length;\n const hasSelectAll =\n current.filter((v) => v.value === \"Přidat vše\\u2026\").length > 0;\n const hasDeselectAll =\n current.filter((v) => v.value === \"Odstranit vše\\u2026\").length > 0;\n\n const applySelectAll = select.selected().includes(\"Přidat vše\\u2026\");\n const applyDeselectAll = select.selected().includes(\"Odstranit vše\\u2026\");\n const data = current.filter(\n (v) => ![\"Přidat vše\\u2026\", \"Odstranit vše\\u2026\"].includes(v.value)\n );\n\n if (applySelectAll) {\n select.set(data.map((v) => v.value));\n select.setData(data);\n return;\n }\n\n if (applyDeselectAll) {\n select.set([]);\n select.setData(data);\n return;\n }\n\n if (selectedSize && !hasDeselectAll) {\n current.unshift({ value: \"\", text: \"Odstranit vše\\u2026\" });\n }\n\n if (selectedSize !== data.length && !hasSelectAll) {\n current.unshift({ value: \"\", text: \"Přidat vše\\u2026\" });\n }\n\n select.setData(current);\n };\n\n populateOptions = (result) => {\n const input = this.select\n\n if (!input) return;\n const data = result.map((el) => {\n return Object.assign(\n {},\n {\n text: el[this.labelOption],\n value: el[this.valueOption],\n }\n );\n });\n\n input.setData(data);\n input.set([this.selected]);\n };\n\n get fetchOnConnect() {\n return this.data.get(\"fetch-on\") === \"connect\"\n }\n\n get fetchOnSearch() {\n return this.data.get(\"fetch-on\") === \"search\"\n }\n\n get queryDependencies() {\n return this.data.get(\"query-dependencies\")\n }\n\n get queryFilterName() {\n return this.data.get(\"query-filter-name\")\n }\n\n get selected() {\n return this.data.get(\"selected\")\n }\n\n get placeholderOption() {\n return this.data.get(\"placeholder\")\n }\n\n get labelOption() {\n return this.data.get(\"label\")\n }\n\n get valueOption() {\n return this.data.get(\"value\")\n }\n\n get url() {\n return this.data.get(\"url\")\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"container\"];\n\n connect() {\n if (this.preventInit) return;\n\n // The class we should toggle on the container\n this.toggleClass = this.data.get(\"class\") || \"hidden\";\n\n // The HTML for the background element\n this.backgroundHtml = this.data.get(\"backgroundHtml\") || this._backgroundHTML();\n\n // The ID of the background to hide/remove\n this.backgroundId = this.data.get(\"backgroundId\") || \"modal-background\";\n\n // Let the user close the modal by clicking on the background\n this.allowBackgroundClose = (this.data.get(\"allowBackgroundClose\") || \"true\") === \"true\";\n }\n\n disconnect() {\n if (this.preventInit) return;\n\n this.close();\n }\n\n open(e) {\n e.preventDefault();\n e.target.blur();\n\n // Lock the scroll and save current scroll position\n this.lockScroll();\n\n // Unhide the modal\n this.containerTarget.classList.remove(this.toggleClass);\n\n // Insert the background\n if (!this.data.get(\"disable-backdrop\")) {\n document.body.insertAdjacentHTML(\"beforeend\", this.backgroundHtml);\n this.background = document.querySelector(`#${this.backgroundId}`);\n }\n }\n\n close(e) {\n if (e) e.preventDefault();\n\n // Unlock the scroll and restore previous scroll position\n this.unlockScroll();\n\n // Hide the modal\n this.containerTarget.classList.add(this.toggleClass);\n\n // Remove the background\n if (this.background) { this.background.remove() }\n }\n\n closeBackground(e) {\n if (this.allowBackgroundClose && e.target === this.containerTarget) {\n this.close(e);\n }\n }\n\n closeWithKeyboard(e) {\n if (e.keyCode === 27 && !this.containerTarget.classList.contains(this.toggleClass)) {\n this.close(e);\n }\n }\n\n _backgroundHTML() {\n return '
';\n }\n\n lockScroll() {\n // Add right padding to the body so the page doesn't shift\n // when we disable scrolling\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n\n // Save the scroll position\n this.saveScrollPosition();\n\n // Add classes to body to fix its position\n document.body.classList.add(\"fixed\", \"inset-x-0\", \"overflow-hidden\");\n\n // Add negative top position in order for body to stay in place\n document.body.style.top = `-${this.scrollPosition}px`;\n }\n\n unlockScroll() {\n // Remove tweaks for scrollbar\n document.body.style.paddingRight = null;\n\n // Remove classes from body to unfix position\n document.body.classList.remove(\"fixed\", \"inset-x-0\", \"overflow-hidden\");\n\n // Restore the scroll position of the body before it got locked\n this.restoreScrollPosition();\n\n // Remove the negative top inline style from body\n document.body.style.top = null;\n }\n\n saveScrollPosition() {\n this.scrollPosition = window.pageYOffset || document.body.scrollTop;\n }\n\n restoreScrollPosition() {\n document.documentElement.scrollTop = this.scrollPosition;\n }\n\n get preventInit() {\n const selector = document.querySelector('[data-target~=\"simple-modal.container\"]')\n return selector == null\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"slide\", \"button\"];\n\n initialize() {\n this.showCurrentSlide();\n this.toggleButtons();\n }\n\n next(event) {\n if (this.index !== this.count) this.index++;\n this.toggleButtons();\n }\n\n previous(event) {\n if (this.index !== 0) this.index--;\n this.toggleButtons();\n }\n\n showCurrentSlide() {\n this.slideTargets.forEach((el, i) => {\n el.classList.toggle(\"slide--current\", this.index == i);\n });\n }\n\n toggleButtons() {\n this.buttonTargets.forEach(el => {\n const type = el.dataset.type;\n\n if (type === \"previous\") {\n el.classList.toggle(\"visually-hidden\", this.index === 0);\n } else {\n el.classList.toggle(\"visually-hidden\", this.index === this.count);\n }\n });\n }\n\n get count() {\n return this.slideTargets.length > 0 ? this.slideTargets.length - 1 : 0;\n }\n\n get index() {\n return parseInt(this.data.get(\"index\"));\n }\n\n set index(value) {\n this.data.set(\"index\", value);\n this.showCurrentSlide();\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"toggleable\"];\n\n connect() {\n this.toggleClass = this.data.get(\"class\") || \"hidden\";\n }\n\n toggle(event) {\n event.preventDefault();\n this.toggleableTargets.forEach(target => {\n target.classList.toggle(this.toggleClass);\n });\n }\n\n switch(event) {\n event.preventDefault();\n const target = event.currentTarget;\n\n switch(target.getAttribute(\"aria-checked\")) {\n case \"true\":\n target.setAttribute(\"aria-checked\", \"false\");\n break;\n case \"false\":\n target.setAttribute(\"aria-checked\", \"true\");\n break;\n }\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"shelf\"];\n\n initialize() {\n this.shelfTargets.forEach(shelf => {\n const trigger = document.querySelector(\n `[data-trigger-id~=${this.trigger}]`\n );\n\n switch (trigger.type) {\n case \"radio\":\n const checked = document.querySelector(\n `[data-trigger-id~=${this.trigger}]:checked`\n );\n\n return shelf.classList.toggle(\n \"visually-hidden\",\n checked.checked && !(checked.value === shelf.dataset.triggerOn)\n );\n break;\n case \"checkbox\":\n shelf.classList.toggle(\n \"visually-hidden\",\n !(trigger.checked === this.toBoolean(shelf.dataset.triggerOn))\n );\n break;\n case \"select-one\":\n shelf.classList.toggle(\n \"visually-hidden\",\n !(trigger.value === shelf.dataset.triggerOn)\n );\n break;\n default:\n break;\n }\n });\n }\n\n select(event) {\n event.preventDefault();\n\n this.shelfTargets.forEach(shelf => {\n switch (event.target.type) {\n case \"radio\":\n shelf.classList.toggle(\n \"visually-hidden\",\n !(\n event.target.checked &&\n event.target.value === shelf.dataset.triggerOn\n )\n );\n break;\n case \"checkbox\":\n shelf.classList.toggle(\n \"visually-hidden\",\n !(event.target.checked === this.toBoolean(shelf.dataset.triggerOn))\n );\n break;\n case \"select-one\":\n shelf.classList.toggle(\n \"visually-hidden\",\n !(event.target.value === shelf.dataset.triggerOn)\n );\n break;\n default:\n break;\n }\n });\n }\n\n toBoolean(value) {\n return value === \"true\";\n }\n\n get trigger() {\n return this.data.get(\"trigger\");\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"yearInput\"];\n\n select(event) {\n event.preventDefault();\n\n if (event.target && event.target.value === 0) return;\n\n const selected = flatpickr.parseDate(event.target.value, this.dateFormat);\n\n if (this.yearInputTarget && this.yearInputTarget.value.length === 0) {\n this.yearInputTarget.value = this.getYearForInput(selected);\n }\n }\n\n getYearForInput(date) {\n if (date.getFullYear() > this.currentYear) {\n return date.getFullYear();\n } else {\n return this.currentYear;\n }\n }\n\n get currentYear() {\n return new Date().getFullYear();\n }\n\n get dateFormat() {\n return \"d.m.Y\";\n }\n}\n","// Custom TailwindCSS modals for confirm dialogs\n\nconst Rails = require(\"@rails/ujs\")\n\n// Cache a copy of the old Rails.confirm since we'll override it when the modal opens\nconst old_confirm = Rails.confirm;\n\n// Elements we want to listen to for data-confirm\nconst elements = ['a[data-confirm]:not([disabled])', 'button[data-confirm]:not([disabled])', 'input[type=submit][data-confirm]:not([disabled])']\n\nconst createConfirmModal = (element) => {\n const id = 'confirm-modal-' + String(Math.random()).slice(2, -1);\n const confirm = element.dataset.confirm\n const confirmBtn = element.dataset.confirmButton || 'Potvrdit'\n const cancelBtn = element.dataset.cancelButton || 'Zavřít'\n\n const content = `\n
\n
\n\n
\n
\n

${confirm}

\n
\n
\n \n \n
\n
\n
\n
\n `\n\n element.insertAdjacentHTML('afterend', content)\n\n const modal = element.nextElementSibling\n element.dataset.confirmModal = `#${id}`\n\n modal.addEventListener(\"keyup\", (event) => {\n if(event.key === \"Escape\") {\n event.preventDefault()\n element.removeAttribute(\"data-confirm-modal\")\n modal.remove()\n }\n })\n\n modal.querySelector(\"[data-behavior='cancel']\").addEventListener(\"click\", (event) => {\n event.preventDefault()\n element.removeAttribute(\"data-confirm-modal\")\n modal.remove()\n })\n modal.querySelector(\"[data-behavior='commit']\").addEventListener(\"click\", (event) => {\n event.preventDefault()\n\n // Allow the confirm to go through\n Rails.confirm = () => { return true }\n\n // Click the link again\n element.click()\n\n // Remove the confirm attribute and modal\n element.removeAttribute(\"data-confirm-modal\")\n Rails.confirm = old_confirm\n\n modal.remove()\n })\n\n modal.querySelector(\"[data-behavior='commit']\").focus()\n return modal\n}\n\n// Checks if confirm modal is open\nconst confirmModalOpen = (element) => {\n return !!element.dataset.confirmModal;\n}\n\nconst handleConfirm = (event) => {\n // If there is a modal open, let the second confirm click through\n if (confirmModalOpen(event.target)) {\n return true\n\n // First click, we need to spawn the modal\n } else {\n createConfirmModal(event.target)\n return false\n }\n}\n\n// When a Rails confirm event fires, we'll handle it\nRails.delegate(document, elements.join(', '), 'confirm', handleConfirm)\n","document.addEventListener(\"turbolinks:load\", ()=> {\n const Forms = {\n init() {\n this.fileInputToggle();\n },\n\n fileInputToggle() {\n const inputs = document.querySelectorAll('.form-file');\n\n inputs.forEach(function(input) {\n const label = input.nextElementSibling,\n labelVal = label.innerHTML;\n\n input.addEventListener('change', function(e) {\n var fileName = '';\n\n if (this.files && this.files.length > 1) {\n fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );\n } else {\n fileName = e.target.value.split( '\\\\' ).pop();\n }\n\n if (fileName) {\n label.querySelector( 'span' ).innerHTML = fileName;\n } else {\n label.innerHTML = labelVal;\n }\n });\n });\n }\n };\n\n Forms.init();\n});\n","function bindTableLinks() {\n const keycodes = { space: 32, enter: 13 }\n\n function visitDataUrl(event) {\n /** @type {HTMLTableRowElement} */\n const target = event.target.classList.contains(\"js-table-row\")\n ? event.target\n : event.target.closest('.js-table-row')\n\n if (!target) {\n return\n }\n\n if (event.type === \"click\" ||\n event.keyCode === keycodes.space ||\n event.keyCode === keycodes.enter) {\n\n if (event.target.href) {\n return\n }\n\n const dataUrl = target.getAttribute(\"data-url\")\n const selection = window.getSelection().toString()\n if (selection.length === 0 && dataUrl) {\n const delegate = target.querySelector(`[href=\"${dataUrl}\"]`)\n if (delegate) {\n delegate.click()\n } else {\n window.location = dataUrl\n }\n }\n }\n }\n\n const tables = [...document.getElementsByTagName(\"table\")]\n tables.forEach(\n /** @type {HTMLTableElement} */ (table) => {\n table.addEventListener(\"click\", visitDataUrl)\n table.addEventListener(\"keydown\", visitDataUrl)\n })\n}\n\ndocument.addEventListener(\"turbolinks:load\", function() {\n bindTableLinks()\n})\n","import { rFetch } from \"src/utils\";\n\nclass MapGeometry {\n constructor(element, dataSource, map, options) {\n this.element = element\n this.options = options || {}\n this.map = map\n this.dataSource = dataSource\n\n fetchDataSource(this, dataSource)\n }\n\n render() {\n this.processData();\n renderGeometry(this.geometryName(), this);\n }\n\n center() {\n if (this.coordinates.length > 0) {\n const computed = this.map.computeCenterZoom(this.coordinates)\n const [center, zoom] = computed\n this.map.setCenterZoom(center, zoom)\n }\n }\n}\n\nclass MarkerGeometry extends MapGeometry {\n processData() {\n const [coordinates, data] = processMarkers(this)\n\n this.data = data\n this.coordinates = (this.coordinates || []).concat(coordinates)\n\n const layer = new SMap.Layer.Marker(this.element)\n\n if (this.options[\"cluster\"] === true) {\n const clusterer = this.configClusterer()\n layer.setClusterer(clusterer)\n }\n\n layer.addMarker(this.data)\n this.map.addLayer(layer).enable()\n }\n\n geometryName() {\n return \"MarkerGeometry\";\n }\n\n configClusterer() {\n const CustomClusterer = JAK.ClassMaker.makeClass({\n NAME: \"CustomClusterer\",\n VERSION: \"1.0\",\n EXTEND: SMap.Marker.Cluster\n })\n\n CustomClusterer.prototype.click = function(e, elm) {\n const zoom = 18;\n const m = this.getMap();\n\n if (m.getZoom() >= zoom) {\n const card = new SMap.Card()\n let panel = \"\"\n\n for (i = 0; i < this._markers.length; i++) {\n panel += this._markers[i]._card.getBody().innerHTML\n }\n\n card.getContainer().classList.add(\"map-card\")\n card.getBody().innerHTML = panel\n m.addCard(card, this.getCoords())\n } else {\n this.$super(e, elm);\n }\n }\n\n new SMap.Marker.Clusterer(this.map, 25, CustomClusterer);\n }\n}\n\nconst Mapkick = {\n MarkerGeometry: MarkerGeometry,\n geometries: {},\n};\n\nif (typeof window !== \"undefined\" && !window.Mapkick) {\n window.Mapkick = Mapkick;\n}\n\nMapkick.default = Mapkick;\nexport default Mapkick;\n\nconst fetchDataSource = (instance, dataSource) => {\n if (typeof dataSource === \"string\") {\n rFetch(dataSource, {\n as: \"json\",\n contentType: \"application/json\"\n })\n .then(data => {\n instance.rawData = data\n errorCatcher(instance)\n })\n .catch(err => errorToConsole(err.message))\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource((data) => {\n instance.rawData = data;\n errorCatcher(instance);\n }, (message) => errorToConsole(message))\n } catch (err) {\n errorToConsole(err.message);\n }\n } else {\n instance.rawData = dataSource\n errorCatcher(instance)\n }\n}\n\nconst renderGeometry = (geometryType, instance) => {\n instance.center()\n}\n\nconst processMarkers = (instance) => {\n let markers = []\n let coordinates = []\n\n instance.rawData.forEach(item => {\n const { latitude, longitude, popup, icon } = item\n const url = icon || instance.options[\"icon\"]\n const coords = SMap.Coords.fromWGS84(longitude, latitude);\n\n coordinates = coordinates.concat(coords);\n const marker = new SMap.Marker(coords, null, { url });\n\n if (popup) {\n const card = new SMap.Card();\n card.getContainer().classList.add(\"map-card\")\n card.getBody().innerHTML = popup;\n marker.decorate(SMap.Marker.Feature.Card, card);\n }\n\n markers.push(marker)\n })\n\n return [coordinates, markers]\n}\n\nconst errorCatcher = (instance) => {\n try {\n instance.render();\n } catch (err) {\n errorToConsole(err.message);\n throw err;\n }\n}\n\nconst errorToConsole = (value) => {\n const message = `🚨 %c[Mapkick Error]: ${value}`\n console.log(message, \"color: #ff0000; font-weight:bold;\")\n}\n","import { Application } from \"stimulus\";\nimport RevealController from 'stimulus-reveal'\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\";\n\nconst application = Application.start();\nconst context = require.context(\"controllers\", true, /_controller\\.js$/);\napplication.load(definitionsFromContext(context));\n\nimport { Dropdown, Tabs } from \"tailwindcss-stimulus-components\";\napplication.register(\"dropdown\", Dropdown);\napplication.register(\"reveal\", RevealController)\napplication.register(\"tabs\", Tabs);\n","import Trix from \"trix\"\n\nlet lang = Trix.config.lang;\nTrix.config.toolbar = {\n getDefaultHTML: function() {\n return `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n \n
\n
\n
\n `\n }\n}\n\nclass EmbedController {\n constructor(element) {\n this.patterns = undefined\n this.element = element\n this.editor = element.editor\n this.toolbar = element.toolbarElement\n this.hrefElement = this.toolbar.querySelector(\"[data-trix-input][name='href']\")\n this.embedContainerElement = this.toolbar.querySelector(\"[data-behavior='embed_container']\")\n this.embedElement = this.toolbar.querySelector(\"[data-behavior='embed_url']\")\n\n this.reset()\n this.installEventHandlers()\n }\n\n installEventHandlers() {\n this.hrefElement.addEventListener(\"input\", this.didInput.bind(this))\n this.hrefElement.addEventListener(\"focusin\", this.didInput.bind(this))\n this.embedElement.addEventListener(\"click\", this.embed.bind(this))\n }\n\n didInput(event) {\n let value = event.target.value.trim()\n\n // Load patterns from server so we can dynamically update them\n if (this.patterns === undefined) {\n this.loadPatterns(value)\n\n // When patterns are loaded, we can just fetch the embed code\n } else if (this.match(value)) {\n this.fetch(value)\n\n // No embed code, just reset the form\n } else {\n this.reset()\n }\n }\n\n loadPatterns(value) {\n Rails.ajax({\n type: \"get\",\n url: \"/embeds/patterns.json\",\n success: (response) => {\n this.patterns = response.map(pattern => new RegExp(pattern.source, pattern.options))\n if (this.match(value)) {\n this.fetch(value)\n }\n }\n })\n }\n\n // Checks if a url matches an embed code format\n match(value) {\n return this.patterns.some(regex => regex.test(value))\n }\n\n fetch(value) {\n Rails.ajax({\n url: `/embeds?id=${encodeURIComponent(value)}`,\n type: 'post',\n error: this.reset.bind(this),\n success: this.showEmbed.bind(this)\n })\n }\n\n embed(event) {\n if (this.currentEmbed == null) { return }\n\n let attachment = new Trix.Attachment(this.currentEmbed)\n this.editor.insertAttachment(attachment)\n this.element.focus()\n }\n\n showEmbed(embed) {\n this.currentEmbed = embed\n this.embedContainerElement.style.display = \"block\"\n }\n\n reset() {\n this.embedContainerElement.style.display = \"none\"\n this.currentEmbed = null\n }\n}\ndocument.addEventListener(\"trix-initialize\", function(event) {\n new EmbedController(event.target)\n})\n","import tippy from \"tippy.js\"\nimport ClipboardJS from \"clipboard\"\n\nfunction clipboardTooltip(element, message) {\n tippy(element, {\n content: message,\n showOnCreate: true,\n onHidden: (instance) => {\n instance.destroy()\n }\n });\n}\n\ndocument.addEventListener(\"turbolinks:load\", () => {\n tippy(document.querySelectorAll(\"[data-tippy-content]\"))\n\n let clipboard = new ClipboardJS(\"[data-clipboard-text]\")\n clipboard.on(\"success\", (e) => { clipboardTooltip(e.trigger, \"Copied!\") })\n clipboard.on(\"error\", (e) => { clipboardTooltip(e.trigger, \"Failed!\") })\n})\n","import { dispatchEvent } from \"./utils\";\n\nclass ModalComponent extends HTMLElement {\n constructor() {\n super();\n\n this.eventHandlers = [];\n }\n\n connectedCallback() {\n this.setAttribute(\"id\", \"app-modal\");\n this.setAttribute(\"class\", \"app-modal\");\n this.setAttribute(\"data-modal-target\", \"modal\");\n this.setAttribute(\"data-action\", \"close->modal#resetModal\");\n this.setAttribute(\"opened\", \"false\");\n this.setAttribute(\"ready\", \"false\");\n\n if (\n (this.hasAttribute(\"type\") || this.setAttribute(\"type\", \"box\"),\n this.getAttribute(\"opened\") !== \"false\")\n )\n return this.open();\n }\n\n disconnectedCallback() {\n return this.close();\n }\n\n static get observedAttributes() {\n return [\"loaded\", \"opened\", \"type\"];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n switch (name) {\n case \"loaded\":\n if (newValue === \"true\") {\n const focusable = this.querySelector(\"[autofocus]\");\n focusable != null && focusable.focus();\n }\n break;\n default:\n break;\n }\n }\n\n adoptedCallback() {\n // called when the element is moved to a new document\n // (happens in document.adoptNode, very rarely used)\n }\n\n open() {\n if (this.getAttribute(\"opened\") !== \"true\")\n this.setAttribute(\"opened\", \"true\");\n\n this.eventHandlers.push(\n this.addEventListener(\"click\", () => this.close.bind(this))\n );\n\n this.eventHandlers.push(\n this.addEventListener(\"keydown\", () => this.close.bind(this))\n );\n\n dispatchEvent(this, \"open\");\n }\n\n close() {\n if (this.getAttribute(\"opened\") !== \"false\") {\n this.setAttribute(\"opened\", \"false\");\n\n let handler;\n while ((handler = this.eventHandlers.pop())) {\n handler.destroy();\n }\n return dispatchEvent(this, \"close\");\n }\n }\n\n closesOnOutsideClick() {\n return !this.matches(\"[data-behavior~=close_button_only]\");\n }\n}\n\ncustomElements.define(\"app-modal\", ModalComponent);\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.\n\n// Rails functionality\nwindow.Rails = require(\"@rails/ujs\");\nrequire(\"turbolinks\").start();\nrequire(\"trix\");\nrequire(\"@rails/actiontext\");\n\n// Tailwind CSS\nrequire(\"stylesheets/application.scss\");\n\n// Stimulus controllers\nimport \"controllers\";\n\n// HoundApp functionality\nimport \"src/actiontext\";\nimport \"src/confirm\";\nimport \"src/forms\";\nimport \"src/table\";\nimport \"src/tooltips\";\nimport \"src/modal_component\";\n\nrequire(\"src/mapkick\");\n\n// Start Rails UJS\nRails.start();\n","import { Sortable, Plugins } from \"@shopify/draggable\";\nimport { rFetch, refreshWithScrollLock } from \"./utils\";\n\nconst Classes = {\n draggable: \"StackedListItem--isDraggable\",\n capacity: \"draggable-container-parent--capacity\"\n};\n\nexport const initQuintessentialDnD = ({\n itemSelector,\n listSelector,\n param,\n url\n} = props) => {\n const containers = document.querySelectorAll(\n `[data-target~=${listSelector}]`\n );\n\n if (containers.length === 0) {\n return false;\n }\n\n const sortable = new Sortable(containers, {\n draggable: `[data-target~=${itemSelector}]`,\n mirror: {\n constrainDimensions: true\n },\n plugins: [Plugins.ResizeMirror]\n });\n\n // --- Draggable events --- //\n sortable.on(\"sortable:sort\", evt => {\n const { overContainer, sourceContainer } = evt.dragEvent;\n\n if (!isListDroppable(overContainer, sourceContainer)) {\n evt.cancel();\n }\n });\n\n sortable.on(\"sortable:stop\", evt => {\n const { detail, newContainer, oldContainer } = evt;\n const canceled = !isListDroppable(newContainer, oldContainer);\n\n if (canceled) return false;\n\n const {\n newIndex,\n dragEvent: { originalSource }\n } = evt;\n const handle = originalSource.dataset.draggableId;\n\n if (newContainer === oldContainer) {\n // Sort event\n let formData = new FormData();\n formData.append(`${param}[position]`, newIndex);\n\n rFetch(`${url}/${handle}`, {\n method: \"PATCH\",\n body: formData\n }).then(_res => {\n return refreshWithScrollLock();\n });\n } else if (oldContainer.dataset.columnIdx === \"origin\") {\n // Create event\n let formData = new FormData();\n formData.append(`${param}[code]`, handle);\n formData.append(`${param}[position]`, newIndex);\n\n rFetch(`${url}`, {\n method: \"POST\",\n body: formData\n }).then(_res => {\n return refreshWithScrollLock();\n });\n } else if (oldContainer.dataset.columnIdx === \"copy\") {\n // Delete event\n rFetch(`${url}/${handle}`, {\n method: \"DELETE\"\n }).then(_res => {\n return refreshWithScrollLock();\n });\n }\n });\n\n return sortable;\n};\n\nconst isListDroppable = (newContainer, oldContainer) => {\n return (\n newContainer.dataset.itemsSortable === \"true\" ||\n oldContainer.dataset.itemsSortable === \"true\"\n );\n};\n","import { Controller } from \"stimulus\";\nimport { initQuintessentialDnD } from \"src/drag_n_drop\";\n\nexport default class extends Controller {\n connect() {\n initQuintessentialDnD({\n itemSelector: this.itemSelector,\n listSelector: this.listSelector,\n param: this.param,\n url: this.url\n });\n }\n\n get itemSelector() {\n return this.data.get(\"item\");\n }\n\n get listSelector() {\n return this.data.get(\"list\");\n }\n\n get param() {\n return this.data.get(\"param\");\n }\n\n get url() {\n return this.data.get(\"url\");\n }\n}\n","export async function subscribeTo(channelName, mixin) {\n const { consumer } = await import(/* webpackChunkName: \"cable\" */ \"chunks/cable\")\n return consumer.subscriptions.create(channelName, mixin)\n}\n","import CableReady from \"cable_ready\"\nimport { Controller } from \"stimulus\"\nimport { subscribeTo } from \"src/cable\"\n\nexport default class extends Controller {\n static targets = [ \"output\" ]\n\n connect() {\n this.channelName = \"InbreedingMatchesChannel\"\n this.subscribeToChannel()\n }\n\n disconnect() {\n this.unsubscribeFromChannel()\n }\n\n async subscribeToChannel() {\n this.subscription = await subscribeTo(this.channelName, {\n connected: this.streamChannelConnected.bind(this),\n received: this.streamDataReceived.bind(this),\n disconnected: this.streamChannelDisconnected.bind(this)\n })\n }\n\n unsubscribeFromChannel() {\n this.subscription?.unsubscribe()\n }\n\n streamChannelConnected() {\n console.log(`🚀%c[${this.channelName}] Client is connected…`, \"color: green; font-weight:bold;\")\n }\n\n streamDataReceived(data) {\n if (data.cableReady) CableReady.perform(data.operations)\n }\n\n streamChannelDisconnected() {\n console.log(`🏁%c[${this.channelName}] Client is disconnected…`, \"color: red; font-weight:bold;\")\n }\n}\n","export class ViewportEntranceObserver {\n constructor(rootMargin = \"40px\") {\n this.delegatesByElement = new WeakMap\n this.intersectionObserver = new IntersectionObserver(entries => this.processIntersectionEntries(entries), { rootMargin })\n }\n\n observe(element, delegate) {\n if (!this.delegatesByElement.has(element)) {\n this.delegatesByElement.set(element, delegate)\n this.intersectionObserver.observe(element)\n }\n }\n\n stopObserving(element) {\n if (this.delegatesByElement.has(element)) {\n this.delegatesByElement.delete(element)\n this.intersectionObserver.unobserve(element)\n }\n }\n\n processIntersectionEntries(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.elementWillEnterViewport(entry.target)\n }\n })\n }\n\n elementWillEnterViewport(element) {\n const delegate = this.delegatesByElement.get(element)\n if (delegate) {\n this.stopObserving(element)\n if (delegate.elementWillEnterViewport) {\n delegate.elementWillEnterViewport(element)\n }\n }\n }\n}\n","import { Controller } from \"stimulus\";\nimport { ViewportEntranceObserver } from \"src/viewport_entrance_observer\"\nimport { getPlaceholderImageURL } from \"src/utils\"\n\nconst viewportEntranceObserver = new ViewportEntranceObserver(\"500px\")\nconst placeholderImageURL = getPlaceholderImageURL(0, 0, 0, 0.04)\nconst processedImageURLs = new Set\n\nexport default class extends Controller {\n static get shouldLoad() {\n const isSafari = /^((?!Chrome|Android).)*(Safari|iOS)/i.test(navigator.userAgent)\n return !isSafari\n }\n\n connect() {\n if (this.shouldShowPlaceholderImage) {\n this.showPlaceholderImage()\n this.observeViewportEntrance()\n }\n }\n\n disconnect() {\n this.stopObservingViewportEntrance()\n }\n\n get shouldShowPlaceholderImage() {\n return !processedImageURLs.has(this.element.src)\n }\n\n get isShowingPlaceholderImage() {\n return this.data.has(\"src\")\n }\n\n observeViewportEntrance() {\n viewportEntranceObserver.observe(this.element, this)\n }\n\n stopObservingViewportEntrance() {\n viewportEntranceObserver.stopObserving(this.element)\n }\n\n elementWillEnterViewport() {\n this.showOriginalImage()\n }\n\n showPlaceholderImage() {\n if (!this.isShowingPlaceholderImage) {\n this.stashAttribute(\"srcset\")\n this.stashAttribute(\"src\")\n this.element.src = placeholderImageURL\n }\n }\n\n showOriginalImage() {\n if (this.isShowingPlaceholderImage) {\n this.restoreAttribute(\"srcset\")\n this.restoreAttribute(\"src\")\n processedImageURLs.add(this.element.src)\n }\n }\n\n stashAttribute(name) {\n const value = this.element.getAttribute(name)\n if (value != null) {\n this.element.removeAttribute(name)\n this.data.set(name, value)\n }\n }\n\n restoreAttribute(name) {\n const value = this.data.get(name)\n if (value != null) {\n this.element.setAttribute(name, value)\n this.data.delete(name)\n }\n }\n}\n","import Uppy from \"@uppy/core\";\nimport XHRUpload from '@uppy/xhr-upload'\nimport AwsS3 from '@uppy/aws-s3'\nimport AwsS3Multipart from '@uppy/aws-s3-multipart'\nimport FileInput from '@uppy/file-input'\nimport Informer from '@uppy/informer'\nimport ProgressBar from '@uppy/progress-bar'\nimport ThumbnailGenerator from '@uppy/thumbnail-generator'\n\nimport czechLocale from \"@uppy/locales/lib/cs_CZ\";\nimport { insertAfter } from \"./utils\";\n\nexport const singleFileUpload = fileInput => {\n const wrapper = fileInput.closest(\"[data-role~=file_container]\");\n const hiddenInput = wrapper.querySelector(\n `[data-role~=${fileInput.dataset.uploadResultElement}]`\n );\n const imagePreview = wrapper.querySelector(\n `[data-role~=${fileInput.dataset.previewElement}]`\n );\n const container = fileInput.closest(\".file-container\");\n const chooseI18n = container.dataset.fileI18n;\n\n fileInput.parentNode.removeChild(fileInput);\n\n const uppy = initUppy(fileInput);\n\n uppy\n .use(FileInput, {\n target: container,\n pretty: true,\n locale: {\n strings: {\n chooseFiles: chooseI18n\n }\n }\n })\n .use(Informer, { target: container })\n .use(ProgressBar, { target: container })\n .use(ThumbnailGenerator, { thumbnailWidth: 600 });\n\n if (imagePreview) {\n uppy.on(\"thumbnail:generated\", (file, preview) => {\n imagePreview.src = preview;\n });\n }\n\n uppy.on(\"upload\", (data) => {\n const form = container.closest(\"form\")\n if (!form) return;\n\n const button = form.querySelector(\"button[type='submit']\");\n if (button) {\n button.setAttribute(\"disabled\", true)\n }\n })\n\n uppy.on(\"upload-success\", (file, response) => {\n const fileData = uploadedFileData(file, response, fileInput);\n container.classList.add(\"visually-hidden\");\n hiddenInput.value = fileData;\n\n const { status } = response\n if ((status >= 200 && status <= 299) && imagePreview == null) {\n let html = document.createElement(\"span\");\n html.classList.add(\n \"block\",\n \"bg-gray-100\",\n \"font-bold\",\n \"form-control\",\n \"text-gray-800\"\n );\n html.textContent += file.name;\n insertAfter(html, container);\n }\n });\n\n uppy.on(\"complete\", (_) => {\n const form = container.closest(\"form\")\n if (!form) return;\n\n const button = form.querySelector(\"button[type='submit']\");\n if (button) {\n button.removeAttribute(\"disabled\")\n }\n })\n};\n\nconst initUppy = fileInput => {\n const allowedFileTypes = fileInput.accept.length\n ? { allowedFileTypes: fileInput.accept.split(\",\") }\n : {};\n\n const uppy = new Uppy({\n id: fileInput.id,\n autoProceed: true,\n locale: czechLocale,\n restrictions: {\n ...allowedFileTypes,\n maxNumberOfFiles: 1\n }\n });\n\n if (fileInput.dataset.uploadServer == \"s3\") {\n uppy.use(AwsS3, {\n companionUrl: \"/\"\n });\n } else if (fileInput.dataset.uploadServer == \"s3_multipart\") {\n uppy.use(AwsS3Multipart, {\n companionUrl: \"/\"\n });\n } else {\n uppy.use(XHRUpload, {\n endpoint: \"/upload\"\n });\n }\n\n return uppy;\n};\n\nconst uploadedFileData = (file, response, fileInput) => {\n if (fileInput.dataset.uploadServer == \"s3\") {\n const id = file.meta[\"key\"].match(/^cache\\/(.+)/)[1];\n\n return JSON.stringify(fileData(file, id));\n } else if (fileInput.dataset.uploadServer == \"s3_multipart\") {\n const id = response.uploadURL.match(/\\/cache\\/([^\\?]+)/)[1];\n\n return JSON.stringify(fileData(file, id));\n } else {\n return JSON.stringify(response.body);\n }\n};\n\nconst fileData = (file, id) => ({\n id: id,\n storage: \"cache\",\n metadata: {\n size: file.size,\n filename: file.name,\n mime_type: file.type\n }\n});\n","import { Controller } from \"stimulus\";\n\n// Uppy S3 file upload\nimport { singleFileUpload } from \"src/direct_upload\";\n\nexport default class extends Controller {\n static targets = [\"fileInput\"];\n\n initialize() {\n this.fileInputTargets.forEach(fileInput => {\n singleFileUpload(fileInput);\n });\n }\n}\n"],"sourceRoot":""}