settings.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. _getAllOpts().forEach((opt) => {
  48. let found = items.some(it => {
  49. if (typeof(it) === 'string' && it === opt) {
  50. Awesome.StorageMgr.set(opt,'true');
  51. return true;
  52. }
  53. else if (typeof(it) === 'object' && it.hasOwnProperty(opt)) {
  54. Awesome.StorageMgr.set(opt,it[opt]);
  55. return true;
  56. }
  57. return false;
  58. });
  59. if (!found) {
  60. Awesome.StorageMgr.set(opt,'false');
  61. }
  62. });
  63. callback && callback();
  64. };
  65. return {
  66. getAllOpts: _getAllOpts,
  67. getOptions: _getOptions,
  68. setOptions: _setOptions
  69. };
  70. })();