您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
提取网页标题和URL,快捷生成各类标记语言引用链接文本并复制到系统剪贴板
// ==UserScript== // @name RefLinkGenerator // @name:en-us RefLinkGenerator // @name:zh-cn 引用链接生成器 // @namespace http://www.joshuazhang.net // @version 1.3 // @description:en-us Generate reference link in all kinds of markup languages like html, markdown etc and copy to system clipboard. // @description:zh-cn 提取网页标题和URL,快捷生成各类标记语言引用链接文本并复制到系统剪贴板 // @homepageURL https://coding.net/u/joshz/p/RefLinkGenerator/git // @supportURL https://coding.net/u/joshz/p/RefLinkGenerator/topic/all // @require https://code.jquery.com/jquery-1.11.3.min.js // @include http://* // @include https://* // @author joshz // @grant GM_addStyle // @run-at document-end // @noframes // @description Generate reference link in all kinds of markup languages like html, markdown etc and copy to system clipboard. // ==/UserScript== /* Tampermonkey reference -> https://tampermonkey.net/documentation.php 1. @noframes tag will prevent this script run inside iframe 2. GM_log is not very user friendly, use console.log instead See:console.log is not working when used in a Firefox, Greasemonkey script - Stack Overflow -> https://stackoverflow.com/questions/10135241/console-log-is-not-working-when-used-in-a-firefox-greasemonkey-script */ /* Add rlg-panel styles https://stackoverflow.com/a/707580/2709868 Just some basic style, mostly the panel style will inherit from current page. */ var style = "#rlg-panel {display:inline-block;position:fixed;top:10%;left:0;\ z-index:2147483647;background:#111;color:#fff;overflow:hidden;}\ #rlg-panel input{color:#111;margin:2px 8px 2px 8px;border-width:2px;border-color:#32cd32}\ #rlg-panel a{color:#fff;font-size:14px;text-decoration:none;\ border-style:solid;border-width:1px;border-color:#32cd32}\ #rlg-panel div{white-space:nowrap;margin:2px 10px 2px 10px;}"; // CSS to be added GM_addStyle(style); rlg_log("rlg-panel css loaded"); /* Retrieve page url and page title Page title is automatically acquired following order as such: 1. <title> tag content if exists 2. first <h1> tag content if exists 3. page url */ var page_url = window.location.href; // Obtain absolute URL of current page rlg_log('page_url => ' + page_url); var page_title; try { var tag_content_title = document.getElementsByTagName('title')[0].innerHTML; } catch(err) { rlg_log("Fail to retrieve content of tag <title>: " + err.message); } rlg_log('tag_content_title=> ' + tag_content_title); try { var tag_content_first_h1 = document.getElementsByTagName('h1')[0].innerHTML; } catch(err) { rlg_log("Fail to retrieve content of tag <h1>: " + err.message); } rlg_log('tag_content_first_h1=> ' + tag_content_first_h1); if (tag_content_title) { // tag_content_title exists and not null or undefined page_title = tag_content_title; } else if ( tag_content_first_h1) { // tag_content_first_h1 exists and not null or undefined page_title = tag_content_first_h1; } else { page_title = page_url; } rlg_log('page_title=> ' + page_title); /* Markup language settings Users may add their own markup language settings here */ var markup = [ // Specific names for different kinds of markup languages { // html button_name: "HTML", base_id: "rlg-html", makelink: function(page_title, page_url) { return '<a href="' + page_url + '">' + page_title + '<\/a>'; } }, { // markdown button_name: "Markdown", base_id: "rlg-markdown", makelink: function(page_title, page_url) { return '[' + page_title + "](" + page_url + ' "")'; } }, { // reStructured Text button_name: "reST", base_id: "rlg-rest", makelink: function(page_title, page_url) { return '`' + page_title + ' <' + page_url + '>`_'; } }, { // Org-mode button_name: "Orgmode", base_id: "rlg-orgmode", makelink: function(page_title, page_url) { return '[[' + page_url + '][' + page_title + ']]'; } }, { // LaTeX button_name: "LaTeX", base_id: "rlg-latex", makelink: function(page_title, page_url) { return '\\href{' + page_url + '}{' + page_title + '}'; } }, { // Plain Text button_name: "Plain Text", base_id: "rlg-text", makelink: function(page_title, page_url) { return page_title + ' -> ' + page_url; } } ]; // Auto-hide panel for generated texts and buttons // https://stackoverflow.com/questions/4811807/hidden-sidebar-that-shows-up-on-hover // here 20em is a magic number, I don't know how to make the width of // the rlg panel automatically fit to the content width $(function(){ $('#rlg-panel').hover( function(){$(this).animate({width:'20em'},500);}, function(){$(this).animate({width:'2px'},500);} ).trigger('mouseleave'); } ); function regenerate() { // onclick function for button "rlg-regenerate-button" var page_title = document.getElementById("rlg-title-input").value; rlg_log('regenerate page title :' + page_title); var page_url = window.location.href; rlg_log('regenerate page url :' + page_url); var id_tmp; for (var i=0; i<markup.length; ++i) { id_tmp=markup[i].base_id; rlg_log('regenerate link text of ' + id_tmp); document.getElementById(id_tmp+'-input').value=markup[i].makelink(page_title, page_url); rlg_log('link text of ' + id_tmp + ' has been modified'); } } function copy_to_system_clipboard(this_id) { // onclick function for buttons "rlg-[markup]-button" // https://stackoverflow.com/a/30810322/2709868 // Copy textarea or input text to system clipboard with one click // See:https://stackoverflow.com/a/30810322/2709868 // Seems IE and chrome support document.execCommand('copy') // Firefox doesn't support it and Safari not tested yet. rlg_log(this_id); var text_input = document.getElementById(this_id.replace('-button', '') + '-input'); rlg_log(this_id.replace('-button', '') + '-input'); text_input.select(); var hint_div = document.getElementById('rlg-hint'); try { var successful = document.execCommand('copy'); // TODO Is GM_setClipboard() more compatible? var msg = successful ? 'successful' : 'unsuccessful'; hint_div.setAttribute('style', 'color:lightgreen'); var markup_tmp = this_id.replace('-button', '').replace('rlg-', ''); hint_div.innerHTML = 'Copying generated ' + markup_tmp + ' link text to system clipboard was ' + msg; } catch (err) { hint_div.setAttribute('style', 'color:red'); hint_div.innerHTML = "Copying to system clipboard is not supported by your browser, you can copy it manually"; } } function rlg_log(log_text) { console.log('RefLinkGenerator LOG: ' + log_text); } /* Append rlg-panel div element into document.body */ var div_rlg_panel = document.createElement("div"); div_rlg_panel.id = "rlg-panel"; rlg_log("create div rlg-panel succeed"); // rlg-regenerate var input_regenerate_1 = document.createElement("input"); input_regenerate_1.type = "text"; input_regenerate_1.id = "rlg-title-input"; input_regenerate_1.value = page_title; var label_regenerate_1 = document.createElement("label"); label_regenerate_1.appendChild(input_regenerate_1); var input_regenerate_2 = document.createElement("input"); input_regenerate_2.type = "button"; input_regenerate_2.id = "rlg-regenerate-button"; input_regenerate_2.value = "Regenerate"; input_regenerate_2.addEventListener("click", regenerate); var label_regenerate_2 = document.createElement("label"); label_regenerate_2.appendChild(input_regenerate_2); var div_rlg_regenerate = document.createElement("div"); div_rlg_regenerate.id = "rlg-regenerate"; div_rlg_regenerate.appendChild(label_regenerate_1); div_rlg_regenerate.appendChild(label_regenerate_2); div_rlg_panel.appendChild(div_rlg_regenerate); rlg_log("create div rlg-regenerate succeed"); // rlg-[markup]-button and rlg-[markup]-input for (var j=0; j<markup.length; ++j) { var div_markup = document.createElement("div"); var label_1 = document.createElement("label"); var label_2 = document.createElement("label"); var input_1 = document.createElement("input"); var input_2 = document.createElement("input"); input_1.type = "text"; input_1.id = markup[j].base_id + "-input"; input_1.value = markup[j].makelink(page_title, page_url); label_1.appendChild(input_1); input_2.type = "button"; input_2.id = markup[j].base_id + "-button"; input_2.value = markup[j].button_name; // Important stuff about addEventListener: // http://www.w3schools.com/js/js_htmldom_eventlistener.asp // http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Avoid_Common_Pitfalls input_2.addEventListener("click", function() {copy_to_system_clipboard(this.id);}); label_2.appendChild(input_2); div_markup.appendChild(label_1); div_markup.appendChild(label_2); div_rlg_panel.appendChild(div_markup); rlg_log(markup[j].button_name + " appended"); } // rlg-hint var div_rlg_hint = document.createElement("div"); div_rlg_hint.id = "rlg-hint"; div_rlg_panel.appendChild(div_rlg_hint); document.body.appendChild(div_rlg_panel);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址