diff options
author | Georg Ehrke <developer@georgehrke.com> | 2017-04-24 11:39:03 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2017-04-26 09:26:53 +0200 |
commit | 60f9ed6241c3f7441f41bbd87d36c6f9e04c974b (patch) | |
tree | bb0516c335a90ee86dcd69c44a0740009e157d9d /core/js/jquery.contactsmenu.js | |
parent | 7386bea23fc7bb95ec4073a33abc9069b587581e (diff) | |
download | nextcloud-server-60f9ed6241c3f7441f41bbd87d36c6f9e04c974b.tar.gz nextcloud-server-60f9ed6241c3f7441f41bbd87d36c6f9e04c974b.zip |
add contactsmenu popover
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
Diffstat (limited to 'core/js/jquery.contactsmenu.js')
-rw-r--r-- | core/js/jquery.contactsmenu.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/core/js/jquery.contactsmenu.js b/core/js/jquery.contactsmenu.js new file mode 100644 index 00000000000..3c782cc5bfd --- /dev/null +++ b/core/js/jquery.contactsmenu.js @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +(function ($) { + var ENTRY = '' + + '<li>' + + ' <a href="{{hyperlink}}">' + + ' {{#if icon}}<img src="{{icon}}">{{/if}}' + + ' <span>{{title}}</span>' + + ' </a>' + + '</li>'; + + $.fn.contactsMenu = function(shareWith, shareType, appendTo) { + if (typeof(shareWith) !== 'undefined') { + shareWith = String(shareWith); + } else { + if (typeof(this.data('share-with')) !== 'undefined') { + shareWith = this.data('share-with'); + } + } + if (typeof(shareType) !== 'undefined') { + shareType = Number(shareType); + } else { + if (typeof(this.data('share-type')) !== 'undefined') { + shareType = this.data('share-type'); + } + } + if (typeof(appendTo) === 'undefined') { + appendTo = this; + } + + // 0 - user, 4 - email, 6 - remote + var allowedTypes = [0, 4, 6]; + if (allowedTypes.indexOf(shareType) === -1) { + return; + } + + var $div = this; + appendTo.append('<div class="menu popovermenu bubble hidden contactsmenu-popover"><ul><li><a><span class="icon-loading-small"></span></a></li></ul></div>'); + var $list = appendTo.find('div.contactsmenu-popover'); + var url = OC.generateUrl('/contactsmenu/findOne'); + + $div.click(function() { + $list.show(); + + if ($list.hasClass('loaded')) { + return; + } + + $list.addClass('loaded'); + $.ajax(url, { + method: 'POST', + data: { + shareType: shareType, + shareWith: shareWith + } + }).then(function(data) { + $list.find('ul').find('li').addClass('hidden'); + + var actions; + if (!data.topAction) { + actions = [{ + hyperlink: '#', + title: t('core', 'No action available') + }]; + } else { + actions = [data.topAction].concat(data.actions); + } + + actions.forEach(function(action) { + var template = Handlebars.compile(ENTRY); + $list.find('ul').append(template(action)); + }); + + if (actions.length === 0) { + + } + }); + }); + + $(document).click(function(event) { + var clickedList = $.contains($list, event.target); + var clickedLi = $.contains($div, event.target); + + $div.each(function() { + if ($(this).is(event.target)) { + clickedLi = true; + } + }); + + if (clickedList) { + return; + } + + if (clickedLi) { + return; + } + + $list.hide(); + + }); + }; +}(jQuery)); |