Dup Ver Goto 📝

TextareaLeftRightShift

PT2/lang/html/dom does not exist
To
83 lines, 302 words, 1938 chars Page 'TextareaLeftRightShift' does not exist.

See TextareaLeftRightShift.html

<h1>Example of left/right shift text in textarea</h1>
<textarea>
hello world
</textarea>
<style>
textarea {
  width: 90vw;
  height: 90vh;
}
</style>
<script>
window.ta = document.querySelector("textarea")
window.addEventListener("load", e => { ta.focus() })
window.addEventListener("keydown", e => {
  let k = e.key.toLowerCase()
  let c = e.ctrlKey, a = e.altKey
  if( e.metaKey ) return
  if( c && a && k == "arrowright" ) {
    if( document.activeElement === ta ) {
      e.preventDefault()
      return shiftRight(ta)
    }
  }
  if( c && a && k == "arrowleft" ) {
    if( document.activeElement === ta ) {
      e.preventDefault()
      return shiftLeft(ta)
    }
  }
  //console.log("unrecog",{e})
})
window.tabstr = "    "
function escapeRegExp(text) {
  return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}
function shiftRight(ta) {
  let a = ta.selectionStart
  let b = ta.selectionEnd
  let v = ta.value
  while( v[a-1] != "\n" ) {
    a -= 1
    if( a <= 0 ) { a = 0; break }
  }
  while( v[b] != "\n" ) {
    b += 1
    if( b >= v.length ) { b = v.length; break }
  }
  let left = v.substr(0,a)
  let right = v.substr(b)
  let mid = v.substr(a,b-a)
  let mid1 = mid.replace(/^/m,tabstr)
  let nv = left + mid1 + right
  ta.value = nv
  ta.selectionStart = a
  ta.selectionEnd = a + mid1.length
}
function shiftLeft(ta) {
  let a = ta.selectionStart
  let b = ta.selectionEnd
  let v = ta.value
  while( v[a-1] != "\n" ) {
    a -= 1
    if( a <= 0 ) { a = 0; break }
  }
  while( v[b] != "\n" ) {
    b += 1
    if( b >= v.length ) { b = v.length; break }
  }
  let left = v.substr(0,a)
  let right = v.substr(b)
  let mid = v.substr(a,b-a)
  let re = new RegExp("^"+escapeRegExp(tabstr),"m")
  let mid1 = mid.replace(re,"")
  let nv = left + mid1 + right
  ta.value = nv
  ta.selectionStart = a
  ta.selectionEnd = a + mid1.length
  console.log("shift left")
}
</script>