Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@atlassian/tipsy

Package Overview
Dependencies
Maintainers
16
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlassian/tipsy - npm Package Compare versions

Comparing version 1.2.0 to 1.3.0

.eslintrc

12

package.json
{
"name": "@atlassian/tipsy",
"version": "1.2.0",
"version": "1.3.0",
"description": "Atlassian fork of tipsy",
"browser": "src/javascripts/jquery.tipsy.js",
"main": "src/javascripts/jquery.tipsy.js",

@@ -10,2 +11,3 @@ "directories": {

"scripts": {
"fix": "prettier --write src/**/*",
"test": "echo \"Error: no test specified\" && exit 1"

@@ -25,3 +27,9 @@ },

},
"homepage": "https://github.com/atlassian/tipsy"
"homepage": "https://github.com/atlassian/tipsy",
"devDependencies": {
"eslint": "^5.2.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-prettier": "^2.6.2",
"prettier": "^1.13.7"
}
}

337

src/javascripts/jquery.tipsy.js
// tipsy, facebook style tooltips for jquery
// version 1.0.0a
// version 1.3.0
// (c) 2008-2010 jason frame [jason@onehackoranother.com]

@@ -10,14 +10,14 @@ // released under the MIT license

(function($) {
var liveBindingWarning = "To be compatible with jQuery 1.9 and higher,"
var liveBindingWarning = "To be compatible with jQuery 1.9 and higher,";
" You must pass a selector to tipsy's live argument." +
" For instance, `$(document).tipsy({live: 'a.live'});`";
" For instance, `$(document).tipsy({live: 'a.live'});`";
function maybeCall(thing, ctx) {
return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
};
return typeof thing == "function" ? thing.call(ctx) : thing;
}
function isElementInDOM(ele) {
var el = ele && ele.jquery ? ele.get(0) : ele;
return $.contains(document.documentElement, el);
};
var el = ele && ele.jquery ? ele.get(0) : ele;
return $.contains(document.documentElement, el);
}

@@ -28,4 +28,4 @@ var tipsyIDcounter = 0;

