summaryrefslogtreecommitdiffstats
path: root/core/js/jquery.contactsmenu.js
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2017-04-24 11:39:03 +0200
committerGeorg Ehrke <developer@georgehrke.com>2017-04-26 09:26:53 +0200
commit60f9ed6241c3f7441f41bbd87d36c6f9e04c974b (patch)
treebb0516c335a90ee86dcd69c44a0740009e157d9d /core/js/jquery.contactsmenu.js
parent7386bea23fc7bb95ec4073a33abc9069b587581e (diff)
downloadnextcloud-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.js107
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));