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.

36 lines
847B

  1. <?php
  2. namespace App\BbCode\Tag;
  3. use Knockout\BbCode\Tag\TagInterface;
  4. use Knockout\BbCode\Tokenizer\Tag as TokenTag;
  5. class Link implements TagInterface
  6. {
  7. const REG_EXP_VALID_URL = '~https?://[a-zA-Z0-9_\-.:/#?]+~';
  8. public function format(TokenTag $tokenTag): string
  9. {
  10. $args = $tokenTag->parseArgument();
  11. $url = $args['href'] ?? null;
  12. if (!preg_match(self::REG_EXP_VALID_URL, $url)) {
  13. $simpleTag = new Unknown();
  14. return $simpleTag->format($tokenTag);
  15. }
  16. return "<a href=\"{$url}\" target=\"_blank\">{$tokenTag->getText()}</a>";
  17. }
  18. public function getName(): string
  19. {
  20. return 'url';
  21. }
  22. public function getOriginalText(TokenTag $tokenTag) : string
  23. {
  24. return "[url={$tokenTag->getArgument()}]{$tokenTag->getText()}[/url]";
  25. }
  26. }