]> err.no Git - scalable-opengroupware.org/commitdiff
added incremental searches without page refreshes
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 23 Feb 2005 00:00:54 +0000 (00:00 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 23 Feb 2005 00:00:54 +0000 (00:00 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@607 d1b88da0-ebda-0310-925b-ed51d893ca5b

12 files changed:
SOGo/UI/MailerUI/ChangeLog
SOGo/UI/MailerUI/GNUmakefile
SOGo/UI/MailerUI/UIxMailFilterPanel.m
SOGo/UI/MailerUI/UIxMailListView.m
SOGo/UI/MailerUI/Version
SOGo/UI/MailerUI/generic.js [new file with mode: 0644]
SOGo/UI/MailerUI/mailer.js
SOGo/UI/MailerUI/product.plist
SOGo/UI/MailerUI/searchfield.js [new file with mode: 0644]
SOGo/UI/Templates/MailerUI/UIxMailFilterPanel.wox
SOGo/UI/Templates/MailerUI/UIxMailListView.wox
SOGo/UI/Templates/MailerUI/UIxMailMainFrame.wox

index 2228fc617e734464decd53636ed383b6f36b2acc..b49c02e6202cb3f8df55269b13d646583fde1765 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-23  Helge Hess  <helge.hess@opengroupware.org>
+
+       * mailer.js: split into multiple files (v0.9.121)
+
 2005-02-22  Helge Hess  <helge.hess@opengroupware.org>
 
        * UIxMailMainFrame.m: added ability not to generate the HTML frame 
index 655daefd17e9ace0848bd04b5365b1999a97e3b8..fc5bfd7ca37d9d52fb511285f45e52fc8817a586 100644 (file)
@@ -49,6 +49,8 @@ MailerUI_RESOURCE_FILES += \
        uix.css                 \
        mailer.css              \
        mailer.js               \
+       generic.js              \
+       searchfield.js          \
 
 MailerUI_RESOURCE_FILES += \
        Images/tbtv_*.gif       \
index 6004bb0d2f7c34fe8326ec31b92374ca82c86b56..f0a76e6469b841f3c3a7da3007314d6d67ff09de 100644 (file)
 @interface UIxMailFilterPanel : WOComponent
 {
   NSString *searchText;
+  struct {
+    int hideFrame:1;
+    int reserved:31;
+  } mfFlags;
 }
 
 @end
@@ -75,6 +79,13 @@ static NSDictionary *filterToQualifier = nil;
 
 /* accessors */
 
+- (void)setHideFrame:(BOOL)_flag {
+   self->mfFlags.hideFrame = _flag ? 1 : 0;
+}
+- (BOOL)hideFrame {
+  return self->mfFlags.hideFrame ? YES : NO;
+}
+
 - (void)setSearchText:(NSString *)_txt {
   ASSIGNCOPY(self->searchText, _txt);
 }
@@ -82,7 +93,7 @@ static NSDictionary *filterToQualifier = nil;
   if (self->searchText == nil) {
     // TODO: kinda hack
     self->searchText = 
-      [[[[self context] request] formValueForKey:@"searchtext"] copy];
+      [[[[self context] request] formValueForKey:@"search"] copy];
   }
   return self->searchText;
 }
index 85683e802b8f3927b63bda1e88fb70a0a6e388ba..f8a2f10280c5f7d8b306e7b0b670561061fa7d03 100644 (file)
@@ -63,6 +63,12 @@ static int attachmentFlagSize = 8096;
   [super dealloc];
 }
 
