1. JavaScript / Говнокод #13534

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    // ==UserScript==
    // @name        GK_nickcolors
    // @namespace   GK
    // @description Highlighting usernames relying their ID's. (Oldfag detector).
    // @include     http://govnokod.ru/*
    // @include     http://www.govnokod.ru/*
    // @version     0
    // @grant       none
    // ==/UserScript==
    
    var re = /(\d+)$/;
    const TOP_BORDER = 8000;
    
    function getColor(href) {
      var res = re.exec(href);
      var id = parseInt(res[0]);
      var coeff = id / TOP_BORDER;
      var b = 40;
      var g = Math.floor(255 * coeff);
      var r = Math.floor(255 - g);
      return 'RGB(' + r + ',' + g + ',' + b + ')';
    }
    
    function nickColors() {
      $ = unsafeWindow.jQuery;
      $('p.author a:nth-child(2), strong.entry-author a').each(function() {
        this.style.color = getColor(this.href);
      });
    }
    
    document.onkeydown = function (event) {
      if (!document.getElementById) return;
      if (window.event) event = window.event;
      if (event.ctrlKey)
        if ((event.keyCode ? event.keyCode : event.which ? event.which : null) == 13)
          nickColors();
    }

    Скроллишь уютненький. Видишь - срач. И не поймёшь, кто прав, кто виноват. Клацаешь Ctrl+Enter - и вот оно, олдфаги краснеют, зеленки зеленеют.
    (Правда диссонанс из-за того, что крестик-то как раз-таки красный, а галочка - зелёная).
    Вдохновился http://govnokod.ru/13516#comment190221 тут.
    Заодно расквитайте за незнание JS без остатка.

    Запостил: vistefan, 02 Августа 2013

    Комментарии (111) RSS

    • По желанию можно организовать вывод рядом с собственным ником малиновых штанов и переливающейся плашки VIP.
      Ответить
    • Ну вообще занятно, хотя на мой взгляд нет однозначной корелляции между "олдфажностью" и адекватностью.
      Кстати, совет: в Chrome+Tampermonkey лишаешься доступа к unsafeWindow если указать директиву @grant none. Вместо этого укажи @grant unsafeWindow или вообще убери @grant.
      Еще, что по твоему случится при id>TOP_BORDER?
      Ну и в целом выложи на userscripts.org =)
      Ответить
      • хули думать - делить надо!
        Ответить
      • > нет однозначной корелляции между "олдфажностью" и адекватностью
        Согласен, и не претендовал.
        > лишаешься доступа к unsafeWindow
        Писал для firefox, тонкостей кроссбраузерного JS, равно как и сам JS нифига не знаю.
        > Ну и в целом выложи на userscripts.org
        По вышеизложенным причинам очевидно, что это не имеет смысла. Это прототип.
        > id>TOP_BORDER
        По хорошему надо бы как-то научиться устанавливать TOP_BORDER в значение максимального ID (короче говоря, уютненькому бы API). Но в простом случае можно
        ver coeff = (id / TOP_BORDER > 1) ? 1 : id / TOP_BORDER;
        Ответить
        • Ну если пишешь под гризманки, то можно так: во время обработки сохранять максимальный найденный id через GM_setValue(), а при загрузке скрипта вытаскивать его через GM_getValue(). Соответственно будет известен id последнего пользователя, чью активность ты видел - вполне неплохо, на мой взгляд. Просмотришь пару десятков постов, и уже приемлемое значение будет.

          Насчет unsafeWindow, поправить несложно (я написал как), а глядишь, у кого-то скрипт заработает. Остальная кроссбраузерность - дело jQuery.
          Ответить
          • > Насчет unsafeWindow, поправить несложно (я написал как)
            Так вот именно, ты ж написал как. Я не собираюсь никуда выкладывать, если кто будет копипастить себе, тот пусть и поправит.
            Сохранение последнего увиденного максимума - хорошая идея.
            Ответить
          • Никак не могу понять, что не так с этими set/get Value.
            Ставил для них
            // @grant       GM_getValue
            // @grant       GM_setValue
            , запускалось, но ничего не сохраняло.
            Пришлось использовать localStorage, но всё равно хочу выяснить, что не так, подскажите JS-ники.
            Такой вариант
            // ==UserScript==
            // @name        GK_nickcolors
            // @namespace   GK
            // @description Highlighting of usernames. Depends from their ID's. (Oldfag detector).
            // @include     http://govnokod.ru/*
            // @include     http://www.govnokod.ru/*
            // @version     0.1
            // ==/UserScript==
            
            var re = /(\d+)$/;
            var ls = localStorage;
            var TOP_BORDER = ls.border ? ls.border : 1;
            
            function getColor(href) {
              var res = re.exec(href);
              var id = parseInt(res[0]);
              if (id > (ls.border ? ls.border : 1)) ls.border = id;
              switch (id) {
                // inadequate
                case 1: // guest
                case 5798:  //anonimb
                  return 'grey';
                // overadequate
                case 5528:  // bormand
                  return 'red';
                default:
                  var coeff = (Math.log((id / TOP_BORDER) + 1));
                  var b = 40;
                  var g = Math.floor(255 * coeff);
                  var r = Math.floor(255 - g);
                  return 'RGB(' + r + ',' + g + ',' + b + ')';
              }
            }
            
            function nickColors() {
              $ = unsafeWindow.jQuery;
              $('p.author a:nth-child(2), strong.entry-author a').each(function() {
                this.style.color = getColor(this.href);
              });
            }
            
            document.onkeydown = function (event) {
              if (!document.getElementById) return;
              if (window.event) event = window.event;
              if (event.ctrlKey)
                if ((event.keyCode ? event.keyCode : event.which ? event.which : null) == 13)
                  nickColors();
            }
            Ответить
            • А покажи код с get/setValue, только не сюда, а на пастебин какой-нибудь выложи.

              И еще, по поводу switch: http://govnokod.ru/13528
              Ответить
              • Вот код с GM_set/getValue, который у меня нихера не сохраняет: [/u]http://pastebin.com/xkDTBPbB[/u]

                Там же форкни и покажи как сделать без свитча, но что бы при этом не выглядело как говно и было место расставить комментарии с никами для наглядности. Как по твоей ссылке - там же другой случай, там равномерные значения 0, 1, 2. А с ID - то фиг пойми что, ассоциативный массив нужен.
                Ответить
                • Кажется примерно понял, отчего не работает. GM_setValue и GM_getValue вызываются только из глобальной области, а внутри функций undefined. Но что с этим делать - не знаю.
                  Ответить
                  • Это что-то у тебя. Код, который ты запостил, работает нормально, сразу после второго запуска.
                    Ответить
                    • Во блин, странно.

                      Вот свищефикс, верно я понял идею?
                      http://pastebin.com/iEveur5Y
                      Ответить
                      • var unicals = [
                            1,  // guest
                            5798, // anonimb
                            5528  // bormand
                          ];
                          var color = (['grey', 'grey', 'red'])[unicals.indexOf(id)];

                        Это уже говнокод. Нельзя ли хранить двумерный массив, или лучше хеш-массив массивов?
                        Ответить
                        • > Нельзя ли хранить двумерный массив, или лучше хеш-массив массивов
                          Можно, но я пока вернулся к свитчу, который нагляднее.
                          Ответить
                        • Переписал вот так:
                          var unicals = {
                            1    : '#ddd', // guest
                            5798 : '#ddd', // anonimb
                            5528 : '#f82' // bormand
                          };
                          var color = unicals[id];
                          Ответить
                          • Мы, выходит, наворотили некую социальную составляющую сверх уютненького. Цветом обозначили "рейтинг" (она же кармочка, репутация, ганжа, мариванна, сенсемилья), а таким вот массивом можно кого-то "зафрендить", отметив особыми цветами, что бы было легко распознавать.

                            Для пущего счастья у меня родилась такая идея: можно сделать скрипт, который будет мониторить весь твой воутинг и хранить в localStorage массив с ID пользователей и суммарной накопленной ими в ваших глазах репутацией (крестик декрементит, галочка - инкрементит свой элемент массива). Затем на основании этих данных можно тех, кто уж слишком скатился в минуса выделять цветом, уменьшать шрифт их комментов или вовсе скрывать после определённой границы. Особо отличившихся в противоположную сторону наоборот выделять. Выходит как в новостных лентах или тематической рекламе - контент формируется на основе ваших предпочтений.
                            Ответить
                            • > что бы было легко распознавать
                              Странно, у меня не возникало таких проблем даже при разглядывании по никам.

                              > контент формируется на основе ваших предпочтений
                              На стороне жабоскрипта уж больно это некошерно делать.
                              Ответить
                              • > Странно, у меня не возникало таких проблем даже при разглядывании по никам.
                                У меня тоже почти никогда нет проблем с этим. Но вот сегодня возникла проблема с чтением этой ветки, где vistefan отвечает Vindicar'у ответившему vistefan'у... ;) Ники уж больно похожи при чтении по диагонали.
                                Ответить
                              • > не возникало таких проблем
                                Видите ли, если пользоваться таким скриптом, то все плебейские ники подцвечиваются довольно узким диапазоном цветов, оттенки красного и зелёного. В этом случае, ники тех, чьи комментарии вы уж точно не хотите пропустить достаточно выделить каким-то особым цветом, далёким от этого ранжа (у меня это ярко-оранжевый). В итоге получится, что вы можете скроллить хоть со всей скорости, а-таки не пропустите важного для вас мнения. Это я и имел ввиду под "распознавать", а не отсутствие скилла чтения. Вот.

                                > На стороне жабаскрипта
                                Да уже даже надоело об этом говорить. Понятное дело не кошерно, а как иначе-то? Перепиливать весь честной говнокод? Пока гром не грянет (уж и не знаю, что может быть этим громом), Страйко АПИ не запилит.
                                Ответить
                                • >уж и не знаю, что может быть этим громом
                                  Взлом сайта.
                                  Ответить
                                  • > Взлом сайта.
                                    Хакеры взломали сайт и запилили в нем АПИ. Страйко проснется, перекрестится, и скажет "ну и заебись".
                                    Ответить
                                    • Хакеры взломали сайт и повесили гоатсе на глагне.
                                      Ответить
                                      • > Хакеры взломали сайт и повесили гоатсе на глагне.
                                        Банально. Гоатсе на глагне и так уже сколько раз тут было.
                                        Ответить
                    • Ещё спрошу твоего совета. Я просто сделал как знал, повесив на хоткеи подцветку ников. А было бы хорошо что бы всё делалось автоматически в фоне, но я понятия не имею какое событие ловить на подгрузку комментов. Как сделать?
                      Ответить
                      • Отлов коментов пока что делается исключительно через задницу, пока Страйкер не внесет предложенные мной изменения.

                        Я делал так:
                        function waitForSelector(selector, context, mustexist, callback) {
                        	if (($(selector, context).length>0) == mustexist)
                        		callback();
                        	else
                        		setTimeout(function(){waitForSelector(selector, context, mustexist, callback)}, 50);
                        	}
                        
                        var oldLoadComments = unsafeWindow.comments['load'];
                        
                        function newLoadComments(aElemTrigger) {
                        	var $parent = $(aElemTrigger).closest('.entry-comments');
                        	oldLoadComments.call(this,aElemTrigger);
                        	waitForSelector('.hcomment', $parent, true, function(){
                        			//творим наш беспредел
                        			});
                        		}
                        unsafeWindow.comments['load'] = newLoadComments;
                        Ответить
                      • В scriptish в настройках указывается.
                        Ответить
                        • Поясни мысль.
                          Ответить
                          • В скриптиш можно указать, после какого события будет грузиться скрипт.
                            Ответить
                            • Ну и что толку? Можно и так написать
                              document.onload = function {
                              Только вот на какое событие вешать обработку после дополнительной подгрузки комментариев в тело страницы?
                              Ответить
                              • >дополнительной подгрузки комментариев в тело страницы
                                Поясни мысль.
                                Ответить
                                • Заходишь ты такой на говнокод. Там вершины тредов, оп-коды по десять штук на страницу. И когда они все загрузятся, сгенерится событие document.onload. Положим, твой скрипт вызовется в этот момент. А дальше что? Ведь сами комментарии-то в этот момент не присутствуют в теле страницы, только ОПы. А комментарии грузятся с сервера только после нажатия на ссылку, но при этом никакого стандартного события не возникает, что бы за него можно было цепляться.
                                  Ответить
                                  • click на .entry-comments-load, нопремер - чем не событие?
                                    Ответить
                                    • Тем, что это событие возникает сразу при клике, а на загрузку нужно какое-то время. В итоге скрипт вызовется сразу и отработает в холостую, а потом только в страницу подставятся необработанные данные. Если б там был блокирующий вызов или событие генерилось бы только после загрузки - было бы счастье. А говнокодить с ожиданием - ну нафиг.
                                      Ответить
                                      • гугл подсказывает еще об Mutation events/MutationObserver, как крайний вариант
                                        Ответить
                                        • Там я не в тот тред ответил. Смотрите http://govnokod.ru/13534#comment190550
                                          Ответить
                                  • Аа, ты коменты на главной читаешь? Ну так на клик по разворачиванию коментов и вешайся.
                                    Ответить
                                    • Я так и предложил. Собственно, если бы Страйко соизволил вынести часть кода (успешная загрузка комментариев) в отдельную функцию, этой ветки бы не было - взял да подменил на свою обертку -_-
                                      Ответить
                • http://pastebin.com/wPEk414X

                  Вот моя версия. Делает два прохода, но зато корректно отрабатывает ситуации, когда по ходу дела находим новый максимум.
                  Плюс завернул код в анонимную функцию, это рекомендуют делать.
                  Ответить
                  • Два прохода - зло по любому. В превышении ID > BORDER нет ничего страшного, учитывая что это до первого обновления страницы. А вот гонять два раза на каждое обновление страницы - во много раз хуже, имхо.

                    P.S. Сам писал про switch, а код не поправил, и про мою вторую версию ничего не сказал.
                    Ответить
                    • > В превышении ID > BORDER нет ничего страшного
                      Выдача кривых результатов, пусть даже на один раз - вот что по определению плохо. Если обратишь внимание, я кэширую выборку, так что это всего лишь лишний проход по массиву. Учитывая что код вызывается пользователем после дождичка в четверг... В общем, не надо экономить на спичках.

                      >Сам писал про switch, а код не поправил
                      Увы, я привык что в питоне можно задавать любые ключи литералу словаря (например, {1:2, 3:4}) и есть метод .get(key, default). В JS такого нет, так что твой способ таки удобнее словаря в данном случае.

                      > про мою вторую версию ничего не сказал
                      Ты про альтернативный метод задания исключений из общей формулы? Ну, можно и так, конечно.
                      Ответить
                  • BORDER = (BORDER>=id) ? BORDER : id;

                    Говнокод делать присваивание каждый раз, уж лучше иф в одну строку развернуть, коль краткости жаждешь.
                    Ответить
      • > хотя на мой взгляд нет однозначной корелляции между "олдфажностью" и адекватностью.

        ТЫ ХУЙ ПИПИСЬКА ВСЕ ОЛДФАГИ СУКА БЛЯ ОХУЕННЫ И ЕСЛИ ИД МЕНЬШЕ ТЫСИЧИ ТО ЭТО ПРО ПАЦАН А ВСЕ НЬЮФАГИ ПИТУШКИ ОЛОЛО И ИХ ВСЕХ ЗАТРАЛЕЛИ КАК ЛАЛОК
        Ответить
        • Дай угадаю, писал с шифтом, ибо так яростнее, а капс не труъ?
          Ответить
          • Ой бля, капс, я и забыл, что есть такая кнопка
            Ответить
            • Я тоже забыл. У меня некоторые буквы чуть больше, потому что я шифт чуть сильнее давил.
              Ответить
        • 3AЧEM Tbl MHE HAПOMHИЛ ЧTO Я HE ПAПAЛ В TblCИЧY CABCEM 3ATPAЛИTb XOЧИШb
          Tbl KAKA
          Ответить
    • Мне кажется, стоит серьёзно подумать над функцией ньюфажности (в коде - coeff), а также - о её линейности. Скорее всего, надо использовать что-то вроде
      f(ID) = (exp(ID*k/M) - 1)/(exp(k) - 1)

      где k монотонно возрастает вместе с ID пользователя, установившего скрипт (мне бы подошло k=5..10, Вам - k=2), а M - TOP_BORDER.
      Ответить
      • Да, это самая интересная часть скрипта, и я надеялся на местных математиков во главе с @TarasB, что бы посоветовали как сделать годную градацию фажностей.
        >/summon TarasB_
        Ответить
      • Надо наоборот - резкий рост на мелких ид и медленный на высоких.
        Логарифм больше подойдёт.
        (ln((ID/TOP_BORDER)*k)+1)/(ln(k)+1);
        Ответить
        • Уже проще ручками список составить.
          Ответить
        • > резкий рост на мелких ид и медленный на высоких
          Это психология труъ олдфага :)
          А я, будучи ньюфагом, ожидаю увидеть достаточно красными и тех, у кого ID около 4К. Аналогично с детьми, которым 20ти-30тилетние кажутся стариками.
          Ответить
    • Вьюшка для тех, кому за тридц лень тестить.
      http://tinyurl.com/q8ewrm7
      Ответить
      • Самый царь - красные гесты.
        Ответить
        • Да, надо ввести список исключительных случаев, что бы всяких анонимбов и гвестоту оставлять серыми или коричневыми как говно.
          Ответить
    • Оффтопну, а можно в userjs настройки иметь не в коде? Красноочковым иначе придется реально править код.
      Ответить
      • У Гризманки (для ФФ) вроде есть своё хранилище (GM_setValue/GM_getValue).

        А так вывод окошка (по ссылке в углу страницы, по горячей клавише и т. п.) для установки cookies или localStorage никто не запрещал.
        Ответить
        • То есть, самому делать окно, и, главное, только на сайте, отдельных настроек скрипта нет?

          Куки иногда чистятся, localstorage - мб.
          Ответить
          • Посмотрел — в Фуррифоксе в диалоговом окне Greasemonkey есть только настройки include/exclude, а для всего прочего — кнопка «Edit script», которая вызывает Блокнот.

            Если не хотим редактировать скрипт, то волей-неволей придётся самим рисовать окно с переключателями настроек, например, в виде дива, всплывающего над страницей сайта.

            Более удобное решение — завернуть скрипт в расширение браузера. Увы, оно не кроссбраузерное, т. е. придётся пилить xpi, crx, oex и т. п., зато через API расширений можно добавлять пункты меню для редактирования настроек.
            Ответить
            • Врезультате говнокод.ру превратитсься в тощий сервер с толстым клиентом. На главной будет только ссылка "скачать клиент", а на сервере только скрипт для хендшейка, а дальше уже по WebRTP комментами обменеваться. И так мы возродим ФИДО, а затем, может, и бумажную почту, для надежности.
              Ответить
              • > И так мы возродим ФИДО, а затем, может, и бумажную почту, для надежности.
                Но это же круто!
                Ответить
              • > тощий сервер с толстым клиентом
                А нету такого направления, типо легко затачиваемого под клиента вида?
                Ответить
                • Ну как бы об этом с переменным успехом говорили еще начиная с момента появления Ява-апплетов, потом NPAPI / ActiveX. Было время в конце девяностых появилось куча технологий с 3Д звук/видео и т.д. Потом, как-то на время затихло. Ну, потом Флеш, а вслед за ним Сильверлайт и Юнити. Сейчас ситуация какая-то не понятная. Из ж.скрипта особо ничего путнего не построить, а альтернативы какие-то все ущербные... Ынтырпрайз мечется между GWT и попытками склепать что-то самодельное, но что из этого в итоге получится пока не понятно.
                  Ответить
                  • Меня интересует что-то вида страницы, напичканной идами или вообще отдающих сериализованные данные, а гуй строится каким-нибудь userjs.
                    Ответить
                    • Есть адские примеры подобного. Ну, вот взять хотя бы QC (баг треккер написаный в HP). Примерно так и работает: АктивХ на бейсике, загружается через МСИЕ. Одним словом, мракобесие.
                      Ответить
                      • Дык js это не потенциально небезопасная херня, заточеная под MS, без админа, есесно, не ставящаяся итд?
                        Ответить
                      • > АктивХ на бейсике, загружается через МСИЕ
                        Кто-то у них не осилил HTML и js? ;)
                        Ответить
                        • Ынтырпрайз логика как она есть: don't ask don't tell.
                          Ответить
                          • Кстати в тему о хп. В комплекте с дровами к моему старенькому лазерджету 1010 есть приблуда для проверки-прочистки и т.п. Не будем обсуждать бесполезность этой тулзы, самое главное, что она работает через... tomcat. Да-да. Это локальная виндовз-онли(?) тулза, которая юзает tomcat и браузер.
                            Ответить
                            • Ну они могли и свою операционку тоже поставить, или стеклянную рыбу накатать вместо томката, им это как два байта переслать.
                              Ответить
                              • 101х - слишком олдовый принтер для глассфиш и прочих новомодных ынтерпрайз орокол веблоджиков
                                насколько я помню, под него уже даже под висту официальных дров нет (но подходят от старшей в серии модели)
                                хорошие раньше вещи делали, у родителей уже 8 лет работает

                                моему то бывшему hp принтеру поновее уже доводилось мат. плату прогревать, принтер то починился, но осадочек остался, и он впал в немилость
                                Ответить
                                • > но осадочек остался, и он впал в немилость
                                  впал в немилость... Так типично, узнаю себя. Пожалуй, только люди из таких вот зашкваренных кругов, вроде программистов, могут так относиться к подобным вещам. Принтер может подмочить репутацию, и всё такое.
                                  Ответить
                                  • когда ты покупаешь принтеру новый родной картридж за $100, а он окончательно ломается и мигает непонятными сигналами в самый неподходящий момент - тут немудрено попасть в опалу
                                    тщательно выбрал и купил киосеру - езернет, дуплекс, всё отлично
                                    а hp от свалки остановило только то, что я решил таки попробовать вынуть из него материнку и прогреть - благо на работе есть тех отдел (ремонтируют железки и примусы), и вместо духовки/строительного фена (в инете народ смекалист) мне за пачку молока (от пива отказались!) прогрели нормальной паяльной станцией
                                    и всё стало хорошо с ним
                                    теперь hp принтер комиссован в сибирь к тёще бгг
                                    не торт уже hp, ой не торт
                                    Ответить
                                    • Да, хорошо когда под боком починяют примусы.
                                      > не торт уже hp, ой не торт
                                      У меня ноут hp, и да, не торт.
                                      Ответить
                                      • с другой стороны, шняга hp ilo (integration lights-out) меня приятно впечатлила

                                        10 лет тому назад большевики о таком и помечтать не могли
                                        Ответить
                                        • О, спасибо за наводку. Благодаря sourceforge сделал так:
                                          ...
                                          // @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
                                          // @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
                                          ...
                                          waitForKeyElements('.hcomment', nickColors);
                                          Всё, конечно, на соплях, но зато всё говно не в коде, а по ссылкам. Душа спокойна.

                                          P.S. да, у меня этот метод подтормаживает. Отзовитесь, если кто попробует сделать так же, как у вас работает.
                                          Ответить
                                          • >@require
                                            Не нужно лишних зависимостей, jquery уже загружен, зачем ты его еще раз грузишь?
                                            Ответить
            • s/Блокнот/тесктовый редактор

              Есть ещё возможность через API обезьянки добавлять в контекстное меню самой макаки пункты, но для нормальных настроек со вводом данных не пойдёт. Так, галочки поставить.
              Ответить
              • Ну для ввода данных я как раз гризманковское меню+prompt() использую, работает.

                А вообще потыкай палочкой вот это, вдруг пригодится: http://userscripts.org/guides/11
                Ответить
            • Расширения у меня вызывают очкокомпрессирующую реакцию, т.к. расширение загружено постоянно и может творить что угодно и хуй разберешься потом, из-за чего прыщелис тормозит и жрет сотни памяти.

              Лучше были бы расширения, которые грузятся только для конкретного сайта. Т.е. userjs на стероидах. В XBMC, кстати, есть 2 вида аддонов: обычные, которые запускаются с 0 только при вызове, и резидентные, запущенные все время.
              Ответить
              • Мне тоже это не нравится. Но заворачивать скрипты в расширения — это стильно, модно, молодёжно... потому что УСТАНАВЛИВАЮТСЯ ОДНОЙ КНОПКОЙ!!!11

                Особо упоротые разработчики даже CSS и прочую мелкую хрень заворачивают в расширения.
                Ответить
                • Так надо сделать, чтобы юзерскрипты устанавливались одной кнопкой, а не потенциальные тормоза и вообще угрозу безопасности ставить.
                  Ответить
          • > отдельных настроек скрипта
            То, что сохраняется через GM_setValue хранится в конфигах самого Firefox, так что если считать "отдельными настройками скрипта" ломление на about:config и ввод имени скрипта, то-таки есть!
            Ответить
    • Как работает 'p.author a:nth-child(2), strong.entry-author a' ? Это CSS селектор?
      Ответить
      • Да, это ведь переданный jQuery селектор. Загляните в разметку уютненького.
        p.author a:nth-child(2) - это ссылки под ОП-кодами с именами авторов
        strong.entry-author a - это ссылки на авторов комментариев
        Ответить
        • А можешь расшифровать его или перевести в xpath?
          Ответить
          • В смысле расшифровать? Ты что CSS селектор не понимаешь? Что-то тролотой пахнет. Ну на всякий случай:
            На уютненьком имя автора поста является ссылкой. В случае с ОП-постом, эта ссылка лежит в блоке 'p' с классом '.author' и является его вторым по счёту ребёнком. (Первый - аватарка, третий - дата постинга.) Выходит селектор 'p.author a:nth-child(2)'.
            Имя автора комментария - тоже ссылка, но лежит в блоке 'strong' с классом 'entry-author' и является единственной ссылкой в этом блоке. Выходит 'strong.entry-author a'.
            Оба эти случая перечисляются через запятую в селекторе, описывая все имена авторов постов на странице.
            Всё это должно быть самоочевидно и выясняется просмотром исходного кода страницы или инспектингом чем-нибудь вроде firebug или встроенных.
            Ответить
            • nth-child(2) все же говнокод. Чуть изменилась разметка, переставили местами пару элементов, и каюк.
              Я бы лучше попробовал псевдоселектор ".author a:not(has(img))". Тоже не шедевр стабильности, конечно.
              Ответить
              • Все, что не привязано к иду или классу - по сути говнокод.
                Ответить
                • Т.е. в принципе может отвалиться, но на самом деле пофиг.
                  Ответить
                • Ну тут не поспоришь, но если страйко не озаботился классом конечного элемента, то остаётся выбирать из сортов говна.
                  Ответить
            • >Ты что CSS селектор не понимаешь?
              Да, я их плохо понимаю, веб девелом не занимался, только веб парсингом.

              " " и ">" - это одно и то же, т.е. следующий потомок?

              Запятая - это или или?

              В xpath так будет?
              //p[@class="author"]/a[2]
              или
              //strong[@class="entry-author"]/a

              А как получить css выражение для тега? Абсолютный xpath можно, а css?
              Ответить
              • http://www.w3.org/TR/css3-selectors/

                Пробел — это потомок произвольного уровня, а знак «больше» — только непосредственный потомок.
                Ответить
                • Может, подскажете такую вещь?

                  <tr id="tr-1234">
                  ...
                  <a id="tt-1234" href="." class="torTopic bold tt-text">__text__</a>
                  ...
                  <tr>

                  Как скрыть все tr с идом вида tr-\d+, если у него ниже по дереву в тексте тега a есть запрещенное слово? Есть jquery, но идеально было бы css селектор, тогда можно было бы заюзать правило адблока.
                  Ответить
                  • Для поиска tr можно использовать tr[id^="tr-"] (конструкция ^= требует css3, т. е. не работает в говне мамонта). Про экранирование минуса бэкслэшем я написал зря, оно нужно только в конструкциях #id и .class.

                    К сожалению, поиск текста в элементе (псевдоселектор :contains()) — изобретение jquery, в чистом css поиска содержимого нет. Всё, что есть в CSS3, перечислено по ссылке в разделе #selectors
                    Ответить
                    • P.S. И в черновике CSS4 тоже нет:
                      http://dev.w3.org/csswg/selectors4/
                      Ответить
                    • А как оно будет на jquery с максимальной скоростью? И запрещенных слов может быть много и регистронезависимых.
                      Ответить
    • Hello. And Bye.

      name
      William Othem
      William aSetdurse

      sign1
      text
      1 cent instant casino accepting wiredpaypaysafe mit payeer kaufen wiredpay

      sign profile
      <a href=>paysafecard agintitle affiliate programs that pay with bitcoin okpay</a>

      sign
      <a href=http://day-fund.net>sell webmoney onlinecredit card to lr perfect money</a>

      sign2
      <a href=http://elitebankir.com?ref=dmslxoj>new hyip $10 signup bonus free depositperfect money bitcoin convert payeer</a>

      words
      money booker to lrper bitcoin wiredpay kaufen perfect money

      links
      http://liderfinance.com?ref=qzujyki

      testA
      http://trust-dollar.com
      Ответить

    Добавить комментарий