settings.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * FeHelper Settings Tools
  3. * @author zhaoxianlie
  4. */
  5. import Awesome from '../background/awesome.js';
  6. export default (() => {
  7. // 所有配置项
  8. let optionItemsWithDefaultValue = {
  9. 'OPT_ITEM_CONTEXTMENUS': true,
  10. 'JSON_PAGE_FORMAT': true,
  11. 'FORBID_OPEN_IN_NEW_TAB': false,
  12. 'AUTO_DARK_MODE': false,
  13. 'ALWAYS_DARK_MODE': false,
  14. 'CONTENT_SCRIPT_ALLOW_ALL_FRAMES': false
  15. };
  16. /**
  17. * 获取全部配置项
  18. * @returns {string[]}
  19. * @private
  20. */
  21. let _getAllOpts = () => Object.keys(optionItemsWithDefaultValue);
  22. /**
  23. * 提取配置项
  24. * @param {Function} callback 回调方法
  25. */
  26. let _getOptions = function (callback) {
  27. let rst = {};
  28. chrome.storage.local.get(_getAllOpts(),(objs) => {
  29. Object.keys(objs).forEach(item => {
  30. let opt = objs[item];
  31. if (opt !== null) {
  32. rst[item] = opt;
  33. } else {
  34. rst[item] = optionItemsWithDefaultValue[item];
  35. }
  36. });
  37. callback.call(null, rst);
  38. });
  39. };
  40. /**
  41. * 保存配置
  42. * @param items
  43. * @param callback
  44. * @private
  45. */
  46. let _setOptions = function (items, callback) {
  47. // 确保items是数组类型
  48. if (!Array.isArray(items)) {
  49. // 如果传入的是对象类型,转换为数组形式
  50. if (typeof items === 'object') {
  51. let tempItems = [];
  52. Object.keys(items).forEach(key => {
  53. let obj = {};
  54. obj[key] = items[key];
  55. tempItems.push(obj);
  56. });
  57. items = tempItems;
  58. } else {
  59. items = [];
  60. }
  61. }
  62. _getAllOpts().forEach((opt) => {
  63. let found = items.some(it => {
  64. if (typeof(it) === 'string' && it === opt) {
  65. chrome.storage.local.set({[opt]: 'true'});
  66. return true;
  67. }
  68. else if (typeof(it) === 'object' && it.hasOwnProperty(opt)) {
  69. chrome.storage.local.set({[opt]: it[opt]});
  70. return true;
  71. }
  72. return false;
  73. });
  74. if (!found) {
  75. chrome.storage.local.set({[opt]: 'false'});
  76. }
  77. });
  78. callback && callback();
  79. };
  80. return {
  81. getAllOpts: _getAllOpts,
  82. getOptions: _getOptions,
  83. setOptions: _setOptions
  84. };
  85. })();