@@ -12,10 +12,51 @@
12 12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
document.addEventListener('visibilitychange', function(ev){
13 13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.pageIsActive = !document.hidden;
14 14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(cs.pageIsActive) cs.onPageActive();
15 15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else cs.onPageInactive();
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}, true);
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const qs = (e)=>document.querySelector(e);
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const argsToArray = function(args){
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return Array.prototype.slice.call(args,0);
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.reportError = function(/*msg args*/){
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const args = argsToArray(arguments);
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ console.error("chat error:",args);
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.toast.error.apply(F.toast, args);
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.getMessageElemById = function(id){
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return qs('[data-msgid="'+id+'"]');
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.deleteMessageElemById = function(id){
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const e = this.getMessageElemById(id);
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(e) D.remove(e);
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return !!e;
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /**
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Removes the given message ID from the local chat record and, if
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ the message was posted by this user OR this user in an
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ admin/setup, also submits it for removal on the remote.
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.deleteMessageById = function(id){
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const e = this.getMessageElemById(id);
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!e) return;
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(this.me === e.dataset.xfrom
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || F.user.isAdmin/*will be confirmed server-side*/
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fetch("chat-delete?name=" + id)
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .then(()=>D.remove(e))
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .then(()=>F.toast.message("Deleted message "+id+"."))
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .catch(err=>this.reportError(err))
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.remove(e);
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.toast.message("Locally removed message "+id+".");
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return cs;
18 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})();
19 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* State for paste and drag/drop */
20 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const BlobXferState = {
21 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dropDetails: document.querySelector('#chat-drop-details'),
@@ -192,12 +233,19 @@
192 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
function newcontent(jx){
193 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
var i;
194 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<jx.msgs.length; ++i){
195 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const m = jx.msgs[i];
196 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m.msgid>Chat.mxMsg ) Chat.mxMsg = m.msgid;
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( m.mdel ){
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A record deletion notice. */
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.deleteMessageElemById(m.mdel);
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
197 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eWho = D.create('legend'),
198 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
row = D.addClass(D.fieldset(eWho), 'message-row');
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ row.dataset.msgid = m.msgid;
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ row.dataset.xfrom = m.xfrom;
199 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
injectMessage(row);
200 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eWho.dataset.timestamp = m.mtime;
201 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eWho.addEventListener('click', handleLegendClicked, false);
202 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m.xfrom==Chat.me && window.outerWidth<1000 ){
203 251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eWho.setAttribute('align', 'right');
@@ -252,6 +300,7 @@
252 300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
.catch(e=>console.error(e))
253 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
.finally(()=>poll.running=false)
254 302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
poll();
256 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setInterval(poll, 1000);
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.page.chat = Chat;
257 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})();
258 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!