/* Color palette to choose note color */ define([ 'sugar-web/graphics/palette', 'mustache' ], function (palette, mustache) { var notepalette = {}; function parseColor(input) { var colors = input.split("(")[1].split(")")[0].split(","); for (var i = 0; i < colors.length; i++) { colors[i] = parseInt(colors[i]); } return colors; } function initGui() { function onColorChangeFill(event) { PaintApp.data.color.fill = event.detail.color; } var colorsButtonFill = document.getElementById('colors-button-fill'); var colorPaletteFill = new PaintApp.palettes.notePalette.NotePalette(colorsButtonFill, undefined); colorPaletteFill.addEventListener('colorChange', onColorChangeFill); var colorInvokerFill = colorPaletteFill.getPalette().querySelector('.palette-invoker'); colorPaletteFill.setColor(0); } notepalette.initGui = initGui; /* We setup the palette with Sugar colors */ notepalette.NotePalette = function (invoker, primaryText) { this.invoker = invoker; palette.Palette.call(this, invoker, primaryText); this.getPalette().className += " colorpalette"; this.colorChangeEvent = document.createEvent('CustomEvent'); this.colorChangeEvent.initCustomEvent('colorChange', true, true, { 'color': '#ed2529' }); this.template = '\ \
\
\ \ \ {{#rows}}\ \ {{#.}}\ \ {{/.}}\ \ {{/rows}}\ \
\ \
\
\ \
' // this.template = '' + '{{#rows}}' + '' + '{{#.}}' + '' + '' + '' + '{{/.}}' + '' + '{{/rows}}' + ''; var colorsElem = document.createElement('div'); colorsElem.className = 'colors'; var colorsData = { rows: [ [{ color: '#FFF29F' }, { color: '#FFCBA6' }], [{ color: '#81FFC4' }, { color: '#FFB7F9' }], [{ color: '#C39AFF' }, { color: '#9AFAFF' }] ] }; colorsElem.innerHTML = mustache.render(this.template, colorsData); this.setContent([colorsElem]); colorsElem.parentNode.style.backgroundColor = 'black'; colorsElem.parentNode.parentNode.style.minWidth = '120px'; colorsElem.parentNode.parentNode.style.maxWidth = '120px'; colorsElem.parentNode.style.width = '120px'; colorsElem.parentNode.style.height = '170px'; colorsElem.parentNode.style.overflowY = 'auto'; colorsElem.parentNode.style.overflowX = 'hidden'; function popDownOnButtonClick(event, close, shouldUpdateSliders) { invoker.style.backgroundColor = event.target.style.backgroundColor; that.colorChangeEvent.detail.color = event.target.style.backgroundColor; that.getPalette().dispatchEvent(that.colorChangeEvent); that.getPalette().querySelector('.palette-invoker').style.backgroundColor = event.target.style.backgroundColor; if (close === null || close === undefined || close === true) { that.popDown(); } } // Pop-down the palette when a item in the menu is clicked. this.buttons = colorsElem.querySelectorAll('button'); var that = this; that.colorsElem = colorsElem; for (var i = 0; i < this.buttons.length; i++) { this.buttons[i].addEventListener('click', popDownOnButtonClick); } }; var setColor = function (color) { // Look for matching button for (var i = 0 ; i < this.buttons.length ; i++) { if (this.buttons[i].style.backgroundColor == color) { var event = document.createEvent('MouseEvents'); event.initEvent('click', true, true); this.buttons[i].dispatchEvent(event); break; } } // Set sliders values var colors = parseColor(color); this.getPalette().querySelector('.palette-invoker').style.backgroundColor = color; this.invoker.style.backgroundColor = color; }; var addEventListener = function (type, listener, useCapture) { return this.getPalette().addEventListener(type, listener, useCapture); }; notepalette.NotePalette.prototype = Object.create(palette.Palette.prototype, { setColor: { value: setColor, enumerable: true, configurable: true, writable: true }, addEventListener: { value: addEventListener, enumerable: true, configurable: true, writable: true } }); return notepalette; }) ;