storage.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // chrome.storage.sync.clear()
  2. // chrome.permissions.getAll((p) => chrome.permissions.remove({origins: p.origins}))
  3. md.storage = ({compilers}) => {
  4. var match = '\\.(?:markdown|mdown|mkdn|md|mkd|mdwn|mdtxt|mdtext|text)(?:#.*|\\?.*)?$'
  5. var defaults = {
  6. theme: 'github',
  7. compiler: 'marked',
  8. content: {
  9. emoji: false,
  10. scroll: true,
  11. toc: false,
  12. mathjax: false,
  13. },
  14. raw: false,
  15. header: true,
  16. csp: false,
  17. match,
  18. origins: {
  19. 'file://': match
  20. },
  21. }
  22. Object.keys(compilers).forEach((compiler) => {
  23. defaults[compiler] = compilers[compiler].defaults
  24. })
  25. var state = {}
  26. function set (options) {
  27. chrome.storage.sync.set(options)
  28. Object.assign(state, options)
  29. }
  30. chrome.storage.sync.get((res) => {
  31. var options = !Object.keys(res).length ? defaults : res
  32. // v2.2 -> v2.3
  33. if (!options.match || !options.origins) {
  34. options.match = match
  35. options.origins = {
  36. 'file://': match
  37. }
  38. }
  39. // v2.3 -> v2.4
  40. else if (!options.origins['file://']) {
  41. options.origins['file://'] = match
  42. }
  43. // v2.4 -> v2.5
  44. if (!options.compiler) {
  45. options.compiler = options.options
  46. }
  47. if (!options.content) {
  48. options.content = defaults.content
  49. }
  50. // v2.7 -> v2.8
  51. if (!options.marked) {
  52. options.compiler = 'marked'
  53. options.marked = compilers.marked.defaults
  54. }
  55. // v2.8 -> v2.9
  56. if (!options.remark) {
  57. options.remark = compilers.remark.defaults
  58. }
  59. // v2.9 -> v3.0
  60. if (options.content.emoji === undefined) {
  61. options.content.emoji = false
  62. }
  63. // v3.0 -> v3.1
  64. if (options.header === undefined) {
  65. options.header = true
  66. }
  67. // v3.1 -> v3.2
  68. if (options.remark && options.remark.yaml) {
  69. delete options.remark.yaml
  70. }
  71. if (options.content.mathjax === undefined) {
  72. options.content.mathjax = false
  73. }
  74. // v3.3 -> v3.4
  75. if (options.csp === undefined) {
  76. options.csp = false
  77. }
  78. // reload extension bug
  79. chrome.permissions.getAll((permissions) => {
  80. var origins = Object.keys(res.origins || {})
  81. chrome.permissions.remove({
  82. origins: permissions.origins
  83. .filter((origin) => origins.indexOf(origin.slice(0, -2)) === -1)
  84. })
  85. })
  86. Object.keys(compilers).forEach((compiler) => {
  87. if (!options[compiler]) {
  88. options[compiler] = compilers[compiler].defaults
  89. }
  90. })
  91. chrome.storage.sync.set(options)
  92. Object.assign(state, JSON.parse(JSON.stringify(options)))
  93. })
  94. return {defaults, state, set}
  95. }