settings.js 7.0 KB

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