+/* frame */
+
+- (BOOL)hideFrame {
+  return [[[[self context] request] formValueForKey:@"noframe"] boolValue];
+}
+
 /* notifications */
 
 - (void)sleep {
index e5c391c65583b95177d0288ae9c684664b6cd6c1..327f9cadcaf9a533e1a65ea33adb1dc4e16be1ae 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=120
+SUBMINOR_VERSION:=121
 
 # v0.9.100 requires libNGMime        v4.5.213
 # v0.9.99  requires libNGMime        v4.5.212
diff --git a/SOGo/UI/MailerUI/generic.js b/SOGo/UI/MailerUI/generic.js
new file mode 100644 (file)
index 0000000..8cb97c5
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+  Copyright (C) 2005 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+/* some generic JavaScript code for SOGo */
+
+/* generic stuff */
+
+function ml_stripActionInURL(url) {
+  if (url[url.length - 1] != '/') {
+    var i;
+    
+    i = url.lastIndexOf("/");
+    if (i != -1) url = url.substring(0, i);
+  }
+  if (url[url.length - 1] != '/') // ensure trailing slash
+    url = url + "/";
+  return url;
+}
+
+function escapeHTML(s) {
+        s = s.replace(/&/g, "&amp;");
+        s = s.replace(/</g, "&lt;");
+        s = s.replace(/>/g, "&gt;");
+        s = s.replace(/"/g, "&quot;");
+        return s;
+}
+function unescapeHTML(s) {
+        s = s.replace(/&lt;/g, "<");
+        s = s.replace(/&gt;/g, ">");
+        s = s.replace(/&quot;/g, '"');
+        s = s.replace(/&amp;/g, "&");
+        return s;
+}
+
+function createHTTPClient() {
+  // http://developer.apple.com/internet/webcontent/xmlhttpreq.html
+  if (typeof XMLHttpRequest != "undefined")
+    return new XMLHttpRequest();
+  
+  try { return new ActiveXObject("Msxml2.XMLHTTP"); } 
+  catch (e) { }
+  try { return new ActiveXObject("Microsoft.XMLHTTP"); } 
+  catch (e) { }
+  return null;
+}
+
+function resetSelection(win) {
+  var t = "";
+  if (win && win.getSelection) {
+    t = win.getSelection().toString();
+    win.getSelection().removeAllRanges();
+  }
+  return t;
+}
+
+function refreshOpener() {
+  if (window.opener && !window.opener.closed) {
+    window.opener.location.reload();
+  }
+}
+
+function getQueryParaArray(s) {
+  if (s.charAt(0) == "?") s = s.substr(1, s.length - 1);
+  return s.split("&");
+}
+function getQueryParaValue(s, name) {
+  var t;
+  
+  t = getQueryParaArray(s);
+  for (var i = 0; i < t.length; i++) {
+    var s = t[i];
+    
+    if (s.indexOf(name) != 0)
+      continue;
+    
+    s = s.substr(name.length, s.length - name.length);
+    return decodeURIComponent(s);
+  }
+  return null;
+}
+
+function triggerOpenerCallback() {
+  /* this code has some issue if the folder has no proper trailing slash! */
+  if (window.opener && !window.opener.closed) {
+    var t, cburl;
+    
+    t = getQueryParaValue(window.location.search, "openerurl=");
+    cburl = window.opener.location.href;
+    if (cburl[cburl.length - 1] != "/") {
+      cburl = cburl.substr(0, cburl.lastIndexOf("/") + 1);
+    }
+    cburl = cburl + t;
+    window.opener.location.href = cburl;
+  }
+}
index b97829f4b4e23d811da5f806f6809d83af1dd58c..7c6e9ad271a1777764dca16f36fd6e6dea5d45c1 100644 (file)
@@ -74,7 +74,7 @@ function collectSelectedRows() {
 }
 
 function clearSearch(sender) {
-  var searchField = window.document.getElementById("searchtext");
+  var searchField = window.document.getElementById("search");
   if (searchField) searchField.value="";
   return true;
 }
@@ -191,97 +191,6 @@ function clickedNewFilter(sender) {
   return false; /* stop following the link */
 }
 
-/* generic stuff */
-
-function ml_stripActionInURL(url) {
-  if (url[url.length - 1] != '/') {
-    var i;
-    
-    i = url.lastIndexOf("/");
-    if (i != -1) url = url.substring(0, i);
-  }
-  if (url[url.length - 1] != '/') // ensure trailing slash
-    url = url + "/";
-  return url;
-}
-
-function escapeHTML(s) {
-        s = s.replace(/&/g, "&amp;");
-        s = s.replace(/</g, "&lt;");
-        s = s.replace(/>/g, "&gt;");
-        s = s.replace(/"/g, "&quot;");
-        return s;
-}
-function unescapeHTML(s) {
-        s = s.replace(/&lt;/g, "<");
-        s = s.replace(/&gt;/g, ">");
-        s = s.replace(/&quot;/g, '"');
-        s = s.replace(/&amp;/g, "&");
-        return s;
-}
-
-function createHTTPClient() {
-  // http://developer.apple.com/internet/webcontent/xmlhttpreq.html
-  if (typeof XMLHttpRequest != "undefined")
-    return new XMLHttpRequest();
-  
-  try { return new ActiveXObject("Msxml2.XMLHTTP"); } 
-  catch (e) { }
-  try { return new ActiveXObject("Microsoft.XMLHTTP"); } 
-  catch (e) { }
-  return null;
-}
-
-function resetSelection(win) {
-  var t = "";
-  if (win && win.getSelection) {
-    t = win.getSelection().toString();
-    win.getSelection().removeAllRanges();
-  }
-  return t;
-}
-
-function refreshOpener() {
-  if (window.opener && !window.opener.closed) {
-    window.opener.location.reload();
-  }
-}
-
-function getQueryParaArray(s) {
-  if (s.charAt(0) == "?") s = s.substr(1, s.length - 1);
-  return s.split("&");
-}
-function getQueryParaValue(s, name) {
-  var t;
-  
-  t = getQueryParaArray(s);
-  for (var i = 0; i < t.length; i++) {
-    var s = t[i];
-    
-    if (s.indexOf(name) != 0)
-      continue;
-    
-    s = s.substr(name.length, s.length - name.length);
-    return decodeURIComponent(s);
-  }
-  return null;
-}
-
-function triggerOpenerCallback() {
-  /* this code has some issue if the folder has no proper trailing slash! */
-  if (window.opener && !window.opener.closed) {
-    var t, cburl;
-    
-    t = getQueryParaValue(window.location.search, "openerurl=");
-    cburl = window.opener.location.href;
-    if (cburl[cburl.length - 1] != "/") {
-      cburl = cburl.substr(0, cburl.lastIndexOf("/") + 1);
-    }
-    cburl = cburl + t;
-    window.opener.location.href = cburl;
-  }
-}
-
 /* mail list DOM changes */
 
 function markMailInWindow(win, msguid, markread) {
@@ -385,91 +294,3 @@ function ml_lowlight(sender) {
   else
     sender.className = "tableview";
 }
-
-
-/* search field */
-
-var didStop      = false;
-var field        = null;
-var firstValue   = "";
-var isRegistered = false;
-var lastKeyPress = null;
-var submitAfterMS = 500;
-
-function ml_reloadTableView(searchtext, elementid) {
-  var http = createHTTPClient();
-
-  if (http) {
-    var viewURL, url;
-    var hasQueryPara;
-    
-    viewURL      = this.location.href;
-    hasQueryPara = viewURL.indexOf("?") == -1 ? false : true;
-    url          = viewURL.replace(/\/tb\.view/, "/tb.view?noframe=1");
-    url = url + (hasQueryPara ? "&search=" : "?search=") + searchtext;
-    
-    http.open("GET", url, false);
-    http.send(null);
-    if (http.status != 200) {
-      alert("Could not reload view.");
-    }
-    else {
-      var tv;
-
-      tv = document.getElementById(elementid)
-      tv.innerHTML = http.responseText;
-    }
-  }
-}
-
-function ml_reloadSearchIfFieldChanged() {
-  if (field) {
-    if (field.value != firstValue) {
-      // TODO: we should just reload the tableview, not the whole page
-      //document.pageform.submit();
-      ml_reloadTableView(field.value, "cl_tableview_reloadroot");
-    }
-  }
-}
-
-function ml_timeoutCallback() {
-  if (didStop) {
-    didStop = false;
-    return;
-  }
-  
-  var now = new Date().getTime();
-  if ((now - lastKeyPress) < submitAfterMS) {
-    setTimeout("ml_timeoutCallback()", 10);
-    isRegistered = true;
-    return;
-  }
-  
-  ml_reloadSearchIfFieldChanged();
-  isRegistered = false;
-}
-
-function ml_activateSearchField(sender, _submitTimeout) {
-  didStop    = false;
-  field      = sender;
-  firstValue = field.value;
-  submitAfterMS = _submitTimeout;
-  return true;
-}
-function ml_deactivateSearchField(sender) {
-  didStop    = true;
-  field      = null;
-  firstValue = "";
-  return true;
-}
-
-function ml_searchFieldKeyPressed(sender) {
-  lastKeyPress = new Date().getTime();
-
-  if (isRegistered)
-    return;
-  
-  setTimeout("ml_timeoutCallback()", 10);
-  isRegistered = true;
-  return true;
-}
index df20f0bd8d262d339fc94c9296e568bf89468197..3d334677af38f5f45ef9767f4397eb7a5c82151f 100644 (file)
@@ -5,6 +5,8 @@
     "uix.css",
     "mailer.css",
     "mailer.js",
+    "generic.js",
+    "searchfield.js",
     
     "lori_32x32.png",
     
diff --git a/SOGo/UI/MailerUI/searchfield.js b/SOGo/UI/MailerUI/searchfield.js
new file mode 100644 (file)
index 0000000..22f9dc6
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+  Copyright (C) 2005 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+/* JavaScript for SOGo Mailer */
+
+var didStop      = false;
+var field        = null;
+var firstValue   = "";
+var isRegistered = false;
+var lastKeyPress = null;
+var submitAfterMS = 500;
+
+function ml_reloadTableView(searchtext, elementid) {
+  var http = createHTTPClient();
+
+  if (http) {
+    var viewURL, url;
+    var hasQueryPara;
+
+    // TODO: properly parse query parameters    
+    viewURL      = this.location.href;
+    hasQueryPara = viewURL.indexOf("?") == -1 ? false : true;
+    url = viewURL + "?noframe=1&search=" + searchtext;
+    
+    http.open("GET", url, false);
+    http.send(null);
+    if (http.status != 200) {
+      alert("Could not reload view.");
+    }
+    else {
+      var tv;
+
+      tv = document.getElementById(elementid)
+      tv.innerHTML = http.responseText;
+    }
+  }
+}
+
+function ml_reloadSearchIfFieldChanged() {
+  if (field) {
+    if (field.value != firstValue) {
+      ml_reloadTableView(field.value, "cl_tableview_reloadroot");
+      firstValue = field.value;
+    }
+  }
+}
+
+function ml_timeoutCallback() {
+  if (didStop) {
+    didStop = false;
+    return;
+  }
+  
+  var now = new Date().getTime();
+  if ((now - lastKeyPress) < submitAfterMS) {
+    setTimeout("ml_timeoutCallback()", 10);
+    isRegistered = true;
+    return;
+  }
+  
+  ml_reloadSearchIfFieldChanged();
+  isRegistered = false;
+}
+
+function ml_activateSearchField(sender, _submitTimeout) {
+  didStop    = false;
+  field      = sender;
+  firstValue = field.value;
+  submitAfterMS = _submitTimeout;
+  return true;
+}
+function ml_deactivateSearchField(sender) {
+  didStop    = true;
+  field      = null;
+  firstValue = "";
+  return true;
+}
+
+function ml_searchFieldKeyPressed(sender) {
+  lastKeyPress = new Date().getTime();
+
+  if (isRegistered)
+    return;
+  
+  setTimeout("ml_timeoutCallback()", 10);
+  isRegistered = true;
+  return true;
+}
index 709c418e0f6d6546082abb9ec5da364a2bc82810..7adf6a5d843428e722895c6b758df9d0050f114c 100644 (file)
@@ -1,4 +1,10 @@
 <?xml version='1.0' standalone='yes'?>
+<container 
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:var="http://www.skyrix.com/od/binding"
+  xmlns:const="http://www.skyrix.com/od/constant"
+>
+  <var:if condition="hideFrame" const:negate="YES">
 <table
   xmlns="http://www.w3.org/1999/xhtml"
   xmlns:var="http://www.skyrix.com/od/binding"
@@ -24,7 +30,7 @@
       <var:string label:value="Subject or Sender contains" />:
     </td>
     <td class="titlecell" style="width: 80%; padding-right: 1px;">
-      <input name="searchtext" type="text" var:value="searchText" 
+      <input name="search" type="text" var:value="searchText" 
              style="width: 100%;"
              autocomplete="off"
              onkeypress="ml_searchFieldKeyPressed(this)"
@@ -33,3 +39,5 @@
     </td>
   </tr>
 </table>
+</var:if>
+</container>
index 567a6ccae69e61b10ff8eaa7d0e60a8557396fad..af5a2d818a779fd0664168f501489c9ec280e671 100644 (file)
@@ -8,9 +8,12 @@
   xmlns:label="OGo:label"
   className="UIxMailMainFrame"
   title="panelTitle"
+  hideFrame="hideFrame"
 >
-  <var:component className="UIxMailFilterPanel" qualifier="qualifier" />
+  <var:component className="UIxMailFilterPanel" qualifier="qualifier" 
+                 hideFrame="hideFrame" />
 
+ <div id="cl_tableview_reloadroot">
   <div class="embedwhite_out">
     <div class="embedwhite_in">
       <script language="JavaScript">
       </span>
     </div>
   </div>
+ </div>
 
-  <script language="JavaScript">
-    document.pageform.searchtext.focus();
-  </script>
+  <var:if condition="hideFrame" const:negate="YES">
+    <script language="JavaScript">
+      document.pageform.searchtext.focus();
+    </script>
+  </var:if>
 </var:component>
index 7ecb19af885773609ff814265967742a2bfe57fb..6e80dcf96b205f0308c64d3f32e32bb18752b4df 100644 (file)
@@ -21,7 +21,9 @@
     <meta name="author" content="SKYRIX Software AG"/>
     <meta name="robots" content="stop"/>
     
-    <script rsrc:src="mailer.js"> </script>
+    <script rsrc:src="generic.js"    > <!-- space required --></script>
+    <script rsrc:src="mailer.js"     > <!-- space required --></script>
+    <script rsrc:src="searchfield.js"> <!-- space required --></script>
     
     <link type="text/css" rel="stylesheet" rsrc:href="uix.css"/>
     <link type="text/css" rel="stylesheet" rsrc:href="mailer.css"/>