mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-02-20 07:04:39 +01:00
There is currently no definition of this in the docs, so it's very hard to understand what this function is supposed to do, and whether it's buggy. I've written this definition based on Ian Taylor's messages on Slack [1]: Jason: Why does unhangRange only unhang the end of a range and not the start as well? Trying to tell if this is a bug or some logic I'm not following. If the start of the range is at the last index of a text shouldn't unhangRange advance that to the next node? ianstormtaylor: I don’t believe it’s a bug. It was designed to handle ranges that result from triple-clicks. Not that there might not be improvements, or that there might not be some other better way to solve for triple-clicks, or that there might be a better name for it Jason: When you say triple-click handling you mean the fact that the browser selection by default gets placed from start of line to start of next line? In that cause yes the end of the selection is where the problem is. If looked at as a more generic implementation it seems like unhanging the start in cases where you have {text: 'foo|'}, {text: 'bar|', bold: true} and it makes sense to normalize the selection to {text: 'foo'}, {text: '|bar|', bold: true} which helps in some cases by avoiding splits that immediately get merged back, etc. ianstormtaylor: Yup, that’s exactly right. It was created for the triple-click case. I agree that something to handle the start-edged cases would be nice too. But folks in GitHub discussions have been kind of assuming that the code meant to be written for both, and that it’s a bug to fix, which isn’t true. I’m not sure if there are gotchas to expanding the scope to handle both edges [1]: https://slate-js.slack.com/archives/CC58ZGGU9/p1632188507024300