Skip to content

Commit 019b983

Browse files
committed
Decrease the nesting level when parent block gets removed
1 parent 4f77536 commit 019b983

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

aztec/src/main/kotlin/org/wordpress/aztec/formatting/BlockFormatter.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ class BlockFormatter(editor: AztecText, val listStyle: ListStyle, val quoteStyle
169169

170170
fun <T : IAztecBlockSpan> removeEntireBlock(type: Class<T>) {
171171
editableText.getSpans(selectionStart, selectionEnd, type).forEach {
172+
IAztecNestable.pullUp(editableText, selectionStart, selectionEnd, it.nestingLevel)
172173
editableText.removeSpan(it)
173174
}
174175
}
@@ -269,6 +270,9 @@ class BlockFormatter(editor: AztecText, val listStyle: ListStyle, val quoteStyle
269270
BlockHandler.set(editableText, makeBlockSpan(span.javaClass, textFormat, span.nestingLevel, span.attributes), endOfBounds, spanEnd)
270271
} else {
271272
// tough luck. The span is fully inside the line so it gets axed.
273+
274+
IAztecNestable.pullUp(editableText, editableText.getSpanStart(span), editableText.getSpanEnd(span), span.nestingLevel)
275+
272276
editableText.removeSpan(span)
273277
}
274278
}
@@ -705,15 +709,23 @@ class BlockFormatter(editor: AztecText, val listStyle: ListStyle, val quoteStyle
705709
when (textFormat) {
706710
AztecTextFormat.FORMAT_ORDERED_LIST -> liftListBlock(AztecOrderedListSpan::class.java, start, end)
707711
AztecTextFormat.FORMAT_UNORDERED_LIST -> liftListBlock(AztecUnorderedListSpan::class.java, start, end)
708-
AztecTextFormat.FORMAT_QUOTE -> editableText.getSpans(start, end, AztecQuoteSpan::class.java).forEach { editableText.removeSpan(it) }
709-
else -> editableText.getSpans(start, end, ParagraphSpan::class.java).forEach { editableText.removeSpan(it) }
712+
AztecTextFormat.FORMAT_QUOTE -> editableText.getSpans(start, end, AztecQuoteSpan::class.java).forEach {
713+
IAztecNestable.pullUp(editableText, start, end, it.nestingLevel)
714+
editableText.removeSpan(it)
715+
}
716+
else -> editableText.getSpans(start, end, ParagraphSpan::class.java).forEach {
717+
IAztecNestable.pullUp(editableText, start, end, it.nestingLevel)
718+
editableText.removeSpan(it)
719+
}
710720
}
711721
}
712722

713723
private fun liftListBlock(listSpan: Class<out AztecListSpan>, start: Int, end: Int) {
714724
editableText.getSpans(start, end, listSpan).forEach {
715725
val wrapper = SpanWrapper(editableText, it)
716726
editableText.getSpans(wrapper.start, wrapper.end, AztecListItemSpan::class.java).forEach { editableText.removeSpan(it) }
727+
728+
IAztecNestable.pullUp(editableText, start, end, wrapper.span.nestingLevel)
717729
wrapper.remove()
718730
}
719731
}

aztec/src/main/kotlin/org/wordpress/aztec/spans/IAztecNestable.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ interface IAztecNestable {
3636
return spans
3737
}
3838

39+
fun pullUp(spannable: Spannable, start: Int, end: Int, fromLevel: Int, pullBy: Int = 1): List<SpanWrapper<IAztecNestable>> {
40+
val spans = SpanWrapper.getSpans(spannable, start, end, IAztecNestable::class.java)
41+
.filter { spannable.getSpanStart(it.span) >= start && spannable.getSpanEnd(it.span) <= end }
42+
.filter { it.span.nestingLevel >= fromLevel }
43+
44+
spans.forEach {
45+
it.span.nestingLevel -= pullBy
46+
}
47+
48+
return spans
49+
}
50+
3951
fun getParent(spannable: Spannable, child: SpanWrapper<out IAztecNestable>): SpanWrapper<out IAztecNestable>? {
4052
return SpanWrapper.getSpans<IAztecNestable>(spannable, child.start, child.start + 1)
4153
.sortedBy { it.span.nestingLevel }

0 commit comments

Comments
 (0)