From 0dbac3218130dfe418d6c7dc162f819c746bec2d Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 04 Sep 2008 14:20:27 -0400
Subject: [PATCH] Enable export of contacts as vCard + DRY

---
 program/js/app.js |  101 ++++++++++++++++++++++++++++----------------------
 1 files changed, 57 insertions(+), 44 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 7ba8572..3e49fc3 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -205,10 +205,7 @@
         if (this.env.messagecount)
           this.enable_command('select-all', 'select-none', 'expunge', true);
 
-        if (this.env.messagecount 
-            && (this.env.mailbox == this.env.trash_mailbox || this.env.mailbox == this.env.junk_mailbox 
-              || this.env.mailbox.match('^' + RegExp.escape(this.env.trash_mailbox) + RegExp.escape(this.env.delimiter)) 
-              || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter))))
+        if (this.purge_mailbox_test())
           this.enable_command('purge', true);
 
         this.set_page_buttons();
@@ -282,6 +279,9 @@
           this.enable_command('save', true);
         else
           this.enable_command('search', 'reset-search', 'moveto', 'import', true);
+          
+        if (this.contact_list && this.contact_list.rowcount > 0)
+          this.enable_command('export', true);
 
         this.enable_command('list', true);
         break;
@@ -1002,7 +1002,17 @@
         }
         else
           this.goto_url('import');
-        break
+        break;
+        
+      case 'export':
+        if (this.contact_list.rowcount > 0) {
+          var add_url = '';
+          if (this.env.search_request)
+            add_url = '_search='+this.env.search_request;
+        
+          this.goto_url('export', add_url);
+        }
+        break;
 
       // collapse/expand folder
       case 'collapse-folder':
@@ -1490,7 +1500,15 @@
     return true;
     };
 
-  
+  // test if purge command is allowed
+  this.purge_mailbox_test = function()
+  {
+    return (this.env.messagecount && (this.env.mailbox == this.env.trash_mailbox || this.env.mailbox == this.env.junk_mailbox 
+      || this.env.mailbox.match('^' + RegExp.escape(this.env.trash_mailbox) + RegExp.escape(this.env.delimiter)) 
+      || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter))));
+  };
+
+
   // move selected messages to the specified mailbox
   this.move_messages = function(mbox)
     {
@@ -1900,7 +1918,8 @@
         }
       }
   };
-
+  
+  
   /*********************************************************/
   /*********           login form methods          *********/
   /*********************************************************/
@@ -3599,6 +3618,7 @@
       }
     
     this.contact_list.insert_row(row);
+    this.enable_command('export', (this.contact_list.rowcount > 0));
     };
 
 
@@ -3739,53 +3759,46 @@
       eval(request_obj.get_text());
 
     // process the response data according to the sent action
-    switch (request_obj.__action)
-      {
-
+    switch (request_obj.__action) {
       case 'delete':
-	if (this.task == 'addressbook')
-	  {
-	    var uid = this.contact_list.get_selection();
-	    this.enable_command('compose', (uid && this.contact_list.rows[uid]));
-	    this.enable_command('delete', 'edit', (uid && this.contact_list.rows[uid] && this.env.address_sources && !this.env.address_sources[this.env.source].readonly));
-	    break;  
-	  }
+        if (this.task == 'addressbook') {
+          var uid = this.contact_list.get_selection();
+          this.enable_command('compose', (uid && this.contact_list.rows[uid]));
+          this.enable_command('delete', 'edit', (uid && this.contact_list.rows[uid] && this.env.address_sources && !this.env.address_sources[this.env.source].readonly));
+          this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0));
+        }
+      
       case 'moveto':
-        if (this.env.action=='show')
+        if (this.env.action == 'show')
           this.command('list');
         else if (this.message_list)
           this.message_list.init();
-	  
+        break;
+        
       case 'purge':
       case 'expunge':      
-	if (!this.env.messagecount && this.task == 'mail')
-    	  {
-	    // clear preview pane content
-	    if (this.env.contentframe)
-	      this.show_contentframe(false);
-	    // disable commands useless when mailbox is empty
-	    this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
-	      'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
-	  }
-	break;
-
-      case 'list':
-	this.msglist_select(this.message_list);
+        if (!this.env.messagecount && this.task == 'mail') {
+          // clear preview pane content
+          if (this.env.contentframe)
+            this.show_contentframe(false);
+          // disable commands useless when mailbox is empty
+          this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
+            'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
+        }
+        break;
 
       case 'check-recent':
       case 'getunread':
-	if (this.task == 'mail')
-	{
-	  this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
-	  var mailboxtest = (this.env.mailbox == this.env.trash_mailbox || this.env.mailbox == this.env.junk_mailbox 
-	    || this.env.mailbox.match('^' + RegExp.escape(this.env.trash_mailbox) + RegExp.escape(this.env.delimiter)) 
-	    || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter))) ? true : false;
-	
-	  this.enable_command('purge', (this.env.messagecount && mailboxtest));
-	}
-	break;
-
-      }
+      case 'list':
+        if (this.task == 'mail') {
+          this.msglist_select(this.message_list);
+          this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
+          this.enable_command('purge', this.purge_mailbox_test());
+        }
+        else if (this.task == 'addressbook')
+          this.enable_command('export', (this.contact_list && this.contact_list.rowcount > 0));
+        break;
+    }
 
     request_obj.reset();
     };

--
Gitblit v1.9.1