JSFiddle - React, Tailwind, and code Playground
by Mathias Bynens
HTML
<textarea>This is **some** text.
This is some code.
> This is a blockquote.</textarea>
CSS
textarea { width: 400px; height: 200px; }
JavaScript
function wrapText(strPrepend, blockPrepend) {
// moeten params worden, strPrepend, strAppend, blockPrepend, blockRepeat
var strAppend = strPrepend,
start = $textarea[0].selectionStart,
end = $textarea[0].selectionEnd,
selectedText = $textarea.val().substring(start, end);
if (strPrepend === selectedText.substr(0, strPrepend.length) && strAppend === selectedText.substr(-strAppend.length)) { // Unwrap
selectedText = selectedText.substr(strPrepend.length);
selectedText = selectedText.substring(0, selectedText.length - strAppend.length);
$textarea.val($textarea.val().substring(0, start) + selectedText + $textarea.val().substring(end, $textarea.val().length));
$textarea[0].selectionStart = start;
$textarea[0].selectionEnd = end - strPrepend.length - strAppend.length;
} else { // Wrap
if (blockPrepend && /\n/.test(selectedText)) {
if (/^[ ]{0,3}\S/m.test(selectedText)) {
// Er moeten vier spaties toegevoegd worden aan het begin van elke regel
selectedText = selectedText.replace(/^/gm, blockPrepend).replace(/(\s*)$/, '');
} else {
// Er moeten vier spaties verwijderd worden van het begin van elke regel
selectedText = selectedText.replace(new RegExp('^[ ]{' + blockPrepend.length + '}', 'gm'), '');
};
$textarea.val($textarea.val().substring(0, start) + selectedText + $textarea.val().substring(end, $textarea.val().length));
$textarea[0].selectionStart = start;
$textarea[0].selectionEnd = start + selectedText.length;
} else {
$textarea.val($textarea.val().substring(0, start) + strPrepend + selectedText + strAppend + $textarea.val().substring(end, $textarea.val().length));
$textarea[0].selectionStart = start;
$textarea[0].selectionEnd = end + strPrepend.length + strAppend.length;
};
};
};
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
*...