http://www.linux.org.ru/jump-message.jsp?msgid=1954853#1962681
--------------------------------------------------------------------------
Ответ на: Re: 2maxcom: функционал сайта от Orlangoor 05.06.2007 10:46:47
>Вот если был бы скрипт выделяющий из просто сообщений треды...
Есть такое: http://userscripts.org/scripts/show/9739
Правда сырое. Конструктивная критика приветствуется.
--------------------------------------------------------------------------
З.Ы. Скрипт написал интереса ради, т.к. делать нечего (вчера на свадьбе перегулял, так сегодня из дома не хочется выходить).
Докладываю. Опера 9.21, винда. Скрипт работает, ошибок нигде не появляется. Но что он должен делать, не понял, хотя на всякий случай отключил свой скрипт для лора.
Все остальные сообщения треда остаются без изменеий, даже если отвечают на корневое. При повторной загрузке странички красные рамки пропали, в куках появилось то, что должно было появиться согласно логике скрипта.
Возможно, дело в теме (очень криво они реализованны на LOR).
Вот, поправил чуть оформление (особо не старался, сделал чтобы просто
не так глаз резало).
Вообще, ИМХО, было бы неплохо чтобы движок мог выдавать только данные
без оформления, а на стороне клиента можно было бы это отображать кому
как нравится...
// ==UserScript==
// @name LOR TreeView
// @description Make tree view for LOR threads
// @include http://www.linux.org.ru/*view-message.jsp?*
// @include http://linux.org.ru/*view-message.jsp?*
// ==/UserScript==
// License: GPL
// Author: sdio
// begin of FUNCTIONs definitions
function get_all(xpath, node){
return document.evaluate(
xpath,
node,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null );
}
function get_one(xpath, node){
return document.evaluate(
xpath,
node,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null ).singleNodeValue;
}
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function MakeTree(){
for (var i=0; i<msgs.snapshotLength; i++){
var msgDIV = msgs.snapshotItem(i);
var msgP = msgDIV.parentNode.parentNode.parentNode.parentNode.parentNode;
var msgA = get_one(".//tr[@class='title']//a", msgP);
msgA.textContent = i + 1;
if (i >= cnt) {
var msgTable = get_one("./table", msgP);
msgTable.style.border = "2px dotted #A02828";
}
var msgID = "_" + msgA.href.split("#")[1];
msgP.id = msgID;
list[msgID] = "";
// remove SUBJECT
var h2 = get_one("./h2", msgDIV);
msgDIV.removeChild(h2);
// remove "B25B8BL =0 MB> A>>1I5=85"
h2 = get_one("./p/font/a", msgDIV);
msgDIV.removeChild(h2.parentNode.parentNode);
var a = get_one(".//tr[@class='title' and position()=2]/td/a", msgP);
if (a) {
var replyID = "_" + a.href.split("#")[1];
list[replyID] = list[replyID] + msgID;
}else{
answ2main = answ2main + msgID;
}
}
MakeThread("root", answ2main, 0);
}
function MakeThread(main, answers, ind){
if (answers == "") return;
var answ_list = answers.split("_");
var mainP = get_one(".//p[@id='"+main+"']", document);
for (var i=1 ; i<answ_list.length; i++){
var msgP = get_one(".//p[@id='_"+answ_list[i]+"']", document);
msgP.style.marginLeft=INDENT + "px";
msgP.style.background=BACKGROUNDS[ind % BACKGROUNDS.length];
msgP.style.paddingBottom=PADDINGBOT + "px";
var msgTR = get_all("./table//tr | ./table//a", msgP);
for (var j=0; j<msgTR.snapshotLength; j++){
msgTR.snapshotItem(j).style.background=BACKGROUNDS[ind % BACKGROUNDS.length];
// msgTR.snapshotItem(j).style.color="#000";
}
if (main != "root") {
mainP.appendChild(msgP);
}
MakeThread("_"+answ_list[i], list["_"+answ_list[i]], ind+1);
}
}
// end of FUNCTIONs definitions
// MAIN
var list = new Array;
var answ2main = "";
const INDENT = 7; // Indentation per reply level, in pixels
const PADDINGBOT=1;
const BACKGROUNDS = ['#000040','#404060'];
var ThreadID = "_" + window.location.search.split("=")[1].split("&")[0];
var cnt = 0;
if (!readCookie(ThreadID)) { // first run
// save
createCookie(ThreadID, cnt, 1);
} else {
// get saved list of tracked threads
var cnt = readCookie(ThreadID);
}
var to_delete = get_all("//div[@class='messages']/div[@class='comment']/div[@class='nav'] | //div[@class='messages']/div[@class='comment']/form", document);
for (var i=0; i<to_delete.snapshotLength; i++){
var del = to_delete.snapshotItem(i);
del.parentNode.removeChild(del);
}
var msgs = get_one("/html/body/div[@class='messages']/div[@class='comment']/table/tbod
y/tr/td/div[@class='msg']", document).parentNode.parentNode.parentNode.parentNode;
var p = document.createElement("p");
msgs.parentNode.insertBefore(p, msgs);
p.appendChild(msgs);
var msgs = get_all("/html/body/div[@class='messages']/div[@class='comment']/p/table/tb
ody/tr/td/div[@class='msg']", document);
createCookie(ThreadID, msgs.snapshotLength, 1);
MakeTree();
>Вообще, ИМХО, было бы неплохо чтобы движок мог выдавать только данные
без оформления, а на стороне клиента можно было бы это отображать кому
как нравится...