diff --git a/public/javascripts/jstoolbar/jstoolbar.js b/public/javascripts/jstoolbar/jstoolbar.js
index dccff99521..7d703c48ba 100644
--- a/public/javascripts/jstoolbar/jstoolbar.js
+++ b/public/javascripts/jstoolbar/jstoolbar.js
@@ -451,12 +451,11 @@ jsToolBar.prototype.resizeDragStop = function(event) {
   document.removeEventListener('mouseup', this.dragStopHdlr, false);
 };
 
-/* Code highlighting menu */
-jsToolBar.prototype.precodeMenu = function(fn){
-  var hlLanguages = ["c", "cpp", "csharp", "css", "diff", "go", "groovy", "html", "java", "javascript", "objc", "perl", "php", "python", "r", "ruby", "sass", "scala", "shell", "sql", "swift", "xml", "yaml"];
+/* Add menu */
+jsToolBar.prototype.addMenu = function(toolNodeName, list, fn) {
   var menu = $("
");
-  for (var i = 0; i < hlLanguages.length; i++) {
-    $("").text(hlLanguages[i]).appendTo(menu).mousedown(function(){
+  for (var i = 0; i < list.length; i++) {
+    $("").text(list[i]).appendTo(menu).mousedown(function() {
       fn($(this).text());
     });
   }
@@ -464,10 +463,30 @@ jsToolBar.prototype.precodeMenu = function(fn){
   menu.menu().width(150).position({
     my: "left top",
     at: "left bottom",
-    of: this.toolNodes['precode']
+    of: this.toolNodes[toolNodeName]
   });
   $(document).on("mousedown", function() {
     menu.remove();
   });
   return false;
 };
+
+/* Code highlighting menu */
+jsToolBar.prototype.precodeMenu = function(fn) {
+  var hlLanguages = ["c", "cpp", "csharp", "css", "diff", "go", "groovy", "html", "java", "javascript", "objc", "perl", "php", "python", "r", "ruby", "sass", "scala", "shell", "sql", "swift", "xml", "yaml"];
+  this.addMenu('precode', hlLanguages, fn);
+};
+
+/* Code macro menu */
+jsToolBar.prototype.macroMenu = function() {
+  var macros = {
+    'child_pages': ['{{child_pages(', ')}}'],
+    'include': ['{{include(', ')}}'],
+    'collapse': ['{{collapse()\n', '\n}}'],
+    'thumbnail': ['{{thumbnail(', ')}}']
+  };
+  var This = this;
+  this.addMenu('macro', Object.keys(macros), function(macroName) {
+    This.encloseLineSelection(macros[macroName][0], macros[macroName][1]);
+  });
+};
\ No newline at end of file
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-en.js b/public/javascripts/jstoolbar/lang/jstoolbar-en.js
index 3d55863956..9dd5852575 100644
--- a/public/javascripts/jstoolbar/lang/jstoolbar-en.js
+++ b/public/javascripts/jstoolbar/lang/jstoolbar-en.js
@@ -13,6 +13,7 @@ jsToolBar.strings['Ordered list'] = 'Ordered list';
 jsToolBar.strings['Quote'] = 'Quote';
 jsToolBar.strings['Unquote'] = 'Remove Quote';
 jsToolBar.strings['Preformatted text'] = 'Preformatted text';
+jsToolBar.strings['Macro'] = 'Macro';
 jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
 jsToolBar.strings['Image'] = 'Image';
 jsToolBar.strings['Edit'] = 'Edit';
diff --git a/public/javascripts/jstoolbar/markdown.js b/public/javascripts/jstoolbar/markdown.js
index d087276d63..9c82bd74ca 100644
--- a/public/javascripts/jstoolbar/markdown.js
+++ b/public/javascripts/jstoolbar/markdown.js
@@ -196,6 +196,17 @@ jsToolBar.prototype.elements.precode = {
 // spacer
 jsToolBar.prototype.elements.space4 = {type: 'space'}
 
+// macro
+jsToolBar.prototype.elements.macro = {
+  type: 'button',
+  title: 'Macro',
+  fn: {
+    wiki: function () {
+      this.macroMenu();
+    }
+  }
+}
+
 // wiki page
 jsToolBar.prototype.elements.link = {
   type: 'button',
diff --git a/public/javascripts/jstoolbar/textile.js b/public/javascripts/jstoolbar/textile.js
index 40bc04094d..f596fc0ed6 100644
--- a/public/javascripts/jstoolbar/textile.js
+++ b/public/javascripts/jstoolbar/textile.js
@@ -196,6 +196,17 @@ jsToolBar.prototype.elements.precode = {
 // spacer
 jsToolBar.prototype.elements.space4 = {type: 'space'}
 
+// macro
+jsToolBar.prototype.elements.macro = {
+  type: 'button',
+  title: 'Macro',
+  fn: {
+    wiki: function(){
+      this.macroMenu();
+    }
+  }
+}
+
 // wiki page
 jsToolBar.prototype.elements.link = {
   type: 'button',
diff --git a/public/stylesheets/jstoolbar.css b/public/stylesheets/jstoolbar.css
index bd490b89fb..48122ba83a 100644
--- a/public/stylesheets/jstoolbar.css
+++ b/public/stylesheets/jstoolbar.css
@@ -124,6 +124,9 @@
 .jstb_precode {
     background-image: url(../images/jstoolbar/bt_precode.png);
 }
+.jstb_macro {
+    /*background-image: url(../images/jstoolbar/bt_macro.png);*/
+}
 .jstb_link {
     background-image: url(../images/jstoolbar/bt_link.png);
 }