plugins/calendar plugins/kolab_addressbook plugins/tasklist

Aleksander Machniak machniak at kolabsys.com
Wed Sep 3 12:25:19 CEST 2014


 plugins/calendar/calendar_base.js                           |    9 
 plugins/kolab_addressbook/kolab_addressbook.js              |  140 +++++++-----
 plugins/kolab_addressbook/kolab_addressbook.php             |   20 -
 plugins/kolab_addressbook/skins/larry/kolab_addressbook.css |    4 
 plugins/tasklist/tasklist_base.js                           |    9 
 5 files changed, 92 insertions(+), 90 deletions(-)

New commits:
commit ecfb1354e2804a38a5bdd50c79ec761726119a6a
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Wed Sep 3 12:23:48 2014 +0200

    Fix compatibility with contextmenu 2.x (#3560)
    Warning: removed compatibility with contextmenu 1.x

diff --git a/plugins/calendar/calendar_base.js b/plugins/calendar/calendar_base.js
index abcd519..289bb69 100644
--- a/plugins/calendar/calendar_base.js
+++ b/plugins/calendar/calendar_base.js
@@ -125,15 +125,6 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
           rcmail.enable_command('attachment-save-calendar', mimetype == 'text/calendar' || mimetype == 'text/x-vcalendar' || mimetype == 'application/ics');
         }
       });
-
-      // add contextmenu item
-      if (window.rcm_contextmenu_register_command) {
-        rcm_contextmenu_register_command(
-          'calendar-create-from-mail',
-          function(cmd,el){ cal.create_from_mail() },
-          'calendar.createfrommail',
-          'moveto');
-      }
     }
   }
 
diff --git a/plugins/kolab_addressbook/kolab_addressbook.js b/plugins/kolab_addressbook/kolab_addressbook.js
index aa6df6e..b9edb42 100644
--- a/plugins/kolab_addressbook/kolab_addressbook.js
+++ b/plugins/kolab_addressbook/kolab_addressbook.js
@@ -33,60 +33,8 @@ if (window.rcmail) {
             rcmail.enable_command('book-save', true);
         }
 
-        // add contextmenu items
-        if (window.rcm_contextmenu_register_command) {
-            var menu = $('#rcmGroupMenu');
-            rcm_contextmenu_register_command(
-                'book-edit',
-                function(cmd,el){ rcmail.book_edit() },
-                'kolab_addressbook.bookedit',
-                null,
-                true,
-                false,
-                false,
-                menu
-            );
-            rcm_contextmenu_register_command(
-                'book-delete',
-                function(cmd,el){ rcmail.book_delete() },
-                'kolab_addressbook.bookdelete',
-                null,
-                false,
-                false,
-                false,
-                menu
-            );
-
-            if (rcmail.env.kolab_addressbook_carddav_url) {
-                rcm_contextmenu_register_command(
-                    'book-showurl',
-                    function(cmd,el){ rcmail.book_showurl() },
-                    'kolab_addressbook.bookshowurl',
-                    null,
-                    false,
-                    false,
-                    false,
-                    menu
-                );
-            }
-
-            // adjust menu items when shown
-            rcmail.addEventListener('contextmenu_show', function(p){
-                if (p.menu.attr('id') != 'rcmGroupMenu')
-                    return;
-
-                var m = String(p.src.attr('id')).match(/rcmli([a-z0-9\-_=]+)/i),
-                    source = m && m.length ? rcmail.html_identifier_decode(m[1]) : null,
-                    sources = rcmail.env.address_sources,
-                    editable = source && sources[source] && sources[source].kolab && sources[source].editable,
-                    showurl = source && sources[source] && sources[source].carddavurl;
-
-                if (p.menu) {
-                    p.menu[editable ? 'enableContextMenuItems' : 'disableContextMenuItems']('#book-edit,#book-delete');
-                    p.menu[showurl  ? 'enableContextMenuItems' : 'disableContextMenuItems']('#book-showurl');
-                }
-            });
-        }
+        // contextmenu
+        kolab_addressbook_contextmenu();
 
         // append search form for address books
         if (rcmail.gui_objects.folderlist) {
@@ -174,6 +122,7 @@ if (window.rcmail) {
                 });
         }
     });
+
     rcmail.addEventListener('listupdate', function() {
         rcmail.set_book_actions();
     });
