index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /**
  2. * FeHelper Options Page
  3. */
  4. let Settings = Tarp.require('./settings');
  5. new Vue({
  6. el: '#pageContainer',
  7. data: {
  8. defaultKey: 'Alt+Shift+F',
  9. selectedOpts: [],
  10. maxJsonKeysNumber: 0,
  11. auto_text_decode: false,
  12. manifest: {},
  13. menuOpts: {},
  14. selectedMenu: [],
  15. defaultMenu: Settings.getDefaultContextMenus(),
  16. isFireFox: window.navigator && /firefox/i.test(navigator.userAgent)
  17. },
  18. created: function () {
  19. // 获取当前热键
  20. chrome.commands && chrome.commands.getAll && chrome.commands.getAll(keys => {
  21. keys.some(key => {
  22. if (key.name === '_execute_browser_action' && key.shortcut) {
  23. this.defaultKey = key.shortcut;
  24. return true;
  25. }
  26. });
  27. });
  28. Settings.getOptions((opts) => {
  29. this.selectedOpts = Object.keys(opts).filter(k => {
  30. if (this.isFireFox) {
  31. if (this.disabledItem(k) || this.disabledItem(k, 'menu')) {
  32. return false;
  33. }
  34. }
  35. if (typeof(opts[k]) === 'string' && /^MENU_/.test(k)) {
  36. this.selectedMenu.push(k);
  37. return false;
  38. }
  39. return typeof(opts[k]) === 'string'
  40. && !['MAX_JSON_KEYS_NUMBER', 'AUTO_TEXT_DECODE'].includes(k);
  41. });
  42. this.maxJsonKeysNumber = opts['MAX_JSON_KEYS_NUMBER'];
  43. this.auto_text_decode = opts['AUTO_TEXT_DECODE'] === 'true';
  44. // 如果还没设置过menu,就用默认的了
  45. Settings.askMenuSavedOrNot(saved => {
  46. if (!saved) {
  47. this.selectedMenu = this.defaultMenu.filter(m => {
  48. return !(this.isFireFox && this.disabledItem(m, 'menu'));
  49. });
  50. }
  51. });
  52. });
  53. this.manifest = chrome.runtime.getManifest();
  54. this.menuOpts = Settings.getMenuOpts();
  55. },
  56. methods: {
  57. disabledItem: (key, type) => {
  58. if (!type || type !== 'menu') {
  59. return ['PAGE_CAPTURE', 'COLOR_PICKER', 'FCP_HELPER_DETECT', 'REMOVE_BG',
  60. 'SHOW_PAGE_LOAD_TIME', 'GRID_RULER', 'AJAX_DEBUGGER'].includes(key);
  61. } else {
  62. return ['MENU_PAGE_CAPTURE', 'MENU_COLOR_PICKER',
  63. 'MENU_STR_ENDECODE', 'MENU_AJAX_DEBUGGER', 'MENU_PAGE_OPTIMI', 'MENU_DOWNLOAD_CRX',
  64. 'MENU_CODE_STANDARD', 'MENU_GRID_RULER', 'MENU_REMOVE_BG'].includes(key);
  65. }
  66. },
  67. close: () => {
  68. chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
  69. chrome.tabs.remove(tabs[0].id);
  70. });
  71. },
  72. cancel: function () {
  73. this.close();
  74. },
  75. save: function () {
  76. Settings.setOptions(this.selectedOpts.concat([
  77. {MAX_JSON_KEYS_NUMBER: parseInt(this.maxJsonKeysNumber, 10)},
  78. {AUTO_TEXT_DECODE: String(this.auto_text_decode)},
  79. ]).concat(this.selectedMenu));
  80. setTimeout(() => {
  81. this.close();
  82. }, 1000);
  83. },
  84. setShortcuts: function () {
  85. if (this.isFireFox) {
  86. return alert('此功能仅针对Google Chrome浏览器!')
  87. }
  88. chrome.tabs.create({
  89. url: 'chrome://extensions/shortcuts'
  90. });
  91. return false;
  92. },
  93. donateToggle: function (event) {
  94. let box = this.$refs.boxDonate;
  95. if (box.classList.contains('hide')) {
  96. box.classList.remove('hide');
  97. box.style.top = (event.target.offsetTop + 30) + 'px';
  98. box.style.left = event.target.offsetLeft + 'px';
  99. } else {
  100. box.classList.add('hide');
  101. }
  102. }
  103. }
  104. });