// ==UserScript==
// @name Dynasty Thingifier
// @namespace Alice Cheshire
// @include http://dynasty-scans.com/*
// @version 1.3.4.3
// @require http://code.jquery.com/jquery-2.1.4.min.js
// @description Adds post links and quote stuff to Dynasty forums
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValue
// @run-at document-end
// ==/UserScript==
varinit();
checkpostpage();
genmenu();
menuclicks();
cleardata();
configload();
setuserid();
if (window.isuserpostsurl.match(/http:\/\/dynasty-scans.com\/forum\/posts\?user_id=\d+/)) {
window.isuserpostsurl = window.isuserpostsurl.replace(/\d+/, ""); //Replaces the user id in the url
}
for (i = 0; i < window.postcount; i++){
var id = window.postids[i].toString(); //Temporarily store the post id under the key of 'i' into a variable to use in our next bit
if(window.isuserpostsurl !== "http://dynasty-scans.com/forum/posts?user_id=") {
$(".time").eq(i).replaceWith("<div class=\"span5 time\"><a href=\"" + window.pageurl + "#" + id + "\">" + $(".time").eq(i).text() + "</a></div>"); //If we're not on the user posts page then we turn all post timestamps on a page into an anchor link
}
}
$('a').hover(function(e) { //When we click a link run this code
if ($(e.target).text() == "Quote") { //Make sure that the clicked link is the quote button
var quoteid = $(e.target).parents(); //Gets all the parent elements of our link
quoteid = quoteid[4]; //Selects the fourth parent which is the .forum_post parent of the link
quoteid = $(quoteid).attr('id'); //Gets the id of the .forum_post parent
quoteid = "#" + quoteid; //Adds a url anchor sign to the id
quoteid = quoteid.toString(); //Converts it to a string to make sure it cooperates
GM_setValue("quoteid", window.pageurl + quoteid);
var quotename = $(quoteid).find(".user").text(); //Retrieve the quoted user's name
quotename = quotename.replace(/Staff|Moderator|Uploader/, ""); //For staff, mods, and uploaders find and remove their title
quotename = $.trim(quotename); //Trim the whitespace/newlines off the beginning and end
GM_setValue("quotename", quotename);
console.log("Quote id: " + GM_getValue("quoteid") + ", Quote name: " + GMgetValue("quotename"));
} else { /*This is where code would run if we were doing anything for clicking other links*/ }
});
//Checks if we're on the posting page
function checkpostpage() {
var quoting = pageurl.replace(/http:\/\/dynasty-scans.com\/forum\//, "");
quoting = quoting.replace(/\?.+/, "");
if (quoting === "posts/new") {
var post = GM_getValue("quoteid");
var username = GM_getValue("quotename");
console.log(post + "\n" + username);
quote = "[" + username + "](" + post + ")";
message = "\n" + document.getElementById('forum_post_message').value;
document.getElementById('forum_post_message').value = quote + message;
}
}
//Initializes our global variables
function varinit() {
window.pageurl = document.location.toString(); //Stores the entire value of the address bar into a variable
window.isuserpostsurl = window.pageurl; //Stores the address variable a second time for use in a different function
window.postids = []; //Initializes a blank array for the postids
window.postcount = 0; //Counter to keep track of how many posts are on the current page
window.pageurl = window.pageurl.replace(/(#.+)/, ""); //Removes any anchors from the stored url so we don't get issues with multiple anchors showing up
$('.forum_post').each(function() {
window.postids.push(this.id); //For each element of the class forum_post push the element's id to our postids array
});
$('.time').each(function(i, obj) {
window.postcount++; //This is where we actually count how many posts are on the page
});
console.log("Line 81");
var tmp;
if (GM_getValue("youruserid", "Not set") === undefined) {
tmp = "Not set";
} else {
tmp = GM_getValue("youruserid", "Not set");
}
console.log("Your id: " + tmp);
if (tmp.match(/\d+/)) {
window.yourid = "http://dynasty-scans.com/forum/posts?user_id=" + GM_getValue("youruserid");
window.useridset = true;
console.log("Your id: " + window.yourid + ", ID set? " + window.useridset);
} else {
window.yourid = "Your user id isn't set!";
window.useridset = false;
console.log(window.useridset);
}
window.configmenustate = true;
}
function genmenu(){
var menustructure = '\
<style>\
#thingifier * { padding: 0; margin: 0; }\
#thingifier {\
float: left;\
position: fixed;\
top: 45%;\
z-index: 1000000;\
}\
#thingifier-options {\
border: 1px solid black;\
padding: 8px;\
background: aliceblue;\
border-bottom-right-radius: 6px;\
border-left-width: 0;\
}\
#thingifier-options ul { list-style-type: none; margin-left: -4px;}\
#thingifier-options ul > li { vertical-align: middle; }\
#thingifier ul li input { padding-right: 4px; }\
#thingifier-font-size { width: 96px; }\
#thingifier-toggle-button {\
position: absolute;\
top: 0;\
left: calc(100% - 1px);\
width: 24px;\
height: 24px;\
border: 1px solid black;\
background-color: aliceblue;\
color: red;\
border-top-right-radius: 6px;\
border-bottom-right-radius: 6px;\
border-left-width: 0;\
}\
.spoilers-disabled {\
background: #666 none repeat scroll 0% 0%;\
color: #fff;\
}\
.navbar-fixed {\
position: fixed;\
z-index: 1000;\
width: 1210px;\
}\
.pull-right-fixed, .nav-collapse-fixed {\
float: right;\
}\
.nav-padding {\
height: 60px;\
width: 1210px;\
}\
</style>\
<div id=\"thingifier\">\
<div id=\"thingifier-options\">\
<ul>\
<li><input type=\"checkbox\" id=\"thingifier-unhide-spoilers\"> Unhide spoilers</li>\
<li><input type=\"checkbox\" id=\"thingifier-fixed-navbar\"> Fixed navbar</li>\
<li><input type=\"checkbox\" id=\"thingifier-pagination\"> Add page selector to top of page</li>\
<li><input type=\"checkbox\" id=\"thingifier-bbcode-buttons\" disabled=\"true\"> Add quick reply and post page bbcode buttons</li>\
<li><input type=\"checkbox\" id=\"thingifier-quote-to-quickreply\" disabled=\"true\"> Quote to quick reply instead of new post page</li>\
<li><input type=\"checkbox\" id=\"thingifier-quote-move-quickreply\" disabled=\"true\"> Move quick reply to under quoted post</li>\
<li><input type=\"range\" id=\"thingifier-font-size\" min=\"1\" max=\"5\" disabled=\"true\"> Change font size</li>\
<li><a href=\"' + window.yourid + '\" id=\"thingifier-ownposts\"> Your posts</a></li>\
<li><input type="text" id="useridinput"><input type="button" value="Submit user id" id="useridsubmit"></li>\
<li><input type=\"button\" id=\"thingifier-clear\" value=\"Clear stored data\"></li>\
</ul>\
</div>\
<div id=\"thingified-toggle\">\
<input type=\"button" id=\"thingifier-toggle-button\" value=\"X\">\
</div></div>';
$('body').prepend(menustructure);
$('#useridinput').hide();
$('#useridsubmit').hide();
if (!window.useridset) {
console.log("Checking if user id is set to prepare to replace menu, " + window.useridset);
GM_deleteValue("youruserid");
$('#thingifier-ownposts').hide();
$('#useridinput').show();
$('#useridsubmit').show();
setuserid();
} else {
console.log("Checking if user id is set to prepare to replace menu, " + window.useridset);
}
}
function setuserid() {
GM_deleteValue("youruserid");
console.log("setuserid function is being executed");
$('input#useridsubmit').click(function () {
console.log($("input#useridinput").val());
if($("input#useridinput").val().match(/^\d+$/)) {
console.log($("input#useridinput").val());
GM_setValue("youruserid", $('input#useridinput').val());
$('#useridinput').hide();
$('#useridsubmit').hide();
$('#thingifier-ownposts').show();
$('#thingifier-ownposts').attr('href', "http://dynasty-scans.com/forum/posts?user_id=" + GM_getValue("youruserid"));
} else {
console.log($("input#useridinput").val());
$("input#useridinput").val();
$('input#useridinput').val("Invalid user id!");
}
});
}
function cleardata() {
$('#thingifier-clear').click(function() {
console.log("Clear button clicked");
var x = window.confirm("Are you sure you want to clear your stored data?");
if (x) {
GM_deleteValue("youruserid");
GM_deleteValue("quoteid");
GM_deleteValue("quotename");
GM_deleteValue("spoilers");
GM_deleteValue("navbar");
GM_deleteValue("pagination");
console.log(GM_getValue("youruserid", "Not set"));
console.log(GM_getValue("quoteid", "Not set"));
console.log(GM_getValue("quotename", "Not set"));
console.log(GM_getValue("spoilers", "Not set"));
console.log(GM_getValue("navbar", "Not set"));
console.log(GM_getValue("pagination", "Not set"));
document.location.reload(true);
} else {
console.log("Decided against it");
}
});
}
function menuclicks() {
$('#thingifier-toggle-button').click(function() {
$("#thingifier-options").animate({width:'toggle', height:'toggle'},350);
window.configmenustate ^= true;
if (window.configmenustate) {
$('#thingifier-toggle-button').val('▶');
} else {
$('#thingifier-toggle-button').val('◀');
}
GM_setValue("configmenustate", window.configmenustate);
});
$('#thingifier-unhide-spoilers').click(function() {
if ($('#thingifier-unhide-spoilers').is(":checked")) {
GM_setValue("spoilers", $('#thingifier-unhide-spoilers').is(":checked"));
$('.spoilers').addClass('spoilers-disabled');
} else {
GM_setValue("spoilers", $('#thingifier-unhide-spoilers').is(":checked"));
$('.spoilers').removeClass('spoilers-disabled');
}
});
$('#thingifier-fixed-navbar').click(function() {
if ($('#thingifier-fixed-navbar').is(":checked")) {
GM_setValue("navbar", $('#thingifier-fixed-navbar').is(":checked"));
$('.navbar').addClass('navbar-fixed');
$("<div class=\"nav-padding\"></div>").insertAfter(".navbar");
} else {
GM_setValue("navbar", $('#thingifier-fixed-navbar').is(":checked"));
$('.navbar').removeClass('navbar-fixed');
$('div.nav-padding').remove();
}
});
$('#thingifier-pagination').click(function() {
if ($('#thingifier-pagination').is(":checked")) {
GM_setValue("pagination", $('#thingifier-pagination').is(":checked"));
$("div.pagination").wrap('<div class=\"tmp\">').parent().html();
var tmp = $('div.tmp').html();
$("div.pagination").unwrap();
$('.posts').prepend(tmp);
} else {
GM_setValue("pagination", $('#thingifier-pagination').is(":checked"));
$("div.pagination").first().remove();
}
});
}
function configload() {
window.configmenustate = GM_getValue("configmenustate", 1);
if (window.configmenustate) {
$("#thingifier-options").animate({width:'toggle', height:'toggle'},0);
$('#thingifier-toggle-button').val('▶');
} else {
$('#thingifier-toggle-button').val('◀');
}
window.configspoiler = GM_getValue("spoilers", false);
if (window.configspoiler) {
$('.spoilers').addClass('spoilers-disabled');
$('#thingifier-unhide-spoilers').prop('checked', true);
}
window.confignavbar = GM_getValue("navbar", false);
if (window.confignavbar ) {
$('.navbar').addClass('navbar-fixed');
$("<div class=\"nav-padding\"></div>").insertAfter(".navbar");
$('#thingifier-fixed-navbar').prop('checked', true);
}
window.configpagination = GM_getValue("pagination", false);
if (window.configpagination ) {
$("div.pagination").wrap('<div class=\"tmp\">').parent().html();
var tmp = $('div.tmp').html();
$("div.pagination").unwrap();
$('.posts').prepend(tmp);
$('#thingifier-pagination').prop('checked', true);
}
}