// Generated by CoffeeScript 1.4.0
/*
#
# Opentip v2.4.6
#
# More info at [www.opentip.org](http://www.opentip.org)
#
# Copyright (c) 2012, Matias Meno
# Graphics by Tjandra Mayerhold
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
*/
var Opentip, firstAdapter, i, mouseMoved, mousePosition, mousePositionObservers, position, vendors, _i, _len, _ref,
__slice = [].slice,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
__hasProp = {}.hasOwnProperty;
Opentip = (function() {
Opentip.prototype.STICKS_OUT_TOP = 1;
Opentip.prototype.STICKS_OUT_BOTTOM = 2;
Opentip.prototype.STICKS_OUT_LEFT = 1;
Opentip.prototype.STICKS_OUT_RIGHT = 2;
Opentip.prototype["class"] = {
container: "opentip-container",
opentip: "opentip",
header: "ot-header",
content: "ot-content",
loadingIndicator: "ot-loading-indicator",
close: "ot-close",
goingToHide: "ot-going-to-hide",
hidden: "ot-hidden",
hiding: "ot-hiding",
goingToShow: "ot-going-to-show",
showing: "ot-showing",
visible: "ot-visible",
loading: "ot-loading",
ajaxError: "ot-ajax-error",
fixed: "ot-fixed",
showEffectPrefix: "ot-show-effect-",
hideEffectPrefix: "ot-hide-effect-",
stylePrefix: "style-"
};
function Opentip(element, content, title, options) {
var elementsOpentips, hideTrigger, methodToBind, optionSources, prop, styleName, _i, _j, _len, _len1, _ref, _ref1, _ref2, _tmpStyle,
_this = this;
this.id = ++Opentip.lastId;
this.debug("Creating Opentip.");
Opentip.tips.push(this);
this.adapter = Opentip.adapter;
elementsOpentips = this.adapter.data(element, "opentips") || [];
elementsOpentips.push(this);
this.adapter.data(element, "opentips", elementsOpentips);
this.triggerElement = this.adapter.wrap(element);
if (this.triggerElement.length > 1) {
throw new Error("You can't call Opentip on multiple elements.");
}
if (this.triggerElement.length < 1) {
throw new Error("Invalid element.");
}
this.loaded = false;
this.loading = false;
this.visible = false;
this.waitingToShow = false;
this.waitingToHide = false;
this.currentPosition = {
left: 0,
top: 0
};
this.dimensions = {
width: 100,
height: 50
};
this.content = "";
this.redraw = true;
this.currentObservers = {
showing: false,
visible: false,
hiding: false,
hidden: false
};
options = this.adapter.clone(options);
if (typeof content === "object") {
options = content;
content = title = void 0;
} else if (typeof title === "object") {
options = title;
title = void 0;
}
if (title != null) {
options.title = title;
}
if (content != null) {
this.setContent(content);
}
if (options["extends"] == null) {
if (options.style != null) {
options["extends"] = options.style;
} else {
options["extends"] = Opentip.defaultStyle;
}
}
optionSources = [options];
_tmpStyle = options;
while (_tmpStyle["extends"]) {
styleName = _tmpStyle["extends"];
_tmpStyle = Opentip.styles[styleName];
if (_tmpStyle == null) {
throw new Error("Invalid style: " + styleName);
}
optionSources.unshift(_tmpStyle);
if (!((_tmpStyle["extends"] != null) || styleName === "standard")) {
_tmpStyle["extends"] = "standard";
}
}
options = (_ref = this.adapter).extend.apply(_ref, [{}].concat(__slice.call(optionSources)));
options.hideTriggers = (function() {
var _i, _len, _ref1, _results;
_ref1 = options.hideTriggers;
_results = [];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
hideTrigger = _ref1[_i];
_results.push(hideTrigger);
}
return _results;
})();
if (options.hideTrigger && options.hideTriggers.length === 0) {
options.hideTriggers.push(options.hideTrigger);
}
_ref1 = ["tipJoint", "targetJoint", "stem"];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
prop = _ref1[_i];
if (options[prop] && typeof options[prop] === "string") {
options[prop] = new Opentip.Joint(options[prop]);
}
}
if (options.ajax && (options.ajax === true || !options.ajax)) {
if (this.adapter.tagName(this.triggerElement) === "A") {
options.ajax = this.adapter.attr(this.triggerElement, "href");
} else {
options.ajax = false;
}
}
if (options.showOn === "click" && this.adapter.tagName(this.triggerElement) === "A") {
this.adapter.observe(this.triggerElement, "click", function(e) {
e.preventDefault();
e.stopPropagation();
return e.stopped = true;
});
}
if (options.target) {
options.fixed = true;
}
if (options.stem === true) {
options.stem = new Opentip.Joint(options.tipJoint);
}
if (options.target === true) {
options.target = this.triggerElement;
} else if (options.target) {
options.target = this.adapter.wrap(options.target);
}
this.currentStem = options.stem;
if (options.delay == null) {
options.delay = options.showOn === "mouseover" ? 0.2 : 0;
}
if (options.targetJoint == null) {
options.targetJoint = new Opentip.Joint(options.tipJoint).flip();
}
this.showTriggers = [];
this.showTriggersWhenVisible = [];
this.hideTriggers = [];
if (options.showOn && options.showOn !== "creation") {
this.showTriggers.push({
element: this.triggerElement,
event: options.showOn
});
}
if (options.ajaxCache != null) {
options.cache = options.ajaxCache;
delete options.ajaxCache;
}
this.options = options;
this.bound = {};
_ref2 = ["prepareToShow", "prepareToHide", "show", "hide", "reposition"];
for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
methodToBind = _ref2[_j];
this.bound[methodToBind] = (function(methodToBind) {
return function() {
return _this[methodToBind].apply(_this, arguments);
};
})(methodToBind);
}
this.adapter.domReady(function() {
_this.activate();
if (_this.options.showOn === "creation") {
return _this.prepareToShow();
}
});
}
Opentip.prototype._setup = function() {
var hideOn, hideTrigger, hideTriggerElement, i, _i, _j, _len, _len1, _ref, _ref1, _results;
this.debug("Setting up the tooltip.");
this._buildContainer();
this.hideTriggers = [];
_ref = this.options.hideTriggers;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
hideTrigger = _ref[i];
hideTriggerElement = null;
hideOn = this.options.hideOn instanceof Array ? this.options.hideOn[i] : this.options.hideOn;
if (typeof hideTrigger === "string") {
switch (hideTrigger) {
case "trigger":
hideOn = hideOn || "mouseout";
hideTriggerElement = this.triggerElement;
break;
case "tip":
hideOn = hideOn || "mouseover";
hideTriggerElement = this.container;
break;
case "target":
hideOn = hideOn || "mouseover";
hideTriggerElement = this.options.target;
break;
case "closeButton":
break;
default:
throw new Error("Unknown hide trigger: " + hideTrigger + ".");
}
} else {
hideOn = hideOn || "mouseover";
hideTriggerElement = this.adapter.wrap(hideTrigger);
}
if (hideTriggerElement) {
this.hideTriggers.push({
element: hideTriggerElement,
event: hideOn,
original: hideTrigger
});
}
}
_ref1 = this.hideTriggers;
_results = [];
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
hideTrigger = _ref1[_j];
_results.push(this.showTriggersWhenVisible.push({
element: hideTrigger.element,
event: "mouseover"
}));
}
return _results;
};
Opentip.prototype._buildContainer = function() {
this.container = this.adapter.create("
");
this.adapter.css(this.container, {
position: "absolute"
});
if (this.options.ajax) {
this.adapter.addClass(this.container, this["class"].loading);
}
if (this.options.fixed) {
this.adapter.addClass(this.container, this["class"].fixed);
}
if (this.options.showEffect) {
this.adapter.addClass(this.container, "" + this["class"].showEffectPrefix + this.options.showEffect);
}
if (this.options.hideEffect) {
return this.adapter.addClass(this.container, "" + this["class"].hideEffectPrefix + this.options.hideEffect);
}
};
Opentip.prototype._buildElements = function() {
var headerElement, titleElement;
this.tooltipElement = this.adapter.create("");
this.backgroundCanvas = this.adapter.wrap(document.createElement("canvas"));
this.adapter.css(this.backgroundCanvas, {
position: "absolute"
});
if (typeof G_vmlCanvasManager !== "undefined" && G_vmlCanvasManager !== null) {
G_vmlCanvasManager.initElement(this.adapter.unwrap(this.backgroundCanvas));
}
headerElement = this.adapter.find(this.tooltipElement, "." + this["class"].header);
if (this.options.title) {
titleElement = this.adapter.create("");
this.adapter.update(titleElement, this.options.title, this.options.escapeTitle);
this.adapter.append(headerElement, titleElement);
}
if (this.options.ajax && !this.loaded) {
this.adapter.append(this.tooltipElement, this.adapter.create("↻
"));
}
if (__indexOf.call(this.options.hideTriggers, "closeButton") >= 0) {
this.closeButtonElement = this.adapter.create("Close");
this.adapter.append(headerElement, this.closeButtonElement);
}
this.adapter.append(this.container, this.backgroundCanvas);
this.adapter.append(this.container, this.tooltipElement);
this.adapter.append(document.body, this.container);
this._newContent = true;
return this.redraw = true;
};
Opentip.prototype.setContent = function(content) {
this.content = content;
this._newContent = true;
if (typeof this.content === "function") {
this._contentFunction = this.content;
this.content = "";
} else {
this._contentFunction = null;
}
if (this.visible) {
return this._updateElementContent();
}
};
Opentip.prototype._updateElementContent = function() {
var contentDiv;
if (this._newContent || (!this.options.cache && this._contentFunction)) {
contentDiv = this.adapter.find(this.container, "." + this["class"].content);
if (contentDiv != null) {
if (this._contentFunction) {
this.debug("Executing content function.");
this.content = this._contentFunction(this);
}
this.adapter.update(contentDiv, this.content, this.options.escapeContent);
}
this._newContent = false;
}
this._storeAndLockDimensions();
return this.reposition();
};
Opentip.prototype._storeAndLockDimensions = function() {
var prevDimension;
if (!this.container) {
return;
}
prevDimension = this.dimensions;
this.adapter.css(this.container, {
width: "auto",
left: "0px",
top: "0px"
});
this.dimensions = this.adapter.dimensions(this.container);
this.dimensions.width += 1;
this.adapter.css(this.container, {
width: "" + this.dimensions.width + "px",
top: "" + this.currentPosition.top + "px",
left: "" + this.currentPosition.left + "px"
});
if (!this._dimensionsEqual(this.dimensions, prevDimension)) {
this.redraw = true;
return this._draw();
}
};
Opentip.prototype.activate = function() {
return this._setupObservers("hidden", "hiding");
};
Opentip.prototype.deactivate = function() {
this.debug("Deactivating tooltip.");
this.hide();
return this._setupObservers("-showing", "-visible", "-hidden", "-hiding");
};
Opentip.prototype._setupObservers = function() {
var observeOrStop, removeObserver, state, states, trigger, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref, _ref1, _ref2,
_this = this;
states = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
for (_i = 0, _len = states.length; _i < _len; _i++) {
state = states[_i];
removeObserver = false;
if (state.charAt(0) === "-") {
removeObserver = true;
state = state.substr(1);
}
if (this.currentObservers[state] === !removeObserver) {
continue;
}
this.currentObservers[state] = !removeObserver;
observeOrStop = function() {
var args, _ref, _ref1;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (removeObserver) {
return (_ref = _this.adapter).stopObserving.apply(_ref, args);
} else {
return (_ref1 = _this.adapter).observe.apply(_ref1, args);
}
};
switch (state) {
case "showing":
_ref = this.hideTriggers;
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
trigger = _ref[_j];
observeOrStop(trigger.element, trigger.event, this.bound.prepareToHide);
}
observeOrStop((document.onresize != null ? document : window), "resize", this.bound.reposition);
observeOrStop(window, "scroll", this.bound.reposition);
break;
case "visible":
_ref1 = this.showTriggersWhenVisible;
for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) {
trigger = _ref1[_k];
observeOrStop(trigger.element, trigger.event, this.bound.prepareToShow);
}
break;
case "hiding":
_ref2 = this.showTriggers;
for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) {
trigger = _ref2[_l];
observeOrStop(trigger.element, trigger.event, this.bound.prepareToShow);
}
break;
case "hidden":
break;
default:
throw new Error("Unknown state: " + state);
}
}
return null;
};
Opentip.prototype.prepareToShow = function() {
this._abortHiding();
this._abortShowing();
if (this.visible) {
return;
}
this.debug("Showing in " + this.options.delay + "s.");
if (this.container == null) {
this._setup();
}
if (this.options.group) {
Opentip._abortShowingGroup(this.options.group, this);
}
this.preparingToShow = true;
this._setupObservers("-hidden", "-hiding", "showing");
this._followMousePosition();
if (this.options.fixed && !this.options.target) {
this.initialMousePosition = mousePosition;
}
this.reposition();
return this._showTimeoutId = this.setTimeout(this.bound.show, this.options.delay || 0);
};
Opentip.prototype.show = function() {
var _this = this;
this._abortHiding();
if (this.visible) {
return;
}
this._clearTimeouts();
if (!this._triggerElementExists()) {
return this.deactivate();
}
this.debug("Showing now.");
if (this.container == null) {
this._setup();
}
if (this.options.group) {
Opentip._hideGroup(this.options.group, this);
}
this.visible = true;
this.preparingToShow = false;
if (this.tooltipElement == null) {
this._buildElements();
}
this._updateElementContent();
if (this.options.ajax && (!this.loaded || !this.options.cache)) {
this._loadAjax();
}
this._searchAndActivateCloseButtons();
this._startEnsureTriggerElement();
this.adapter.css(this.container, {
zIndex: Opentip.lastZIndex++
});
this._setupObservers("-hidden", "-hiding", "-showing", "-visible", "showing", "visible");
if (this.options.fixed && !this.options.target) {
this.initialMousePosition = mousePosition;
}
this.reposition();
this.adapter.removeClass(this.container, this["class"].hiding);
this.adapter.removeClass(this.container, this["class"].hidden);
this.adapter.addClass(this.container, this["class"].goingToShow);
this.setCss3Style(this.container, {
transitionDuration: "0s"
});
this.defer(function() {
var delay;
if (!_this.visible || _this.preparingToHide) {
return;
}
_this.adapter.removeClass(_this.container, _this["class"].goingToShow);
_this.adapter.addClass(_this.container, _this["class"].showing);
delay = 0;
if (_this.options.showEffect && _this.options.showEffectDuration) {
delay = _this.options.showEffectDuration;
}
_this.setCss3Style(_this.container, {
transitionDuration: "" + delay + "s"
});
_this._visibilityStateTimeoutId = _this.setTimeout(function() {
_this.adapter.removeClass(_this.container, _this["class"].showing);
return _this.adapter.addClass(_this.container, _this["class"].visible);
}, delay);
return _this._activateFirstInput();
});
return this._draw();
};
Opentip.prototype._abortShowing = function() {
if (this.preparingToShow) {
this.debug("Aborting showing.");
this._clearTimeouts();
this._stopFollowingMousePosition();
this.preparingToShow = false;
return this._setupObservers("-showing", "-visible", "hiding", "hidden");
}
};
Opentip.prototype.prepareToHide = function() {
this._abortShowing();
this._abortHiding();
if (!this.visible) {
return;
}
this.debug("Hiding in " + this.options.hideDelay + "s");
this.preparingToHide = true;
this._setupObservers("-showing", "visible", "-hidden", "hiding");
return this._hideTimeoutId = this.setTimeout(this.bound.hide, this.options.hideDelay);
};
Opentip.prototype.hide = function() {
var _this = this;
this._abortShowing();
if (!this.visible) {
return;
}
this._clearTimeouts();
this.debug("Hiding!");
this.visible = false;
this.preparingToHide = false;
this._stopEnsureTriggerElement();
this._setupObservers("-showing", "-visible", "-hiding", "-hidden", "hiding", "hidden");
if (!this.options.fixed) {
this._stopFollowingMousePosition();
}
if (!this.container) {
return;
}
this.adapter.removeClass(this.container, this["class"].visible);
this.adapter.removeClass(this.container, this["class"].showing);
this.adapter.addClass(this.container, this["class"].goingToHide);
this.setCss3Style(this.container, {
transitionDuration: "0s"
});
return this.defer(function() {
var hideDelay;
_this.adapter.removeClass(_this.container, _this["class"].goingToHide);
_this.adapter.addClass(_this.container, _this["class"].hiding);
hideDelay = 0;
if (_this.options.hideEffect && _this.options.hideEffectDuration) {
hideDelay = _this.options.hideEffectDuration;
}
_this.setCss3Style(_this.container, {
transitionDuration: "" + hideDelay + "s"
});
return _this._visibilityStateTimeoutId = _this.setTimeout(function() {
_this.adapter.removeClass(_this.container, _this["class"].hiding);
_this.adapter.addClass(_this.container, _this["class"].hidden);
_this.setCss3Style(_this.container, {
transitionDuration: "0s"
});
if (_this.options.removeElementsOnHide) {
_this.debug("Removing HTML elements.");
_this.adapter.remove(_this.container);
delete _this.container;
return delete _this.tooltipElement;
}
}, hideDelay);
});
};
Opentip.prototype._abortHiding = function() {
if (this.preparingToHide) {
this.debug("Aborting hiding.");
this._clearTimeouts();
this.preparingToHide = false;
return this._setupObservers("-hiding", "showing", "visible");
}
};
Opentip.prototype.reposition = function() {
var position, stem, _ref,
_this = this;
position = this.getPosition();
if (position == null) {
return;
}
stem = this.options.stem;
if (this.options.containInViewport) {
_ref = this._ensureViewportContainment(position), position = _ref.position, stem = _ref.stem;
}
if (this._positionsEqual(position, this.currentPosition)) {
return;
}
if (!(!this.options.stem || stem.eql(this.currentStem))) {
this.redraw = true;
}
this.currentPosition = position;
this.currentStem = stem;
this._draw();
this.adapter.css(this.container, {
left: "" + position.left + "px",
top: "" + position.top + "px"
});
return this.defer(function() {
var rawContainer, redrawFix;
rawContainer = _this.adapter.unwrap(_this.container);
rawContainer.style.visibility = "hidden";
redrawFix = rawContainer.offsetHeight;
return rawContainer.style.visibility = "visible";
});
};
Opentip.prototype.getPosition = function(tipJoint, targetJoint, stem) {
var additionalHorizontal, additionalVertical, offsetDistance, position, stemLength, targetDimensions, targetPosition, unwrappedTarget, _ref;
if (!this.container) {
return;
}
if (tipJoint == null) {
tipJoint = this.options.tipJoint;
}
if (targetJoint == null) {
targetJoint = this.options.targetJoint;
}
position = {};
if (this.options.target) {
targetPosition = this.adapter.offset(this.options.target);
targetDimensions = this.adapter.dimensions(this.options.target);
position = targetPosition;
if (targetJoint.right) {
unwrappedTarget = this.adapter.unwrap(this.options.target);
if (unwrappedTarget.getBoundingClientRect != null) {
position.left = unwrappedTarget.getBoundingClientRect().right + ((_ref = window.pageXOffset) != null ? _ref : document.body.scrollLeft);
} else {
position.left += targetDimensions.width;
}
} else if (targetJoint.center) {
position.left += Math.round(targetDimensions.width / 2);
}
if (targetJoint.bottom) {
position.top += targetDimensions.height;
} else if (targetJoint.middle) {
position.top += Math.round(targetDimensions.height / 2);
}
if (this.options.borderWidth) {
if (this.options.tipJoint.left) {
position.left += this.options.borderWidth;
}
if (this.options.tipJoint.right) {
position.left -= this.options.borderWidth;
}
if (this.options.tipJoint.top) {
position.top += this.options.borderWidth;
} else if (this.options.tipJoint.bottom) {
position.top -= this.options.borderWidth;
}
}
} else {
if (this.initialMousePosition) {
position = {
top: this.initialMousePosition.y,
left: this.initialMousePosition.x
};
} else {
position = {
top: mousePosition.y,
left: mousePosition.x
};
}
}
if (this.options.autoOffset) {
stemLength = this.options.stem ? this.options.stemLength : 0;
offsetDistance = stemLength && this.options.fixed ? 2 : 10;
additionalHorizontal = tipJoint.middle && !this.options.fixed ? 15 : 0;
additionalVertical = tipJoint.center && !this.options.fixed ? 15 : 0;
if (tipJoint.right) {
position.left -= offsetDistance + additionalHorizontal;
} else if (tipJoint.left) {
position.left += offsetDistance + additionalHorizontal;
}
if (tipJoint.bottom) {
position.top -= offsetDistance + additionalVertical;
} else if (tipJoint.top) {
position.top += offsetDistance + additionalVertical;
}
if (stemLength) {
if (stem == null) {
stem = this.options.stem;
}
if (stem.right) {
position.left -= stemLength;
} else if (stem.left) {
position.left += stemLength;
}
if (stem.bottom) {
position.top -= stemLength;
} else if (stem.top) {
position.top += stemLength;
}
}
}
position.left += this.options.offset[0];
position.top += this.options.offset[1];
if (tipJoint.right) {
position.left -= this.dimensions.width;
} else if (tipJoint.center) {
position.left -= Math.round(this.dimensions.width / 2);
}
if (tipJoint.bottom) {
position.top -= this.dimensions.height;
} else if (tipJoint.middle) {
position.top -= Math.round(this.dimensions.height / 2);
}
return position;
};
Opentip.prototype._ensureViewportContainment = function(position) {
var needsRepositioning, newSticksOut, originals, revertedX, revertedY, scrollOffset, stem, sticksOut, targetJoint, tipJoint, viewportDimensions, viewportPosition;
stem = this.options.stem;
originals = {
position: position,
stem: stem
};
if (!(this.visible && position)) {
return originals;
}
sticksOut = this._sticksOut(position);
if (!(sticksOut[0] || sticksOut[1])) {
return originals;
}
tipJoint = new Opentip.Joint(this.options.tipJoint);
if (this.options.targetJoint) {
targetJoint = new Opentip.Joint(this.options.targetJoint);
}
scrollOffset = this.adapter.scrollOffset();
viewportDimensions = this.adapter.viewportDimensions();
viewportPosition = [position.left - scrollOffset[0], position.top - scrollOffset[1]];
needsRepositioning = false;
if (viewportDimensions.width >= this.dimensions.width) {
if (sticksOut[0]) {
needsRepositioning = true;
switch (sticksOut[0]) {
case this.STICKS_OUT_LEFT:
tipJoint.setHorizontal("left");
if (this.options.targetJoint) {
targetJoint.setHorizontal("right");
}
break;
case this.STICKS_OUT_RIGHT:
tipJoint.setHorizontal("right");
if (this.options.targetJoint) {
targetJoint.setHorizontal("left");
}
}
}
}
if (viewportDimensions.height >= this.dimensions.height) {
if (sticksOut[1]) {
needsRepositioning = true;
switch (sticksOut[1]) {
case this.STICKS_OUT_TOP:
tipJoint.setVertical("top");
if (this.options.targetJoint) {
targetJoint.setVertical("bottom");
}
break;
case this.STICKS_OUT_BOTTOM:
tipJoint.setVertical("bottom");
if (this.options.targetJoint) {
targetJoint.setVertical("top");
}
}
}
}
if (!needsRepositioning) {
return originals;
}
if (this.options.stem) {
stem = tipJoint;
}
position = this.getPosition(tipJoint, targetJoint, stem);
newSticksOut = this._sticksOut(position);
revertedX = false;
revertedY = false;
if (newSticksOut[0] && (newSticksOut[0] !== sticksOut[0])) {
revertedX = true;
tipJoint.setHorizontal(this.options.tipJoint.horizontal);
if (this.options.targetJoint) {
targetJoint.setHorizontal(this.options.targetJoint.horizontal);
}
}
if (newSticksOut[1] && (newSticksOut[1] !== sticksOut[1])) {
revertedY = true;
tipJoint.setVertical(this.options.tipJoint.vertical);
if (this.options.targetJoint) {
targetJoint.setVertical(this.options.targetJoint.vertical);
}
}
if (revertedX && revertedY) {
return originals;
}
if (revertedX || revertedY) {
if (this.options.stem) {
stem = tipJoint;
}
position = this.getPosition(tipJoint, targetJoint, stem);
}
return {
position: position,
stem: stem
};
};
Opentip.prototype._sticksOut = function(position) {
var positionOffset, scrollOffset, sticksOut, viewportDimensions;
scrollOffset = this.adapter.scrollOffset();
viewportDimensions = this.adapter.viewportDimensions();
positionOffset = [position.left - scrollOffset[0], position.top - scrollOffset[1]];
sticksOut = [false, false];
if (positionOffset[0] < 0) {
sticksOut[0] = this.STICKS_OUT_LEFT;
} else if (positionOffset[0] + this.dimensions.width > viewportDimensions.width) {
sticksOut[0] = this.STICKS_OUT_RIGHT;
}
if (positionOffset[1] < 0) {
sticksOut[1] = this.STICKS_OUT_TOP;
} else if (positionOffset[1] + this.dimensions.height > viewportDimensions.height) {
sticksOut[1] = this.STICKS_OUT_BOTTOM;
}
return sticksOut;
};
Opentip.prototype._draw = function() {
var backgroundCanvas, bulge, canvasDimensions, canvasPosition, closeButton, closeButtonInner, closeButtonOuter, ctx, drawCorner, drawLine, hb, position, stemBase, stemLength, _i, _len, _ref, _ref1, _ref2,
_this = this;
if (!(this.backgroundCanvas && this.redraw)) {
return;
}
this.debug("Drawing background.");
this.redraw = false;
if (this.currentStem) {
_ref = ["top", "right", "bottom", "left"];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
position = _ref[_i];
this.adapter.removeClass(this.container, "stem-" + position);
}
this.adapter.addClass(this.container, "stem-" + this.currentStem.horizontal);
this.adapter.addClass(this.container, "stem-" + this.currentStem.vertical);
}
closeButtonInner = [0, 0];
closeButtonOuter = [0, 0];
if (__indexOf.call(this.options.hideTriggers, "closeButton") >= 0) {
closeButton = new Opentip.Joint(((_ref1 = this.currentStem) != null ? _ref1.toString() : void 0) === "top right" ? "top left" : "top right");
closeButtonInner = [this.options.closeButtonRadius + this.options.closeButtonOffset[0], this.options.closeButtonRadius + this.options.closeButtonOffset[1]];
closeButtonOuter = [this.options.closeButtonRadius - this.options.closeButtonOffset[0], this.options.closeButtonRadius - this.options.closeButtonOffset[1]];
}
canvasDimensions = this.adapter.clone(this.dimensions);
canvasPosition = [0, 0];
if (this.options.borderWidth) {
canvasDimensions.width += this.options.borderWidth * 2;
canvasDimensions.height += this.options.borderWidth * 2;
canvasPosition[0] -= this.options.borderWidth;
canvasPosition[1] -= this.options.borderWidth;
}
if (this.options.shadow) {
canvasDimensions.width += this.options.shadowBlur * 2;
canvasDimensions.width += Math.max(0, this.options.shadowOffset[0] - this.options.shadowBlur * 2);
canvasDimensions.height += this.options.shadowBlur * 2;
canvasDimensions.height += Math.max(0, this.options.shadowOffset[1] - this.options.shadowBlur * 2);
canvasPosition[0] -= Math.max(0, this.options.shadowBlur - this.options.shadowOffset[0]);
canvasPosition[1] -= Math.max(0, this.options.shadowBlur - this.options.shadowOffset[1]);
}
bulge = {
left: 0,
right: 0,
top: 0,
bottom: 0
};
if (this.currentStem) {
if (this.currentStem.left) {
bulge.left = this.options.stemLength;
} else if (this.currentStem.right) {
bulge.right = this.options.stemLength;
}
if (this.currentStem.top) {
bulge.top = this.options.stemLength;
} else if (this.currentStem.bottom) {
bulge.bottom = this.options.stemLength;
}
}
if (closeButton) {
if (closeButton.left) {
bulge.left = Math.max(bulge.left, closeButtonOuter[0]);
} else if (closeButton.right) {
bulge.right = Math.max(bulge.right, closeButtonOuter[0]);
}
if (closeButton.top) {
bulge.top = Math.max(bulge.top, closeButtonOuter[1]);
} else if (closeButton.bottom) {
bulge.bottom = Math.max(bulge.bottom, closeButtonOuter[1]);
}
}
canvasDimensions.width += bulge.left + bulge.right;
canvasDimensions.height += bulge.top + bulge.bottom;
canvasPosition[0] -= bulge.left;
canvasPosition[1] -= bulge.top;
if (this.currentStem && this.options.borderWidth) {
_ref2 = this._getPathStemMeasures(this.options.stemBase, this.options.stemLength, this.options.borderWidth), stemLength = _ref2.stemLength, stemBase = _ref2.stemBase;
}
backgroundCanvas = this.adapter.unwrap(this.backgroundCanvas);
backgroundCanvas.width = canvasDimensions.width;
backgroundCanvas.height = canvasDimensions.height;
this.adapter.css(this.backgroundCanvas, {
width: "" + backgroundCanvas.width + "px",
height: "" + backgroundCanvas.height + "px",
left: "" + canvasPosition[0] + "px",
top: "" + canvasPosition[1] + "px"
});
ctx = backgroundCanvas.getContext("2d");
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.clearRect(0, 0, backgroundCanvas.width, backgroundCanvas.height);
ctx.beginPath();
ctx.fillStyle = this._getColor(ctx, this.dimensions, this.options.background, this.options.backgroundGradientHorizontal);
ctx.lineJoin = "miter";
ctx.miterLimit = 500;
hb = this.options.borderWidth / 2;
if (this.options.borderWidth) {
ctx.strokeStyle = this.options.borderColor;
ctx.lineWidth = this.options.borderWidth;
} else {
stemLength = this.options.stemLength;
stemBase = this.options.stemBase;
}
if (stemBase == null) {
stemBase = 0;
}
drawLine = function(length, stem, first) {
if (first) {
ctx.moveTo(Math.max(stemBase, _this.options.borderRadius, closeButtonInner[0]) + 1 - hb, -hb);
}
if (stem) {
ctx.lineTo(length / 2 - stemBase / 2, -hb);
ctx.lineTo(length / 2, -stemLength - hb);
return ctx.lineTo(length / 2 + stemBase / 2, -hb);
}
};
drawCorner = function(stem, closeButton, i) {
var angle1, angle2, innerWidth, offset;
if (stem) {
ctx.lineTo(-stemBase + hb, 0 - hb);
ctx.lineTo(stemLength + hb, -stemLength - hb);
return ctx.lineTo(hb, stemBase - hb);
} else if (closeButton) {
offset = _this.options.closeButtonOffset;
innerWidth = closeButtonInner[0];
if (i % 2 !== 0) {
offset = [offset[1], offset[0]];
innerWidth = closeButtonInner[1];
}
angle1 = Math.acos(offset[1] / _this.options.closeButtonRadius);
angle2 = Math.acos(offset[0] / _this.options.closeButtonRadius);
ctx.lineTo(-innerWidth + hb, -hb);
return ctx.arc(hb - offset[0], -hb + offset[1], _this.options.closeButtonRadius, -(Math.PI / 2 + angle1), angle2, false);
} else {
ctx.lineTo(-_this.options.borderRadius + hb, -hb);
return ctx.quadraticCurveTo(hb, -hb, hb, _this.options.borderRadius - hb);
}
};
ctx.translate(-canvasPosition[0], -canvasPosition[1]);
ctx.save();
(function() {
var cornerStem, i, lineLength, lineStem, positionIdx, positionX, positionY, rotation, _j, _ref3, _results;
_results = [];
for (i = _j = 0, _ref3 = Opentip.positions.length / 2; 0 <= _ref3 ? _j < _ref3 : _j > _ref3; i = 0 <= _ref3 ? ++_j : --_j) {
positionIdx = i * 2;
positionX = i === 0 || i === 3 ? 0 : _this.dimensions.width;
positionY = i < 2 ? 0 : _this.dimensions.height;
rotation = (Math.PI / 2) * i;
lineLength = i % 2 === 0 ? _this.dimensions.width : _this.dimensions.height;
lineStem = new Opentip.Joint(Opentip.positions[positionIdx]);
cornerStem = new Opentip.Joint(Opentip.positions[positionIdx + 1]);
ctx.save();
ctx.translate(positionX, positionY);
ctx.rotate(rotation);
drawLine(lineLength, lineStem.eql(_this.currentStem), i === 0);
ctx.translate(lineLength, 0);
drawCorner(cornerStem.eql(_this.currentStem), cornerStem.eql(closeButton), i);
_results.push(ctx.restore());
}
return _results;
})();
ctx.closePath();
ctx.save();
if (this.options.shadow) {
ctx.shadowColor = this.options.shadowColor;
ctx.shadowBlur = this.options.shadowBlur;
ctx.shadowOffsetX = this.options.shadowOffset[0];
ctx.shadowOffsetY = this.options.shadowOffset[1];
}
ctx.fill();
ctx.restore();
if (this.options.borderWidth) {
ctx.stroke();
}
ctx.restore();
if (closeButton) {
return (function() {
var crossCenter, crossHeight, crossWidth, hcs, linkCenter;
crossWidth = crossHeight = _this.options.closeButtonRadius * 2;
if (closeButton.toString() === "top right") {
linkCenter = [_this.dimensions.width - _this.options.closeButtonOffset[0], _this.options.closeButtonOffset[1]];
crossCenter = [linkCenter[0] + hb, linkCenter[1] - hb];
} else {
linkCenter = [_this.options.closeButtonOffset[0], _this.options.closeButtonOffset[1]];
crossCenter = [linkCenter[0] - hb, linkCenter[1] - hb];
}
ctx.translate(crossCenter[0], crossCenter[1]);
hcs = _this.options.closeButtonCrossSize / 2;
ctx.save();
ctx.beginPath();
ctx.strokeStyle = _this.options.closeButtonCrossColor;
ctx.lineWidth = _this.options.closeButtonCrossLineWidth;
ctx.lineCap = "round";
ctx.moveTo(-hcs, -hcs);
ctx.lineTo(hcs, hcs);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(hcs, -hcs);
ctx.lineTo(-hcs, hcs);
ctx.stroke();
ctx.restore();
return _this.adapter.css(_this.closeButtonElement, {
left: "" + (linkCenter[0] - hcs - _this.options.closeButtonLinkOverscan) + "px",
top: "" + (linkCenter[1] - hcs - _this.options.closeButtonLinkOverscan) + "px",
width: "" + (_this.options.closeButtonCrossSize + _this.options.closeButtonLinkOverscan * 2) + "px",
height: "" + (_this.options.closeButtonCrossSize + _this.options.closeButtonLinkOverscan * 2) + "px"
});
})();
}
};
Opentip.prototype._getPathStemMeasures = function(outerStemBase, outerStemLength, borderWidth) {
var angle, distanceBetweenTips, halfAngle, hb, rhombusSide, stemBase, stemLength;
hb = borderWidth / 2;
halfAngle = Math.atan((outerStemBase / 2) / outerStemLength);
angle = halfAngle * 2;
rhombusSide = hb / Math.sin(angle);
distanceBetweenTips = 2 * rhombusSide * Math.cos(halfAngle);
stemLength = hb + outerStemLength - distanceBetweenTips;
if (stemLength < 0) {
throw new Error("Sorry but your stemLength / stemBase ratio is strange.");
}
stemBase = (Math.tan(halfAngle) * stemLength) * 2;
return {
stemLength: stemLength,
stemBase: stemBase
};
};
Opentip.prototype._getColor = function(ctx, dimensions, color, horizontal) {
var colorStop, gradient, i, _i, _len;
if (horizontal == null) {
horizontal = false;
}
if (typeof color === "string") {
return color;
}
if (horizontal) {
gradient = ctx.createLinearGradient(0, 0, dimensions.width, 0);
} else {
gradient = ctx.createLinearGradient(0, 0, 0, dimensions.height);
}
for (i = _i = 0, _len = color.length; _i < _len; i = ++_i) {
colorStop = color[i];
gradient.addColorStop(colorStop[0], colorStop[1]);
}
return gradient;
};
Opentip.prototype._searchAndActivateCloseButtons = function() {
var element, _i, _len, _ref;
_ref = this.adapter.findAll(this.container, "." + this["class"].close);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
element = _ref[_i];
this.hideTriggers.push({
element: this.adapter.wrap(element),
event: "click"
});
}
if (this.currentObservers.showing) {
this._setupObservers("-showing", "showing");
}
if (this.currentObservers.visible) {
return this._setupObservers("-visible", "visible");
}
};
Opentip.prototype._activateFirstInput = function() {
var input;
input = this.adapter.unwrap(this.adapter.find(this.container, "input, textarea"));
return input != null ? typeof input.focus === "function" ? input.focus() : void 0 : void 0;
};
Opentip.prototype._followMousePosition = function() {
if (!this.options.fixed) {
return Opentip._observeMousePosition(this.bound.reposition);
}
};
Opentip.prototype._stopFollowingMousePosition = function() {
if (!this.options.fixed) {
return Opentip._stopObservingMousePosition(this.bound.reposition);
}
};
Opentip.prototype._clearShowTimeout = function() {
return clearTimeout(this._showTimeoutId);
};
Opentip.prototype._clearHideTimeout = function() {
return clearTimeout(this._hideTimeoutId);
};
Opentip.prototype._clearTimeouts = function() {
clearTimeout(this._visibilityStateTimeoutId);
this._clearShowTimeout();
return this._clearHideTimeout();
};
Opentip.prototype._triggerElementExists = function() {
var el;
el = this.adapter.unwrap(this.triggerElement);
while (el.parentNode) {
if (el.parentNode.tagName === "BODY") {
return true;
}
el = el.parentNode;
}
return false;
};
Opentip.prototype._loadAjax = function() {
var _this = this;
if (this.loading) {
return;
}
this.loaded = false;
this.loading = true;
this.adapter.addClass(this.container, this["class"].loading);
this.setContent("");
this.debug("Loading content from " + this.options.ajax);
return this.adapter.ajax({
url: this.options.ajax,
method: this.options.ajaxMethod,
onSuccess: function(responseText) {
_this.debug("Loading successful.");
_this.adapter.removeClass(_this.container, _this["class"].loading);
return _this.setContent(responseText);
},
onError: function(error) {
var message;
message = _this.options.ajaxErrorMessage;
_this.debug(message, error);
_this.setContent(message);
return _this.adapter.addClass(_this.container, _this["class"].ajaxError);
},
onComplete: function() {
_this.adapter.removeClass(_this.container, _this["class"].loading);
_this.loading = false;
_this.loaded = true;
_this._searchAndActivateCloseButtons();
_this._activateFirstInput();
return _this.reposition();
}
});
};
Opentip.prototype._ensureTriggerElement = function() {
if (!this._triggerElementExists()) {
this.deactivate();
return this._stopEnsureTriggerElement();
}
};
Opentip.prototype._ensureTriggerElementInterval = 1000;
Opentip.prototype._startEnsureTriggerElement = function() {
var _this = this;
return this._ensureTriggerElementTimeoutId = setInterval((function() {
return _this._ensureTriggerElement();
}), this._ensureTriggerElementInterval);
};
Opentip.prototype._stopEnsureTriggerElement = function() {
return clearInterval(this._ensureTriggerElementTimeoutId);
};
return Opentip;
})();
vendors = ["khtml", "ms", "o", "moz", "webkit"];
Opentip.prototype.setCss3Style = function(element, styles) {
var prop, value, vendor, vendorProp, _results;
element = this.adapter.unwrap(element);
_results = [];
for (prop in styles) {
if (!__hasProp.call(styles, prop)) continue;
value = styles[prop];
if (element.style[prop] != null) {
_results.push(element.style[prop] = value);
} else {
_results.push((function() {
var _i, _len, _results1;
_results1 = [];
for (_i = 0, _len = vendors.length; _i < _len; _i++) {
vendor = vendors[_i];
vendorProp = "" + (this.ucfirst(vendor)) + (this.ucfirst(prop));
if (element.style[vendorProp] != null) {
_results1.push(element.style[vendorProp] = value);
} else {
_results1.push(void 0);
}
}
return _results1;
}).call(this));
}
}
return _results;
};
Opentip.prototype.defer = function(func) {
return setTimeout(func, 0);
};
Opentip.prototype.setTimeout = function(func, seconds) {
return setTimeout(func, seconds ? seconds * 1000 : 0);
};
Opentip.prototype.ucfirst = function(string) {
if (string == null) {
return "";
}
return string.charAt(0).toUpperCase() + string.slice(1);
};
Opentip.prototype.dasherize = function(string) {
return string.replace(/([A-Z])/g, function(_, character) {
return "-" + (character.toLowerCase());
});
};
mousePositionObservers = [];
mousePosition = {
x: 0,
y: 0
};
mouseMoved = function(e) {
var observer, _i, _len, _results;
mousePosition = Opentip.adapter.mousePosition(e);
_results = [];
for (_i = 0, _len = mousePositionObservers.length; _i < _len; _i++) {
observer = mousePositionObservers[_i];
_results.push(observer());
}
return _results;
};
Opentip.followMousePosition = function() {
return Opentip.adapter.observe(document.body, "mousemove", mouseMoved);
};
Opentip._observeMousePosition = function(observer) {
return mousePositionObservers.push(observer);
};
Opentip._stopObservingMousePosition = function(removeObserver) {
var observer;
return mousePositionObservers = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = mousePositionObservers.length; _i < _len; _i++) {
observer = mousePositionObservers[_i];
if (observer !== removeObserver) {
_results.push(observer);
}
}
return _results;
})();
};
Opentip.Joint = (function() {
function Joint(pointerString) {
if (pointerString == null) {
return;
}
if (pointerString instanceof Opentip.Joint) {
pointerString = pointerString.toString();
}
this.set(pointerString);
this;
}
Joint.prototype.set = function(string) {
string = string.toLowerCase();
this.setHorizontal(string);
this.setVertical(string);
return this;
};
Joint.prototype.setHorizontal = function(string) {
var i, valid, _i, _j, _len, _len1, _results;
valid = ["left", "center", "right"];
for (_i = 0, _len = valid.length; _i < _len; _i++) {
i = valid[_i];
if (~string.indexOf(i)) {
this.horizontal = i.toLowerCase();
}
}
if (this.horizontal == null) {
this.horizontal = "center";
}
_results = [];
for (_j = 0, _len1 = valid.length; _j < _len1; _j++) {
i = valid[_j];
_results.push(this[i] = this.horizontal === i ? i : void 0);
}
return _results;
};
Joint.prototype.setVertical = function(string) {
var i, valid, _i, _j, _len, _len1, _results;
valid = ["top", "middle", "bottom"];
for (_i = 0, _len = valid.length; _i < _len; _i++) {
i = valid[_i];
if (~string.indexOf(i)) {
this.vertical = i.toLowerCase();
}
}
if (this.vertical == null) {
this.vertical = "middle";
}
_results = [];
for (_j = 0, _len1 = valid.length; _j < _len1; _j++) {
i = valid[_j];
_results.push(this[i] = this.vertical === i ? i : void 0);
}
return _results;
};
Joint.prototype.eql = function(pointer) {
return (pointer != null) && this.horizontal === pointer.horizontal && this.vertical === pointer.vertical;
};
Joint.prototype.flip = function() {
var flippedIndex, positionIdx;
positionIdx = Opentip.position[this.toString(true)];
flippedIndex = (positionIdx + 4) % 8;
this.set(Opentip.positions[flippedIndex]);
return this;
};
Joint.prototype.toString = function(camelized) {
var horizontal, vertical;
if (camelized == null) {
camelized = false;
}
vertical = this.vertical === "middle" ? "" : this.vertical;
horizontal = this.horizontal === "center" ? "" : this.horizontal;
if (vertical && horizontal) {
if (camelized) {
horizontal = Opentip.prototype.ucfirst(horizontal);
} else {
horizontal = " " + horizontal;
}
}
return "" + vertical + horizontal;
};
return Joint;
})();
Opentip.prototype._positionsEqual = function(posA, posB) {
return (posA != null) && (posB != null) && posA.left === posB.left && posA.top === posB.top;
};
Opentip.prototype._dimensionsEqual = function(dimA, dimB) {
return (dimA != null) && (dimB != null) && dimA.width === dimB.width && dimA.height === dimB.height;
};
Opentip.prototype.debug = function() {
var args;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (Opentip.debug && ((typeof console !== "undefined" && console !== null ? console.debug : void 0) != null)) {
args.unshift("#" + this.id + " |");
return console.debug.apply(console, args);
}
};
Opentip.findElements = function() {
var adapter, content, element, optionName, optionValue, options, _i, _len, _ref, _results;
adapter = Opentip.adapter;
_ref = adapter.findAll(document.body, "[data-ot]");
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
element = _ref[_i];
options = {};
content = adapter.data(element, "ot");
if (content === "" || content === "true" || content === "yes") {
content = adapter.attr(element, "title");
adapter.attr(element, "title", "");
}
content = content || "";
for (optionName in Opentip.styles.standard) {
optionValue = adapter.data(element, "ot" + (Opentip.prototype.ucfirst(optionName)));
if (optionValue != null) {
if (optionValue === "yes" || optionValue === "true" || optionValue === "on") {
optionValue = true;
} else if (optionValue === "no" || optionValue === "false" || optionValue === "off") {
optionValue = false;
}
options[optionName] = optionValue;
}
}
_results.push(new Opentip(element, content, options));
}
return _results;
};
Opentip.version = "2.4.6";
Opentip.debug = false;
Opentip.lastId = 0;
Opentip.lastZIndex = 100;
Opentip.tips = [];
Opentip._abortShowingGroup = function(group, originatingOpentip) {
var opentip, _i, _len, _ref, _results;
_ref = Opentip.tips;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
opentip = _ref[_i];
if (opentip !== originatingOpentip && opentip.options.group === group) {
_results.push(opentip._abortShowing());
} else {
_results.push(void 0);
}
}
return _results;
};
Opentip._hideGroup = function(group, originatingOpentip) {
var opentip, _i, _len, _ref, _results;
_ref = Opentip.tips;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
opentip = _ref[_i];
if (opentip !== originatingOpentip && opentip.options.group === group) {
_results.push(opentip.hide());
} else {
_results.push(void 0);
}
}
return _results;
};
Opentip.adapters = {};
Opentip.adapter = null;
firstAdapter = true;
Opentip.addAdapter = function(adapter) {
Opentip.adapters[adapter.name] = adapter;
if (firstAdapter) {
Opentip.adapter = adapter;
adapter.domReady(Opentip.findElements);
adapter.domReady(Opentip.followMousePosition);
return firstAdapter = false;
}
};
Opentip.positions = ["top", "topRight", "right", "bottomRight", "bottom", "bottomLeft", "left", "topLeft"];
Opentip.position = {};
_ref = Opentip.positions;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
position = _ref[i];
Opentip.position[position] = i;
}
Opentip.styles = {
standard: {
"extends": null,
title: void 0,
escapeTitle: true,
escapeContent: false,
className: "standard",
stem: true,
delay: null,
hideDelay: 0.1,
fixed: false,
showOn: "mouseover",
hideTrigger: "trigger",
hideTriggers: [],
hideOn: null,
removeElementsOnHide: false,
offset: [0, 0],
containInViewport: true,
autoOffset: true,
showEffect: "appear",
hideEffect: "fade",
showEffectDuration: 0.3,
hideEffectDuration: 0.2,
stemLength: 5,
stemBase: 8,
tipJoint: "top left",
target: null,
targetJoint: null,
cache: true,
ajax: false,
ajaxMethod: "GET",
ajaxErrorMessage: "There was a problem downloading the content.",
group: null,
style: null,
background: "#fff18f",
backgroundGradientHorizontal: false,
closeButtonOffset: [5, 5],
closeButtonRadius: 7,
closeButtonCrossSize: 4,
closeButtonCrossColor: "#d2c35b",
closeButtonCrossLineWidth: 1.5,
closeButtonLinkOverscan: 6,
borderRadius: 5,
borderWidth: 1,
borderColor: "#f2e37b",
shadow: true,
shadowBlur: 10,
shadowOffset: [3, 3],
shadowColor: "rgba(0, 0, 0, 0.1)"
},
glass: {
"extends": "standard",
className: "glass",
background: [[0, "rgba(252, 252, 252, 0.8)"], [0.5, "rgba(255, 255, 255, 0.8)"], [0.5, "rgba(250, 250, 250, 0.9)"], [1, "rgba(245, 245, 245, 0.9)"]],
borderColor: "#eee",
closeButtonCrossColor: "rgba(0, 0, 0, 0.2)",
borderRadius: 15,
closeButtonRadius: 10,
closeButtonOffset: [8, 8]
},
dark: {
"extends": "standard",
className: "dark",
borderRadius: 13,
borderColor: "#444",
closeButtonCrossColor: "rgba(240, 240, 240, 1)",
shadowColor: "rgba(0, 0, 0, 0.3)",
shadowOffset: [2, 2],
background: [[0, "rgba(30, 30, 30, 0.7)"], [0.5, "rgba(30, 30, 30, 0.8)"], [0.5, "rgba(10, 10, 10, 0.8)"], [1, "rgba(10, 10, 10, 0.9)"]]
},
alert: {
"extends": "standard",
className: "alert",
borderRadius: 1,
borderColor: "#AE0D11",
closeButtonCrossColor: "rgba(255, 255, 255, 1)",
shadowColor: "rgba(0, 0, 0, 0.3)",
shadowOffset: [2, 2],
background: [[0, "rgba(203, 15, 19, 0.7)"], [0.5, "rgba(203, 15, 19, 0.8)"], [0.5, "rgba(189, 14, 18, 0.8)"], [1, "rgba(179, 14, 17, 0.9)"]]
}
};
Opentip.defaultStyle = "standard";
if (typeof module !== "undefined" && module !== null) {
module.exports = Opentip;
} else {
window.Opentip = Opentip;
}
// Generated by CoffeeScript 1.4.0
var __slice = [].slice;
(function($) {
var Adapter;
$.fn.opentip = function(content, title, options) {
return new Opentip(this, content, title, options);
};
Adapter = (function() {
function Adapter() {}
Adapter.prototype.name = "jquery";
Adapter.prototype.domReady = function(callback) {
return $(callback);
};
Adapter.prototype.create = function(html) {
return $(html);
};
Adapter.prototype.wrap = function(element) {
element = $(element);
if (element.length > 1) {
throw new Error("Multiple elements provided.");
}
return element;
};
Adapter.prototype.unwrap = function(element) {
return $(element)[0];
};
Adapter.prototype.tagName = function(element) {
return this.unwrap(element).tagName;
};
Adapter.prototype.attr = function() {
var args, element, _ref;
element = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
return (_ref = $(element)).attr.apply(_ref, args);
};
Adapter.prototype.data = function() {
var args, element, _ref;
element = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
return (_ref = $(element)).data.apply(_ref, args);
};
Adapter.prototype.find = function(element, selector) {
return $(element).find(selector).get(0);
};
Adapter.prototype.findAll = function(element, selector) {
return $(element).find(selector);
};
Adapter.prototype.update = function(element, content, escape) {
element = $(element);
if (escape) {
return element.text(content);
} else {
return element.html(content);
}
};
Adapter.prototype.append = function(element, child) {
return $(element).append(child);
};
Adapter.prototype.remove = function(element) {
return $(element).remove();
};
Adapter.prototype.addClass = function(element, className) {
return $(element).addClass(className);
};
Adapter.prototype.removeClass = function(element, className) {
return $(element).removeClass(className);
};
Adapter.prototype.css = function(element, properties) {
return $(element).css(properties);
};
Adapter.prototype.dimensions = function(element) {
return {
width: $(element).outerWidth(),
height: $(element).outerHeight()
};
};
Adapter.prototype.scrollOffset = function() {
return [window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop];
};
Adapter.prototype.viewportDimensions = function() {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight
};
};
Adapter.prototype.mousePosition = function(e) {
if (e == null) {
return null;
}
return {
x: e.pageX,
y: e.pageY
};
};
Adapter.prototype.offset = function(element) {
var offset;
offset = $(element).offset();
return {
left: offset.left,
top: offset.top
};
};
Adapter.prototype.observe = function(element, eventName, observer) {
return $(element).bind(eventName, observer);
};
Adapter.prototype.stopObserving = function(element, eventName, observer) {
return $(element).unbind(eventName, observer);
};
Adapter.prototype.ajax = function(options) {
var _ref, _ref1;
if (options.url == null) {
throw new Error("No url provided");
}
return $.ajax({
url: options.url,
type: (_ref = (_ref1 = options.method) != null ? _ref1.toUpperCase() : void 0) != null ? _ref : "GET"
}).done(function(content) {
return typeof options.onSuccess === "function" ? options.onSuccess(content) : void 0;
}).fail(function(request) {
return typeof options.onError === "function" ? options.onError("Server responded with status " + request.status) : void 0;
}).always(function() {
return typeof options.onComplete === "function" ? options.onComplete() : void 0;
});
};
Adapter.prototype.clone = function(object) {
return $.extend({}, object);
};
Adapter.prototype.extend = function() {
var sources, target;
target = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
return $.extend.apply($, [target].concat(__slice.call(sources)));
};
return Adapter;
})();
return Opentip.addAdapter(new Adapter);
})(jQuery);
// Modified by Matias Meno to work in IE8.
// I removed the line 312, as proposed by someone on the google forum.
// Copyright 2006 Google Inc.
//
// 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.
// Known Issues:
//
// * Patterns are not implemented.
// * Radial gradient are not implemented. The VML version of these look very
// different from the canvas one.
// * Clipping paths are not implemented.
// * Coordsize. The width and height attribute have higher priority than the
// width and height style values which isn't correct.
// * Painting mode isn't implemented.
// * Canvas width/height should is using content-box by default. IE in
// Quirks mode will draw the canvas using border-box. Either change your
// doctype to HTML5
// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
// or use Box Sizing Behavior from WebFX
// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
// * Non uniform scaling does not correctly scale strokes.
// * Optimize. There is always room for speed improvements.
// Only add this code if we do not already have a canvas implementation
if (!document.createElement('canvas').getContext) {
(function() {
// alias some functions to make (compiled) code shorter
var m = Math;
var mr = m.round;
var ms = m.sin;
var mc = m.cos;
var abs = m.abs;
var sqrt = m.sqrt;
// this is used for sub pixel precision
var Z = 10;
var Z2 = Z / 2;
/**
* This funtion is assigned to the