1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Пакет Карусель Полезности Гильдия Полли

4GameForum Helper. Расширение для форума под Chrome.

Тема в разделе "Общий раздел", создана пользователем KrishNyash, 31 мар 2015.

  1. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    [​IMG]

    движок vbulletin, на котором крутится данный форум - не идеален, в частности: в браузере chrome на некоторых конфигурациях не наблюдается кнопки "на весь экран" во встроенных видео. иннова, в силу лицензионного соглашения, не вправе изменять исходный код движка, но у себя-то мы можем делать с загружаемыми страницами все, что захотим :) данное расширение, объемом менее 15 кб, призвано сделать пребывание пользователей браузера chrome на форуме более комфортным.

    версия 1.21. список функций расширения
    • добавляет кнопку полноэкранного просмотра для встроенного видео на 4gameforum.ru.
    • скрывает большие картинки под
      на 4gameforum.ru ("большими" считаются картинки, высота которых более 450 пикселей, либо ширина более 700 пикселей). у картинок, скрытых расширением, вместо стандартного "скрытый текст" будет особый заголовок спойлера: "картинка (размер)".
    список изменений по сравнению с предыдущей версией
    • добавлена функция скрытия больших картинок. спасибо товарищу monstr за помощь!
    • интерфейс расширения переписан на русском языке.
    • иконка расширения заменена на желтенькую.
    • расширение теперь распространяется в виде простого zip-архива во имя упрощения установки и избежания мороки с установкой dev\canary-версий chrome.
    отказ от ответственности
    • расширение предоставляется "как есть". всю ответственность, прямо или косвенно связанную с использованием данного расширения вы берете на себя. возможны глюки \ баги.
    • администрация инновы к расширению не причастна.
    • если боитесь за свои данные \ безопасность: можете открыть папку расширения и просмотреть исходный код в любом текстовом редакторе.
    • работоспособность проверялась только в последней на данный момент stable-версии chrome (44.0.2369.0 m) при стандартном стиле форума (default vbulletin).
    • предложения и замечания принимаются в этой теме \ пм. однако, рассмотрение и принятие оных к сведению не гарантируется.
    установка
    1. скачать zip-архив с расширением.
    2. распаковать архив в любое удобное место.
    3. открыть страницу управления расширениями в chrome (меню - настройки - расширения; или ввести в адресную строку: "chrome://extensions/", без кавычек, офк).
    4. поставить галочку "режим разработчика". нажать на кнопку "загрузить распакованное расширение".
    5. указать папку, в которой лежат распакованные файлы расширения (в ней должны быть три файла и папка images). нажать "ок". обновить открытые страницы 4gameforum'а.
    6. ???
    7. profit! расширение не требует настройки, работает само по себе, активно только для 4gameforum.ru во время открытия\обновления страниц.
    8. если у вас обычная stable-версия (не dev и не canary) chrome, то после перезапуска браузера нужно будет подтвердить, что вы не хотите отключать расширение: в этом окошке надо будет нажать "отмена". о других способах решения данного вопроса можно почитать на хабре.
    удаление
    • удалить расширение можно со страницы управления расширениями в chrome (см. п.3 в установке).
    возможные проблемы
    • из-за кучи всяческих политик "безопасности" и других факторов, расширение может не установиться или установиться, но не заработать \ заработать не так как ожидается.
    • если на форуме будет установлено обновление движка, которое затронет функционал, используемый расширением - оно может перестать работать \ работать не так как ожидается. в этом случае будем переделывать.
     
    Последнее редактирование модератором: 18 апр 2015
    ПоZiTiVЧeG нравится это.
  2. Madeas

    Madeas Banned

    Регистрация:
    12.12.14
    Сообщения:
    1.332
    Симпатии:
    235
    ...а потом пойдут сообщения "у меня взломали акк" и в игре "продажа кинар, персонажей лалала" :d
     
  3. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    "если боитесь за свои данные \ безопасность: можете переименовать файл расширения в *.zip, разархивировать любым архиватором и посмотреть исходник - там, в общем-то, функциональных 5 строчек."
     
  4. Monstr

    Monstr Мудрец Aion Innova Group

    Регистрация:
    17.12.09
    Сообщения:
    8.770
    Симпатии:
    4.083
    ничего там криминального нет...
    [​IMG]
     
  5. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    обновлено: в 1й пост добавлено решение возможной проблемы.
     
  6. животное

    животное User

    Регистрация:
    22.12.09
    Сообщения:
    75
    Симпатии:
    3
    в лисе все нормально работает. в название темы хрома добавь ;)
    [​IMG]
     
    Последнее редактирование модератором: 2 апр 2015
  7. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    да, там есть кнопка. но это скорее потому, что сама лиса "додумывает" за создателей движка. нужного атрибута-то нет. вообще говоря это неоч правильно)
     
  8. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    задумал следующую функцию для расширения: чтобы большие картинки прятались под спойлер, если пользователь сам не удосужился :) например: https://4gameforum.ru/showthread.php?t=828832&p=14120500&viewfull=1#post14120500 только как реализовать пока не нагуглил)
     
  9. Monstr

    Monstr Мудрец Aion Innova Group

    Регистрация:
    17.12.09
    Сообщения:
    8.770
    Симпатии:
    4.083
    Код:
    
    [color=#000080][b]var [/b][/color][color=#660e7a][b][i]arelement [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]getelementsbyclassname[/color]([color=#008000][b]"postcontent"[/b][/color]);
    [color=#000080][b]for [/b][/color]([color=#000080][b]var [/b][/color][color=#660e7a][b][i]k [/i][/b][/color][color=#000080][b]in [/b][/color][color=#660e7a][b][i]arelement[/i][/b][/color]) {
       [color=#000080][b]if [/b][/color](![color=#660e7a][b][i]arelement[/i][/b][/color].[color=#7a7a43]hasownproperty[/color]([color=#660e7a][b][i]k[/i][/b][/color])) [color=#000080][b]continue[/b][/color];
    
       [color=#000080][b]var [/b][/color][color=#660e7a][b][i]arimg [/i][/b][/color]= [color=#660e7a][b][i]arelement[/i][/b][/color][[color=#660e7a][b][i]k[/i][/b][/color]].[color=#660e7a][b]childnodes[/b][/color];
    
       [color=#000080][b]for [/b][/color]([color=#000080][b]var [/b][/color][color=#660e7a][b][i]i [/i][/b][/color][color=#000080][b]in [/b][/color][color=#660e7a][b][i]arimg[/i][/b][/color]) {
          [color=#000080][b]if [/b][/color](![color=#660e7a][b][i]arimg[/i][/b][/color].[color=#7a7a43]hasownproperty[/color]([color=#660e7a][b][i]i[/i][/b][/color])) [color=#000080][b]continue[/b][/color];
          [color=#000080][b]if [/b][/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#660e7a][b]tagname [/b][/color]!== [color=#008000][b]"img"[/b][/color]) [color=#000080][b]continue[/b][/color];
          [color=#000080][b]if [/b][/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#660e7a][b]height [/b][/color]< [color=#0000ff]100[/color]) [color=#000080][b]continue[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]block [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#008000][b]"5px 20px 20px"[/b][/color];
    
          [color=#000080][b]var [/b][/color]container = [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          container.[color=#660e7a][b]classname [/b][/color]= [color=#008000][b]"smallfont"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]marginbottom [/b][/color]= [color=#008000][b]"2px"[/b][/color];
          container.[color=#660e7a][b]innerhtml [/b][/color]= [color=#008000][b]"скрытый текст: "[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]input [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"input"[/b][/color]);
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]type [/b][/color]= [color=#008000][b]"button"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]"показать"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"60px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].onclick = [color=#000080][b]function[/b][/color]() {
             [color=#000080][b]if [/b][/color]([color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]!= [color=#008000][b]''[/b][/color]) {
                [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'скрыть'[/b][/color];
             } [color=#000080][b]else [/b][/color]{
                [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]1[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]'none'[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
                [color=#000080][b]this[/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'показать'[/b][/color];
             }
          };
    
          container.[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]input[/i][/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#7a7a43]appendchild[/color](container);
    
    
          container = [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          container.[color=#660e7a][b]classname [/b][/color]= [color=#008000][b]"alt2"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#008000][b]"6px"[/b][/color];
          container.[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]border [/b][/color]= [color=#008000][b]"1px inset"[/b][/color];
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]content [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]"none"[/b][/color];
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]]);
    
          [color=#000080][b]var [/b][/color][color=#660e7a][b][i]closeblock [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"div"[/b][/color]);
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]textalign [/b][/color]= [color=#008000][b]"right"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margintop [/b][/color]= [color=#008000][b]"6px"[/b][/color];
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"98%"[/b][/color];
    
          [color=#660e7a][b][i]input [/i][/b][/color]= [color=#660e7a][b]document[/b][/color].[color=#7a7a43]createelement[/color]([color=#008000][b]"input"[/b][/color]);
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]type [/b][/color]= [color=#008000][b]"button"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]"скрыть"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]width [/b][/color]= [color=#008000][b]"60px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]fontsize [/b][/color]= [color=#008000][b]"10px"[/b][/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]margin [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].[color=#660e7a][b]style[/b][/color].[color=#660e7a][b]padding [/b][/color]= [color=#0000ff]0[/color];
          [color=#660e7a][b][i]input[/i][/b][/color].onclick = [color=#000080][b]function[/b][/color]() {
             [color=#000080][b]var [/b][/color][color=#458383]btnshow [/color]= [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#660e7a][b]parentnode[/b][/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'div'[/b][/color])[[color=#0000ff]0[/color]].[color=#7a7a43]getelementsbytagname[/color]([color=#008000][b]'input'[/b][/color])[[color=#0000ff]0[/color]];
             [color=#000080][b]if [/b][/color]([color=#458383]btnshow[/color].[color=#7a7a43]getboundingclientrect[/color]().[color=#660e7a][b]top [/b][/color]< [color=#0000ff]0[/color]) {
                [color=#458383]btnshow[/color].[color=#7a7a43]scrollintoview[/color]();
             }
             [color=#000080][b]this[/b][/color].[color=#7a7a43]parentnode[/color].[color=#660e7a][b]parentnode[/b][/color].[color=#7a7a43]style[/color].[color=#660e7a][b]display [/b][/color]= [color=#008000][b]'none'[/b][/color];
             [color=#458383]btnshow[/color].[color=#660e7a][b]innertext [/b][/color]= [color=#008000][b]''[/b][/color];
             [color=#458383]btnshow[/color].[color=#660e7a][b]value [/b][/color]= [color=#008000][b]'показать'[/b][/color];
          };
    
          [color=#660e7a][b][i]closeblock[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]input[/i][/b][/color]);
          [color=#660e7a][b][i]content[/i][/b][/color].[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]closeblock[/i][/b][/color]);
          container.[color=#7a7a43]appendchild[/color]([color=#660e7a][b][i]content[/i][/b][/color]);
          [color=#660e7a][b][i]block[/i][/b][/color].[color=#7a7a43]appendchild[/color](container);
    
          [color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]].[color=#7a7a43]parentnode[/color].[color=#7a7a43]replacechild[/color]([color=#660e7a][b][i]block[/i][/b][/color], [color=#660e7a][b][i]arimg[/i][/b][/color][[color=#660e7a][b][i]i[/i][/b][/color]]);
       }
    }

    данный код полностью имитирует структуру блоков которая сейчас есть на форуме. ищет только те картинки которые лежат "на поверхности".
    if (arimg[i].height < 100) continue; - в этой строке задаем какой минимальный размер картинок нужно скрывать :)

    собрал на коленке, минут за 20 :)
     
    Последнее редактирование модератором: 17 апр 2015
    KrishNyash нравится это.
  10. 3EPHOEd

    3EPHOEd Модератор 4Game Global moderator

    Регистрация:
    04.02.10
    Сообщения:
    16.742
    Симпатии:
    2.172
  11. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    первый пост обновлен, версия расширения обновлена до 1.2!

    большое спасибо! у меня ушло бы гораздо больше времени) обернул твой код в функцию, добавил, чтобы еще по цитатам проверял, вроде робит :cool:
    замечен так же еще глюк в работе стандартного спойлера в хроме при открытии\скрытии:
    [​IMG]
    в коде закомментил строки "this.innertext = '';", теперь спойлер расширения работает со стороны даж правильней, чем то, что генерит стандартный :d

    изменил схему установки, можно теперь не ставить различные dev\canary версии хрома. а то уже наприкалывался как некоторые сайты (батлы например) писали, что у меня не поддерживается браузер и из хрома предлагали установить хром))
     
    Последнее редактирование модератором: 18 апр 2015
  12. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    обнаружил баг, суть в том, что после строчки "content.appendchild(arimg);" arimg уже не тот, что до нее и вообще мог становиться udefined, немного перетасовал код.
    фикс применен, версия теперь 1.21. также добавил отображение размеров скрываемой картинки.
     
    Последнее редактирование модератором: 18 апр 2015
  13. Monstr

    Monstr Мудрец Aion Innova Group

    Регистрация:
    17.12.09
    Сообщения:
    8.770
    Симпатии:
    4.083
    а вот так делать не хорошо:
    [​IMG]

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

    поэтому правильнее будет так:
    [​IMG]

    т.е. записать свой обработчик стек обработчиков.
     
    Последнее редактирование модератором: 12 май 2015
  14. хКришна

    хКришна User

    Регистрация:
    26.02.10
    Сообщения:
    3.905
    Симпатии:
    1.236
    спасибо, я про такое даже мельком еще не видел)
     
  15. Monstr

    Monstr Мудрец Aion Innova Group

    Регистрация:
    17.12.09
    Сообщения:
    8.770
    Симпатии:
    4.083
    забавна, не могу получить дерево из пользовательского скрипта оперы... оно тупо пустое :(
    что-то я делаю не так.


    хех, кто захочет поизвращатся со старой оперой - читать тут: http://operafan.net/component/optio...d,tutorial:userjs:using/#chto_oni_mogut_delat последний абзац, про безопасные сайты.
     
    Последнее редактирование модератором: 12 май 2015
  16. deepburn

    deepburn User

    Регистрация:
    23.03.10
    Сообщения:
    8.299
    Симпатии:
    2.351
    капец вы задроты программерные. ни чего не понимаю.
     
  17. Льювелла

    Льювелла User

    Регистрация:
    29.08.11
    Сообщения:
    1.804
    Симпатии:
    394
    ты не одинок.
     
  18. Monstr

    Monstr Мудрец Aion Innova Group

    Регистрация:
    17.12.09
    Сообщения:
    8.770
    Симпатии:
    4.083
    вам оно собственно и не нужно. для вас все описано в первом посте, по шагам.
    те же, кто сознательно предпочитает старую опера - все все понимают :)
     
    Последнее редактирование модератором: 15 май 2015