LINUX.ORG.RU
решено ФорумTalks

[теги][метки][userscript]

 , ,


0

0

shimon просил метки в топиках делать из букв в квадратных скобочках, я подумал: там же полторы строчки и предлагаю ему проверить:

// ==UserScript==
// @name           LOR forum tags
// @description    Add tags to forum topics
// @include       http://*linux.org.ru/forum/*/*
// ==/UserScript==

var _jq;
if (typeof(GM_log) == 'function') {
        _jq = unsafeWindow.$;
} else {
        _jq = $;
}

_jq(document).ready(function() {
        var there_href = document.location.href.match(/\/(\d+)/);
        if ( !there_href ) { // not in topic
                return;
        }
        var topic_id = there_href[1];
        var op = _jq('div.messages div.msg#topic-'+topic_id);
        var title = op.find('div.msg_body h1').text();
        var tags = title.match(/\[([^\]])+\]/g);
        if ( tags ) {
                op.append('<p class="tags"> Метки: </p>');
                var stags = op.find('p.tags');
                for ( var i = 0; i < tags.length; i++ ) {
                        stags.append('<span class="tag"><a href="/search.jsp?q='+tags[i]+'&include=topics&date=all&section=2&sort=1">'+tags[i]+'</a></span>');
                }
        }
});

UPD1: fixed for greasemonkey

★★

Последнее исправление: name_no (всего исправлений: 1)

Ответ на: комментарий от sdio

Цитируем sdio

Tested in Opera only, да?

конечно, но патчи принимаю в течение часа )))

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

Правда в хроме и lortreeview не работает, хоть и устанавливается

а этот устанавливается хотя бы?

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

Tested in Opera only, да?

спешил, делал под оперой. Сейчас «доделал» для greasemonkey.

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

Не работает вообще :( Даже если в скрипт просто alert() вставить - ничего не происходит.

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

name_no> кстати, я тебя здесь ждал:
Я толксы редко посещаю

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

А, это из-за заблоченой гуглорекламы. Вот дерьмо. Если убрать блокировку, то оно ругаеся:

JavaScript - http://www.linux.org.ru/forum/talks/4850362

Uncaught exception: ReferenceError: Undefined variable: $
Error thrown at line 11, column 8 in lor_tags.js:
    _jq = $;

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

А, это из-за заблоченой гуглорекламы. Вот дерьмо. Если убрать блокировку, то оно ругается:

ты как-то слишком жёстко рекламу заблочил, заблочив вместе с ней нерекламный JQuery. Есть вопрос: lorTreeView работает? Если да, то попробуй скрипт из топика переименовать в 15986.user.js например

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

>ты как-то слишком жёстко рекламу заблочил, заблочив вместе с ней нерекламный JQuery

Да просто google-analytics.com/*

Есть вопрос: lorTreeView работает?

Не знаю. Ща проверю.

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

Не знал, что это имеет значение.

я тоже только на прошлой неделе узнал )))

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

legolegs> Не знал, что это имеет значение.
тут важно .user.js

sdio ★★★★★
()

Предлагаю патч:

        var tags = title.match(/\[([^\]])+\]/g);
		var sign = op.find('div.sign');
        if ( tags ) { 
                sign.before('<p class="tags"> Метки: </p>'); 
                var stags = op.find('p.tags'); 
                for ( var i = 0; i < tags.length; i++ ) { 
                        stags.append('<span class="tag"><a href="/search.jsp?q='+tags[i]+'&include=topics&date=all&section=2&sort=1">'+tags[i]+'</a></span>'); 
                } 
        } 
legolegs ★★★★★
()
Ответ на: комментарий от name_no

ах да, у них же приоритет разный. теперь работает, да.

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

Ещё доработки

Косметические изменения в основном.

// ==UserScript==
// @name           LOR forum tags
// @description    Add tags to forum topics
// @include       http://*linux.org.ru/forum/*/*
// ==/UserScript==

var _jq = (typeof(GM_log) == 'function')
	?
	unsafeWindow.$
	:
	window.$;

var there_href = document.location.href.match(/linux\.org\.ru\/forum\/[-\w]+\/(\d+)/);
if ( there_href ) // in topic
	_jq(document).ready(function() {
	        var topic_id = there_href[1];
	        var op = _jq('div.messages div.msg#topic-'+topic_id);
	        var title = op.find('div.msg_body h1').text();
	        var tags = title.match(/\[[^[\]]+\]/g);
			var sign = op.find('div.sign');
	        if ( tags ) {
					var tagsarr=[];
	                for ( var i = 0; i < tags.length; i++ ) {
							tags[i] = tags[i].substr(1,tags[i].length-2).toLowerCase();
	                        tagsarr.push('<span class="tag"><a href="/search.jsp?q='+tags[i]+'&include=topics&date=all&section=2&sort=1">'+tags[i]+'</a></span>');
	                }
	                sign.before('<p class="tags"> Метки: '+tagsarr.join(', ')+'</p>');
	        }
	});

legolegs ★★★★★
()
Ответ на: Ещё доработки от legolegs

Ещё доработки

Косметические изменения в основном.

предлагаю признать этот вариант финальным. Можно ещё заменить

var sign = op.find('div.sign');
sign.before( ...

на

op.find('div.sign').before( ...
если уж совсем охота зачистить )))

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

>Можно ещё заменить

Ну да, можно. Просто следы эволюции. Можно ещё title выкинуть.

Но под косметическими изменениями я имел ввиду не код, а отображение меток «как в новостях».

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

Можно ещё title выкинуть.

предлагаю поступить с ним интереснее:

