{"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\">&times;</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":""}