Working Delete Prevention w Rangy11
by jrweinb
HTML
<script src="http://www.timdown.co.uk/rangy/rangy-current/rangy-core.js"></script>
<div class="redactor_ redactor_editor" contenteditable="true" dir="ltr">
<p>hello lorem ipsum ffkk slfa</p>
<p>hello afaf afa a</p>
<br/>
<div class="attachment" contenteditable="false" data-webdocument-id="24" data-url="http%3A%2F%2Fwww.google.com">
<img class="media-img linkified" src="http://www.google.com/logos/doodles/2013/100th-anniversary-of-the-crossword-puzzle-5629550536949760-hp.jpg" />
<div class="media-block">
<h4 class="teaser-title">+Google</h4><a href="http://www.google.com" class="teaser-meta in-media linkified" target="_blank">google.com</a>
</div>
</div>
<br/>
<p>heloo fdaf afdfdfa fafa</p>
<p>jflkajdfkjaldkfjkladjfklajdfk fkdjaflkjda lfla fa</p>
<br/>
</div>
JavaScript
function is_all_ws( nod )
{
// Use ECMA-262 Edition 3 String and RegExp features
return !(/[^\t\n\r ]/.test(nod.data));
}
function is_ignorable( nod )
{
return ( nod.nodeType == 8) || // A comment node
( (nod.nodeType == 3) && is_all_ws(nod) ); // a text node, all ws
}
function data_of( txt )
{
var data = txt.data;
// Use ECMA-262 Edition 3 String and RegExp features
data = data.replace(/[\t\n\r ]+/g, " ");
if (data.charAt(0) == " ")
data = data.substring(1, data.length);
if (data.charAt(data.length - 1) == " ")
data = data.substring(0, data.length - 1);
return data;
}
function node_before( sib )
{
while ((sib = sib.previousSibling)) {
if (!is_ignorable(sib)) return sib;
}
return null;
}
function node_after( sib )
{
while ((sib = sib.nextSibling)) {
if (!is_ignorable(sib)) return sib;
}
return null;
}
function first_child( par )
{
var res=par.firstChild;
while (res) {
if (!is_ignorable(res)) return res;
res = res.nextSibling;
}
return null;
}
$(".redactor_editor").keydown(function(ev)
{
if (ev.keyCode == "46" || ev.keyCode == "39") {
var sel = rangy.getSelection();
var range = sel.getRangeAt(0);
var cur = node_after(sel.anchorNode.parentNode);
console.log(node_after(sel.anchorNode.parentNode));
while (cur)
{
console.log(cur.className);
if (cur.className === "attachment")
{
console.log(cur);
range.setStartAfter(cur);
range.setEndAfter(cur);
rangy.getSelection().setSingleRange(range);
console.log("HIT");
}
cur = node_after(cur);
}
}
else if (ev.keyCode == "8" || ev.keyCode == "37") {
}
});