var title = op.find('div.msg_body h1').text();
op.find('div.msg_body h1').text(title.replace(/\[([^\]])+\]/g, ''));
name_no ★★
() автор топика
Ответ на: комментарий от name_no

>предлагаю поступить с ним интереснее:

Здраво. Но у этого топика пропадает заголовок. Ну и мигель с ним.

legolegs ★★★★★
()
Ответ на: комментарий от name_no
// ==UserScript==
// @name           LOR forum tags
// @description    Add tags to forum topics
// @include       http://*linux.org.ru/forum/*/*
// ==/UserScript==

var _jq = (typeof(GM_log) == 'function')
   ?
   unsafeWindow.$
   :
   window.$;

var there_href = document.location.href.match(/linux\.org\.ru\/forum\/[-\w]+\/(\d+)/);
if ( there_href ) // in topic
   _jq(document).ready(function() {
       var topic_id = there_href[1];
       var op = _jq('div.messages div.msg#topic-'+topic_id);
       var title = op.find('div.msg_body h1').text();
       var tags = title.match(/\[[^[\]]+\]/g);
       op.find('div.msg_body h1').text(title.replace(/\[[^[\]]+\]/g, ''));
       if ( tags ) {
           var tagsarr=[];
               for ( var i = 0; i < tags.length; i++ ) {
                   tags[i] = tags[i].substr(1,tags[i].length-2).toLowerCase();
                   tagsarr.push('<span class="tag"><a href="/search.jsp?q='+tags[i]+'&include=topics&date=all&section=2&sort=1">'+tags[i]+'</a></span>');
               }
               op.find('div.sign').before('<p class="tags"> Метки: '+tagsarr.join(', ')+'</p>');
       }
   });
name_no ★★
() автор топика

<FAT thickness=100500>А можно сделать, чтобы текст тегов подменялся? Очень хочется в техразделах видеть [СС.ЗБ] вместо многочисленных [10.04].</FAT>

massimus ★★★
()

Superb, я, правда, думал засунуть в список тем тоже такое нечто. С возможностью скрывать.

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

Ты цикл по tags видишь? Там и заменяй что хочешь на что хочешь.

shimon ★★★★★
()

скоро такое и в конке можно будет юзать :)

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

> что-то мне кажется, что под хромым не заработает (((

Ага, выдаёт

Uncaught TypeError: undefined is not a function | chrome-extension://neegkmhnojkknnolmdeifamfcelmeipn/script.js:16

Adjkru ★★★★★
()
Ответ на: Баг от legolegs

Скоро ещё эксплойты пойдут.

:-D

// ==UserScript==
// @name           LOR forum tags
// @description    Add tags to forum topics
// @include       http://*linux.org.ru/forum/*/*
// ==/UserScript==
//

var _jq = (typeof(GM_log) == 'function')
   ?
   unsafeWindow.$
   :
   window.$;


var there_href = document.location.href.match(/linux\.org\.ru\/forum\/[-\w]+\/(\d+)/);
if ( there_href ) // in topic
   _jq(document).ready(function() {
       var topic_id = there_href[1];
       var op = _jq('div.messages div.msg#topic-'+topic_id);
       var title = op.find('div.msg_body h1').text();
       var tags = title.match(/\[[^[\]]+\]/g);
       op.find('div.msg_body h1').text(title.replace(/\[[^[\]]+\]/g, ''));
       if ( tags ) {
           op.find('div.sign').before('<p class="tags"> Метки: </p>');
           var tagsp = op.find('p.tags');
               for ( var i = 0; i < tags.length; i++ ) {
                   var tag = tags[i].substr(1,tags[i].length-2).toLowerCase();
                   var newsp = _jq('<span class="tag"><a href="/search.jsp?q='+
                                                                encodeURIComponent(tag)+
                                                                '&include=topics&date=all&section=2&sort=1"></a></span>');
                   newsp.find('a').text(tag);
                   if ( i > 0 )
                           tagsp.append(', ');
                   tagsp.append(newsp);
               }
       }
   });
name_no ★★
() автор топика
Ответ на: комментарий от name_no

штрих:

// ==UserScript==
// @name           LOR forum tags
// @description    Add tags to forum topics
// @include        http://*linux.org.ru/forum/*/*
// @exclude        http://*linux.org.ru/forum/*/
// ==/UserScript==
//

var _jq = (typeof(GM_log) == 'function')
   ?
   unsafeWindow.$
   :
   window.$;


var there_href = document.location.href.match(/linux\.org\.ru\/forum\/[-\w]+\/(\d+)/);
if ( there_href ) // in topic
   _jq(document).ready(function() {
       var topic_id = there_href[1];
       var op = _jq('div.messages div.msg#topic-'+topic_id);
       var title = op.find('div.msg_body h1').text();
       var tags = title.match(/\[[^[\]]+\]/g);
       if ( tags ) {
           op.find('div.msg_body h1').text(title.replace(/\[[^[\]]+\]/g, ''));
           op.find('div.sign').before('<p class="tags"> Метки: </p>');
           var tagsp = op.find('p.tags');
               for ( var i = 0; i < tags.length; i++ ) {
                   var tag = tags[i].substr(1,tags[i].length-2).toLowerCase();
                   var newsp = _jq('<span class="tag"><a href="/search.jsp?q='+
                                                                encodeURIComponent(tag)+
                                                                '&include=topics&date=all&section=2&sort=2"></a></span>');
                   newsp.find('a').text(tag);
                   if ( i > 0 )
                           tagsp.append(', ');
                   tagsp.append(newsp);
               }
       }
   });

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