This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var a2a_config = a2a_config || {}; | |
a2a_config.vars = { | |
vars : ["menu_type", "static_server", "linkname", "linkurl", "linkname_escape", ["ssl", document.location.protocol != "http:" ? "https://static.addtoany.com/menu" : false], "show_title", "onclick", "num_services", "hide_embeds", "prioritize", "exclude_services", "custom_services", ["templates", {}], "orientation", ["track_links", false], ["track_links_key", ""], "awesm", "tracking_callback", "track_pub", "color_main", "color_bg", "color_border", "color_link_text", "color_link_text_hover", "color_arrow", | |
"color_arrow_hover", ["localize", "", 1], ["add_services", false, 1], "locale", "delay", "icon_color", "no_3p", "show_menu", "target"], | |
/** | |
* @return {undefined} | |
*/ | |
process : function() { | |
var tmp_keys = a2a_config.vars.vars; | |
/** @type {number} */ | |
var i = 0; | |
/** @type {string} */ | |
var name = "a2a_"; | |
var valuesLen = tmp_keys.length; | |
var key; | |
var value; | |
var val; | |
var l; | |
var b; | |
for (;i < valuesLen;i++) { | |
if (typeof tmp_keys[i] == "string") { | |
key = tmp_keys[i]; | |
value = window[name + key]; | |
/** @type {boolean} */ | |
l = false; | |
} else { | |
key = tmp_keys[i][0]; | |
value = window[name + key]; | |
val = tmp_keys[i][1]; | |
/** @type {boolean} */ | |
l = true; | |
b = tmp_keys[i][2]; | |
} | |
if (typeof value != "undefined" && value != null) { | |
a2a_config[key] = value; | |
if (!b) { | |
try { | |
delete window[name + key]; | |
} catch (h) { | |
/** @type {null} */ | |
window[name + key] = null; | |
} | |
} | |
} else { | |
if (l && !a2a_config[key]) { | |
a2a_config[key] = val; | |
} | |
} | |
} | |
} | |
}; | |
a2a_config.vars.process(); | |
a2a_config.static_server = a2a_config.static_server || (a2a_config.ssl ? a2a_config.ssl : "http://static.addtoany.com/menu"); | |
var a2a = a2a || { | |
total : 0, | |
kit_services : [], | |
icons_img_url : a2a_config.static_server + "/icons.33.png", | |
head_tag : document.getElementsByTagName("head")[0], | |
/** | |
* @return {?} | |
*/ | |
ieo : function() { | |
/** @type {number} */ | |
var ieo = -1; | |
/** @type {Element} */ | |
var blue = document.createElement("b"); | |
for (;blue.innerHTML = "\x3c!--[if gt IE " + ++ieo + "]>1<![endif]--\x3e", +blue.innerHTML;) { | |
} | |
/** | |
* @return {?} | |
*/ | |
a2a.ieo = function() { | |
return ieo; | |
}; | |
return ieo; | |
}, | |
quirks : document.compatMode && document.compatMode == "BackCompat" ? 1 : null, | |
has_touch : "ontouchend" in window, | |
has_pointer : navigator.msPointerEnabled, | |
fn_queue : [], | |
dom : { | |
isReady : false, | |
/** | |
* @param {Function} callback | |
* @return {undefined} | |
*/ | |
ready : function(callback) { | |
/** | |
* @return {?} | |
*/ | |
var ready = function() { | |
if (!document.body) { | |
return setTimeout(a2a.dom.ready(callback)); | |
} | |
callback(); | |
/** @type {boolean} */ | |
a2a.dom.isReady = true; | |
}; | |
/** | |
* @param {Event} e | |
* @return {undefined} | |
*/ | |
var completed = function(e) { | |
if (document.addEventListener || (e.type === "load" || document.readyState === "complete")) { | |
init(); | |
ready(); | |
} | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
var init = function() { | |
if (document.addEventListener) { | |
document.removeEventListener("DOMContentLoaded", completed, false); | |
window.removeEventListener("load", completed, false); | |
} else { | |
document.detachEvent("onreadystatechange", completed); | |
window.detachEvent("onload", completed); | |
} | |
}; | |
if (document.readyState === "complete") { | |
ready(); | |
} else { | |
if (document.addEventListener) { | |
document.addEventListener("DOMContentLoaded", completed, false); | |
window.addEventListener("load", completed, false); | |
} else { | |
document.attachEvent("onreadystatechange", completed); | |
window.attachEvent("onload", completed); | |
/** @type {boolean} */ | |
var top = false; | |
try { | |
/** @type {(Element|boolean)} */ | |
top = window.frameElement == null && document.documentElement; | |
} catch (d) { | |
} | |
if (top && top.doScroll) { | |
(function doScrollCheck() { | |
if (!a2a.dom.isReady) { | |
try { | |
top.doScroll("left"); | |
} catch (i) { | |
return setTimeout(doScrollCheck, 50); | |
} | |
init(); | |
ready(); | |
} | |
})(); | |
} | |
} | |
} | |
} | |
}, | |
/** | |
* @param {string} type | |
* @param {Object} opts | |
* @param {number} dataAndEvents | |
* @return {undefined} | |
*/ | |
init : function(type, opts, dataAndEvents) { | |
var options = a2a.c; | |
opts = opts || {}; | |
var d = {}; | |
/** @type {null} */ | |
var elem = null; | |
var ret; | |
var self = {}; | |
var p; | |
var image; | |
var i; | |
var classToRemove; | |
/** @type {string} */ | |
var origin = location.href; | |
/** | |
* @param {Object} config | |
* @param {Object} e | |
* @return {undefined} | |
*/ | |
var init = function(config, e) { | |
a2a.total++; | |
a2a.n = a2a.total; | |
/** @type {Object} */ | |
a2a["n" + a2a.n] = config; | |
var item = config.node = a2a.set_this_index(config.node); | |
/** @type {Element} */ | |
var main = document.createElement("div"); | |
var result; | |
var temp; | |
var name = a2a.getData(item)["a2a-title"]; | |
var opt_button = a2a.getData(item)["a2a-url"]; | |
if (!item) { | |
if (!a2a.c.show_menu) { | |
a2a.total--; | |
} | |
return; | |
} | |
if (config.linkname_escape) { | |
temp = a2a.getByClass("a2a_linkname_escape", item.parentNode)[0] || a2a.getByClass("a2a_linkname_escape", item.parentNode.parentNode)[0]; | |
if (temp) { | |
config.linkname = temp.innerHTML; | |
} | |
} | |
config.linkname = e.linkname = name || config.linkname; | |
config.linkurl = e.linkurl = opt_button || config.linkurl; | |
if (name) { | |
/** @type {boolean} */ | |
config.linkname_implicit = false; | |
} | |
if (opt_button) { | |
/** @type {boolean} */ | |
config.linkurl_implicit = false; | |
} | |
main.innerHTML = config.linkname; | |
result = main.childNodes[0]; | |
if (result) { | |
config.linkname = result.nodeValue; | |
} | |
delete main; | |
if (item.a2a_kit) { | |
a2a.kit(config, e); | |
} else { | |
a2a.button(config); | |
} | |
}; | |
a2a.make_once(type); | |
for (p in opts) { | |
options[p] = opts[p]; | |
} | |
for (p in options) { | |
d[p] = options[p]; | |
} | |
image = options.target; | |
if (image) { | |
if (typeof image == "string") { | |
/** @type {string} */ | |
i = image.substr(0, 1); | |
/** @type {string} */ | |
classToRemove = image.substr(1); | |
if (i == ".") { | |
a2a.multi_init(a2a.HTMLcollToArray(a2a.getByClass(classToRemove, document)), type, opts); | |
/** @type {boolean} */ | |
options.target = false; | |
return; | |
} else { | |
elem = a2a.gEl(classToRemove); | |
ret = elem.className; | |
if (ret.indexOf("a2a_kit") >= 0 && ret.indexOf("a2a_target") < 0) { | |
/** @type {null} */ | |
elem = null; | |
} | |
} | |
} else { | |
elem = options.target; | |
} | |
} | |
type = options.menu_type ? "mail" : type; | |
if (type) { | |
/** @type {string} */ | |
a2a.type = type; | |
options.vars.process(); | |
} | |
self.type = a2a.type; | |
self.node = elem; | |
self.linkname = a2a[self.type].last_linkname = options.linkname || (a2a[self.type].last_linkname || (document.title || location.href)); | |
self.linkurl = a2a[self.type].last_linkurl = options.linkurl || (a2a[self.type].last_linkurl || location.href); | |
self.linkname_escape = options.linkname_escape; | |
/** @type {boolean} */ | |
self.linkname_implicit = !options.linkname_escape && (document.title || origin) == self.linkname; | |
/** @type {boolean} */ | |
self.linkurl_implicit = origin == self.linkurl; | |
self.orientation = options.orientation || false; | |
self.track_links = options.track_links || false; | |
self.track_links_key = options.track_links_key || ""; | |
self.track_pub = options.track_pub || false; | |
/** @type {boolean} */ | |
options.linkname = options.linkurl = options.onclick = options.linkname_escape = options.show_title = options.custom_services = options.exclude_services = options.orientation = options.num_services = options.track_pub = options.target = false; | |
if (options.track_links == "custom") { | |
/** @type {boolean} */ | |
options.track_links = false; | |
/** @type {string} */ | |
options.track_links_key = ""; | |
} | |
a2a.last_type = a2a.type; | |
/** @type {number} */ | |
window["a2a" + a2a.type + "_init"] = 1; | |
if (a2a.locale && !dataAndEvents) { | |
a2a.fn_queue.push(function(self, data) { | |
return function() { | |
init(self, data); | |
}; | |
}(self, d)); | |
} else { | |
init(self, d); | |
/** @type {boolean} */ | |
options.menu_type = false; | |
a2a.init_show(); | |
} | |
}, | |
/** | |
* @param {string} param | |
* @return {undefined} | |
*/ | |
init_all : function(param) { | |
var a2a_menu_container = a2a.unindexed(function(elem) { | |
if (elem.className.indexOf("a2a_follow") >= 0) { | |
a2a.init("feed"); | |
} else { | |
a2a.init(param); | |
} | |
}, true); | |
if (!a2a_menu_container && a2a.gEl("a2a_menu_container")) { | |
a2a.init(param); | |
} | |
}, | |
/** | |
* @param {Array} values | |
* @param {string} listener | |
* @param {Object} el | |
* @return {undefined} | |
*/ | |
multi_init : function(values, listener, el) { | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = values.length; | |
for (;i < valuesLen;i++) { | |
el.target = values[i]; | |
a2a.init(listener, el); | |
} | |
}, | |
/** | |
* @param {Object} data | |
* @return {undefined} | |
*/ | |
button : function(data) { | |
var node = data.node; | |
var eventType = data.type; | |
var testNode = a2a.gEl("a2a" + eventType + "_dropdown"); | |
/** @type {string} */ | |
var down = "mousedown"; | |
/** @type {string} */ | |
var up = "mouseup"; | |
if ((!node.getAttribute("onclick") || (node.getAttribute("onclick") + "").indexOf("a2a_") == -1) && (!node.getAttribute("onmouseover") || (node.getAttribute("onmouseover") + "").indexOf("a2a_") == -1)) { | |
a2a.fast_click.make(node, function(ev) { | |
a2a.preventDefault(ev); | |
a2a.stopPropagation(ev); | |
if (testNode.style.display == "block") { | |
var name = a2a[eventType].time_open; | |
if (a2a[eventType].onclick || name && name == "OK") { | |
a2a.toggle_dropdown("none", eventType); | |
} else { | |
a2a[eventType].last_focus = document.activeElement; | |
testNode.focus(); | |
} | |
} else { | |
a2a.show_menu(node); | |
a2a[eventType].last_focus = document.activeElement; | |
testNode.focus(); | |
} | |
}); | |
if (a2a.has_touch) { | |
/** @type {string} */ | |
down = "touchstart"; | |
/** @type {string} */ | |
up = "touchend"; | |
} else { | |
if (a2a.has_pointer) { | |
/** @type {string} */ | |
down = "MSPointerDown"; | |
/** @type {string} */ | |
up = "MSPointerUp"; | |
} | |
} | |
a2a.add_event(node, down, a2a.stopPropagation); | |
a2a.add_event(node, up, function(e) { | |
a2a.stopPropagation(e); | |
/** @type {number} */ | |
a2a.touch_used = 1; | |
}); | |
if (!a2a[a2a.type].onclick) { | |
if (a2a.c.delay) { | |
/** | |
* @return {undefined} | |
*/ | |
node.onmouseover = function() { | |
/** @type {number} */ | |
a2a[a2a.type].over_delay = setTimeout(function() { | |
a2a.show_menu(node); | |
}, a2a.c.delay); | |
}; | |
} else { | |
/** | |
* @return {undefined} | |
*/ | |
node.onmouseover = function() { | |
a2a.show_menu(node); | |
}; | |
} | |
/** | |
* @return {undefined} | |
*/ | |
node.onmouseout = function() { | |
a2a.onMouseOut_delay(); | |
if (a2a[a2a.type].over_delay) { | |
clearTimeout(a2a[a2a.type].over_delay); | |
} | |
}; | |
} | |
} | |
if (!node.getAttribute("aria-label")) { | |
node.setAttribute("aria-label", eventType == "feed" ? a2a.c.localize.Subscribe : a2a.c.localize.Share); | |
} | |
if (node.tagName.toLowerCase() == "a" && a2a.type == "page") { | |
/** @type {string} */ | |
node.href = "https://www.addtoany.com/share#url=" + encodeURIComponent(data.linkurl) + "&title=" + encodeURIComponent(data.linkname).replace(/'/g, "%27") + "&description=" + encodeURIComponent(a2a.selection()).replace(/'/g, "%27"); | |
} | |
}, | |
/** | |
* @param {Object} params | |
* @param {Object} arg | |
* @return {undefined} | |
*/ | |
kit : function(params, arg) { | |
var type = a2a.type; | |
var posts = { | |
behance : { | |
icon : "behance", | |
url : "https://www.behance.net/${id}" | |
}, | |
facebook : { | |
icon : "facebook", | |
url : "https://www.facebook.com/${id}" | |
}, | |
flickr : { | |
icon : "flickr", | |
url : "https://www.flickr.com/photos/${id}" | |
}, | |
foursquare : { | |
icon : "foursquare", | |
url : "https://foursquare.com/${id}" | |
}, | |
google_plus : { | |
icon : "google_plus", | |
url : "https://plus.google.com/${id}" | |
}, | |
instagram : { | |
icon : "instagram", | |
url : "https://instagram.com/${id}" | |
}, | |
linkedin : { | |
icon : "linkedin", | |
url : "https://www.linkedin.com/in/${id}" | |
}, | |
linkedin_company : { | |
icon : "linkedin", | |
url : "https://www.linkedin.com/company/${id}" | |
}, | |
pinterest : { | |
icon : "pinterest", | |
url : "https://www.pinterest.com/${id}" | |
}, | |
tumblr : { | |
icon : "tumblr", | |
url : "http://${id}.tumblr.com" | |
}, | |
twitter : { | |
icon : "twitter", | |
url : "https://twitter.com/${id}" | |
}, | |
vimeo : { | |
icon : "vimeo", | |
url : "https://vimeo.com/${id}" | |
}, | |
youtube : { | |
icon : "youtube", | |
url : "https://www.youtube.com/user/${id}" | |
}, | |
youtube_channel : { | |
icon : "youtube", | |
url : "https://www.youtube.com/channel/${id}" | |
} | |
}; | |
/** | |
* @param {(Object|string)} node | |
* @param {?} name | |
* @return {?} | |
*/ | |
var fn = function(node, name) { | |
var data; | |
var ps = getDataset(node, {}); | |
var key = ps["a2a-follow"]; | |
if (key) { | |
data = posts[name].url.replace("${id}", key); | |
} | |
return data || node.href; | |
}; | |
/** @type {Array} */ | |
var stringProps = ["facebook_like", "twitter_tweet", "google_plusone", "google_plus_share", "pinterest_pin"]; | |
var reversed = a2a.counters.avail; | |
/** | |
* @param {string} c | |
* @param {boolean} dataAndEvents | |
* @return {?} | |
*/ | |
var some = function(c, dataAndEvents) { | |
if (c != "facebook_like" && c != "twitter_tweet") { | |
/** @type {number} */ | |
var i = 0; | |
var codeSegments = a2a[type].services; | |
var valuesLen = codeSegments.length; | |
for (;i < valuesLen;i++) { | |
if (c == codeSegments[i][1]) { | |
return[codeSegments[i][0], codeSegments[i][2], codeSegments[i][3], codeSegments[i][4]]; | |
} | |
} | |
} | |
if (dataAndEvents) { | |
return false; | |
} | |
return[c, c]; | |
}; | |
/** | |
* @param {Object} node | |
* @param {?} obj | |
* @return {?} | |
*/ | |
var getDataset = function(node, obj) { | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = node.attributes.length; | |
var attribute; | |
var dataset = obj; | |
for (;i < valuesLen;i++) { | |
attribute = node.attributes[i]; | |
if (attribute.name && attribute.name.substr(0, 5) == "data-") { | |
dataset[attribute.name.substr(5)] = attribute.value; | |
} | |
} | |
return dataset; | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
var onEvent = function() { | |
a2a.linker(this); | |
}; | |
/** | |
* @param {string} name | |
* @param {string} x | |
* @param {Event} data | |
* @return {undefined} | |
*/ | |
var init = function(name, x, data) { | |
var defaults = { | |
node : x, | |
service : name, | |
title : title, | |
url : url | |
}; | |
var options = a2a.cbs("share", defaults); | |
if (typeof options != "undefined") { | |
if (options.url) { | |
params.linkurl = options.url; | |
/** @type {boolean} */ | |
params.linkurl_implicit = false; | |
} | |
if (options.title) { | |
params.linkname = options.title; | |
/** @type {boolean} */ | |
params.linkname_implicit = false; | |
} | |
a2a.linker(x); | |
if (options.stop && data) { | |
a2a.preventDefault(data); | |
} | |
} | |
}; | |
var templates = a2a.c.templates; | |
var el = params.node; | |
var fontSize = a2a.getData(el); | |
var parentElement = el.a2a_follow; | |
var nodes = a2a.HTMLcollToArray(el.getElementsByTagName("a")); | |
var len = nodes.length; | |
/** @type {Element} */ | |
var star = document.createElement("div"); | |
/** @type {function (string): string} */ | |
var trim = encodeURIComponent; | |
var url = params.linkurl; | |
/** @type {string} */ | |
var camelKey = trim(params.linkurl).replace(/'/g, "%27"); | |
var title = params.linkname; | |
/** @type {string} */ | |
var l = trim(params.linkname).replace(/'/g, "%27"); | |
var text = fontSize["a2a-icon-color"] || a2a.c.icon_color; | |
var horizontalOffset = el.className.match(/a2a_kit_size_([\w\.]+)(?:\s|$)/); | |
var width = horizontalOffset ? horizontalOffset[1] : false; | |
/** @type {string} */ | |
var val = width + "px"; | |
/** @type {string} */ | |
var className = "a2a_img a2a_i_"; | |
var options = {}; | |
var style = {}; | |
/** @type {boolean} */ | |
var isFixed = el.className.indexOf("a2a_vertical_style") >= 0 ? true : false; | |
if (width && !isNaN(width)) { | |
a2a.svg_css(); | |
if (text && (text != "unset" && a2a.svg_works())) { | |
/** @type {string} */ | |
className = "a2a_svg a2a_w__default a2a_w_"; | |
options.backgroundColor = text; | |
} else { | |
/** @type {string} */ | |
className = "a2a_svg a2a_s__default a2a_s_"; | |
} | |
/** @type {string} */ | |
el.style.lineHeight = style.height = style.lineHeight = val; | |
/** @type {string} */ | |
style.width = width * 2 + "px"; | |
/** @type {string} */ | |
style.fontSize = "16px"; | |
if (isFixed) { | |
/** @type {string} */ | |
style.height = style.lineHeight = width / 2 + "px"; | |
/** @type {string} */ | |
style.fontSize = "10px"; | |
/** @type {string} */ | |
style.width = width + "px"; | |
} | |
if (width != 32) { | |
/** @type {string} */ | |
options.backgroundSize = options.height = options.lineHeight = options.width = val; | |
/** @type {string} */ | |
style.borderRadius = options.borderRadius = (width * 0.14).toFixed() + "px"; | |
/** @type {string} */ | |
style.fontSize = (parseInt(style.height, 10) + (isFixed ? 4 : 0)) / 2 + "px"; | |
} | |
} | |
/** | |
* @return {undefined} | |
*/ | |
a2a.kit.facebook_like = function() { | |
settings.href = url; | |
/** @type {string} */ | |
settings.width = "90"; | |
/** @type {string} */ | |
settings.layout = "button_count"; | |
/** @type {string} */ | |
settings.ref = "addtoany"; | |
settings = getDataset(node, settings); | |
/** @type {string} */ | |
node.style.width = settings.width + "px"; | |
/** | |
* @return {undefined} | |
*/ | |
var initialize = function() { | |
FB.init({ | |
appId : "0", | |
status : false, | |
xfbml : true, | |
version : "v2.3" | |
}); | |
FB.Event.subscribe("edge.create", function(url, dataAndEvents) { | |
a2a.GA.track("Facebook Like", "facebook_like", url, "pages", "AddToAny Share/Save Button"); | |
init("Facebook Like", node); | |
}); | |
}; | |
var text = a2a.i18n(); | |
text = text ? text.replace(/-/g, "_") : "en_US"; | |
if (text.length == 2) { | |
text += "_" + text.toUpperCase(); | |
} | |
for (key in settings) { | |
optsData += " data-" + key + '="' + settings[key] + '"'; | |
} | |
if (!window.fbAsyncInit) { | |
/** @type {function (): undefined} */ | |
window.fbAsyncInit = initialize; | |
/** @type {Element} */ | |
elem = document.createElement("span"); | |
/** @type {string} */ | |
elem.id = "fb-root"; | |
document.body.insertBefore(elem, document.body.firstChild); | |
} | |
if (!a2a.kit.facebook_like_script) { | |
(function(d, s, id) { | |
var js; | |
var insertAt = d.getElementsByTagName(s)[0]; | |
if (d.getElementById(id)) { | |
return; | |
} | |
/** @type {Element} */ | |
js = d.createElement(s); | |
/** @type {string} */ | |
js.id = id; | |
/** @type {string} */ | |
js.src = "//connect.facebook.net/" + text + "/sdk.js"; | |
insertAt.parentNode.insertBefore(js, insertAt); | |
})(document, "script", "facebook-jssdk"); | |
} | |
/** @type {number} */ | |
a2a.kit.facebook_like_script = 1; | |
/** @type {string} */ | |
node.innerHTML = '<div class="fb-like"' + optsData + "></div>"; | |
try { | |
FB.XFBML.parse(node); | |
} catch (n) { | |
} | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
a2a.kit.twitter_tweet = function() { | |
settings.url = url; | |
settings.lang = a2a.i18n() || "en"; | |
/** @type {string} */ | |
settings.related = "AddToAny,micropat"; | |
var x = templates.twitter; | |
var p = x ? x.lastIndexOf("@") : null; | |
if (p && p !== -1) { | |
p++; | |
p = x.substr(p).split(" ", 1); | |
p = p[0].replace(/:/g, "").replace(/\//g, "").replace(/-/g, "").replace(/\./g, "").replace(/,/g, "").replace(/;/g, "").replace(/!/g, ""); | |
/** @type {string} */ | |
settings.related = p + ",AddToAny"; | |
} | |
settings = getDataset(node, settings); | |
/** @type {Element} */ | |
var element = document.createElement("a"); | |
/** @type {string} */ | |
element.className = "twitter-share-button"; | |
for (key in settings) { | |
element.setAttribute("data-" + key, settings[key]); | |
} | |
node.appendChild(element); | |
if (!a2a.kit.twitter_tweet_script) { | |
(function(d, s, id) { | |
var self; | |
var js; | |
var insertAt = d.getElementsByTagName(s)[0]; | |
if (d.getElementById(id)) { | |
return; | |
} | |
/** @type {Element} */ | |
js = d.createElement(s); | |
/** @type {string} */ | |
js.id = id; | |
/** @type {string} */ | |
js.src = "//platform.twitter.com/widgets.js"; | |
insertAt.parentNode.insertBefore(js, insertAt); | |
window.twttr = window.twttr || (self = { | |
_e : [], | |
/** | |
* @param {Function} socket | |
* @return {undefined} | |
*/ | |
ready : function(socket) { | |
self._e.push(socket); | |
} | |
}); | |
})(document, "script", "twitter-wjs"); | |
} | |
/** @type {number} */ | |
a2a.kit.twitter_tweet_script = 1; | |
try { | |
twttr.ready(function($scope) { | |
if (!a2a.twitter_bind) { | |
$scope.events.bind("click", function(e) { | |
if (e && e.region == "tweet") { | |
var entry = function() { | |
var fullName = e.target.src.split("#")[1] || ""; | |
if (fullName && fullName.indexOf("url=") > -1) { | |
var dst = {}; | |
var values = fullName.split("&"); | |
var valuesLen = values.length; | |
/** @type {number} */ | |
var i = 0; | |
for (;i < valuesLen;i++) { | |
var src = values[i].split("="); | |
dst[src[0]] = src[1]; | |
} | |
return dst; | |
} else { | |
return false; | |
} | |
}(); | |
if (entry && entry.url) { | |
a2a.GA.track("Twitter Tweet", "twitter_tweet", unescape(entry.url), "pages", "AddToAny Share/Save Button"); | |
init("Twitter Tweet", node); | |
} | |
} | |
}); | |
/** @type {number} */ | |
a2a.twitter_bind = 1; | |
} | |
if ($scope.widgets) { | |
$scope.widgets.load(); | |
} | |
}); | |
} catch (n) { | |
} | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
a2a.kit.pinterest_pin = function() { | |
/** @type {string} */ | |
settings["pin-config"] = "beside"; | |
/** @type {string} */ | |
settings["pin-do"] = "buttonPin"; | |
settings.url = url; | |
settings = getDataset(node, settings); | |
/** @type {Element} */ | |
var element = document.createElement("a"); | |
for (key in settings) { | |
element.setAttribute("data-" + key, settings[key]); | |
} | |
if (settings["pin-config"] == "beside" && settings["pin-do"] == "buttonPin") { | |
/** @type {string} */ | |
node.style.width = "76px"; | |
} | |
/** @type {string} */ | |
element.href = "//www.pinterest.com/pin/create/button/?url=" + settings.url + (settings.media ? "&media=" + encodeURIComponent(settings.media) : "") + (settings.description ? "&description=" + encodeURIComponent(settings.description).replace(/'/g, "%27") : ""); | |
a2a.add_event(node, "click", function() { | |
a2a.GA.track("Pinterest Pin", "pinterest_pin", url, "pages", "AddToAny Share/Save Button"); | |
init("Pinterest Pin", node); | |
}); | |
node.appendChild(element); | |
if (!a2a.kit.pinterest_pin_script) { | |
(function(doc) { | |
/** @type {Element} */ | |
var ga = doc.createElement("script"); | |
var insertAt = doc.getElementsByTagName("script")[0]; | |
/** @type {string} */ | |
ga.type = "text/javascript"; | |
/** @type {boolean} */ | |
ga.async = true; | |
/** @type {string} */ | |
ga.src = "//assets.pinterest.com/js/pinit.js"; | |
insertAt.parentNode.insertBefore(ga, insertAt); | |
})(document); | |
} | |
/** @type {number} */ | |
a2a.kit.pinterest_pin_script = 1; | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
a2a.kit.google_plus = function() { | |
/** | |
* @param {(Object|string)} result | |
* @return {undefined} | |
*/ | |
window.google_plus_cb_a2a = function(result) { | |
if (result.state && result.state == "off") { | |
return; | |
} | |
a2a.GA.track("Google +1", "google_plusone", result.href, "pages", "AddToAny Share/Save Button"); | |
init("Google +1", node); | |
}; | |
settings.href = url; | |
/** @type {string} */ | |
settings.size = "medium"; | |
/** @type {string} */ | |
settings.annotation = "bubble"; | |
if (prefix == "google_plus_share") { | |
/** @type {string} */ | |
settings.action = "share"; | |
} | |
settings = getDataset(node, settings); | |
var lang = a2a.i18n() || "en-US"; | |
window.___gcfg = window.___gcfg || { | |
lang : lang | |
}; | |
for (key in settings) { | |
optsData += " data-" + key + '="' + settings[key] + '"'; | |
} | |
/** @type {string} */ | |
node.innerHTML = '<div class="g-plus' + (settings.action == "share" ? "" : "one") + '" data-callback="google_plus_cb_a2a"' + optsData + "></div>"; | |
if (!a2a.kit.google_plus_script) { | |
(function(doc) { | |
/** @type {Element} */ | |
var ga = doc.createElement("script"); | |
var insertAt = doc.getElementsByTagName("script")[0]; | |
/** @type {string} */ | |
ga.type = "text/javascript"; | |
/** @type {boolean} */ | |
ga.async = true; | |
/** @type {string} */ | |
ga.src = "https://apis.google.com/js/platform.js"; | |
insertAt.parentNode.insertBefore(ga, insertAt); | |
})(document); | |
/** @type {number} */ | |
a2a.kit.google_plus_script = 1; | |
} | |
}; | |
/** @type {function (): undefined} */ | |
a2a.kit.google_plusone = a2a.kit.google_plus_share = a2a.kit.google_plus; | |
/** @type {number} */ | |
var idx = 0; | |
for (;idx < len;idx++) { | |
var node = nodes[idx]; | |
var cls = node.className; | |
var cons = cls.match(/a2a_button_([\w\.]+)(?:\s|$)/); | |
/** @type {boolean} */ | |
var c = cls.indexOf("a2a_dd") >= 0; | |
/** @type {boolean} */ | |
var name = cls.indexOf("a2a_counter") >= 0; | |
var prefix = cons ? cons[1] : false; | |
var childNodes = node.childNodes; | |
var testSource = some(prefix); | |
var classes = testSource[0]; | |
/** @type {string} */ | |
var target = "_blank"; | |
var value = parentElement && posts[prefix] ? posts[prefix].icon : testSource[1]; | |
var first = testSource[2] || {}; | |
var pos = first.type; | |
var ref = testSource[3]; | |
/** @type {boolean} */ | |
var w = false; | |
/** @type {boolean} */ | |
var names = false; | |
var elem; | |
var K; | |
var key; | |
/** @type {string} */ | |
var optsData = ""; | |
var settings = {}; | |
if (c) { | |
arg.target = node; | |
a2a.init(type, arg, 1); | |
/** @type {string} */ | |
prefix = "a2a"; | |
/** @type {string} */ | |
value = "a2a"; | |
/** @type {(boolean|number)} */ | |
names = name ? 1 : false; | |
} else { | |
if (prefix == "feed" || prefix == "print") { | |
/** @type {string} */ | |
target = ""; | |
} else { | |
if (name && (prefix && a2a.in_array(prefix, reversed))) { | |
/** @type {number} */ | |
names = 1; | |
} else { | |
if (prefix && a2a.in_array(prefix, stringProps)) { | |
a2a.kit[prefix](); | |
/** @type {number} */ | |
w = 1; | |
} | |
} | |
} | |
} | |
if (!prefix || w) { | |
continue; | |
} | |
if (!c) { | |
/** @type {string} */ | |
node.target = target; | |
if (parentElement && (posts[prefix] || !some(prefix, true))) { | |
node.href = fn(node, prefix); | |
} else { | |
if (prefix == "feed") { | |
node.href = params.linkurl; | |
} else { | |
/** @type {string} */ | |
node.href = "/"; | |
/** @type {function (): undefined} */ | |
node.onmousedown = onEvent; | |
/** @type {function (): undefined} */ | |
node.onkeydown = onEvent; | |
/** @type {string} */ | |
node.rel = "nofollow"; | |
} | |
} | |
node.a2a = {}; | |
node.a2a.customserviceuri = ref; | |
node.a2a.stype = pos; | |
node.a2a.linkurl = params.linkurl; | |
node.a2a.servicename = classes; | |
node.a2a.safename = prefix; | |
if (!node.getAttribute("aria-label")) { | |
node.setAttribute("aria-label", classes); | |
} | |
if (first.src) { | |
node.a2a.js_src = first.src; | |
} | |
if (first.pu) { | |
/** @type {number} */ | |
node.a2a.popup = 1; | |
} | |
if (!parentElement) { | |
a2a.add_event(node, "click", function(prop, name, url, source, event) { | |
return function(ev) { | |
var winHeight = screen.height; | |
/** @type {number} */ | |
var am = 550; | |
/** @type {number} */ | |
var height = 450; | |
/** @type {string} */ | |
var r20 = "event=service_click&url=" + trim(location.href) + "&title=" + trim(document.title || "") + "&ev_service=" + trim(prop) + "&ev_service_type=kit&ev_menu_type=" + type + "&ev_url=" + trim(url) + "&ev_title=" + trim(source).replace(/'/g, "%27"); | |
init(name, event, ev); | |
if (event.a2a.popup && !a2a.defaultPrevented(ev)) { | |
a2a.preventDefault(ev); | |
window.open(event.href, "_blank", "toolbar=0,personalbar=0,resizable,scrollbars,status,width=550,height=450,top=" + (winHeight > height ? Math.round(winHeight / 2 - height / 2) : 40) + ",left=" + Math.round(screen.width / 2 - am / 2)); | |
} | |
a2a.util_frame_post(type, r20); | |
a2a.GA.track(name, prop, url, "pages", "AddToAny Share/Save Button"); | |
}; | |
}(prefix, classes, url, title, node)); | |
} | |
} | |
if (childNodes.length) { | |
/** @type {number} */ | |
var i = 0; | |
var length = childNodes.length; | |
for (;i < length;i++) { | |
if (childNodes[i].nodeType == 1) { | |
/** @type {boolean} */ | |
K = true; | |
break; | |
} | |
} | |
if (!K) { | |
/** @type {Element} */ | |
elem = document.createElement("span"); | |
/** @type {string} */ | |
elem.className = className + value + " a2a_img_text"; | |
for (prop_name in options) { | |
elem.style[prop_name] = options[prop_name]; | |
} | |
node.insertBefore(elem, childNodes[0]); | |
} | |
} else { | |
/** @type {Element} */ | |
elem = document.createElement("span"); | |
/** @type {string} */ | |
elem.className = className + value; | |
for (prop_name in options) { | |
elem.style[prop_name] = options[prop_name]; | |
} | |
node.appendChild(elem); | |
} | |
if (isFixed && (width && width < 20)) { | |
/** @type {boolean} */ | |
names = false; | |
} | |
if (names) { | |
/** @type {Element} */ | |
elem = document.createElement("span"); | |
/** @type {string} */ | |
elem.className = "a2a_count"; | |
elem.a2a = {}; | |
elem.a2a.kit = el; | |
for (prop_name in style) { | |
elem.style[prop_name] = style[prop_name]; | |
} | |
node.appendChild(elem); | |
if (c) { | |
a2a.counters.get("facebook", elem, camelKey); | |
a2a.counters.get("twitter", elem, camelKey); | |
/** @type {number} */ | |
elem.a2a.is_a2a_dd_counter = 1; | |
el.a2a_dd_counter = elem; | |
} else { | |
a2a.counters.get(prefix, elem, camelKey); | |
} | |
} | |
if (cls != "a2a_dd") { | |
a2a.kit_services.push(node); | |
} | |
} | |
if (el.className.indexOf("a2a_default_style") >= 0) { | |
/** @type {string} */ | |
star.style.clear = "both"; | |
el.appendChild(star); | |
} | |
}, | |
counters : { | |
/** | |
* @param {string} id | |
* @param {Element} obj | |
* @param {string} key | |
* @return {undefined} | |
*/ | |
get : function(id, obj, key) { | |
/** @type {string} */ | |
var query = decodeURIComponent(key); | |
var o = a2a.counters[id]; | |
var oL = o.api; | |
var cb = o.cb; | |
var is_a2a_dd_counter = obj.a2a.is_a2a_dd_counter; | |
var self; | |
var suiteView; | |
self = o[query] = o[query] || {}; | |
if (self.num) { | |
if (is_a2a_dd_counter) { | |
a2a.counters.sum(obj, self.num, id); | |
} else { | |
a2a.counters.set(obj, self.num, id); | |
} | |
return; | |
} | |
self.queued = self.queued || []; | |
self.queued.push(obj); | |
o.n = o.n || 0; | |
o.n++; | |
/** | |
* @param {Object} rvar | |
* @return {undefined} | |
*/ | |
o["cb" + o.n] = function(rvar) { | |
var i = a2a.counters[id].cb(rvar, obj); | |
if (typeof i == "undefined") { | |
return; | |
} | |
/** @type {number} */ | |
var c = 0; | |
var n; | |
for (;c < self.queued.length;c++) { | |
queued_count_element = self.queued[c]; | |
self.num = i; | |
if (queued_count_element.a2a.is_a2a_dd_counter) { | |
a2a.counters.sum(queued_count_element, i, id); | |
} else { | |
a2a.counters.set(queued_count_element, i, id); | |
} | |
} | |
}; | |
if (self.queued.length == 1) { | |
/** @type {string} */ | |
suiteView = oL[0] + key + (oL[1] || "&callback") + "=a2a.counters." + id + ".cb" + o.n; | |
a2a.dom.ready(function() { | |
a2a.loadExtScript(suiteView); | |
}); | |
} | |
}, | |
/** | |
* @param {Element} obj | |
* @param {?} key | |
* @param {string} callback | |
* @return {undefined} | |
*/ | |
set : function(obj, key, callback) { | |
/** @type {string} */ | |
obj.innerHTML = "<span>" + a2a.counters.format(key) + "</span>"; | |
if (callback != "a2a") { | |
a2a.counters.sum(obj, key, callback); | |
} | |
}, | |
/** | |
* @param {Element} var_args | |
* @param {?} key | |
* @param {string} callback | |
* @return {undefined} | |
*/ | |
sum : function(var_args, key, callback) { | |
var self = var_args.a2a.kit; | |
var camelKey = self.a2a_counts_sum || 0; | |
var steps = self.a2a_counts_summed; | |
if (callback != "a2a" && (!steps || steps.indexOf(callback) == -1)) { | |
camelKey = self.a2a_counts_sum = camelKey + key; | |
steps = self.a2a_counts_summed = steps || []; | |
steps.push(callback); | |
} | |
if (self.a2a_dd_counter) { | |
a2a.counters.set(self.a2a_dd_counter, camelKey, "a2a"); | |
} | |
}, | |
/** | |
* @param {number} num | |
* @return {?} | |
*/ | |
format : function(num) { | |
/** @type {number} */ | |
var base = 1E6; | |
/** @type {number} */ | |
var den = 1E3; | |
if (num > 999) { | |
if (num < base) { | |
if (num > 1E4) { | |
/** @type {string} */ | |
num = (num / den).toFixed() + "k"; | |
} else { | |
/** @type {string} */ | |
num = num + ""; | |
/** @type {string} */ | |
num = num.charAt(0) + "," + num.substring(1); | |
} | |
} else { | |
if (num < 1E9) { | |
/** @type {string} */ | |
num = (num / base).toFixed(num % base > 94999) + "M"; | |
} else { | |
/** @type {string} */ | |
num = "1B+"; | |
} | |
} | |
} | |
return num; | |
}, | |
avail : ["facebook", "linkedin", "pinterest", "reddit", "tumblr", "twitter"], | |
facebook : { | |
api : ['https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url="', '"&callback'], | |
/** | |
* @param {string} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
if (res && (res.data && (res.data[0] && !isNaN(res.data[0].total_count)))) { | |
return res.data[0].total_count; | |
} | |
} | |
}, | |
linkedin : { | |
api : ["https://www.linkedin.com/countserv/count/share?url="], | |
/** | |
* @param {Object} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
if (res && !isNaN(res.count)) { | |
return res.count; | |
} | |
} | |
}, | |
pinterest : { | |
api : ["https://widgets.pinterest.com/v1/urls/count.json?url="], | |
/** | |
* @param {Object} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
if (res && !isNaN(res.count)) { | |
return res.count; | |
} | |
} | |
}, | |
reddit : { | |
api : ["https://www.reddit.com/api/info.json?url=", "&jsonp"], | |
/** | |
* @param {?} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
var data = res.data; | |
if (res && (data && data.children)) { | |
/** @type {number} */ | |
var i = 0; | |
/** @type {Array} */ | |
var newArguments = []; | |
var codeSegments = data.children; | |
var p; | |
for (;i < codeSegments.length;i++) { | |
p = codeSegments[i].data; | |
if (p && !isNaN(p.ups)) { | |
newArguments.push(p.ups); | |
} | |
} | |
if (newArguments.length > 0) { | |
return Math.max.apply(null, newArguments); | |
} | |
} | |
} | |
}, | |
tumblr : { | |
api : ["https://api.tumblr.com/v2/share/stats?url="], | |
/** | |
* @param {Function} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
if (res && (res.response && !isNaN(res.response.note_count))) { | |
return res.response.note_count; | |
} | |
} | |
}, | |
twitter : { | |
api : ["https://cdn.api.twitter.com/1/urls/count.json?url="], | |
/** | |
* @param {Object} res | |
* @param {Element} label | |
* @return {?} | |
*/ | |
cb : function(res, label) { | |
if (res && !isNaN(res.count)) { | |
return res.count; | |
} | |
} | |
} | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
init_show : function() { | |
var body = a2a_config; | |
var no_hide = a2a[a2a.type]; | |
var do_body = a2a.show_menu; | |
if (body.bookmarklet) { | |
/** @type {number} */ | |
no_hide.no_hide = 1; | |
do_body(); | |
} | |
if (body.show_menu) { | |
/** @type {number} */ | |
no_hide.no_hide = 1; | |
do_body(false, body.show_menu); | |
} | |
}, | |
/** | |
* @param {Function} $ | |
* @param {boolean} dataAndEvents | |
* @return {?} | |
*/ | |
unindexed : function($, dataAndEvents) { | |
/** | |
* @param {Array} a | |
* @return {?} | |
*/ | |
function enter(a) { | |
/** @type {number} */ | |
var i = 0; | |
var aLength = a.length; | |
var el; | |
var v; | |
for (;i < aLength;i++) { | |
el = a[i]; | |
if ((typeof el.a2a_index === "undefined" || el.a2a_index === "") && (el.className.indexOf("a2a_target") < 0 && el.parentNode.className.indexOf("a2a_kit") < 0)) { | |
v = $(el); | |
} | |
if (v) { | |
return v; | |
} else { | |
continue; | |
} | |
} | |
return null; | |
} | |
if (dataAndEvents) { | |
return enter(a2a.getByClass("a2a_kit", document)) || enter(a2a.HTMLcollToArray(document.getElementsByName("a2a_dd")).concat(a2a.getByClass("a2a_dd", document))); | |
} else { | |
enter(a2a.getByClass("a2a_kit", document).concat(a2a.getByClass("a2a_dd", document), a2a.HTMLcollToArray(document.getElementsByName("a2a_dd")))); | |
} | |
}, | |
/** | |
* @param {Element} el | |
* @return {?} | |
*/ | |
set_this_index : function(el) { | |
/** | |
* @param {Element} el | |
* @return {?} | |
*/ | |
function hasClass(el) { | |
if (el.className.indexOf("a2a_kit") >= 0) { | |
/** @type {number} */ | |
el.a2a_kit = 1; | |
} else { | |
return false; | |
} | |
if (el.className.indexOf("a2a_follow") >= 0) { | |
/** @type {number} */ | |
el.a2a_follow = 1; | |
} | |
} | |
var node = a2a.n; | |
var c; | |
if (el) { | |
el.a2a_index = node; | |
hasClass(el); | |
return el; | |
} else { | |
return a2a.unindexed(function(el) { | |
el.a2a_index = node; | |
hasClass(el); | |
return el; | |
}, true); | |
} | |
}, | |
/** | |
* @param {string} elem | |
* @return {?} | |
*/ | |
gEl : function(elem) { | |
return document.getElementById(elem); | |
}, | |
/** | |
* @param {string} classToRemove | |
* @param {?} element | |
* @param {string} match | |
* @return {?} | |
*/ | |
getByClass : function(classToRemove, element, match) { | |
if (document.getElementsByClassName && Object.prototype.getElementsByClassName === document.getElementsByClassName) { | |
/** | |
* @param {string} className | |
* @param {?} element | |
* @param {string} tag | |
* @return {?} | |
*/ | |
a2a.getByClass = function(className, element, tag) { | |
element = element || a2a.gEl("a2a" + a2a.type + "_dropdown"); | |
var unmatched = element.getElementsByClassName(className); | |
/** @type {(RegExp|null)} */ | |
var rfocusable = tag ? new RegExp("\\b" + tag + "\\b", "i") : null; | |
/** @type {Array} */ | |
var result = []; | |
var elem; | |
/** @type {number} */ | |
var i = 0; | |
var len = unmatched.length; | |
for (;i < len;i += 1) { | |
elem = unmatched[i]; | |
if (!rfocusable || rfocusable.test(elem.nodeName)) { | |
result.push(elem); | |
} | |
} | |
return result; | |
}; | |
} else { | |
if (document.evaluate) { | |
/** | |
* @param {string} className | |
* @param {?} element | |
* @param {string} tag | |
* @return {?} | |
*/ | |
a2a.getByClass = function(className, element, tag) { | |
tag = tag || "*"; | |
element = element || a2a.gEl("a2a" + a2a.type + "_dropdown"); | |
var codeSegments = className.split(" "); | |
/** @type {string} */ | |
var classesToCheck = ""; | |
/** @type {string} */ | |
var xhtmlNamespace = "http://www.w3.org/1999/xhtml"; | |
/** @type {(null|string)} */ | |
var namespaceResolver = document.documentElement.namespaceURI === xhtmlNamespace ? xhtmlNamespace : null; | |
/** @type {Array} */ | |
var assigns = []; | |
var evaluationResults; | |
var vvar; | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = codeSegments.length; | |
for (;i < valuesLen;i += 1) { | |
classesToCheck += "[contains(concat(' ',@class,' '), ' " + codeSegments[i] + " ')]"; | |
} | |
try { | |
evaluationResults = document.evaluate(".//" + tag + classesToCheck, element, namespaceResolver, 0, null); | |
} catch (m) { | |
evaluationResults = document.evaluate(".//" + tag + classesToCheck, element, null, 0, null); | |
} | |
for (;vvar = evaluationResults.iterateNext();) { | |
assigns.push(vvar); | |
} | |
return assigns; | |
}; | |
} else { | |
/** | |
* @param {string} className | |
* @param {HTMLElement} element | |
* @param {string} tag | |
* @return {?} | |
*/ | |
a2a.getByClass = function(className, element, tag) { | |
tag = tag || "*"; | |
element = element || a2a.gEl("a2a" + a2a.type + "_dropdown"); | |
var codeSegments = className.split(" "); | |
/** @type {Array} */ | |
var tests = []; | |
var seed = tag === "*" && element.all ? element.all : element.getElementsByTagName(tag); | |
var elem; | |
/** @type {Array} */ | |
var result = []; | |
var o; | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = codeSegments.length; | |
for (;i < valuesLen;i += 1) { | |
tests.push(new RegExp("(^|\\s)" + codeSegments[i] + "(\\s|$)")); | |
} | |
/** @type {number} */ | |
var idx = 0; | |
var len = seed.length; | |
for (;idx < len;idx += 1) { | |
elem = seed[idx]; | |
/** @type {boolean} */ | |
o = false; | |
/** @type {number} */ | |
var k = 0; | |
/** @type {number} */ | |
var numrows = tests.length; | |
for (;k < numrows;k += 1) { | |
o = tests[k].test(elem.className); | |
if (!o) { | |
break; | |
} | |
} | |
if (o) { | |
result.push(elem); | |
} | |
} | |
return result; | |
}; | |
} | |
} | |
return a2a.getByClass(classToRemove, element, match); | |
}, | |
/** | |
* @param {Object} b | |
* @return {?} | |
*/ | |
HTMLcollToArray : function(b) { | |
/** @type {Array} */ | |
var a = []; | |
var bufferLength = b.length; | |
/** @type {number} */ | |
var i = 0; | |
for (;i < bufferLength;i++) { | |
a[a.length] = b[i]; | |
} | |
return a; | |
}, | |
/** | |
* @param {Object} o | |
* @param {string} type | |
* @param {Function} evtHandler | |
* @param {boolean} useCapture | |
* @return {?} | |
*/ | |
add_event : function(o, type, evtHandler, useCapture) { | |
if (o.addEventListener) { | |
o.addEventListener(type, evtHandler, useCapture); | |
return{ | |
/** | |
* @return {undefined} | |
*/ | |
destroy : function() { | |
o.removeEventListener(type, evtHandler, useCapture); | |
} | |
}; | |
} else { | |
o.attachEvent("on" + type, evtHandler); | |
return{ | |
/** | |
* @return {undefined} | |
*/ | |
destroy : function() { | |
o.detachEvent("on" + type, evtHandler); | |
} | |
}; | |
} | |
}, | |
fast_click : { | |
/** | |
* @param {Object} dataAndEvents | |
* @param {Function} deepDataAndEvents | |
* @param {boolean} attributes | |
* @return {undefined} | |
*/ | |
make : function(dataAndEvents, deepDataAndEvents, attributes) { | |
this.init(); | |
/** | |
* @param {Object} dataAndEvents | |
* @param {Function} deepDataAndEvents | |
* @param {boolean} attributes | |
* @return {undefined} | |
*/ | |
this.make = function(dataAndEvents, deepDataAndEvents, attributes) { | |
new this.FastButton(dataAndEvents, deepDataAndEvents, attributes); | |
}; | |
this.make(dataAndEvents, deepDataAndEvents, attributes); | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
init : function() { | |
/** | |
* @param {Object} target | |
* @param {string} type | |
* @param {Function} listener | |
* @param {?} useCapture | |
* @return {?} | |
*/ | |
function addListener(target, type, listener, useCapture) { | |
var r20 = target.attachEvent ? function(dataAndEvents) { | |
listener.handleEvent(window.event, listener); | |
} : listener; | |
return a2a.add_event(target, type, r20, useCapture); | |
} | |
/** | |
* @param {Element} element | |
* @param {Function} handler | |
* @param {?} useCapture | |
* @return {undefined} | |
*/ | |
this.FastButton = function(element, handler, useCapture) { | |
/** @type {Array} */ | |
this.events = []; | |
/** @type {Array} */ | |
this.touchEvents = []; | |
/** @type {Element} */ | |
this.element = element; | |
/** @type {Function} */ | |
this.handler = handler; | |
this.useCapture = useCapture; | |
if (a2a.has_touch) { | |
this.events.push(addListener(element, "touchstart", this, this.useCapture)); | |
} else { | |
if (a2a.has_pointer) { | |
/** @type {string} */ | |
element.style.msTouchAction = "manipulation"; | |
} | |
} | |
this.events.push(addListener(element, "click", this, this.useCapture)); | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
this.FastButton.prototype.destroy = function() { | |
/** @type {number} */ | |
var name = this.events.length - 1; | |
for (;name >= 0;name -= 1) { | |
this.events[name].destroy(); | |
} | |
/** @type {null} */ | |
this.events = this.touchEvents = this.element = this.handler = this.fast_click = null; | |
}; | |
/** | |
* @param {Event} event | |
* @return {undefined} | |
*/ | |
this.FastButton.prototype.handleEvent = function(event) { | |
switch(event.type) { | |
case "touchstart": | |
this.onTouchStart(event); | |
break; | |
case "touchmove": | |
this.onTouchMove(event); | |
break; | |
case "touchend": | |
this.onClick(event); | |
break; | |
case "click": | |
this.onClick(event); | |
break; | |
} | |
}; | |
/** | |
* @param {Event} event | |
* @return {undefined} | |
*/ | |
this.FastButton.prototype.onTouchStart = function(event) { | |
a2a.stopPropagation(event); | |
this.touchEvents.push(addListener(this.element, "touchend", this, this.useCapture)); | |
this.touchEvents.push(addListener(document.body, "touchmove", this, this.useCapture)); | |
this.startX = event.touches[0].clientX; | |
this.startY = event.touches[0].clientY; | |
}; | |
/** | |
* @param {Object} event | |
* @return {undefined} | |
*/ | |
this.FastButton.prototype.onTouchMove = function(event) { | |
if (Math.abs(event.touches[0].clientX - this.startX) > 10 || Math.abs(event.touches[0].clientY - this.startY) > 10) { | |
this.reset(); | |
} | |
}; | |
/** | |
* @param {Event} event | |
* @return {?} | |
*/ | |
this.FastButton.prototype.onClick = function(event) { | |
a2a.stopPropagation(event); | |
this.reset(); | |
var result = this.handler.call(this.element, event); | |
if (event.type == "touchend") { | |
a2a.fast_click.clickbuster.preventGhostClick(this.startX, this.startY); | |
} | |
return result; | |
}; | |
/** | |
* @return {undefined} | |
*/ | |
this.FastButton.prototype.reset = function() { | |
/** @type {number} */ | |
var _idx = this.touchEvents.length - 1; | |
for (;_idx >= 0;_idx -= 1) { | |
this.touchEvents[_idx].destroy(); | |
} | |
/** @type {Array} */ | |
this.touchEvents = []; | |
}; | |
this.clickbuster = { | |
coordinates : [], | |
/** | |
* @param {?} spaceName | |
* @param {?} y | |
* @return {undefined} | |
*/ | |
preventGhostClick : function(spaceName, y) { | |
this.coordinates.push(spaceName, y); | |
window.setTimeout(this.pop2, 2500); | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
pop2 : function() { | |
a2a.fast_click.clickbuster.coordinates.splice(0, 2); | |
}, | |
/** | |
* @param {Event} event | |
* @return {undefined} | |
*/ | |
onClick : function(event) { | |
/** @type {number} */ | |
var i = 0; | |
var x; | |
var y; | |
var data = a2a.fast_click.clickbuster; | |
for (;i < data.coordinates.length;i += 2) { | |
x = data.coordinates[i]; | |
y = data.coordinates[i + 1]; | |
if (Math.abs(event.clientX - x) < 25 && Math.abs(event.clientY - y) < 25) { | |
a2a.stopPropagation(event); | |
a2a.preventDefault(event); | |
} | |
} | |
} | |
}; | |
if (a2a.has_touch) { | |
a2a.add_event(document, "click", this.clickbuster.onClick, true); | |
} | |
} | |
}, | |
/** | |
* @param {Event} event | |
* @return {undefined} | |
*/ | |
stopPropagation : function(event) { | |
if (!event) { | |
event = window.event; | |
} | |
/** @type {boolean} */ | |
event.cancelBubble = true; | |
if (event.stopPropagation) { | |
event.stopPropagation(); | |
} | |
}, | |
/** | |
* @param {Event} ev | |
* @return {undefined} | |
*/ | |
preventDefault : function(ev) { | |
if (ev.preventDefault) { | |
ev.preventDefault(); | |
} else { | |
/** @type {boolean} */ | |
ev.returnValue = false; | |
} | |
}, | |
/** | |
* @param {Event} eventData | |
* @return {?} | |
*/ | |
defaultPrevented : function(eventData) { | |
return eventData.defaultPrevented || (eventData.returnValue === false || typeof eventData.defaultPrevented === "undefined" && (eventData.getPreventDefault && eventData.getPreventDefault())) ? true : false; | |
}, | |
/** | |
* @param {Function} callback | |
* @return {undefined} | |
*/ | |
onLoad : function(callback) { | |
/** @type {(function ((Event|null)): ?|null)} */ | |
var prevOnLoad = window.onload; | |
if (typeof window.onload != "function") { | |
/** @type {Function} */ | |
window.onload = callback; | |
} else { | |
/** | |
* @return {undefined} | |
*/ | |
window.onload = function() { | |
if (prevOnLoad) { | |
prevOnLoad(); | |
} | |
callback(); | |
}; | |
} | |
}, | |
/** | |
* @param {string} item | |
* @param {Array} arr | |
* @param {boolean} recurring | |
* @param {string} name | |
* @param {string} i | |
* @return {?} | |
*/ | |
in_array : function(item, arr, recurring, name, i) { | |
if (typeof arr == "object") { | |
item = item.toLowerCase(); | |
var e = arr.length; | |
/** @type {number} */ | |
var id = 0; | |
var l; | |
for (;id < e;id++) { | |
l = name ? arr[id][name] : arr[id]; | |
l = i ? l[i] : l; | |
if (recurring) { | |
if (item == l.toLowerCase()) { | |
return arr[id]; | |
} | |
} else { | |
if (item.indexOf(l.toLowerCase()) != -1 && l !== "") { | |
return arr[id]; | |
} | |
} | |
} | |
} | |
return false; | |
}, | |
/** | |
* @param {Object} object | |
* @param {?} obj | |
* @return {?} | |
*/ | |
serialize : function(object, obj) { | |
/** @type {Array} */ | |
var tagNameArr = []; | |
var property; | |
for (property in object) { | |
if (object.hasOwnProperty(property)) { | |
/** @type {string} */ | |
var val = obj ? obj + "[" + property + "]" : property; | |
var value = object[property]; | |
tagNameArr.push(typeof value == "object" ? a2a.serialize(value, val) : encodeURIComponent(val) + "=" + encodeURIComponent(value)); | |
} | |
} | |
return tagNameArr.join("&"); | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
onMouseOut_delay : function() { | |
var eventType = a2a.type; | |
var val = a2a.gEl("a2a" + eventType + "_dropdown").style.display; | |
if (val != "none" && (val != "" && (!a2a[eventType].find_focused && (!a2a[eventType].service_focused && !a2a.touch_used)))) { | |
/** @type {number} */ | |
a2a[eventType].out_delay = setTimeout(function() { | |
a2a.toggle_dropdown("none", eventType); | |
/** @type {null} */ | |
a2a[eventType].out_delay = null; | |
}, 501); | |
} | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
onMouseOver_stay : function() { | |
if (a2a[a2a.type].out_delay) { | |
clearTimeout(a2a[a2a.type].out_delay); | |
} | |
}, | |
/** | |
* @param {string} type | |
* @param {string} key | |
* @return {undefined} | |
*/ | |
toggle_dropdown : function(type, key) { | |
if (type == "none" && a2a[key].no_hide) { | |
return; | |
} | |
var target; | |
var flag = a2a.gEl; | |
var obj = flag("a2a" + key + "_dropdown"); | |
var next = flag("a2a" + key + "_shim"); | |
/** @type {string} */ | |
var event = "mousedown"; | |
/** @type {string} */ | |
var name = "mouseup"; | |
var focus = document.activeElement; | |
/** @type {string} */ | |
obj.style.display = type; | |
if (next && a2a.getStyle(flag("a2a" + key + "_full"), "display") == "none") { | |
/** @type {string} */ | |
next.style.display = type; | |
} | |
a2a.onMouseOver_stay(); | |
if (type == "none") { | |
if (!window.addEventListener) { | |
target = document.detachEvent; | |
target("on" + event, a2a.doc_mousedown_check_scroll); | |
target("on" + name, a2a[key].doc_mouseup_toggle_dropdown); | |
} else { | |
if (a2a.has_touch) { | |
/** @type {string} */ | |
event = "touchstart"; | |
/** @type {string} */ | |
name = "touchend"; | |
} else { | |
if (a2a.has_pointer) { | |
/** @type {string} */ | |
event = "MSPointerDown"; | |
/** @type {string} */ | |
name = "MSPointerUp"; | |
} | |
} | |
document.removeEventListener(event, a2a.doc_mousedown_check_scroll, false); | |
document.removeEventListener(name, a2a[key].doc_mouseup_toggle_dropdown, false); | |
/** @type {null} */ | |
a2a.touch_used = null; | |
} | |
delete a2a[key].doc_mouseup_toggle_dropdown; | |
} else { | |
if (!a2a[key].onclick) { | |
/** @type {number} */ | |
a2a[key].time_open = setTimeout(function() { | |
/** @type {string} */ | |
a2a[key].time_open = "OK"; | |
}, 501); | |
} | |
} | |
if (a2a[key].prev_keydown) { | |
document.onkeydown = a2a[key].prev_keydown; | |
} else { | |
/** @type {string} */ | |
document.onkeydown = ""; | |
} | |
}, | |
/** | |
* @param {?} node | |
* @return {?} | |
*/ | |
getData : function(node) { | |
if (!node) { | |
return{}; | |
} | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = node.attributes.length; | |
var field; | |
var data = {}; | |
for (;i < valuesLen;i++) { | |
field = node.attributes[i]; | |
if (field.name && field.name.substr(0, 5) == "data-") { | |
data[field.name.substr(5)] = field.value; | |
} | |
} | |
return data; | |
}, | |
/** | |
* @param {Element} node | |
* @param {string} style | |
* @return {?} | |
*/ | |
getStyle : function(node, style) { | |
return node.currentStyle ? node.currentStyle[style.replace(/-(\w)/gi, function(dataAndEvents, letter) { | |
return letter.toUpperCase(); | |
})] : window.getComputedStyle(node, null).getPropertyValue(style); | |
}, | |
/** | |
* @param {Element} elm | |
* @return {?} | |
*/ | |
getPos : function(elm) { | |
var otherElementRect; | |
/** @type {function (*): number} */ | |
var round = Math.round; | |
if (typeof elm.getBoundingClientRect == "undefined") { | |
return a2a.getPosOld(elm); | |
} else { | |
otherElementRect = elm.getBoundingClientRect(); | |
} | |
return{ | |
left : round(otherElementRect.left + a2a.getScrollDocDims("w")), | |
top : round(otherElementRect.top + a2a.getScrollDocDims("h")) | |
}; | |
}, | |
/** | |
* @param {Element} elm | |
* @return {?} | |
*/ | |
getPosOld : function(elm) { | |
/** @type {number} */ | |
var pickWinLeft = 0; | |
/** @type {number} */ | |
var pickWinTop = 0; | |
do { | |
pickWinLeft += elm.offsetLeft || 0; | |
pickWinTop += elm.offsetTop || 0; | |
elm = elm.offsetParent; | |
} while (elm); | |
return{ | |
left : pickWinLeft, | |
top : pickWinTop | |
}; | |
}, | |
/** | |
* @param {string} x | |
* @return {?} | |
*/ | |
getDocDims : function(x) { | |
/** @type {number} */ | |
var viewportwidth = 0; | |
/** @type {number} */ | |
var viewportheight = 0; | |
if (typeof window.innerWidth == "number") { | |
/** @type {number} */ | |
viewportwidth = window.innerWidth; | |
/** @type {number} */ | |
viewportheight = window.innerHeight; | |
} else { | |
if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { | |
/** @type {number} */ | |
viewportwidth = document.documentElement.clientWidth; | |
/** @type {number} */ | |
viewportheight = document.documentElement.clientHeight; | |
} else { | |
if (document.body && (document.body.clientWidth || document.body.clientHeight)) { | |
/** @type {number} */ | |
viewportwidth = document.body.clientWidth; | |
/** @type {number} */ | |
viewportheight = document.body.clientHeight; | |
} | |
} | |
} | |
if (x == "w") { | |
return viewportwidth; | |
} else { | |
return viewportheight; | |
} | |
}, | |
/** | |
* @param {string} x | |
* @return {?} | |
*/ | |
getScrollDocDims : function(x) { | |
/** @type {number} */ | |
var scroll_width = 0; | |
/** @type {number} */ | |
var s = 0; | |
if (typeof window.pageYOffset == "number") { | |
/** @type {number} */ | |
scroll_width = window.pageXOffset; | |
/** @type {number} */ | |
s = window.pageYOffset; | |
} else { | |
if (document.body && (document.body.scrollLeft || document.body.scrollTop)) { | |
/** @type {number} */ | |
scroll_width = document.body.scrollLeft; | |
/** @type {number} */ | |
s = document.body.scrollTop; | |
} else { | |
if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { | |
/** @type {number} */ | |
scroll_width = document.documentElement.scrollLeft; | |
/** @type {number} */ | |
s = document.documentElement.scrollTop; | |
} | |
} | |
} | |
if (x == "w") { | |
return scroll_width; | |
} else { | |
return s; | |
} | |
}, | |
/** | |
* @param {number} recurring | |
* @return {?} | |
*/ | |
show_more_less : function(recurring) { | |
a2a.onMouseOver_stay(); | |
var type = a2a.type; | |
/** @type {string} */ | |
var msg = "a2a" + type; | |
var toVLQSigned = a2a.gEl; | |
var vlq = toVLQSigned(msg + "_show_more_less"); | |
a2a.show_full(); | |
a2a.embeds_fix(true); | |
if (recurring == 0) { | |
return false; | |
} | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
focus_find : function() { | |
var el = a2a.gEl("a2a" + a2a.type + "_find"); | |
if (el.parentNode.style.display != "none") { | |
el.focus(); | |
} | |
}, | |
/** | |
* @param {string} regex | |
* @return {undefined} | |
*/ | |
default_services : function(regex) { | |
var unlock = regex || a2a.type; | |
var cTaskName1 = a2a[unlock].main_services_col_1; | |
var numrows = cTaskName1.length; | |
/** @type {number} */ | |
var k = 0; | |
for (;k < numrows;k++) { | |
/** @type {string} */ | |
cTaskName1[k].style.display = ""; | |
} | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
do_find : function() { | |
var networkState = a2a.type; | |
var cTaskName1 = a2a[networkState].main_services; | |
var numrows = cTaskName1.length; | |
var filter = a2a.gEl("a2a" + networkState + "_find").value; | |
var reversed; | |
var hasKey = a2a.in_array; | |
if (filter !== "") { | |
reversed = filter.split(" "); | |
/** @type {number} */ | |
var k = 0; | |
var result; | |
for (;k < numrows;k++) { | |
result = cTaskName1[k].a2a.serviceNameLowerCase; | |
if (hasKey(result, reversed, false)) { | |
/** @type {string} */ | |
cTaskName1[k].style.display = ""; | |
} else { | |
/** @type {string} */ | |
cTaskName1[k].style.display = "none"; | |
} | |
} | |
} else { | |
a2a.default_services(); | |
} | |
}, | |
/** | |
* @return {?} | |
*/ | |
selection : function() { | |
var title; | |
/** @type {NodeList} */ | |
var metas = document.getElementsByTagName("meta"); | |
/** @type {number} */ | |
var l = metas.length; | |
if (window.getSelection) { | |
/** @type {(Selection|null)} */ | |
title = window.getSelection(); | |
} else { | |
if (document.selection) { | |
try { | |
/** @type {(ControlRange|TextRange|null)} */ | |
title = document.selection.createRange(); | |
} catch (f) { | |
/** @type {string} */ | |
title = ""; | |
} | |
title = title.text ? title.text : ""; | |
} | |
} | |
if (title && title != "") { | |
return title; | |
} | |
if (a2a["n" + a2a.n].linkurl == location.href) { | |
/** @type {number} */ | |
var i = 0; | |
var v; | |
var pos; | |
for (;i < l;i++) { | |
v = metas[i].getAttribute("name"); | |
if (v) { | |
if (v.toLowerCase() == "description") { | |
pos = metas[i].getAttribute("content"); | |
break; | |
} | |
} | |
} | |
} | |
return pos ? pos.substring(0, 1200) : ""; | |
}, | |
/** | |
* @param {string} n | |
* @return {undefined} | |
*/ | |
collections : function(n) { | |
var md5_cmn = a2a.gEl; | |
var a = a2a[n]; | |
/** @type {string} */ | |
var endOffset = "a2a" + n; | |
a.main_services_col_1 = a2a.getByClass("a2a_i", md5_cmn(endOffset + "_full_services"), "a"); | |
a.main_services = a.main_services_col_1; | |
a.email_services = a2a.getByClass("a2a_i", md5_cmn(endOffset + "_2_col1", "a")); | |
a.all_services = a.main_services.concat(a.email_services); | |
}, | |
/** | |
* @param {string} name | |
* @param {?} classProps | |
* @return {?} | |
*/ | |
cbs : function(name, classProps) { | |
var values = a2a.c.callbacks || []; | |
var old = a2a.c.tracking_callback; | |
var obj = {}; | |
if (old) { | |
if (old[name]) { | |
values.push(old); | |
} else { | |
if (old[0] == name) { | |
obj[name] = old[1]; | |
values.push(obj); | |
} else { | |
if (typeof old == "function") { | |
/** @type {Function} */ | |
obj[name] = old; | |
values.push(obj); | |
} | |
} | |
} | |
/** @type {null} */ | |
a2a.c.tracking_callback = null; | |
} | |
/** @type {number} */ | |
var i = 0; | |
var valuesLen = values.length; | |
var callback; | |
for (;i < valuesLen;i++) { | |
callback = values[i][name]; | |
if (typeof callback == "function") { | |
returned = callback(classProps); | |
if (name == "ready") { | |
/** @type {null} */ | |
callback = null; | |
} | |
if (typeof returned != "undefined") { | |
return returned; | |
} | |
} | |
} | |
}, | |
/** | |
* @param {Element} a | |
* @return {?} | |
*/ | |
linker : function(a) { | |
/** @type {string} */ | |
var myUrl = location.href; | |
/** @type {string} */ | |
var html = document.title || myUrl; | |
var opts = a2a["n" + (a.parentNode.a2a_index || a2a.n)]; | |
var p = opts.node; | |
var type = opts.type; | |
var auto = a2a.getData(p)["a2a-url"] || opts.linkurl; | |
var dir = opts.linkurl_implicit && myUrl != auto ? myUrl : auto; | |
/** @type {string} */ | |
var guess = encodeURIComponent(dir).replace(/'/g, "%27"); | |
var report = a2a.getData(p)["a2a-title"] || opts.linkname; | |
var text = opts.linkname_implicit && html != report ? html : report; | |
/** @type {string} */ | |
var js = encodeURIComponent(text).replace(/'/g, "%27"); | |
/** @type {string} */ | |
var camelKey = encodeURIComponent(a2a.selection()).replace(/'/g, "%27"); | |
/** @type {string} */ | |
var args = opts.track_links && (type == "page" || type == "mail") ? "&linktrack=" + opts.track_links + "&linktrackkey=" + encodeURIComponent(opts.track_links_key) : ""; | |
var unique = a.a2a.customserviceuri || false; | |
var name = a.a2a.safename; | |
var op = a.a2a.stype; | |
var no_in = a.a2a.js_src; | |
var data; | |
var item = a2a.c.templates; | |
if (op && (op == "js" && no_in)) { | |
/** @type {string} */ | |
a.target = ""; | |
data = no_in.substr(0, 11) == "javascript:" ? no_in : 'javascript:a2a.loadExtScript("' + no_in + '")'; | |
} else { | |
if (unique && unique != "undefined") { | |
data = unique.replace(/A2A_LINKNAME_ENC/, js).replace(/A2A_LINKURL_ENC/, guess).replace(/A2A_LINKNOTE_ENC/, camelKey); | |
} | |
} | |
a.href = data || "http://www.addtoany.com/add_to/" + name + "?linkurl=" + guess + "&linkname=" + js + args + (a2a.c.awesm ? "&linktrack_parent=" + a2a.c.awesm : "") + (name == "twitter" && item[name] ? "&template=" + encodeURIComponent(item[name]) : "") + ((name == "email" || op && op == "email") && item.email ? "&" + a2a.serialize({ | |
template : item.email | |
}) : "") + (type == "feed" ? "&type=feed" : "") + "&linknote=" + camelKey; | |
return true; | |
}, | |
/** | |
* @return {undefined} | |
*/ | |
show_full : function() { | |
var value = a2a.type; | |
/** @type {string} */ | |
var tval = "a2a" + value; | |
var jqLite = a2a.gEl; | |
var requestFrame = a2a.getByClass; | |
var selector = jqLite(tval + "_find"); | |
var elm = jqLite(tval + "_overlay"); | |
var d = jqLite(tval + "_shim"); | |
var element = jqLite(tval + "_full"); | |
var node = requestFrame("a2a_full_header", element)[0]; | |
var select = jqLite(tval + "_full_services"); | |
var p = requestFrame("a2a_full_footer", element)[0]; | |
var animation = element.style.animation; | |
/** @type {string} */ | |
element.style.animation = elm.style.animation = "none"; | |
element.offsetTop; | |
elm.offsetTop; | |
/** @type {string} */ | |
element.style.animation = elm.style.animation = ""; | |
/** @type {string} */ | |
element.style.display = elm.style.display = "block" |