您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds interface to comments to easily insert formatting options in HTML
当前为
- // ==UserScript==
- // @name AO3: Comment Formatting Options
- // @namespace adustyspectacle
- // @description Adds interface to comments to easily insert formatting options in HTML
- // @include http://*archiveofourown.org/*
- // @include https://*archiveofourown.org/*
- // @version 1.1
- // @history 1.1 updated include urls
- // @history 1.0 initial
- // @grant none
- // ==/UserScript==
- (function($) {
- //
- var ICONIFY = true;
- //
- if (ICONIFY) {
- var font_awesome_icons = document.createElement('script');
- font_awesome_icons.setAttribute('src', 'https://use.fontawesome.com/ed555db3cc.js');
- document.getElementsByTagName('head')[0].appendChild(font_awesome_icons);
- var fa_icons_css = document.createElement('style');
- fa_icons_css.setAttribute('type', 'text/css');
- fa_icons_css.innerHTML = `
- .comment-formatting {
- font-family: FontAwesome, sans-serif;
- }
- `
- document.getElementsByTagName('head')[0].appendChild(fa_icons_css);
- }
- function addCommentFormattingUI(commentId) {
- var postCommentField = $(commentId);
- var commentUniqueId = postCommentField[0].id.slice(20);
- var commentFormatting = document.createElement("ul");
- var commentFormattingOptions = {
- bold_text: [["Bold", ""], ["<strong>", "</strong>"]],
- italic_text: [["Italic", ""], ["<em>", "</em>"]],
- underline_text: [["Underline", ""], ["<u>", "</u>"]],
- strike_text: [["Strikethrough", ""], ["<s>", "</s>"]],
- insert_link: [["Insert Link", ""], ['<a href="">', "</a>"]],
- insert_image: [["Insert Image", ""], ['<img src="">']],
- blockquote_text: [["Blockquote", ""], ["<blockquote>", "</blockquote>"]]
- }
- commentFormatting.setAttribute("id", "comment_formatting_for_" + commentUniqueId);
- commentFormatting.setAttribute("class", "actions comment-formatting");
- commentFormatting.setAttribute("style", "float: left; text-align: left;");
- commentFormatting.innerHTML = "<h4>Formatting Options:</h4>";
- postCommentField.before(commentFormatting);
- for (let key in commentFormattingOptions) {
- var commentFormattingOptionItem = document.createElement("li");
- var commentFormattingOptionLink = document.createElement("a");
- let commentFormattingOptionItemId = key + "_" + commentUniqueId;
- commentFormattingOptionItem.setAttribute("id", commentFormattingOptionItemId);
- commentFormattingOptionItem.setAttribute("class", key);
- commentFormattingOptionItem.setAttribute("title", commentFormattingOptions[key][0][0]);
- if (ICONIFY) commentFormattingOptionLink.innerHTML = commentFormattingOptions[key][0][1];
- else commentFormattingOptionLink.innerHTML = commentFormattingOptions[key][0][0];
- commentFormattingOptionItem.appendChild(commentFormattingOptionLink);
- commentFormatting.appendChild(commentFormattingOptionItem);
- $("#" + commentFormattingOptionItemId).on('click', 'a', function() {
- var caretPos = $(commentId)[0].selectionStart;
- var caretEnd = $(commentId)[0].selectionEnd;
- var textAreaTxt = $(commentId).val();
- if (caretPos == caretEnd) {
- var formatToAdd = commentFormattingOptions[key][1].join("");
- } else {
- var textAreaHighlight = textAreaTxt.slice(caretPos, caretEnd);
- var formatToAdd = commentFormattingOptions[key][1].join(textAreaHighlight);
- }
- $(commentId).val(textAreaTxt.substring(0, caretPos) + formatToAdd + textAreaTxt.substring(caretEnd) );
- $(commentId).focus();
- $(commentId)[0].selectionStart = caretPos + txtToAdd.length
- $(commentId)[0].selectionEnd = caretPos + txtToAdd.length
- });
- }
- }
- // For the Add Comment area found in works/tags
- if ( $("#add_comment textarea").length ) {
- add_comment_box_id = $("#add_comment textarea")[0].id;
- addCommentFormattingUI("#" + add_comment_box_id);
- }
- // This whole bit is for Reply Comments stuff, because AJAX
- $( document ).ajaxSuccess(function( event, xhr, settings ) {
- if (settings.url.indexOf("add_comment_reply?id") !== -1) {
- // This is for tag comments
- var sliceStart = settings.url.indexOf("id=") + 3;
- var sliceEnd = settings.url.indexOf("&tag_id");
- var commentReplyId = settings.url.slice(sliceStart, sliceEnd);
- var commentReplyIdSelector = $("#comment_content_for_" + commentReplyId).selector;
- addCommentFormattingUI(commentReplyIdSelector);
- }
- else if (settings.url.indexOf("add_comment_reply?chapter_id") !== -1) {
- // This is for work comments
- var sliceStart = settings.url.indexOf("&id=") + 4;
- var sliceEnd = settings.url.indexOf("&view");
- if (settings.url.indexOf("view_full_work=true") !== -1) {
- var commentReplyId = settings.url.slice(sliceStart, sliceEnd);
- } else {
- var commentReplyId = settings.url.slice(sliceStart);
- }
- var commentReplyIdSelector = $("#comment_content_for_" + commentReplyId).selector;
- addCommentFormattingUI(commentReplyIdSelector);
- }
- else if (settings.url.indexOf("inbox/reply?") !== -1) {
- // This is for inbox comments
- var sliceStart = settings.url.indexOf("id=") + 3;
- var commentReplyId = settings.url.slice(sliceStart);
- var commentReplyIdSelector = $("#comment_content_for_" + commentReplyId).selector;
- addCommentFormattingUI(commentReplyIdSelector);
- }
- });
- })(jQuery);