settings.js 7.8 KB

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