markdown to bbcode

将markdown文本粘贴至textarea,右键单击文本区,弹出菜单中选择“markdown -> bbcode”

  1. // ==UserScript==
  2. // @name markdown to bbcode
  3. // @namespace https://bbs.kafan.cn/thread-2113607-1-1.html
  4. // @description 将markdown文本粘贴至textarea,右键单击文本区,弹出菜单中选择“markdown -> bbcode”
  5. // @version 0.1
  6. // @author halffog
  7. // @include http*
  8. // @grant none
  9. // ==/UserScript==
  10. (function() {
  11. 'use strict';
  12.  
  13. var textareas = document.getElementsByTagName('textarea');
  14. if (!textareas) return;
  15. function $C(type, arr){
  16. var e = document.createElement(type);
  17. for(var [name, val] in Iterator(arr)){
  18. e.setAttribute(name, val);
  19. }
  20. return e;
  21. }
  22. for (var i = 0; i < textareas.length; i++){
  23. var textarea = textareas[i];
  24. var menuitem = $C('menuitem',{label:'markdown -> bbcode'});
  25. menuitem.addEventListener('click', function(){
  26. var value = textarea.value;
  27. var texts = value.split(/^>\s((?:.|\n>\s)*.*)$/gm);
  28. value = '';
  29. for (var j = 0; j < texts.length; j++){
  30. var text = texts[j];
  31. if (j%2 ==0){
  32. text = text.replace(/^(\#{1,6})((?:.|\n)*?)(\#{1,6})$/gm, function(wholeMatch,m1,m2,m3){
  33. var h_level = m1.length;
  34. return (h_level == m3.length)?'<h' + h_level + '>' + m2 + '</h' + h_level + '>':wholeMatch;
  35. });
  36. text = text.replace(/\*((?:.|\n)*?)\*/g,'[i]$1[/i]');
  37. text = text.replace(/__((?:.|\n)*?)__/g,'[b]$1[/b]');
  38. text = text.replace(/\!\[((?:.|\n)*?)\]\((.*)\)/g,'[img=$2]$1[/img]');
  39. text = text.replace(/\[((?:.|\n)*?)\]\((.*)\)/g,'[url=$2]$1[/url]');
  40. }else{
  41. text = '[code]' + text.replace(/^>\s/gm,'') + '[/code]';
  42. }
  43. value += text;
  44. }
  45. textarea.value = value;
  46. },false);
  47. var menu = $C('menu',{id:'markdown-to-bbcode-' + i,type:'context'});
  48. menu.appendChild(menuitem);
  49. textarea.appendChild(menu);
  50. textarea.setAttribute('contextmenu', menu.id);
  51. }
  52.  
  53. })();