ami/src/ami.js/buttons.js

71 lines
2.2 KiB
JavaScript

#include utility.js
var AmiOptionButtons = function(parent) {
var container = $e({ attrs: { id: 'bbCodeContainer' } }),
buttons = new Map;
parent.appendChild(container);
var createBtn = function(name, title, languageKey, style, onclick) {
var pub = {};
var elem = $e({
tag: 'input',
attrs: {
type: 'button',
name: typeof languageKey === 'string' ? languageKey : ';;',
value: title,
style: style,
onclick: function(ev) { performClick(ev); },
},
});
var hide = function() { elem.classList.add('hidden'); };
var show = function() { elem.classList.remove('hidden'); };
var performClick = function(ev) {
onclick.call(pub, pub, ev);
};
pub.getName = function() { return name; };
pub.getTitle = function() { return title; };
pub.getLanguageKey = function() { return languageKey; };
pub.getElement = function() { return elem; };
pub.performClick = performClick;
pub.hide = hide;
pub.show = show;
return pub;
};
var hide = function() { container.classList.add('hidden'); };
var show = function() { container.classList.remove('hidden'); };
return {
create: function(name, title, languageKey, style, onclick) {
if(buttons.has(name))
throw 'a button with this name already exists';
var btnInfo = createBtn(name, title, languageKey, style, onclick);
buttons.set(btnInfo.getName(), btnInfo);
container.appendChild(btnInfo.getElement());
return btnInfo;
},
has: function(name) {
return buttons.has(name);
},
get: function(name) {
return buttons.get(name);
},
remove: function(name) {
if(!buttons.has(name))
return;
var btnInfo = buttons.get(name);
container.removeChild(btnInfo.getElement());
buttons.delete(name);
},
clear: function() {
buttons.clear();
$rc(container);
},
hide: hide,
show: show,
};
};