mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Fix html_helper to indent styles in {}
This commit is contained in:
parent
c28e5a9caf
commit
94e28625f6
|
@ -270,8 +270,9 @@ CLASS lcl_html_helper DEFINITION FINAL.
|
|||
PUBLIC SECTION.
|
||||
CONSTANTS: c_indent_size TYPE i VALUE 2.
|
||||
|
||||
DATA mv_html TYPE string READ-ONLY.
|
||||
DATA mv_indent TYPE i READ-ONLY.
|
||||
DATA mv_html TYPE string READ-ONLY.
|
||||
DATA mv_indent TYPE i READ-ONLY.
|
||||
DATA mv_within_style TYPE i READ-ONLY.
|
||||
|
||||
METHODS add IMPORTING iv_chunk TYPE any.
|
||||
METHODS reset.
|
||||
|
@ -327,18 +328,26 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
|||
CONSTANTS lc_single_tags_re TYPE string " HTML5 singleton tags
|
||||
VALUE '<(area|base|br|col|command|embed|hr|img|input|link|meta|param|source|!)'.
|
||||
|
||||
DATA lv_tags TYPE i.
|
||||
DATA lv_tags_open TYPE i.
|
||||
DATA lv_tags_close TYPE i.
|
||||
DATA lv_tags_single TYPE i.
|
||||
DATA lv_close_offs TYPE i.
|
||||
DATA lv_shift_back TYPE i.
|
||||
DATA lv_tags TYPE i.
|
||||
DATA lv_tags_open TYPE i.
|
||||
DATA lv_tags_close TYPE i.
|
||||
DATA lv_tags_single TYPE i.
|
||||
DATA lv_close_offs TYPE i.
|
||||
DATA lv_shift_back TYPE i.
|
||||
DATA lv_style_tag_open TYPE i.
|
||||
DATA lv_style_tag_close TYPE i.
|
||||
DATA lv_curly TYPE i.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '</' IN iv_str MATCH OFFSET lv_close_offs.
|
||||
IF sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0. " Found close tag @beginning
|
||||
lv_shift_back = 1.
|
||||
ENDIF.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '}' IN iv_str MATCH OFFSET lv_close_offs. " Find close } @beginning
|
||||
IF mv_within_style > 0 AND sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0.
|
||||
lv_shift_back = 1.
|
||||
ENDIF.
|
||||
|
||||
mv_html = mv_html
|
||||
&& repeat( val = ` ` occ = ( mv_indent - lv_shift_back ) * c_indent_size )
|
||||
&& iv_str
|
||||
|
@ -350,6 +359,17 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
|||
|
||||
lv_tags_open = lv_tags - lv_tags_close - lv_tags_single.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<style' IN iv_str MATCH COUNT lv_style_tag_open IGNORING CASE.
|
||||
FIND ALL OCCURRENCES OF '</style>' IN iv_str MATCH COUNT lv_style_tag_close IGNORING CASE.
|
||||
mv_within_style = mv_within_style + lv_style_tag_open - lv_style_tag_close.
|
||||
|
||||
IF mv_within_style > 0.
|
||||
FIND ALL OCCURRENCES OF '{' IN iv_str MATCH COUNT lv_curly.
|
||||
lv_tags_open = lv_tags_open + lv_curly.
|
||||
FIND ALL OCCURRENCES OF '}' IN iv_str MATCH COUNT lv_curly.
|
||||
lv_tags_close = lv_tags_close + lv_curly.
|
||||
ENDIF.
|
||||
|
||||
" More-less logic chosen due to possible double tags in a line '<a><b>'
|
||||
IF lv_tags_open > lv_tags_close.
|
||||
mv_indent = mv_indent + 1.
|
||||
|
|
|
@ -1166,7 +1166,8 @@ CLASS ltcl_html_helper DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
|
|||
indent1 FOR TESTING RAISING lcx_exception,
|
||||
indent2 FOR TESTING RAISING lcx_exception,
|
||||
indent3 FOR TESTING RAISING lcx_exception,
|
||||
indent4 FOR TESTING RAISING lcx_exception.
|
||||
indent4 FOR TESTING RAISING lcx_exception,
|
||||
style1 FOR TESTING RAISING lcx_exception.
|
||||
|
||||
METHODS:
|
||||
setup,
|
||||
|
@ -1239,6 +1240,26 @@ CLASS ltcl_html_helper IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD style1.
|
||||
|
||||
mo_html->add( '<style type="text/css">' ).
|
||||
mo_html->add( '.class1 { color: red }' ).
|
||||
mo_html->add( '.class2 {' ).
|
||||
mo_html->add( 'color: red' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = ' color: red' ).
|
||||
|
||||
mo_html->add( '}' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = ' }' ).
|
||||
|
||||
mo_html->add( '</style>' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = '</style>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
|
Loading…
Reference in New Issue
Block a user