/** * The Toolbar Module creates and renders the toolbars and buttons */ var _ = require("underscore") , defaultButtons , Button , ButtonsGroup , Separator , defaultButtonAttributes , buttonTemplate; buttonTemplate = _.template( '
  • ' ); defaultButtonAttributes = function (name, overrides) { return { id: name, key: name, localizationId: "pad.toolbar." + name + ".title", icon: "buttonicon-" + name }; }; defaultButtons = { bold: defaultButtonAttributes("bold"), italic: defaultButtonAttributes("italic"), underline: defaultButtonAttributes("underline"), strikethrough: defaultButtonAttributes("strikethrough"), orderedlist: { id: "orderedlist", key: "insertorderedlist", localizationId: "pad.toolbar.ol.title", icon: "buttonicon-insertorderedlist" }, unorderedlist: { id: "unorderedlist", key: "insertunorderedlist", localizationId: "pad.toolbar.ul.title", icon: "buttonicon-insertunorderedlist" }, indent: defaultButtonAttributes("indent"), outdent: { id: "outdent", key: "outdent", localizationId: "pad.toolbar.unindent.title", icon: "buttonicon-outdent" }, undo: defaultButtonAttributes("undo"), redo: defaultButtonAttributes("redo"), clearauthorship: { id: "clearAuthorship", key: "clearauthorship", localizationId: "pad.toolbar.clearAuthorship.title", icon: "buttonicon-clearauthorship" } }; ButtonsGroup = function () { this.buttons = []; }; ButtonsGroup.fromArray = function (array) { var btnGroup = new ButtonsGroup(); _.each(array, function (btnName) { var b = new Button(defaultButtons[btnName]); btnGroup.addButton(b); }); return btnGroup; }; ButtonsGroup.prototype.addButton = function (button) { this.buttons.push(button); return this; }; ButtonsGroup.prototype.render = function () { if (this.buttons.length == 1) { this.buttons[0].grouping = ""; } else { _.first(this.buttons).grouping = "grouped-left"; _.last(this.buttons).grouping = "grouped-right"; _.each(this.buttons.slice(1, -1), function (btn) { btn.grouping = "grouped-middle" }); } return _.map(this.buttons, function (btn) { return btn.render(); }).join("\n"); }; Button = function (attributes) { this.attributes = attributes; }; Button.prototype.grouping = ""; Button.prototype.render = function () { return buttonTemplate(this); }; Separator = function () {}; Separator.prototype.render = function () { return '
  • '; }; module.exports = { menu: function (buttons) { var groups = _.map(buttons, function (group) { return ButtonsGroup.fromArray(group).render(); }); return groups.join(new Separator().render()); } };