{"version":3,"sources":["webpack:///./app/javascript/channels/consumer.js","webpack:///./app/javascript/src/js/csrf.js","webpack:///./app/javascript/src/css/autoload sync nonrecursive \\.(css|scss|sass)$","webpack:///./app/javascript/controllers sync _controller\\.js$","webpack:///./app/javascript/controllers/all_chats_controller.js","webpack:///./app/javascript/controllers/avatar_controller.js","webpack:///./app/javascript/controllers/chat_controller.js","webpack:///./app/javascript/controllers/resume_controller.js","webpack:///./app/javascript/controllers/studio_controller.js","webpack:///./app/javascript/controllers/uppy_controller.js","webpack:///./app/javascript/controllers/wave_controller.js","webpack:///./app/javascript/src/js/fontawesome_imports.js","webpack:///./app/javascript/controllers/index.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/src/js/cookie.js","webpack:///./app/javascript/controllers/chat_header_controller.js"],"names":["createConsumer","headers","Headers","csrfToken","document","querySelector","content","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","this","lazyAllMessages","consumer","subscriptions","create","channel","connected","_cableConnected","bind","received","_cableReceived","console","log","data","targetMes","lastMessagesTarget","uuid","message","DOMParser","parseFromString","innerMessage","innerHTML","outerMessage","outerHTML","insertAdjacentHTML","fetch","then","response","json","body","html","event","currentTarget","dataset","chatWindow","uuids","includes","chatUuid","style","right","userchatTargets","length","prepend","index","element","array","push","Controller","targets","uppy","Core","debug","autoProceed","allowMultipleUploads","restrictions","allowedFileTypes","maxNumberOfFiles","maxFileSize","use","XHRUpload","endpoint","limit","ProgressBar","target","progressTarget","Informer","ThumbnailGenerator","thumbnailWidth","thumbnailHeight","thumbnailType","waitForThumbnailsBeforeUpload","customInput","on","file","preview","previewTarget","src","uploadedFileData","hiddenFieldTarget","value","JSON","stringify","fileInputTarget","addEventListener","Array","from","files","forEach","addFile","source","name","type","err","isRestriction","error","classList","contains","get","scrollToBottom","list","messagesTarget","scrollTop","scrollHeight","userId","to_user_id","toUserId","inputTarget","method","ok","res","preventDefault","altKey","ctrlKey","metaKey","shiftKey","isMac","handleLineBreak","sendMessage","navigator","platform","match","hasReplaceFieldTarget","FileInput","replaceFieldTarget","replaceTargetContent","pretty","locale","strings","chooseFiles","confirm","destroyFieldTarget","opacity","path","attachData","add","audioTemplateTarget","replace","uppyUuid","remove","alert","hasWaveformTarget","wavesurfer","WaveSurfer","container","waveformTarget","height","responsive","waveColor","progressColor","load","wavePath","setInterval","drawBuffer","eventPlay","CustomEvent","detail","window","dispatchEvent","playPause","playIconTarget","toggle","pauseIconTarget","pause","toPause","library","faGlobe","faComments","faYoutube","faChevronDown","faChevronUp","faTimes","faPlay","faPause","dom","watch","application","Application","start","context","require","definitionsFromContext","requireAll","setCookie","options","expires","Date","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","cookie","closest","up","down","closeEvent"],"mappings":"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","file":"js/application-c0b15a9f2d568a80c755.chunk.js","sourcesContent":["// default\n// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","// reusable function for fetch\n// const csrfToken = document.querySelector(\"[name='csrf-token']\").content\nexport function csrfToken() {\n const csrfToken = document.querySelector(\"[name='csrf-token']\")\n if (csrfToken) {\n return csrfToken.content\n } else {\n return null\n }\n}\n\nexport const headers = new Headers({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json', // showing 'as JSON' in rails console\n 'X-CSRF-Token': csrfToken()\n})\n","var map = {\n\t\"./chat.css\": 509,\n\t\"./contact.css\": 510,\n\t\"./flash.sass\": 511,\n\t\"./uploads.css\": 512\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 = 508;","var map = {\n\t\"./all_chats_controller.js\": 514,\n\t\"./avatar_controller.js\": 515,\n\t\"./chat_controller.js\": 643,\n\t\"./chat_header_controller.js\": 651,\n\t\"./resume_controller.js\": 644,\n\t\"./studio_controller.js\": 645,\n\t\"./uppy_controller.js\": 646,\n\t\"./wave_controller.js\": 647\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 = 513;","import { Controller } from \"stimulus\"\nimport consumer from \"../channels/consumer\"\n\nexport default class extends Controller {\n static targets = [ 'lastMessages', 'userchat' ]\n\n // alert('<%= _(\"You can chat only with #{@limit} voice talent at the same time, close a chat window in order to chat with another voice talent\") %>');\n\n initialize() {\n this.lazyAllMessages()\n\n consumer.subscriptions.create({\n channel: \"AllChatsChannel\",\n }, {\n connected: this._cableConnected.bind(this),\n received: this._cableReceived.bind(this),\n })\n }\n\n _cableConnected() {\n console.log(`Connected to all chats`)\n }\n\n _cableReceived(data) {\n const targetMes = this.lastMessagesTarget.querySelector(`[data-uuid='${data.uuid}'`)\n const parser = new DOMParser()\n const full = parser.parseFromString(data.message, \"text/html\")\n const message = full.querySelector(\"[data-action~='click->all-chats#showChat']\")\n const innerMessage = message.innerHTML\n const outerMessage = message.outerHTML\n if (targetMes) {\n targetMes.innerHTML = innerMessage\n } else {\n this.lastMessagesTarget.insertAdjacentHTML('afterbegin', outerMessage)\n }\n // TODO\n // this.scrollToBottom()\n }\n\n lazyAllMessages() {\n fetch('/user/messages')\n .then(response => response.json())\n .then(data => {\n document.body.insertAdjacentHTML('afterbegin', data.html)\n })\n }\n\n // action\n showChat(event) {\n fetch('/user/messages/open/' + event.currentTarget.dataset.uuid)\n .then(response => response.json())\n .then(data => {\n const parser = new DOMParser()\n const full = parser.parseFromString(data.html, \"text/html\")\n const chatWindow = full.querySelector(\"[data-controller~='chat']\")\n\n // insert only non duplicate windows\n if (!this.uuids || !this.uuids.includes(chatWindow.dataset.chatUuid)) {\n // 15 + 300 + 15 (+ 15 + 300)\n chatWindow.style.right = `${330 + 315 * this.userchatTargets.length}px`\n document.body.prepend(chatWindow)\n }\n })\n }\n\n // action from custom event\n // moving other windows\n // TODO: prevent same order of windows\n moveChats() {\n for (let index = 0; index < this.userchatTargets.length; index++) {\n const element = this.userchatTargets[index]\n console.log(element)\n element.style.right = `${330 + 315 * index}px`\n }\n }\n\n get uuids() {\n let array = []\n for (let index = 0; index < this.userchatTargets.length; index++) {\n const element = this.userchatTargets[index];\n array.push(element.dataset.chatUuid)\n }\n return array\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport {\n Core,\n // FileInput,\n Informer,\n ProgressBar,\n XHRUpload,\n ThumbnailGenerator\n} from 'uppy'\nimport '../src/css/modules/uppy.scss'\n\nexport default class extends Controller {\n static targets = [\n 'fileInput',\n 'hiddenField',\n 'progress',\n 'preview',\n 'actions',\n 'destroyField'\n ]\n\n connect() {\n this.uppy = Core({\n debug: true,\n autoProceed: true,\n allowMultipleUploads: false,\n restrictions: {\n allowedFileTypes: ['image/*', '.jpg', '.jpeg', '.png'],\n maxNumberOfFiles: 1,\n maxFileSize: 5242880,\n }\n })\n .use(XHRUpload, {\n endpoint: '/upload', // path to the upload endpoint\n limit: 4\n })\n .use(ProgressBar, {\n target: this.progressTarget,\n })\n .use(Informer, {\n target: this.element,\n })\n .use(ThumbnailGenerator, {\n thumbnailWidth: 200,\n thumbnailHeight: 200,\n thumbnailType: 'image/jpeg',\n waitForThumbnailsBeforeUpload: false\n })\n\n // if (this.hasReplaceFieldTarget) {\n // this.uppy.use(FileInput, {\n // target: this.replaceFieldTarget,\n // replaceTargetContent: true,\n // pretty: true,\n // locale: {\n // strings: {\n // chooseFiles: this.data.get('saved') === 'true' ? 'Change your photo' : 'Upload your photo'\n // }\n // }\n // })\n // }\n\n this.customInput()\n\n uppy.on('thumbnail:generated', (file, preview) => {\n this.previewTarget.querySelector('img').src = preview\n })\n\n uppy.on('upload-success', (file, response) => {\n // retrieve uploaded file data\n const uploadedFileData = response.body['data']\n this.hiddenFieldTarget.value = JSON.stringify(uploadedFileData)\n })\n\n }\n\n customInput() {\n this.fileInputTarget.addEventListener('change', (event) => {\n const files = Array.from(event.target.files)\n\n files.forEach((file) => {\n try {\n this.uppy.addFile({\n source: 'file input',\n name: file.name,\n type: file.type,\n data: file\n })\n } catch (err) {\n if (err.isRestriction) {\n // handle restrictions\n console.log('Restriction error:', err)\n } else {\n // handle other errors\n console.error(err)\n }\n }\n })\n })\n\n // it’s probably a good idea to clear the ``\n // after the upload or when the file was removed\n // (see https://github.com/transloadit/uppy/issues/2640#issuecomment-731034781)\n this.uppy.on('file-removed', () => {\n this.fileInputTarget.value = null\n })\n\n this.uppy.on('complete', () => {\n this.fileInputTarget.value = null\n })\n\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport consumer from \"../channels/consumer\"\nimport { headers } from '../src/js/csrf'\n\nexport default class extends Controller {\n static targets = [ 'messages', 'input', 'userchat' ]\n\n connect() {\n // don't do on Chat with me button\n if (!this.element.classList.contains('chatme')) {\n this.uuid = this.data.get('uuid')\n // scroll down after opening\n this.scrollToBottom()\n \n consumer.subscriptions.create({\n channel: \"ChatChannel\",\n uuid: this.uuid\n }, {\n connected: this._cableConnected.bind(this),\n received: this._cableReceived.bind(this),\n })\n }\n }\n\n scrollToBottom() {\n const list = this.messagesTarget\n // scrollTop: amount of scroll user has done\n // scrollHeight: total container size\n list.scrollTop = list.scrollHeight\n }\n\n // action\n startChat(element) {\n console.log('startChat clicked')\n fetch('/user/messages/new?id=' + element.currentTarget.dataset.userId)\n .then(response => response.json())\n .then(data => {\n // document.body.insertAdjacentHTML('afterbegin', data.html)\n\n const parser = new DOMParser()\n const full = parser.parseFromString(data.html, \"text/html\")\n const chatWindow = full.querySelector(\"[data-controller~='chat']\")\n\n // insert only non duplicate windows\n if (!this.uuids || !this.uuids.includes(chatWindow.dataset.chatUuid)) {\n // 15 + 300 + 15 (+ 15 + 300)\n chatWindow.style.right = `${330 + 315 * this.userchatTargets.length}px`\n document.body.insertAdjacentHTML('afterbegin', chatWindow.outerHTML)\n }\n })\n }\n\n _cableConnected() {\n console.log(`Connected to chat_channel:${this.uuid}`)\n }\n\n _cableReceived(data) {\n // prevent duplication\n // own message attached from fetch response, not websockets\n if (data.to_user_id != this.data.get('toUserId')) {\n this.messagesTarget.insertAdjacentHTML('beforeend', data.message)\n this.scrollToBottom()\n }\n }\n\n // action\n sendMessage() {\n const toUserId = this.data.get('toUserId')\n const content = this.inputTarget.value\n\n // only non empty content\n if (content.length !== 0) {\n fetch('/user/messages', {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({\n message: {\n uuid: this.uuid,\n to_user_id: toUserId,\n content: content,\n }\n })\n }).then(response => {\n if (!response.ok) {\n response.json().then(json => { throw json }) // throwing to catch block\n }\n return response.json() // we only get here if there is no error\n }).then(res => {\n this.inputTarget.value = ''\n this.messagesTarget.insertAdjacentHTML('beforeend', res.html)\n }).catch(err => console.error('we got an error: ', err))\n }\n }\n\n // action\n // can send a message with [Enter]\n // or insert new line with [Cmd/Ctrl + Enter]\n handleInputKeys(event) {\n if (event.code == \"Enter\") {\n event.preventDefault()\n // event object destructuring\n const { altKey, ctrlKey, metaKey, shiftKey } = event\n const withModifier = altKey || shiftKey || (this.isMac ? metaKey : ctrlKey)\n if (withModifier) {\n this.handleLineBreak()\n } else {\n this.sendMessage()\n };\n }\n }\n\n handleLineBreak() {\n this.inputTarget.value = `${this.inputTarget.value}\\n`\n }\n\n get isMac() {\n return navigator.platform.match(/Mac/) != null\n }\n\n get uuids() {\n let array = []\n for (let index = 0; index < this.userchatTargets.length; index++) {\n const element = this.userchatTargets[index];\n array.push(element.dataset.chatUuid)\n }\n return array\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport {\n Core,\n FileInput,\n Informer,\n ProgressBar,\n XHRUpload,\n} from 'uppy'\nimport '../src/css/modules/uppy.scss'\n\nexport default class extends Controller {\n static targets = [\n 'replaceField',\n 'hiddenField',\n 'progress',\n 'destroyField',\n ]\n\n connect() {\n const uppy = Core({\n debug: true,\n autoProceed: true,\n allowMultipleUploads: false,\n restrictions: {\n allowedFileTypes: ['.pdf'],\n maxNumberOfFiles: 1,\n maxFileSize: 3145728,\n }\n })\n .use(XHRUpload, {\n endpoint: '/upload', // path to the upload endpoint\n limit: 10\n })\n .use(ProgressBar, {\n target: this.progressTarget,\n })\n .use(Informer, {\n target: this.element,\n })\n\n if (this.hasReplaceFieldTarget) {\n uppy.use(FileInput, {\n target: this.replaceFieldTarget,\n replaceTargetContent: true,\n pretty: true,\n locale: {\n strings: {\n chooseFiles: this.data.get('saved') ? 'Change your resume' : 'Upload your resume'\n }\n }\n })\n }\n\n uppy.on('upload-success', (file, response) => {\n // retrieve uploaded file data\n const uploadedFileData = response.body['data']\n this.hiddenFieldTarget.value = JSON.stringify(uploadedFileData)\n })\n\n }\n\n // action\n deleteResume(event) {\n if (confirm('Are you sure?')) {\n this.destroyFieldTarget.value = 'true'\n }\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport {\n Core,\n FileInput,\n Informer,\n ProgressBar,\n XHRUpload,\n ThumbnailGenerator\n} from 'uppy'\nimport '../src/css/modules/uppy.scss'\n\nexport default class extends Controller {\n static targets = [\n 'replaceField',\n 'hiddenField',\n 'progress',\n 'preview',\n 'actions',\n 'destroyField'\n ]\n\n connect() {\n const uppy = Core({\n debug: true,\n autoProceed: true,\n allowMultipleUploads: false,\n restrictions: {\n allowedFileTypes: ['image/*', '.jpg', '.jpeg', '.png', '.gif'],\n maxNumberOfFiles: 1,\n maxFileSize: 5242880,\n }\n })\n .use(XHRUpload, {\n endpoint: '/upload', // path to the upload endpoint\n limit: 4\n })\n .use(ProgressBar, {\n target: this.progressTarget,\n })\n .use(Informer, {\n target: this.element,\n })\n .use(ThumbnailGenerator, {\n thumbnailWidth: 200,\n thumbnailHeight: 200,\n thumbnailType: 'image/jpeg',\n waitForThumbnailsBeforeUpload: false\n })\n\n if (this.hasReplaceFieldTarget) {\n uppy.use(FileInput, {\n target: this.replaceFieldTarget,\n replaceTargetContent: true,\n pretty: true,\n locale: {\n strings: {\n chooseFiles: this.data.get('saved') === 'true' ? 'Change studio image' : 'Add studio image'\n }\n }\n })\n }\n\n uppy.on('thumbnail:generated', (file, preview) => {\n this.previewTarget.src = preview\n })\n\n uppy.on('upload-success', (file, response) => {\n // retrieve uploaded file data\n const uploadedFileData = response.body['data']\n this.hiddenFieldTarget.value = JSON.stringify(uploadedFileData)\n })\n\n }\n\n // action\n deleteStudioImage(event) {\n if (confirm('Are you sure?')) {\n this.destroyFieldTarget.value = 'true'\n this.previewTarget.style.opacity = '.3'\n }\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport {\n Core,\n FileInput,\n Informer,\n ProgressBar,\n XHRUpload,\n} from 'uppy'\nimport { headers } from '../src/js/csrf'\nimport '../src/css/modules/uppy.scss'\n\nexport default class extends Controller {\n static targets = [\n 'replaceField',\n 'hiddenField',\n 'preview',\n 'languageField',\n 'categoryField',\n 'uuidField',\n 'progress',\n 'audioTemplate'\n ]\n\n connect() {\n const uppy = Core({\n debug: true,\n autoProceed: true,\n allowMultipleUploads: false,\n restrictions: {\n allowedFileTypes: ['audio/*', '.mp3', '.wav', '.aac', '.m4a'],\n maxNumberOfFiles: 1,\n maxFileSize: 10485760,\n }\n })\n .use(XHRUpload, {\n endpoint: '/upload', // path to the upload endpoint\n limit: 10\n })\n .use(ProgressBar, {\n target: this.progressTarget,\n })\n .use(Informer, {\n target: this.element,\n })\n\n if (this.hasReplaceFieldTarget) {\n uppy.use(FileInput, {\n target: this.replaceFieldTarget,\n replaceTargetContent: true,\n pretty: true,\n locale: {\n strings: {\n chooseFiles: 'Upload your audio sample'\n }\n }\n })\n }\n\n uppy.on('upload-success', (file, response) => {\n // retrieve uploaded file data\n const uploadedFileData = response.body['data']\n const path = response.body['url']\n this.attachData(uploadedFileData, path)\n })\n }\n\n attachData(uploadedFileData, path) {\n // take template for audio wave and append uploaded file\n this.replaceFieldTarget.classList.add('d-none')\n this.previewTarget.innerHTML = this.audioTemplateTarget.innerHTML.replace(/WavePath/g, path)\n // append data to hidden form field\n this.hiddenFieldTarget.value = JSON.stringify(uploadedFileData)\n }\n\n // action\n deleteSample(event) {\n const uuid = event.currentTarget.dataset.uppyUuid\n\n fetch(this.data.get('createPath') + '/' + uuid, {\n method: 'DELETE',\n headers: headers,\n }).then(res => {\n this.replaceFieldTarget.classList.remove('d-none')\n this.previewTarget.innerHTML = null\n }).catch(error => console.error(\"we got an error:\", error))\n }\n\n // action\n changeSample(event) {\n event.preventDefault()\n alert('Temporary disabled')\n }\n\n}\n","import { Controller } from \"stimulus\"\nimport WaveSurfer from 'wavesurfer.js'\nimport '../src/css/modules/wave.css'\n\nexport default class extends Controller {\n static targets = [ 'waveform', 'playIcon', 'pauseIcon' ]\n\n connect() {\n if (this.hasWaveformTarget) {\n this.wavesurfer = WaveSurfer.create({\n container: this.waveformTarget,\n height: 40,\n responsive: true,\n waveColor: '#414141',\n progressColor: '#3F99BB',\n })\n this.wavesurfer.load(this.waveformTarget.dataset.wavePath)\n // temp solution to redraw waveform\n // waveform can't be drawed on hidden element\n // better to use wavesurfer.drawBuffer() on tab\n setInterval(() => {\n // window.dispatchEvent(new Event('resize'))\n this.wavesurfer.drawBuffer()\n }, 3000)\n }\n // custom event emitted to pause other instances\n this.wavesurfer.on('play', () => {\n const eventPlay = new CustomEvent('wave:play', {detail: this.element})\n window.dispatchEvent(eventPlay)\n })\n\n }\n\n // action\n play() {\n this.wavesurfer.playPause()\n this.playIconTarget.classList.toggle('d-none')\n this.pauseIconTarget.classList.toggle('d-none')\n }\n\n // action\n toPause() {\n this.playIconTarget.classList.remove('d-none')\n this.pauseIconTarget.classList.add('d-none')\n }\n\n // action from custom event\n globalPause(event) {\n if (event.detail !== this.element) {\n this.wavesurfer.pause()\n this.toPause()\n }\n }\n\n}\n","// here we will import all needed icons\nimport { library, dom } from '@fortawesome/fontawesome-svg-core'\n\nimport {\n faGlobe,\n faChevronDown,\n faChevronUp,\n faTimes,\n faPlay,\n faPause,\n} from '@fortawesome/free-solid-svg-icons'\n\nimport {\n faComments,\n} from '@fortawesome/free-regular-svg-icons'\n\nimport { faYoutube } from '@fortawesome/free-brands-svg-icons'\n\n// We are only using the user-astronaut icon\nlibrary.add(\n faGlobe,\n faComments,\n faYoutube,\n faChevronDown,\n faChevronUp,\n faTimes,\n faPlay,\n faPause,\n)\n\n// Replace any existing tags with and set up a MutationObserver to\n// continue doing this as the DOM changes.\ndom.watch()\n","// Load all the controllers within this directory and all subdirectories. \n// Controller files must be named *_controller.js.\n\nimport { Application } from \"stimulus\"\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\"\n\nconst application = Application.start()\nconst context = require.context(\"controllers\", true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))\n","/* eslint no-console:0 */\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// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\n// recommended by webpacker\nimport 'core-js/stable' \nimport 'regenerator-runtime/runtime'\n\n// js\n// imported fontawesome icons\nimport '../src/js/fontawesome_imports'\n\n// css\nconst requireAll = require.context('../src/css/autoload', false, /\\.(css|scss|sass)$/)\nrequireAll.keys().forEach(requireAll)\n\n// stimulus js\nimport \"controllers\"\n","// learn.javascript.ru/cookie\n\n// returning cookie with the name\n// or undefined, if nothing found\nexport function getCookie(name) {\n let matches = document.cookie.match(new RegExp(\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n}\n\n// example:\n// setCookie('user', 'John', {secure: true, 'max-age': 3600})\nexport function setCookie(name, value, options = {}) {\n\n options = {\n path: '/',\n // you can add any other variables\n ...options\n };\n\n if (options.expires instanceof Date) {\n options.expires = options.expires.toUTCString();\n }\n\n let updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\n for (let optionKey in options) {\n updatedCookie += \"; \" + optionKey;\n let optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += \"=\" + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n}\n\nexport function deleteCookie(name) {\n setCookie(name, \"\", {\n 'max-age': -1\n })\n}\n","import { Controller } from \"stimulus\"\nimport { setCookie } from '../src/js/cookie'\n\nexport default class extends Controller {\n\n // action\n toggleChat(event) {\n const list = event.currentTarget.closest('.userchat').querySelector('.userchat__collapsible')\n list.classList.toggle('userchat__collapsible_min')\n const up = event.currentTarget.querySelector('.fa-chevron-up')\n const down = event.currentTarget.querySelector('.fa-chevron-down')\n up.classList.toggle('d-none')\n down.classList.toggle('d-none')\n\n if (list.classList.contains('userchat__collapsible_min')) {\n setCookie('allChatOpen', '0')\n } else {\n setCookie('allChatOpen', '1')\n }\n\n }\n\n // action\n closeChat(event) {\n event.currentTarget.closest('.userchat').remove()\n const closeEvent = new CustomEvent('chat:close')\n window.dispatchEvent(closeEvent)\n }\n\n}\n"],"sourceRoot":""}