Warning: session_start(): open(/var/lib/php/sessions/sess_mjnrv95brmaqc534ijd0kg3pac, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
abstract sclass DynConvo > DynModule {
L posts_raw = new L; // underlying list
transient L posts; // list with notify
S userInput;
transient JChatConvo view;
start {
posts = dm_synchroList(this, posts_raw);
}
Pt minimumSize() { ret pt(300, 300); }
O[] menuItems() {
ret litarray("Clear", rEnter clearPosts);
}
visualize {
print("Have posts: " + posts);
view = swing(() -> new JChatConvo);
view.usePostsList(posts);
ret centerAndSouth(
jscroll_trackWidth(view),
withMargin(bottomPart()));
}
JComponent bottomPart() {
ret dm_textFieldAndSubmit userInput('sendInput, buttonText := "Send");
}
void sendInput {
S s = trim(userInput);
if (nempty(s)) {
addPost(htmlEncode2(s), false);
vmBus_send chatUserInput(module(), s);
setField(userInput := "");
}
}
// API
void addPost(S html, bool right) swing {
posts.add(new JChatConvo.Post(html, right));
view?.updateAndScrollDown();
}
void clearPosts swing { posts.clear(); view?.updateAndScrollDown(); }
void reply(S s) {
if (empty(s = trim(s))) ret;
addPost(htmlEncode2(s), true);
}
}