]> code.citadel.org Git - citadel.git/blobdiff - webcit/static/wclib.js
* CtdlDragDrop library now works in IE7 and 8
[citadel.git] / webcit / static / wclib.js
index 5d530d56681c11c3b4b868ddc504c432d54ffeb4..f7397ed9836ae0f1464380afbf8dab5d8b3cb0cd 100644 (file)
@@ -20,6 +20,8 @@ var currentDropTarget = null;
 var supportsAddEventListener = (!!document.addEventListener);
 var today = new Date();
 
+var wc_log = "";
+var is_ie6 = false;
 if (document.all) {browserType = "ie"}
 if (window.navigator.userAgent.toLowerCase().match("gecko")) {
        browserType= "gecko";
@@ -40,7 +42,11 @@ function CtdlRandomString()  {
 function emptyElement(element) {
   childNodes = element.childNodes;
   for(var i=0; i<childNodes.length; i++) {
+    try {
     element.removeChild(childNodes[i]);
+    } catch (e) {
+      WCLog(e+"|"+e.description);
+    }
   }
 }
 /** Implements superior internet explorer 'extract all child text from element' feature'. Falls back on buggy, patent violating standardized method */
@@ -191,6 +197,10 @@ function switch_to_menu_buttons() {
 }
 function IconBarRoomList() {
   var currentExpanded = ctdlLocalPrefs.readPref("rooms_expanded");
+  var curRoomName = "";
+  if (document.getElementById("rmname")) {
+    curRoomName = getTextContent(document.getElementById("rmname"));
+  }
   currentDropTargets = new Array();
   var iconbar = document.getElementById("iconbar");
   roomlist = document.getElementById("roomlist");
@@ -204,15 +214,15 @@ function IconBarRoomList() {
   mailboxSPAN.appendChild(document.createTextNode(_mailbox));
   $(mailboxSPAN).observe('click', expandFloorEvent);
   mailboxLI.appendChild(mailboxSPAN);
-  mailboxLI.setAttribute("class", "floor");
+  mailboxLI.className = "floor";
   var mailboxUL = document.createElement("ul");
   mailboxLI.appendChild(mailboxUL);
   var mailboxRooms = GetMailboxRooms();
   for(var i=0; i<mailboxRooms.length; i++) {
     var room = mailboxRooms[i];
-    currentDropTargets.push(addRoomToList(mailboxUL, room));
+    currentDropTargets.push(addRoomToList(mailboxUL, room, curRoomName));
   }
-  if (currentExpanded != null && currentExpanded == "Mailbox") {
+  if (currentExpanded != null && currentExpanded == _mailbox ) {
     expandFloor(mailboxSPAN);
   }
   for(var a=0; a<floors.length; a++) {
@@ -225,13 +235,13 @@ function IconBarRoomList() {
     floorSPAN.appendChild(document.createTextNode(name));
     $(floorSPAN).observe('click', expandFloorEvent);
     floorLI.appendChild(floorSPAN);
-    floorLI.setAttribute("class", "floor");
+    floorLI.className = "floor";
     var floorUL = document.createElement("ul");
     floorLI.appendChild(floorUL);
     var roomsForFloor = GetRoomsByFloorNum(floornum);
     for(var b=0; b<roomsForFloor.length; b++) {
       var room = roomsForFloor[b];
-      currentDropTargets.push(addRoomToList(floorUL, room));
+      currentDropTargets.push(addRoomToList(floorUL, room, curRoomName));
     }
     if (currentExpanded != null && currentExpanded == name) {
       expandFloor(floorSPAN);
@@ -239,7 +249,7 @@ function IconBarRoomList() {
   }
 }
 
-function addRoomToList(floorUL,room) {
+function addRoomToList(floorUL,room, roomToEmphasize) {
   var roomName = room[RN_ROOM_NAME];
   var flag = room[RN_ROOM_FLAG];
   var curView = room[RN_CUR_VIEW];
@@ -269,6 +279,9 @@ function addRoomToList(floorUL,room) {
   if (hasNewMsgs) {
     className += " room-newmsgs";
   }
+  if (roomName == roomToEmphasize) {
+    className += " room-emphasized";
+  }
   roomLI.setAttribute("class", className);
   roomA.dropTarget = true;
   roomA.dropHandler = roomListDropHandler;
@@ -766,6 +779,8 @@ function WCLog(msg) {
     console.log(msg);
   } else if (!!window.opera && !!opera.postError) {
     opera.postError(msg);
+  } else {
+    wc_log += msg + "\r\n";
   }
 }
 
@@ -794,11 +809,31 @@ function fixbanner() {
   // Use prototype api methods here
   var elems = [$('room_banner'),$('actiondiv')];
   fixMissingCSSTable(elems);
-  var banner = $('banner'); 
-  if (banner != null) {
+  if (!is_ie6) {
+    Event.observe(window, 'resize', makeContentScrollable);
+    makeContentScrollable();
+  }
+}
+function makeContentScrollable() {
+if (document.getElementById("banner")
+      && document.getElementById("content") 
+      && !document.getElementById("summary_view")) {
+  WCLog("makeContentScrollable");
+    document.body.style.overflowY="hidden";
+    var global = $("global");
+    global.className += "scrollable";
+    var content = document.getElementById("content");
+    var banner = document.getElementById("banner");
+    var bannerHeight = banner.offsetHeight;
+    banner.style.width="100%";
+    var bannerPercent = (bannerHeight/document.viewport.getHeight())*100;
+    //banner.style.height=bannerPercent+"%";
+    content.style.overflowY="scroll";
+    //content.style.top=bannerPercent+"%";
+    content.style.height=(100-bannerPercent)+"%";
+    content.style.right="0px";
   }
 }
-
 function fixOffsetBanner() {
   var banner = document.getElementById("banner");
   if (banner.offsetLeft > 0) {
@@ -809,12 +844,15 @@ function fixOffsetBanner() {
     contentDiv.style.width = newContentWidth+"px";
   }
 }
-/** Attempt to stop overflowing in x-axis in IE */
+/** Attempt to stop overflowing in x-axis in IE6 */
 function resizeViewport() {
   var documentWidth = 0;
   var viewportWidth = document.viewport.getWidth();
   var iconbar = $('iconbar');
   var global = $('global');
+  if (iconbar == null || global == null || document.documentElement == null) {
+    return;
+  }
   if (typeof window.offsetWidth != 'undefined') {
     documentWidth = window.offsetWidth;
   } else {