您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Opens the original link instead of the pocket View! (please use Ctrl+click)
- // ==UserScript==
- // @name Pocket-goto-Original
- // @namespace garyli.rocks
- // @description Opens the original link instead of the pocket View! (please use Ctrl+click)
- // @include http://getpocket.com/my-list*
- // @include https://getpocket.com/my-list*
- // @version 2.0
- // ==/UserScript==
- (function (window) {
- 'use strict';
- // add a new class for original link
- const customStyle = document.createElement('style');
- customStyle.innerText = `
- a.__original_link {
- text-decoration: none;
- }
- a.__original_link:hover {
- text-decoration: none !important;
- }
- a.__original_link h2::before {
- margin-right: .2em;
- padding: .2em;
- padding-left: 0;
- content: '○';
- position: relative;
- top: -1px;
- }
- a.__original_link:hover h2::before {
- content: '●';
- }
- `;
- document.querySelector('head').appendChild(customStyle);
- function addOriginalLinks() {
- console.log('Add original links');
- const allItems = window.__NEXT_REDUX_WRAPPER_STORE__.getState()
- .myListItemsById;
- // wrap title in an <a> element with original url
- document
- .querySelectorAll('article[data-cy^=article-card-]')
- .forEach(function (e) {
- if (e.dataset['original_link_added']) {
- return;
- }
- const itemId = e.dataset['cy'].replace(/article-card-(\d+)/, '$1');
- if (allItems[itemId]) {
- const originalUrl = allItems[itemId]['save_url'];
- const originalLink = document.createElement('a');
- originalLink.href = originalUrl;
- originalLink.classList.add('__original_link');
- originalLink.append(e.querySelector('h2'));
- e.querySelector('.content').prepend(originalLink);
- }
- e.dataset['original_link_added'] = 'true';
- });
- }
- let prevList;
- const getListNode = () => {
- return document.querySelector('.main header + div');
- };
- const config = { subtree: true, childList: true };
- // Callback function to execute when mutations are observed
- const callback = function (mutationsList, observer) {
- for (const mutation of mutationsList) {
- addOriginalLinks();
- }
- };
- // Create an observer instance linked to the callback function
- const observer = new MutationObserver(callback);
- const checkList = setInterval(function () {
- const newList = getListNode();
- if (newList !== prevList) {
- if (observer) {
- observer.disconnect();
- }
- if (newList) {
- console.log('A new list loaded');
- prevList = newList;
- addOriginalLinks();
- // Start observing the target node for configured mutations
- observer.observe(prevList, config);
- } else {
- console.log('waiting');
- }
- }
- }, 1000);
- })(window.unsafeWindow);