/* 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;
})
;