@@ -310,10 +259,10 @@ rcube_webmail.prototype.book_delete_done = function(id, recur)
 rcube_webmail.prototype.book_update = function(data, old)
 {
     var classes = ['addressbook'],
-        oldid = old ? rcmail.html_identifier_encode(old) : null,
         content = $('<div class="subscribed">').append(
-            $('<a>').html(data.name).attr({
-                href: this.url('', { _source: data.id }),
+            $('<a>').html(data.listname).attr({
+                href: this.url('', {_source: data.id}),
+                id: 'kabt:' + data.id,
                 rel: data.id,
                 onclick: "return rcmail.command('list', '" + data.id + "', this)"
             }),
@@ -336,7 +285,7 @@ rcube_webmail.prototype.book_update = function(data, old)
     // update (remove old row)
     if (old) {
         // is the folder subscribed?
-        if (!$('#rcmli' + oldid + ' > div.subscribed').length) {
+        if (!data.subscribed) {
             content.removeClass('subscribed').find('span').attr('aria-checked', false);
         }
 
@@ -353,6 +302,9 @@ rcube_webmail.prototype.book_update = function(data, old)
         this.treelist.select(data.id);
         this.env.source = data.id;
     }
+
+    // update contextmenu
+    kolab_addressbook_contextmenu();
 };
 
 // returns real IMAP folder name
@@ -361,3 +313,75 @@ rcube_webmail.prototype.book_realname = function()
     var source = this.env.source, sources = this.env.address_sources;
     return source != '' && sources[source] && sources[source].realname ? sources[source].realname : '';
 };
+
+function kolab_addressbook_contextmenu()
+{
+    if (!window.rcm_callbackmenu_init) {
+        return;
+    }
+
+    if (!rcmail.env.kolab_addressbook_contextmenu) {
+        // adjust default addressbook menu actions
+        rcmail.addEventListener('contextmenu_init', function(menu) {
+            if (menu.menu_name == 'abooklist') {
+                menu.addEventListener('activate', function(p) {
+                    // deactivate kolab addressbook actions
+                    if (p.command.match(/^book-/)) {
+                        return p.command == 'book-create';
+                    }
+                });
+            }
+        });
+    }
+
+    rcmail.env.kolab_addressbook_contextmenu = true;
+
+    // add menu on kolab addressbooks
+    var menu = rcm_callbackmenu_init({
+            menu_name: 'kolab_abooklist',
+            mouseover_timeout: -1, // no submenus here
+            menu_source: ['#directorylist-footer', '#groupoptionsmenu']
+        }, {
+            'activate': function(p) {
+                var source = rcmail.env.source,
+                    sources = rcmail.env.address_sources;
+
+                if (p.command == 'book-create') {
+                    return true;
+                }
+
+                if (p.command == 'book-edit' || p.command == 'book-delete' || p.command == 'group-create') {
+                    return !!(source && sources[source] && sources[source].kolab && sources[source].editable);
+                }
+
+                if (p.command == 'book-showurl') {
+                    return !!(source && sources[source] && sources[source].carddavurl);
+                }
+
+                return false;
+            },
+            'beforeactivate': function(p) {
+                // remove dummy items
+                $('li.submenu', p.ref.container).remove();
+
+                rcmail.env.kolab_old_source = rcmail.env.source;
+                rcmail.env.kolab_old_group = rcmail.env.group;
+
+                var onclick = $(p.source).attr('onclick');
+                if (onclick && onclick.match(rcmail.context_menu_command_pattern)) {
+                    rcmail.env.source = RegExp.$2;
+                    rcmail.env.group = null;
+                }
+            },
+            'aftercommand': function(p) {
+                rcmail.env.source = rcmail.env.kolab_old_source;
+                rcmail.env.group = rcmail.env.kolab_old_group;
+            }
+        }
+    );
+
+    $('#directorylist div > a').off('contextmenu').on('contextmenu', function(e) {
+        $(this).blur();
+        rcm_show_menu(e, this, $(this).attr('rel'), menu);
+    });
+};
diff --git a/plugins/kolab_addressbook/kolab_addressbook.php b/plugins/kolab_addressbook/kolab_addressbook.php
index e3824bc..418eca3 100644
--- a/plugins/kolab_addressbook/kolab_addressbook.php
+++ b/plugins/kolab_addressbook/kolab_addressbook.php
@@ -620,24 +620,16 @@ class kolab_addressbook extends rcube_plugin
         }
 
         if ($result) {
-            $storage = $this->rc->get_storage();
-            $delimiter = $storage->get_hierarchy_delimiter();
             $kolab_folder = kolab_storage::get_folder($folder);
 
+            // get folder/addressbook properties
+            $abook = new rcube_kolab_contacts($folder);
+            $props = $this->abook_prop(kolab_storage::folder_id($folder, true), $abook);
+            $props['parent'] = kolab_storage::folder_id($kolab_folder->get_parent(), true);
+
             $this->rc->output->show_message('kolab_addressbook.book'.$type.'d', 'confirmation');
             $this->rc->output->command('set_env', 'delimiter', $delimiter);
-            $this->rc->output->command('book_update', array(
-                'id'       => kolab_storage::folder_id($folder, true),
-                'name'     => $kolab_folder->get_foldername(),
-                'readonly' => false,
-                'editable' => true,
-                'groups'   => true,
-                'realname' => rcube_charset::convert($folder, 'UTF7-IMAP'), // IMAP folder name
-                'group'    => $kolab_folder->get_namespace(),
-                'parent'   => kolab_storage::folder_id($kolab_folder->get_parent()),
-                'kolab'    => true,
-            ), kolab_storage::folder_id($prop['oldname'], true));
-
+            $this->rc->output->command('book_update', $props, kolab_storage::folder_id($prop['oldname'], true));
             $this->rc->output->send('iframe');
         }
 
diff --git a/plugins/kolab_addressbook/skins/larry/kolab_addressbook.css b/plugins/kolab_addressbook/skins/larry/kolab_addressbook.css
index 05ce08c..8aeb0cb 100644
--- a/plugins/kolab_addressbook/skins/larry/kolab_addressbook.css
+++ b/plugins/kolab_addressbook/skins/larry/kolab_addressbook.css
@@ -135,3 +135,7 @@
 	padding-right: 36px;
 }
 
+/* for contextmenu */
+#directorylist a.contextRow {
+	background-color: #C7E3EF;
+}
diff --git a/plugins/tasklist/tasklist_base.js b/plugins/tasklist/tasklist_base.js
index 5448418..e399c53 100644
--- a/plugins/tasklist/tasklist_base.js
+++ b/plugins/tasklist/tasklist_base.js
@@ -120,13 +120,4 @@ window.rcmail && rcmail.env.task == 'mail' && rcmail.addEventListener('init', fu
             rcmail.enable_command('attachment-save-task', is_ics);
         }
     });
-
-    // add contextmenu item
-    if (window.rcm_contextmenu_register_command) {
-        rcm_contextmenu_register_command(
-            'tasklist-create-from-mail',
-            function(cmd,el){ tasks.create_from_mail() },
-            'tasklist.createfrommail',
-            'moveto');
-        }
 });




More information about the commits mailing list