From de98a897f618c4d251a4d3a5e3d2e4f2bb9a441b Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Thu, 07 Feb 2013 11:18:54 -0500 Subject: [PATCH] Add link to pop the address group stack; add animations when pushing/popping lists (in larry skin) --- skins/larry/images/listicons.png | 0 program/steps/addressbook/func.inc | 2 + skins/larry/styles.css | 4 ++ skins/larry/addressbook.css | 7 +++ program/js/app.js | 31 +++++++++++++-- skins/larry/ui.js | 33 ++++++++++++++++ 6 files changed, 71 insertions(+), 6 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 31a96b5..f9b72cd 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -251,6 +251,7 @@ } } else if (this.env.action == 'compose') { + this.env.address_group_stack = []; this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'cancel', 'toggle-editor', 'list-adresses', 'pushgroup', 'search', 'reset-search', 'extwin']; if (this.env.drafts_mailbox) @@ -318,13 +319,13 @@ break; case 'addressbook': + this.env.address_group_stack = []; + if (this.gui_objects.folderlist) 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', 'listsearch', 'advanced-search', true); - - this.env.address_group_stack = []; + this.enable_command('list', 'listgroup', 'pushgroup', 'popgroup', 'listsearch', 'advanced-search', true); if (this.gui_objects.contactslist) { this.contact_list = new rcube_list_widget(this.gui_objects.contactslist, @@ -1091,6 +1092,14 @@ case 'listgroup': this.reset_qsearch(); this.list_contacts(props.source, props.id); + break; + + case 'popgroup': + if (this.env.address_group_stack.length > 1) { + this.env.address_group_stack.pop(); + this.reset_qsearch(); + this.list_contacts(props.source, this.env.address_group_stack[this.env.address_group_stack.length-1]); + } break; case 'import': @@ -4198,8 +4207,20 @@ this.set_group_prop = function(prop) { - if (this.gui_objects.addresslist_title) - $(this.gui_objects.addresslist_title).html(prop.name); + if (this.gui_objects.addresslist_title) { + var boxtitle = $(this.gui_objects.addresslist_title).html(''); // clear contents + + // add link to pop back to parent group + if (this.env.address_group_stack.length > 1) { + $('<a href="#list">...</a>') + .addClass('poplink') + .appendTo(boxtitle) + .click(function(e){ return ref.command('popgroup','',this); }); + boxtitle.append(' » '); + } + + boxtitle.append($('<span>'+prop.name+'</span>')); + } this.triggerEvent('groupupdate', prop); }; diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index 4d4bf22..60a1984 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -372,6 +372,8 @@ 'onclick' => sprintf("return %s.command('pushgroup',{'source':'%s','id':'%s'},this,event)", JS_OBJECT_NAME, $source_id, $row['CID']), ), '»'); } + else + $val = ' '; break; default: diff --git a/skins/larry/addressbook.css b/skins/larry/addressbook.css index 8d8a61b..090e54c 100644 --- a/skins/larry/addressbook.css +++ b/skins/larry/addressbook.css @@ -175,6 +175,13 @@ text-overflow: ellipsis; } +#addresslist .boxtitle a.poplink { + color: #004458; + font-size: 14px; + line-height: 12px; + text-decoration: none; +} + #contact-frame { position: absolute; top: 0; diff --git a/skins/larry/images/listicons.png b/skins/larry/images/listicons.png index 5e48f17..e4ffef6 100644 --- a/skins/larry/images/listicons.png +++ b/skins/larry/images/listicons.png Binary files differ diff --git a/skins/larry/styles.css b/skins/larry/styles.css index 613a08a..3356413 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -995,6 +995,10 @@ background-color: #e8e798; } +.listbox table.listing { + background-color: #d9ecf4; +} + table.listing, table.layout { border: 0; diff --git a/skins/larry/ui.js b/skins/larry/ui.js index d2638bb..dad1093 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -175,6 +175,8 @@ /*** addressbook task ***/ else if (rcmail.env.task == 'addressbook') { rcmail.addEventListener('afterupload-photo', show_uploadform); + rcmail.addEventListener('beforepushgroup', push_contactgroup); + rcmail.addEventListener('beforepopgroup', pop_contactgroup); if (rcmail.env.action == '') { new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right', @@ -745,6 +747,35 @@ }); } + function push_contactgroup(p) + { + // lets the contacts list swipe to the left, nice! + var table = $('#contacts-table'), + scroller = table.parent().css('overflow', 'hidden'); + + table.clone() + .css({ position:'absolute', top:'0', left:'0', width:table.width()+'px', 'z-index':10 }) + .appendTo(scroller) + .animate({ left: -(table.width()+5) + 'px' }, 300, 'swing', function(){ + $(this).remove(); + scroller.css('overflow', 'auto') + }); + } + + function pop_contactgroup(p) + { + // lets the contacts list swipe to the left, nice! + var table = $('#contacts-table'), + scroller = table.parent().css('overflow', 'hidden'), + clone = table.clone().appendTo(scroller); + + table.css({ position:'absolute', top:'0', left:-(table.width()+5) + 'px', width:table.width()+'px', height:table.height()+'px', 'z-index':10 }) + .animate({ left:'0' }, 300, 'linear', function(){ + clone.remove(); + $(this).css({ position:'relative', left:'0', width:'100%', height:'auto', 'z-index':1 }); + scroller.css('overflow', 'auto') + }); + } function show_uploadform() { @@ -755,7 +786,7 @@ $dialog.dialog('close'); return; } - + // add icons to clone file input field if (rcmail.env.action == 'compose' && !$dialog.data('extended')) { $('<a>') -- Gitblit v1.9.1