您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Subscribe to developers by playlisting games
// ==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);