Plethora GodLove Channel
a!function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var a = "function" == typeof require && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); var f = new Error("Cannot find module '" + o + "'"); throw f.code = "MODULE_NOT_FOUND", f } var l = n[o] = { exports: {} }; t[o][0].call(l.exports, function(e) { var n = t[o][1][e]; return s(n ? n : e) }, l, l.exports, e, t, n, r) } return n[o].exports } for (var i = "function" == typeof require && require, o = 0; o < r.length; o++) s(r[o]); return s }({ 1: [function(require, module, exports) { module.exports = { chromeCanary: "epnpbkpfpmpbheinimppjadpcbkechhk", environment: "development", fdetect: !0, icons: !0, logger: { level: "DEBUG", enable: "*" } } } , {}], 2: [function(require, module, exports) { module.exports = { chromeCanary: "epnpbkpfpmpbheinimppjadpcbkechhk", environment: "production", fdetect: !0, icons: !1, logger: { level: "ERROR", enable: "" } } } , {}], 3: [function(require, module, exports) { (function(process) { function parseQueryProperty(prop) { var res = prop; return res = JSON.parse(JSON.stringify(res).replace(/[\[\]]/g, "")), "true" === prop ? res = !0 : "false" === prop && (res = !1), res } function saveOverrides(overrides) { "object" == typeof chrome && chrome.storage && chrome.storage.local ? (logger.log("config", "udpating overrides in localstorage"), chrome.storage.local.set({ overrides: overrides })) : persistenceUtils.setItem("overrides", JSON.stringify(overrides)) } var UrlParser = require("url-parser") , _ = require("underscore") , logger = require("../logger") , persistenceUtils = require("../persistence/utils.js") , configuration = require("./env/production"); "development" === process.env.CS_ENV && (configuration = require("./env/development")); var QUERY_PREFIX = exports.QUERY_PREFIX = "pb_"; exports = module.exports = configuration, exports.processQuery = function(query) { logger.log("config", "processsing query params"), query = query || UrlParser.parse(location.href, !0).query; var overrides = exports.queryToConfig(query); _.keys(overrides).length && (logger.info("config", "overriding configuration from query: ", overrides), _.extend(configuration, overrides), saveOverrides(overrides)) } , exports.processLocalStorage = function(callback) { function applyOverrides(overrides, callback) { _.keys(overrides).length && (logger.info("config", "overriding configuration from localstorage: ", overrides), _.extend(configuration, overrides)), callback && callback(configuration) } if (logger.log("config", "processing localstorage"), "object" == typeof chrome && chrome.storage && chrome.storage.local) chrome.storage.local.get("overrides", function(result) { applyOverrides(result.overrides, callback) }); else if (persistenceUtils.getItem("overrides")) { var overrides = {}; try { overrides = JSON.parse(persistenceUtils.getItem("overrides")) } catch (e) { logger.warn("config", "can't parse localStorage.overrides", persistenceUtils.getItem("overrides"), "error", e) } finally { applyOverrides(overrides, callback) } } else callback && callback(configuration) } , exports.queryToConfig = function(query) { return _.keys(query).filter(function(key) { return 0 === key.indexOf(QUERY_PREFIX) }).reduce(function(config, key) { return config[key.replace(QUERY_PREFIX, "")] = parseQueryProperty(query[key]), config }, {}) } } ).call(this, require("_process")) } , { "../logger": 130, "../persistence/utils.js": 140, "./env/development": 1, "./env/production": 2, _process: 218, underscore: "underscore", "url-parser": 233 }], 4: [function(require, module, exports) { function getUniquePath(node, optimized, ctx) { if (ctx = ctx || document, !node || 1 !== node.nodeType) return ""; for (var formNode, steps = [], contextNode = node, chainingValue = " > "; contextNode; ) { var step = _cssPathStep(contextNode, !!optimized, ctx); if (!step) break; if (steps.push(step), steps.length > 1 && "form" === contextNode.nodeName.toLowerCase()) { if (chainingValue = " ", !step.optimized) { var unqiueFormPath = getUniquePath(contextNode, !1); steps[steps.length - 1].value = unqiueFormPath } break } if (step.optimized) break; if (1 === steps.length) { var forms = $(node, ctx).parents("form"); formNode = forms.length && forms[0] } contextNode = formNode || contextNode.parentNode } return steps.reverse(), steps.join(chainingValue) } function _cssPathStep(node, optimized, ctx) { function areMultipleElementsWithSameId(id) { return id = escapeIdentifierIfNeeded(id), $('[id="' + id + '"]', ctx).length > 1 } function isDynamicId(id) { return /[0-9]/.test(id) } function isValidId(id) { return !isDynamicId(id) && !areMultipleElementsWithSameId(id) } function prefixedElementClassNames(node) { var classAttribute = node.getAttribute("class"); return classAttribute ? classAttribute.split(/\s+/g).filter(Boolean).map(function(name) { return "$" + name }) : [] } function idSelector(id) { return "#" + escapeIdentifierIfNeeded(id) } function escapeIdentifierIfNeeded(ident) { if (isCSSIdentifier(ident)) return ident; var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident) , lastIndex = ident.length - 1; return ident.replace(/./g, function(c, i) { return shouldEscapeFirst && 0 === i || !isCSSIdentChar(c) ? escapeAsciiChar(c, i === lastIndex) : c }) } function escapeAsciiChar(c, isLast) { return "\\" + toHexByte(c) + (isLast ? "" : " ") } function toHexByte(c) { var hexByte = c.charCodeAt(0).toString(16); return 1 === hexByte.length && (hexByte = "0" + hexByte), hexByte } function isCSSIdentChar(c) { return !!/[a-zA-Z0-9_-]/.test(c) || c.charCodeAt(0) >= 160 } function isCSSIdentifier(value) { return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value) } if (1 !== node.nodeType) return null; var id = node.getAttribute("id"); if (optimized) { if (id && isValidId(id)) return new DOMNodePathStep(idSelector(id),!0); var nodeNameLower = node.nodeName.toLowerCase(); if ("body" === nodeNameLower || "head" === nodeNameLower || "html" === nodeNameLower) return new DOMNodePathStep(node.nodeName.toLowerCase(),!0) } var nodeName = node.nodeName.toLowerCase(); if (id && isValidId(id)) return new DOMNodePathStep(nodeName + idSelector(id),!0); var parent = node.parentNode; if (!parent || 9 === parent.nodeType) return new DOMNodePathStep(nodeName,!0); var result = nodeName , isGoodEnoughSelector = !1; if ("input" === nodeName.toLowerCase() || "button" === nodeName.toLowerCase() ? node.getAttribute("name") ? (result += '[name="' + node.getAttribute("name") + '"]', isGoodEnoughSelector = !0) : node.getAttribute("type") && (result += '[type="' + node.getAttribute("type") + '"]') : "form" === nodeName.toLowerCase() && node.getAttribute("name") && !isDynamicId(node.getAttribute("name")) && (result += '[name="' + node.getAttribute("name") + '"]', isGoodEnoughSelector = !0), $(result).length > 1 && (isGoodEnoughSelector = !1), isGoodEnoughSelector) return new DOMNodePathStep(result,!0); for (var prefixedOwnClassNamesArray = prefixedElementClassNames(node), needsClassNames = !1, needsNthChild = !1, ownIndex = -1, elementIndex = -1, siblings = parent.children || 0, i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) { var sibling = siblings[i]; if (1 === sibling.nodeType) if (elementIndex += 1, sibling !== node) { if (!needsNthChild && sibling.nodeName.toLowerCase() === nodeName) { needsClassNames = !0; var ownClassNames = keySet(prefixedOwnClassNamesArray) , ownClassNameCount = 0; for (var name in ownClassNames) ++ownClassNameCount; if (0 !== ownClassNameCount) for (var siblingClassNamesArray = prefixedElementClassNames(sibling), j = 0; j < siblingClassNamesArray.length; ++j) { var siblingClass = siblingClassNamesArray[j]; if (ownClassNames.hasOwnProperty(siblingClass) && (delete ownClassNames[siblingClass], !--ownClassNameCount)) { needsNthChild = !0; break } } else needsNthChild = !0 } } else ownIndex = elementIndex } if (needsNthChild) result += ":nth-child(" + (ownIndex + 1) + ")"; else if (needsClassNames) for (var prefixedName in keySet(prefixedOwnClassNamesArray)) result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1)); return new DOMNodePathStep(result,!1) } function keySet(array) { for (var keys = {}, i = 0; i < array.length; ++i) keys[array[i]] = !0; return keys } var $ = require("jquery"); module.exports = function(node, optimized, ctx) { return getUniquePath(node, optimized, ctx) } ; var DOMNodePathStep = function(value, optimized) { this.value = value, this.optimized = optimized || !1 }; DOMNodePathStep.prototype = { toString: function() { return this.value } } } , { jquery: "jquery" }], 5: [function(require, module, exports) { function hasNonDivChildren($element) { var hasNonDiv = !1; return $element.children().toArray().some(function(el) { return $(el).is("div") ? $(el).children().length > 0 && (hasNonDiv = hasNonDivChildren($(el))) : hasNonDiv = !0, hasNonDiv }) } var $ = require("jquery") , UrlParser = require("url-parser") , DomHelpers = {}; DomHelpers._activeTimers = {}, DomHelpers._timerIndex = 0, module.exports = DomHelpers, DomHelpers.waitFor = function(selector, opts, callback) { var timerIndex = DomHelpers._timerIndex; DomHelpers._timerIndex++, "function" == typeof opts && (callback = opts, opts = {}), opts = opts || {}, opts.interval = opts.interval || 500; var selectorFinder = DomHelpers._createSelectorFinder(selector, opts, timerIndex, callback); if (!selectorFinder()) { var intervalID = setInterval(selectorFinder, opts.interval); DomHelpers._activeTimers[timerIndex] = intervalID } } , DomHelpers.waitForElementToDissapear = function(element, interval, callback) { interval = interval || 500; var timerIndex = DomHelpers._timerIndex; DomHelpers._timerIndex++; var elementFinder = DomHelpers._createElementWatcher(element, timerIndex, callback); if (elementFinder()) { var intervalID = setInterval(elementFinder, interval); DomHelpers._activeTimers[timerIndex] = intervalID } } , DomHelpers._createElementWatcher = function(element, timerIndex, callback) { return function() { var isInDom = $.contains(document.documentElement, element); return isInDom || (clearInterval(DomHelpers._activeTimers[timerIndex]), callback(!0)), isInDom } } , DomHelpers._createSelectorFinder = function(selector, opts, timerIndex, callback) { return function() { var result; opts.getAll ? (result = $(selector).toArray(), result.length || (result = !1)) : result = $(selector).get(0); var doCallback; return doCallback = opts && opts.invert ? !result : result, doCallback && (clearInterval(DomHelpers._activeTimers[timerIndex]), callback(result)), !!result } } , DomHelpers.matchesIPv4 = function(test) { return !!test.match(/(?:\d{1,3}\.){3}\d{1,3}/) } , DomHelpers.getPageRequestTime = function() { return window.performance && window.performance.timing ? window.performance.timing.responseEnd - window.performance.timing.requestStart : -1 } , DomHelpers.getElement = function(selector) { var el; try { el = $(selector).get(0) } catch (e) {} return el } , DomHelpers.getElements = function(selector) { var els = []; try { els = $(selector).toArray() } catch (e) {} return els } , DomHelpers.getjQueryElement = function(selector) { var $el = $(); try { $el = $(selector) } catch (e) {} return $el } , DomHelpers.isValidSelector = function(selector) { try { $(selector) } catch (error) { return !1 } return !0 } , DomHelpers.isEmpty = function(selector) { var $element = $(selector); return !$element.length || (0 === $element.children().length || !hasNonDivChildren($element)) } , DomHelpers.removeQueryString = function(url) { var parsed = UrlParser.parse(url); return parsed.protocol + "//" + parsed.host + parsed.pathname } , DomHelpers.addImportantStyleAttribute = function($element, styleProperty, styleValue) { var oldStyle, newStyle = styleProperty + ": " + styleValue + " !important;"; $element.css(styleProperty, ""), oldStyle = $element.attr("style"), oldStyle = oldStyle ? oldStyle + " " : "", $element.attr("style", oldStyle + newStyle) } } , { jquery: "jquery", "url-parser": 233 }], 6: [function(require, module, exports) { function DomMessenger(localName, remoteName) { function sendRawMessage(className, attrs) { var el = $("
").addClass(className).attr(attrs).css({
display: "none"
}).appendTo("body");
setTimeout(function() {
el.click()
}, 0),
setTimeout(function() {
el.remove()
}, 3e3)
}
function sendMessage() {
var args = Array.prototype.slice.call(arguments);
receiverReady ? sendMessageImmediate.apply(this, args) : queue.push(args)
}
function isChannelEstablished() {
return receiverReady
}
function onReceiverReady() {
for (receiverReady = !0; queue.length > 0; )
sendMessageImmediate.apply(this, queue.pop())
}
function sendMessageImmediate(messageName, payload, callback) {
void 0 === callback && "function" == typeof payload && (callback = payload,
payload = null),
void 0 === payload && (payload = null);
var callbackId = newCallbackId();
callback && (callbacks[callbackId] = callback),
sendRawMessage(outgoingRequestClassName, {
"data-callback": callbackId,
"data-payload": JSON.stringify(payload),
"data-message": messageName
})
}
function newCallbackId() {
return ("" + Math.random()).replace("0.", "")
}
function setHandler(messageName, handler) {
handlers[messageName] = handler
}
function setHandlers(map) {
for (key in map)
setHandler(key, map[key])
}
function handleIncomingRequest(e) {
function replyCallback(response) {
sendRawMessage(outgoingResponseClassName, {
"data-callback": callbackId,
"data-payload": JSON.stringify(response)
})
}
var $el = $(e.currentTarget)
, callbackId = $el.attr("data-callback")
, payloadString = $el.attr("data-payload") || "null"
, message = $el.attr("data-message");
if ($el.remove(),
e.preventDefault(),
e.stopPropagation(),
"__ready__" === message)
return void onReceiverReady();
var payload = JSON.parse(payloadString)
, handler = handlers[message];
if (null == handler)
return void console.error("No handler for message:", message);
handler(payload, replyCallback)
}
function handleIncomingResponse(e) {
var $el = $(e.currentTarget)
, callbackId = $el.attr("data-callback")
, payloadString = $el.attr("data-payload") || "null"
, payload = JSON.parse(payloadString)
, callback = callbacks[callbackId];
delete callbacks[callbackId],
"function" == typeof callback && callback(payload),
$el.remove()
}
function initMessaging(localName, remoteName) {
var $body = $("body");
$body.on("click", "." + incomingRequestClassName, handleIncomingRequest),
$body.on("click", "." + incomingResponseClassName, handleIncomingResponse),
$body.attr("data-messenger-" + localName, "1"),
sendRawMessage(outgoingRequestClassName, {
"data-message": "__ready__"
}),
$("body").attr("data-messenger-" + remoteName) && (receiverReady = !0,
console.log("We loaded second"),
onReceiverReady())
}
var incomingRequestClassName = "messaging-" + remoteName + "-to-" + localName
, outgoingRequestClassName = "messaging-" + localName + "-to-" + remoteName
, incomingResponseClassName = outgoingRequestClassName + "-reply"
, outgoingResponseClassName = incomingRequestClassName + "-reply"
, handlers = {}
, callbacks = {}
, receiverReady = !1
, queue = [];
return $(document).ready(function() {
initMessaging(localName, remoteName)
}),
{
sendMessage: sendMessage,
setHandler: setHandler,
setHandlers: setHandlers,
isChannelEstablished: isChannelEstablished
}
}
var $ = require("jquery");
module.exports = DomMessenger
}
, {
jquery: "jquery"
}],
7: [function(require, module, exports) {
var EventEmitter2 = require("eventemitter2").EventEmitter2;
module.exports = function() {
return new EventEmitter2({
delimiter: ":"
})
}()
}
, {
eventemitter2: 151
}],
8: [function(require, module, exports) {
function filterAssets(assets, userName, appendString, compareCase) {
return assets.filter(function(asset) {
var assetUserName = compareCase ? asset.login : asset.login.toLowerCase();
return userName = compareCase ? userName : userName.toLowerCase(),
assetUserName === userName || assetUserName === userName + appendString || assetUserName + appendString === userName
})
}
function selExists(selector) {
var $sel = sanitizeSelector(selector);
return $sel ? $sel.length > 0 : void 0
}
function sanitizeSelector(selector) {
return "string" != typeof selector || matchHTML(selector) || !isSelectorSyntaxValid(selector) ? void 0 : $(selector)
}
function isSelectorSyntaxValid(selector) {
try {
$(selector)
} catch (e) {
return utils.sendMixpanelFailure({
atlas_error_type: "jQuery selector syntax threw an error on initialization",
invalid_selector: selector,
website_url: metrics.url
}),
!1
}
return !0
}
function matchHTML(selector) {
return !!(selector.match(/