Fossil SCM

Found a Chrome-only workaround to tell Chrome not to paste formatting into the chat editor field.

stephan 2021-10-01 12:13 chat-input-rework
Commit 607b11ddc6ec2ba838cef29c353ded442df9b276e978b868903cf3d79515c8ff
1 file changed +10 -3
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -543,10 +543,16 @@
543543
D.addClassBriefly(e, a, 0, cb);
544544
}
545545
return this;
546546
}
547547
};
548
+ if(/chrome/i.test(navigator.userAgent)){
549
+ // Only the Chrome family supports
550
+ // contenteditable=plaintext-only, but Chrome is the only engine
551
+ // for which we need this flag:
552
+ D.attr(cs.e.inputField,'contenteditable','plaintext-only');
553
+ }
548554
cs.animate.$disabled = true;
549555
F.fetch.beforesend = ()=>cs.ajaxStart();
550556
F.fetch.aftersend = ()=>cs.ajaxEnd();
551557
cs.pageTitleOrig = cs.e.pageTitle.innerText;
552558
const qs = (e)=>document.querySelector(e);
@@ -1127,22 +1133,23 @@
11271133
},
11281134
dragend: function(ev){
11291135
D.removeClass(dropHighlight, 'dragover');
11301136
}
11311137
};
1132
- const cancelEvent = function(ev){
1138
+ const noDragDropEvents = function(ev){
11331139
/* contenteditable tries to do its own thing with dropped data,
11341140
which is not compatible with how we use it, so... */
1135
- //if(ev.dataTransfer) ev.dataTransfer.dropEffect = 'none';
1141
+ ev.dataTransfer.effectAllowed = 'none';
1142
+ ev.dataTransfer.dropEffect = 'none';
11361143
ev.preventDefault();
11371144
ev.stopPropagation();
11381145
return false;
11391146
};
11401147
Object.keys(dropEvents).forEach(
11411148
(k)=>{
11421149
Chat.e.inputFile.addEventListener(k, dropEvents[k], true);
1143
- Chat.inputElement().addEventListener(k, cancelEvent, false);
1150
+ Chat.inputElement().addEventListener(k, noDragDropEvents, false);
11441151
}
11451152
);
11461153
return bxs;
11471154
})()/*drag/drop*/;
11481155
11491156
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -543,10 +543,16 @@
543 D.addClassBriefly(e, a, 0, cb);
544 }
545 return this;
546 }
547 };
 
 
 
 
 
 
548 cs.animate.$disabled = true;
549 F.fetch.beforesend = ()=>cs.ajaxStart();
550 F.fetch.aftersend = ()=>cs.ajaxEnd();
551 cs.pageTitleOrig = cs.e.pageTitle.innerText;
552 const qs = (e)=>document.querySelector(e);
@@ -1127,22 +1133,23 @@
1127 },
1128 dragend: function(ev){
1129 D.removeClass(dropHighlight, 'dragover');
1130 }
1131 };
1132 const cancelEvent = function(ev){
1133 /* contenteditable tries to do its own thing with dropped data,
1134 which is not compatible with how we use it, so... */
1135 //if(ev.dataTransfer) ev.dataTransfer.dropEffect = 'none';
 
1136 ev.preventDefault();
1137 ev.stopPropagation();
1138 return false;
1139 };
1140 Object.keys(dropEvents).forEach(
1141 (k)=>{
1142 Chat.e.inputFile.addEventListener(k, dropEvents[k], true);
1143 Chat.inputElement().addEventListener(k, cancelEvent, false);
1144 }
1145 );
1146 return bxs;
1147 })()/*drag/drop*/;
1148
1149
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -543,10 +543,16 @@
543 D.addClassBriefly(e, a, 0, cb);
544 }
545 return this;
546 }
547 };
548 if(/chrome/i.test(navigator.userAgent)){
549 // Only the Chrome family supports
550 // contenteditable=plaintext-only, but Chrome is the only engine
551 // for which we need this flag:
552 D.attr(cs.e.inputField,'contenteditable','plaintext-only');
553 }
554 cs.animate.$disabled = true;
555 F.fetch.beforesend = ()=>cs.ajaxStart();
556 F.fetch.aftersend = ()=>cs.ajaxEnd();
557 cs.pageTitleOrig = cs.e.pageTitle.innerText;
558 const qs = (e)=>document.querySelector(e);
@@ -1127,22 +1133,23 @@
1133 },
1134 dragend: function(ev){
1135 D.removeClass(dropHighlight, 'dragover');
1136 }
1137 };
1138 const noDragDropEvents = function(ev){
1139 /* contenteditable tries to do its own thing with dropped data,
1140 which is not compatible with how we use it, so... */
1141 ev.dataTransfer.effectAllowed = 'none';
1142 ev.dataTransfer.dropEffect = 'none';
1143 ev.preventDefault();
1144 ev.stopPropagation();
1145 return false;
1146 };
1147 Object.keys(dropEvents).forEach(
1148 (k)=>{
1149 Chat.e.inputFile.addEventListener(k, dropEvents[k], true);
1150 Chat.inputElement().addEventListener(k, noDragDropEvents, false);
1151 }
1152 );
1153 return bxs;
1154 })()/*drag/drop*/;
1155
1156

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button