Umbraco.Sys.registerNamespace("Umbraco.Controls"); (function ($) { Umbraco.Controls.InsertMacroSplitButton = base2.Base.extend({ //private methods/variables _opts: null, // Constructor constructor: function (opts) { // Merge options with default this._opts = $.extend({ // Default options go here }, opts); }, //public methods/variables init: function () { var self = this; //the container is the 'scope' of which to find .sbPlaceHolder's, by default it is null so the scope is the whole page var container = this._opts.container != null ? this._opts.container : null; //setup the split buttons, find all .sbPlaceHolder's and assign the menu to it which should always //be the previous element with the class .sbMenu var splitButtons = $('.sbPlaceHolder', container); splitButtons.each(function() { var menu = $(this).prev(".sbMenu;"); $(this).find("a.sbLink").splitbutton({ menu: menu }); }); //assign the click handler to each macro item drop down $(".sbMenu .macro-item").click(function () { var alias = $(this).attr("rel"); if ($(this).attr("data-has-params") == "true") { self._opts.openMacroModel.apply(self, [alias]); } else { self._opts.insertMacroMarkup.apply(self, [alias]); } }); //assign the callback for the regular insert macro button (not the drop down) $(".sbPlaceHolder a.sbLink").click(function() { self._opts.openMacroModel.apply(self, []); //call the callback with no alias }); //a fix for scroll issues TODO: put this code in this class and make it flexible (i.e. NOT with ids) //applySplitButtonOverflow('mcontainer', 'innerc', 'macroMenu', '.macro-item', 'showMoreMacros'); } }); })(jQuery);