settings.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /**
  2. * FeHelper Settings Tools
  3. */
  4. module.exports = (() => {
  5. // 页面json格式化强制开启
  6. let MSG_TYPE = Tarp.require('../static/js/msg_type');
  7. // 默认值:JSON格式化支持的最大key数量
  8. let maxJsonKeysNumber = 10000;
  9. // 所有配置项
  10. let optionItems = [
  11. 'opt_item_contextMenus',
  12. 'JSON_PAGE_FORMAT',
  13. 'EN_DECODE',
  14. 'CODE_BEAUTIFY',
  15. 'CODE_COMPRESS',
  16. 'JSON_FORMAT',
  17. 'JSON_COMPARE',
  18. 'QR_CODE',
  19. 'COLOR_PICKER',
  20. 'REGEXP_TOOL',
  21. 'TIME_STAMP',
  22. 'IMAGE_BASE64',
  23. 'FCP_HELPER_DETECT',
  24. 'SHOW_PAGE_LOAD_TIME',
  25. 'AJAX_DEBUGGER',
  26. 'JS_CSS_PAGE_BEAUTIFY',
  27. 'HTML_TO_MARKDOWN',
  28. 'PAGE_CAPTURE',
  29. 'RANDOM_PASSWORD',
  30. 'FORBID_OPEN_IN_NEW_TAB',
  31. 'MAX_JSON_KEYS_NUMBER',
  32. 'AUTO_TEXT_DECODE',
  33. 'STICKY_NOTES',
  34. 'GRID_RULER',
  35. 'REMOVE_BG'
  36. ];
  37. // 默认处理关闭状态的功能,除非用户手动打开
  38. let offDefaultList = [
  39. 'GRID_RULER',
  40. 'MENU_GRID_RULER',
  41. 'REMOVE_BG',
  42. 'MENU_REMOVE_BG'
  43. ];
  44. // 邮件菜单配置项
  45. let menuOptions = {
  46. MENU_PAGE_ENCODING: {
  47. icon: '↺',
  48. text: '网页编码设置'
  49. },
  50. MENU_QRCODE_CREATE: {
  51. icon: '▣',
  52. text: '二维码生成器',
  53. contexts: ['page', 'selection', 'editable', 'link', 'image']
  54. },
  55. MENU_QRCODE_DECODE: {
  56. icon: '◈',
  57. text: '二维码解码器',
  58. contexts: ['image']
  59. },
  60. MENU_PAGE_CAPTURE: {
  61. icon: '✂',
  62. text: '页面滚动截屏'
  63. },
  64. MENU_COLOR_PICKER: {
  65. icon: '☀',
  66. text: '页面取色工具',
  67. contexts: ['page', 'selection', 'editable']
  68. },
  69. MENU_IMAGE_BASE64: {
  70. icon: '⇄',
  71. text: '图片与base64',
  72. contexts: ['image']
  73. },
  74. MENU_STR_ENDECODE: {
  75. icon: '♨',
  76. text: '字符串编解码',
  77. contexts: ['page', 'selection', 'editable']
  78. },
  79. MENU_JSON_FORMAT: {
  80. icon: '★',
  81. text: 'JSON格式化',
  82. contexts: ['page', 'selection', 'editable']
  83. },
  84. MENU_JSON_COMPARE: {
  85. icon: '☃',
  86. text: 'JSON比对器'
  87. },
  88. MENU_CODE_FORMAT: {
  89. icon: '☂',
  90. text: '代码美化工具',
  91. contexts: ['page', 'selection', 'editable']
  92. },
  93. MENU_CODE_COMPRESS: {
  94. icon: '〓',
  95. text: '代码压缩工具'
  96. },
  97. MENU_AJAX_DEBUGGER: {
  98. icon: '▶',
  99. text: 'Ajax调试功能'
  100. },
  101. MENU_PAGE_OPTIMI: {
  102. icon: '√',
  103. text: '页面性能检测'
  104. },
  105. MENU_TIME_STAMP: {
  106. icon: '♖',
  107. text: '时间(戳)转换'
  108. },
  109. MENU_RANDOM_PASS: {
  110. icon: '☽',
  111. text: '随机密码生成'
  112. },
  113. MENU_JS_REGEXP: {
  114. icon: '✙',
  115. text: 'JS正则表达式'
  116. },
  117. MENU_MARKDOWN_TL: {
  118. icon: 'ⓜ',
  119. text: 'markown工具'
  120. },
  121. MENU_CODE_STANDARD: {
  122. icon: '☊',
  123. text: '编码规范检测'
  124. },
  125. MENU_STICKY_NOTE: {
  126. icon: '▤',
  127. text: '我的便签笔记'
  128. },
  129. MENU_GRID_RULER: {
  130. icon: '✚',
  131. text: '页面栅格标尺'
  132. },
  133. MENU_REMOVE_BG: {
  134. icon: '⚘',
  135. text: '人像背景移除'
  136. },
  137. MENU_DOWNLOAD_CRX: {
  138. icon:'↬',
  139. text: '下载/分享插件'
  140. }
  141. };
  142. /**
  143. * 获取全部配置项
  144. * @returns {string[]}
  145. * @private
  146. */
  147. let _getAllOpts = () => optionItems.concat(Object.keys(menuOptions));
  148. /**
  149. * 向background-page发送请求,提取配置项
  150. * @param {Function} callback 回调方法
  151. */
  152. let _getOptions = function (callback) {
  153. chrome.runtime.sendMessage({
  154. type: MSG_TYPE.GET_OPTIONS
  155. }, callback);
  156. };
  157. /**
  158. * 向background-page发送请求,保存配置项
  159. * @param {Object} items
  160. */
  161. let _setOptions = function (items) {
  162. chrome.runtime.sendMessage({
  163. type: MSG_TYPE.SET_OPTIONS,
  164. items: items
  165. });
  166. };
  167. /**
  168. * 由background-page触发
  169. * @param {Object} callback
  170. */
  171. let _getOptsFromBgPage = function (callback) {
  172. if (callback && typeof callback === 'function') {
  173. let rst = {};
  174. _getAllOpts().forEach((item) => {
  175. let opt = localStorage.getItem(item);
  176. if (item === 'MAX_JSON_KEYS_NUMBER') {
  177. rst[item] = opt || maxJsonKeysNumber;
  178. } else if (typeof(opt) === 'number') {
  179. rst[item] = opt;
  180. } else if (opt !== 'false') {
  181. if(opt || !offDefaultList.includes(item)) {
  182. rst[item] = 'true';
  183. }
  184. }
  185. });
  186. callback.call(null, rst);
  187. }
  188. };
  189. /**
  190. * 由background-page触发
  191. * @param {Object} items
  192. */
  193. let _setOptsFromBgPage = function (items) {
  194. _getAllOpts().forEach((opt) => {
  195. let found = items.some(it => {
  196. if (typeof(it) === 'string' && it === opt) {
  197. localStorage.setItem(opt, 'true');
  198. return true;
  199. }
  200. else if (typeof(it) === 'object' && it.hasOwnProperty(opt)) {
  201. localStorage.setItem(opt, it[opt]);
  202. return true;
  203. }
  204. return false;
  205. });
  206. if (!found) {
  207. localStorage.setItem(opt, 'false');
  208. }
  209. });
  210. };
  211. /**
  212. * 获取菜单配置项
  213. */
  214. let _getMenuOpts = function () {
  215. return menuOptions;
  216. };
  217. /**
  218. * 询问一下,菜单是否已保存
  219. * @param callback
  220. * @private
  221. */
  222. let _askMenuSavedOrNot = function (callback) {
  223. chrome.runtime.sendMessage({
  224. type: MSG_TYPE.MENU_SAVED
  225. }, callback);
  226. };
  227. /**
  228. * 判断menu是否已经设置过了,判断方法是:
  229. * 随便挑选一个Menu项,看它是否在localStorage中被存储过了
  230. * @private
  231. */
  232. let _didMenuSettingSaved = function (callback) {
  233. let flag = !!localStorage.getItem('MENU_PAGE_ENCODING');
  234. if (callback && typeof callback === 'function') {
  235. callback(flag);
  236. } else {
  237. return flag;
  238. }
  239. };
  240. /**
  241. * 默认的菜单列表
  242. * @returns {string[]}
  243. * @private
  244. */
  245. let _getDefaultContextMenus = function () {
  246. return [
  247. 'MENU_PAGE_ENCODING',
  248. 'MENU_QRCODE_CREATE',
  249. 'MENU_QRCODE_DECODE',
  250. 'MENU_PAGE_CAPTURE',
  251. 'MENU_COLOR_PICKER',
  252. 'MENU_IMAGE_BASE64',
  253. 'MENU_STR_ENDECODE',
  254. 'MENU_JSON_FORMAT',
  255. 'MENU_CODE_FORMAT'
  256. ];
  257. };
  258. return {
  259. getAllOpts: _getAllOpts,
  260. setOptsFromBgPage: _setOptsFromBgPage,
  261. getOptsFromBgPage: _getOptsFromBgPage,
  262. getOptions: _getOptions,
  263. setOptions: _setOptions,
  264. getMenuOpts: _getMenuOpts,
  265. didMenuSettingSaved: _didMenuSettingSaved,
  266. getDefaultContextMenus: _getDefaultContextMenus,
  267. askMenuSavedOrNot: _askMenuSavedOrNot
  268. };
  269. })();