settings.js 7.7 KB

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