Fossil SCM
chat message deletion: admins now have both delete local and delete global options, in case they want to remove something from local view without deleting it for all users.
Commit
b12d69d9f4686cef96dab5b37902b0d48581116228d0f74c91fa93d9a0d0b664
Parent
6d676f6eb5d78f4…
2 files changed
+17
-9
+8
+17
-9
| --- src/chat.js | ||
| +++ src/chat.js | ||
| @@ -297,26 +297,34 @@ | ||
| 297 | 297 | if(d.getMinutes().toString()!=="NaN"){ |
| 298 | 298 | // Date works, render informative timestamps |
| 299 | 299 | D.append(this.e, |
| 300 | 300 | D.append(D.span(), localTimeString(d)," client-local"), |
| 301 | 301 | D.append(D.span(), iso8601ish(d))); |
| 302 | - }else{ | |
| 302 | + }else{ | |
| 303 | 303 | // Date doesn't work, so dumb it down... |
| 304 | 304 | D.append(this.e, D.append(D.span(), eMsg.dataset.timestamp," GMT")); |
| 305 | 305 | } |
| 306 | 306 | const toolbar = D.addClass(D.div(), 'toolbar'); |
| 307 | - const btnDelete = D.button("Delete "+ | |
| 308 | - (Chat.userMayDelete(eMsg) | |
| 309 | - ? "globally" : "locally")); | |
| 307 | + D.append(this.e, toolbar); | |
| 308 | + const btnDeleteLocal = D.button("Delete locally"); | |
| 309 | + D.append(toolbar, btnDeleteLocal); | |
| 310 | 310 | const self = this; |
| 311 | - btnDelete.addEventListener('click', function(){ | |
| 311 | + btnDeleteLocal.addEventListener('click', function(){ | |
| 312 | + console.debug("local-only delete"); | |
| 312 | 313 | self.hide(); |
| 313 | - Chat.deleteMessage(eMsg); | |
| 314 | + Chat.deleteMessageElem(eMsg); | |
| 314 | 315 | }); |
| 315 | - D.append(this.e, toolbar); | |
| 316 | - D.append(toolbar, btnDelete); | |
| 317 | - } | |
| 316 | + if(Chat.userMayDelete(eMsg)){ | |
| 317 | + const btnDeleteGlobal = D.button("Delete globally"); | |
| 318 | + D.append(toolbar, btnDeleteGlobal); | |
| 319 | + btnDeleteGlobal.addEventListener('click', function(){ | |
| 320 | + console.debug("global delete"); | |
| 321 | + self.hide(); | |
| 322 | + Chat.deleteMessage(eMsg); | |
| 323 | + }); | |
| 324 | + } | |
| 325 | + }/*refresh()*/ | |
| 318 | 326 | }); |
| 319 | 327 | f.popup.installClickToHide(); |
| 320 | 328 | f.popup.hide = function(){ |
| 321 | 329 | delete this._eMsg; |
| 322 | 330 | D.clearElement(this.e); |
| 323 | 331 |
| --- src/chat.js | |
| +++ src/chat.js | |
| @@ -297,26 +297,34 @@ | |
| 297 | if(d.getMinutes().toString()!=="NaN"){ |
| 298 | // Date works, render informative timestamps |
| 299 | D.append(this.e, |
| 300 | D.append(D.span(), localTimeString(d)," client-local"), |
| 301 | D.append(D.span(), iso8601ish(d))); |
| 302 | }else{ |
| 303 | // Date doesn't work, so dumb it down... |
| 304 | D.append(this.e, D.append(D.span(), eMsg.dataset.timestamp," GMT")); |
| 305 | } |
| 306 | const toolbar = D.addClass(D.div(), 'toolbar'); |
| 307 | const btnDelete = D.button("Delete "+ |
| 308 | (Chat.userMayDelete(eMsg) |
| 309 | ? "globally" : "locally")); |
| 310 | const self = this; |
| 311 | btnDelete.addEventListener('click', function(){ |
| 312 | self.hide(); |
| 313 | Chat.deleteMessage(eMsg); |
| 314 | }); |
| 315 | D.append(this.e, toolbar); |
| 316 | D.append(toolbar, btnDelete); |
| 317 | } |
| 318 | }); |
| 319 | f.popup.installClickToHide(); |
| 320 | f.popup.hide = function(){ |
| 321 | delete this._eMsg; |
| 322 | D.clearElement(this.e); |
| 323 |
| --- src/chat.js | |
| +++ src/chat.js | |
| @@ -297,26 +297,34 @@ | |
| 297 | if(d.getMinutes().toString()!=="NaN"){ |
| 298 | // Date works, render informative timestamps |
| 299 | D.append(this.e, |
| 300 | D.append(D.span(), localTimeString(d)," client-local"), |
| 301 | D.append(D.span(), iso8601ish(d))); |
| 302 | }else{ |
| 303 | // Date doesn't work, so dumb it down... |
| 304 | D.append(this.e, D.append(D.span(), eMsg.dataset.timestamp," GMT")); |
| 305 | } |
| 306 | const toolbar = D.addClass(D.div(), 'toolbar'); |
| 307 | D.append(this.e, toolbar); |
| 308 | const btnDeleteLocal = D.button("Delete locally"); |
| 309 | D.append(toolbar, btnDeleteLocal); |
| 310 | const self = this; |
| 311 | btnDeleteLocal.addEventListener('click', function(){ |
| 312 | console.debug("local-only delete"); |
| 313 | self.hide(); |
| 314 | Chat.deleteMessageElem(eMsg); |
| 315 | }); |
| 316 | if(Chat.userMayDelete(eMsg)){ |
| 317 | const btnDeleteGlobal = D.button("Delete globally"); |
| 318 | D.append(toolbar, btnDeleteGlobal); |
| 319 | btnDeleteGlobal.addEventListener('click', function(){ |
| 320 | console.debug("global delete"); |
| 321 | self.hide(); |
| 322 | Chat.deleteMessage(eMsg); |
| 323 | }); |
| 324 | } |
| 325 | }/*refresh()*/ |
| 326 | }); |
| 327 | f.popup.installClickToHide(); |
| 328 | f.popup.hide = function(){ |
| 329 | delete this._eMsg; |
| 330 | D.clearElement(this.e); |
| 331 |
+8
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -1512,17 +1512,25 @@ | ||
| 1512 | 1512 | text-align: left; |
| 1513 | 1513 | opacity: 0.8; |
| 1514 | 1514 | display: flex; |
| 1515 | 1515 | flex-direction: column; |
| 1516 | 1516 | align-items: stretch; |
| 1517 | + padding: 0.25em; | |
| 1517 | 1518 | } |
| 1518 | 1519 | body.chat .chat-message-popup > span { white-space: nowrap; } |
| 1519 | 1520 | body.chat .chat-message-popup > .toolbar { |
| 1520 | 1521 | padding: 0.2em; |
| 1521 | 1522 | margin: 0; |
| 1522 | 1523 | border: 2px inset rgba(0,0,0,0.3); |
| 1523 | 1524 | border-radius: 0.25em; |
| 1525 | + display: flex; | |
| 1526 | + flex-direction: row; | |
| 1527 | + justify-content: stretch; | |
| 1528 | + flex-wrap: wrap; | |
| 1529 | +} | |
| 1530 | +body.chat .chat-message-popup > .toolbar > button { | |
| 1531 | + flex: 1 1 auto; | |
| 1524 | 1532 | } |
| 1525 | 1533 | |
| 1526 | 1534 | body.chat .load-msg-toolbar { |
| 1527 | 1535 | border-radius: 0.25em; |
| 1528 | 1536 | padding: 0.1em 0.2em; |
| 1529 | 1537 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -1512,17 +1512,25 @@ | |
| 1512 | text-align: left; |
| 1513 | opacity: 0.8; |
| 1514 | display: flex; |
| 1515 | flex-direction: column; |
| 1516 | align-items: stretch; |
| 1517 | } |
| 1518 | body.chat .chat-message-popup > span { white-space: nowrap; } |
| 1519 | body.chat .chat-message-popup > .toolbar { |
| 1520 | padding: 0.2em; |
| 1521 | margin: 0; |
| 1522 | border: 2px inset rgba(0,0,0,0.3); |
| 1523 | border-radius: 0.25em; |
| 1524 | } |
| 1525 | |
| 1526 | body.chat .load-msg-toolbar { |
| 1527 | border-radius: 0.25em; |
| 1528 | padding: 0.1em 0.2em; |
| 1529 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -1512,17 +1512,25 @@ | |
| 1512 | text-align: left; |
| 1513 | opacity: 0.8; |
| 1514 | display: flex; |
| 1515 | flex-direction: column; |
| 1516 | align-items: stretch; |
| 1517 | padding: 0.25em; |
| 1518 | } |
| 1519 | body.chat .chat-message-popup > span { white-space: nowrap; } |
| 1520 | body.chat .chat-message-popup > .toolbar { |
| 1521 | padding: 0.2em; |
| 1522 | margin: 0; |
| 1523 | border: 2px inset rgba(0,0,0,0.3); |
| 1524 | border-radius: 0.25em; |
| 1525 | display: flex; |
| 1526 | flex-direction: row; |
| 1527 | justify-content: stretch; |
| 1528 | flex-wrap: wrap; |
| 1529 | } |
| 1530 | body.chat .chat-message-popup > .toolbar > button { |
| 1531 | flex: 1 1 auto; |
| 1532 | } |
| 1533 | |
| 1534 | body.chat .load-msg-toolbar { |
| 1535 | border-radius: 0.25em; |
| 1536 | padding: 0.1em 0.2em; |
| 1537 |