summaryrefslogtreecommitdiffstats
path: root/apps/files/js/fileselectionmenu.js
blob: 8cb10f08bbc30e7a528c8e744352174484562765 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
 * Copyright (c) 2018
 *
 * This file is licensed under the Affero General Public License version 3
 * or later.
 *
 * See the COPYING-README file.
 *
 */

(function() {
	var TEMPLATE_MENU =
		'<ul>' +
		'{{#each items}}' +
		'<li class="item-{{name}}">' +
		'<a href="#" class="menuitem action {{name}} permanent" data-action="{{name}}">' +
			'{{#if iconClass}}' +
				'<span class="icon {{iconClass}}"></span>' +
			'{{else}}' +
				'<span class="no-icon"></span>' +
			'{{/if}}' +
			'<span class="label">{{displayName}}</span>' +
		'</li>' +
		'{{/each}}' +
		'</ul>';

	var FileSelectionMenu = OC.Backbone.View.extend({
		tagName: 'div',
		className: 'filesSelectMenu popovermenu bubble menu-center',
		_scopes: null,
		/**
		 * Event handler whenever an action has been clicked within the menu
		 *
		 * @param {Object} event event object
		 */
		_onClickAction: function(event) {
			var $target = $(event.currentTarget);
			if (!$target.hasClass('menuitem')) {
				$target = $target.closest('.menuitem');
			}

			OC.hideMenus();

			var action = $target.data('action');
			if (!action) {
				return;
			}

			for (var i = 0; i !== this._scopes.length; ++i) {
				var name = this._scopes[i].name;
				var method = this._scopes[i].method;
				if (name === action) {
					method(event);
					break;
				}
			}

		},
		initialize: function(menuItems) {
			console.log('init-fileseleectionmenu');
			console.log(menuItems);
			this._scopes = menuItems;
		},
		events: {
			'click a.action': '_onClickAction'
		},
		template: Handlebars.compile(TEMPLATE_MENU),
		/**
		 * Renders the menu with the currently set items
		 */
		render: function() {
			this.$el.html(this.template({
				items: this._scopes
			}));
		},
		/**
		 * Displays the menu under the given element
		 *
		 * @param {OCA.Files.FileActionContext} context context
		 * @param {Object} $trigger trigger element
		 */
		show: function(context) {
			this._context = context;

			this.render();
			this.$el.removeClass('hidden');

			OC.showMenu(null, this.$el);
			return false;
		},
		toggleItemVisibility: function (itemName, hide) {
			this.$el.find('.item-' + itemName).toggleClass('hidden', hide);
		},
		updateItemText: function (itemName, translation) {
			this.$el.find('.item-' + itemName).find('label').text(translation);
		}
	});

	OCA.Files.FileSelectionMenu = FileSelectionMenu;
})(OC, OCA);