kopia lustrzana https://github.com/wagtail/wagtail
Added LineBreakHandler to resolve missing line breaks
rodzic
f28a4c4d2a
commit
54ad64e431
|
@ -276,6 +276,7 @@ Contributors
|
|||
* Ben Weatherman
|
||||
* Carlo Ascani
|
||||
* Julian Gallo
|
||||
* Dan Dietz
|
||||
|
||||
Translators
|
||||
===========
|
||||
|
|
|
@ -215,11 +215,24 @@ class HorizontalRuleHandler(AtomicBlockEntityElementHandler):
|
|||
return Entity('HORIZONTAL_RULE', 'IMMUTABLE', {})
|
||||
|
||||
|
||||
class LineBreakHandler:
|
||||
def handle_starttag(self, name, attrs, state, contentstate):
|
||||
if state.current_block is None:
|
||||
# ignore line breaks that exist at the top level
|
||||
return
|
||||
|
||||
state.current_block.text += '\n'
|
||||
|
||||
def handle_endtag(self, name, state, contentstate):
|
||||
pass
|
||||
|
||||
|
||||
class HtmlToContentStateHandler(HTMLParser):
|
||||
def __init__(self, features=()):
|
||||
self.paragraph_handler = BlockElementHandler('unstyled')
|
||||
self.element_handlers = HTMLRuleset({
|
||||
'p': self.paragraph_handler
|
||||
'p': self.paragraph_handler,
|
||||
'br': LineBreakHandler(),
|
||||
})
|
||||
for feature in features:
|
||||
rule = feature_registry.get_converter_rule('contentstate', feature)
|
||||
|
|
|
@ -436,6 +436,38 @@ class TestHtmlToContentState(TestCase):
|
|||
}
|
||||
})
|
||||
|
||||
def test_br_element_in_paragraph(self):
|
||||
converter = ContentstateConverter(features=[])
|
||||
result = json.loads(converter.from_database_format(
|
||||
'''
|
||||
<p>before<br/>after</p>
|
||||
'''
|
||||
))
|
||||
self.assertContentStateEqual(result, {
|
||||
'entityMap': {},
|
||||
'blocks': [
|
||||
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'before\nafter',
|
||||
'type': 'unstyled'}
|
||||
],
|
||||
})
|
||||
|
||||
def test_br_element_between_paragraphs(self):
|
||||
converter = ContentstateConverter(features=[])
|
||||
result = json.loads(converter.from_database_format(
|
||||
'''
|
||||
<p>before</p>
|
||||
<br />
|
||||
<p>after</p>
|
||||
'''
|
||||
))
|
||||
self.assertContentStateEqual(result, {
|
||||
'entityMap': {},
|
||||
'blocks': [
|
||||
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'before', 'type': 'unstyled'},
|
||||
{'key': '00000', 'inlineStyleRanges': [], 'entityRanges': [], 'depth': 0, 'text': 'after', 'type': 'unstyled'}
|
||||
],
|
||||
})
|
||||
|
||||
def test_block_element_in_empty_paragraph(self):
|
||||
converter = ContentstateConverter(features=['hr'])
|
||||
result = json.loads(converter.from_database_format(
|
||||
|
|
Ładowanie…
Reference in New Issue