def test_owns_tags_that_can_be_rendered(self): # Setup tag_pool.register_tag(FooTagAlt) tag_pool.register_tag(BarTag) _init_bbcode_tags(self.parser) # Run & check for bbcodes_text, expected_html_text in self.TAGS_TESTS: result = self.parser.render(bbcodes_text) self.assertEqual(result, expected_html_text)
def test_can_not_register_invalid_tags(self): # Setup number_of_tags_before = len(tag_pool.get_tags()) # Run & check with self.assertRaises(ImproperlyConfigured): class ErrnoneousTag4: pass tag_pool.register_tag(ErrnoneousTag4) number_of_tags_after = len(tag_pool.get_tags()) self.assertEqual(number_of_tags_before, number_of_tags_after)
def test_cannot_register_tags_with_incorrect_parent_classes(self): # Setup number_of_tags_before = len(tag_pool.get_tags()) # Run & check with pytest.raises(ImproperlyConfigured): class ErrnoneousTag4: pass tag_pool.register_tag(ErrnoneousTag4) number_of_tags_after = len(tag_pool.get_tags()) assert number_of_tags_before == number_of_tags_after
def test_tags_can_be_rendered(self): # Setup parser_loader = BBCodeParserLoader(parser=self.parser) tag_pool.register_tag(FooTagAlt) tag_pool.register_tag(BarTag) parser_loader.init_bbcode_tags() # Run & check for bbcodes_text, expected_html_text in self.TAGS_TESTS: result = self.parser.render(bbcodes_text) assert result == expected_html_text
def test_cannot_register_tags_that_are_already_stored_in_the_database(self): # Setup BBCodeTag.objects.create( tag_definition='[tt]{TEXT}[/tt]', html_replacement='<span>{TEXT}</span>') # Run with pytest.raises(TagAlreadyCreated): class ErrnoneousTag9(ParserBBCodeTag): name = 'tt' definition_string = '[tt]{TEXT}[/tt]' format_string = '<span>{TEXT}</span>' tag_pool.register_tag(ErrnoneousTag9)
def test_should_raise_if_a_tag_is_registered_twice(self): # Setup number_of_tags_before = len(tag_pool.get_tags()) tag_pool.register_tag(FooTag) # Run & check # Let's add it a second time. We should catch an exception with pytest.raises(TagAlreadyRegistered): tag_pool.register_tag(FooTag) # Let's make sure we have the same number of tags as before tag_pool.unregister_tag(FooTag) number_of_tags_after = len(tag_pool.get_tags()) assert number_of_tags_before == number_of_tags_after
def test_cannot_register_tags_that_are_already_stored_in_the_database( self): # Setup BBCodeTag.objects.create(tag_definition='[tt]{TEXT}[/tt]', html_replacement='<span>{TEXT}</span>') # Run with pytest.raises(TagAlreadyCreated): class ErrnoneousTag9(ParserBBCodeTag): name = 'tt' definition_string = '[tt]{TEXT}[/tt]' format_string = '<span>{TEXT}</span>' tag_pool.register_tag(ErrnoneousTag9)
def test_placeholders_can_be_used_with_tags(self): # Setup parser_loader = BBCodeParserLoader(parser=self.parser) placeholder_pool.register_placeholder(FooPlaceholder) placeholder_pool.register_placeholder(DummyPlaceholder) tag_pool.register_tag(FooBBCodeTag) tag_pool.register_tag(DummyBBCodeTag) parser_loader.init_bbcode_placeholders() parser_loader.init_bbcode_tags() # Run & check for bbcodes_text, expected_html_text in self.TAGS_TESTS: result = self.parser.render(bbcodes_text) assert result == expected_html_text placeholder_pool.unregister_placeholder(FooPlaceholder) placeholder_pool.unregister_placeholder(DummyPlaceholder)
href = 'tel:{}'.format(value) return '<a href="{0}">{0}</a>'.format(href, value) class StartsWithATag(BBCodeTag): name = 'startswitha' definition_string = '[startswitha]{STARTSWITH=a}[/startswitha]' format_string = '<span>{STARTSWITH=a}</span>' class RoundedBBCodeTag(BBCodeTag): name = 'rounded' class Options: strip = False def render(self, value, option=None, parent=None): if option and re.search(color_re, option) is not None: return '<div class="rounded" style="border-color:{};">{}</div>'.format( option, value) return '<div class="rounded">{}</div>'.format(value) tag_pool.register_tag(SubTag) tag_pool.register_tag(PreTag) tag_pool.register_tag(SizeTag) tag_pool.register_tag(FruitTag) tag_pool.register_tag(PhoneLinkTag) tag_pool.register_tag(StartsWithATag) tag_pool.register_tag(RoundedBBCodeTag)
# -*- coding: utf-8 -*- from __future__ import unicode_literals from precise_bbcode.bbcode.tag import BBCodeTag from precise_bbcode.tag_pool import tag_pool class LoadDummyTag(BBCodeTag): name = 'loaddummy02' definition_string = '[loaddummy02]{TEXT}[/loaddummy02]' format_string = '<loaddummy>{TEXT}</loaddummy>' tag_pool.register_tag(LoadDummyTag)
class QuoteTag(BBCodeTag): name = 'quote' class Options: strip = True swallow_trailing_newline = True def render(self, value, option=None, parent=None): if option: return """ <div class="bbcode-quote"> <p class="mb-0">{}</p> <footer class="blockquote-footer">{}</footer> </div>""".format(value, option) else: return """ <div class="bbcode-quote"> <p class="mb-0">{}</p> </div>""".format(value) tag_pool.register_tag(ImageTag) tag_pool.register_tag(YoutubeTag) tag_pool.register_tag(OlListTag) tag_pool.register_tag(UlListTag) tag_pool.register_tag(ListItemTag) tag_pool.register_tag(QuoteTag) tag_pool.register_tag(CodeTag)
newline_closes = True same_tag_closes = True end_tag_closes = True strip = True class EscapeTag(BBCodeTag): name = 'escape' definition_string = '[escape]{TEXT}[/escape]' format_string = '{TEXT}' class Options: render_embedded = False tag_pool.register_tag(SpoilerTag) tag_pool.register_tag(SizeTag) tag_pool.register_tag(UserTag) tag_pool.register_tag(CodeTag) tag_pool.register_tag(FontTag) tag_pool.register_tag(UlTag) tag_pool.register_tag(OlTag) tag_pool.register_tag(LiTag) tag_pool.register_tag(HrTag) tag_pool.register_tag(ShadowTag) tag_pool.register_tag(AnchorTag) tag_pool.register_tag(QuoteTag) tag_pool.register_tag(UncheckedBoxTag) tag_pool.register_tag(CheckedBoxTag) tag_pool.register_tag(EscapeTag)
href = 'tel:{}'.format(value) # Render return '<a href="{0}">{0}</a>'.format(href, value) class StartsWithATag(BBCodeTag): name = 'startswitha' definition_string = '[startswitha]{STARTSWITH=a}[/startswitha]' format_string = '<span>{STARTSWITH=a}</span>' class RoundedBBCodeTag(BBCodeTag): name = 'rounded' class Options: strip = False def render(self, value, option=None, parent=None): if option and re.search(color_re, option) is not None: return '<div class="rounded" style="border-color:{};">{}</div>'.format(option, value) return '<div class="rounded">{}</div>'.format(value) tag_pool.register_tag(SubTag) tag_pool.register_tag(PreTag) tag_pool.register_tag(SizeTag) tag_pool.register_tag(FruitTag) tag_pool.register_tag(PhoneLinkTag) tag_pool.register_tag(StartsWithATag) tag_pool.register_tag(RoundedBBCodeTag)
from django.db import models from django.utils.html import escape from django import forms import datetime import hashlib import re from django.utils import timezone from precise_bbcode.bbcode.tag import BBCodeTag from precise_bbcode.tag_pool import tag_pool """ class SmallBBCodeTag(BBCodeTag): name = 'small' definition_string = '[small]{TEXT}[/small]' format_string = '<span style="font-size: 8px">{TEXT}</span>' class Options: render_embedded = True strip = False tag_pool.register_tag(SmallBBCodeTag) class BigBBCodeTag(BBCodeTag): name = 'big' definition_string = '[big]{TEXT}[/big]' format_string = '<span style="font-size: 28px">{TEXT}</span>' class Options: render_embedded = True strip = False
from precise_bbcode.bbcode.tag import BBCodeTag from precise_bbcode.tag_pool import tag_pool class LoadDummyTag(BBCodeTag): name = 'loaddummy02' definition_string = '[loaddummy02]{TEXT}[/loaddummy02]' format_string = '<loaddummy>{TEXT}</loaddummy>' tag_pool.register_tag(LoadDummyTag)
# -*- coding: utf-8 -*- # Standard library imports # Third party imports from precise_bbcode.tag_base import TagBase from precise_bbcode.tag_pool import tag_pool # Local application / specific library imports class SubTag(TagBase): tag_name = "sub" def render(self, name, value, option=None, parent=None): return '<sub>%s</sub>' % value class PreTag(TagBase): tag_name = "pre" render_embedded = False def render(self, name, value, option=None, parent=None): return '<pre>%s</pre>' % value tag_pool.register_tag(SubTag) tag_pool.register_tag(PreTag)
from django.utils import timezone from precise_bbcode.bbcode.tag import BBCodeTag from precise_bbcode.tag_pool import tag_pool class SmallBBCodeTag(BBCodeTag): name = 'small' definition_string = '[small]{TEXT}[/small]' format_string = '<span style="font-size: 8px">{TEXT}</span>' class Options: render_embedded = True strip = False tag_pool.register_tag(SmallBBCodeTag) class BigBBCodeTag(BBCodeTag): name = 'big' definition_string = '[big]{TEXT}[/big]' format_string = '<span style="font-size: 28px">{TEXT}</span>' class Options: render_embedded = True strip = False tag_pool.register_tag(BigBBCodeTag)
class QuoteBBCodeTag(BBCodeTag): name = 'quote' class Options: strip = True def render(self, value, option=None, parent=None): content = str(value) if option: username = str(option).replace('"', '') profile = get_object_or_None(UserProfile, user__username=username) if not profile: try: profile = get_object_or_None(UserProfile, real_name=username) except MultipleObjectsReturned: return '<blockquote><em>{}</em>:<br/>{}</blockquote>'.format( username, content) if profile: return '<blockquote><a href="/users/{}/">{}</a>:<br/>{}</blockquote>'.format( profile.user.username, str(profile.get_display_name()), content) return '<blockquote>{}</blockquote>'.format(content) tag_pool.register_tag(QuoteBBCodeTag)