index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * FeHelper 代码美化工具
  3. */
  4. new Vue({
  5. el: '#pageContainer',
  6. data: {
  7. selectedType: 'Javascript',
  8. sourceContent: '',
  9. resultContent: '',
  10. showCopyBtn: false
  11. },
  12. mounted: function () {
  13. // 在tab创建或者更新时候,监听事件,看看是否有参数传递过来
  14. chrome.runtime.onMessage.addListener((request, sender, callback) => {
  15. let MSG_TYPE = Tarp.require('../static/js/msg_type');
  16. if (request.type === MSG_TYPE.TAB_CREATED_OR_UPDATED && request.event === MSG_TYPE.CODE_BEAUTIFY) {
  17. if (request.content) {
  18. this.sourceContent = request.content;
  19. this.format();
  20. }
  21. }
  22. });
  23. //输入框聚焦
  24. this.$refs.codeSource.focus();
  25. },
  26. methods: {
  27. format: function () {
  28. if(!this.sourceContent.trim()) {
  29. return alert('内容为空,不需要美化处理!');
  30. }
  31. let beauty = (result) => {
  32. result = result.replace(/>/g, '&gt;').replace(/</g, '&lt;');
  33. result = '<pre class="language-' + this.selectedType.toLowerCase() + ' line-numbers"><code>' + result + '</code></pre>';
  34. this.resultContent = result;
  35. // 代码高亮
  36. this.$nextTick(() => {
  37. Prism.highlightAll();
  38. this.showCopyBtn = true;
  39. });
  40. };
  41. switch (this.selectedType) {
  42. case 'Javascript':
  43. let opts = {
  44. brace_style: "collapse",
  45. break_chained_methods: false,
  46. indent_char: " ",
  47. indent_scripts: "keep",
  48. indent_size: "4",
  49. keep_array_indentation: true,
  50. preserve_newlines: true,
  51. space_after_anon_function: true,
  52. space_before_conditional: true,
  53. unescape_strings: false,
  54. wrap_line_length: "120",
  55. "max_preserve_newlines": "5",
  56. "jslint_happy": false,
  57. "end_with_newline": false,
  58. "indent_inner_html": false,
  59. "comma_first": false,
  60. "e4x": false
  61. };
  62. beauty(Tarp.require('../code-beautify/beautify.js').js_beautify(this.sourceContent, opts));
  63. break;
  64. case 'CSS':
  65. Tarp.require('../code-beautify/beautify-css.js').css_beautify(this.sourceContent, {}, result => beauty(result));
  66. break;
  67. case 'HTML':
  68. Tarp.require('../code-beautify/beautify-html.js');
  69. beauty(html_beautify(this.sourceContent));
  70. break;
  71. case 'SQL':
  72. Tarp.require('../code-beautify/vkbeautify.js');
  73. beauty(vkbeautify.sql(this.sourceContent, 4));
  74. break;
  75. default:
  76. Tarp.require('../code-beautify/vkbeautify.js');
  77. beauty(vkbeautify.xml(this.sourceContent));
  78. }
  79. },
  80. copy: function(){
  81. let _copyToClipboard = function (text) {
  82. let input = document.createElement('textarea');
  83. input.style.position = 'fixed';
  84. input.style.opacity = 0;
  85. input.value = text;
  86. document.body.appendChild(input);
  87. input.select();
  88. document.execCommand('Copy');
  89. document.body.removeChild(input);
  90. alert('复制成功,随处粘贴可用!')
  91. };
  92. let txt = this.$refs.jfContentBox.textContent;
  93. _copyToClipboard(txt);
  94. }
  95. }
  96. });