Adds the date and author of an article to its associated snippet.
// ==UserScript==
// @name Infowars : Date & Author
// @author Scott Michaels
// @namespace http://se7en-soft.com
// @description Adds the date and author of an article to its associated snippet.
// @include https://www.infowars.com/*
// @version 1.0.1
// @grant metadata
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function(){
const nav = navigator;
const codeName = nav.appCodeName;
const product = nav.product;
const vendor = nav.vendor;
const articles = [];
const observeDOM = (function(){
const MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
eventListenerSupported = window.addEventListener;
return function(obj, callback){
if( MutationObserver ){
// define a new observer
const obs = new MutationObserver(function(mutations, observer){
if( mutations[0].addedNodes.length || mutations[0].removedNodes.length )
callback();
});
// have the observer observe foo for changes in children
obs.observe( obj, { childList:true, subtree:true });
}
else if( eventListenerSupported ){
obj.addEventListener('DOMNodeInserted', callback, false);
obj.addEventListener('DOMNodeRemoved', callback, false);
}
};
})();
const fixer = {
fetchRemotePage: (href, callback) => {
try{
GM_xmlhttpRequest({
method: "GET",
url: href,
onload: function(r){
const page = r.responseText;
if(callback)
callback.call(this, page);
}
});
}catch(e){
//alert(e);
}
},
addExtraInfo: () => {
if(articles.length){
let i = 0;
for(i; i < articles.length; i++){
const x = articles[i];
let anchor = x.querySelector("article > div.article-content > h3 > a");
if(!anchor){
anchor = x.querySelector("div.article-content > h3 > a");
}
//remove the article from the 'articles' array
articles.splice(i, 1);
if(anchor){
const processed = anchor.getAttribute("data-processed");
if(processed) continue;
try{
anchor.setAttribute("data-processed", "true");
fixer.fetchRemotePage(anchor.href, (page) => {
const elHtml = document.createElement("html");
elHtml.innerHTML = page;
let author = "";
let authorLink = "";
let authorM = elHtml.getElementsByClassName("author")[0];
if(authorM.querySelector("a[rel='author']")){
author = authorM.querySelector("a[rel='author']").textContent;
authorLink = authorM.querySelector("a").href;
} else {
let text = authorM.textContent;
if(text.indexOf("|") !== -1){
author = text.split("|")[0].trim();
} else if (authorM.querySelector("a")) {
author = authorM.querySelector("a").textContent.trim();
} else {
author = authorM.textContent.trim();
if(author.endsWith("-")){
author = author.substring(0, author.length - 1).trim();
}
}
}
const articleDate = elHtml.getElementsByClassName("date")[0].textContent;
const authorElm = document.createElement("span");
if(!authorLink){
authorElm.textContent = author + " | " + articleDate;
} else {
const link = document.createElement("a");
link.href = authorLink;
link.textContent = author;
link.setAttribute("target", "_blank");
link.setAttribute("rel", "author");
link.style = "color:#194e8e !important;";
authorElm.appendChild(link);
const span = document.createElement("span");
span.textContent = ` | ${articleDate}`;
authorElm.appendChild(span);
}
authorElm.style = "font-size: 11pt;font-family:'proxima-nova', sans-serif;color:#898989;font-weight:500;";
const entrySubtitle = x.querySelector("div.article-content>h4.entry-subtitle");
if(entrySubtitle){
//console.log(entrySubtitle);
entrySubtitle.parentNode.insertBefore(authorElm, entrySubtitle);
} else {
anchor.parentNode.insertBefore(authorElm, anchor.nextSibling);
anchor.parentNode.insertBefore(document.createElement("br"), anchor.nextSibling);
}
});
} catch(ex){
alert(ex);
}
}
}
}
},
init: () => {
let arties = document.getElementsByTagName("article");
for(let x of arties){
const anchor = x.querySelector("article > div.article-content > h3 > a");
if(anchor && anchor.getAttribute("data-processed")) continue;
articles.push(x);
}
arties = document.getElementsByClassName("related-article");
for(let x of arties){
const anchor = x.querySelector("div.article-content > h3 > a");
if(anchor && anchor.getAttribute("data-processed")) continue;
articles.push(x);
}
}
}
document.onreadystatechange = () => {
if(document.readyState === "complete"){
fixer.init();
fixer.addExtraInfo();
observeDOM(document.getElementsByClassName('articles-wrap')[0], function(){
const arties = document.getElementsByTagName("article"); //document.getElementsByClassName("article");
for(let x of arties){
if(articles.indexOf(x) === -1)
articles.push(x);
}
fixer.addExtraInfo();
});
}
}
})();