您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Format contents on Stack Enchange websites such as stackoverflow.com and askubuntu.com for easy saving to Evernote.
当前为
- // ==UserScript==
- // @name Stack Exchange Formatter
- // @namespace https://greasyfork.org/en/users/211578
- // @version 0.2
- // @description Format contents on Stack Enchange websites such as stackoverflow.com and askubuntu.com for easy saving to Evernote.
- // @author twchen
- // @include https://stackoverflow.com/questions/*
- // @include https://*.stackexchange.com/questions/*
- // @include https://superuser.com/questions/*
- // @include https://serverfault.com/questions/*
- // @include https://askubuntu.com/questions/*
- // @run-at document-idle
- // ==/UserScript==
- (function () {
- "use strict";
- const description = document.querySelector("#question .postcell .post-text");
- const body = document.body;
- let saveDesc = true;
- const answersToSave = [];
- function addLinks() {
- const answers = document.querySelectorAll(".answer > .post-layout");
- answers.forEach(ans => {
- const text = ans.querySelector(".answercell .post-text");
- const menu = ans.querySelector(".post-menu");
- const saveAnsLink = document.createElement("a");
- saveAnsLink.href = "#";
- saveAnsLink.text = 'save this answer';
- saveAnsLink.onclick = event => {
- event.preventDefault();
- answersToSave.push(text);
- saveDesc = false;
- save();
- };
- const saveQALink = document.createElement('a');
- saveQALink.href = '#';
- saveQALink.text = 'save this Q&A';
- saveQALink.onclick = event => {
- event.preventDefault();
- answersToSave.push(text);
- save();
- };
- menu.append(saveAnsLink, saveQALink);
- });
- const div = document.createElement('div');
- div.classList.add('pl8', 'aside-cta', 'grid--cell');
- const chooseLink = document.createElement('a');
- chooseLink.href = "#";
- chooseLink.classList.add("d-inline-flex", "ai-center", "ws-nowrap", "s-btn", "s-btn__primary");
- chooseLink.text = "Save Multiple Answers";
- chooseLink.onclick = event => {
- event.preventDefault();
- startChoosing();
- };
- div.appendChild(chooseLink);
- const header = document.querySelector('#question-header');
- header.append(div);
- }
- function startChoosing() {
- const votingContainers = document.querySelectorAll('.js-voting-container');
- votingContainers.forEach((container, i) => {
- const checkbox = document.createElement('input');
- checkbox.type = 'checkbox';
- checkbox.id = `checkbox${i}`;
- checkbox.style.margin = 'auto';
- const label = document.createElement('label');
- label.htmlFor = `checkbox${i}`;
- label.innerText = 'Keep';
- label.style.margin = 'auto';
- container.prepend(checkbox, label);
- });
- const doneButton = document.createElement('button');
- doneButton.innerText = "Done";
- Object.assign(doneButton.style, {
- position: 'fixed',
- right: '2rem',
- top: '50%',
- zIndex: '100'
- });
- doneButton.onclick = event => {
- event.preventDefault();
- doneChoosing();
- };
- body.appendChild(doneButton);
- }
- function doneChoosing() {
- const question = document.querySelector('#question');
- const questionCheckbox = question.querySelector('.js-voting-container input[type="checkbox"]');
- saveDesc = questionCheckbox.checked;
- const answers = document.querySelectorAll(".answer > .post-layout");
- answers.forEach(ans => {
- const text = ans.querySelector(".answercell .post-text");
- const checkbox = ans.querySelector(".js-voting-container input[type='checkbox']");
- if (checkbox.checked) {
- answersToSave.push(text);
- }
- });
- if (answersToSave.length == 0) {
- alert('Choose at least one answer to save!');
- } else {
- save();
- }
- }
- function save() {
- removeAllChildren(body);
- const div = document.createElement("div");
- div.style.margin = 'auto';
- const posts = saveDesc ? [description, ...answersToSave] : answersToSave;
- posts.forEach((post, i) => {
- if(i > 0 || (!saveDesc && answersToSave.length > 1)){
- const hr = document.createElement("hr");
- hr.style.height = '3px';
- hr.style.marginTop = '4rem';
- div.appendChild(hr);
- }
- div.appendChild(post);
- });
- body.appendChild(div);
- }
- function removeAllChildren(el) {
- while (el.firstChild) {
- el.removeChild(el.firstChild);
- }
- }
- addLinks();
- })();