fix: check for excluded marks in isMarkActive, fix #1388

This commit is contained in:
Philipp Kühn
2021-05-29 21:02:59 +02:00
parent a66db3eaa9
commit 3c4cc96fee

View File

@@ -49,7 +49,8 @@ export default function isMarkActive(
return false return false
} }
const range = markRanges // calculate range of matched mark
const matchedRange = markRanges
.filter(markRange => { .filter(markRange => {
if (!type) { if (!type) {
return true return true
@@ -60,8 +61,32 @@ export default function isMarkActive(
.filter(markRange => objectIncludes(markRange.mark.attrs, attributes)) .filter(markRange => objectIncludes(markRange.mark.attrs, attributes))
.reduce((sum, markRange) => { .reduce((sum, markRange) => {
const size = markRange.to - markRange.from const size = markRange.to - markRange.from
return sum + size return sum + size
}, 0) }, 0)
// calculate range of marks that excludes the searched mark
// for example `code` doesnt allow any other marks
const excludedRange = markRanges
.filter(markRange => {
if (!type) {
return true
}
return markRange.mark.type !== type
&& markRange.mark.type.excludes(type)
})
.reduce((sum, markRange) => {
const size = markRange.to - markRange.from
return sum + size
}, 0)
// we only include the result of `excludedRange`
// if there is a match at all
const range = matchedRange > 0
? matchedRange + excludedRange
: matchedRange
return range >= selectionRange return range >= selectionRange
} }