From 04fbc555b939ef2e427f02b9765ae66f85a5b918 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 04 Nov 2013 15:34:17 -0500
Subject: [PATCH] Code improvements

---
 program/js/app.js |  141 +++++++++++++++++-----------------------------
 1 files changed, 53 insertions(+), 88 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 1f75e21..f7fd7ce 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -218,12 +218,8 @@
 
           // load messages
           this.command('list');
-        }
 
-        if (this.gui_objects.qsearchbox) {
-          if (this.env.search_text != null)
-            this.gui_objects.qsearchbox.value = this.env.search_text;
-          $(this.gui_objects.qsearchbox).focusin(function() { rcmail.message_list && rcmail.message_list.blur(); });
+          $(this.gui_objects.qsearchbox).val(this.env.search_text).focusin(function() { rcmail.message_list.blur(); });
         }
 
         this.set_button_titles();
@@ -285,10 +281,10 @@
                 return rcube_event.cancel(e);
               });
 
-              // avoid textarea loosing focus when hitting the save-response button/link
-              for (var i=0; this.buttons['save-response'] && i < this.buttons['save-response'].length; i++) {
-                $('#'+this.buttons['save-response'][i].id).mousedown(function(e){ return rcube_event.cancel(e); })
-              }
+            // avoid textarea loosing focus when hitting the save-response button/link
+            for (var i=0; this.buttons['save-response'] && i < this.buttons['save-response'].length; i++) {
+              $('#'+this.buttons['save-response'][i].id).mousedown(function(e){ return rcube_event.cancel(e); })
+            }
           }
 
           document.onmouseup = function(e){ return p.doc_mouse_up(e); };
@@ -351,7 +347,7 @@
           this.env.contactfolders = $.extend($.extend({}, this.env.address_sources), this.env.contactgroups);
 
         this.enable_command('add', 'import', this.env.writable_source);
-        this.enable_command('list', 'listgroup', 'pushgroup', 'popgroup', 'listsearch', 'advanced-search', true);
+        this.enable_command('list', 'listgroup', 'pushgroup', 'popgroup', 'listsearch', 'search', 'reset-search', 'advanced-search', true);
 
         if (this.gui_objects.contactslist) {
           this.contact_list = new rcube_list_widget(this.gui_objects.contactslist,
@@ -369,8 +365,8 @@
 
           this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); };
           document.onmouseup = function(e){ return p.doc_mouse_up(e); };
-          if (this.gui_objects.qsearchbox)
-            $(this.gui_objects.qsearchbox).focusin(function() { rcmail.contact_list.blur(); });
+
+          $(this.gui_objects.qsearchbox).focusin(function() { rcmail.contact_list.blur(); });
 
           this.update_group_commands();
           this.command('list');
@@ -394,9 +390,6 @@
               this.init_contact_form();
         }
 
-        if (this.gui_objects.qsearchbox)
-          this.enable_command('search', 'reset-search', true);
-
         break;
 
       case 'settings':
