summaryrefslogtreecommitdiffstats
path: root/theme/javascript/apis
diff options
context:
space:
mode:
Diffstat (limited to 'theme/javascript/apis')
-rw-r--r--theme/javascript/apis/toolbar.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/theme/javascript/apis/toolbar.js b/theme/javascript/apis/toolbar.js
new file mode 100644
index 0000000..1ed3fa8
--- /dev/null
+++ b/theme/javascript/apis/toolbar.js
@@ -0,0 +1,133 @@
+define([
+ 'jQuery',
+ 'lodash'
+], function($, _) {
+ var $toolbar = $('.book-header');
+ var $title = $toolbar.find('h1');
+
+ // Default click handler
+ function defaultOnClick(e) {
+ e.preventDefault();
+ }
+
+ // Create a dropdown menu
+ function createDropdownMenu(dropdown) {
+ var $menu = $('<div>', {
+ 'class': 'dropdown-menu',
+ 'html': '<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>'
+ });
+
+ if (_.isString(dropdown)) {
+ $menu.append(dropdown);
+ } else {
+ var groups = _.map(dropdown, function(group) {
+ if (_.isArray(group)) return group;
+ else return [group];
+ });
+
+ // Create buttons groups
+ _.each(groups, function(group) {
+ var $group = $('<div>', {
+ 'class': 'buttons'
+ });
+ var sizeClass = 'size-'+group.length;
+
+ // Append buttons
+ _.each(group, function(btn) {
+ btn = _.defaults(btn || {}, {
+ text: '',
+ className: '',
+ onClick: defaultOnClick
+ });
+
+ var $btn = $('<button>', {
+ 'class': 'button '+sizeClass+' '+btn.className,
+ 'text': btn.text
+ });
+ $btn.click(btn.onClick);
+
+ $group.append($btn);
+ });
+
+
+ $menu.append($group);
+ });
+
+ }
+
+
+ return $menu;
+ }
+
+ // Create a new button in the toolbar
+ function createButton(opts) {
+ opts = _.defaults(opts || {}, {
+ // Aria label for the button
+ label: '',
+
+ // Icon to show
+ icon: '',
+
+ // Inner text
+ text: '',
+
+ // Right or left position
+ position: 'left',
+
+ // Other class name to add to the button
+ className: '',
+
+ // Triggered when user click on the button
+ onClick: defaultOnClick,
+
+ // Button is a dropdown
+ dropdown: null
+ });
+
+ // Build class name
+ var positionClass = 'pull-'+opts.position;
+
+ // Create button
+ var $btn = $('<a>', {
+ 'class': 'btn',
+ 'text': opts.text,
+ 'aria-label': opts.label,
+ 'href': '#'
+ });
+
+ // Bind click
+ $btn.click(opts.onClick);
+
+ // Prepend icon
+ if (opts.icon) {
+ $('<i>', {
+ 'class': opts.icon
+ }).prependTo($btn);
+ }
+
+ // Prepare dropdown
+ if (opts.dropdown) {
+ var $container = $('<div>', {
+ 'class': 'dropdown '+positionClass+' '+opts.className
+ });
+
+ // Add button to container
+ $btn.addClass('toggle-dropdown');
+ $container.append($btn);
+
+ // Create inner menu
+ var $menu = createDropdownMenu(opts.dropdown);
+ $container.append($menu);
+
+ $container.insertBefore($title);
+ } else {
+ $btn.addClass(positionClass);
+ $btn.addClass(opts.className);
+ $btn.insertBefore($title);
+ }
+ }
+
+ return {
+ createButton: createButton
+ };
+});