From 550abd5129b312d75cb92e4bb361fb4138d07237 Mon Sep 17 00:00:00 2001 From: cohitre Date: Mon, 13 Aug 2012 22:17:22 -0700 Subject: [PATCH] Making the formatting toolbar easier to build. --- available_plugins/ep_formatting/plugin.js | 100 +++++++++++++++++- .../ep_formatting/templates/button.ejs | 11 ++ .../ep_formatting/templates/buttons.ejs | 58 ---------- 3 files changed, 109 insertions(+), 60 deletions(-) create mode 100644 available_plugins/ep_formatting/templates/button.ejs delete mode 100644 available_plugins/ep_formatting/templates/buttons.ejs diff --git a/available_plugins/ep_formatting/plugin.js b/available_plugins/ep_formatting/plugin.js index f82c1183e..bc5fa3063 100644 --- a/available_plugins/ep_formatting/plugin.js +++ b/available_plugins/ep_formatting/plugin.js @@ -1,6 +1,102 @@ -var eejs = require('ep_etherpad-lite/node/eejs/'); +var eejs = require('ep_etherpad-lite/node/eejs/') + , _ = require('ep_etherpad-lite/static/js/underscore')._ + , defaultButtons = [] + , registeredButtons = {} + , helpers; + +helpers = { + mapButtons: function (buttonGroups, registeredButtons) { + var self = this; + return _.map(buttonGroups, function (group) { + return _.map(group, function (buttonName) { + return registeredButtons[buttonName]; + }); + }); + }, + renderToolbar: function (toolbar) { + var self = this; + return _.map(toolbar, function (buttonGroup, index) { + var str = (index == 0) + ? "" + : self.renderSeparator(); + return str + self.renderGroup(buttonGroup); + }).join(""); + }, + renderGroup: function (buttons) { + if (buttons.length === 1) { + return this.renderSingleButton(buttons[0]); + } + else { + return this.renderFirstButton(buttons[0]) + + this.renderMiddleGroup(buttons.slice(1, -1)) + + this.renderLastButton(buttons[buttons.length - 1]); + } + }, + renderSingleButton: function (button) { + return this.renderButton(button); + }, + renderFirstButton: function (button) { + return this.renderButton(button, "left"); + }, + renderMiddleButton: function (button) { + return this.renderButton(button, "middle"); + }, + renderMiddleGroup: function (buttons) { + var self = this; + return _.map(buttons, function (button) { + return self.renderMiddleButton(button); + }).join(""); + }, + renderLastButton: function (button) { + return this.renderButton(button, "right"); + }, + renderButton: function (button, position) { + var template = "ep_formatting/templates/button.ejs" + return eejs.require(template, { + button: button, + groupPosition: position + }); + }, + renderSeparator: function () { + return '
  • ' + } +}; + +var registerButtonObject = function (id, key, title, cssClass) { + var button = { + "id": id, + "key": key, + "title": title, + "cssClass": cssClass + }; + registeredButtons[id] = button; + return button; +}; + +registerButtonObject("bold", "bold", "Bold (ctrl-B)", "buttonicon-bold"); +registerButtonObject("italic", "italic", "Italics (ctrl-I)", "buttonicon-italic"); +registerButtonObject("underline", "underline", "Underline (ctrl-U)", "buttonicon-underline"); +registerButtonObject("strikethrough", "strikethrough", "Strikethrough", "buttonicon-strikethrough"); + +registerButtonObject("orderedlist", "insertorderedlist", "Toggle Ordered List", "buttonicon-insertorderedlist"); +registerButtonObject("unorderedlist", "insertunorderedlist", "Toggle Bullet List", "buttonicon-insertunorderedlist"); +registerButtonObject("indent", "indent", "Indent", "buttonicon-indent"); +registerButtonObject("outdent", "outdent", "Unindent", "buttonicon-outdent"); + +registerButtonObject("undo", "undo", "Undo (ctrl-Z)", "buttonicon-undo"); +registerButtonObject("redo", "redo", "Redo (ctrl-Y)", "buttonicon-redo"); + +registerButtonObject("clearauthorship", "clearauthorship", "Clear Authorship Colors", "buttonicon-clearauthorship"); + +defaultButtons = [ + ["bold", "italic", "underline", "strikethrough"], + ["orderedlist", "unorderedlist", "indent", "outdent"], + ["undo", "redo"], + ["clearauthorship"] +]; exports.eejsBlock_editbarMenuLeft = function (hook_name, args, cb) { - args.content = args.content + eejs.require("ep_formatting/templates/buttons.ejs"); + var buttons = helpers.mapButtons(defaultButtons, registeredButtons); + args.content = args.content + helpers.renderToolbar(buttons); return cb(); } diff --git a/available_plugins/ep_formatting/templates/button.ejs b/available_plugins/ep_formatting/templates/button.ejs new file mode 100644 index 000000000..7bb0c250d --- /dev/null +++ b/available_plugins/ep_formatting/templates/button.ejs @@ -0,0 +1,11 @@ +<% + var groupClass = "" + if (groupPosition !== undefined) { + groupClass = "grouped-" + groupPosition; + } +%> +
  • + + + +
  • diff --git a/available_plugins/ep_formatting/templates/buttons.ejs b/available_plugins/ep_formatting/templates/buttons.ejs deleted file mode 100644 index 99019cb6b..000000000 --- a/available_plugins/ep_formatting/templates/buttons.ejs +++ /dev/null @@ -1,58 +0,0 @@ -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • -
  • - - - -
  • -
  • - - - -
  • -
  • -
  • - - - -