// ==UserScript== // @name News parser // @namespace http://zakonvremeni.ru // @version 0.3.11 // @description Parse news // @author AlexeiBv+mirocod@narod.ru // @match https://tass.ru/* // @match https://ria.ru/* // @match https://rg.ru/* // @match https://www.cnews.ru/* // @match https://mixednews.ru/* // @match https://russian.rt.com/* // @match https://iz.ru/* // @match https://zakonvremeni.ru/* // @icon https://icons.duckduckgo.com/ip2/zakonvremeni.ru.ico // @grant none // ==/UserScript== // Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) (function() { 'use strict'; // Поиск элементов по регулярному выражению function GetElementClassName(a_Element) { return a_Element.className; } function GetNodeName(a_Element) { return a_Element.nodeName; } function CheckRegExp(a_GetElementNameFunc, a_RegExpPattern, a_Element) { let re = new RegExp("(?:^|\\s)" + a_RegExpPattern + "(?!\\S)"); return re.test(a_GetElementNameFunc(a_Element)); } function FindElementsByRegExp(a_GetElementNameFunc, a_RegExpPattern, a_ElementParent) { a_ElementParent || (a_ElementParent=document); let descendants = a_ElementParent.getElementsByTagName('*'), i=-1, e, result=[]; while (e = descendants[++i]) { if (CheckRegExp(a_GetElementNameFunc, a_RegExpPattern, e)){ result.push(e); } } return result; } // Работа со строками function TrimString(str) { return ( str || '' ).replace( /^\s+|\s+$/g, '' ); } function RemoveBeforeSplitter(a_String, a_Splitter) { let index = a_String.indexOf(a_Splitter) if (index != -1) { return a_String.substring(index + a_Splitter.length); } return a_String; } function RemoveAfterSplitter(a_String, a_Splitter, a_SaveSplitter) { let index = a_String.indexOf(a_Splitter) if (index != -1) { let spl_len = a_Splitter.length if (!a_SaveSplitter) { spl_len = 0; } return a_String.substring(0, index + spl_len); } return a_String; } function ClearUrl(a_Url) { const separator = '?'; return RemoveAfterSplitter(a_Url, separator, false); } function ClearWWW(a_Url) { return ( a_Url || '' ).replace( 'www.', '' ); } function ClearTextFuncTemplate(a_RemoveBeforeList, a_OnlyFirstIndex) { function ClearTextFunc(a_Content, a_ElementIndex) { if (a_OnlyFirstIndex && a_ElementIndex && a_ElementIndex != 1) { return a_Content; } let content = a_Content; for (let i = 0; i < a_RemoveBeforeList.length; i++) { let r = a_RemoveBeforeList[i]; content = RemoveBeforeSplitter(content, r); } return content; } return ClearTextFunc } // Работа с контейнерами function GetImageInContainers(a_Elements, a_TextAlign) { let i; let img_src = ''; let re = new RegExp("(https?:\/\/.*\.(?:png|jpg|jpeg))"); for (i in a_Elements) { let e = a_Elements[i]; if (e.nodeName == 'IMG' && re.test(e.src)) { img_src = e.src; } let children = e.querySelectorAll("*"); for(let i = 0; i < children.length; i++){ let c = children[i]; if (c.nodeName == 'IMG' && re.test(c.src)) { img_src = c.src; } } if (img_src.length > 0) { break; } } if (img_src.length > 0) { return '

'; } return ''; } function GetContentInContainers(a_Elements, a_GrubTextFunc, a_FinishWorkFunc) { let result = ''; let element_index = 1; for (var i in a_Elements) { let e = a_Elements[i]; result += a_FinishWorkFunc(e, element_index); element_index += 1; } return result; } // Фильтрация элементов function FIlterElements(a_Elements, a_ElementChecker) { let result = []; for (let i = 0; i < a_Elements.length; i++) { let e = a_Elements[i]; if (a_ElementChecker(e)) { result.push(e); } } return result; } function ElementCheckerTrue(a_Element) { return true; } function ElementCheckerFalse(a_Element) { return false; } function ElementCheckerRia(a_Element) { if (a_Element.dataset.type == 'article' || a_Element.dataset.type == 'banner' || a_Element.dataset.type == 'media' || a_Element.dataset.type == 'video' || a_Element.dataset.type == 'photolenta') { return false; } return true; } function ElementCheckerZV(a_Element) { if (a_Element.itemprop == 'articleBody') { return true; } return false; } function SubElementCheckerToRemoveTemplate(a_Classes, a_NodeNames) { function SubElementCheckerToRemove(a_Element) { if (!a_Element || !a_Element.parentNode) { return false; } if (CheckRegExp(GetElementClassName, '.*(' + a_Classes + ').*', a_Element)) { return true; } if ((a_NodeNames && CheckRegExp(GetNodeName, '(' + a_NodeNames + ')', a_Element))) { return true; } return false; } return SubElementCheckerToRemove } // Обработка элементов function GrubTextFuncTemplate() { function GrubTextFunc(a_Element) { var content = ''; if (a_Element.innerText) { content = TrimString(a_Element.textContent); } return content; } return GrubTextFunc } function RemoveAllAttributes(a_Element) { let new_el = document.createElement(a_Element.nodeName); new_el.innerHTML = a_Element.innerHTML; a_Element.outherHTML = new_el.outherHTML; } function RemoveCurrentElementSaveChild(a_Element, a_Parent) { var parent = a_Element.parentNode || a_Parent; while(a_Element.firstChild) parent.insertBefore(a_Element.firstChild, a_Element); parent.removeChild(a_Element); } function RemoveCommentsHTML(a_String){ return ( a_String || '' ).replace( /()|()|(