123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- goog.provide('goog.ui.CustomButtonRenderer');
- goog.require('goog.a11y.aria.Role');
- goog.require('goog.asserts');
- goog.require('goog.dom.NodeType');
- goog.require('goog.dom.TagName');
- goog.require('goog.dom.classlist');
- goog.require('goog.string');
- goog.require('goog.ui.ButtonRenderer');
- goog.require('goog.ui.INLINE_BLOCK_CLASSNAME');
- goog.ui.CustomButtonRenderer = function() {
- goog.ui.ButtonRenderer.call(this);
- };
- goog.inherits(goog.ui.CustomButtonRenderer, goog.ui.ButtonRenderer);
- goog.addSingletonGetter(goog.ui.CustomButtonRenderer);
- goog.ui.CustomButtonRenderer.CSS_CLASS = goog.getCssName('goog-custom-button');
- goog.ui.CustomButtonRenderer.prototype.createDom = function(control) {
- var button = (control);
- var classNames = this.getClassNames(button);
- var buttonElement = button.getDomHelper().createDom(
- goog.dom.TagName.DIV,
- goog.ui.INLINE_BLOCK_CLASSNAME + ' ' + classNames.join(' '),
- this.createButton(button.getContent(), button.getDomHelper()));
- this.setTooltip(buttonElement, (button.getTooltip()));
- return buttonElement;
- };
- goog.ui.CustomButtonRenderer.prototype.getAriaRole = function() {
- return goog.a11y.aria.Role.BUTTON;
- };
- goog.ui.CustomButtonRenderer.prototype.getContentElement = function(element) {
- return element && element.firstChild &&
- (element.firstChild.firstChild);
- };
- goog.ui.CustomButtonRenderer.prototype.createButton = function(content, dom) {
- return dom.createDom(
- goog.dom.TagName.DIV, goog.ui.INLINE_BLOCK_CLASSNAME + ' ' +
- goog.getCssName(this.getCssClass(), 'outer-box'),
- dom.createDom(
- goog.dom.TagName.DIV, goog.ui.INLINE_BLOCK_CLASSNAME + ' ' +
- goog.getCssName(this.getCssClass(), 'inner-box'),
- content));
- };
- goog.ui.CustomButtonRenderer.prototype.canDecorate = function(element) {
- return element.tagName == goog.dom.TagName.DIV;
- };
- goog.ui.CustomButtonRenderer.prototype.hasBoxStructure = function(
- button, element) {
- var outer = button.getDomHelper().getFirstElementChild(element);
- var outerClassName = goog.getCssName(this.getCssClass(), 'outer-box');
- if (outer && goog.dom.classlist.contains(outer, outerClassName)) {
- var inner = button.getDomHelper().getFirstElementChild(outer);
- var innerClassName = goog.getCssName(this.getCssClass(), 'inner-box');
- if (inner && goog.dom.classlist.contains(inner, innerClassName)) {
-
- return true;
- }
- }
- return false;
- };
- goog.ui.CustomButtonRenderer.prototype.decorate = function(control, element) {
- goog.asserts.assert(element);
- var button = (control);
-
-
- goog.ui.CustomButtonRenderer.trimTextNodes_(element, true);
- goog.ui.CustomButtonRenderer.trimTextNodes_(element, false);
-
- if (!this.hasBoxStructure(button, element)) {
- element.appendChild(
- this.createButton(element.childNodes, button.getDomHelper()));
- }
- goog.dom.classlist.addAll(
- element, [goog.ui.INLINE_BLOCK_CLASSNAME, this.getCssClass()]);
- return goog.ui.CustomButtonRenderer.superClass_.decorate.call(
- this, button, element);
- };
- goog.ui.CustomButtonRenderer.prototype.getCssClass = function() {
- return goog.ui.CustomButtonRenderer.CSS_CLASS;
- };
- goog.ui.CustomButtonRenderer.trimTextNodes_ = function(element, fromStart) {
- if (element) {
- var node = fromStart ? element.firstChild : element.lastChild, next;
-
- while (node && node.parentNode == element) {
-
- next = fromStart ? node.nextSibling : node.previousSibling;
- if (node.nodeType == goog.dom.NodeType.TEXT) {
-
- var text = node.nodeValue;
- if (goog.string.trim(text) == '') {
-
- element.removeChild(node);
- } else {
-
- node.nodeValue = fromStart ? goog.string.trimLeft(text) :
- goog.string.trimRight(text);
- break;
- }
- } else {
-
- break;
- }
- node = next;
- }
- }
- };
|