@@ -54,19 +54,23 @@ function preventClipboardWrite(matches = '', ...varargs) {
5454 const extraArgs = safe . parseVarargs ( varargs ) ;
5555 const excludePattern = extraArgs . excludeMatches &&
5656 safe . initPattern ( extraArgs . excludeMatches ) ;
57+ const htmlTemplate = [
58+ '<div style="background-color:beige;color:black;border:1px solid black;display:flex;font-family:sans-serif;font-size:medium;position:fixed;top:0;white-space:pre-wrap;width:100%;z-index:2147483647">' ,
59+ '<span style="flex-grow:1;padding:0.5em 0 0.5em 0.5em;">${warning}</span>\n' ,
60+ '<button style="font-size:32px;padding:0.5em">×</button>' ,
61+ '</div>' ,
62+ ] . join ( '' ) ;
5763 const domAlert = clipboardText => {
5864 const doc = document ;
59- const div = doc . createElement ( 'div' ) ;
60- const span = doc . createElement ( 'span' ) ;
61- span . style = 'flex-grow:1;padding:0.5em 0 0.5em 0.5em;' ;
6265 const domAlert = extraArgs . domAlert . replace ( / \\ n / g, '\n' ) ;
63- const placeholder = / \$ \{ t e x t \} / . exec ( domAlert ) ;
64- if ( placeholder ) {
66+ let html ;
67+ if ( domAlert . includes ( '${text}' ) ) {
6568 const code = doc . createElement ( 'code' ) ;
6669 const styles = [
6770 'background-color: #ddc' ,
6871 'display: inline-block' ,
6972 'font-family: monospace' ,
73+ 'font-size: 100%' ,
7074 'max-height: 8em' ,
7175 'overflow: auto' ,
7276 'padding: 0.25em' ,
@@ -77,29 +81,23 @@ function preventClipboardWrite(matches = '', ...varargs) {
7781 }
7882 code . style = styles . join ( ';' ) ;
7983 code . textContent = clipboardText ;
80- span . append (
81- domAlert . slice ( 0 , placeholder . index ) ,
82- code ,
83- domAlert . slice ( placeholder . index + placeholder [ 0 ] . length )
84+ html = htmlTemplate . replace ( '${warning}' ,
85+ domAlert . replace ( '${text}' , code . outerHTML )
8486 ) ;
8587 } else {
86- span . append ( domAlert ) ;
88+ html = htmlTemplate . replace ( '${warning}' , domAlert ) ;
8789 }
88- const button = doc . createElement ( 'button' ) ;
89- button . style = 'font-size:32px;padding:0.5em' ;
90- button . textContent = '×' ;
90+ if ( currentAlert ) { currentAlert . remove ( ) ; }
91+ const domParser = new DOMParser ( ) ;
92+ const fragment = domParser . parseFromString ( html , 'text/html' ) ;
93+ currentAlert = fragment . querySelector ( 'div' ) ;
94+ const button = currentAlert . querySelector ( 'button' ) ;
9195 button . addEventListener ( 'click' , ( ) => {
9296 if ( currentAlert === null ) { return ; }
9397 currentAlert . remove ( ) ;
9498 currentAlert = null ;
9599 } ) ;
96- div . append ( span , button ) ;
97- div . style = 'background-color:beige;color:black;border:1px solid black;display:flex;font-family:sans-serif;font-size:medium;position:fixed;top:0;white-space:pre-wrap;width:100%;z-index:2147483647' ;
98- doc . documentElement . append ( div ) ;
99- if ( currentAlert ) {
100- currentAlert . remove ( ) ;
101- }
102- currentAlert = div ;
100+ doc . documentElement . append ( currentAlert ) ;
103101 } ;
104102 let currentAlert = null ;
105103 const prevent = text => {
0 commit comments