define(["sugar-web/graphics/palette", "text!sugar-web/graphics/menupalette.html", "mustache"], function (palette, template, mustache) { 'use strict'; var menupalette = {}; menupalette.MenuPalette = function (invoker, primaryText, menuData) { palette.Palette.call(this, invoker, primaryText); this.selectItemEvent = document.createEvent("CustomEvent"); this.selectItemEvent.initCustomEvent('selectItem', true, true, { 'item': undefined }); var menuElem = document.createElement('ul'); menuElem.className = "menu"; menuElem.innerHTML = mustache.render(template, menuData); this.setContent([menuElem]); // Pop-down the palette when a item in the menu is clicked. this.buttons = menuElem.querySelectorAll('button'); var that = this; function popDownOnButtonClick(event) { that.selectItemEvent.detail.target = event.target; that.getPalette().dispatchEvent(that.selectItemEvent); that.popDown(); } for (var i = 0; i < this.buttons.length; i++) { this.buttons[i].addEventListener('click', popDownOnButtonClick); } }; var addEventListener = function (type, listener, useCapture) { return this.getPalette().addEventListener(type, listener, useCapture); }; menupalette.MenuPalette.prototype = Object.create(palette.Palette.prototype, { addEventListener: { value: addEventListener, enumerable: true, configurable: true, writable: true } }); return menupalette; });