Linkificator 2.0.4

Автор: MarkaPola
Размер: 114 КБ
Домашняя страница: https://addons.mozilla.org/ru/firefox/a … kificator/
Перевод на русский: iHastr
Совместимость: [firefox] 21 – 33

Описание: Linkificator преобразует текстовые ссылки в кликабельные.

Это дополнение разбирает текстовые части HTML-страниц для сопоставления гипертекстовым шаблонам и преобразует их в кликабельные ссылки в соответствии с заданными правилами.

Имеет такой же функционал, как у дополнения Linkification, которое, кажется, больше не поддерживается. Дополнение Linkificator может использоваться в качестве его замены. Для корректной работы необходимо оставить включенным только одно из этих дополнений!

Установить Linkificator 2.0.4 Русская версия

А как включить подобные ссылки?
nnm.me

villa7
С таким вопросом надо к автору расширения,на странице AMO
А пока только так-Linkification
Уделывает по производительности и Linkificator,и отца-основателя Linkification
Вот только доработать бы-по клику активирует ссылки,а в идеале-автоматом.

VORON
Есть скрипт от этого же автора, работает автоматом. Спрашивал про это расширение на всякий случай, вдруг скрипт накроется.

скрытый текст

Выделить код

Код:

// ==UserScript==
// @name           Linkification
// @namespace      http://userscripts.org/users/splurov/
// @include        *
// ==/UserScript==

