options.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. var state = {
  2. origins: []
  3. }
  4. var events = {
  5. add: () => {
  6. chrome.permissions.request({
  7. origins: [document.querySelector('input').value]
  8. }, (granted) => {
  9. if (granted) {
  10. get()
  11. document.querySelector('input').value = ''
  12. }
  13. })
  14. },
  15. remove: (origin) => () => {
  16. chrome.permissions.remove({
  17. origins: [origin]
  18. }, (removed) => {
  19. if (removed) {
  20. var index = state.origins.indexOf(origin)
  21. state.origins.splice(index, 1)
  22. m.redraw()
  23. }
  24. })
  25. }
  26. }
  27. function get () {
  28. chrome.permissions.getAll((res) => {
  29. state.origins = res.origins
  30. m.redraw()
  31. })
  32. }
  33. function oncreate (vnode) {
  34. componentHandler.upgradeElements(vnode.dom)
  35. }
  36. get()
  37. m.mount(document.querySelector('main'), {
  38. view: () =>
  39. m('.mdl-grid', [
  40. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop', [
  41. m('h4', 'Add New Origin'),
  42. m('form', [
  43. m('input[placeholder="https://raw.githubusercontent.com"]'),
  44. m('button[type=button].mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect',
  45. {oncreate, onclick: events.add},
  46. 'Add')
  47. ])
  48. ]),
  49. m('.mdl-cell mdl-cell--8-col-tablet mdl-cell--12-col-desktop', [
  50. m('h4', 'Allowed Origins'),
  51. m('table.mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp',
  52. state.origins.map((origin) =>
  53. m('tr', [
  54. m('td.mdl-data-table__cell--non-numeric', origin),
  55. m('td.mdl-data-table__cell--non-numeric',
  56. m('button.mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon',
  57. {oncreate, onclick: events.remove(origin), title: 'Remove'},
  58. m('i.material-icons icon-remove')
  59. )
  60. )
  61. ])
  62. ))
  63. ])
  64. ])
  65. })