mirror of
https://github.com/google/nomulus.git
synced 2025-05-29 17:00:11 +02:00
Import code from internal repository to git
This commit is contained in:
commit
0ef0c933d2
2490 changed files with 281594 additions and 0 deletions
135
java/com/google/domain/registry/ui/js/menu_button.js
Normal file
135
java/com/google/domain/registry/ui/js/menu_button.js
Normal file
|
@ -0,0 +1,135 @@
|
|||
// Copyright 2016 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
goog.provide('registry.MenuButton');
|
||||
|
||||
goog.require('goog.array');
|
||||
goog.require('goog.asserts');
|
||||
goog.require('goog.dom');
|
||||
goog.require('goog.dom.classlist');
|
||||
goog.require('goog.events');
|
||||
goog.require('goog.events.EventHandler');
|
||||
goog.require('goog.events.EventType');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Kennedy style menu button.
|
||||
* @param {!Element} button Menu button element.
|
||||
* @constructor
|
||||
* @extends {goog.events.EventHandler}
|
||||
* @final
|
||||
*/
|
||||
registry.MenuButton = function(button) {
|
||||
registry.MenuButton.base(this, 'constructor');
|
||||
|
||||
/**
|
||||
* Outer menu button element.
|
||||
* @private {!Element}
|
||||
* @const
|
||||
*/
|
||||
this.button_ = button;
|
||||
this.listen(button, goog.events.EventType.CLICK, this.onButtonClick_);
|
||||
|
||||
/**
|
||||
* Label that displays currently selected item.
|
||||
* @private {!Element}
|
||||
* @const
|
||||
*/
|
||||
this.label_ =
|
||||
goog.dom.getRequiredElementByClass(goog.getCssName('label'), button);
|
||||
|
||||
/**
|
||||
* List of selectable items.
|
||||
* @private {!Element}
|
||||
* @const
|
||||
*/
|
||||
this.menu_ =
|
||||
goog.dom.getRequiredElementByClass(goog.getCssName('kd-menulist'),
|
||||
button);
|
||||
|
||||
goog.array.forEach(
|
||||
goog.dom.getElementsByClass(goog.getCssName('kd-menulistitem'), button),
|
||||
function(item) {
|
||||
this.listen(item, goog.events.EventType.CLICK, this.onItemClick_);
|
||||
},
|
||||
this);
|
||||
};
|
||||
goog.inherits(registry.MenuButton, goog.events.EventHandler);
|
||||
|
||||
|
||||
/**
|
||||
* Returns selected value in menu.
|
||||
* @return {string}
|
||||
*/
|
||||
registry.MenuButton.prototype.getValue = function() {
|
||||
return goog.dom.getTextContent(
|
||||
goog.dom.getRequiredElementByClass(
|
||||
goog.getCssName('selected'),
|
||||
this.button_));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Main menu button handler.
|
||||
* @param {!goog.events.BrowserEvent} e
|
||||
* @private
|
||||
*/
|
||||
registry.MenuButton.prototype.onButtonClick_ = function(e) {
|
||||
if (goog.dom.classlist.contains(this.button_, goog.getCssName('selected'))) {
|
||||
return;
|
||||
}
|
||||
e.stopPropagation();
|
||||
goog.dom.classlist.add(this.button_, goog.getCssName('selected'));
|
||||
goog.dom.classlist.add(this.menu_, goog.getCssName('shown'));
|
||||
this.listenOnce(goog.dom.getDocument().body, goog.events.EventType.CLICK,
|
||||
this.hideMenu_);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Menu item selection handler.
|
||||
* @param {!goog.events.BrowserEvent} e
|
||||
* @private
|
||||
*/
|
||||
registry.MenuButton.prototype.onItemClick_ = function(e) {
|
||||
e.stopPropagation();
|
||||
if (goog.dom.classlist.contains(this.button_, goog.getCssName('disabled'))) {
|
||||
return;
|
||||
}
|
||||
goog.array.forEach(
|
||||
goog.dom.getElementsByClass(goog.getCssName('kd-menulistitem'),
|
||||
this.button_),
|
||||
function(item) {
|
||||
goog.dom.classlist.remove(item, goog.getCssName('selected'));
|
||||
},
|
||||
this);
|
||||
goog.asserts.assert(e.target instanceof Element);
|
||||
goog.dom.classlist.add(e.target, goog.getCssName('selected'));
|
||||
var text = goog.dom.getTextContent(e.target);
|
||||
goog.dom.setTextContent(this.label_, text);
|
||||
goog.events.fireListeners(this.button_, goog.events.EventType.CHANGE,
|
||||
false, {newValue: text});
|
||||
this.hideMenu_();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Hide the menu.
|
||||
* @private
|
||||
*/
|
||||
registry.MenuButton.prototype.hideMenu_ = function() {
|
||||
goog.dom.classlist.remove(this.menu_, goog.getCssName('shown'));
|
||||
goog.dom.classlist.remove(this.button_, goog.getCssName('selected'));
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue