From 8dbe3c2b88f6f9003a9635c749331c5ee7464b70 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Mon, 9 Feb 2009 17:22:28 -0700 Subject: [PATCH] Update folders javascript/CSS --- imp/folders.php | 5 +- imp/js/folders.js | 2 +- imp/js/src/folders.js | 320 ++++++++++++++++------------- imp/templates/folders/actions.html | 6 +- imp/templates/folders/folders_confirm.html | 2 +- imp/templates/folders/folders_size.html | 2 +- imp/templates/folders/import.html | 5 +- imp/themes/screen.css | 10 + 8 files changed, 196 insertions(+), 156 deletions(-) diff --git a/imp/folders.php b/imp/folders.php index d1e265586..07af5bd74 100644 --- a/imp/folders.php +++ b/imp/folders.php @@ -345,7 +345,10 @@ if ($_SESSION['imp']['file_upload'] && ($actionID == 'import_mbox')) { /* Build the folder tree. */ list($raw_rows, $newmsgs, $displayNames) = $imaptree->build(); -IMP::addInlineScript('var displayNames = ' . Horde_Serialize::serialize($displayNames, SERIALIZE_JSON, $charset) . ';'); +IMP::addInlineScript(array( + 'ImpFolders.displayNames = ' . Horde_Serialize::serialize($displayNames, SERIALIZE_JSON, $charset), + 'ImpFolders.folders_url = ' . Horde_Serialize::serialize($folders_url, SERIALIZE_JSON, $charset) +)); /* Prepare the header template. */ $refresh_title = _("Reload View"); diff --git a/imp/js/folders.js b/imp/js/folders.js index 4c8f47e64..5ae32fc33 100644 --- a/imp/js/folders.js +++ b/imp/js/folders.js @@ -1 +1 @@ -function getChecked(){return getFolders().findAll(function(a){return a.checked})}function getFolders(){return $("fmanager").getInputs(null,"folder_list[]")}function selectedFoldersDisplay(){var a=0,b="";getFolders().each(function(c){if(c.checked){b+=displayNames[a]+"\n"}++a});if(b.endsWith("\n")){b=b.substring(0,b.length-1)}return b}function chooseAction(d){var f=(d.element().id=="action_choose0")?0:1;var b=$("action_choose"+f);var c=$F(b);b.selectedIndex=0;if(c=="create_folder"){createMailbox()}else{if(c=="rebuild_tree"){submitAction(c)}else{if(!getChecked().size()){if(c!=""){alert(IMP.text.folders_select)}}else{if(c=="rename_folder"){renameMailbox()}else{if(c=="subscribe_folder"||c=="unsubscribe_folder"||c=="poll_folder"||c=="expunge_folder"||c=="nopoll_folder"||c=="mark_folder_seen"||c=="mark_folder_unseen"||c=="delete_folder_confirm"||c=="folders_empty_mailbox_confirm"||c=="mbox_size"){submitAction(c)}else{if(c=="download_folder"||c=="download_folder_zip"){downloadMailbox(c)}else{if(c=="import_mbox"){if(getChecked().length>1){alert(IMP.text.folders_oneselect)}else{submitAction(c)}}}}}}}}}function submitAction(b){$("actionID").setValue(b);$("fmanager").submit()}function createMailbox(){var a=getChecked().size(),b;if(a>1){window.alert(IMP.text.folders_oneselect);return}if(a==1){b=window.prompt(IMP.text.folders_subfolder1+" "+selectedFoldersDisplay()+".\n"+IMP.text.folders_subfolder2+"\n","")}else{b=window.prompt(IMP.text.folders_toplevel,"")}if(b){$("new_mailbox").setValue(b);submitAction("create_folder")}}function downloadMailbox(a){if(window.confirm(IMP.text.folders_download1+"\n"+selectedFoldersDisplay()+"\n"+IMP.text.folders_download2)){submitAction(a)}}function renameMailbox(){var b="",c="",a=0;getFolders().each(function(e){if(e.checked){if(IMP.conf.fixed_folders.indexOf(displayNames[a])!=-1){window.alert(IMP.text.folders_no_rename+" "+displayNames[a])}else{var d=window.prompt(IMP.text.folders_rename1+" "+displayNames[a]+"\n"+IMP.text.folders_rename2,displayNames[a]);if(d){b+=d+"\n";c+=e.value+"\n"}}}++a});if(!b){return}if(b.endsWith("\n")){b=b.substring(0,b.length-1)}if(c.endsWith("\n")){c=c.substring(0,c.length-1)}$("new_names").setValue(b);$("old_names").setValue(c);submitAction("rename_folder");return true}function toggleSelection(){var c=getChecked().size(),a=getFolders();var b=(c!=a.size());a.each(function(d){d.checked=b})}document.observe("dom:loaded",function(){if($("checkAll0")){$("checkAll0").observe("click",toggleSelection);$("action_choose0").observe("change",chooseAction)}if($("checkAll1")){$("checkAll1").observe("click",toggleSelection);$("action_choose1").observe("change",chooseAction)}}); \ No newline at end of file +var ImpFolders={getChecked:function(){return this.getFolders().findAll(function(a){return a.checked})},getFolders:function(){return $("fmanager").getInputs(null,"folder_list[]")},selectedFoldersDisplay:function(){var a=0,b="";this.getFolders().each(function(c){if(c.checked){b+=this.displayNames[a]+"\n"}++a});return b.strip()},chooseAction:function(d){var f=(d.element().readAttribute("id")=="action_choose0")?0:1,b=$("action_choose"+f),c=$F(b);b.selectedIndex=0;switch(c){case"create_folder":this.createMailbox();break;case"rebuild_tree":this.submitAction(c);break;default:if(!this.getChecked().size()){if(c!=""){alert(IMP.text.folders_select)}break}switch(c){case"rename_folder":this.renameMailbox();break;case"subscribe_folder":case"unsubscribe_folder":case"poll_folder":case"expunge_folder":case"nopoll_folder":case"mark_folder_seen":case"mark_folder_unseen":case"delete_folder_confirm":case"folders_empty_mailbox_confirm":case"mbox_size":this.submitAction(c);break;case"download_folder":case"download_folder_zip":this.downloadMailbox(c);break;case"import_mbox":if(this.getChecked().length>1){alert(IMP.text.folders_oneselect)}else{this.submitAction(c)}break}break}},submitAction:function(b){$("actionID").setValue(b);$("fmanager").submit()},createMailbox:function(){var a=this.getChecked().size(),b;if(a>1){window.alert(IMP.text.folders_oneselect);return}b=(a==1)?window.prompt(IMP.text.folders_subfolder1+" "+this.selectedFoldersDisplay()+".\n"+IMP.text.folders_subfolder2+"\n",""):window.prompt(IMP.text.folders_toplevel,"");if(b){$("new_mailbox").setValue(b);this.submitAction("create_folder")}},downloadMailbox:function(a){if(window.confirm(IMP.text.folders_download1+"\n"+this.selectedFoldersDisplay()+"\n"+IMP.text.folders_download2)){this.submitAction(a)}},renameMailbox:function(){var b="",c="",a=0;this.getFolders().each(function(e){if(e.checked){if(IMP.conf.fixed_folders.indexOf(this.displayNames[a])!=-1){window.alert(IMP.text.folders_no_rename+" "+this.displayNames[a])}else{var d=window.prompt(IMP.text.folders_rename1+" "+this.displayNames[a]+"\n"+IMP.text.folders_rename2,this.displayNames[a]);if(d){b+=d+"\n";c+=e.value+"\n"}}}++a});if(b){$("new_names").setValue(b.strip());$("old_names").setValue(c.strip());this.submitAction("rename_folder")}},toggleSelection:function(){var c=this.getChecked().size(),a=this.getFolders(),b=(c!=a.size());a.each(function(d){d.checked=b})},changeHandler:function(a){switch(a.element().readAttribute("id")){case"action_choose0":case"action_choose1":this.chooseAction(a);break}},clickHandler:function(a){switch(a.element().readAttribute("id")){case"btn_import":this.submitAction("import_mbox");break;case"btn_return":document.location.href=this.folders_url;break;case"checkAll0":case"checkAll1":this.toggleSelection();break}}};document.observe("change",ImpFolders.changeHandler.bind(ImpFolders));document.observe("click",ImpFolders.clickHandler.bind(ImpFolders)); \ No newline at end of file diff --git a/imp/js/src/folders.js b/imp/js/src/folders.js index ecc578b15..9dab02ef9 100644 --- a/imp/js/src/folders.js +++ b/imp/js/src/folders.js @@ -1,168 +1,196 @@ /** - * IMP Folders Javascript - * - * Provides the javascript to help the folders.php script. - * This file should be included via Horde::addScriptFile(). + * Provides the javascript for the compose.php script (standard view). * * See the enclosed file COPYING for license information (GPL). If you * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. */ -function getChecked() -{ - return getFolders().findAll(function(e) { - return e.checked; - }); -} - -function getFolders() -{ - return $('fmanager').getInputs(null, 'folder_list[]'); -} - -function selectedFoldersDisplay() -{ - var folder = 0, sel = ""; - getFolders().each(function(e) { - if (e.checked) { - sel += displayNames[folder] + "\n"; - } - ++folder; - }); +var ImpFolders = { - if (sel.endsWith("\n")) { - sel = sel.substring(0, sel.length - 1); - } + // The following variables are defined in folders.php: + // displayNames, folders_url + + getChecked: function() + { + return this.getFolders().findAll(function(e) { + return e.checked; + }); + }, - return sel; -} + getFolders: function() + { + return $('fmanager').getInputs(null, 'folder_list[]'); + }, -function chooseAction(e) -{ - var id = (e.element().id == 'action_choose0') ? 0 : 1; + selectedFoldersDisplay: function() + { + var folder = 0, sel = ""; - var a = $('action_choose' + id); - var action = $F(a); - a.selectedIndex = 0; + this.getFolders().each(function(e) { + if (e.checked) { + sel += this.displayNames[folder] + "\n"; + } + ++folder; + }); + + return sel.strip(); + }, + + chooseAction: function(e) + { + var id = (e.element().readAttribute('id') == 'action_choose0') ? 0 : 1, + a = $('action_choose' + id), + action = $F(a); + a.selectedIndex = 0; + + switch (action) { + case 'create_folder': + this.createMailbox(); + break; + + case 'rebuild_tree': + this.submitAction(action); + break; + + default: + if (!this.getChecked().size()) { + if (action != '') { + alert(IMP.text.folders_select); + } + break; + } - if (action == 'create_folder') { - createMailbox(); - } else if (action == 'rebuild_tree') { - submitAction(action); - } else if (!getChecked().size()) { - if (action != '') { - alert(IMP.text.folders_select); + switch (action) { + case 'rename_folder': + this.renameMailbox(); + break; + + case 'subscribe_folder': + case 'unsubscribe_folder': + case 'poll_folder': + case 'expunge_folder': + case 'nopoll_folder': + case 'mark_folder_seen': + case 'mark_folder_unseen': + case 'delete_folder_confirm': + case 'folders_empty_mailbox_confirm': + case 'mbox_size': + this.submitAction(action); + break; + + case 'download_folder': + case 'download_folder_zip': + this.downloadMailbox(action); + break; + + case 'import_mbox': + if (this.getChecked().length > 1) { + alert(IMP.text.folders_oneselect); + } else { + this.submitAction(action); + } + break; + } + + break; } - } else if (action == 'rename_folder') { - renameMailbox(); - } else if (action == 'subscribe_folder' || - action == 'unsubscribe_folder' || - action == 'poll_folder' || - action == 'expunge_folder' || - action == 'nopoll_folder' || - action == 'mark_folder_seen' || - action == 'mark_folder_unseen' || - action == 'delete_folder_confirm' || - action == 'folders_empty_mailbox_confirm' || - action == 'mbox_size') { - submitAction(action); - } else if (action == 'download_folder' || - action == 'download_folder_zip') { - downloadMailbox(action); - } else if (action == 'import_mbox') { - if (getChecked().length > 1) { - alert(IMP.text.folders_oneselect); - } else { - submitAction(action); + }, + + submitAction: function(a) + { + $('actionID').setValue(a); + $('fmanager').submit(); + }, + + createMailbox: function() + { + var count = this.getChecked().size(), mbox; + if (count > 1) { + window.alert(IMP.text.folders_oneselect); + return; } - } -} - -function submitAction(a) -{ - $('actionID').setValue(a); - $('fmanager').submit(); -} - -function createMailbox() -{ - var count = getChecked().size(), mbox; - if (count > 1) { - window.alert(IMP.text.folders_oneselect); - return; - } - if (count == 1) { - mbox = window.prompt(IMP.text.folders_subfolder1 + ' ' + selectedFoldersDisplay() + ".\n" + IMP.text.folders_subfolder2 + "\n", ''); - } else { - mbox = window.prompt(IMP.text.folders_toplevel, ''); - } + mbox = (count == 1) + ? window.prompt(IMP.text.folders_subfolder1 + ' ' + this.selectedFoldersDisplay() + ".\n" + IMP.text.folders_subfolder2 + "\n", '') + : window.prompt(IMP.text.folders_toplevel, ''); - if (mbox) { - $('new_mailbox').setValue(mbox); - submitAction('create_folder'); - } -} + if (mbox) { + $('new_mailbox').setValue(mbox); + this.submitAction('create_folder'); + } + }, -function downloadMailbox(actionid) -{ - if (window.confirm(IMP.text.folders_download1 + "\n" + selectedFoldersDisplay() + "\n" + IMP.text.folders_download2)) { - submitAction(actionid); - } -} - -function renameMailbox() -{ - var newnames = '', oldnames = '', j = 0; - - getFolders().each(function(f) { - if (f.checked) { - if (IMP.conf.fixed_folders.indexOf(displayNames[j]) != -1) { - window.alert(IMP.text.folders_no_rename + ' ' + displayNames[j]); - } else { - var tmp = window.prompt(IMP.text.folders_rename1 + ' ' + displayNames[j] + "\n" + IMP.text.folders_rename2, displayNames[j]); - if (tmp) { - newnames += tmp + "\n"; - oldnames += f.value + "\n"; + downloadMailbox: function(actionid) + { + if (window.confirm(IMP.text.folders_download1 + "\n" + this.selectedFoldersDisplay() + "\n" + IMP.text.folders_download2)) { + this.submitAction(actionid); + } + }, + + renameMailbox: function() + { + var newnames = '', oldnames = '', j = 0; + + this.getFolders().each(function(f) { + if (f.checked) { + if (IMP.conf.fixed_folders.indexOf(this.displayNames[j]) != -1) { + window.alert(IMP.text.folders_no_rename + ' ' + this.displayNames[j]); + } else { + var tmp = window.prompt(IMP.text.folders_rename1 + ' ' + this.displayNames[j] + "\n" + IMP.text.folders_rename2, this.displayNames[j]); + if (tmp) { + newnames += tmp + "\n"; + oldnames += f.value + "\n"; + } } } - } - ++j; - }); + ++j; + }); - if (!newnames) { - return; + if (newnames) { + $('new_names').setValue(newnames.strip()); + $('old_names').setValue(oldnames.strip()); + this.submitAction('rename_folder'); + } + }, + + toggleSelection: function() + { + var count = this.getChecked().size(), folders = this.getFolders(), + checked = (count != folders.size()); + folders.each(function(f) { + f.checked = checked; + }); + }, + + changeHandler: function(e) + { + switch (e.element().readAttribute('id')) { + case 'action_choose0': + case 'action_choose1': + this.chooseAction(e); + break; + } + }, + + clickHandler: function(e) + { + switch (e.element().readAttribute('id')) { + case 'btn_import': + this.submitAction('import_mbox'); + break; + + case 'btn_return': + document.location.href = this.folders_url; + break; + + case 'checkAll0': + case 'checkAll1': + this.toggleSelection(); + break; + } } - if (newnames.endsWith("\n")) { - newnames = newnames.substring(0, newnames.length - 1); - } - if (oldnames.endsWith("\n")) { - oldnames = oldnames.substring(0, oldnames.length - 1); - } +}; - $('new_names').setValue(newnames); - $('old_names').setValue(oldnames); - submitAction('rename_folder'); - return true; -} - -function toggleSelection() -{ - var count = getChecked().size(), folders = getFolders(); - var checked = (count != folders.size()); - folders.each(function(f) { - f.checked = checked; - }); -} - -document.observe('dom:loaded', function() { - if ($('checkAll0')) { - $('checkAll0').observe('click', toggleSelection); - $('action_choose0').observe('change', chooseAction); - } - if ($('checkAll1')) { - $('checkAll1').observe('click', toggleSelection); - $('action_choose1').observe('change', chooseAction); - } -}); +document.observe('change', ImpFolders.changeHandler.bind(ImpFolders)); +document.observe('click', ImpFolders.clickHandler.bind(ImpFolders)); diff --git a/imp/templates/folders/actions.html b/imp/templates/folders/actions.html index f882a8224..a14b2fd14 100644 --- a/imp/templates/folders/actions.html +++ b/imp/templates/folders/actions.html @@ -1,4 +1,4 @@ - +
@@ -7,7 +7,7 @@   /> -
+
-
+
  • diff --git a/imp/templates/folders/folders_confirm.html b/imp/templates/folders/folders_confirm.html index fa20ee8db..d7c05990b 100644 --- a/imp/templates/folders/folders_confirm.html +++ b/imp/templates/folders/folders_confirm.html @@ -21,7 +21,7 @@
      - +
    diff --git a/imp/templates/folders/folders_size.html b/imp/templates/folders/folders_size.html index 25533d206..df6b4614f 100644 --- a/imp/templates/folders/folders_size.html +++ b/imp/templates/folders/folders_size.html @@ -27,6 +27,6 @@
    - +
    diff --git a/imp/templates/folders/import.html b/imp/templates/folders/import.html index 138e4f1f3..b8223a8a5 100644 --- a/imp/templates/folders/import.html +++ b/imp/templates/folders/import.html @@ -13,8 +13,7 @@   into folder . -    - - + +
diff --git a/imp/themes/screen.css b/imp/themes/screen.css index c38e38cd8..efc8cfc2b 100644 --- a/imp/themes/screen.css +++ b/imp/themes/screen.css @@ -145,6 +145,16 @@ form#search div { #fmanager div, #fmanager div input { vertical-align: middle; } +#fmanager table { + width: 100%; + border-collapse: collapse; +} +#fmanager div.folderChoose { + padding-left: 5px; +} +#fmanager div.folderActions { + padding-left: 15px; +} /* Style for div that fixes KHTML browsers. */ .ohide { -- 2.11.0