A bare bones front-end for knockout designed for maximum compatibility with "obsolete" browsers
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.4KB

  1. <?php
  2. namespace App\Helper;
  3. // formatting
  4. use App\BbCode\Tag\Unknown;
  5. use App\BbCode\Tag\Text;
  6. use App\BbCode\Tag\Bold;
  7. use App\BbCode\Tag\Italic;
  8. use App\BbCode\Tag\Underline;
  9. use App\BbCode\Tag\Strikethrough;
  10. use App\BbCode\Tag\Spoiler;
  11. use App\BbCode\Tag\HeadingOne;
  12. use App\BbCode\Tag\HeadingTwo;
  13. use App\BbCode\Tag\Link;
  14. use App\BbCode\Tag\Code;
  15. // quotes
  16. use App\BbCode\Tag\Quote;
  17. use App\BbCode\Tag\Blockquote;
  18. // embeds
  19. use App\BbCode\Tag\Image;
  20. use App\BbCode\Tag\Twitter;
  21. use App\BbCode\Tag\Youtube;
  22. use App\BbCode\Tag\Video;
  23. use Knockout\BbCode\BbCode as Parser;
  24. use Knockout\BbCode\Tokenizer\Tokenizer;
  25. class BBCode {
  26. private $tokens;
  27. public function __construct($content)
  28. {
  29. $this->tokens = (new Tokenizer())->tokenize($content);
  30. }
  31. public function render()
  32. {
  33. $parser = new Parser();
  34. $unknown = new Unknown();
  35. $parser->addTag($unknown);
  36. $text = new Text();
  37. $parser->addTag($text);
  38. $bold = new Bold();
  39. $parser->addTag($bold);
  40. $italic = new Italic();
  41. $parser->addTag($italic);
  42. $underline = new Underline();
  43. $parser->addTag($underline);
  44. $strikethrough = new Strikethrough();
  45. $parser->addTag($strikethrough);
  46. $image = new Image();
  47. $parser->addTag($image);
  48. $link = new Link();
  49. $parser->addTag($link);
  50. $code = new Code();
  51. $parser->addTag($code);
  52. $quote = new Quote();
  53. $parser->addTag($quote);
  54. $blockquote = new Blockquote();
  55. $parser->addTag($blockquote);
  56. $twitter = new Twitter();
  57. $parser->addTag($twitter);
  58. $youtube = new Youtube();
  59. $parser->addTag($youtube);
  60. $video = new Video();
  61. $parser->addTag($video);
  62. $tags = [
  63. $unknown,
  64. $text,
  65. $bold,
  66. $italic,
  67. $underline,
  68. $strikethrough,
  69. $image,
  70. $link,
  71. $code,
  72. $quote,
  73. $blockquote,
  74. $twitter,
  75. $youtube,
  76. $video
  77. ];
  78. $anyChild = [
  79. $bold,
  80. $quote,
  81. $blockquote,
  82. $text,
  83. $unknown
  84. ];
  85. foreach ($anyChild as $parent) {
  86. foreach ($tags as $tag) {
  87. $parser->addAllowedChildTag($parent, $tag);
  88. }
  89. }
  90. return $parser->format($this->tokens);
  91. }
  92. }