Skip to content

Commit 5dc4b18

Browse files
save file
1 parent b6b2ea6 commit 5dc4b18

1 file changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
2+
3+
<chat-room-display>
4+
5+
<template shadowrootmode=open>
6+
7+
<style>
8+
9+
#view
10+
{flex:1;overflow:auto;display:flex;flex-direction:column;gap:10px;white-space:pre}
11+
#view > div:nth-child(odd)
12+
{background: #f5f5f5}
13+
#view > div:nth-child(even)
14+
{background: #e0e0e0}
15+
16+
.msg
17+
{display:flex;gap:30px;align-items:center;padding:10px 20px}
18+
.msg:hover
19+
{background:lightyellow}
20+
21+
.msg .user
22+
{width:120px}
23+
.msg .txt
24+
{flex:1}
25+
.msg .ts
26+
{font-family:monospace}
27+
.msg .del
28+
{width:20px;height:20px;border:1px solid lightgray;border-radius:3px;padding:1px;box-sizing:border-box;cursor:pointer;
29+
content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeBAMAAADJHrORAAAAJFBMVEVHcEzfIB/ZKyrcKSjcIB/gHh3cJiXhHh3hHRzhHRvbJybiHBvYPD9wAAAAC3RSTlMAuyBkVelW6enpVsZbFRsAAACuSURBVBjTZZE9EoIwEIXfIGMvLY3xBDaOLQ3jAXQsrGwcD6C34Ag0XoEO5l3OZJNFstJ8Q94X2B8AqwrxcXtBO2yFRf0OWHeMguN093iQIhQ1eQXKjhTBeU4NDh5BCDH5gsALTjgod3oePW6Y7iWBKYYKGi+FKtWZxT9B+0qCxn/vxrffM/+z9Zh6bT+2XzuPYzavM8p+Mc+xAZ6Led/CPvp5H+Mn8DTv6yLM9vkFA8yuIQSFYnAAAAAASUVORK5CYII=);
30+
}
31+
32+
</style>
33+
34+
35+
<section id=view style='display:none'>
36+
37+
<div class=msg>
38+
<div class=user>
39+
</div>
40+
<div class=txt>
41+
</div>
42+
<div class=ts>
43+
</div>
44+
<img class=del>
45+
</div>
46+
47+
</section>
48+
49+
50+
</template>
51+
52+
<script>
53+
54+
(function({mod,host}){
55+
56+
var obj = {};
57+
58+
var df=true,did='chat-room-display';
59+
60+
var $
61+
;
62+
63+
obj.initmod = function(params){
64+
65+
$ = mod.rd(params,'$',$);
66+
67+
}//initmod
68+
69+
70+
//:
71+
72+
var shadow;
73+
var view;
74+
var msg;
75+
76+
77+
//:
78+
79+
80+
obj.init = async function(){
81+
}//init
82+
83+
84+
obj.initdom = async function(){
85+
86+
shadow = host.shadowRoot;
87+
88+
89+
view = $(shadow,'#view');
90+
91+
msg = $(view,'.msg');
92+
msg.remove();
93+
94+
view.style.display = '';
95+
96+
}//initdom
97+
98+
99+
//:
100+
101+
102+
display.list = function(list){
103+
104+
list.forEach(item=>{
105+
106+
var result = msgs.find(msg=>msg.id===item.id);
107+
if(!result){
108+
109+
var insert = false;
110+
var n = msgs.length;
111+
for(var i=0;i<n;i++){
112+
113+
var msg = msgs[i];
114+
if(msg.ts>item.ts){
115+
insert = msg;
116+
msgs.splice(i,0,item);
117+
break;
118+
}
119+
120+
}//for
121+
if(!insert){
122+
msgs.push(item);
123+
}
124+
125+
var node = display(item,insert?.node);
126+
item.node = node;
127+
128+
}
129+
130+
});
131+
132+
}//list
133+
134+
135+
function display(data,insert){
136+
137+
var node;
138+
139+
switch(data.type){
140+
141+
case 'message' : node = display.message(data); break;
142+
case 'delete' : display.delete(data); break;
143+
144+
}//switch
145+
146+
if(node){
147+
view.insertBefore(node,insert);
148+
}
149+
150+
return node;
151+
152+
}//display
153+
154+
155+
display.message = function({id,user,txt,ts}){
156+
157+
var config = {day:'2-digit',month:'short',year:'numeric',hour:'2-digit',minute:'2-digit',second:'2-digit',hour12:false};
158+
var format = new Intl.DateTimeFormat(undefined,config);
159+
160+
var err;
161+
try{
162+
163+
ts = Number(ts);
164+
var local = format.format(new Date(ts));
165+
var parts = local.split(',');
166+
local = parts[2]+' '+parts[0]+parts[1];
167+
168+
}//try
169+
catch(err2){
170+
171+
err = err2;
172+
173+
}//catch
174+
if(err){
175+
console.log(name,txt,ts);
176+
local = err.toString();
177+
}
178+
179+
180+
var nmsg = msg.cloneNode(true);
181+
nmsg.id = id;
182+
$(nmsg,'.user').textContent = user;
183+
$(nmsg,'.txt').textContent = txt;
184+
$(nmsg,'.ts').textContent = local;
185+
$(nmsg,'.del').onclick = del;
186+
187+
return nmsg;
188+
189+
190+
async function del(){
191+
192+
var password = $(shadow,'#password').value;
193+
var result = await post.del({password,id})
194+
if(!result)return;
195+
196+
}//del
197+
198+
}//message
199+
200+
201+
display.delete = function({id,del,ts}){
202+
console.log('delete',del);
203+
var item = msgs.find(data=>data.id===del);
204+
if(!item)return;
205+
$(item.node,'.txt').textContent = 'deleted';
206+
207+
}//delete
208+
209+
210+
211+
212+
return obj;
213+
214+
//chat-room-display
215+
})();
216+
217+
</script>
218+
219+
</chat-room-display>
220+

0 commit comments

Comments
 (0)