return "tipsyuid" + tipsyID;
};
}
function Tipsy(element, options) {

@@ -36,4 +36,4 @@ this.$element = $(element);

this.fixTitle();
};
}
Tipsy.prototype = {

@@ -49,7 +49,15 @@ show: function() {

var $tip = this.tip();
$tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
$tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
$tip.find(".tipsy-inner")[this.options.html ? "html" : "text"](
title
);
$tip[0].className = "tipsy"; // reset classname in case of dynamic gravity
$tip.remove()
.css({
top: 0,
left: 0,
visibility: "hidden",
display: "block"
})
.appendTo(document.body);

@@ -61,10 +69,13 @@ var that = this;

function tipOut() {
if (that.hoverState == 'in') return; // If field is still focused.
if (that.hoverState == "in") return; // If field is still focused.
that.hoverTooltip = false;
if (that.options.trigger != 'manual') {
var eventOut = that.options.trigger == 'hover' ? 'mouseleave.tipsy' : 'blur.tipsy';
if (that.options.trigger != "manual") {
var eventOut =
that.options.trigger == "hover"
? "mouseleave.tipsy"
: "blur.tipsy";
that.$element.trigger(eventOut);
}
}
if (this.options.hoverable) {

@@ -75,3 +86,5 @@ $tip.hover(tipOver, tipOut);

if (this.options.className) {
$tip.addClass(maybeCall(this.options.className, this.$element[0]));
$tip.addClass(
maybeCall(this.options.className, this.$element[0])
);
}

@@ -83,3 +96,3 @@

});
var tipCss = {};

@@ -91,6 +104,7 @@ var actualWidth = $tip[0].offsetWidth,

if (gravity.length === 2) {
if (gravity.charAt(1) === 'w') {
if (gravity.charAt(1) === "w") {
tipCss.left = pos.left + pos.width / 2 - 15;
} else {
tipCss.left = pos.left + pos.width / 2 - actualWidth + 15;
tipCss.left =
pos.left + pos.width / 2 - actualWidth + 15;
}

@@ -100,13 +114,15 @@ }

switch (gravity.charAt(0)) {
case 'n':
case "n":
// left could already be set if gravity is 'nw' or 'ne'
if (typeof tipCss.left === 'undefined') {
tipCss.left = pos.left + pos.width / 2 - actualWidth / 2;
if (typeof tipCss.left === "undefined") {
tipCss.left =
pos.left + pos.width / 2 - actualWidth / 2;
}
tipCss.top = pos.top + pos.height + this.options.offset;
break;
case 's':
case "s":
// left could already be set if gravity is 'sw' or 'se'
if (typeof tipCss.left === 'undefined') {
tipCss.left = pos.left + pos.width / 2 - actualWidth / 2;
if (typeof tipCss.left === "undefined") {
tipCss.left =
pos.left + pos.width / 2 - actualWidth / 2;

@@ -119,21 +135,36 @@ // We need to apply the left positioning and then recalculate the tooltip height

}
tipCss.top = pos.top - actualHeight - this.options.offset;
tipCss.top =
pos.top - actualHeight - this.options.offset;
break;
case 'e':
tipCss.left = pos.left - actualWidth - this.options.offset;
tipCss.top = pos.top + pos.height / 2 - actualHeight / 2;
case "e":
tipCss.left =
pos.left - actualWidth - this.options.offset;
tipCss.top =
pos.top + pos.height / 2 - actualHeight / 2;
break;
case 'w':
tipCss.left = pos.left + pos.width + this.options.offset;
tipCss.top = pos.top + pos.height / 2 - actualHeight / 2;
case "w":
tipCss.left =
pos.left + pos.width + this.options.offset;
tipCss.top =
pos.top + pos.height / 2 - actualHeight / 2;
break;
}
$tip.css(tipCss).addClass('tipsy-' + gravity);
$tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);
$tip.css(tipCss).addClass("tipsy-" + gravity);
$tip.find(".tipsy-arrow")[0].className =
"tipsy-arrow tipsy-arrow-" + gravity.charAt(0);
if (this.options.fade) {
$tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
$tip.stop()
.css({
opacity: 0,
display: "block",
visibility: "visible"
})
.animate({ opacity: this.options.opacity });
} else {
$tip.css({visibility: 'visible', opacity: this.options.opacity});
$tip.css({
visibility: "visible",
opacity: this.options.opacity
});
}

@@ -149,4 +180,4 @@

destroy: function(){
this.$element.removeData('tipsy');
destroy: function() {
this.$element.removeData("tipsy");

@@ -158,6 +189,6 @@ this.unbindHandlers();

unbindHandlers: function() {
if(this.options.live){
$(document).off('.tipsy', this.options.live);
if (this.options.live) {
$(document).off(".tipsy", this.options.live);
} else {
this.$element.off('.tipsy');
this.$element.off(".tipsy");
}

@@ -168,3 +199,7 @@ },

if (this.options.fade) {
this.tip().stop().fadeOut(function() { $(this).remove(); });
this.tip()
.stop()
.fadeOut(function() {
$(this).remove();
});
} else {

@@ -177,31 +212,45 @@ this.tip().remove();

},
fixTitle: function() {
var $e = this.$element;
if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
$e.attr('original-title', $e.attr('title') || '').removeAttr('title');
if (
$e.attr("title") ||
typeof $e.attr("original-title") != "string"
) {
$e.attr("original-title", $e.attr("title") || "").removeAttr(
"title"
);
}
},
getTitle: function() {
var title, $e = this.$element, o = this.options;
var title,
$e = this.$element,
o = this.options;
this.fixTitle();
var title, o = this.options;
if (typeof o.title == 'string') {
title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
} else if (typeof o.title == 'function') {
var title,
o = this.options;
if (typeof o.title == "string") {
title = $e.attr(
o.title == "title" ? "original-title" : o.title
);
} else if (typeof o.title == "function") {
title = o.title.call($e[0]);
}
title = ('' + title).replace(/(^\s*|\s*$)/, "");
title = ("" + title).replace(/(^\s*|\s*$)/, "");
return title || o.fallback;
},
tip: function() {
if (!this.$tip) {
this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>').attr("role","tooltip");
this.$tip.data('tipsy-pointee', this.$element[0]);
this.$tip = $('<div class="tipsy"></div>')
.html(
'<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>'
)
.attr("role", "tooltip");
this.$tip.data("tipsy-pointee", this.$element[0]);
}
return this.$tip;
},
validate: function() {

@@ -214,18 +263,23 @@ if (!this.$element[0].parentNode) {

},
enable: function() { this.enabled = true; },
disable: function() { this.enabled = false; },
toggleEnabled: function() { this.enabled = !this.enabled; }
enable: function() {
this.enabled = true;
},
disable: function() {
this.enabled = false;
},
toggleEnabled: function() {
this.enabled = !this.enabled;
}
};
$.fn.tipsy = function(options) {
if (options === true) {
return this.data('tipsy');
} else if (typeof options == 'string') {
var tipsy = this.data('tipsy');
return this.data("tipsy");
} else if (typeof options == "string") {
var tipsy = this.data("tipsy");
if (tipsy) tipsy[options]();
return this;
}
options = $.extend({}, $.fn.tipsy.defaults, options);

@@ -249,13 +303,13 @@ if (options.hoverable) {

function get(ele) {
var tipsy = $.data(ele, 'tipsy');
var tipsy = $.data(ele, "tipsy");
if (!tipsy) {
tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
$.data(ele, 'tipsy', tipsy);
$.data(ele, "tipsy", tipsy);
}
return tipsy;
}
function enter() {
var tipsy = get(this);
tipsy.hoverState = 'in';
tipsy.hoverState = "in";
if (options.delayIn == 0) {

@@ -266,3 +320,6 @@ tipsy.show();

setTimeout(function() {
if (tipsy.hoverState == 'in' && isElementInDOM(tipsy.$element)) {
if (
tipsy.hoverState == "in" &&
isElementInDOM(tipsy.$element)
) {
tipsy.show();

@@ -272,7 +329,7 @@ }

}
};
}
function leave() {
var tipsy = get(this);
tipsy.hoverState = 'out';
tipsy.hoverState = "out";
if (options.delayOut == 0) {

@@ -282,3 +339,3 @@ tipsy.hide();

setTimeout(function() {
if (tipsy.hoverState == 'out' && !tipsy.hoverTooltip) {
if (tipsy.hoverState == "out" && !tipsy.hoverTooltip) {
tipsy.hide();

@@ -288,24 +345,30 @@ }

}
};
if (!options.live) this.each(function() { get(this); });
if (options.trigger != 'manual') {
var eventIn = options.trigger == 'hover' ? 'mouseenter.tipsy focus.tipsy' : 'focus.tipsy',
eventOut = options.trigger == 'hover' ? 'mouseleave.tipsy blur.tipsy' : 'blur.tipsy';
}
if (!options.live)
this.each(function() {
get(this);
});
if (options.trigger != "manual") {
var eventIn =
options.trigger == "hover"
? "mouseenter.tipsy focus.tipsy"
: "focus.tipsy",
eventOut =
options.trigger == "hover"
? "mouseleave.tipsy blur.tipsy"
: "blur.tipsy";
if (options.live) {
$(document)
.on(eventIn, options.live, enter)
.on(eventOut, options.live, leave)
.on(eventOut, options.live, leave);
} else {
this
.on(eventIn, enter)
.on(eventOut, leave)
this.on(eventIn, enter).on(eventOut, leave);
}
}
return this;
};
$.fn.tipsy.defaults = {

@@ -317,4 +380,4 @@ aria: false,

fade: false,
fallback: '',
gravity: 'n',
fallback: "",
gravity: "n",
html: false,

@@ -325,15 +388,15 @@ live: false,

opacity: 0.8,
title: 'title',
trigger: 'hover'
title: "title",
trigger: "hover"
};
$.fn.tipsy.revalidate = function() {
$('.tipsy').each(function() {
var pointee = $.data(this, 'tipsy-pointee');
if (!pointee || !isElementInDOM(pointee)) {
$(this).remove();
}
});
$(".tipsy").each(function() {
var pointee = $.data(this, "tipsy-pointee");
if (!pointee || !isElementInDOM(pointee)) {
$(this).remove();
}
});
};
// Overwrite this method to provide options on a per-element basis.

@@ -346,11 +409,17 @@ // For example, you could store the gravity in a 'tipsy-gravity' attribute:

};
$.fn.tipsy.autoNS = function() {
return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
return $(this).offset().top >
$(document).scrollTop() + $(window).height() / 2
? "s"
: "n";
};
$.fn.tipsy.autoWE = function() {
return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
return $(this).offset().left >
$(document).scrollLeft() + $(window).width() / 2
? "e"
: "w";
};
/**

@@ -366,3 +435,3 @@ * yields a closure of the supplied parameters, producing a function that takes

* gravity. It will try to vary from this minimally, for example,
* if 'sw' is preferred and an element is near the right viewable
* if 'sw' is preferred and an element is near the right viewable
* region edge, but not the top edge, it will set the gravity for

@@ -372,18 +441,32 @@ * that element's tooltip to be 'se', preserving the southern

*/
$.fn.tipsy.autoBounds = function(margin, prefer) {
return function() {
var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},
boundTop = $(document).scrollTop() + margin,
boundLeft = $(document).scrollLeft() + margin,
$this = $(this);
$.fn.tipsy.autoBounds = function(margin, prefer) {
return function() {
var dir = {
ns: prefer[0],
ew: prefer.length > 1 ? prefer[1] : false
},
boundTop = $(document).scrollTop() + margin,
boundLeft = $(document).scrollLeft() + margin,
$this = $(this);
if ($this.offset().top < boundTop) dir.ns = 'n';
if ($this.offset().left < boundLeft) dir.ew = 'w';
if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';
if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';
if ($this.offset().top < boundTop) dir.ns = "n";
if ($this.offset().left < boundLeft) dir.ew = "w";
if (
$(window).width() +
$(document).scrollLeft() -
$this.offset().left <
margin
)
dir.ew = "e";
if (
$(window).height() +
$(document).scrollTop() -
$this.offset().top <
margin
)
dir.ns = "s";
return dir.ns + (dir.ew ? dir.ew : '');
}
};
return dir.ns + (dir.ew ? dir.ew : "");
};
};
})(jQuery);

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc