11/*
22
33 codeit.js
4- v3.1.3
4+ v3.1.4
55 MIT License
66
77 https://codeit.codes
@@ -456,24 +456,33 @@ class CodeitElement extends HTMLElement {
456456
457457 cd . on ( 'copy' , ( e ) => {
458458
459+ e . preventDefault ( ) ;
460+
459461 const text = window . getSelection ( ) . toString ( ) ;
462+
463+ if ( text === '' ) return false ;
464+
465+
460466 e . clipboardData . setData ( 'text/plain' , text ) ;
461- e . preventDefault ( ) ;
462467
463468 } ) ;
464469
465470 cd . on ( 'paste' , ( e ) => {
471+
472+ e . preventDefault ( ) ;
466473
467474 let paste = e . clipboardData . getData ( 'text' ) ;
468475
476+ if ( paste === '' ) return false ;
477+
478+
469479 const selection = window . getSelection ( ) ;
470480 if ( ! selection . rangeCount ) return false ;
471481
472482 if ( ! selection . getRangeAt ( 0 ) . collapsed &&
473483 hashCode ( paste ) === hashCode ( selection . toString ( ) ) ) {
474484
475- selection . getRangeAt ( 0 ) . collapse ( ) ;
476- e . preventDefault ( ) ;
485+ selection . getRangeAt ( 0 ) . collapse ( ) ;
477486 return false ;
478487
479488 }
@@ -488,8 +497,6 @@ class CodeitElement extends HTMLElement {
488497 cd . insert ( paste ) ;
489498
490499 recordHistory ( ) ;
491-
492- e . preventDefault ( ) ;
493500
494501 } ) ;
495502
@@ -566,7 +573,7 @@ class CodeitElement extends HTMLElement {
566573
567574 function handleDelNewLine ( event ) {
568575
569- if ( event . key === 'Backspace' || event . key === 'Delete' ) {
576+ if ( event . key === 'Backspace' ) {
570577
571578 const before = cd . beforeCursor ( ) ;
572579
@@ -824,7 +831,7 @@ class CodeitElement extends HTMLElement {
824831
825832 function handleDelClosingCharacters ( event ) {
826833
827- if ( event . key === 'Backspace' || event . key === 'Delete' ) {
834+ if ( event . key === 'Backspace' ) {
828835
829836 const open = cd . options . openBrackets . join ( '' ) + cd . options . quot . join ( '' ) ;
830837 const close = cd . options . closeBrackets . join ( '' ) + cd . options . quot . join ( '' ) ;
@@ -1197,18 +1204,45 @@ class CodeitElement extends HTMLElement {
11971204
11981205 }
11991206
1200- function overrideDeleteText ( event ) {
1207+ function overrideDeleteText ( e ) {
12011208
1202- if ( event . key === 'Backspace' || event . key === 'Delete' ) {
1209+ // when deleting in large files,
1210+ // the browser reparses the element tree and slows down
1211+ // override with range.deleteContents() fixes the problem
12031212
1204- event . preventDefault ( ) ;
1213+ if ( e . key === 'Backspace' ) {
12051214
1206- // when deleting in large files,
1207- // the browser reparses the element tree and slows down
1208- // override with range.deleteContents() fixes the problem
1215+ e . preventDefault ( ) ;
1216+
12091217 cd . deleteCurrentSelection ( ) ;
12101218
12111219 }
1220+
1221+ if ( e . key === 'Delete' ) {
1222+
1223+ e . preventDefault ( ) ;
1224+
1225+
1226+ // get current selection
1227+ const s = window . getSelection ( ) ;
1228+ let r0 = s . getRangeAt ( 0 ) ;
1229+
1230+ // get selection in text content
1231+ let textSel = cd . getSelection ( ) ;
1232+
1233+ // if selection is empty, select the char after
1234+ if ( r0 . collapsed ) {
1235+
1236+ textSel . end += 1 ;
1237+
1238+ cd . setSelection ( textSel . start , textSel . end ) ;
1239+
1240+ }
1241+
1242+
1243+ cd . deleteCurrentSelection ( ) ;
1244+
1245+ }
12121246
12131247 }
12141248
@@ -1217,14 +1251,16 @@ class CodeitElement extends HTMLElement {
12171251 // get current selection
12181252 const s = window . getSelection ( ) ;
12191253 let r0 = s . getRangeAt ( 0 ) ;
1220-
1254+
12211255 // get selection in text content
12221256 let textSel = cd . getSelection ( ) ;
12231257
12241258 // if selection is empty, select the char before
12251259 if ( r0 . collapsed ) {
12261260
1227- cd . setSelection ( textSel . start - 1 , textSel . end ) ;
1261+ textSel . start -= 1 ;
1262+
1263+ cd . setSelection ( textSel . start , textSel . end ) ;
12281264
12291265 // get current range
12301266 r0 = s . getRangeAt ( 0 ) ;
0 commit comments