automatic.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. module.exports = (() => {
  2. let formattedCodes = '';
  3. /**
  4. * 代码美化
  5. */
  6. let format = (fileType, source, callback) => {
  7. let beauty = txtResult => {
  8. formattedCodes = txtResult;
  9. txtResult = txtResult.replace(/>/g, '&gt;').replace(/</g, '&lt;');
  10. txtResult = '<pre class="brush: ' + fileType.toLowerCase() + ';toolbar:false">' + txtResult + '</pre>';
  11. $('#fehelper_tips').siblings().remove().end().after('<pre id="fehelper_beautified_codes">' + txtResult + '</pre>');
  12. // 代码高亮
  13. let map = {
  14. core: '../static/vendor/syntaxhighlighter/shCore.js',
  15. Javascript: '../static/vendor/syntaxhighlighter/shBrushJScript.js',
  16. CSS: '../static/vendor/syntaxhighlighter/shBrushCss.js'
  17. };
  18. Tarp.require(map.core, true).then(SH => {
  19. Tarp.require(map[fileType], true).then(SH => {
  20. SH.defaults['toolbar'] = false;
  21. SH.highlight();
  22. });
  23. });
  24. callback && callback();
  25. };
  26. switch (fileType) {
  27. case 'Javascript':
  28. let opts = {
  29. brace_style: "collapse",
  30. break_chained_methods: false,
  31. indent_char: " ",
  32. indent_scripts: "keep",
  33. indent_size: "4",
  34. keep_array_indentation: true,
  35. preserve_newlines: true,
  36. space_after_anon_function: true,
  37. space_before_conditional: true,
  38. unescape_strings: false,
  39. wrap_line_length: "120"
  40. };
  41. Tarp.require('../code-beautify/beautify.js');
  42. js_beautify(source, opts, resp => beauty(resp));
  43. break;
  44. case 'CSS':
  45. Tarp.require('../code-beautify/beautify-css.js');
  46. css_beautify(source, {}, resp => beauty(resp));
  47. break;
  48. }
  49. };
  50. /**
  51. * 检测
  52. * @returns {boolean}
  53. */
  54. let detect = () => {
  55. let ext = location.pathname.substring(location.pathname.lastIndexOf(".") + 1).toLowerCase();
  56. let fileType = ({'js': 'Javascript', 'css': 'CSS'})[ext];
  57. if (!fileType || document.contentType.toLowerCase() === 'text/html') {
  58. return false;
  59. }
  60. let source = document.body.textContent;
  61. let cssUrl = chrome.extension.getURL('code-beautify/automatic.css');
  62. $('<link href="' + cssUrl + '" rel="stylesheet" type="text/css" />').appendTo(document.head);
  63. $(document.body).addClass('show-tipsbar');
  64. let tipsBar = $('<div id="fehelper_tips">' +
  65. '<span class="desc">FeHelper检测到这可能是<i>' + fileType + '</i>代码,<span class="ask">是否进行美化处理?</span></span>' +
  66. '<button class="yes">代码美化</button>' +
  67. '<button class="no">放弃!</button>' +
  68. '<button class="copy hide">复制美化过的代码</button>' +
  69. '<button class="close"><span></span></button>' +
  70. '<a class="forbid">彻底关闭这个功能!&gt;&gt;</a>' +
  71. '</div>').prependTo('body');
  72. tipsBar.find('button.yes').click((evt) => {
  73. tipsBar.find('button.yes,button.no').hide();
  74. $('<span class="doing">正在努力,请稍后...</span>').insertBefore(tipsBar.find('button.yes'));
  75. format(fileType, source, () => {
  76. tipsBar.find('span.ask').text('已为您美化完毕!');
  77. $(document.body).removeClass('show-tipsbar').addClass('show-beautified');
  78. });
  79. });
  80. tipsBar.find('a.forbid').click((evt) => {
  81. evt.preventDefault();
  82. chrome.runtime.sendMessage({
  83. type: MSG_TYPE.OPEN_OPTIONS_PAGE
  84. });
  85. });
  86. tipsBar.find('button.no,button.close').click((evt) => {
  87. $(document.body).removeClass('show-tipsbar');
  88. });
  89. tipsBar.find('button.copy').click((evt) => {
  90. _copyToClipboard(formattedCodes);
  91. });
  92. };
  93. /**
  94. * chrome 下复制到剪贴板
  95. * @param text
  96. */
  97. let _copyToClipboard = function (text) {
  98. let input = document.createElement('textarea');
  99. input.style.position = 'fixed';
  100. input.style.opacity = 0;
  101. input.value = text;
  102. document.body.appendChild(input);
  103. input.select();
  104. document.execCommand('Copy');
  105. document.body.removeChild(input);
  106. alert('代码复制成功,随处粘贴可用!')
  107. };
  108. return {
  109. detect: detect
  110. }
  111. })();