Обертка для blocquote

by kigorw

HTML

<script src="http://laboratorium.0xab.cd/jquery/fieldselection/0.1.0/jquery-fieldselection.js"></script>
<script src="http://www.developers.org.ua/media/js/lib/caret.js"></script>
<div id="article" style="margin-bottom:5px; border-bottom:1px dashed #ccc; padding-bottom:5px;">
    Копируй меня. <p>Да-да-да, трололо</p>
</div>
И меня копируй, но не сработает
<div style="margin-top:10px">
    <textarea style="width:100%; height:100px" id="txt">В это поле копируй</textarea>
</div>

JavaScript

var clip="", pasted, changed,
    txt = $("#txt"),
    val = txt.val();

$("#article").bind("copy",function(e){

   clip =  window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;  
    
});

txt.bind("paste", function(e) {

    setTimeout(function(){
        var changed = val!=txt.val();
        if(changed&&clip!="") {
            val = txt.val();
            addQuote();
        }
    
    }, 10);
});  

function addQuote() {

    var end = txt.getSelection().end,//плагин jquery-fieldselection.js для получения позиции курсора
        len = clip.length,
        start = end-len,
        val = txt.val(); 
    
    //сверяем вставленный текст с тем, что было скопировано - защита от пастинга из других мест
    if(val.substring(start, end).replace(/\s/g," ")!=clip.replace(/\s/g," ")) return;
    var taged = "<blockquote>"+clip+"</blockquote>"; 
    val = val.substring(0, start)+taged+val.substring(end, val.length);
    txt.val(val);
    //устанавливаем курсор в конец вставленного 
    txt.caret(start+taged.length, start+taged.length); //плагин range-caret  
    
}