$Id$
+Wed Jan 11 23:20:48 EST 2006 ajc
+* More updates to instant messenger:
+ - Better delineation of input box. Added an icon and a slightly darker
+ background color so you can see where the input box actually is.
+ - Auto refresh every 5 seconds instead of 30
+ - WebCit now fires off a JavaScript test after 30 seconds of inactivity
+ to see if the instant messenger window needs to be opened
+
Wed Jan 11 16:59:54 EST 2006 ajc
* More updates to instant messenger. When new messages arrive, the window
automatically scrolls to the bottom and the input box is refocused.
{
char buf[SIZ];
+ /* First, do the check as part of our page load. */
serv_puts("NOOP");
serv_getln(buf, sizeof buf);
if (buf[3] == '*') {
if ((time(NULL) - WC->last_pager_check) > 60) {
wprintf("<script type=\"text/javascript\">"
" window.open('static/instant_messenger.html', 'CTDL_MESSENGER', "
- " 'width=600,height=400');"
+ " 'width=700,height=400');"
"</script>"
);
}
}
+
+ /* Then schedule it to happen again a minute from now if the user is idle. */
+ wprintf("<script type=\"text/javascript\"> "
+ " function HandleSslp(sslg_xmlresponse) { "
+ " sslg_response = sslg_xmlresponse.responseText.substr(0, 1); "
+ " if (sslg_response == 'Y') { "
+ " window.open('static/instant_messenger.html', 'CTDL_MESSENGER', "
+ " 'width=700,height=400'); "
+ " } "
+ " } "
+ " function CheckPager() { "
+ " new Ajax.Request('sslg', { method: 'get', onSuccess: HandleSslp } ); "
+ " } "
+ " new PeriodicalExecuter(CheckPager, 30); "
+ "</script>\n"
+ );
}
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="wclib.js"></script>
</head>
-<body>
+<body onLoad='FetchNewMsgs();'>
<div id="thetop" style="position:fixed;width:100%;height:15%;top:0%;left:0%">
<div id="spacer1" style="background:#aaaaaa"><br></div>
+ '<div id=\"tab_' + which_div + '\" style=\"display:none;cursor:pointer\">'
+ '<div id=\"' + which_div + '\">'
+ '</div>'
- + '<div id=\"response_' + which_div + '\">'
+ + '<div id=\"response_' + which_div + '\" style=\"background:#ddddee\">'
+ '<br><form method=\"post\" action=\"null\" name=\"sendform_' + which_div + '\" '
+ 'onSubmit=\"return SendSomething(\'' + which_div + '\', \'sendform_'
+ which_div + '\', \'' + sender + '\');\">'
- + '<input type=\"text\" size=\"80\" maxlength=\"80\" name=\"sendthis\">'
+ + '<img src=\"citadelchat_16x.gif\"> '
+ + '<input type=\"text\" size=\"72\" maxlength=\"72\" name=\"sendthis\">'
+ '</form>'
- + '</div>'
+ + '<br></div>'
+ '</div>\n';
$('tab_bar').innerHTML =
$('tab_bar').innerHTML
// Cause FetchNewMsgs() to be called periodically.
-new PeriodicalExecuter(FetchNewMsgs, 3);
+new PeriodicalExecuter(FetchNewMsgs, 5);
</script>
if ( (WC->logged_in) && (!unset_cookies) ) {
wprintf("<div id=\"iconbar\">");
do_selected_iconbar();
- wprintf("</div>\n");
}
if (do_room_banner == 1) {
wprintf("<div id=\"banner\">\n");
begin_ajax_response();
- /* lprintf(9, "Sending cmd: %s\n", bstr("g_cmd")); */
serv_printf("%s", bstr("g_cmd"));
serv_getln(buf, sizeof buf);
wprintf("%s\n", buf);
- /* lprintf(9, " Response: %s\n", buf); */
if (buf[0] == '8') {
serv_printf("\n\n000");
}
end_ajax_response();
+
+ /* This is kind of an ugly hack, but this is the only place it can go.
+ * If the command was GEXP, then the instant messenger window must be
+ * running, so reset the "last_pager_check" watchdog timer so
+ * that page_popup() doesn't try to open it a second time.
+ */
+ if (!strncasecmp(bstr("g_cmd"), "GEXP", 4)) {
+ WC->last_pager_check = time(NULL);
+ }
}
+/*
+ * Helper function for the asynchronous check to see if we need
+ * to open the instant messenger window.
+ */
+void seconds_since_last_gexp(void)
+{
+ char buf[256];
+
+ begin_ajax_response();
+ if ( (time(NULL) - WC->last_pager_check) < 30) {
+ wprintf("NO\n");
+ }
+ else {
+ serv_puts("NOOP");
+ serv_getln(buf, sizeof buf);
+ if (buf[3] == '*') {
+ wprintf("YES");
+ }
+ else {
+ wprintf("NO");
+ }
+ }
+ end_ajax_response();
+}
display_main_menu();
} else if (!strcasecmp(action, "who")) {
who();
+ } else if (!strcasecmp(action, "sslg")) {
+ seconds_since_last_gexp();
} else if (!strcasecmp(action, "who_inner_html")) {
begin_ajax_response();
who_inner_div();