Created
March 13, 2017 08:58
-
-
Save kowith337/e2c4c51d536702c873966cc33d9c440c to your computer and use it in GitHub Desktop.
[2017/03/13] http://gelbooru.com/script/application.js
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
/** | |
* NeverBlock | |
* | |
* Version 2.13 | |
* Copyright (C) 2016 EXADS | |
*/ | |
var ExoLoader = (function () { | |
var version = '2.13'; | |
var setCookie = function (name, value, minutes_ttl) { | |
var exdate = new Date(); | |
exdate.setMinutes(exdate.getMinutes() + minutes_ttl); | |
var c_value = encodeURI(value) + "; expires=" + exdate.toUTCString() + "; path=/"; | |
document.cookie = name + "=" + c_value; | |
}; | |
var URLToArray = function(url) { | |
var request = {}; | |
var pairs = url.substring(url.indexOf('?') + 1).split('&'); | |
for (var i = 0; i < pairs.length; i++) { | |
if(!pairs[i]) | |
continue; | |
var pair = pairs[i].split('='); | |
request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); | |
} | |
return request; | |
}; | |
var openLink = function (event, dest) { | |
if ( typeof(event) != "undefined" ) { | |
event.returnValue = false; | |
if ( event.preventDefault ) { | |
event.preventDefault(); | |
} | |
event.stopPropagation(); | |
} | |
var url_parts = dest.split('?', 2); | |
var parameters = URLToArray(url_parts[1]); | |
var f = document.createElement("form"); | |
f.setAttribute("action", url_parts[0]); | |
f.setAttribute("method", "post"); | |
f.setAttribute("target", "_blank"); | |
document.getElementsByTagName("body").item(0).appendChild(f); | |
for (var i in parameters) { | |
var input = document.createElement("input"); | |
input.setAttribute("type", "hidden"); | |
input.setAttribute("name", i); | |
input.setAttribute("value", parameters[i]); | |
f.appendChild(input); | |
} | |
f.submit(); | |
document.getElementsByTagName("body").item(0).removeChild(f); | |
return false; | |
}; | |
var stylesheet = "{ border: 0px solid #000000; width: %width%px; height: %height%px; display: inline-block; background-color: rgba(0, 0, 0, 0); margin: 0px 0px; padding: 0px 0px; }"; | |
var ad_types = ['banner', 'popunder']; | |
var zone_params = {}; | |
var dom = {}; | |
var debug_messages = []; | |
var error_messages = []; | |
var addDebugMessage = function (message) { | |
var date = new Date(); | |
debug_messages.push(date.toISOString() + ": " + message); | |
}; | |
var addErrorMessage = function (message) { | |
var date = new Date(); | |
error_messages.push(date.toISOString() + ": " + message); | |
console.error(message); | |
}; | |
var stringify = function (value) { | |
var reassign_when_finished = false; | |
if (typeof Array.prototype.toJSON !== 'undefined') { | |
reassign_when_finished = true; | |
var array_to_json = Array.prototype.toJSON; | |
delete Array.prototype.toJSON; | |
} | |
var val = JSON.stringify(value); | |
if (reassign_when_finished) { | |
Array.prototype.toJSON = array_to_json; | |
} | |
return val; | |
}; | |
var randStr = function (length, possibleChars) | |
{ | |
var text = ""; | |
var possible = possibleChars || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
for( var i=0; i < length; i++ ) | |
text += possible.charAt(Math.floor(Math.random() * possible.length)); | |
return text; | |
}; | |
var createStyle = function (doc, dom_anchor, style_text) | |
{ | |
var class_name = randStr(1,"abcdefghijklmnopqrstuvwxyz") + randStr(7); | |
style_text = "." + class_name + " " + style_text; | |
var style = doc.createElement('style'); | |
style.setAttribute('type', 'text/css'); | |
style.innerHTML = style_text; | |
dom_anchor.parentNode.insertBefore(style, dom_anchor); | |
return class_name; | |
}; | |
var loader = { | |
cookie_name: "exo_zones", | |
addZone: function(params) { | |
if (typeof exo99HL3903jjdxtrnLoad != "undefined" && exo99HL3903jjdxtrnLoad) { | |
return false; | |
} | |
if (typeof params != 'object' | |
|| typeof params.type == 'undefined' | |
|| ad_types.indexOf(params.type) == -1 | |
) { | |
addErrorMessage("addZone() invalid params"); | |
return false; | |
} | |
var doc = params.doc || document; | |
var scripts = doc.getElementsByTagName('script'); | |
// The current <script> tag where the method is called | |
var here = scripts[ scripts.length - 1 ]; | |
var type = params.type; | |
delete params.type; | |
if (typeof zone_params[type] == 'undefined') { | |
dom[type] = []; | |
zone_params[type] = []; | |
} | |
zone_params[type].push(params); | |
if (type == 'banner') { | |
var style_text = stylesheet.replace('%width%', params.width) | |
.replace('%height%', params.height); | |
var class_name = createStyle(doc, here, style_text); | |
var placeholder = doc.createElement('div'); | |
placeholder.setAttribute('class', class_name); | |
here.parentNode.insertBefore(placeholder, here); | |
dom[type].push({'placeholder': placeholder, 'doc_reference': doc}); | |
} | |
addDebugMessage("addZone() " + type + " " + params.idzone + " added"); | |
return true; | |
}, | |
renderBannerZone: function (id, img_data, dest) { | |
var idzone = zone_params['banner'][id]['idzone']; | |
addDebugMessage("renderBannerZone() #" + id + " called for zone " + idzone); | |
if (typeof dom['banner'][id] == 'undefined' | |
|| typeof img_data != 'object' | |
|| typeof img_data.img == 'undefined' | |
|| typeof img_data.content_type == 'undefined' | |
|| typeof dest == 'undefined' | |
) { | |
addErrorMessage("renderBannerZone() #" + id + " corrupt params for zone " + idzone); | |
return false; | |
} | |
if ( | |
typeof dom['banner'][id]["doc_reference"] == 'undefined' || | |
typeof dom['banner'][id]["doc_reference"].body == 'undefined' || | |
!dom['banner'][id]["doc_reference"].body.contains(dom['banner'][id]['placeholder']) | |
) { | |
addErrorMessage("renderBannerZone() #" + id + " dom placeholder is not present for zone " + idzone); | |
return false; | |
} | |
var style_text = "{ background-image: url('data:" + img_data.content_type + ";base64," + img_data.img + "'); background-repeat: no-repeat; cursor: pointer; }"; | |
var class_name = createStyle(dom['banner'][id]["doc_reference"], dom['banner'][id]['placeholder'], style_text); | |
var current_class = dom['banner'][id]['placeholder'].getAttribute('class'); | |
dom['banner'][id]['placeholder'].setAttribute('class', current_class + " " + class_name); | |
dom['banner'][id]['placeholder'].onclick = (function(dest) { | |
return function(event) { | |
openLink(event, dest); | |
}; | |
})(dest); | |
}, | |
renderBannerZones: function (response) { | |
addDebugMessage("renderBannerZones() called"); | |
if (typeof response != 'object' | |
|| typeof response.zones != 'object' | |
|| typeof response.images != 'object' | |
) { | |
addDebugMessage("renderBannerZones() empty zones or images"); | |
return; | |
} | |
for (var i = 0; i < response.zones.length; i++) { | |
if (typeof zone_params['banner'][i] == 'undefined' || | |
typeof zone_params['banner'][i]['idzone'] == 'undefined' | |
) { | |
addErrorMessage("renderBannerZones() zone info missing"); | |
} | |
var idzone = zone_params['banner'][i]['idzone']; | |
if (response.zones[i] == false) { | |
addDebugMessage("renderBannerZones() nothing to show for zone " + idzone); | |
continue; | |
} | |
var img_key = response.zones[i].img_key; | |
this.renderBannerZone(i, response.images[img_key], response.zones[i].dest); | |
} | |
}, | |
serve: function(params) { | |
if (typeof exo99HL3903jjdxtrnLoad != "undefined" && exo99HL3903jjdxtrnLoad) { | |
addDebugMessage("serve() ad blocker not enabled"); | |
return false; | |
} | |
var zones_added = false; | |
for (var type_index = 0; type_index < ad_types.length; type_index++) { | |
if (typeof zone_params[ad_types[type_index]] !== 'undefined' && zone_params[ad_types[type_index]].length > 0) { | |
zones_added = true; | |
break; | |
} | |
} | |
if (!zones_added) { | |
addErrorMessage("serve() called but no zones added"); | |
return false; | |
} | |
window.exoNoExternalUI38djdkjDDJsio96 = true; | |
addDebugMessage("serve() called"); | |
setCookie(this.cookie_name, stringify(zone_params), 5); | |
var loadDataScript = function () { | |
var dataScript = document.createElement("script"); | |
dataScript.async = true; | |
dataScript.setAttribute('type', 'text/javascript'); | |
dataScript.setAttribute('src', params.script_url); | |
dataScript.onload = function(){ | |
addDebugMessage("serve() hosted script loaded"); | |
}; | |
document.getElementsByTagName("body").item(0).appendChild(dataScript); | |
}; | |
if (!params.force) { | |
if (window.addEventListener) { | |
window.addEventListener("load", loadDataScript, false); | |
} else if (window.attachEvent) { | |
window.attachEvent("onload", loadDataScript); | |
} else { | |
window.onload = loadDataScript; | |
} | |
} else { | |
loadDataScript(); | |
} | |
return true; | |
}, | |
getDebug: function() { | |
for (var i = 0; i < debug_messages.length; i++) { | |
console.log(debug_messages[i]); | |
} | |
}, | |
getVersion: function() { | |
return version; | |
} | |
}; | |
return loader; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment