/* Stamp palette to pick a stamp */
|
|
|
|
define([
|
|
'sugar-web/graphics/palette',
|
|
'mustache'
|
|
], function (palette, mustache) {
|
|
var stamppalette = {};
|
|
|
|
/* We setup the palette with stamps */
|
|
function getRows() {
|
|
var platform = 'webkit';
|
|
var isFirefox = typeof InstallTrigger !== 'undefined';
|
|
if (isFirefox) {
|
|
platform = 'gecko';
|
|
}
|
|
var rows = [
|
|
[
|
|
{
|
|
stampBase: 'stamps/heart-{platform}.svg',
|
|
proportionnal: true
|
|
},
|
|
{
|
|
stampBase: 'stamps/star-{platform}.svg',
|
|
proportionnal: true
|
|
},
|
|
{
|
|
stampBase: 'stamps/square-{platform}.svg',
|
|
proportionnal: false
|
|
}
|
|
],
|
|
[
|
|
{
|
|
stampBase: 'stamps/circle-{platform}.svg',
|
|
proportionnal: true
|
|
},
|
|
{
|
|
stampBase: 'stamps/triangle-{platform}.svg',
|
|
proportionnal: true
|
|
},
|
|
{
|
|
stampBase: 'stamps/flower-{platform}.svg',
|
|
proportionnal: true
|
|
}
|
|
]
|
|
];
|
|
for (var i = 0; i < rows.length; i++) {
|
|
for (var j = 0; j < rows[i].length; j++) {
|
|
rows[i][j].stamp = rows[i][j].stampBase.replace('{platform}', platform);
|
|
}
|
|
}
|
|
return rows;
|
|
}
|
|
|
|
stamppalette.StampPalette = function (invoker, primaryText) {
|
|
palette.Palette.call(this, invoker, primaryText);
|
|
this.stampChangeEvent = document.createEvent('CustomEvent');
|
|
this.stampChangeEvent.initCustomEvent('stampChange', true, true, {});
|
|
this.template = '<tbody>' + '{{#rows}}' + '<tr>' + '{{#.}}' + '<td>' + '<button base="{{stampBase}}" proportionnal="{{proportionnal}}" value="{{stamp}}" style="height:55px; width:55px; background-size:40px; background-image: url({{ stamp }}); background-repeat: no-repeat; background-position: center; "></button>' + '</td>' + '{{/.}}' + '</tr>' + '{{/rows}}' + '</tbody>';
|
|
var stampsElem = document.createElement('table');
|
|
stampsElem.className = 'stamps';
|
|
var stampsData = { rows: getRows() };
|
|
stampsElem.innerHTML = mustache.render(this.template, stampsData);
|
|
this.setContent([stampsElem]);
|
|
// Pop-down the palette when a item in the menu is clicked.
|
|
var buttons = stampsElem.querySelectorAll('button');
|
|
this.buttons = buttons;
|
|
var that = this;
|
|
function popDownOnButtonClick(event) {
|
|
for (var i = 0; i < buttons.length; i++) {
|
|
buttons[i].style.border = '0px solid #000';
|
|
}
|
|
event.target.style.border = '1px solid #f00';
|
|
that.stampChangeEvent.detail.proportionnal = event.target.getAttribute('proportionnal');
|
|
that.stampChangeEvent.detail.stampBase = event.target.getAttribute('base');
|
|
that.stampChangeEvent.detail.stamp = event.target.value;
|
|
that.getPalette().dispatchEvent(that.stampChangeEvent);
|
|
that.popDown();
|
|
}
|
|
for (var i = 0; i < buttons.length; i++) {
|
|
buttons[i].addEventListener('click', popDownOnButtonClick);
|
|
}
|
|
};
|
|
|
|
var setStamp = function (index) {
|
|
// Click the nth button
|
|
var event = document.createEvent('MouseEvents');
|
|
event.initEvent('click', true, true);
|
|
this.buttons[index].dispatchEvent(event);
|
|
};
|
|
|
|
var addEventListener = function (type, listener, useCapture) {
|
|
return this.getPalette().addEventListener(type, listener, useCapture);
|
|
};
|
|
|
|
stamppalette.StampPalette.prototype = Object.create(palette.Palette.prototype, {
|
|
setStamp: {
|
|
value: setStamp,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
},
|
|
addEventListener: {
|
|
value: addEventListener,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
}
|
|
});
|
|
return stamppalette;
|
|
});
|