Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Bug 429601 - Add basic menu item creation functions to dropdown module
  • Loading branch information
elijahe committed Mar 4, 2014
1 parent e8dc9af commit 898bc6d
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 48 deletions.
34 changes: 9 additions & 25 deletions bundles/org.eclipse.orion.client.ui/web/orion/commands.js
Expand Up @@ -418,22 +418,12 @@ define([
return element;
}

function appendKeyBindingString(element, keyBindingString) {
var span = document.createElement("span"); //$NON-NLS-0$
span.classList.add("dropdownKeyBinding"); //$NON-NLS-0$
span.appendChild(document.createTextNode(keyBindingString));
element.appendChild(span);
}

function createCommandMenuItem(parent, command, commandInvocation, keyBinding, callback, keyBindingString) {
var element;
var element, li;
var dropdown = parent.dropdown;
if (command.hrefCallback) {
element = document.createElement("a"); //$NON-NLS-0$
var span = document.createElement("span");
span.appendChild(document.createTextNode(command.name));
span.classList.add("dropdownCommandName"); //$NON-NLS-0$
element.appendChild(span);
li = Dropdown.createMenuItem(command.name, "a"); //$NON-NLS-0$
element = li.firstElementChild;
var href = command.hrefCallback.call(commandInvocation.handler, commandInvocation);
if (href.then){
href.then(function(l){
Expand All @@ -450,12 +440,8 @@ define([
}
}, false);
} else {
element = document.createElement("span"); //$NON-NLS-0$
element.tabIndex = 0;
var span = document.createElement("span");
span.appendChild(document.createTextNode(command.name));
span.classList.add("dropdownCommandName"); //$NON-NLS-0$
element.appendChild(span);
li = Dropdown.createMenuItem(command.name); //$NON-NLS-0$
element = li.firstElementChild;
var onClick = callback || command.callback;
if (onClick) {
command.onClick = onClick;
Expand All @@ -471,9 +457,7 @@ define([
}, false);
}
}
element.className = "dropdownMenuItem"; //$NON-NLS-0$
element.role = "menuitem"; //$NON-NLS-0$


if (command.tooltip) {
/* nested menu items may represent commands, hence require tooltips */
element.commandTooltip = new Tooltip.Tooltip({
Expand All @@ -484,11 +468,11 @@ define([
}

if (keyBindingString) {
appendKeyBindingString(element, keyBindingString);
Dropdown.appendKeyBindingString(element, keyBindingString);
}
var li = document.createElement("li"); //$NON-NLS-0$

parent.appendChild(li);
li.appendChild(element); //$NON-NLS-0$

if (keyBinding) {
localKeyBindings[command.id] = { keyBinding: keyBinding, command: command, invocation: commandInvocation };
}
Expand Down
77 changes: 75 additions & 2 deletions bundles/org.eclipse.orion.client.ui/web/orion/webui/dropdown.js
Expand Up @@ -409,9 +409,82 @@ define(['require', 'orion/webui/littlelib', 'orion/EventTarget'], function(requi
if (this._boundAutoDismiss) {
lib.removeAutoDismiss(this._boundAutoDismiss);
}
}
},

/**
* Creates a new menu item and appends it to the bottom of this dropdown.
* @param {String} text The text to display inside the new menu item. Required.
* @param {String} innerNodeType The type of the inner node to create. The default is "span". Optional.
* @returns {Object} The top-most new element that was created
*/
appendMenuItem: function(text, innerNodeType) {
var li = createMenuItem(text, innerNodeType);
this._dropdownNode.appendChild(li);
return li;
},

/**
* Creates a new separator and appends it to the bottom of this dropdown.
*/
appendSeparator: function() {
// Add a separator
var li = createSeparator();
this._dropdownNode.appendChild(li);
return li;
}
};

/**
* Creates a new menu item and returns it to the caller.
* @param {String} text The text to display inside the new menu item. Required.
* @param {String} innerNodeType The type of the inner node to create. The default is "span". Optional.
* @returns {Object} The top-most new element that was created
*/
function createMenuItem(text, innerNodeType) {
innerNodeType = innerNodeType === undefined ? "span" : innerNodeType; //$NON-NLS-0$

var element = document.createElement(innerNodeType); //$NON-NLS-0$
element.tabIndex = 0;
element.className = "dropdownMenuItem"; //$NON-NLS-0$
element.role = "menuitem"; //$NON-NLS-0$

var span = document.createElement("span"); //$NON-NLS-0$
span.appendChild(document.createTextNode(text));
span.classList.add("dropdownCommandName"); //$NON-NLS-0$
element.appendChild(span);

var li = document.createElement("li"); //$NON-NLS-0$
li.appendChild(element); //$NON-NLS-0$

return li;
}

/**
* Creates a new separator menu item and returns it to the caller.
* @returns {Object} The new separator element that was created
*/
function createSeparator() {
var li = document.createElement("li"); //$NON-NLS-0$
li.classList.add("dropdownSeparator"); //$NON-NLS-0$
return li;
}

/**
* Appends the specified keyBindingString to the specified menu item.
* @param {Object} element The menu item to append the keybinding string to. Required.
* @param {String} keyBindingString The keybinding string to append. Required.
*/
function appendKeyBindingString(element, keyBindingString) {
var span = document.createElement("span"); //$NON-NLS-0$
span.classList.add("dropdownKeyBinding"); //$NON-NLS-0$
span.appendChild(document.createTextNode(keyBindingString));
element.appendChild(span);
}

Dropdown.prototype.constructor = Dropdown;
//return the module exports
return {Dropdown: Dropdown};
return {Dropdown: Dropdown,
appendKeyBindingString: appendKeyBindingString,
createMenuItem: createMenuItem,
createSeparator: createSeparator};
});
31 changes: 10 additions & 21 deletions bundles/org.eclipse.orion.client.ui/web/orion/widgets/UserMenu.js
Expand Up @@ -17,8 +17,9 @@ define([
'orion/webui/littlelib',
'orion/PageLinks',
'orion/widgets/userAssistance/UATaskPanel',
'orion/webui/dialog'
], function(messages, require, lib, PageLinks, UATaskPanel, dialog) {
'orion/webui/dialog',
'orion/webui/dropdown'
], function(messages, require, lib, PageLinks, UATaskPanel, dialog, Dropdown) {

function UserMenu(options) {
this._displaySignOut = true;
Expand Down Expand Up @@ -60,18 +61,14 @@ define([
},

_makeMenuItem: function(name, click) {
var element = document.createElement("span"); //$NON-NLS-0$
element.role = "menuitem"; //$NON-NLS-0$
element.tabIndex = 0; //$NON-NLS-0$
var text = document.createTextNode(name);
element.appendChild(text);
var li = Dropdown.createMenuItem(name);
var element = li.firstElementChild;
if(typeof this._dropDownItemClass === "string") {//$NON-NLS-0$
if(this._dropDownItemClass !== "") {
element.classList.add(this._dropDownItemClass);
}
} else {
element.classList.add("dropdownMenuItem"); //$NON-NLS-0$
}

element.addEventListener("click", click, false); //$NON-NLS-0$
// onClick events do not register for spans when using the keyboard
element.addEventListener("keydown", function(e) { //$NON-NLS-0$
Expand All @@ -86,7 +83,6 @@ define([
var _self = this;
var authService = this.authenticatedServices[key].authService;
if (authService && authService.logout && this._displaySignOut){
var item = document.createElement("li");//$NON-NLS-0$
var element = this._makeMenuItem(messages["Sign Out"], function() {
authService.logout().then(function(){
_self.addUserItem(key, authService, _self.authenticatedServices[key].label);
Expand All @@ -104,8 +100,7 @@ define([
});
});
});
item.appendChild(element);
this._dropdownNode.appendChild(item);
this._dropdownNode.appendChild(element.parentNode);
}
},

Expand Down Expand Up @@ -171,7 +166,6 @@ define([
}.bind(this));

if(this.keyAssistFunction){
var keyAssist = document.createElement("li"); //$NON-NLS-0$
var element = this._makeMenuItem(messages["Keyboard Shortcuts"], this.keyAssistFunction);
if(typeof this._keyAssistClass === "string") {//$NON-NLS-0$
if(this._keyAssistClass !== "") {
Expand All @@ -180,17 +174,16 @@ define([
} else {
element.classList.add("key-assist-menuitem"); //$NON-NLS-0$
}
keyAssist.appendChild(element);
var keyAssist = element.parentNode;
getCategory(0).appendChild(keyAssist);
}

// TODO need i18n on this eventually
var getStartedServiceRef = serviceRegistry.getServiceReferences("orion.page.getstarted")[0]; //$NON-NLS-0$
if (getStartedServiceRef) {
var data = getStartedServiceRef.getProperty("data"); //$NON-NLS-0$
var getStarted = document.createElement('li');
var startElement = this._makeMenuItem("Getting Started", this.getStartedDialog.bind(this, data));
getStarted.appendChild(startElement);
var getStarted = startElement.parentNode;
getCategory(0).appendChild(getStarted);
}

Expand All @@ -199,11 +192,7 @@ define([
categories.sort(function(a, b) { return a - b; }).forEach(function(category, i) {
if (i < categories.length - 1 && !this._noSeparator) {
// Add a separator
var li = document.createElement("li"); //$NON-NLS-0$
li.classList.add("dropdownSeparator"); //$NON-NLS-0$
var element = document.createElement("span"); //$NON-NLS-0$
element.classList.add("dropdownSeparator"); //$NON-NLS-0$
li.appendChild(element);
var li = Dropdown.createSeparator();
category.appendChild(li);
}
_self._dropdownNode.appendChild(category);
Expand Down

0 comments on commit 898bc6d

Please sign in to comment.