{"version":3,"sources":["webpack:///./app/frontend/src/header.ts","webpack:///./app/frontend/src/theme.ts","webpack:///./app/frontend/src/notification.ts","webpack:///./app/frontend/src/util/csrf.ts","webpack:///./app/frontend/src/util/interaction.ts","webpack:///./app/frontend/src/cards.ts","webpack:///./app/frontend/src/likes.ts","webpack:///./app/frontend/src/tooltip.ts","webpack:///./app/frontend/src/infinite_scroll.ts","webpack:///./app/frontend/src/users.ts","webpack:///./app/frontend/src/registrations.ts","webpack:///./app/frontend/src/new_nweet_form.ts","webpack:///./app/frontend/src/flows/username.ts","webpack:///./app/frontend/src/flows.ts","webpack:///./app/frontend/explore.ts","webpack:///./app/frontend/packs/application.ts","webpack:///./app/frontend/src/recommend.ts","webpack:///./app/frontend/src/age_check.ts","webpack:///./app/frontend/src/settings.ts","webpack:///./app/frontend/src/toasts.ts","webpack:///./app/frontend/src/modal.ts","webpack:///./app/frontend/src/footer.ts","webpack:///./app/frontend/images/apple-touch-icon.png","webpack:///./app/frontend/images/icon_default.png","webpack:///./app/frontend/images/landing_background.png","webpack:///./app/frontend/images/logo_color.svg","webpack:///./app/frontend/images/logo_white.svg","webpack:///./app/frontend/images/logomark_color.svg","webpack:///./app/frontend/images/og_image_default.png","webpack:///./app/frontend/images sync ^\\.\\/.*$","webpack:///./app/frontend/images/favicon.ico","webpack:///./app/frontend/images/landing_background.webp"],"names":["setUserHeaderButtons","topButton","document","getElementById","addEventListener","event","preventDefault","body","scrollIntoView","behavior","block","setTopButton","_icon$classList","activeModeDetector","pageNavMode","getAttribute","icon","concat","classList","add","setNavButton","setTheme","themeSetting","theme","localStorage","getItem","window","matchMedia","matches","setAttribute","setBodyTheme","gtag","preferred_theme","setGTagTheme","fetchNotificationCount","fetch","then","response","text","unreadCount","parseInt","badgeDiv","textContent","toString","remove","extractCSRFToken","element","getElementsByName","item","HTMLMetaElement","Error","content","sendInteraction","eventType","nweetID","optionalAtributes","event_type","nweet","Object","keys","forEach","attribute","method","JSON","stringify","headers","extractInteractionOptionalAttributes","location","dataset","location_value","logic","logic_value","setCards","cards","getElementsByClassName","Array","from","card","HTMLElement","setCardGAs","setCardInteractions","id","getNweet","content_type","item_id","nweetDiv","closest","setLikeButtons","likeButtons","likeButton","HTMLAnchorElement","e","stopPropagation","href","toggleButtonMethod","isAlreadyLiked","contains","flash","replace","innerText","sendLikeInteraction","setTooltip","tooltips","length","slice","call","map","Tooltip","handleInfiniteScroll","scroll","morePostsUrl","URL","_i","_Object$entries","entries","_ref2","_slicedToArray","key","value","searchParams","set","mode","credentials","partial","container","parentElement","removeChild","insertAdjacentHTML","setInfiniteScroll","IntersectionObserver","_step","_iterator","_createForOfIteratorHelper","s","n","done","isIntersecting","err","f","root","rootMargin","threshold","observe","setUserInfoButtons","matchData","pathname","search","match","unescape","indexOf","followBtn","setUnfollowBtn","setToggleBtn","toggler","setGATags","btnSignUpTwitter","btnSignUpNuita","btnSignInTwitter","btnSignInNuita","reflectValidityToHTML","input","feedbackDiv","form","submitBtn","HTMLInputElement","disabled","checkValidity","validationMessage","validity","valid","setEmailInput","HTMLDivElement","email","data","res","status","message","setCustomValidity","setSignUpForm","signUpForm","HTMLFormElement","setPasswordInput","originalInput","confirmationInput","setPasswordConfirmationInput","setTextArea","textarea","HTMLTextAreaElement","innerWidth","rows","focus","count","setPrivacyForm","select","HTMLSelectElement","publicIcon","privateIcon","setDatetimeForm","prompt","undefined","dateInput","now","convertDateToDOMFormat","Date","minDate","setDate","getDate","max","min","date","setMinutes","getMinutes","getTimezoneOffset","toISOString","_regeneratorRuntime","t","r","prototype","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","h","l","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","resolve","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","setFlowSignUpUsernameForm","invalidMessageDiv","validate","formData","FormData","append","_ref","_callee","_context","arguments","apply","_next","_throw","_x","setSignUpCompleteGA","setPreferButton","preferBtn","toggle","setPromptStickiness","lastOffset","nowOffset","pageYOffset","require","Rails","start","Turbolinks","recommendButton","detector","itemName","elements","buttons","setFooterButtons","navbar","hideHeaderWhileScrolling","setInterval","intervalSec","console","error","setUserButtons","click","cookie","localStorageKey","str","currentSetting","toUpperCase","toLowerCase","setItem","setThemeForm","Toast","show","btn","target","modal","appendChild","navigator","serviceWorker","register","module","exports","webpackContext","req","webpackContextResolve","__webpack_require__","code"],"mappings":"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","file":"js/application-34008c484c569bc60b2f.chunk.js","sourcesContent":["// ロゴを押すとトップへ戻る\nexport function setUserHeaderButtons() {\n setTopButton();\n setNavButton();\n}\n\nfunction setTopButton() {\n const topButton = document.getElementById('navbarBrandIcon');\n if (topButton === null) {\n return;\n }\n\n topButton.addEventListener('click', (event): void => {\n event.preventDefault();\n document.body.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n });\n}\n\nfunction setNavButton() {\n const activeModeDetector = document.getElementById('activeModeDetector');\n const pageNavMode = activeModeDetector?.getAttribute('data-nav-mode');\n if (pageNavMode === null) {\n return;\n }\n\n const icon = document.getElementById(`userHeaderNav${pageNavMode}`);\n icon?.classList?.add('active');\n}\n\n// スクロール時にヘッダーが隠れる\nexport function hideHeaderWhileScrolling() {\n if (window.innerWidth >= 992) {\n return;\n }\n\n const navbar = document.getElementById(\"NavbarScrollable\");\n if (navbar === null) {\n return;\n }\n\n let lastOffset = 0;\n window.addEventListener(\"scroll\", () => {\n const nowOffset = window.pageYOffset;\n\n if (nowOffset > 0 && nowOffset >= lastOffset) {\n navbar.classList.add(\"navbar-faded-out\");\n } else {\n navbar.classList.remove(\"navbar-faded-out\");\n }\n\n lastOffset = nowOffset;\n });\n}\n","const getPreferredTheme = () => {\n const themeSetting = localStorage.getItem('preferredTheme');\n if (themeSetting === 'dark' || themeSetting === 'light') {\n return themeSetting;\n }\n\n const isDarkPreferred = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n return isDarkPreferred ? 'dark' : 'light';\n};\n\nconst setBodyTheme = (theme: string) => {\n document.body.setAttribute('data-theme', theme);\n};\n\nconst setGTagTheme = (theme: string) => {\n window.gtag('set', 'user_properties', {\n preferred_theme: theme,\n });\n};\n\nexport default function setTheme() {\n const theme = getPreferredTheme();\n\n setBodyTheme(theme);\n setGTagTheme(theme);\n}\n","function fetchNotificationCount(){\n fetch('/notification/refresh')\n .then((response) => {\n return response.text();\n })\n .then((response:string) => {\n let unreadCount:number = parseInt(response);\n let badgeDiv = document.getElementById(\"badgeUnreadNotifications\");\n\n badgeDiv.textContent = unreadCount.toString();\n if(unreadCount){\n badgeDiv.classList.remove(\"d-none\");\n }else{\n badgeDiv.classList.add(\"d-none\");\n }\n });\n}\n\nexport default function fetchNotification(){\n if(document.getElementById(\"badgeUnreadNotifications\")){\n const intervalSec:number = 30;\n fetchNotificationCount();\n setInterval(fetchNotificationCount, intervalSec * 1000);\n }\n};\n","export function extractCSRFToken() {\n const element = document.getElementsByName('csrf-token').item(0);\n if (!(element instanceof HTMLMetaElement)) {\n throw new Error('Cannot retrieve CSRF token');\n }\n\n return element.content;\n}\n","import { extractCSRFToken } from \"./csrf\";\n\ntype InteractionEventType = \"click\" | \"like\";\n\ntype InteractionOptionalAttributes = {\n location: string|null;\n location_value: string|null;\n logic: string|null;\n logic_value: string|null;\n};\n\nexport const sendInteraction = (eventType: InteractionEventType, nweetID: number, optionalAtributes: InteractionOptionalAttributes) => {\n const body = {\n event_type: eventType,\n nweet: nweetID\n }\n\n Object.keys(optionalAtributes).forEach(attribute => {\n body[attribute] = optionalAtributes[attribute];\n });\n\n fetch('/api/v1/interactions', {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': extractCSRFToken(),\n },\n });\n};\n\nexport const extractInteractionOptionalAttributes = (element: HTMLElement): InteractionOptionalAttributes => {\n return {\n location: element.dataset.location,\n location_value: element.dataset.location_value,\n logic: element.dataset.logic,\n logic_value: element.dataset.logic_value,\n };\n};\n","import { extractInteractionOptionalAttributes, sendInteraction } from './util/interaction';\n\nexport function setCards() {\n const cards = document.getElementsByClassName('nweet-card');\n if (!cards) {\n return;\n }\n\n Array.from(cards).forEach(card => {\n if (card.getAttribute('data-js-set') || ! (card instanceof HTMLElement)) {\n return;\n }\n\n setCardGAs(card);\n setCardInteractions(card);\n\n // イベントの多重登録を避けるため、一度登録が完了したらdata属性を付与する\n card.setAttribute('data-js-set', 'true');\n });\n}\n\nconst setCardGAs = (card: HTMLElement) => {\n const nweetDiv = getNweet(card);\n const id = nweetDiv.dataset.id;\n\n card.addEventListener('click', () => {\n if (!window.gtag) {\n return;\n }\n\n window.gtag('event', 'select_content', {\n content_type: 'link',\n item_id: id,\n });\n });\n};\n\nconst setCardInteractions = (card: HTMLElement) => {\n const nweetDiv = getNweet(card);\n\n card.addEventListener('click', () => {\n const id = parseInt(nweetDiv.dataset.id);\n const optionalAtributes = extractInteractionOptionalAttributes(nweetDiv);\n sendInteraction('click', id, optionalAtributes);\n });\n}\n\nconst getNweet = (card: HTMLElement): HTMLElement => {\n const nweetDiv = card.closest('.semantic-nweet');\n if (!(nweetDiv instanceof HTMLElement)) {\n return;\n }\n\n return nweetDiv;\n}\n","import { extractCSRFToken } from './util/csrf'\nimport { extractInteractionOptionalAttributes, sendInteraction } from './util/interaction';\n\nexport function setLikeButtons() {\n const likeButtons = document.getElementsByClassName('btn-like');\n if (!likeButtons) {\n return;\n }\n\n Array.from(likeButtons).forEach(likeButton => {\n if (!(likeButton instanceof HTMLAnchorElement)) {\n return;\n }\n \n if (likeButton.dataset['event_set']) {\n return;\n }\n \n likeButton.addEventListener('click', (e) => {\n // リクエストを送ったあとにmethodが変わることを確実にするため、railsの代わりに自前で非同期処理を行う\n e.preventDefault();\n e.stopPropagation();\n\n fetch(likeButton.href, {\n method: likeButton.dataset.method,\n headers: {\n 'X-CSRF-Token': extractCSRFToken(),\n }\n }).then(() => {\n toggleButtonMethod(likeButton);\n });\n\n // リクエストの内容に影響のない見た目の変更はリクエスト完了を待たずに行う\n const isAlreadyLiked = likeButton.classList.contains('liked');\n const icon = document.getElementById(`${likeButton.id}Icon`);\n const flash = document.getElementById(`${likeButton.id}Flash`);\n\n if (isAlreadyLiked) {\n likeButton.classList.replace('liked', 'btn-no-outline');\n icon.classList.replace('bi-heart-fill', 'bi-heart');\n flash.innerText = 'いいねを解除しました。';\n flash.classList.remove('liked');\n } else {\n likeButton.classList.replace('btn-no-outline', 'liked');\n icon.classList.replace('bi-heart', 'bi-heart-fill');\n flash.innerText = 'いいねしました!'\n flash.classList.add('liked');\n sendLikeInteraction(likeButton);\n }\n });\n\n likeButton.dataset['event_set'] = 'true';\n });\n}\n\nconst sendLikeInteraction = (likeButton: HTMLAnchorElement) => {\n const nweetDiv = likeButton.closest('.semantic-nweet');\n if (!(nweetDiv instanceof HTMLElement)) {\n return;\n }\n const id = parseInt(nweetDiv.dataset.id);\n const optionalAtributes = extractInteractionOptionalAttributes(nweetDiv);\n\n sendInteraction('like', id, optionalAtributes);\n}\n\nconst toggleButtonMethod = (likeButton: HTMLAnchorElement) => {\n switch (likeButton.dataset.method) {\n case 'post':\n likeButton.dataset.method = 'delete';\n break;\n case 'delete':\n likeButton.dataset.method = 'post';\n break;\n }\n}\n","import { Tooltip } from 'bootstrap';\n\nexport default function setTooltip() {\n const tooltips = document.getElementsByClassName('has-tooltip');\n if (tooltips.length == 0) {\n return;\n }\n\n const tooltipTriggerList = [].slice.call(tooltips);\n return tooltipTriggerList.map((e) => {\n return new Tooltip(e);\n });\n}\n","import { setCards } from \"./cards\";\nimport { setLikeButtons } from \"./likes\";\nimport setTooltip from \"./tooltip\";\n\nfunction handleInfiniteScroll(scroll: HTMLElement) {\n let morePostsUrl = new URL(location.href);\n\n // #infiniteScrollContainerのdata属性をクエリに乗せる\n for (const [key, value] of Object.entries(scroll.dataset)) {\n morePostsUrl.searchParams.set(key, value)\n }\n\n const fetchOptions: RequestInit = {\n method: 'GET',\n mode: 'same-origin',\n credentials: 'same-origin',\n headers: {\n 'X-Requested-With': 'XMLHttpRequest'\n }\n }\n\n fetch(morePostsUrl.href, fetchOptions).then((response) => {\n return response.text();\n }).then((partial: string) => {\n const container = scroll.parentElement\n container.removeChild(scroll);\n if (partial && partial != \"\") {\n container.insertAdjacentHTML('beforeend', partial);\n setInfiniteScroll();\n setTooltip();\n setCards();\n setLikeButtons();\n }\n });\n}\n\nexport default function setInfiniteScroll() {\n const scroll = document.getElementById('infiniteScrollContainer');\n\n if (scroll) {\n const observerOptions = {\n root: null,\n rootMargin: '240px',\n threshold: [1.0]\n };\n\n const observer = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n handleInfiniteScroll(scroll);\n }\n }, observerOptions);\n\n observer.observe(scroll);\n }\n}\n","export default function setUserInfoButtons() {\n /* 左カラムの/users/以下で白抜きになるボタンの設定 */\n var pathname: string = location.pathname;\n var element: HTMLElement;\n var matchData: string[]\n\n if (matchData = location.search.match(/\\d{4}%2F\\d{2}%2F\\d{2}/)) {\n element = document.getElementById('cal' + unescape(matchData[0]));\n } else {\n if (~pathname.indexOf('likes')) {\n element = document.getElementById('userInfoLikes');\n } else if (~pathname.indexOf('followers')) {\n element = document.getElementById('userInfoFollowers');\n } else if (~pathname.indexOf('followees')) {\n element = document.getElementById('userInfoFollowees');\n } else if (~pathname.indexOf('stats')) {\n element = document.getElementById('userInfoStats');\n } else if (~pathname.indexOf('users')) {\n element = document.getElementById('userInfoNweets');\n } else {\n element = null\n }\n }\n\n if (element) {\n element.classList.add('active');\n }\n\n setUnfollowBtn();\n}\n\nfunction setUnfollowBtn() {\n /* フォローボタンの設定 */\n const followBtn = document.getElementById('buttonUnfollow');\n if (followBtn === null) {\n return;\n }\n\n // i18nに対応できないのでどうにかする\n followBtn.addEventListener('click', () => {\n followBtn.innerText = 'フォローする';\n }, false);\n followBtn.addEventListener('mouseover', () => {\n followBtn.innerText = 'フォロー解除';\n }, false);\n followBtn.addEventListener('mouseout', () => {\n followBtn.innerText = 'フォロー中';\n }, false);\n\n}\n","import { extractCSRFToken } from \"./util/csrf\";\n\nexport function setRegistrationForm() {\n setToggleBtn();\n setGATags();\n setSignUpForm();\n}\n\nconst setToggleBtn = () => {\n const toggler = document.getElementById('registration-form-toggler');\n if (!toggler) {\n return;\n }\n\n toggler.addEventListener('click', (e) => {\n e.preventDefault();\n\n toggler.classList.add('d-none');\n });\n}\n\nconst setGATags = () => {\n const btnSignUpTwitter = document.getElementById('btnSignUpTwitter');\n const btnSignUpNuita = document.getElementById('btnSignUpNuita');\n const btnSignInTwitter = document.getElementById('btnSignInTwitter');\n const btnSignInNuita = document.getElementById('btnSignInNuita');\n\n if (!btnSignUpTwitter || !btnSignUpNuita || !btnSignInTwitter || !btnSignInNuita) {\n return;\n }\n\n btnSignUpTwitter.addEventListener('click', () => {\n window.gtag('event', 'sign_up', { method: \"Twitter\" });\n });\n\n btnSignUpNuita.addEventListener('click', () => {\n window.gtag('event', 'sign_up', { method: \"Nuita\" });\n });\n\n btnSignInTwitter.addEventListener('click', () => {\n window.gtag('event', 'login', { method: \"Twitter\" });\n });\n\n btnSignInNuita.addEventListener('click', () => {\n window.gtag('event', 'login', { method: \"Nuita\" });\n });\n}\n\nconst validateEmail = (email: string) => {\n const url = '/users/validate/email';\n const data = { email: email };\n\n return fetch(url, {\n method: 'PUT',\n body: JSON.stringify(data),\n headers: {\n 'X-CSRF-Token': extractCSRFToken(),\n 'Content-Type': 'application/json',\n }\n }).then(res => {\n const status = res.status;\n\n switch (status) {\n case 200:\n return '';\n case 409:\n return 'このメールアドレスは既に使われています';\n default:\n return 'メールアドレスの形式が不正です';\n }\n });\n}\n\nconst reflectValidityToHTML = (input: HTMLInputElement, feedbackDiv: HTMLDivElement, form: HTMLFormElement) => {\n const submitBtn = document.getElementById('nuitaSignUpFormSubmitBtn');\n if (!(submitBtn instanceof HTMLInputElement)) {\n throw new Error('has no submit button');\n }\n submitBtn.disabled = !form.checkValidity();\n\n feedbackDiv.innerText = input.validationMessage;\n \n if (input.validity.valid) {\n input.classList.add('is-valid');\n input.classList.remove('is-invalid');\n } else {\n input.classList.add('is-invalid');\n input.classList.remove('is-valid');\n }\n}\n\nconst setEmailInput = (form: HTMLFormElement) => {\n const input = document.getElementById('user_email');\n if (!(input instanceof HTMLInputElement)) {\n return;\n }\n\n const feedbackDiv = document.getElementById('invalidFeedbackEmail');\n if (!(feedbackDiv instanceof HTMLDivElement)) {\n throw new Error('has no feedback element');\n }\n\n input.addEventListener('change', () => {\n validateEmail(input.value).then(message => {\n input.setCustomValidity(message);\n reflectValidityToHTML(input, feedbackDiv, form);\n });\n });\n}\n\nconst setPasswordInput = (form: HTMLFormElement) => {\n const input = document.getElementById('user_password');\n if (!(input instanceof HTMLInputElement)) {\n return;\n }\n\n const feedbackDiv = document.getElementById('invalidFeedbackPassword');\n if (!(feedbackDiv instanceof HTMLDivElement)) {\n throw new Error('has no feedback element');\n }\n\n input.addEventListener('input', () => {\n reflectValidityToHTML(input, feedbackDiv, form);\n });\n}\n\nconst setPasswordConfirmationInput = (form: HTMLFormElement) => {\n const originalInput = document.getElementById('user_password');\n if (!(originalInput instanceof HTMLInputElement)) {\n return;\n }\n\n const confirmationInput = document.getElementById('user_password_confirmation');\n if (!(confirmationInput instanceof HTMLInputElement)) {\n return;\n }\n\n const feedbackDiv = document.getElementById('invalidFeedbackPasswordConfirmation');\n if (!(feedbackDiv instanceof HTMLDivElement)) {\n throw new Error('has no feedback element');\n }\n\n confirmationInput.addEventListener('input', () => {\n if (confirmationInput.value !== originalInput.value) {\n confirmationInput.setCustomValidity('パスワードが一致していません');\n } else {\n confirmationInput.setCustomValidity('');\n }\n\n reflectValidityToHTML(confirmationInput, feedbackDiv, form);\n });\n}\n\nconst setSignUpForm = () => {\n const signUpForm = document.getElementById('nuitaSignUpForm');\n if (!(signUpForm instanceof HTMLFormElement)) {\n return;\n }\n\n setEmailInput(signUpForm);\n setPasswordInput(signUpForm);\n setPasswordConfirmationInput(signUpForm);\n}\n","export function setNewNweetForm() {\n const form = document.getElementById('newNweetForm');\n if (!(form instanceof HTMLFormElement)) {\n return;\n }\n\n setTextArea();\n setPrivacyForm();\n setDatetimeForm();\n}\n\nconst setTextArea = () => {\n const textarea = document.getElementById('newNweetFormTextarea');\n if (textarea === null || !(textarea instanceof HTMLTextAreaElement)) {\n return;\n }\n\n if (window.innerWidth < 768) {\n textarea.rows = 4;\n textarea.focus();\n }\n\n textarea.addEventListener('input', () => {\n // ↓絵文字に配慮したコード。textboxの仕様を変えられたら使う\n // const count = [...textarea.value].length.toString();\n const count = textarea.value.length.toString();\n\n const lengthCountDiv = document.getElementById('nweetFormBottomTextLengthCount');\n lengthCountDiv.innerText = count;\n });\n}\n\nconst setPrivacyForm = () => {\n const select = document.getElementById('newNweetPrivacyFormSelect');\n if (select === null || !(select instanceof HTMLSelectElement)) {\n return;\n }\n\n const publicIcon = document.getElementById('newNweetPrivacyFormPublicIcon');\n const privateIcon = document.getElementById('newNweetPrivacyFormPrivateIcon');\n if (publicIcon === null || privateIcon === null) {\n return;\n }\n\n select.addEventListener('change', () => {\n switch (select.value) {\n case 'public':\n publicIcon.classList.remove('d-none');\n privateIcon.classList.add('d-none');\n break;\n case 'private':\n publicIcon.classList.add('d-none');\n privateIcon.classList.remove('d-none');\n break;\n default:\n break;\n }\n });\n}\n\nconst setDatetimeForm = () => {\n const prompt = document.getElementById('newNweetDatetimePrompt');\n if (prompt === null || prompt === undefined) {\n return;\n }\n\n const form = document.getElementById('newNweetDatetimeFormWrapper');\n const dateInput = document.getElementById('newNweetDatetimeFormInput');\n\n prompt.addEventListener('click', (e) => {\n e.preventDefault();\n\n const now = convertDateToDOMFormat(new Date());\n\n // ugly but effective https://stackoverflow.com/a/31665235\n const minDate = new Date(new Date().setDate(new Date().getDate() - 30));\n\n dateInput.value = now;\n dateInput.max = now;\n dateInput.min = convertDateToDOMFormat(minDate);\n\n form.classList.remove('d-none');\n prompt.classList.add('d-none');\n });\n\n const closeButton = document.getElementById('newNweetDatetimeFormCloseBtn');\n closeButton.addEventListener('click', (e) => {\n e.preventDefault();\n\n dateInput.value = null;\n dateInput.max = null;\n dateInput.min = null;\n prompt.classList.remove('d-none');\n form.classList.add('d-none');\n });\n};\n\nconst convertDateToDOMFormat = (date: Date) => {\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n return date.toISOString().slice(0, 16);\n}\n","import { extractCSRFToken } from \"../util/csrf\";\n\nexport const setFlowSignUpUsernameForm = () => {\n const input = document.getElementById('signUpUsernameFormInput');\n if (input === null || !(input instanceof HTMLInputElement)) {\n return;\n }\n\n const form = document.getElementById('signUpUsernameForm');\n if (form === null || !(form instanceof HTMLFormElement)) {\n return;\n }\n\n const invalidMessageDiv = document.getElementById('signUpUsernameInvalidFeedback');\n if (invalidMessageDiv === null || !(invalidMessageDiv instanceof HTMLDivElement)) {\n return;\n }\n\n const submitBtn = document.getElementById('signUpUsernameFormSubmitBtn');\n if (submitBtn === null || !(submitBtn instanceof HTMLInputElement)) {\n return;\n }\n\n const setCustomValidity = (message: string) => {\n input.setCustomValidity(message);\n invalidMessageDiv.innerText = message;\n submitBtn.disabled = message !== '';\n }\n\n const validate = () => {\n const url = `/flows/sign_up/username/validate`;\n const formData = new FormData();\n formData.append('screen_name', input.value);\n\n fetch(url, {\n method: 'PUT',\n body: formData,\n headers: {\n 'X-CSRF-Token': extractCSRFToken(),\n }\n }).then(async res => {\n const status = res.status;\n\n form.classList.add('was-validated');\n if (status === 200) {\n setCustomValidity('');\n } else {\n setCustomValidity('このIDは既に使われています');\n }\n });\n }\n\n input.addEventListener('change', (e) => {\n validate();\n });\n\n if (input.value !== '') {\n validate();\n }\n}\n","import { setFlowSignUpUsernameForm } from './flows/username';\n\nexport function setFlows() {\n setFlowSignUpUsernameForm();\n setSignUpCompleteGA();\n}\n\n// サインアップの完了イベントを収集する。新規登録フローの完了が条件\nconst setSignUpCompleteGA = () => {\n const submitBtn = document.getElementById('signUpUsernameFormSubmitBtn');\n if (submitBtn === null || !(submitBtn instanceof HTMLInputElement)) {\n return;\n }\n\n const method = submitBtn.getAttribute('data-method');\n\n submitBtn.addEventListener('click', () => {\n window.gtag('event', 'sign_up_complete', { method: method });\n });\n};\n","export const setExplorePrompt = () => {\n setPromptStickiness();\n setPreferButton();\n};\n\nconst setPreferButton = () => {\n const preferBtn = document.getElementById('explorePreferButton');\n if (!(preferBtn instanceof HTMLAnchorElement)) {\n return;\n }\n\n preferBtn.addEventListener('click', () => {\n const currentMethod = preferBtn.dataset['method'];\n switch (currentMethod) {\n // 現在は新規フォローボタン→クリック後はフォロー解除ボタンへ\n case 'post':\n preferBtn.innerText = 'このタグをフォロー中';\n preferBtn.dataset['method'] = 'delete';\n break;\n case 'delete':\n preferBtn.innerText = 'このタグをフォローする';\n preferBtn.dataset['method'] = 'post';\n break;\n }\n\n preferBtn.classList.toggle('btn-primary');\n preferBtn.classList.toggle('btn-outline-primary');\n });\n\n preferBtn.addEventListener('mouseover', () => {\n if (preferBtn.dataset['method'] !== 'delete') {\n return;\n }\n\n preferBtn.innerText = 'このタグのフォローを解除';\n });\n\n preferBtn.addEventListener('mouseout', () => {\n if (preferBtn.dataset['method'] !== 'delete') {\n return;\n }\n\n preferBtn.innerText = 'このタグをフォロー中';\n });\n}\n\nconst setPromptStickiness = () => {\n const prompt = document.getElementById('explorePrompt');\n if (!(prompt instanceof HTMLDivElement)) {\n return;\n }\n\n let lastOffset = 0;\n window.addEventListener('scroll', () => {\n const nowOffset = window.pageYOffset;\n\n const isHeaderInvisible = window.innerWidth < 992 && nowOffset >= lastOffset;\n if (isHeaderInvisible) {\n prompt.classList.add('header-invisible');\n } else {\n prompt.classList.remove('header-invisible');\n }\n\n lastOffset = nowOffset;\n });\n}\n","import \"core-js/stable\";\nimport \"regenerator-runtime/runtime\";\nimport Rails from \"rails-ujs\";\nimport Turbolinks from \"turbolinks\";\n\nimport { Tooltip, Toast, Popover, Dropdown } from 'bootstrap';\n\nimport { setUserHeaderButtons, hideHeaderWhileScrolling } from \"../src/header\";\nimport { setFooterButtons } from \"../src/footer\";\nimport setTheme from \"../src/theme\";\nimport fetchNotification from \"../src/notification\";\nimport setRecommendButton from \"../src/recommend\";\nimport setInfiniteScroll from \"../src/infinite_scroll\";\nimport setUserButtons from \"../src/users\";\nimport setTooltip from \"../src/tooltip\";\nimport { setAgeCheckModal } from \"../src/age_check\";\nimport { setRegistrationForm } from \"../src/registrations\";\nimport { setNewNweetForm } from \"../src/new_nweet_form\";\nimport { setSettingsMenu, setNewPasswordForm, setThemeForm } from \"../src/settings\";\nimport { setToasts } from \"../src/toasts\";\nimport { setTagsModal } from \"../src/modal\";\nimport { setCards } from \"../src/cards\";\nimport { setFlows } from \"../src/flows\";\nimport { setLikeButtons } from \"../src/likes\";\nimport { setExplorePrompt } from \"explore\";\n\nimport \"../css/application.scss\";\n\nrequire.context('../images', true);\n\nRails.start();\nTurbolinks.start();\n\nwindow.addEventListener(\"turbolinks:load\", (event) => {\n setTheme();\n setUserHeaderButtons();\n setFooterButtons();\n hideHeaderWhileScrolling();\n fetchNotification();\n setRecommendButton();\n setInfiniteScroll();\n setUserButtons();\n setLikeButtons();\n setAgeCheckModal();\n setRegistrationForm();\n setTooltip();\n setNewNweetForm();\n setSettingsMenu();\n setThemeForm();\n setToasts();\n setTagsModal();\n setCards();\n setNewPasswordForm();\n setFlows();\n setExplorePrompt();\n});\n\nwindow.addEventListener(\"load\", () => {\n navigator.serviceWorker.register('/serviceworker.js');\n});\n","export default function setRecommendButton() {\n const recommendButton = document.getElementById(\"buttonRenewRecommend\");\n if (recommendButton === null) {\n return;\n }\n\n recommendButton.addEventListener(\"click\", () => {\n fetch('/nweets/recommend')\n .then((response) => {\n return response.text();\n })\n .then((partial: string) => {\n const card = document.getElementById(\"recommendCard\");\n card.textContent = \"\";\n card.insertAdjacentHTML(\"afterbegin\", partial);\n }).catch((e) => {\n console.error(e);\n });\n });\n}\n","export function setAgeCheckModal() {\n const element = document.getElementById('toggleAgeCheckModalBtn');\n if (element == null) {\n return;\n }\n\n element.click();\n\n const btn = document.getElementById('setAgeCheckedBtn');\n btn.addEventListener('click', () => {\n const maxAge = 60 * 60 * 24 * 365 * 10;\n document.cookie = `age_checked=true; path=/; max-age=${maxAge}`;\n });\n}\n","import setTheme from \"./theme\";\n\nexport function setSettingsMenu() {\n const detector = document.getElementById('activeModeDetector');\n const itemName = detector?.getAttribute('data-settings-item');\n if (!itemName) {\n return;\n }\n\n const element = document.getElementById(`settingsItem${itemName}`);\n element.classList.add('active');\n}\n\nexport function setNewPasswordForm() {\n const toggler = document.getElementById('toggleNewPasswordInput');\n if (!toggler || !(toggler instanceof HTMLAnchorElement)) {\n return;\n }\n\n toggler.addEventListener('click', (e) => {\n e.preventDefault();\n\n const target = document.getElementById('newPasswordInput');\n\n if (target.classList.contains('d-none')) {\n toggler.innerText = 'パスワードを変更しない';\n } else {\n toggler.innerText = 'パスワードを変更する';\n }\n\n target.classList.toggle('d-none');\n });\n}\n\nconst capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n\nexport function setThemeForm() {\n const localStorageKey = 'preferredTheme';\n\n const select = document.getElementById('settingsThemeSelect');\n if (!select || !(select instanceof HTMLSelectElement)) {\n return;\n }\n\n const currentSetting = localStorage.getItem(localStorageKey);\n\n let option: HTMLElement;\n if (currentSetting === 'light' || currentSetting === 'dark') {\n option = document.getElementById(`settingsThemeSelect${capitalize(currentSetting)}`);\n } else {\n option = document.getElementById(`settingsThemeSelectDefault`);\n }\n option.setAttribute('selected', 'selected');\n\n select.addEventListener('change', () => {\n const value = select.value;\n\n localStorage.setItem(localStorageKey, value);\n setTheme();\n })\n}\n","import { Toast } from 'bootstrap';\n\nexport function setToasts() {\n const elements = document.getElementsByClassName(\"toast\");\n Array.from(elements).forEach((t) => {\n const toast = new Toast(t);\n toast.show();\n });\n}\n","// sidesectionのモーダルはposition: fixedの親要素の下にあるので、\n// モーダル表示時にだけbodyの直下にモーダル本体を移すことで問題に対処する\nexport function setTagsModal() {\n const buttons = document.getElementsByClassName('edit-modal-toggle-btn');\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener('click', () => {\n const target = btn.getAttribute('data-bs-target');\n const modal = document.getElementById(target.slice(1));\n\n document.body.appendChild(modal);\n });\n });\n}\n","// activeにする要素のIDを直接追加すればいいじゃんと思ったけど、\n// 同じページでactiveになる要素がnavbarとuser-footerの2つあったりするので、\n// あえて別々のコードベースでactive処理を行う(もっといい方法あるかも?)\nexport function setFooterButtons() {\n const activeModeDetector = document.getElementById('activeModeDetector');\n const pageNavMode = activeModeDetector?.getAttribute('data-nav-mode');\n if (pageNavMode === null) {\n return;\n }\n\n const icon = document.getElementById(`userFooterListItem${pageNavMode}`);\n icon?.classList?.add('active');\n}\n","module.exports = __webpack_public_path__ + \"media/images/apple-touch-icon-ad7fd23f6ee9aa5f870d26a8c499bdc8.png\";","module.exports = __webpack_public_path__ + \"media/images/icon_default-96be959407a5016ed168b6d9a45b46b3.png\";","module.exports = __webpack_public_path__ + \"media/images/landing_background-c9445b3d7e0148a68240752cc5435d94.png\";","module.exports = __webpack_public_path__ + \"media/images/logo_color-aac0acbc8930c286026782e0f0526d2c.svg\";","module.exports = __webpack_public_path__ + \"media/images/logo_white-e9eb9339e789607eecec6193b4409d5e.svg\";","module.exports = __webpack_public_path__ + \"media/images/logomark_color-c061f47a12dddcc46404e78f6998882a.svg\";","module.exports = __webpack_public_path__ + \"media/images/og_image_default-2399cdf29ad255e1946468a15801c756.png\";","var map = {\n\t\"./apple-touch-icon\": 41,\n\t\"./apple-touch-icon.png\": 41,\n\t\"./favicon.ico\": 97,\n\t\"./icon_default\": 42,\n\t\"./icon_default.png\": 42,\n\t\"./landing_background\": 43,\n\t\"./landing_background.png\": 43,\n\t\"./landing_background.webp\": 98,\n\t\"./logo_color\": 44,\n\t\"./logo_color.svg\": 44,\n\t\"./logo_white\": 45,\n\t\"./logo_white.svg\": 45,\n\t\"./logomark_color\": 46,\n\t\"./logomark_color.svg\": 46,\n\t\"./og_image_default\": 47,\n\t\"./og_image_default.png\": 47\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 = 96;","module.exports = __webpack_public_path__ + \"media/images/favicon-6054bc15c1ac3490d37e46b5f839af2a.ico\";","module.exports = __webpack_public_path__ + \"media/images/landing_background-a71836d490715d76430a86a9b3f544c0.webp\";"],"sourceRoot":""}