您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
PM and edit from within topic in gamefaqs
当前为
- // ==UserScript==
- // @name Gamefaqs Quick PM and Quick Edit
- // @namespace N-eil
- // @version 0.8.3
- // @description PM and edit from within topic in gamefaqs
- // @include *.gamefaqs.com/boards/*
- // @grant none
- // ==/UserScript==
- var reg = /\/(\d+)/g //Makes a regex to get board and message ID from the url
- , boardID = reg.exec(location.href)[1]
- , topicID = reg.exec(location.href)[1];
- var key; //Gfaqs has a hidden field called "key" that is required to be filled with a certain code(different for each user) in order to post/edit/pm
- if(document.getElementsByName('key').length) //Look for the key on the page: quickposting is enabled
- {
- key = document.getElementsByName('key')[0].value;
- addLinks();
- }
- else
- {
- $.post("/boards/post.php?board=" + boardID + "&topic=" + topicID, {}).done(function(response){ //Otherwise, look for the key requesting a separate post message page
- key = response.match(/key" value="([^"]*)"/)[1];
- addLinks();
- });
- }
- //If neither method can find the key, don't bother adding the quick PM and edit links since they cannot function properly
- function addLinks(){
- var username = $(". a:first").html();
- username = username.substring(0,username.indexOf('(')-1);
- var $details = $(".msg_stats_left")
- , displayLeft = true;
- if (!$details.length){ //If nothing was found, they must have user details displayed above the message
- $details = $(".msg_stats");
- displayLeft = false;
- }
- $details.each(function(index, el) {
- var $el = $(el);
- if ($el.html().match(username))
- { //Ones with your username in them are your posts, and can be edited
- // $.post($el.find("a[title='Detail']").attr("href"), {}).done(function(response){ //Makes a request to the message detail page
- // if(response.match(/name="YES" value="Edit/)) //Looks in the response for the edit button, this could be tricked if you wrote the regex in the post but I don't think anyone would do that ever
- //{
- var editLink = $("<a> Edit </a>");
- editLink.click(function() {
- if (displayLeft)
- showEditWindow($(el).closest(".msg").find(".msg_body").clone());
- else
- showEditWindow($(el).closest(".top").next().find(".msg_body").clone());
- });
- $el.append(editLink);
- //}
- //});
- }
- else
- { //Other ones are posts from other users, and they can be PM'd
- var pmLink = $("<a> PM </a>");
- pmLink.click(function() {showPMWindow($el.find("a.name").html());});
- $el.append(pmLink);
- }
- });
- }
- function replaceButtons(){} //Placeholder function, modified when the edit window appears to replace the buttons in the relevant place
- function createPopup(text){
- replaceButtons();
- $("#popup-window").remove();
- var $window = $("<div id='popup-window'> " + text + " </div>")
- .css("left", "30%")
- .css("top","30%")
- .css("position", "fixed")
- .toggleClass("reg_dialog", true);
- $("body").prepend($window);
- return $window;
- }
- function showPMWindow(name) {
- var $PMWindow = createPopup("Send a PM to " + name)
- , $subject = $("<div>Subject: <input type='text' maxlength='100' /></div>")
- , $message = $("<div><textarea rows ='" + Math.floor($(window).height() / 45) + "' cols='80' maxlength='1024'></textarea></div>");
- var $send = $("<button style='margin: 5px;'>Send</button>").click(function() {sendPM(name, $subject.find("input").val(), $message.find("textarea").val()); setTimeout(function() {$PMWindow.remove();},5000);})
- , $cancel = $("<button style='margin: 5px;'>Cancel</button>").click(function() {$PMWindow.remove();});
- $PMWindow.append($subject).append($message).append($send).append($cancel);
- }
- function sendPM(name, subject, message) {
- name = name.slice(3,-4);
- $.post('/pm/new', {key: key, to: name, subject: subject, message: message, submit: 'Quick PM'}).done(function(){$("#popup-window textarea").val("PM sent.");});
- }
- function showEditWindow(message) {
- function stripTags(index, el) {
- //Function to strip out tags like links, TTI images, etc from the message.
- var $el = $(el);
- console.log(el);
- if ($el.hasClass("fspoiler")) //Things hidden in spoilers get this class, but should be turned back into tags
- $el.replaceWith("<spoiler>" + $el.html() + "</spoiler>");
- else if ($el.is("img"))
- $el.replaceWith($el.attr("src"));
- else if ($el.is("a"))
- $el.replaceWith($el.attr("href"));
- else
- $el.replaceWith($el.html());
- }
- //Parse the HTML message back into the way it looks while a user is typing
- message.html(message.html().replace(/<br>(?:<\/br>)?/g, '\n'));
- var tags = [1];
- while (tags.length) {
- tags = message.find(":not(b, i, code, blockquote, cite, spoiler)"); //Anything that isn't just a display tag has to have the original text stripped out of it to put in the edit messagebox
- tags.each(stripTags);
- }
- var messageID = message.attr("name")
- , $editWindow = createPopup("Edit your post")
- , $message = $("<div><textarea rows ='" + Math.floor($(window).height() / 45) + "' cols='80' maxlength='4096' name='messagetext'>" + message.html() + "</textarea></div>") //Height of textbox based roughly off height of screen, nothing exact but should ensure all the buttons are visible
- , $send = $("<button style='margin: 5px;'>Send</button>").click(function() {makeEdit($message.find("textarea").val(), boardID, topicID, messageID);})
- , $cancel = $("<button style='margin: 5px;'>Cancel</button>").click(function() {replaceButtons(); $editWindow.remove(); window.msgArea = document.getElementsByName('messagetext')[0];})
- , $buttons = $(".tagbuttons");
- if (!$buttons.length) //Either gameweasel or gamefox has replaced the html buttons with their own, so fetch those instead
- $buttons = $("#gamefox-html-buttons");
- var $buttonHolder = $buttons.prev();
- replaceButtons = function() {$buttonHolder.after($buttons);}; //Fills in the placeholder to replace the desired buttons, called either on cancelling the edit or when you edit another post
- $editWindow.append($("</br>")).append($buttons).append($message).append($send).append($cancel);
- window.msgArea = document.getElementsByName('messagetext')[0];
- }
- function makeEdit(message, board, topic, ID) {
- var url = "/boards/post.php?board=" + board + "&topic=" + topic + "&message=" + ID;
- $.post(url, {key: key, messagetext: message, post: 'Post without Preview'}).done(function() {location.reload();}).fail(function() {$("#popup-window textarea").val("Could not edit the post.");});
- }