LINUX.ORG.RU
ФорумTalks

Зацените : LOR tree view


0

0

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

Правда сырое. Конструктивная критика приветствуется. 
--------------------------------------------------------------------------

З.Ы. Скрипт написал интереса ради, т.к. делать нечего (вчера на свадьбе перегулял, так сегодня из дома не хочется выходить).
★★★★★

а как этим рользоваться? что-то записал я его в опере в папку со скриптами - но ничего не изменилось.

включил огнелис - поставил гризиманки - добавил скрипт - тоже ничего.

как его исрользовать?

wieker ★★
()
Ответ на: комментарий от svu

Я неприянтно удивлен. У меня продолжает работать в firefox, opera и epiphany

В "error console" что-то есть?

sdio ★★★★★
() автор топика
Ответ на: комментарий от svu

Вот внешний вид
http://199.203.242.209/~stas-user/lor/origin/lor_treeview.png

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

В консоли только ругань на неизвестную проперть font-weight.

Кстати, это не может быть связано с тем, что у меня сообщения сортируются снизу вверх?

svu ★★★★★
()
Ответ на: комментарий от sdio

Докладываю. Опера 9.21, винда. Скрипт работает, ошибок нигде не появляется. Но что он должен делать, не понял, хотя на всякий случай отключил свой скрипт для лора.

Результат примерно такой: http://specialforlor.narod.ru/sdioscript.png

Все остальные сообщения треда остаются без изменеий, даже если отвечают на корневое. При повторной загрузке странички красные рамки пропали, в куках появилось то, что должно было появиться согласно логике скрипта.

Возможно, дело в теме (очень криво они реализованны на LOR).

anonymfus ★★★★
()
Ответ на: комментарий от anonymfus

Совсем забыл (года 4 как отключил аватары) с фотками несколько другая разметка страницы.

Пока чтобы скрипт работал в настройках надо:

Новые комментарии в начале off
Показывать фотографии off

sdio ★★★★★
() автор топика

Побочный эффект: он ещё про no new messages пишет

anonymous
()

Красные пунктирные рамочки эти оччень стрёмные.

anonymous
()
Ответ на: комментарий от FiXer

может быть. в любом случае скрипты эти мне очень приглянулись - я их и оставлю.

wieker ★★
()

Вроде работает... Только цвета ИМХО слишком контрастируют с основной темой...

slav ★★
()
Ответ на: комментарий от sdio

var vips = [ "sdio", "ivlad", "Zulu", "Teak", "JB", "Shaman007" ];
var ignore = [ "anonymous", "R00T", "adminchik", "ugoday", "aspell", "klalafuda" ];
var me = new RegExp(" sdio ");

а пчему klalafuda в игноре? вроде спец большой =)

wieker ★★
()

а в больших тредах "дерево" не уходит далеко вправо?

JB ★★★★★
()
Ответ на: комментарий от slav

Вот, поправил чуть оформление (особо не старался, сделал чтобы просто
не так глаз резало).

Вообще, ИМХО, было бы неплохо чтобы движок мог выдавать только данные
без оформления, а на стороне клиента можно было бы это отображать кому
как нравится...

// ==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();

slav ★★
()
Ответ на: комментарий от Zulu

ты безусловно намекал, на то что не возникло вопросов по ВИПам? =)

wieker ★★
()
Ответ на: комментарий от slav

>Вообще, ИМХО, было бы неплохо чтобы движок мог выдавать только данные без оформления, а на стороне клиента можно было бы это отображать кому как нравится...

+1 надо в TODO лист внести.

wieker ★★
()
Ответ на: комментарий от slav

> особо не старался, сделал чтобы просто не так глаз резало

И кроме того - перестало работать :)

anonymous
()
Ответ на: комментарий от anonymous

> И кроме того - перестало работать :)

ХЗ, у меня (firefox) работает...

slav ★★
()
Ответ на: комментарий от anonymous

> не проще движок подправить? Опцию внести...

Наиивный :)

anonymous
()
Ответ на: комментарий от wieker

Добавлены два линка на следующее/предыдущее новое сообщение.
После обновления страницы, происходит переход к первому из добавленных сообщений.

sdio ★★★★★
() автор топика

Рулез! только слишоком разноцветно, ИМХО...

vdm ★★
()
Ответ на: комментарий от FiXer

>Аватары на полекрана - зло :)

Экран со спичечный коробок --- зло :))

mky ★★★★★
()
Ответ на: комментарий от svu

Цвета и идею оформления я упер отсюда http://cynwoody.googlepages.com/fr_tree_viewer.html

Вам никто не мешает их исправить, всего одна строка, кол-во можно уменьшить/увеличить

const BACKGROUNDS = ['#ccf', '#ffc', '#cfc', '#fcc', '#cff', '#fcf', '#ccc'];

Мой интерес к этому скрипту на данный момент исчерпан.

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

Да и еще он не работает на страницах треда, кроме разве что первой.
Так как далее первой страницы имеем не дерево, а его куски.

sdio ★★★★★
() автор топика

Вот небольшой патч, делающий оформление, на мой взгляд, несколько получше:

--- lor-tree.js.orig    2007-06-09 23:31:29.000000000 +0400
+++ lor-tree.js 2007-06-09 23:42:54.000000000 +0400
@@ -62,7 +62,7 @@
 
                if (i >= cnt) {
                        var msgTable = get_one("./table", msgP);
-                       msgTable.style.border = "3px dotted #FF0000";
+                       msgTable.style.border = "1px dotted #A02828";
                        newmsgs.push(msgID);
                }
 
@@ -133,11 +133,12 @@
                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";
+//                     msgTR.snapshotItem(j).style.color="#000";
                }
                if (main != "root") {
                        mainP.appendChild(msgP);
@@ -153,7 +154,8 @@
 var list = new Array;
 var answ2main = "";
 const INDENT = 7;       // Indentation per reply level, in pixels
-const BACKGROUNDS = ['#ccf', '#ffc', '#cfc', '#fcc', '#cff', '#fcf', '#ccc'];
+const PADDINGBOT=1;
+const BACKGROUNDS = ['#000040','#404060'];
 
 var ThreadID = "_" + window.location.search.split("=")[1].split("&")[0];
 var cnt = 0;
@@ -185,7 +187,8 @@
 createCookie(ThreadID, msgs.snapshotLength, 3);
 MakeTree();
 
-
+/*
 if (cnt == msgs.snapshotLength) {
        alert(ThreadID + " : No new messages");
 }
+*/

slav ★★
()

Поменял dotted на none и вообще рулез. спасибо :)

vdm ★★
()
Ответ на: комментарий от sdio

Да, версия 0.6 проверялась только в firefox

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

да работает. еще раз благодарю. теперь пользуюсь только этим скриптом.

wieker ★★
()
Ответ на: комментарий от sdio

Version: 0.7

Код переписан, убраны (по возможности) повторы, рекурсивный алгоритм заменен на итеративный.

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

Version: 0.8
Добавил черный список, т.к. флудеры достают.

sdio ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.