Curse
Curse is a library for capturing and restoring selections—primarily for use in
HTML elements that are contenteditable
, where text may stay the same, but
the rendered HTML may change.
Install
bower install curse
Usage
Create a new Curse
and pass it an HTMLElement
. The curse is capable of
capturing and restoring the user's selection inside of that element.
var element = document.querySelector('#editor');
var curse = new Curse(element);
element.innerText = 'Hello world';
curse.capture();
element.innerText = 'Hello, world';
curse.restore();
Note that a Curse
is dumb. In the above example, if the user's selection was
"llo w"
, after the text was changed and the cursor restored, the user's
selection would have been "llo, "
. It is up to the implementer to handle
changes in text length by adjusting curse.start
and curse.end
:
element.innerText = 'Hello world';
curse.capture();
element.innerText = 'Hello, world';
curse.end++;
curse.restore();
Curse still gets a little confused when it sees certain types of HTML elements
in a contenteditable. If you run across something, please open an
issue.
Development
Tests use testem and run in the Chrome
browser.
Install:
git clone git@github.com:slowink/curse.git
cd curse
npm install
Test:
npm test
In order to run the example page (useful for experimentation):
npm run dev