automatic.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. module.exports = (() => {
  2. /**
  3. * 代码美化
  4. */
  5. let format = (fileType, source) => {
  6. let txtResult = '';
  7. switch (fileType) {
  8. case 'Javascript':
  9. let opts = {
  10. brace_style: "collapse",
  11. break_chained_methods: false,
  12. indent_char: " ",
  13. indent_scripts: "keep",
  14. indent_size: "4",
  15. keep_array_indentation: true,
  16. preserve_newlines: true,
  17. space_after_anon_function: true,
  18. space_before_conditional: true,
  19. unescape_strings: false,
  20. wrap_line_length: "120"
  21. };
  22. Tarp.require('../code-beautify/beautify.js');
  23. txtResult = js_beautify(source, opts);
  24. break;
  25. case 'CSS':
  26. Tarp.require('../code-beautify/beautify-css.js');
  27. txtResult = css_beautify(source);
  28. break;
  29. }
  30. txtResult = txtResult.replace(/>/g, '&gt;').replace(/</g, '&lt;');
  31. txtResult = '<pre class="brush: ' + fileType.toLowerCase() + ';toolbar:false;">' + txtResult + '</pre>';
  32. document.body.innerHTML = txtResult;
  33. // 代码高亮
  34. let map = {
  35. core: '../static/vendor/syntaxhighlighter/shCore.js',
  36. Javascript: '../static/vendor/syntaxhighlighter/shBrushJScript.js',
  37. CSS: '../static/vendor/syntaxhighlighter/shBrushCss.js'
  38. };
  39. Tarp.require(map.core, true).then(SH => {
  40. Tarp.require(map[fileType], true).then(SH => {
  41. SH.defaults['toolbar'] = false;
  42. SH.highlight();
  43. });
  44. });
  45. };
  46. /**
  47. * 检测
  48. * @returns {boolean}
  49. */
  50. let detect = () => {
  51. let ext = location.pathname.substring(location.pathname.lastIndexOf(".") + 1).toLowerCase();
  52. let fileType = ({'js': 'Javascript', 'css': 'CSS'})[ext];
  53. if (!fileType) {
  54. return false;
  55. }
  56. let source = document.body.textContent;
  57. let cssUrl = chrome.extension.getURL('code-beautify/automatic.css');
  58. $('<link href="' + cssUrl + '" rel="stylesheet" type="text/css" />').appendTo(document.head);
  59. $(document.body).addClass('show-tipsbar');
  60. let tipsBar = $('<div id="fehelper_tips">' +
  61. '<span class="desc">FeHelper检测到这可能是<i>' + fileType + '</i>代码,是否进行美化处理?</span>' +
  62. '<button class="yes">代码美化</button>' +
  63. '<button class="no">放弃!</button>' +
  64. '<button class="close"><span></span></button>' +
  65. '<a class="forbid">彻底关闭这个功能!&gt;&gt;</a>' +
  66. '</div>').prependTo('body');
  67. tipsBar.find('button.yes').click((evt) => {
  68. tipsBar.find('button.yes,button.no').hide();
  69. $('<span class="doing">正在努力,请稍后...</span>').insertBefore(tipsBar.find('button.yes'));
  70. format(fileType, source);
  71. $(document.body).removeClass('show-tipsbar').addClass('show-beautified');
  72. });
  73. tipsBar.find('a.forbid').click((evt) => {
  74. evt.preventDefault();
  75. chrome.runtime.sendMessage({
  76. type: MSG_TYPE.OPEN_OPTIONS_PAGE
  77. });
  78. });
  79. tipsBar.find('button.no,button.close').click((evt) => {
  80. $(document.body).removeClass('show-tipsbar');
  81. });
  82. };
  83. return {
  84. detect: detect
  85. }
  86. })();