123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- goog.provide('goog.ui.SubMenuRenderer');
- goog.require('goog.a11y.aria');
- goog.require('goog.a11y.aria.State');
- goog.require('goog.asserts');
- goog.require('goog.dom');
- goog.require('goog.dom.TagName');
- goog.require('goog.dom.classlist');
- goog.require('goog.style');
- goog.require('goog.ui.Menu');
- goog.require('goog.ui.MenuItemRenderer');
- goog.ui.SubMenuRenderer = function() {
- goog.ui.MenuItemRenderer.call(this);
- };
- goog.inherits(goog.ui.SubMenuRenderer, goog.ui.MenuItemRenderer);
- goog.addSingletonGetter(goog.ui.SubMenuRenderer);
- goog.ui.SubMenuRenderer.CSS_CLASS = goog.getCssName('goog-submenu');
- goog.ui.SubMenuRenderer.CSS_CLASS_SUBMENU_ =
- goog.getCssName('goog-submenu-arrow');
- goog.ui.SubMenuRenderer.prototype.createDom = function(control) {
- var subMenu = (control);
- var element =
- goog.ui.SubMenuRenderer.superClass_.createDom.call(this, subMenu);
- goog.asserts.assert(element);
- goog.dom.classlist.add(element, goog.ui.SubMenuRenderer.CSS_CLASS);
- this.addArrow_(subMenu, element);
- return element;
- };
- goog.ui.SubMenuRenderer.prototype.decorate = function(control, element) {
- var subMenu = (control);
- element =
- goog.ui.SubMenuRenderer.superClass_.decorate.call(this, subMenu, element);
- goog.asserts.assert(element);
- goog.dom.classlist.add(element, goog.ui.SubMenuRenderer.CSS_CLASS);
- this.addArrow_(subMenu, element);
-
- var childMenuEls = goog.dom.getElementsByTagNameAndClass(
- goog.dom.TagName.DIV, goog.getCssName('goog-menu'), element);
- if (childMenuEls.length) {
- var childMenu = new goog.ui.Menu(subMenu.getDomHelper());
- var childMenuEl = childMenuEls[0];
-
-
- goog.style.setElementShown(childMenuEl, false);
- subMenu.getDomHelper().getDocument().body.appendChild(childMenuEl);
- childMenu.decorate(childMenuEl);
- subMenu.setMenu(childMenu, true);
- }
- return element;
- };
- goog.ui.SubMenuRenderer.prototype.setContent = function(element, content) {
-
- var contentElement = this.getContentElement(element);
- var arrowElement = contentElement && contentElement.lastChild;
- goog.ui.SubMenuRenderer.superClass_.setContent.call(this, element, content);
-
-
- if (arrowElement && contentElement.lastChild != arrowElement &&
- goog.dom.classlist.contains(
- (arrowElement),
- goog.ui.SubMenuRenderer.CSS_CLASS_SUBMENU_)) {
- contentElement.appendChild(arrowElement);
- }
- };
- goog.ui.SubMenuRenderer.prototype.initializeDom = function(control) {
- var subMenu = (control);
- goog.ui.SubMenuRenderer.superClass_.initializeDom.call(this, subMenu);
- var element = subMenu.getContentElement();
- var arrow = subMenu.getDomHelper().getElementsByTagNameAndClass(
- goog.dom.TagName.SPAN, goog.ui.SubMenuRenderer.CSS_CLASS_SUBMENU_,
- element)[0];
- goog.ui.SubMenuRenderer.setArrowTextContent_(subMenu, arrow);
- if (arrow != element.lastChild) {
- element.appendChild(arrow);
- }
- var subMenuElement = subMenu.getElement();
- goog.asserts.assert(
- subMenuElement, 'The sub menu DOM element cannot be null.');
- goog.a11y.aria.setState(
- subMenuElement, goog.a11y.aria.State.HASPOPUP, 'true');
- };
- goog.ui.SubMenuRenderer.prototype.addArrow_ = function(subMenu, element) {
- var arrow = subMenu.getDomHelper().createDom(goog.dom.TagName.SPAN);
- arrow.className = goog.ui.SubMenuRenderer.CSS_CLASS_SUBMENU_;
- goog.ui.SubMenuRenderer.setArrowTextContent_(subMenu, arrow);
- this.getContentElement(element).appendChild(arrow);
- };
- goog.ui.SubMenuRenderer.LEFT_ARROW_ = '\u25C4';
- goog.ui.SubMenuRenderer.RIGHT_ARROW_ = '\u25BA';
- goog.ui.SubMenuRenderer.setArrowTextContent_ = function(subMenu, arrow) {
-
- var leftArrow = goog.ui.SubMenuRenderer.LEFT_ARROW_;
- var rightArrow = goog.ui.SubMenuRenderer.RIGHT_ARROW_;
- goog.asserts.assert(arrow);
- if (subMenu.isRightToLeft()) {
- goog.dom.classlist.add(arrow, goog.getCssName('goog-submenu-arrow-rtl'));
-
- goog.dom.setTextContent(
- arrow, subMenu.isAlignedToEnd() ? leftArrow : rightArrow);
- } else {
- goog.dom.classlist.remove(arrow, goog.getCssName('goog-submenu-arrow-rtl'));
-
- goog.dom.setTextContent(
- arrow, subMenu.isAlignedToEnd() ? rightArrow : leftArrow);
- }
- };
|