FakeModal.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import Plugin from './Plugin'
  2. import Utils from '../core/Utils'
  3. function $$ (selector, context) {
  4. return Array.prototype.slice.call((context || document).querySelectorAll(selector) || []);
  5. }
  6. /**
  7. * FakeModal
  8. *
  9. */
  10. export default class FakeModal extends Plugin {
  11. constructor (core, opts) {
  12. super(core, opts)
  13. this.type = 'view'
  14. // set default options
  15. const defaultOptions = {}
  16. // merge default options with the ones set by user
  17. this.opts = Object.assign({}, defaultOptions, opts)
  18. this.targets = {}
  19. this.targets.spinner = '.UppyDragDrop-One-Spinner'
  20. this.container = document.body
  21. }
  22. prepareTarget (callerPlugin) {
  23. const callerPluginName = callerPlugin.constructor.name
  24. // add tab panel
  25. const modalContent = document.querySelector('.UppyModal-content')
  26. const nodeForPlugin = document.createElement('div')
  27. modalContent.appendChild(nodeForPlugin)
  28. nodeForPlugin.outerHTML = `
  29. <div role="tabpanel"
  30. class="UppyModal-panel"
  31. id="${callerPluginName}">
  32. </div>
  33. `
  34. // add tab
  35. const modalTabs = document.querySelector('.UppyModal-tabList')
  36. const modalTab = document.createElement('div')
  37. modalTabs.appendChild(modalTab)
  38. modalTab.outerHTML = `
  39. <li><a role="tab"
  40. aria-controls="${callerPluginName}"
  41. class="UppyModal-tab"
  42. href="#${callerPluginName}">
  43. ${callerPluginName}
  44. </a></li>
  45. `
  46. console.log('yoyoyoyoy')
  47. this.initEvents()
  48. return document.querySelector(`#${callerPluginName}`)
  49. }
  50. render () {
  51. // http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog
  52. return `
  53. <div class="UppyModal"
  54. aria-hidden="true"
  55. aria-labelledby="modalTitle"
  56. aria-describedby="modalDescription"
  57. role="dialog">
  58. <button data-modal-hide class="UppyModal-close" title="Close uploader modal">×</button>
  59. <ul role="tablist" class="UppyModal-tabList">
  60. <li><a role="tab" aria-controls="dragdrop" class="UppyModal-tab" href="#dragdrop">Dizzy</a></li>
  61. <li><a role="tab" aria-controls="dropbox" class="UppyModal-tab" href="#dropbox">Ninja</a></li>
  62. <li><a role="tab" aria-controls="instagram" class="UppyModal-tab" href="#instagram">Missy</a></li>
  63. </ul>
  64. <div class="UppyModal-content">
  65. <div role="tabpanel" class="UppyModal-panel" id="dragdrop">
  66. 123
  67. </div>
  68. <div role="tabpanel" class="UppyModal-panel" id="dropbox">
  69. 456
  70. </div>
  71. <div role="tabpanel" class="UppyModal-panel" id="instagram">
  72. 789
  73. </div>
  74. </div>
  75. </div>
  76. `
  77. }
  78. hideAllTabPanels () {
  79. this.tabPanels.forEach(tabPanel => {
  80. tabPanel.style.display = 'none'
  81. })
  82. }
  83. showTabPanel (id) {
  84. const tabPanel = document.querySelector(id)
  85. tabPanel.style.display = 'block'
  86. }
  87. initEvents () {
  88. const tabs = $$('.UppyModal-tab')
  89. this.tabPanels = []
  90. tabs.forEach(tab => {
  91. const tabId = tab.getAttribute('href')
  92. const tabPanel = document.querySelector(tabId)
  93. this.tabPanels.push(tabPanel)
  94. tab.addEventListener('click', event => {
  95. event.preventDefault()
  96. console.log(tabId)
  97. this.hideAllTabPanels()
  98. this.showTabPanel(tabId)
  99. })
  100. })
  101. this.hideAllTabPanels()
  102. }
  103. install () {
  104. const node = document.createElement('div')
  105. node.innerHTML = this.render()
  106. this.container.appendChild(node)
  107. this.initEvents()
  108. }
  109. }