Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Made chat drop zone smaller by replacing its text with a helplet button. Added 'chat' table to the list of those NOT nuked by rebuild. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | chatroom-dev |
| Files: | files | file ages | folders |
| SHA3-256: |
85939ffcbe54d8562c6e2286eb32bed1 |
| User & Date: | stephan 2020-12-23 14:21:12.230 |
Context
|
2020-12-23
| ||
| 14:29 | The "fossil scrub --verily" command deletes all chat history. ... (check-in: 7779535f04 user: drh tags: chatroom-dev) | |
| 14:21 | Made chat drop zone smaller by replacing its text with a helplet button. Added 'chat' table to the list of those NOT nuked by rebuild. ... (check-in: 85939ffcbe user: stephan tags: chatroom-dev) | |
| 13:51 | Only right-align the self-posts if the outerWidth of the browser is less than 1000. Simplify the CSS by removing unused rules. ... (check-in: f3c8e83858 user: drh tags: chatroom-dev) | |
Changes
Changes to src/chat.c.
| ︙ | ︙ | |||
101 102 103 104 105 106 107 |
@ white-space: pre;
@ text-align: left;
@ opacity: 0.8;
@ }
@ #chat-drop-zone {
@ box-sizing: content-box;
@ background-color: #e0e0e0;
| | | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
@ white-space: pre;
@ text-align: left;
@ opacity: 0.8;
@ }
@ #chat-drop-zone {
@ box-sizing: content-box;
@ background-color: #e0e0e0;
@ flex: 1 1 auto;
@ padding: 0.5em 1em;
@ border: 1px solid #808080;
@ border-radius: 0.25em;
@ }
@ #chat-drop-zone.dragover {
@ border: 1px dashed green;
@ }
|
| ︙ | ︙ | |||
124 125 126 127 128 129 130 | @ <input type="text" name="msg" id="sbox" \ @ placeholder="Type message here."> @ <input type="submit" value="Send"> @ </div> @ <div id='chat-input-file'> @ <input type="file" name="file"> @ <div id="chat-drop-zone"> | < < | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | @ <input type="text" name="msg" id="sbox" \ @ placeholder="Type message here."> @ <input type="submit" value="Send"> @ </div> @ <div id='chat-input-file'> @ <input type="file" name="file"> @ <div id="chat-drop-zone"> @ <div id="chat-drop-details"></div> @ </div> @ </div> @ </div> @ </form> @ <hr> |
| ︙ | ︙ |
Changes to src/chat.js.
1 2 3 4 5 6 7 8 9 |
(function(){
const form = document.querySelector('#chat-form');
let mxMsg = 0;
const F = window.fossil, D = F.dom;
const _me = F.user.name;
/* State for paste and drag/drop */
const BlobXferState = {
dropZone: document.querySelector('#chat-drop-zone'),
dropDetails: document.querySelector('#chat-drop-details'),
| < | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
(function(){
const form = document.querySelector('#chat-form');
let mxMsg = 0;
const F = window.fossil, D = F.dom;
const _me = F.user.name;
/* State for paste and drag/drop */
const BlobXferState = {
dropZone: document.querySelector('#chat-drop-zone'),
dropDetails: document.querySelector('#chat-drop-details'),
blob: undefined
};
/** Updates the paste/drop zone with details of the pasted/dropped
data. */
const updateDropZoneContent = function(blob){
const bx = BlobXferState, dd = bx.dropDetails;
bx.blob = blob;
D.clearElement(dd);
if(!blob) return;
D.append(dd, "Name: ", blob.name,
D.br(), "Size: ",blob.size);
if(blob.type && blob.type.startsWith("image/")){
const img = D.img();
D.append(dd, D.br(), img);
const reader = new FileReader();
reader.onload = (e)=>img.setAttribute('src', e.target.result);
reader.readAsDataURL(blob);
|
| ︙ | ︙ | |||
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
//console.debug("pasted item =",item);
if('file'===item.kind){
updateDropZoneContent(items[0].getAsFile());
}else if('string'===item.kind){
item.getAsString((v)=>form.msg.value = v);
}
};
/* Injects element e as a new row in the chat, at the top of the list */
const injectMessage = function f(e){
if(!f.injectPoint){
f.injectPoint = document.querySelector('#message-inject-point');
}
if(f.injectPoint.nextSibling){
f.injectPoint.parentNode.insertBefore(e, f.injectPoint.nextSibling);
| > > > > > > > > > > > > | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
//console.debug("pasted item =",item);
if('file'===item.kind){
updateDropZoneContent(items[0].getAsFile());
}else if('string'===item.kind){
item.getAsString((v)=>form.msg.value = v);
}
};
if(true){/* Add help button for drag/drop/paste zone */
const help = D.div();
BlobXferState.dropDetails.parentNode.insertBefore(
help,BlobXferState.dropDetails
);
F.helpButtonlets.create(
help,
"Drag/drop a file into this spot, or paste an image "+
"from the clipboard if supported by your environment."
);
}
/* Injects element e as a new row in the chat, at the top of the list */
const injectMessage = function f(e){
if(!f.injectPoint){
f.injectPoint = document.querySelector('#message-inject-point');
}
if(f.injectPoint.nextSibling){
f.injectPoint.parentNode.insertBefore(e, f.injectPoint.nextSibling);
|
| ︙ | ︙ |
Changes to src/default.css.
| ︙ | ︙ | |||
1492 1493 1494 1495 1496 1497 1498 |
min-width: 9em /*avoid unsightly "underlap" with the user name label*/;
}
/* User name for the post (a LEGEND element) */
.message-row .message-user {
border-radius: 0.25em 0.25em 0 0;
padding: 0 0.5em;
/*text-align: left; Firefox requires the 'align' attribute */
| | | 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 |
min-width: 9em /*avoid unsightly "underlap" with the user name label*/;
}
/* User name for the post (a LEGEND element) */
.message-row .message-user {
border-radius: 0.25em 0.25em 0 0;
padding: 0 0.5em;
/*text-align: left; Firefox requires the 'align' attribute */
margin: 0 0.15em;
padding: 0 0.5em 0em 0.5em;
margin-bottom: 0.4em;
cursor: pointer;
}
|
Changes to src/rebuild.c.
| ︙ | ︙ | |||
392 393 394 395 396 397 398 |
db_prepare(&q,
"SELECT name FROM sqlite_schema /*scan*/"
" WHERE type='table'"
" AND name NOT IN ('admin_log', 'blob','delta','rcvfrom','user','alias',"
"'config','shun','private','reportfmt',"
"'concealed','accesslog','modreq',"
"'purgeevent','purgeitem','unversioned',"
| | | 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
db_prepare(&q,
"SELECT name FROM sqlite_schema /*scan*/"
" WHERE type='table'"
" AND name NOT IN ('admin_log', 'blob','delta','rcvfrom','user','alias',"
"'config','shun','private','reportfmt',"
"'concealed','accesslog','modreq',"
"'purgeevent','purgeitem','unversioned',"
"'subscriber','pending_alert','alert_bounce','chat')"
" AND name NOT GLOB 'sqlite_*'"
" AND name NOT GLOB 'fx_*'"
);
while( db_step(&q)==SQLITE_ROW ){
blob_appendf(&sql, "DROP TABLE IF EXISTS \"%w\";\n", db_column_text(&q,0));
}
db_finalize(&q);
|
| ︙ | ︙ |