- // ==UserScript==
- // @name Developer Subscriber
- // @namespace tag://kongregate
- // @description Subscribe to developers by playlisting games
- // @author UnknownGuardian
- // @version 1.0.1
- // @date 03.22.2013
- // @include http://www.kongregate.com*
- // ==/UserScript==
-
- function main() {
-
- var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
- console.log("wat");
- function init() {
- console.log("I love developers init");
-
-
- var url = dom.location.href;
- url = url.substr(url.indexOf(".com/") + ".com/".length);
-
- var directory;
- if(url.indexOf("/") != -1)
- directory = url.substring(0,url.indexOf("/"));
- else
- directory = url;
-
- directory = directory.split("?")[0];
- console.log("directory: " + directory);
-
- if(directory == "games")
- {
- //add buttons to subscribe
- addSubscribeButton();
- }
- else if(directory == "my_playlist" || directory == "play_laters")
- {
- //show all devs subscribed to
- showAllSubscriptions();
- }
- else if(directory == "accounts")
- {
- //show profile button
- addProfileSubscribeButton();
- }
-
-
- var lastCheck = getLastDateChecked();
- var today = new Date();
- if(lastCheck == "" || (today.getTime() - new Date(lastCheck).getTime())/(1000*60*60) > 12)
- {
- pullLastGamesFromDevelopers();
- }
- }
-
- function pullLastGamesFromDevelopers()
- {
- Cookie.set('DevSubscribeLastCheck', "" + new Date(), 100000000,'/');
- console.log("Pulling games from all devs");
- var list = getAllSubscribed();
- list.each(function(item){
- new Ajax.Request("http://www.kongregate.com/accounts/" + item, {
- method:'get',
- onComplete: function(transport){
- console.log("Pulled list from developer" + item);
- handleDevProfilePage(item, transport.responseText);
- //alert('Yay' + transport.responseText + 'asdasd');
- //return false;
- }
- });
- });
- }
-
- function handleDevProfilePage(developer, text)
- {
- if(text.indexOf("pod_head_header") != 0 )
- {
- var start = text.indexOf("pod_game_header") + "pod_game_header".length + 18;
- var subtext = text.substr(start,250);
- var end = subtext.indexOf('" class="')
- var gameURL = subtext.substring(0,end);
- console.log("got game url at " + gameURL);
- text = text.substring(start + end + 50);
-
- if(gameURL == "")
- return;
-
- var lastGameRead = getLastGameSavedFromDev(developer);
- var gameName = gameURL.substring(gameURL.lastIndexOf("/"))+1;
- if(lastGameRead == "")
- {
- Cookie.set("sub_last_" + developer, gameName, 100000000,'/');
- console.log("we didn't have any last saved, so lets just store what exists")
-
- }
- else if(lastGameRead != gameName)
- {
- //set to last game pulled
- Cookie.set("s_l_" + developer, gameName, 100000000,'/');
- //POST to http://www.kongregate.com/play_laters
- new Ajax.Request(gameURL + "/metrics.json", {
- method:'get',
- onComplete: function(transport){
- addToPlayList(transport.responseText);
-
- //alert('Yay' + transport.responseText + 'asdasd');
- //return false;
- }
- });
-
- }
- }
- }
-
- function addToPlayList(text)
- {
- var id = text.substring(text.indexOf("?game_id=") + "?game_id=".length);
- id = id.substring(0,id.indexOf('"')-1)
- new Ajax.Request("http://www.kongregate.com/play_laters", {
- method:'post',
- parameters: {
- "game_id":id
- },
- onComplete: function(transport){
- console.log("Success adding " + id + " to play list");
- }
- });
- }
-
- function showAllSubscriptions()
- {
- console.log("showing all subscriptions");
- var table = '<div class="category_listing"><div class="category_listing_header"><div class="sort_filter mrm"><span class="plm">Subscriptions</span></div><div class="clear"></div></div><div class="category_games_listing hasLayout"><div class="large_sub_pod_column_one"><div class="sub_listing" style="font-size:12px;background-color: #FFFFFF;"id="sub_browser_game_row_1"></div></div><div class="clear"></div></div></div><div><div class="clear"></div><br />';
- var target = $$(".adspacer").length == 0? $$(".category_listing")[0] : $$(".adspacer")[0];
- target.insert({after:table});
- console.log("showing all subscriptions kinda");
-
- var list = getAllSubscribed();
-
- //case insensitive sort
- list.sort(
- function(a, b) {
- if (a.toLowerCase() < b.toLowerCase()) return -1;
- if (a.toLowerCase() > b.toLowerCase()) return 1;
- return 0;
- }
- );
-
-
- list.each(function(item){
- console.log("Adding item " + item);
-
- var container = new Element("div", {"style":"display:block;"});
-
-
- var linkElement = new Element("a", {"style":"min-width:200px; float:left; padding-top:2px; padding-bottom:2px;", "href":"http://www.kongregate.com/accounts/" + item});
- linkElement.update(item);
- var subElement = new Element("a",{"href":"#", "style":"min-width:500px;color:#888;float:left;padding-left: 4px;padding-top:2px; padding-bottom:2px;"});
- subElement.update("Unsubscribe");
- subElement.id = "unsubscribe_" + item;
- subElement.onclick = unsubscribeToADev;
-
-
- container.insert(linkElement);
- container.insert(subElement);
-
- $("sub_browser_game_row_1").insert(container)
- });
- }
-
- function addProfileSubscribeButton()
- {
- //use something generic that is on profiles to prevent other pages from passing this possibly.
- if($$("#games_by_user_pod").length == 0)
- return;
-
- var subElement = new Element("a",{"href":"#", "style":"color:#888;padding-left: 4px;"});
- var devname = dom.location.href.substring(dom.location.href.indexOf(".com/accounts/") + ".com/accounts/".length);
- if(!isDevSubscribedTo(devname))
- {
- subElement.update("Subscribe");
- subElement.id = "subscribe_" + devname;
- subElement.onclick = subscribeToADev;
- }
- else
- {
- subElement.update("Unsubscribe");
- subElement.id = "unsubscribe_" + devname;
- subElement.onclick = unsubscribeToADev;
- }
-
- $$("#games_by_user_pod")[0].down().down().down().insert(subElement);
- }
-
- function addSubscribeButton() {
- //change css
- var rulesText = ".game_details_outer .game_dev { float: none;}";
- rulesText += ".game_details_outer {padding-bottom:5px;}"
- rulesText += ".game_details_outer .game_detail {padding-bottom:5px;}"
- var head = document.getElementsByTagName('head')[0],
- style = document.createElement('style'),
- rules = document.createTextNode(rulesText);
- style.type = 'text/css';
- if(style.styleSheet)
- style.styleSheet.cssText = rules.nodeValue;
- else style.appendChild(rules);
- head.appendChild(style);
-
-
- //add links
- var btn = '<a><span class="kong_ico" aria-hidden="true">b </span>Subscribe</a>';
- var devs = $$(".game_dev");
- devs.each(function(item){
- var devurl = item.down().href;
- var devname = devurl.substring(devurl.lastIndexOf("/")+1);
-
- var subElement = new Element("a",{"href":"#", "style":"color:#888;padding-left: 4px;"});
- if(!isDevSubscribedTo(devname))
- {
- subElement.update("Subscribe");
- subElement.id = "subscribe_" + devname;
- subElement.onclick = subscribeToADev;
- }
- else
- {
- subElement.update("Unsubscribe");
- subElement.id = "unsubscribe_" + devname;
- subElement.onclick = unsubscribeToADev;
- }
- item.insert(subElement);
- });
- }
-
- function subscribeToADev(e)
- {
- e.preventDefault();
-
- var list = getAllSubscribed();
- var dev = this.id.substring("subscribe_".length)
- list.push(dev)
-
- var savelist = list.join(",");
- Cookie.set('DevSubscribeList', savelist, 100000000,'/');
-
- this.id= "unsubscribe_" + dev;
- this.update("Unsubscribe");
- this.onclick = unsubscribeToADev;
-
- return false;
- }
-
- function unsubscribeToADev(e)
- {
- e.preventDefault();
-
- var list = getAllSubscribed();
- var dev = this.id.substring("unsubscribe_".length)
- if(list.indexOf(dev) != -1)
- {
- list.splice(list.indexOf(dev),1);
- }
-
- var savelist = list.join(",");
- Cookie.set('DevSubscribeList', savelist, 100000000,'/');
-
- this.id= "subscribe_" + dev;
- this.update("Subscribe");
- this.onclick = subscribeToADev;
-
- return false;
- }
-
- function isDevSubscribedTo(devName)
- {
- var list = getAllSubscribed();
- if(list.indexOf(devName) == -1)
- return false;
- return true;
- }
-
- function getAllSubscribed() {
- var list = Cookie.get("DevSubscribeList");
- if(list == null)
- return [];
- return list.split(",");
- }
-
- function getLastDateChecked() {
- var time = Cookie.get("DevSubscribeLastCheck");
- if(time == null)
- time = new Date(0);
- return time;
- }
-
- function getLastGameSavedFromDev(developer) {
- var game = Cookie.get("s_l_" + developer);
- if(game == null)
- game = "";
- return game;
- }
-
- init();
- }
-
- // This injects our script onto the page.
- // Borrowed from: http://stackoverflow.com/a/2303228
- var script = document.createElement('script');
- script.appendChild(document.createTextNode('('+ main +')();'));
- (document.body || document.head || document.documentElement).appendChild(script);