(function(){

// (c) http://data.iana.org/TLD/tlds-alpha-by-domain.txt
var domains = ['ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'];

// (c) http://yellow5.us/firefox/linkification/
var tagsForSkip = ['a', 'applet', 'area', 'embed', 'frame', 'frameset', 'head', 'iframe', 'img', 'map', 'meta', 'noscript', 'object', 'option', 'param', 'script', 'select', 'style', 'textarea', 'title'];

var inArray = function(value, items) {
    for (var i = 0; items[i] && value != items[i]; i++);
    return value == items[i];
}

var urlsRegExp = /(^|[\s()\[\]_:~+@*"'>])((?:https?|ftp|irc):\/\/)?([-a-z\d;:&=+$,%_.!~*'()]+@)?((?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:(www|irc|ftp)\.)?(?:(?:[a-z\d]|[a-z\d][a-z\d-]*[a-z\d])\.)+([a-z]{2,6}))(:\d+)?(\/(?:[-\w.!~*'()%:@&=+$,;\/]*[\w~*%@&=+$\/])?(?:\?(?:[-\w;\/?:@&=+$,.!~*'()%\[\]|]*[\w\/@&=+$~*%])?)?(?:#(?:[-\w;\/?:@&=+$,.!~*'()%]*[\w\/@&=+$~*%])?)?|\b)/i

var linksCounter = 0;

var current = document.body;
while (current) {
    if (current.nodeName == '#text' && (match = current.nodeValue.match(urlsRegExp)) && inArray(match[6], domains)) {
        var url;
        if (match[3] && ! match[2] && ! match[5] && ! match[8] && (match[3].indexOf(':') == -1 || match[3].indexOf('mailto:') == 0)) {
            url = (match[3].indexOf('mailto:') == -1 ? 'mailto:' : '')
                    + match[3]
                    + match[4];
        }
        else {
            url = (match[2] ? match[2] : (! match[5] || match[5] == 'www' ? 'http' : match[5]) + '://')
                    + (match[3] ? match[3] : '')
                    + match[4]
                    + (match[7] ? match[7] : '')
                    + (match[8] ? match[8] : '');
        }
        if (url) {
            var range = document.createRange();
            range.setStart(current, match.index + match[1].length);
            range.setEnd(current, match.index + match[0].length);
            var a = document.createElement('a');
            a.setAttribute('href', url);
            a.setAttribute('class', 'linkified');
            a.appendChild(range.extractContents());
            range.insertNode(a);
            range.detach();
            linksCounter++;
        }
    }
    if (current.tagName && !inArray(current.tagName.toLowerCase(), tagsForSkip) && current.firstChild) {
        current = current.firstChild;
    }
    else if (current.nextSibling) {
        current = current.nextSibling;
    }
    else {
        do {
            current = current.parentNode;
        } while (!current.nextSibling && current.parentNode);
        current = current.nextSibling;
    }
}

if (linksCounter > 0) {
    var style = document.createElement('style');
    style.type = 'text/css';
    style.appendChild(document.createTextNode('a.linkified:before {content: "~"; color: #e00;}'));
    document.getElementsByTagName('head')[0].appendChild(style);
}

})();

villa7
Очень неплохая вещь,возьмём на вооружение.

villa7 пишет

VORON
Есть скрипт от этого же автора, работает автоматом. Спрашивал про это расширение на всякий случай, вдруг скрипт накроется.

скрытый текст

Выделить код

Код:

// ==UserScript==
// @name           Linkification
// @namespace      http://userscripts.org/users/splurov/
// @include        *
// ==/UserScript==

(function(){

// (c) http://data.iana.org/TLD/tlds-alpha-by-domain.txt
var domains = ['ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'];

// (c) http://yellow5.us/firefox/linkification/
var tagsForSkip = ['a', 'applet', 'area', 'embed', 'frame', 'frameset', 'head', 'iframe', 'img', 'map', 'meta', 'noscript', 'object', 'option', 'param', 'script', 'select', 'style', 'textarea', 'title'];

var inArray = function(value, items) {
    for (var i = 0; items[i] && value != items[i]; i++);
    return value == items[i];
}

var urlsRegExp = /(^|[\s()\[\]_:~+@*"'>])((?:https?|ftp|irc):\/\/)?([-a-z\d;:&=+$,%_.!~*'()]+@)?((?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:(www|irc|ftp)\.)?(?:(?:[a-z\d]|[a-z\d][a-z\d-]*[a-z\d])\.)+([a-z]{2,6}))(:\d+)?(\/(?:[-\w.!~*'()%:@&=+$,;\/]*[\w~*%@&=+$\/])?(?:\?(?:[-\w;\/?:@&=+$,.!~*'()%\[\]|]*[\w\/@&=+$~*%])?)?(?:#(?:[-\w;\/?:@&=+$,.!~*'()%]*[\w\/@&=+$~*%])?)?|\b)/i

var linksCounter = 0;

var current = document.body;
while (current) {
    if (current.nodeName == '#text' && (match = current.nodeValue.match(urlsRegExp)) && inArray(match[6], domains)) {
        var url;
        if (match[3] && ! match[2] && ! match[5] && ! match[8] && (match[3].indexOf(':') == -1 || match[3].indexOf('mailto:') == 0)) {
            url = (match[3].indexOf('mailto:') == -1 ? 'mailto:' : '')
                    + match[3]
                    + match[4];
        }
        else {
            url = (match[2] ? match[2] : (! match[5] || match[5] == 'www' ? 'http' : match[5]) + '://')
                    + (match[3] ? match[3] : '')
                    + match[4]
                    + (match[7] ? match[7] : '')
                    + (match[8] ? match[8] : '');
        }
        if (url) {
            var range = document.createRange();
            range.setStart(current, match.index + match[1].length);
            range.setEnd(current, match.index + match[0].length);
            var a = document.createElement('a');
            a.setAttribute('href', url);
            a.setAttribute('class', 'linkified');
            a.appendChild(range.extractContents());
            range.insertNode(a);
            range.detach();
            linksCounter++;
        }
    }
    if (current.tagName && !inArray(current.tagName.toLowerCase(), tagsForSkip) && current.firstChild) {
        current = current.firstChild;
    }
    else if (current.nextSibling) {
        current = current.nextSibling;
    }
    else {
        do {
            current = current.parentNode;
        } while (!current.nextSibling && current.parentNode);
        current = current.nextSibling;
    }
}

if (linksCounter > 0) {
    var style = document.createElement('style');
    style.type = 'text/css';
    style.appendChild(document.createTextNode('a.linkified:before {content: "~"; color: #e00;}'));
    document.getElementsByTagName('head')[0].appendChild(style);
}

})();

Перед ссылкой появляется такой значок
i-4376.jpg
можно его убрать?

oleg.sgh
Удалите в предпоследней строчке
{content: "~"; color: #e00;}'));

villa7
Благодарю. Убрал ('a.linkified:before {content: "~"; color: #e00;}').

Linkificator 2.0.5
Мой русский перевод разработчик добавил официально на AMO.
https://addons.mozilla.org/ru/firefox/a … kificator/

villa7
Скрипт не срабатывает на https?
Например тут в комментариях

VORON

Скрипт не срабатывает на https?

Это к разработчику.

VORON

скрытый текст
s-4478.png

oleg.sgh
http://images.vfl.ru/ii/1411910380/0dc00015/6489673.jpg

VORON Установлен скрипт из №4

скрытый текст
s-4480.png

VORON пишет

Скрипт не срабатывает на https?
Например тут в комментариях

Работает на https, просто на amo комментарии загружаются после загрузки страницы а не сразу, поэтому на них не срабатывает. А если открыть только комменты https://addons.mozilla.org/ru/firefox/addon/forecastfox-weather/reviews/
то все работает.

oleg.sgh пишет

villa7
Благодарю. Убрал ('a.linkified:before {content: "~"; color: #e00;}').

Можно убрать весь блок кода, он без этой строчки становится бесполезен

Выделить код

Код:

if (linksCounter > 0) {
    var style = document.createElement('style');
    style.type = 'text/css';
    style.appendChild(document.createTextNode('a.linkified:before {content: "~"; color: #e00;}'));
    document.getElementsByTagName('head')[0].appendChild(style);
}

Я в своей версии скрипта так и сделал, вдобавок обновил список доменов верхнего уровня (их с каждым годом всё больше появляется).

dartraiden
Установил для посмотреть. Спасибо.