Untitled diff

Created Diff never expires
2 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
39 lines
53 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
90 lines
function blink() {
document.getElementById('caret').hidden ^= 1;
blinkTimeout = setTimeout(blink, 500);
}
var mydiv = document.getElementById('mydiv'),
var mydiv = document.getElementById('mydiv'),
myta = document.getElementById('myta');
myta = document.getElementById('myta'),
blinkTimeout = setTimeout(blink, 500),
lastSelectionStart = 0,
lastSelectionEnd = 0,
whichSelection = true;
function updateDiv() {
function updateDiv() {
var fc;
var fc;
while (fc = mydiv.firstChild) mydiv.removeChild(fc);
while (fc = mydiv.firstChild) mydiv.removeChild(fc);
if (myta.selectionStart != lastSelectionStart) {
lastSelectionStart = myta.selectionStart;
whichSelection = false;
}
if (myta.selectionEnd != lastSelectionEnd) {
lastSelectionEnd = myta.selectionEnd;
whichSelection = true;
}
var cursorPos = whichSelection ? myta.selectionEnd : myta.selectionStart;
for (var i = 0; i < myta.value.length; i++) {
for (var i = 0; i < myta.value.length; i++) {
if (i == cursorPos) {
var caret = document.createElement('span');
caret.id = 'caret';
caret.appendChild(document.createTextNode('\xA0'));
mydiv.appendChild(caret);
clearTimeout(blinkTimeout);
blinkTimeout = setTimeout(blink, 500);
}
var span = document.createElement('span');
var span = document.createElement('span');
span.className = Math.random() < 0.5 ? 'green' : 'red';
span.className = Math.random() < 0.5 ? 'green' : 'red';
span.appendChild(document.createTextNode(myta.value[i]));
span.appendChild(document.createTextNode(myta.value[i]));
mydiv.appendChild(span);
mydiv.appendChild(span);
}
}
if (myta.value.length == cursorPos) {
var caret = document.createElement('span');
caret.id = 'caret';
caret.appendChild(document.createTextNode('\xA0'));
mydiv.appendChild(caret);
clearTimeout(blinkTimeout);
blinkTimeout = setTimeout(blink, 500);
}
};
};
myta.addEventListener('input', updateDiv);
myta.addEventListener('input', updateDiv);
myta.addEventListener('focus', updateDiv);
myta.addEventListener('mousedown', function() {
setTimeout(updateDiv, 0);
});
myta.addEventListener('keydown', function() {
setTimeout(updateDiv, 0);
});
myta.addEventListener('blur', function() {
document.getElementById('caret').hidden = true;
clearTimeout(blinkTimeout);
});


body { position: relative }
body { position: relative }
div, textarea {
div, textarea {
-webkit-text-size-adjust: none;
-webkit-text-size-adjust: none;
width: 100%;
width: 100%;
white-space: pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
word-wrap: break-word;
overflow-wrap: break-word;
overflow-wrap: break-word;
font: 1rem sans-serif;
font: 1rem sans-serif;
padding: 2px;
padding: 2px;
margin: 0;
margin: 0;
border-radius: 0;
border-radius: 0;
border: 1px solid #000;
border: 1px solid #000;
resize: none;
resize: none;
}
}
textarea {
textarea {
position: absolute;
position: absolute;
top: 0;
top: 0;
color: transparent;
color: transparent;
background: transparent;
background: transparent;
}
}
.red { color: #f00 }
.red { color: #f00 }
.green { color: #0f0 }
.green { color: #0f0 }
#caret {
display: inline-block;
position: absolute;
width: 1px;
background: #000;
}
#caret[hidden] { display: none }


<div id="mydiv"></div>
<div id="mydiv"><span id="caret">&nbsp;</span></div>
<textarea id="myta" autofocus=""></textarea>
<textarea id="myta" autofocus=""></textarea>