Skip to content
Permalink
Newer
Older
100644 62 lines (48 sloc) 1.91 KB
1
define(["sugar-web/graphics/palette",
2
"mustache"], function (palette, mustache) {
July 18, 2013 11:23
3
November 19, 2013 14:06
4
'use strict';
5
July 18, 2013 11:23
6
var menupalette = {};
7
8
menupalette.MenuPalette = function (invoker, primaryText, menuData) {
9
palette.Palette.call(this, invoker, primaryText);
10
11
this.selectItemEvent = document.createEvent("CustomEvent");
12
this.selectItemEvent.initCustomEvent('selectItem', true, true, {
13
'item': undefined
14
});
July 18, 2013 11:23
15
16
var template = '{{#.}}' +
17
'<li>' +
18
' <button {{ #icon }}class="icon"{{ /icon }} {{ #id }}id="{{ id }}"{{ /id }}>' +
19
' {{ #icon }}<span></span>{{ /icon }}' +
20
' {{ label }}' +
21
' </button>' +
22
'</li>' +
23
'{{/.}}';
24
July 18, 2013 11:23
25
var menuElem = document.createElement('ul');
26
menuElem.className = "menu";
27
menuElem.innerHTML = mustache.render(template, menuData);
July 18, 2013 11:23
28
this.setContent([menuElem]);
29
30
// Pop-down the palette when a item in the menu is clicked.
31
32
this.buttons = menuElem.querySelectorAll('button');
33
34
var that = this;
35
36
function popDownOnButtonClick(event) {
37
that.selectItemEvent.detail.target = event.target;
38
that.getPalette().dispatchEvent(that.selectItemEvent);
39
that.popDown();
40
}
41
42
for (var i = 0; i < this.buttons.length; i++) {
43
this.buttons[i].addEventListener('click', popDownOnButtonClick);
44
}
45
};
46
47
var addEventListener = function (type, listener, useCapture) {
48
return this.getPalette().addEventListener(type, listener, useCapture);
49
};
50
51
menupalette.MenuPalette.prototype =
52
Object.create(palette.Palette.prototype, {
February 18, 2014 15:25
53
addEventListener: {
54
value: addEventListener,
55
enumerable: true,
56
configurable: true,
57
writable: true
58
}
59
});
July 18, 2013 11:23
60
61
return menupalette;
62
});