Facebook All Comments Helper

Easy way to show all comments.

// ==UserScript==
// @name         Facebook All Comments Helper
// @name:zh-TW   FB全部留言小幫手
// @name:zh-CN   FB全部留言小帮手
// @namespace    http://tampermonkey.net/
// @version      1.7
// @description  Easy way to show all comments.
// @description:zh-tw  讓您更快打開全部留言
// @description:zh-cn  让您更快打开全部留言
// @author       Xuitty
// @match        https://www.facebook.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=facebook.com
// @grant        none
// @license      MIT
// ==/UserScript==

const langs = {
	de: ["Relevanteste", "Top-Kommentare", "Am zutreffendsten", "Neueste zuerst", "Neueste", "Alle Kommentare"],
	en: ["Top comments", "Most relevant", "Most applicable", "Most recent", "Newest", "All comments"],
	es: ["Comentarios destacados", "Más relevantes", "Más pertinentes", "Más recientes", "Más recientes", "Todos los comentarios"],
	hu: ["A legfontosabb hozzászólások", "A legrelevánsabbak", "A témához leginkább illők", "A legújabbak", "A legutóbbiak", "Az összes hozzászólás"],
	ja: ["トップコメント", "関連度の高い順", "最も適切", "新しい順", "新しい順", "すべてのコメント"],
	ko: ["관련성 높은 댓글", "참여도 높은 댓글", "적합성 높은 순", "최신순", "날짜 내림차순", "모든 댓글"],
	fr: ["Plus pertinents", "Les meilleurs commentaires", "Les plus pertinents", "Plus récents", "Les plus récents", "Tous les commentaires"],
	sk: ["Top komentáre", "Najrelevantnejšie", "Najvhodnejšie", "Najnovšie", "Najnovšie", "Všetky komentáre"],
	sl: ["Najbolj priljubljeni komentarji", "Najustreznejši", "Najustreznejše", "Najnovejši", "Najnovejši", "Vsi komentarji"],
	"zh-Hans": ["热门评论", "最相关", "最合适", "从新到旧", "最新", "所有评论"],
	"zh-Hant": ["最熱門留言", "最相關", "最相關", "最新", "由新到舊", "所有留言"],
};

function execute(e) {
	if (e.code !== "Insert" && e.type === "keydown") return;
	let flag = e.ctrlKey ? true : false;
	let fblang = document.getElementById("facebook").getAttribute("lang");
	let lang = langs[fblang] || langs.en;
	let headings = document.evaluate(
		"//span[text()='" +
			lang[0] +
			"' or text()='" +
			lang[1] +
			"' or text()='" +
			lang[2] +
			"' or text()='" +
			lang[3] +
			"' or text()='" +
			lang[4] +
			"' or text()='" +
			lang[5] +
			"']",
		document,
		null,
		XPathResult.ANY_TYPE,
		null
	);
	if (flag) showLatestComment(headings);
	else showAllComment(headings);
}

function showAllComment(headings) {
	let node1;
	while ((node1 = headings.iterateNext())) {
		node1.click();
		setTimeout(() => {
			document.querySelectorAll('*[role="menuitem"]')[document.querySelectorAll('*[role="menuitem"]').length - 1].click();
		}, 100);
	}
}

function showLatestComment(headings) {
	let node1;
	while ((node1 = headings.iterateNext())) {
		node1.click();
		setTimeout(() => {
			document.querySelectorAll('*[role="menuitem"]')[document.querySelectorAll('*[role="menuitem"]').length - 2].click();
		}, 100);
	}
}

(function () {
	"use strict";

	document.addEventListener("dblclick", execute);
	document.addEventListener("keydown", execute);
})();