ADDRESSBOOK POPUP: templatize.
authorWilfried Goesgens <dothebart@citadel.org>
Fri, 24 Aug 2012 15:34:07 +0000 (17:34 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Fri, 24 Aug 2012 15:34:07 +0000 (17:34 +0200)
webcit/addressbook_popup.c
webcit/static/t/addressbook/list.html [new file with mode: 0644]
webcit/static/t/addressbook/list_entry.html [new file with mode: 0644]
webcit/static/t/addressbook/namelist.html [new file with mode: 0644]
webcit/static/t/addressbook/namelist_button.html [new file with mode: 0644]
webcit/static/t/addressbook/namelist_entry.html [new file with mode: 0644]
webcit/static/t/addressbook/popup.html [new file with mode: 0644]
webcit/static/t/addressbook_popup.html [deleted file]
webcit/static/wclib.js

index 72ab054d07a81a9749993a6b8e1f8e72e5899dd7..995ec6fd0219920ca92d36efd754171476e4123a 100644 (file)
 #include "webcit.h"
 
 
-/*
- * Address book popup window
- */
-void display_address_book_middle_div(void) {
-       char buf[256];
-       long len;
-       char *Name;
-       const char *VCName;
-       void *Namee;
-       StrBuf *DefAddrBook;
-       HashList *List;
-       HashPos  *it;
-
-       begin_ajax_response();
-
-       DefAddrBook = get_room_pref("defaddrbook");
-
-       wc_printf("<table border=0 width=100%%><tr valign=middle>");
-       wc_printf("<td align=left><img src=\"static/webcit_icons/essen/32x32/contact.png\"></td>");
-       wc_printf("<td align=center>");
-
-       wc_printf("<form>"
-               "<select class=\"address_book_popup_title\" size=1 id=\"which_addr_book\" "
-               " onChange=\"PopulateAddressBookInnerDiv($('which_addr_book').value,'%s')\">",
-               bstr("target_input")
-       );
-
-       wc_printf("<option value=\"__LOCAL_USERS__\" %s>", 
-               (strcmp(ChrPtr(DefAddrBook), "__LOCAL_USERS__") == 0)?
-               "selected=\"selected\" ":"");
-       escputs(ChrPtr(WC->serv_info->serv_humannode));
-       wc_printf("</option>\n");
-
-       
-       List = NewHash(1, NULL);
-       serv_puts("LKRA");
-       serv_getln(buf, sizeof buf);
-       if (buf[0] == '1') while(len = serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
-               if (extract_int(buf, 6) == VIEW_ADDRESSBOOK) {
-                       Name = (char*) malloc(len + 1);
-                       len = extract_token(Name, buf, 0, '|', len);
-                       Put(List, Name, len, Name, NULL);
-               }
-       }
-
-       SortByHashKey(List, 1);
-       it = GetNewHashPos(List, 0);
-       while (GetNextHashPos(List, it, &len, &VCName, &Namee)) {
-               wc_printf("<option value=\"");
-               urlescputs((char*)Namee);
-               if (strcmp(ChrPtr(DefAddrBook), Namee) == 0)
-                       wc_printf("\" selected=\"selected\" >");
-               else
-                       wc_printf("\">");
-               escputs((char*)Namee);
-               wc_printf("</option>\n");
-       }
-       DeleteHashPos(&it);
-       DeleteHash(&List);
-       wc_printf("</select></form>");
-
-       wc_printf("</td>");
-       wc_printf("<td align=right "
-               "onclick=\"javascript:$('address_book_popup').style.display='none';\" "
-               "><img src=\"static/webcit_icons/closewindow.gif\">");
-       wc_printf("</td></tr></table>");
-
-       wc_printf("<script type=\"text/javascript\">PopulateAddressBookInnerDiv($('which_addr_book').value,'%s');</script>",
-               bstr("target_input")
-       );
-
-       end_ajax_response();
-}
-
-
-
 /*
  * Address book popup results
  */
-void display_address_book_inner_div() {
-       char buf[256];
-       int num_targets = 0;
-       char target_id[64];
-       char target_label[64];
-       long len;
-       char *Name;
-       const char *VCName;
-       void *Namee;
-       HashList *List;
-       HashPos  *it;
-       int i;
+HashList* GetAddressbookList()
+{
+       HashList *List = NULL;
+       const StrBuf *WhichAddrBook;
        StrBuf *saved_roomname;
+       StrBuf *Name;
+       StrBuf *Line;
+       long BufLen;
+       int IsLocalAddrBook;
 
-       begin_ajax_response();
-
-       List = NewHash(1, NULL);
-       wc_printf("<div align=center><form onSubmit=\"return false;\">"
-               "<select multiple name=\"whichaddr\" id=\"whichaddr\" size=\"15\">\n");
+       WhichAddrBook = SBSTR("which_addr_book");
+       IsLocalAddrBook = strcasecmp(ChrPtr(WhichAddrBook), "__LOCAL_USERS__") == 1;
 
-       if (!strcasecmp(bstr("which_addr_book"), "__LOCAL_USERS__")) {
+       if (IsLocalAddrBook) {
                serv_puts("LIST");
-               serv_getln(buf, sizeof buf);
-               if (buf[0] == '1') while(len = serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
-                       Name = (char*) malloc(len + 1);
-                       len = extract_token(Name, buf, 0, '|', len + 1);
-                       if((len > 5) && (strncmp(Name, "SYS_", 4) == 0)) {
-                               free(Name);
-                               continue;
-                       }
-                       Put(List, Name, len, Name, NULL);
-
-               }
-               SortByHashKey(List, 1);
-               it = GetNewHashPos(List, 0);
-               while (GetNextHashPos(List, it, &len, &VCName, &Namee)) {
-                       wc_printf("<option value=\"");
-                       escputs((char*)Namee);
-                       wc_printf("\">");
-                       escputs((char*)Namee);
-                       wc_printf("</option>\n");
-               }
-               DeleteHashPos(&it);
-               DeleteHash(&List);
        }
-
        else {
-               set_room_pref("defaddrbook",NewStrBufDup(sbstr("which_addr_book")), 0);
+               /* remember the default addressbook for this room */
+               set_room_pref("defaddrbook", NewStrBufDup(WhichAddrBook), 0);
                saved_roomname = NewStrBufDup(WC->CurRoom.name);
-               gotoroom(sbstr("which_addr_book"));
+               gotoroom(WhichAddrBook);
                serv_puts("DVCA");
-               serv_getln(buf, sizeof buf);
-               if (buf[0] == '1') while(len = serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
-                       Name = (char*) malloc(len + 1);
-                       len = extract_token(Name, buf, 0, '|', len + 1);
-                       Put(List, Name, len, Name, NULL);
+       }
+       
+       Line = NewStrBuf();
+       StrBuf_ServGetln(Line);
+       if (GetServerStatus(Line, NULL)  == 1) {
+               List = NewHash(1, NULL);
+               while (BufLen = StrBuf_ServGetln(Line), 
+                      ((BufLen >= 0) && 
+                       ((BufLen != 3) || strcmp(ChrPtr(Line), "000"))))
+               {
+                       if (IsLocalAddrBook &&
+                           (BufLen > 5) &&
+                           (strncmp(ChrPtr(Line), "SYS_", 4) == 0))
+                       {
+                               continue;
+                       }
+                       Name = NewStrBufPlain(NULL, StrLength(Line));
+                       StrBufExtract_token(Name, Line, 0, '|');
+                       Put(List, SKEY(Name), Name, HFreeStrBuf);
 
                }
                SortByHashKey(List, 1);
-               it = GetNewHashPos(List, 0);
-               while (GetNextHashPos(List, it, &len, &VCName, (void**)&Namee)) {
-                       wc_printf("<option value=\"");
-                       escputs((char*)Namee);
-                       wc_printf("\">");
-                       escputs((char*)Namee);
-                       wc_printf("</option>\n");
-               }
-               DeleteHashPos(&it);
-               DeleteHash(&List);
-               gotoroom(saved_roomname);
-               FreeStrBuf(&saved_roomname);
        }
 
-       wc_printf("</select>\n");
-
-       wc_printf("%s: ", _("Add"));
-
-       num_targets = num_tokens(bstr("target_input"), '|');
-       for (i=0; i<num_targets; i+=2) {
-               extract_token(target_id, bstr("target_input"), i, '|', sizeof target_id);
-               extract_token(target_label, bstr("target_input"), i+1, '|', sizeof target_label);
-               wc_printf("<INPUT TYPE=\"submit\" NAME=\"select_button\" VALUE=\"%s\" ", target_label);
-               wc_printf("onClick=\"AddContactsToTarget($('%s'),$('whichaddr'));\">", target_id);
+       if (!IsLocalAddrBook) {
+               gotoroom(saved_roomname);
+               FreeStrBuf(&saved_roomname);
        }
 
-       /* This 'close window' button works.  Omitting it because we already have a close button
-        * in the upper right corner, and this one takes up space.
-        *
-       wc_printf("<INPUT TYPE=\"submit\" NAME=\"close_button\" VALUE=\"%s\" ", _("Close window"));
-       wc_printf("onclick=\"javascript:$('address_book_popup').style.display='none';\">");
-        */
-
-       wc_printf("</form></div>\n");
-
-       end_ajax_response();
+       return List;
 }
 
 
@@ -198,6 +79,6 @@ void
 InitModule_ADDRBOOK_POPUP
 (void)
 {
-       WebcitAddUrlHandler(HKEY("display_address_book_middle_div"), "", 0, display_address_book_middle_div, 0);
-       WebcitAddUrlHandler(HKEY("display_address_book_inner_div"), "", 0, display_address_book_inner_div, 0);
+
+       RegisterIterator("ITERATE:ABNAMES", 0, NULL, GetAddressbookList, NULL, NULL, CTX_STRBUF, CTX_NONE, IT_NOFLAG);
 }
diff --git a/webcit/static/t/addressbook/list.html b/webcit/static/t/addressbook/list.html
new file mode 100644 (file)
index 0000000..055f6ef
--- /dev/null
@@ -0,0 +1,17 @@
+<table border=0 width='100%'>
+  <tr valign=middle>
+    <td align=left><img src="static/webcit_icons/essen/32x32/contact.png"></td>
+    <td align=center>
+      <form>
+       <select class="address_book_popup_title" size=1 id="which_addr_book"  onChange="PopulateAddressBookInnerDiv($('which_addr_book').value,'<?BSTR("target_input", "X")>')">
+         <option value="__LOCAL_USERS__" ><?SERV:HUMANNODE("X")></option>
+               <?ITERATE("LKRA", ="addressbook_list_entry")>
+       </select>
+      </form>
+    </td>
+    <td align='right' onclick="javascript:$('address_book_popup').style.display='none';" >
+      <img src="static/webcit_icons/closewindow.gif">
+    </td>
+  </tr>
+</table>
+<script type="text/javascript">PopulateAddressBookInnerDiv($('which_addr_book').value,'<?BSTR("target_input", "X")>');</script>
diff --git a/webcit/static/t/addressbook/list_entry.html b/webcit/static/t/addressbook/list_entry.html
new file mode 100644 (file)
index 0000000..f913cf4
--- /dev/null
@@ -0,0 +1 @@
+<?!("COND:ROOM:INFO:TYPE_IS", 1, #"VIEW_ADDRESSBOOK")> <option value="<?ROOM:INFO:NAME("U")>" <?%("COND:ROOM:INFO:NAME_IS", 2, 0, ."defaddrbook", "selected", "")>><?ROOM:INFO:NAME("X")></option><??("X", 1)>
diff --git a/webcit/static/t/addressbook/namelist.html b/webcit/static/t/addressbook/namelist.html
new file mode 100644 (file)
index 0000000..c651bb2
--- /dev/null
@@ -0,0 +1,6 @@
+<div align=center><form onSubmit="return false;"><select multiple name="whichaddr" id="whichaddr" size="15">
+<?ITERATE("ITERATE:ABNAMES", ="addressbook_namelist_entry")>
+</select>
+<?_("Add:")>
+<?ITERATE("ITERATE:BSTR:PAIR", ="addressbook_namelist_button", "target_input")>
+</form></div>
diff --git a/webcit/static/t/addressbook/namelist_button.html b/webcit/static/t/addressbook/namelist_button.html
new file mode 100644 (file)
index 0000000..9dbd731
--- /dev/null
@@ -0,0 +1 @@
+<INPUT TYPE="submit" NAME="select_button" VALUE="<?BSTR:PAIR:Y("U")>" onClick="AddContactsToTarget($('<?BSTR:PAIR:X("X")>'),$('whichaddr'));">
diff --git a/webcit/static/t/addressbook/namelist_entry.html b/webcit/static/t/addressbook/namelist_entry.html
new file mode 100644 (file)
index 0000000..39047e4
--- /dev/null
@@ -0,0 +1 @@
+<option value="<?CONTEXTSTR("U")>"><?CONTEXTSTR("X")></option>
diff --git a/webcit/static/t/addressbook/popup.html b/webcit/static/t/addressbook/popup.html
new file mode 100644 (file)
index 0000000..557d7e6
--- /dev/null
@@ -0,0 +1,6 @@
+<div id="address_book_popup" style="display:none;">
+  <div id="address_book_popup_container_div">
+    <div id="address_book_popup_middle_div"></div>
+    <div id="address_book_inner_div"></div>
+  </div>
+</div>
diff --git a/webcit/static/t/addressbook_popup.html b/webcit/static/t/addressbook_popup.html
deleted file mode 100644 (file)
index 557d7e6..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<div id="address_book_popup" style="display:none;">
-  <div id="address_book_popup_container_div">
-    <div id="address_book_popup_middle_div"></div>
-    <div id="address_book_inner_div"></div>
-  </div>
-</div>
index c7d8a8516a3569c60ba970eeb2e98f8ddc9f6b00..9a159a112b509db88adfd702f5dd42e58d7cf41e 100644 (file)
@@ -690,7 +690,7 @@ function PopOpenAddressBook(target_input) {
        p = 'target_input=' + target_input + '&r=' + CtdlRandomString();
        new Ajax.Updater(
                'address_book_popup_middle_div',
-               'display_address_book_middle_div',
+               'do_template?template=addressbook_list',
                {
                        method: 'get',
                        parameters: p,
@@ -700,18 +700,19 @@ function PopOpenAddressBook(target_input) {
 }
 
 function PopulateAddressBookInnerDiv(which_addr_book, target_input) {
-       $('address_book_inner_div').innerHTML = "<div align=center><br><table border=0 cellpadding=10 bgcolor=\"#ffffff\"><tr><td><img src=\"static/throbber.gif\" /><font color=\"#AAAAAA\">&nbsp;&nbsp;Loading....</font></td></tr></table><br></div>";
-       p = 'which_addr_book=' + which_addr_book
-         + '&target_input=' + target_input
-         + '&r=' + CtdlRandomString();
-       new Ajax.Updater(
-               'address_book_inner_div',
-               'display_address_book_inner_div',
-               {
-                       method: 'get',
-                       parameters: p
-               }
-       );
+    $('address_book_inner_div').innerHTML = "<div align=center><br><table border=0 cellpadding=10 bgcolor=\"#ffffff\"><tr><td><img src=\"static/throbber.gif\" /><font color=\"#AAAAAA\">&nbsp;&nbsp;Loading....</font></td></tr></table><br></div>";
+    p = 'which_addr_book=' + which_addr_book
+       + '&target_input=' + target_input
+       + '&r=' + CtdlRandomString()
+       + "&template=addressbook_namelist";
+    new Ajax.Updater(
+       'address_book_inner_div',
+       'do_template',
+       {
+           method: 'get',
+           parameters: p
+       }
+    );
 }
 
 // What happens when a contact is selected from the address book popup