// ==UserScript== // @name okoun_userfiltr_script // @namespace okoun.cz // @description Okoun basic extender // @version 0.0.14 // @include https://*.okoun.cz/boards/* // @include https://*.okoun.cz/msgbox.jsp* // @include https://*.okoun.cz/msgbox.do* // @include https://*.okoun.cz/markMessages.do // @include https://*.okoun.cz/markArticles.do // @include https://*.okoun.cz/postArticle.do // @include https://*.okoun.cz/markFavouriteBoards.do // ==/UserScript== //todo // Autor: gorila@dione.zcu.cz // tampered with by gorthaur // Script pro filtrovani prispevku v klubech serveru www.okoun.cz // Dojde k automatickemu skryti celeho prispevku. // Zaroven se na puvodni misto vlozi novy radek s prezdivkou // a odkazem pro zobrazeni puvodniho textu. // Pokud byl aktivovan nejaky filtr, // pak se na konec titulku okna prida text " - User filter activated". function classNameUtil( element, className, operation ) { if ( !element || ( element.nodeType != 1 ) ) return; if ( typeof operation != 'number' ) operation = 0; else { // 0: test, +1: set, -1: remove, 2: flip operation = Math.floor( operation ); if ( ( operation < -1 ) || ( operation > 2 ) ) { operation = 0; } } if ( ( typeof className != 'string' ) || ( /^\s*$|[[\\|()]/.test( className ) ) ) return; var p1 = new RegExp( '(^|\\s)' + className + '(\\s|$)', 'g' ); var classes = element.className; if ( typeof classes != 'string' ) classes = ''; var after, before = p1.test( classes ); if ( before ) { if ( ( operation == -1 ) || ( operation == 2 ) ) { classes = classes.replace( p1, ' ' ); after = false; } else after = true; } else { if ( ( operation == 1 ) || ( operation == 2 ) ) { classes += ' ' + className; after = true; } else after = false; } if ( operation != 0 ) { element.className = classes.replace(/^\s*|\s*$/g, '' ).replace( /\s\s*/g, ' ' ); } return after; } function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (head) { style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild( style ); } } //---------------------------------------------------- // Mini Okoun Core //---------------------------------------------------- function cHASHTable_IsExists(lcKey) { var lii=0; for (lii=0;lii=0) { if (lcDIV=="articles") { return loForm.childNodes[lii]; } loDIVs=loForm.childNodes[lii].getElementsByTagName('DIV'); return loDIVs[0]; } } return null; } //------------------------------- // Je to Klub? //------------------------------- function cOkounMiniCore_IsBoardRoom() { var loObjs=document.getElementsByTagName("BODY"); return loObjs[0].className.indexOf(" board room")>=0; } //------------------------------- // Je to Vzkaznik? //------------------------------- function cOkounMiniCore_IsMessagesRoom() { var loObjs=document.getElementsByTagName("BODY"); return loObjs[0].className.indexOf(" msgbox room")>=0; } function cOkounMiniCore() { this.ArticleGetMeta=cOkounMiniCore_ArticleGetMeta; this.ArticleGetMetaInfo=cOkounMiniCore_ArticleGetMetaInfo; this.ArticleGetMetaInfoText=cOkounMiniCore_ArticleGetMetaInfoText; this.EnumArticles=cOkounMiniCore_EnumArticles; this.GetArticles=cOkounMiniCore_GetArticles; this.IsBoardRoom=cOkounMiniCore_IsBoardRoom; this.IsMessagesRoom=cOkounMiniCore_IsMessagesRoom; this.GetRootArticles=cOkounMiniCore_GetRootArticles; } //---------------------------------------------------- var ShowMe = function ShowMe(liID) { var e1=document.getElementById(liID); var llGroupArticle=poOUF.lGroupArticle || e1.getAttribute("grouping"); var loObjs=null; var lcIDs="", lcMeta=""; if (llGroupArticle) // je groupovani, zjisti id uzivatele { lcMeta="user"; lcIDs=poOMC.ArticleGetMetaInfoText(e1,null,lcMeta) if (lcIDs.length==0 && this.lFilterAnonym) { lcMeta="user anon"; lcIDs=poOMC.ArticleGetMetaInfoText(e1,null,lcMeta); } } classNameUtil( e1, 'ignored', -1 ); e1=document.getElementById("ojsid_x"+liID); if ( e1 ) { e1.parentNode.removeChild( e1 ); } // je groupovani, najdi ostatni prispevky daneho uzivatele // a zobraz je if (!llGroupArticle) { return; } loObjs=poOMC.GetRootArticles().getElementsByTagName("DIV"); for (var lii=0;lii=0) { lcOID=poOMC.ArticleGetMetaInfoText(null,loMeta,"user anon"); llAnonym=true; } if (lcOID.length==0) { return; } llGroupArticle=false; loResult.lFound=false; loResult.lHideFollowers=false; for (lii=0;lii0 && lcPom[0].length>0) // find data { loResult.lFound=true; llGroupArticle=this.aIDs[lii][1]; // group by user loResult.lHideFollowers=this.aIDs[lii][2]; // hide followers break; } } catch(err) {} } } } else { loResult.lFound=true; } if (!loResult.lFound) { return false; } if (this.lGroupArticle || llGroupArticle) { // otestuj zda je to prvni prispevek od pisatale // pokud ne, pridej ho do seznamu // jinak inkrementuj citac loArticle.setAttribute("grouping",true); if ((laRow=this.aList.Get(lcOID))) { laRow[2]=laRow[2]+1; llFirst=false; } else { this.aList.Add(lcOID,loArticle.id); llFirst=true; } } else { llFirst=false; } this.iCount=this.iCount+1; this.ApplyFilter(lcOID,loArticle,llFirst); return true; } function cUSOkounUF_StartFilter() { var loObjs,lii,lcClub,loRE,lcPom,llFind,liy, loAs; var loNodes= new Array(0); var loResult={lFound:false,lHideFollowers:false}; if (this.aFilter.length==0 && this.aFilterMsg.length==0) { return; } // kontrola na anonymy for (lii=0;lii0 && lcPom[0].length>0); if ((this.aFilter[lii][3] && !llFind) || (!this.aFilter[lii][3] && llFind) ) { this.aIDs.push([this.aFilter[lii][0],this.aFilter[lii][2],this.aFilter[lii][4]]); } } catch(err) {} } } else { for (lii=0;lii=0;lii--) // odzadu { if (this.Filter(loNodes[lii][0], loNodes[lii][1], false, loResult)) { //alert(loResult.lFound+' '+loResult.lHideFollowers); continue; //pokud je tento prispevek filtrovany, jdi na dalsi } if (this.lHideFollowers) { loAs=loNodes[lii][0].querySelectorAll("a.prev"); // najdi odkaz na predchozi if (loAs.length==1 && document.getElementById('ojsid_x'+loAs[0].href.substr(loAs[0].href.indexOf("#")+1))) { // pokud predchozi prispevek je filtrovany this.Filter(loNodes[lii][0],loNodes[lii][1], true, loResult); // tenhle taky skryj } } } // vrat se k prvnimu prispevku dle nicku a vloz pocet for (lii=0;lii0) { document.title = document.title + " - User filter activated"; } } function cUSOkoun_UF() { this.lGroupArticle=false; // Groupovani prispevku dle nicku this.lHideFollowers=true; // Skryj reakce this.iFilterAnonym=-1; // Filtrovani anonymu - index radku v poli (RO) this.aFilter = new Array(0); // Internal array this.aFilterMsg = new Array(0); // Internal array this.aIDs = new Array(0); // Internal array this.iCount=0; this.aList=new cHASHTable(); // create HASH Table this.ApplyFilter=cUSOkounUF_ApplyFilter; this.Filter=cUSOkounUF_Filter; this.StartFilter=cUSOkounUF_StartFilter; } function cUSOkounUF_Init() { addGlobalStyle('.ignored > div { display: none;} '); addGlobalStyle('.ignored > div.unhide { display: block; margin-left:60px;margin-top:0px;margin-bottom:0px;padding-top:0px;left:0px;border-top-style:none;} '); addGlobalStyle('.ignored {padding-top:0px!important;padding-bottom:0px!important; } '); addGlobalStyle('.ignoredUnborder { display: none } '); addGlobalStyle('div.unhide > a.reply { vertical-align:middle} '); poOUF.StartFilter(); } var poOMC=new cOkounMiniCore(); var poOUF=new cUSOkoun_UF(); var poStorage=window['localStorage']; //poOUF.lGroupArticle=true; // groupovani vsech prispevku dle nicku poOUF.lHideFollowers=false; // zobraz reakce //poOUF.lHideFollowers=true; // Skryj reakce (vychozi) // Seznam filtrovacich podminek // 0. - nick uzivatele, pokud je nevyplnen, jde o anonymy // 1. - seznam mistnosti ve kterych ma dojit k blokaci viz 3. // 2. - priznak zda ma dojit ke seskupeni do jednoho prispevku // 3. - priznak zda seznam mistnosti je white list // 4. - Skryj reakce // ve vyvoji // x. - priznak zda se ma testovat vychozi ikona okouna u usera // //