@@ -408,9 +401,6 @@
         else if (this.env.action == 'edit-identity' || this.env.action == 'add-identity') {
           this.enable_command('save', 'edit', 'toggle-editor', true);
           this.enable_command('delete', this.env.identities_level < 2);
-
-          if (this.env.action == 'add-identity')
-            $("input[type='text']").first().select();
         }
         else if (this.env.action == 'folders') {
           this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', true);
@@ -419,7 +409,6 @@
           this.enable_command('save', 'folder-size', true);
           parent.rcmail.env.exists = this.env.messagecount;
           parent.rcmail.enable_command('purge', this.env.messagecount);
-          $("input[type='text']").first().select();
         }
         else if (this.env.action == 'responses') {
           this.enable_command('add', true);
@@ -445,7 +434,7 @@
         }
         else if (this.gui_objects.responseslist) {
           this.responses_list = new rcube_list_widget(this.gui_objects.responseslist, {multiselect:false, draggable:false, keyboard:false});
-          this.responses_list.addEventListener('select', function(list){
+          this.responses_list.addEventListener('select', function(list) {
             var win, id = list.get_single_selection();
             p.enable_command('delete', !!id && $.inArray(id, p.env.readonly_responses) < 0);
             if (id && (win = p.get_frame_window(p.env.contentframe))) {
@@ -488,6 +477,11 @@
         this.enable_command('login', true);
         break;
     }
+
+    // select first input field in an edit form
+    if (this.gui_objects.editform)
+      $("input,select,textarea", this.gui_objects.editform)
+        .not(':hidden').not(':disabled').first().select();
 
     // unset contentframe variable if preview_pane is enabled
     if (this.env.contentframe && !$('#' + this.env.contentframe).is(':visible'))
@@ -4820,8 +4814,6 @@
       $('input.datepicker').datepicker();
     }
 
-    $("input[type='text']:visible").first().focus();
-
     // Submit search form on Enter
     if (this.env.action == 'search')
       $(this.gui_objects.editform).append($('<input type="submit">').hide())
@@ -5438,7 +5430,10 @@
 
   this.init_subscription_list = function()
   {
-    var p = this;
+    var p = this, delim = RegExp.escape(this.env.delimiter);
+
+    this.last_sub_rx = RegExp('['+delim+']?[^'+delim+']+$');
+
     this.subscription_list = new rcube_list_widget(this.gui_objects.subscriptionlist,
       {multiselect:false, draggable:true, keyboard:false, toggleselect:true});
     this.subscription_list.addEventListener('select', function(o){ p.subscription_select(o); });
@@ -5449,6 +5444,7 @@
       row.obj.onmouseout = function() { p.unfocus_subscription(row.id); };
     };
     this.subscription_list.init();
+
     $('#mailboxroot')
       .mouseover(function(){ p.focus_subscription(this.id); })
       .mouseout(function(){ p.unfocus_subscription(this.id); })
@@ -5456,9 +5452,7 @@
 
   this.focus_subscription = function(id)
   {
-    var row, folder,
-      delim = RegExp.escape(this.env.delimiter),
-      reg = RegExp('['+delim+']?[^'+delim+']+$');
+    var row, folder;
 
     if (this.drag_active && this.env.mailbox && (row = document.getElementById(id)))
       if (this.env.subscriptionrows[id] &&
@@ -5466,8 +5460,8 @@
       ) {
         if (this.check_droptarget(folder) &&
             !this.env.subscriptionrows[this.get_folder_row_id(this.env.mailbox)][2] &&
-            (folder != this.env.mailbox.replace(reg, '')) &&
-            (!folder.startsWith(this.env.mailbox + this.env.delimiter))
+            folder != this.env.mailbox.replace(this.last_sub_rx, '') &&
+            !folder.startsWith(this.env.mailbox + this.env.delimiter)
         ) {
           this.env.dstfolder = folder;
           $(row).addClass('droptarget');
@@ -5480,7 +5474,8 @@
     var row = $('#'+id);
 
     this.env.dstfolder = null;
-    if (this.env.subscriptionrows[id] && row[0])
+
+    if (this.env.subscriptionrows[id] && row.length)
       row.removeClass('droptarget');
     else
       $(this.subscription_list.frame).removeClass('droptarget');
@@ -5506,21 +5501,20 @@
 
   this.subscription_move_folder = function(list)
   {
-    var delim = RegExp.escape(this.env.delimiter),
-      reg = RegExp('['+delim+']?[^'+delim+']+$');
-
-    if (this.env.mailbox && this.env.dstfolder !== null && (this.env.dstfolder != this.env.mailbox) &&
-        (this.env.dstfolder != this.env.mailbox.replace(reg, ''))
+    if (this.env.mailbox && this.env.dstfolder !== null &&
+        this.env.dstfolder != this.env.mailbox &&
+        this.env.dstfolder != this.env.mailbox.replace(this.last_sub_rx, '')
     ) {
-      reg = new RegExp('[^'+delim+']*['+delim+']', 'g');
-      var basename = this.env.mailbox.replace(reg, ''),
-        newname = this.env.dstfolder === '' ? basename : this.env.dstfolder+this.env.delimiter+basename;
+      var path = this.env.mailbox.split(this.env.delimiter),
+        basename = path.pop(),
+        newname = this.env.dstfolder === '' ? basename : this.env.dstfolder + this.env.delimiter + basename;
 
       if (newname != this.env.mailbox) {
         this.http_post('rename-folder', {_folder_oldname: this.env.mailbox, _folder_newname: newname}, this.set_busy(true, 'foldermoving'));
         this.subscription_list.draglayer.hide();
       }
     }
+
     this.drag_active = false;
     this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
   };
@@ -5642,7 +5636,7 @@
       tbody = this.gui_objects.subscriptionlist.tBodies[0],
       folders = this.env.subscriptionrows,
       id = this.get_folder_row_id(oldfolder),
-      regex = new RegExp('^'+RegExp.escape(oldfolder)),
+      prefix_len = oldfolder.length,
       subscribed = $('input[name="_subscribed[]"]', $('#'+id)).prop('checked'),
       // find subfolders of renamed folder
       list = this.get_subfolders(oldfolder);
@@ -5667,7 +5661,7 @@
       row.after(tmprow);
       row = tmprow;
       // update folder index
-      name = name.replace(regex, newfolder);
+      name = newfolder + name.slice(prefix_len);
       $('input[name="_subscribed[]"]', row).val(name);
       this.env.subscriptionrows[id][0] = name;
       // update the name if level is changed
@@ -5912,46 +5906,23 @@
   // mouse over button
   this.button_over = function(command, id)
   {
-    var n, button, obj, a_buttons = this.buttons[command],
-      len = a_buttons ? a_buttons.length : 0;
-
-    for (n=0; n<len; n++) {
-      button = a_buttons[n];
-      if (button.id == id && button.status == 'act') {
-        obj = document.getElementById(button.id);
-        if (obj && button.over) {
-          if (button.type == 'image')
-            obj.src = button.over;
-          else
-            obj.className = button.over;
-        }
-      }
-    }
+    this.button_event(command, id, 'over');
   };
 
   // mouse down on button
   this.button_sel = function(command, id)
   {
-    var n, button, obj, a_buttons = this.buttons[command],
-      len = a_buttons ? a_buttons.length : 0;
-
-    for (n=0; n<len; n++) {
-      button = a_buttons[n];
-      if (button.id == id && button.status == 'act') {
-        obj = document.getElementById(button.id);
-        if (obj && button.sel) {
-          if (button.type == 'image')
-            obj.src = button.sel;
-          else
-            obj.className = button.sel;
-        }
-        this.buttons_sel[id] = command;
-      }
-    }
+    this.button_event(command, id, 'sel');
   };
 
   // mouse out of button
   this.button_out = function(command, id)
+  {
+    this.button_event(command, id, 'act');
+  };
+
+  // event of button
+  this.button_event = function(command, id, event)
   {
     var n, button, obj, a_buttons = this.buttons[command],
       len = a_buttons ? a_buttons.length : 0;
@@ -5959,12 +5930,12 @@
     for (n=0; n<len; n++) {
       button = a_buttons[n];
       if (button.id == id && button.status == 'act') {
-        obj = document.getElementById(button.id);
-        if (obj && button.act) {
-          if (button.type == 'image')
-            obj.src = button.act;
-          else
-            obj.className = button.act;
+        if (button[event] && (obj = document.getElementById(button.id))) {
+          obj[button.type == 'image' ? 'src' : 'className'] = button[event];
+        }
+
+        if (event == 'sel') {
+          this.buttons_sel[id] = command;
         }
       }
     }
@@ -6152,8 +6123,8 @@
   // enable/disable buttons for page shifting
   this.set_page_buttons = function()
   {
-    this.enable_command('nextpage', 'lastpage', (this.env.pagecount > this.env.current_page));
-    this.enable_command('previouspage', 'firstpage', (this.env.current_page > 1));
+    this.enable_command('nextpage', 'lastpage', this.env.pagecount > this.env.current_page);
+    this.enable_command('previouspage', 'firstpage', this.env.current_page > 1);
   };
 
   // mark a mailbox as selected and set environment variable
@@ -6163,14 +6134,10 @@
       this.treelist.select(name);
     }
     else if (this.gui_objects.folderlist) {
-      var current_li, target_li;
-
-      if ((current_li = $('li.selected', this.gui_objects.folderlist))) {
-        current_li.removeClass('selected').addClass('unfocused');
-      }
-      if ((target_li = this.get_folder_li(name, prefix, encode))) {
-        $(target_li).removeClass('unfocused').addClass('selected');
-      }
+      $('li.selected', this.gui_objects.folderlist)
+        .removeClass('selected').addClass('unfocused');
+      $(this.get_folder_li(name, prefix, encode))
+        .removeClass('unfocused').addClass('selected');
 
       // trigger event hook
       this.triggerEvent('selectfolder', { folder:name, prefix:prefix });
@@ -6199,8 +6166,6 @@
       name = this.html_identifier(name, encode);
       return document.getElementById(prefix+name);
     }
-
-    return null;
   };
 
   // for reordering column array (Konqueror workaround)

--
Gitblit v1.9.1