|
|
- /**
- _onyx.Tooltip_ is a kind of <a href="#onyx.Popup">onyx.Popup</a> that works
- with an <a href="#onyx.TooltipDecorator">onyx.TooltipDecorator</a>. It
- automatically displays a tooltip when the user hovers over the decorator.
- The tooltip is positioned around the decorator where there is available
- window space.
-
- {kind: "onyx.TooltipDecorator", components: [
- {kind: "onyx.Button", content: "Tooltip"},
- {kind: "onyx.Tooltip", content: "I'm a tooltip for a button."}
- ]}
-
- You may manually display the tooltip by calling its _show_ method.
- */
- enyo.kind({
- name: "onyx.Tooltip",
- kind: "onyx.Popup",
- classes: "onyx-tooltip below left-arrow",
- autoDismiss: false,
- showDelay: 500,
- defaultLeft: -6, //default margin-left value
- handlers: {
- onRequestShowTooltip: "requestShow",
- onRequestHideTooltip: "requestHide"
- },
- requestShow: function() {
- this.showJob = setTimeout(enyo.bind(this, "show"), this.showDelay);
- return true;
- },
- cancelShow: function() {
- clearTimeout(this.showJob);
- },
- requestHide: function() {
- this.cancelShow();
- return this.inherited(arguments);
- },
- showingChanged: function() {
- this.cancelShow();
- this.adjustPosition(true);
- this.inherited(arguments);
- },
- applyPosition: function(inRect) {
- var s = ""
- for (n in inRect) {
- s += (n + ":" + inRect[n] + (isNaN(inRect[n]) ? "; " : "px; "));
- }
- this.addStyles(s);
- },
- adjustPosition: function(belowActivator) {
- if (this.showing && this.hasNode()) {
- var b = this.node.getBoundingClientRect();
-
- //when the tooltip bottom goes below the window height move it above the decorator
- if (b.top + b.height > window.innerHeight) {
- this.addRemoveClass("below", false);
- this.addRemoveClass("above", true);
- } else {
- this.addRemoveClass("above", false);
- this.addRemoveClass("below", true);
- }
-
- //when the tooltip's right edge is out of the window, align it's right edge with the decorator left edge (approx)
- if (b.left + b.width > window.innerWidth){
- this.applyPosition({'margin-left': -b.width, bottom: "auto"});
- //use the right-arrow
- this.addRemoveClass("left-arrow", false);
- this.addRemoveClass("right-arrow", true);
- }
- }
- },
- resizeHandler: function() {
- //reset the tooltip to align it's left edge with the decorator
- this.applyPosition({'margin-left': this.defaultLeft, bottom: "auto"});
- this.addRemoveClass("left-arrow", true);
- this.addRemoveClass("right-arrow", false);
-
- this.adjustPosition(true);
- this.inherited(arguments);
- }
- });
|