{"version":3,"file":"js/global_main-a4042896e3219258e7ba.js","mappings":"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","sources":["webpack://iHOD-RWD/./app/javascript/global/settings.js","webpack://iHOD-RWD/./app/javascript/packs/global_main.js","webpack://iHOD-RWD/./app/javascript/utils/alert.js","webpack://iHOD-RWD/./app/javascript/utils/util.js"],"sourcesContent":["\nimport $ from \"expose-loader?exposes=$,jQuery!jquery\";\nimport ClipboardJS from 'clipboard';\nimport 'popper.js';\nimport * as alert from '../utils/alert';\nconst settingsModal = document.getElementById('settings-modal');\nconst $settingsModal = $(settingsModal);\nconst saveSettingsButton = document.getElementById(\n 'iHODSettingsSavePreferences'\n);\n\nconst smsInput = document.getElementById('ihodSettingsSMSInput');\nconst emailInput = document.getElementById('ihodSettingsEmailInput');\nconst billSettingsForm = document.getElementById('bill-settings-form');\nlet fieldsetToggles;\nif (billSettingsForm) {\n fieldsetToggles = billSettingsForm.querySelectorAll(\n '.inputSegment.toggleColor'\n );\n}\nconst updateCalendarUrl = (e) => {\n const urlHolder = document.getElementById('ihodSettingsApiUrl');\n const startingUrl = urlHolder.value.trim();\n const urlBase = startingUrl.slice(0, startingUrl.indexOf('?') + 1);\n const calendarChecks = document.querySelectorAll(\n '.ihodSettingsCalendarCheck'\n );\n let params = Array.from(\n calendarChecks,\n (check) => `${check.value}=${check.checked ? 'Y' : 'N'}`\n );\n let url = `${urlBase}${params.join('&')}`;\n urlHolder.value = url;\n};\n\nconst initCopyJs = () => {\n const clipboard = new ClipboardJS('.urlCopy');\n clipboard.on('success', function (e) {\n console.info('Action:', e.action);\n $('.urlCopy').tooltip();\n e.clearSelection();\n });\n};\n\nconst highlightFieldset = (e) => {\n const fieldsetToggle = e.target.closest('.inputSegment.toggleColor');\n fieldsetToggles.forEach(\n (presentFieldset) => (presentFieldset.style.backgroundColor = '#fff')\n );\n if (e.target.checked == true) {\n fieldsetToggle.style.backgroundColor = '#43858e46';\n }\n};\n\nconst hideSaveButtonOnCalendarTab = () => {\n saveSettingsButton.style.display = 'none';\n};\n\nconst showSaveButtonOnCalendarTab = () => {\n saveSettingsButton.style.display = 'inline-block';\n};\n\nconst removeErrorFeedback = () => {\n const modalAlert = settingsModal.querySelector('.modal-alert');\n if (modalAlert) modalAlert.parentNode.removeChild(modalAlert);\n\n smsInput.classList.remove('is-invalid');\n emailInput.classList.remove('is-invalid');\n};\n\nconst updateSettingsModal = (data) => {\n const billSettingsMap = {\n 'bill text': 'bill-text-radio',\n 'bill history': 'bill-history-radio',\n 'bill highlight': 'bill-highlight-radio',\n };\n const agendaDisplayMap = {\n 'bill summaries': 'settings-sum-check',\n 'impact statements': 'settings-impact-check',\n 'last 5 actions': 'settings-last-check',\n 'senate committee actions': 'settings-senate-check',\n subcommittee: 'settings-sub-action-check',\n 'subcommittee recommendation': 'settings-sub-rec-check',\n };\n let {\n display_content_defaults: displayArr,\n bill_preference: billPref,\n mem_data: memDataObj,\n } = data;\n let email, sms, billRadio, display, displayCheck;\n\n // update phone and email inputs if we have the memdata info\n if (memDataObj !== null) {\n ({ email_other: email, sms } = memDataObj);\n smsInput.value = sms;\n emailInput.value = email;\n }\n //var billPref = data[\"bill_preference\"].toLowerCase();\n // update bill radios\n billPref = billPref.toLowerCase();\n billRadio = document.querySelector(\n `#bill-settings-tab #${billSettingsMap[billPref]}`\n );\n billRadio.checked = true;\n\n // update agenda block display checkboxes\n for (let i = 0; i < displayArr.length; i++) {\n display = displayArr[i].toLowerCase();\n displayCheck = document.querySelector(\n `#agenda-settings-tab #${agendaDisplayMap[display]}`\n );\n displayCheck.checked = true;\n }\n};\n\nconst submitSettings = (route, data) => {\n return $.get(route, data, null, 'json');\n};\n\nconst fetchSettingsData = () => {\n const route = `${window.location.protocol}//${window.location.host}/users/settings_menu.json`;\n return $.getJSON(route);\n};\n\nconst handleSaveSettingsButton = () => {\n const selectedBillPref = `pref=${\n document.querySelector('.ihodSettingsBillRadio:checked').value\n }`;\n const agendaPrefInputs = document.querySelectorAll(\n '.ihodSettingsAgendaCheck:checked'\n );\n const agendaPrefs = `bill_content_pref=${Array.from(\n agendaPrefInputs,\n (check) => check.value\n ).join(',')}`;\n const patronAlsoNotificationInput = document.getElementById(\n 'ihodSettingsPatronAlsoCheck'\n );\n const noticepref = `notice_pref=${\n patronAlsoNotificationInput.checked ? patronAlsoNotificationInput.value : ''\n }`;\n const sms = `sms=${smsInput.value}`;\n const email = `emailother=${emailInput.value}`;\n const route = `${window.location.protocol}//${window.location.host}/user/update_profile?${selectedBillPref}&${agendaPrefs}&${noticepref}&${sms}&${email}`;\n\n const successCB = (data) => {\n const { status, results } = data;\n const { notification: notificationObj } = results;\n let message;\n\n // All good\n if (status === 1) {\n $settingsModal.modal('hide');\n\n alert.init({\n classes: 'alert-success ihod-alert',\n message: '<strong>Your settings have been saved.</strong>',\n time: 4000,\n });\n\n return;\n }\n // Error\n if (status === 0) {\n // notification error\n if (notificationObj.status === 0) {\n message = notificationObj.error;\n $('#notificationIhodSettingsButton').tab('show');\n\n //sms error\n if (notificationObj.sms_error === 1) {\n smsInput.classList.add('is-invalid');\n }\n\n // email error\n if (notificationObj.email_error === 1) {\n emailInput.classList.add('is-invalid');\n }\n } else {\n message = 'An error occurred.';\n }\n\n alert.init({\n classes: 'alert-danger modal-alert',\n message: `<strong>${message}</strong>`,\n container: settingsModal.querySelector('.modal-body'),\n time: '',\n });\n }\n };\n\n const errorCB = () => {\n console.log(\"I'm sorry but an error occurred.\");\n };\n\n removeErrorFeedback();\n\n submitSettings(route).done(successCB).fail(errorCB);\n};\n\nconst handleSettingsModal = (e) => {\n const successCB = (data) => {\n updateSettingsModal(data);\n };\n\n const errorCB = () => {\n console.log(\"I'm sorry but an error occurred.\");\n };\n\n fetchSettingsData().done(successCB).fail(errorCB);\n};\n\nconst setupEventListeners = () => {\n $settingsModal.on('show.bs.modal', handleSettingsModal);\n $settingsModal.on('hide.bs.modal', removeErrorFeedback);\n $('#settings-modal #calendarIhodSettingsButton').on(\n 'show.bs.tab',\n hideSaveButtonOnCalendarTab\n );\n $('#settings-modal #calendarIhodSettingsButton').on(\n 'hide.bs.tab',\n showSaveButtonOnCalendarTab\n );\n const calendarForm = document.getElementById('ihodSettingsCalendarForm');\n if (calendarForm) {\n calendarForm.addEventListener('change', updateCalendarUrl);\n }\n saveSettingsButton?.addEventListener('click', handleSaveSettingsButton);\n billSettingsForm?.addEventListener('change', highlightFieldset);\n};\n\nconst init = () => {\n setupEventListeners();\n initCopyJs();\n // console.log('Settings modal loaded.');\n};\n\ninit();\n","import $ from \"expose-loader?exposes=$,jQuery!jquery\";\nimport 'bootstrap';\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport '../global/settings';\nimport { printNoCommentsInit, printWithCommentsInit, handlePrintWithComments, handlePrintWithNoComments } from '../utils/util';\n\n// import * as pdf_util from './utils/pdf_util';\n\n// pdf_util.globalRender(1.5);\n\n// MAIN SIDE NAVIGATION PANEL\nconst toggleMainSideNav = (e) => {\n e.preventDefault();\n if (document.body.classList.toggle('push')) {\n // hide other menu panels when main menu is out\n document.body.classList.remove('cal-item-push', 'enrolling-push');\n }\n};\n\ndocument.addEventListener('click', (e) => {\n let target = e.target;\n\n if (target.closest('.main-side-nav-trigger')) {\n toggleMainSideNav(e);\n }\n});\n\ndocument\n .getElementById('app-bill-search-form')\n .addEventListener('submit', (e) => {\n e.preventDefault();\n const form = e.target;\n const bill = form.search.value;\n window.location.assign(\n `${window.location.protocol}//${window.location.host}/bills/${bill}`\n );\n });\n\n document.addEventListener('click', (event) => {\n // Check if the clicked element is #printWithCommentsBtn\n if (event.target.id === 'printWithCommentsBtn') {\n // handling the button click\n console.log('printWithCommentsBtn clicked!');\n \n // Trigger printing logic\n handlePrintWithComments();\n // init the print functions, in case the buttons are used again\n printWithCommentsInit();\n }\n else if (event.target.id === 'printNoCommentBtn') {\n // handling the button click\n console.log('printNoCommentBtn clicked!');\n \n // Trigger printing logic\n handlePrintWithNoComments();\n // init the print functions, in case the buttons are used again\n printNoCommentsInit();\n }\n });\n\nprintNoCommentsInit();\nprintWithCommentsInit();\n\n","const dismissNotification = (element) => {\n element.classList.remove('custom-show');\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n element.classList.add('custom-hide');\n\n element.addEventListener('animationend', () => {\n element.parentNode.removeChild(element);\n }, { once: true });\n });\n });\n}\n\n\n/*\n * options is an object with these keys: \n *\n * classes - The CSS classes you would like the container div to have, for example\n * a Bootstrap class like 'alert-danger'. The 'ihod-alert' class customizes the\n * Bootstrap alert and adds animation. The alert contains these classes by default:\n * 'alert custom-show alert-dismissible fade show border-right-0 border-left-0 rounded-0'.\n * \n * message - Whatever text you would like the alert to display.\n * Default is an empty string.\n * \n * container - A DOM element. The element you would like to append the alert to.\n * Defaults to document.body.\n * \n * time - A number which is the time in milliseconds that the alert should persist.\n * an empty string may be used if the alert should remain persistent.\n * Defaults to 2000.\n * \n * \n * Usage:\n * \n * alert.init({\n * classes: 'alert-danger ihod-alert',\n * message: \"<strong>I'm sorry there was a problem with that request.</strong>\",\n * container: document.querySelector('.header'),\n * time: 4000 // or '' \n * });\n*/\nconst init = (options) => {\n const { time = 2000, container = document.body, classes = '', message = '' } = options;\n let st;\n let notificationElement = `\n <div class=\"alert ${classes} custom-show alert-dismissible fade show border-right-0 border-left-0 rounded-0\" role=\"alert\">\n ${message}\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n `;\n\n // add element to DOM\n container.insertAdjacentHTML('afterbegin', notificationElement);\n\n // remove from DOM after certain time period if it has not already been dismissed\n notificationElement = document.querySelector('.alert.custom-show');\n\n // remove from DOM after certain time period if it has not already been dismissed\n if (notificationElement && time) {\n st = setTimeout(() => {\n clearTimeout(st);\n dismissNotification(notificationElement);\n }, time);\n }\n}\n\n/*\n Wrapper that lets you pass in just a msg and a msgClass, with reasonable\n defaults for everything else.\n\n Usage:\n\n const errMsgClass = 'alert-danger';\n ...\n alert.tellUser('No query criteria selected.', errMsgClass);\n*/\nconst tellUser = (msg, msgClass) => {\n init({\n classes: `${msgClass} ihod-alert`,\n message: msg,\n time: 4000\n });\n}\n\nexport {\n init,\n tellUser\n}","// using these custom functions as oppose to js classList methods\n// for special handling of svg's\nconst LOWEST_SAFARI_IOS_VERSION = 16.4;\nexport const GOOGLE_PDF_VIEWER_PREFFIX = 'https://docs.google.com/gview?url=';\nexport const GOOGLE_PDF_VIEWER_SUFFIX = '&embedded=true';\n\nexport function googleWrapper(url) {\n const isPDF = /\\.pdf$/i.test(url); // Check if the URL ends with .pdf (case insensitive)\n \n if (isPDF) {\n return `${GOOGLE_PDF_VIEWER_PREFFIX}${url}${GOOGLE_PDF_VIEWER_SUFFIX}`;\n }\n \n return url; // Return the original URL if it's not a .pdf\n}\n\nfunction isSafariVersionSmallerThan(aVersion) {\n const ua = navigator.userAgent;\n const match = ua.match(/Version\\/(\\d+\\.\\d+)(?:.*Safari\\/(\\d+\\.\\d+))?/);\n\n if (match && match[1]) {\n const safariVersion = parseFloat(match[1]);\n const targetVersion = parseFloat(aVersion);\n\n return safariVersion < targetVersion;\n }\n\n // Return false if the browser is not Safari\n return false;\n}\n\nexport function isPDFJSCompatible() {\n return !isSafariVersionSmallerThan(LOWEST_SAFARI_IOS_VERSION);\n}\n\nconst styleButton = (button, classes) => {\n // classes is an array of strings, ie ['active', 'loading']\n button.classList.add(...classes);\n};\n\nconst resetButton = (button, classes) => {\n const buttonTypes = ['current-item', 'refresh'];\n\n // FontAwesome uses the browsers MutationObserver interface to watch changes to the page\n // https://fontawesome.com/how-to-use/with-the-api/setup/configuration#observemutations\n // therefore caching the element does not work and we must query for it after the page updates\n button = buttonTypes.includes(button.dataset.button)\n ? button.querySelector('svg')\n : button;\n // classes is an array of strings, ie ['active', 'loading']\n button.classList.remove(...classes);\n};\n\n// use 'saveSubmit' method in a submit handler\nconst detectSubmit = {\n saveSubmit(form) {\n if (!form) return;\n form.dataset.submitted = true;\n },\n submitted(form) {\n if (!form) return;\n return form.dataset.submitted;\n },\n};\n\nconst generateAssociatedFields = (button) => {\n const time = new Date().getTime();\n const regexp = new RegExp(button.dataset.id, 'g');\n return { id: time, newFields: button.dataset.fields.replace(regexp, time) };\n};\n\nconst removeAttachment = (button) => {\n const associatedAttachment = button.closest('.associated-fields');\n associatedAttachment.style.display = 'none';\n associatedAttachment.querySelector('input[type=hidden').value = true;\n};\n\n// b is a boolean. true enables, false disables.\nconst enableElement = (id, b) => {\n const elem = document.getElementById(id);\n if (b) {\n elem.removeAttribute('disabled');\n } else {\n elem.setAttribute('disabled', 'disabled');\n }\n};\n\n// b is a boolean. true shows, false hides.\n// Adapted from https://gomakethings.com/how-to-show-and-hide-elements-with-vanilla-javascript/\nconst showElement = function (id, b) {\n const elem = document.getElementById(id);\n const style = b ? 'block' : 'none';\n elem.style.display = style;\n};\n\n/*\n * Concatenate two HtmlCollection objects.\n * Returns a new array that has all elements from both collections.\n * https://stackoverflow.com/questions/24133231/concatenating-html-object-arrays-with-javascript\n *\n * NOTE:\n * You may not need this function if you can fetch both\n * collections at once through\n * document.querySelector()/querySelectorAll().\n */\nconst concatCollections = function (htmlColl1, htmlColl2) {\n let allItems = [];\n allItems = Array.prototype.concat.apply(allItems, htmlColl1);\n allItems = Array.prototype.concat.apply(allItems, htmlColl2);\n return allItems;\n};\n\n// Remove all items from a list.\nconst removeAllListItems = function (id) {\n const list = document.getElementById(id);\n while (list.firstChild) {\n list.removeChild(list.firstChild);\n }\n};\n\n// Capitalize the first character in the string s.\n// Returns a new string; s is unchanged.\nconst capitalizeFirst = function (s) {\n if (s.length === 0) {\n return s;\n }\n return s[0].toUpperCase() + s.slice(1);\n};\n\n/*\n * Use this to get around the occasional issue where refreshing a page\n * would repost, with a browser warning, etc.\n *\n * On Firefox, this appears to turn the post into a get, which is perfect.\n * (Or maybe it literally replaces the post with a get?)\n */\nconst clearPostData = () => {\n history.replaceState(null, document.title, location.href);\n};\n\n/*\n * Use this function with the `await` keyword, in an `async` function.\n * For an example, see `ensureIframeLoaded` in app/javascript/utils/iframe_checker.js\n */\nfunction sleep(seconds) {\n return new Promise((resolve) => setTimeout(resolve, seconds * 2000));\n}\n\nconst isMobileScreen = (width = 576) => window.innerWidth <= width;\n\nexport const evalTrueFalse = (bool) => {\n if (bool == 'true') {\n return true;\n }\n if (bool == 'false') {\n return false;\n }\n};\n\nexport const postData = (data, route) => {\n return $.post(route, data, null, 'json');\n};\n\n/**\n * use to toggle a class in TR element base on the state (checked/unchecked) of a check box in TD\n * @param {TR element} rowContainCheckBox\n * @param {string} className this is the class of the checkbox\n * @param {string} toogleClassName a CSS class that needed to be toggle\n * @param {bool} bool desired state of the checkbox\n */\nexport const handleCheckbox = (\n rowContainCheckBox,\n className,\n toogleClassName,\n bool\n) => {\n //console.log(bool, rowContainCheckBox, className, toogleClassName);\n var box = rowContainCheckBox.querySelector(`.${className}`);\n //console.log(box);\n if (box) {\n rowContainCheckBox.querySelector(`.${className}`).checked = bool;\n //console.log(rowContainCheckBox.querySelector(`.${className}`));\n }\n if (bool) {\n rowContainCheckBox.classList.add(`${toogleClassName}`);\n return;\n }\n rowContainCheckBox.classList.remove(`${toogleClassName}`);\n //console.log(rowContainCheckBox);\n};\n\n\nfunction handlePrintWithComments() {\n let comments = document.querySelectorAll('.comments');\n if (comments) {\n comments.forEach((el) => {\n el.classList.remove('d-print-none');\n });\n window.print();\n }\n}\n\nfunction handlePrintWithNoComments(){\n let comments = document.querySelectorAll('.comments');\n if (comments) {\n comments.forEach((el) => {\n el.classList.add('d-print-none');\n });\n window.print();\n }\n}\n\nfunction printNoCommentsInit() {\n let btn = document.getElementById('printNoCommentBtn');\n if (btn) {\n btn.addEventListener('click', () => {\n handlePrintWithNoComments();\n });\n }\n}\n\nfunction printWithCommentsInit() {\n let btn = document.getElementById('printWithCommentsBtn');\n if (btn) {\n btn.addEventListener('click', () => {\n handlePrintWithComments();\n });\n }\n}\nexport {\n handlePrintWithComments,\n handlePrintWithNoComments,\n printNoCommentsInit,\n printWithCommentsInit,\n capitalizeFirst,\n clearPostData,\n concatCollections,\n detectSubmit,\n enableElement,\n generateAssociatedFields,\n removeAllListItems,\n removeAttachment,\n resetButton,\n showElement,\n sleep,\n styleButton,\n isMobileScreen,\n};\n"],"names":["fieldsetToggles","settingsModal","document","getElementById","$settingsModal","$","saveSettingsButton","smsInput","emailInput","billSettingsForm","querySelectorAll","updateCalendarUrl","e","urlHolder","startingUrl","value","trim","urlBase","slice","indexOf","calendarChecks","params","Array","from","check","concat","checked","url","join","highlightFieldset","fieldsetToggle","target","closest","forEach","presentFieldset","style","backgroundColor","hideSaveButtonOnCalendarTab","display","showSaveButtonOnCalendarTab","removeErrorFeedback","modalAlert","querySelector","parentNode","removeChild","classList","remove","handleSaveSettingsButton","selectedBillPref","agendaPrefInputs","agendaPrefs","patronAlsoNotificationInput","noticepref","sms","email","route","window","location","protocol","host","data","submitSettings","done","message","status","notificationObj","results","notification","modal","alert","classes","time","error","tab","sms_error","add","email_error","container","fail","console","log","handleSettingsModal","agendaDisplayMap","subcommittee","displayArr","display_content_defaults","billPref","bill_preference","memDataObj","mem_data","email_other","toLowerCase","i","length","updateSettingsModal","on","calendarForm","addEventListener","setupEventListeners","ClipboardJS","info","action","tooltip","clearSelection","preventDefault","body","toggle","toggleMainSideNav","bill","search","assign","event","id","handlePrintWithComments","printWithCommentsInit","handlePrintWithNoComments","printNoCommentsInit","init","options","st","_options$time","_options$container","_options$classes","_options$message","notificationElement","insertAdjacentHTML","setTimeout","element","clearTimeout","requestAnimationFrame","once","tellUser","msg","msgClass","GOOGLE_PDF_VIEWER_PREFFIX","GOOGLE_PDF_VIEWER_SUFFIX","googleWrapper","test","styleButton","button","_button$classList","apply","_toConsumableArray","resetButton","_button$classList2","includes","dataset","detectSubmit","saveSubmit","form","submitted","generateAssociatedFields","Date","getTime","regexp","RegExp","newFields","fields","replace","removeAttachment","associatedAttachment","enableElement","b","elem","removeAttribute","setAttribute","showElement","removeAllListItems","list","firstChild","capitalizeFirst","s","toUpperCase","clearPostData","history","replaceState","title","href","sleep","seconds","Promise","resolve","isMobileScreen","width","arguments","undefined","innerWidth","evalTrueFalse","bool","postData","post","handleCheckbox","rowContainCheckBox","className","toogleClassName","comments","el","print","btn"],"sourceRoot":""}