editor/toolbar.js
function toolbarWidget(editor) {
"use strict";
var selected, tools, shortcuts;
shortcuts = [];
tools = {};
function addTool(tool, elementId, keyCode) {
var div, divCanvasContainer, paragraph;
function updateStatus(text) {
var title;
title = tool.toString();
if (text) {
title += " - " + text;
}
if (keyCode) {
title += " (" + String.fromCharCode(keyCode) + ")";
}
paragraph.textContent = title;
if (tool.isEnabled) {
if (tool.isEnabled()) {
div.className = "tool enabled";
} else {
div.className = "tool";
}
}
}
function select() {
if (selected && (selected.tool.uid === tool.uid)) {
if (tool.modeChange) {
tool.modeChange();
updateStatus();
}
} else {
if (tool.init && tool.init(updateStatus)) {
if (selected) {
selected.div.className = "tool";
selected.tool.remove();
}
selected = {"div": div, "tool": tool};
div.className = "tool selected";
}
updateStatus();
}
}
div = ElementHelper.create("div", {"className": "tool"});
div.addEventListener("mousedown", select, false);
if (keyCode) {
shortcuts[keyCode] = {"select": select};
tools[tool.uid] = {"select": select};
paragraph = ElementHelper.create("p", {"textContent": tool.toString() + " (" + String.fromCharCode(keyCode) + ")"});
} else {
paragraph = ElementHelper.create("p", {"textContent": tool.toString()});
}
div.appendChild(paragraph);
if (tool.canvas) {
tool.canvas.style.width = (editor.retina ? tool.canvas.width / 2 : tool.canvas.width) + "px";
tool.canvas.style.height = (editor.retina ? tool.canvas.height / 2 : tool.canvas.height) + "px";
tool.canvas.style.verticalAlign = "bottom";
divCanvasContainer = ElementHelper.create("div", {"style": {"width": tool.canvas.style.width, "height": tool.canvas.style.height, "margin": "0 auto", "padding": "1px 0px"}});
divCanvasContainer.appendChild(tool.canvas);
div.appendChild(divCanvasContainer);
}
document.getElementById(elementId).appendChild(div);
if (tool.autoselect) {
select();
}
return {
"select": select
};
}
function keypress(evt) {
var keyCode;
keyCode = evt.keyCode || evt.which;
if (keyCode >= 65 && keyCode <= 90) {
keyCode += 32;
}
if (shortcuts[keyCode]) {
evt.preventDefault();
shortcuts[keyCode].select();
}
}
function startListening() {
document.addEventListener("keypress", keypress, false);
}
function stopListening() {
document.removeEventListener("keypress", keypress);
}
function giveFocus(uid) {
if (tools[uid]) {
tools[uid].select();
}
}
function init() {
startListening();
}
return {
"init": init,
"editor" : editor,
"addTool": addTool,
"startListening": startListening,
"stopListening": stopListening,
"giveFocus": giveFocus
};
}