options.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. var state = {
  2. origin: '',
  3. origins: {},
  4. timeout: null
  5. }
  6. var events = {
  7. add: () => {
  8. var origin = state.origin.replace(/\/$/, '')
  9. chrome.permissions.request({origins: [origin + '/*']}, (granted) => {
  10. if (granted) {
  11. chrome.extension.sendMessage({message: 'add', origin}, (res) => {
  12. state.origin = ''
  13. get()
  14. })
  15. }
  16. })
  17. },
  18. remove: (origin) => () => {
  19. chrome.permissions.remove({origins: [origin + '/*']}, (removed) => {
  20. if (removed) {
  21. chrome.extension.sendMessage({message: 'remove', origin}, (res) => {
  22. get()
  23. })
  24. }
  25. })
  26. },
  27. update: (origin) => (e) => {
  28. state.origins[origin] = e.target.value
  29. clearTimeout(state.timeout)
  30. state.timeout = setTimeout(() => {
  31. chrome.extension.sendMessage({
  32. message: 'update', origin, match: e.target.value
  33. }, (res) => {})
  34. }, 750)
  35. },
  36. origin: (e) => {
  37. state.origin = e.target.value
  38. }
  39. }
  40. function get () {
  41. chrome.extension.sendMessage({message: 'origins'}, (res) => {
  42. state.origins = res.origins
  43. m.redraw()
  44. })
  45. }
  46. get()
  47. function oncreate (vnode) {
  48. componentHandler.upgradeElements(vnode.dom)
  49. }
  50. m.mount(document.querySelector('main'), {
  51. view: () =>
  52. m('.mdl-grid', [
  53. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop', [
  54. m('h4', 'Add New Origin'),
  55. ]),
  56. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop', [
  57. m('.mdl-textfield mdl-js-textfield', {oncreate}, [
  58. m('input.mdl-textfield__input', {
  59. value: state.origin,
  60. onchange: events.origin,
  61. placeholder: 'https://raw.githubusercontent.com'
  62. }),
  63. m('label.mdl-textfield__label')
  64. ]),
  65. m('button.mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect',
  66. {oncreate, onclick: events.add},
  67. 'Add')
  68. ]),
  69. (Object.keys(state.origins).length || null) &&
  70. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop',
  71. m('h4', 'Allowed Origins')
  72. ),
  73. (Object.keys(state.origins).length || null) &&
  74. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop',
  75. m('table.mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp',
  76. Object.keys(state.origins).map((origin) =>
  77. m('tr', [
  78. m('td.mdl-data-table__cell--non-numeric', origin),
  79. m('td.mdl-data-table__cell--non-numeric',
  80. m('.mdl-textfield mdl-js-textfield', {oncreate}, [
  81. m('input.mdl-textfield__input',
  82. {onkeyup: events.update(origin), value: state.origins[origin]}),
  83. m('label.mdl-textfield__label')
  84. ])
  85. ),
  86. m('td',
  87. m('button.mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon',
  88. {oncreate, onclick: events.remove(origin), title: 'Remove'},
  89. m('i.material-icons icon-remove')
  90. )
  91. )
  92. ])
  93. ))
  94. )
  95. ])
  96. })