[ARCHIWUM]Notatkowator 2020

Szybki podgląd notek

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        [ARCHIWUM]Notatkowator 2020
// @description Szybki podgląd notek
// @version     2.5
// @author      piokom123, look997
// @include     https://www.wykop.pl/*
// @homepageURL https://www.wykop.pl/ludzie/addons/look997/
// @namespace	  https://www.wykop.pl/ludzie/addons/look997/
// @grant       GM_xmlhttpRequest
// @require     https://greasyfork.org/scripts/437595-wykopobserve/code/WykopObserve.js?version=1002287
// @run-at      document-end
// @resource    metadata https://greasyfork.org/scripts/437598-notatkowator-2020/code/Notatkowator%202020.user.js
// @icon        https://www.google.com/s2/favicons?domain=wykop.pl
// @icon64      https://www.google.com/s2/favicons?domain=wykop.pl
// ==/UserScript==
/// <reference path="./wykopObserve.js" />

(async function () {
"use strict";

// const VSCodeLMDate = "2022/07/12 18:51:50";
// const diffTime = Math.abs(Date.now() - new Date(VSCodeLMDate).getTime())/1000;
// console.log(VSCodeLMDate, `${Math.floor(diffTime)} secs ago`);


//#region HEAD

/**
	* Parses user notes list HTML and returns as object
	* @param {Document} document
	*/
function parseNotes (document) {
	/**
	 * @type {{ nick: string; val: string; }[]}
	 */
	const userNotes = [];
	
	// const too = document.querySelectorAll('#notesList li p');
	// console.log("to",document);
	document.querySelectorAll('#notesList li p').forEach((item,index)=>{
		// console.log("item",item)
		const abEl = /** @type {HTMLElement} */ ( item.querySelector('a b') );
		// console.log("abEl",abEl);
		//if (!(abEl instanceof HTMLElement)) { return false; }
		if (abEl.textContent) {
			userNotes.push({
				nick: abEl.textContent,
				val: parseNote(item.innerHTML)
			});
		}
	});
	return userNotes;
}

/**
	* Parses HTML of one note
	* @param {string} content
	*/
function parseNote (content) {
	const match = content.split('</b></a>')[1].trim();
	const parsedNote = activateLinks( match.indexOf('|') === -1 ? match : match.split('|')[0].trim() );
	
	return parsedNote;
}

/**
	* @param {string} content
	*/
function activateLinks (content) {
	if (content.indexOf('http://') !== -1 || content.indexOf('https://') !== -1) {
		content = content.replace(/(https?:\/\/([^\s]+))/g, '<a href="$1" target="_blank">$1</a>');
	}
	
	return content;
}

/**
	 * @param {string} url
	 */
function fetchText (url) {
	return new Promise((resolve,reject)=>{
		// @ts-ignore
		$.ajax(url).done(function(data) {
			resolve(data);
		});
	});
}

// /**
// 	 * @param {any} url
// 	 */
// function fetchTextBugged (url) {
// 	return new Promise((resolve,reject)=>{
// 		// @ts-ignore
// 		GM_xmlhttpRequest({
// 			method:"GET",
// 			url,
// 			//responseType: "json",
// 			onload: function(response) {
// 				console.log("response",response);
// 				resolve(response.responseText);
// 			},
// 			onerror: function(error) {
// 				reject(error);
// 			}
// 		});
// 	});
// }

const saveStorage = (/** @type {string} */ storageName, /** @type {any} */ ob)=>{
	localStorage.setItem(storageName, JSON.stringify(ob));
};

//#endregion

//#region BODY

const storageName = "userNotes";

const userNotesOb = JSON.parse( localStorage.getItem(storageName) || '{}' );
let userNotes = (typeof userNotesOb === 'object') ?
	(
		Object.entries(userNotesOb).map((/** @type {[ string, string ]} */[nick,val])=>({nick,val}))
	): (
		JSON.parse( localStorage.getItem(storageName) || '[]' )
	);
	
const {refresh} = await wykopObserve(
	[
		filterGroups.mikroblogLinkWpisGlownaTagMojCommentOrSubComment,
		filterGroups.ludziePageCommentOrSubComment
	],
	function ({liEl, contentEl}, {place, isFirstTime, nick, authorSex}) {
		
		const authorEl = liEl.querySelector(".author");
		
		//console.log(nick, userNotes[nick], userNotes)
		
		const user = userNotes.find((/** @type {{ nick: string; val: string }} */ u)=>u.nick===nick);
		if (typeof user === 'undefined') { return false; }
		const content = `| ${user.val}`;
		const noteEl = liEl.querySelector(".note2020");
		if (noteEl) {
			noteEl.remove();
			const spanEl = document.createElement("span");
			spanEl.innerHTML = `<span class="note2020 notesFor_${nick}" style="padding-right: 55px; white-space: normal !important;">${content}</span>`;
			authorEl.append(spanEl.firstElementChild);
		} else {
			const spanEl = document.createElement("span");
			spanEl.innerHTML = `<span class="note2020 notesFor_${nick}" style="padding-right: 55px; white-space: normal !important;">${content}</span>`;
			authorEl.append(spanEl.firstElementChild);
		}
		
}, {once:true});

userNotes = parseNotes( (new DOMParser()).parseFromString(
	await fetchText('https://www.wykop.pl/moj/notatki-o-uzytkownikach/'),
	"text/html"
));
saveStorage(storageName, userNotes);
refresh();

//#endregion

})();