From 7be8a9134c73d830dec0a46a529400ada93e8664 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Fri, 13 Sep 2013 13:10:12 -0400
Subject: [PATCH] Move some config options to new and collapsible 'advanced' blocks

---
 program/steps/settings/edit_prefs.inc |    9 +---
 skins/larry/settings.css              |   20 ++++++++++
 program/steps/settings/func.inc       |   19 ++++++---
 skins/larry/ui.js                     |   13 ++++++
 4 files changed, 48 insertions(+), 13 deletions(-)

diff --git a/program/steps/settings/edit_prefs.inc b/program/steps/settings/edit_prefs.inc
index 468e499..adf6b16 100644
--- a/program/steps/settings/edit_prefs.inc
+++ b/program/steps/settings/edit_prefs.inc
@@ -40,24 +40,21 @@
 
   $out = $form_start;
 
-  foreach ($SECTIONS[$CURR_SECTION]['blocks'] as $block) {
+  foreach ($SECTIONS[$CURR_SECTION]['blocks'] as $class => $block) {
     if (!empty($block['options'])) {
       $table = new html_table(array('cols' => 2));
 
       foreach ($block['options'] as $option) {
-        if ($option['advanced'])
-	      $table->set_row_attribs('advanced');
-
         if (isset($option['title'])) {
           $table->add('title', $option['title']);
-  	      $table->add(null, $option['content']);
+          $table->add(null, $option['content']);
         }
         else {
           $table->add(array('colspan' => 2), $option['content']);
         }
       }
 
-      $out .= html::tag('fieldset', null, html::tag('legend', null, $block['name']) . $table->show($attrib));
+      $out .= html::tag('fieldset', $class, html::tag('legend', null, $block['name']) . $table->show($attrib));
     }
     else if (!empty($block['content'])) {
       $out .= html::tag('fieldset', null, html::tag('legend', null, $block['name']) . $block['content']);
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index fdc07be..ecd35e9 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -158,6 +158,7 @@
                 'main'    => array('name' => Q(rcube_label('mainoptions'))),
                 'skin'    => array('name' => Q(rcube_label('skin'))),
                 'browser' => array('name' => Q(rcube_label('browseroptions'))),
+                'advanced'=> array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             // language selection
@@ -367,6 +368,7 @@
             $blocks = array(
                 'main'        => array('name' => Q(rcube_label('mainoptions'))),
                 'new_message' => array('name' => Q(rcube_label('newmessage'))),
+                'advanced'    => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             // show config parameter for preview pane
@@ -488,6 +490,7 @@
         case 'mailview':
             $blocks = array(
                 'main' => array('name' => Q(rcube_label('mainoptions'))),
+                'advanced'   => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             // show checkbox to open message view in new window
@@ -543,7 +546,7 @@
 
                 $field_id = 'rcmfd_default_charset';
 
-                $blocks['main']['options']['default_charset'] = array(
+                $blocks['advanced']['options']['default_charset'] = array(
                     'title' => html::label($field_id, Q(rcube_label('defaultcharset'))),
                     'content' => $RCMAIL->output->charset_selector(array(
                         'id' => $field_id, 'name' => '_default_charset', 'selected' => $config['default_charset']
@@ -605,6 +608,7 @@
                 'main'       => array('name' => Q(rcube_label('mainoptions'))),
                 'sig'        => array('name' => Q(rcube_label('signatureoptions'))),
                 'spellcheck' => array('name' => Q(rcube_label('spellcheckoptions'))),
+                'advanced'   => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             // show checkbox to compose messages in a new window
@@ -673,8 +677,7 @@
                 $select->add(rcube_label('miscfolding'), 1);
                 $select->add(rcube_label('2047folding'), 2);
 
-                $blocks['main']['options']['mime_param_folding'] = array(
-                    'advanced' => true,
+                $blocks['advanced']['options']['mime_param_folding'] = array(
                     'title'    => html::label($field_id, Q(rcube_label('mimeparamfolding'))),
                     'content'  => $select->show($config['mime_param_folding']),
                 );
@@ -688,8 +691,7 @@
                 $field_id = 'rcmfd_force_7bit';
                 $input    = new html_checkbox(array('name' => '_force_7bit', 'id' => $field_id, 'value' => 1));
 
-                $blocks['main']['options']['force_7bit'] = array(
-                    'advanced' => true,
+                $blocks['advanced']['options']['force_7bit'] = array(
                     'title'    => html::label($field_id, Q(rcube_label('force7bit'))),
                     'content'  => $input->show($config['force_7bit']?1:0),
                 );
@@ -866,7 +868,8 @@
         // Addressbook config
         case 'addressbook':
             $blocks = array(
-                'main' => array('name' => Q(rcube_label('mainoptions'))),
+                'main'     => array('name' => Q(rcube_label('mainoptions'))),
+                'advanced' => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             if (!isset($no_override['default_addressbook'])
@@ -962,7 +965,8 @@
         // Special IMAP folders
         case 'folders':
             $blocks = array(
-                'main' => array('name' => Q(rcube_label('mainoptions'))),
+                'main'     => array('name' => Q(rcube_label('mainoptions'))),
+                'advanced' => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             if (!isset($no_override['show_real_foldernames'])) {
@@ -1043,6 +1047,7 @@
             $blocks = array(
                 'main'        => array('name' => Q(rcube_label('mainoptions'))),
                 'maintenance' => array('name' => Q(rcube_label('maintenance'))),
+                'advanced'    => array('name' => Q(rcube_label('advancedoptions'))),
             );
 
             if (!isset($no_override['read_when_deleted'])) {
diff --git a/skins/larry/settings.css b/skins/larry/settings.css
index 59037ac..6afa48c 100644
--- a/skins/larry/settings.css
+++ b/skins/larry/settings.css
@@ -48,6 +48,26 @@
 	border-radius: 4px 4px 0 0;
 }
 
+#preferences-details fieldset.advanced legend {
+	position: relative;
+	display: block;
+	width: 100%;
+	cursor: pointer;
+}
+
+#preferences-details fieldset.advanced .propform {
+	display: none;
+}
+
+#preferences-details fieldset.advanced .advanced-toggle {
+	position: absolute;
+	top: 2px;
+	right: 6px;
+	text-decoration: none;
+	color: #666;
+	font-size: 11px;
+}
+
 #sections-table tbody td.section,
 #settings-sections span.listitem a,
 #settings-sections span.tablink a {
diff --git a/skins/larry/ui.js b/skins/larry/ui.js
index ae14d81..d558f16 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -195,6 +195,19 @@
         new rcube_splitter({ id:'prefviewsplitter', p1:'#sectionslist', p2:'#preferences-box',
           orientation:'v', relative:true, start:266, min:180, size:12 }).init();
       }
+      else if (rcmail.env.action == 'edit-prefs') {
+        $('<a href="#toggle">&#9660;</a>')
+            .addClass('advanced-toggle')
+            .appendTo('#preferences-details fieldset.advanced legend');
+
+          $('#preferences-details fieldset.advanced legend').click(function(e){
+            var collapsed = $(this).hasClass('collapsed'),
+              toggle = $('.advanced-toggle', this).html(collapsed ? '&#9650;' : '&#9660;');
+            $(this)
+              .toggleClass('collapsed')
+              .closest('fieldset').children('.propform').toggle()
+          }).addClass('collapsed')
+      }
     }
     /***  addressbook task  ***/
     else if (rcmail.env.task == 'addressbook') {

--
Gitblit v1.9.1