Socket
Socket
Sign inDemoInstall

linkifyjs

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

linkifyjs - npm Package Compare versions

Comparing version 2.0.0-beta.5 to 2.0.0-beta.6

html.js

14

lib/linkify-string.js

@@ -11,7 +11,7 @@ /**

function cleanText(text) {
function escapeText(text) {
return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
function cleanAttr(href) {
function escapeAttr(href) {
return href.replace(/"/g, '&quot;');

@@ -27,3 +27,3 @@ }

var val = (attributes[attr] + '').replace(/"/g, '&quot;');
result.push(attr + '="' + cleanAttr(val) + '"');
result.push(attr + '="' + escapeAttr(val) + '"');
}

@@ -53,5 +53,5 @@ return result.join(' ');

var link = '<' + tagName + ' href="' + cleanAttr(formattedHref) + '" class="' + cleanAttr(linkClass) + '"';
var link = '<' + tagName + ' href="' + escapeAttr(formattedHref) + '" class="' + escapeAttr(linkClass) + '"';
if (target) {
link += ' target="' + cleanAttr(target) + '"';
link += ' target="' + escapeAttr(target) + '"';
}

@@ -63,3 +63,3 @@

link += '>' + cleanText(formatted) + '</' + tagName + '>';
link += '>' + escapeText(formatted) + '</' + tagName + '>';
result.push(link);

@@ -73,3 +73,3 @@ } else if (token.type === 'nl' && opts.nl2br) {

} else {
result.push(cleanText(token.toString()));
result.push(escapeText(token.toString()));
}

@@ -76,0 +76,0 @@ }

@@ -42,3 +42,10 @@ /**

TT_SYM = _tokens.text.SYM,
TT_TLD = _tokens.text.TLD;
TT_TLD = _tokens.text.TLD,
TT_OPENBRACE = _tokens.text.OPENBRACE,
TT_OPENBRACKET = _tokens.text.OPENBRACKET,
TT_OPENPAREN = _tokens.text.OPENPAREN,
TT_CLOSEBRACE = _tokens.text.CLOSEBRACE,
TT_CLOSEBRACKET = _tokens.text.CLOSEBRACKET,
TT_CLOSEPAREN = _tokens.text.CLOSEPAREN;
// TT_WS = TEXT_TOKENS.WS;

@@ -89,2 +96,20 @@

// URL followed by some symbols (will not be part of the final URL)
S_URL_OPENBRACE = makeState(),
// URL followed by {
S_URL_OPENBRACKET = makeState(),
// URL followed by [
S_URL_OPENPAREN = makeState(),
// URL followed by (
S_URL_OPENBRACE_Q = makeState(T_URL),
// URL followed by { and some symbols that the URL can end it
S_URL_OPENBRACKET_Q = makeState(T_URL),
// URL followed by [ and some symbols that the URL can end it
S_URL_OPENPAREN_Q = makeState(T_URL),
// URL followed by ( and some symbols that the URL can end it
S_URL_OPENBRACE_SYMS = makeState(),
// S_URL_OPENBRACE_Q followed by some symbols it cannot end it
S_URL_OPENBRACKET_SYMS = makeState(),
// S_URL_OPENBRACKET_Q followed by some symbols it cannot end it
S_URL_OPENPAREN_SYMS = makeState(),
// S_URL_OPENPAREN_Q followed by some symbols it cannot end it
S_EMAIL_DOMAIN = makeState(),

@@ -167,3 +192,3 @@ // parsed string starts with local email info + @ with a potential domain name (C)

// Types of characters the URL can definitely end in
var qsAccepting = [TT_DOMAIN, TT_AT, TT_LOCALHOST, TT_NUM, TT_PLUS, TT_POUND, TT_PROTOCOL, TT_SLASH, TT_TLD, TT_SYM];
var qsAccepting = [TT_DOMAIN, TT_AT, TT_LOCALHOST, TT_NUM, TT_PLUS, TT_POUND, TT_PROTOCOL, TT_SLASH, TT_TLD];

@@ -173,4 +198,53 @@ // Types of tokens that can follow a URL and be part of the query string

// Characters that cannot appear in the URL at all should be excluded
var qsNonAccepting = [TT_COLON, TT_DOT, TT_QUERY, TT_PUNCTUATION];
var qsNonAccepting = [TT_COLON, TT_DOT, TT_QUERY, TT_PUNCTUATION, TT_CLOSEBRACE, TT_CLOSEBRACKET, TT_CLOSEPAREN, TT_OPENBRACE, TT_OPENBRACKET, TT_OPENPAREN, TT_SYM];
// These states are responsible primarily for determining whether or not to
// include the final round bracket.
// URL, followed by an opening bracket
S_URL.on(TT_OPENBRACE, S_URL_OPENBRACE);
S_URL.on(TT_OPENBRACKET, S_URL_OPENBRACKET);
S_URL.on(TT_OPENPAREN, S_URL_OPENPAREN);
// URL with extra symbols at the end, followed by an opening bracket
S_URL_SYMS.on(TT_OPENBRACE, S_URL_OPENBRACE);
S_URL_SYMS.on(TT_OPENBRACKET, S_URL_OPENBRACKET);
S_URL_SYMS.on(TT_OPENPAREN, S_URL_OPENPAREN);
// Closing bracket component. This character WILL be included in the URL
S_URL_OPENBRACE.on(TT_CLOSEBRACE, S_URL);
S_URL_OPENBRACKET.on(TT_CLOSEBRACKET, S_URL);
S_URL_OPENPAREN.on(TT_CLOSEPAREN, S_URL);
S_URL_OPENBRACE_Q.on(TT_CLOSEBRACE, S_URL);
S_URL_OPENBRACKET_Q.on(TT_CLOSEBRACKET, S_URL);
S_URL_OPENPAREN_Q.on(TT_CLOSEPAREN, S_URL);
S_URL_OPENBRACE_SYMS.on(TT_CLOSEBRACE, S_URL);
S_URL_OPENBRACKET_SYMS.on(TT_CLOSEBRACKET, S_URL);
S_URL_OPENPAREN_SYMS.on(TT_CLOSEPAREN, S_URL);
// URL that beings with an opening bracket, followed by a symbols.
// Note that the final state can still be `S_URL_OPENBRACE_Q` (if the URL only
// has a single opening bracket for some reason).
S_URL_OPENBRACE.on(qsAccepting, S_URL_OPENBRACE_Q);
S_URL_OPENBRACKET.on(qsAccepting, S_URL_OPENBRACKET_Q);
S_URL_OPENPAREN.on(qsAccepting, S_URL_OPENPAREN_Q);
S_URL_OPENBRACE.on(qsNonAccepting, S_URL_OPENBRACE_SYMS);
S_URL_OPENBRACKET.on(qsNonAccepting, S_URL_OPENBRACKET_SYMS);
S_URL_OPENPAREN.on(qsNonAccepting, S_URL_OPENPAREN_SYMS);
// URL that begins with an opening bracket, followed by some symbols
S_URL_OPENBRACE_Q.on(qsAccepting, S_URL_OPENBRACE_Q);
S_URL_OPENBRACKET_Q.on(qsAccepting, S_URL_OPENBRACKET_Q);
S_URL_OPENPAREN_Q.on(qsAccepting, S_URL_OPENPAREN_Q);
S_URL_OPENBRACE_Q.on(qsNonAccepting, S_URL_OPENBRACE_Q);
S_URL_OPENBRACKET_Q.on(qsNonAccepting, S_URL_OPENBRACKET_Q);
S_URL_OPENPAREN_Q.on(qsNonAccepting, S_URL_OPENPAREN_Q);
S_URL_OPENBRACE_SYMS.on(qsAccepting, S_URL_OPENBRACE_Q);
S_URL_OPENBRACKET_SYMS.on(qsAccepting, S_URL_OPENBRACKET_Q);
S_URL_OPENPAREN_SYMS.on(qsAccepting, S_URL_OPENPAREN_Q);
S_URL_OPENBRACE_SYMS.on(qsNonAccepting, S_URL_OPENBRACE_SYMS);
S_URL_OPENBRACKET_SYMS.on(qsNonAccepting, S_URL_OPENBRACKET_SYMS);
S_URL_OPENPAREN_SYMS.on(qsNonAccepting, S_URL_OPENPAREN_SYMS);
// Account for the query string

@@ -177,0 +251,0 @@ S_URL.on(qsAccepting, S_URL);

@@ -55,2 +55,8 @@ /**

S_START.on(COLON, makeState(_tokens.text.COLON));
S_START.on('{', makeState(_tokens.text.OPENBRACE));
S_START.on('[', makeState(_tokens.text.OPENBRACKET));
S_START.on('(', makeState(_tokens.text.OPENPAREN));
S_START.on('}', makeState(_tokens.text.CLOSEBRACE));
S_START.on(']', makeState(_tokens.text.CLOSEBRACKET));
S_START.on(')', makeState(_tokens.text.CLOSEPAREN));
S_START.on(/[,;!]/, makeState(_tokens.text.PUNCTUATION));

@@ -57,0 +63,0 @@

@@ -319,5 +319,81 @@ /******************************************************************************

/**
Opening/closing bracket classes
*/
return WS;
})(TextToken);
var OPENBRACE = (function (_TextToken17) {
_inherits(OPENBRACE, _TextToken17);
function OPENBRACE() {
_classCallCheck(this, OPENBRACE);
_TextToken17.call(this, '{');
}
return OPENBRACE;
})(TextToken);
var OPENBRACKET = (function (_TextToken18) {
_inherits(OPENBRACKET, _TextToken18);
function OPENBRACKET() {
_classCallCheck(this, OPENBRACKET);
_TextToken18.call(this, '[');
}
return OPENBRACKET;
})(TextToken);
var OPENPAREN = (function (_TextToken19) {
_inherits(OPENPAREN, _TextToken19);
function OPENPAREN() {
_classCallCheck(this, OPENPAREN);
_TextToken19.call(this, '(');
}
return OPENPAREN;
})(TextToken);
var CLOSEBRACE = (function (_TextToken20) {
_inherits(CLOSEBRACE, _TextToken20);
function CLOSEBRACE() {
_classCallCheck(this, CLOSEBRACE);
_TextToken20.call(this, '}');
}
return CLOSEBRACE;
})(TextToken);
var CLOSEBRACKET = (function (_TextToken21) {
_inherits(CLOSEBRACKET, _TextToken21);
function CLOSEBRACKET() {
_classCallCheck(this, CLOSEBRACKET);
_TextToken21.call(this, ']');
}
return CLOSEBRACKET;
})(TextToken);
var CLOSEPAREN = (function (_TextToken22) {
_inherits(CLOSEPAREN, _TextToken22);
function CLOSEPAREN() {
_classCallCheck(this, CLOSEPAREN);
_TextToken22.call(this, ')');
}
return CLOSEPAREN;
})(TextToken);
var text = {

@@ -340,3 +416,9 @@ Base: TextToken,

TLD: TLD,
WS: WS
WS: WS,
OPENBRACE: OPENBRACE,
OPENBRACKET: OPENBRACKET,
OPENPAREN: OPENPAREN,
CLOSEBRACE: CLOSEBRACE,
CLOSEBRACKET: CLOSEBRACKET,
CLOSEPAREN: CLOSEPAREN
};

@@ -343,0 +425,0 @@

{
"name": "linkifyjs",
"version": "2.0.0-beta.5",
"version": "2.0.0-beta.6",
"description": "Intelligent link recognition, made easy",

@@ -30,3 +30,4 @@ "repository": {

],
"dependencies": {},
"dependencies": {
},
"devDependencies": {

@@ -62,3 +63,4 @@ "amd-optimize": "^0.6.1",

"mocha": "^2.3.3",
"phantomjs": "^1.9.18"
"phantomjs": "^1.9.18",
"simple-html-tokenizer": "https://github.com/nfrasser/simple-html-tokenizer.git#master"
},

@@ -65,0 +67,0 @@ "optionalDependencies": {

@@ -11,2 +11,4 @@ # Linkify

**A build repository is maintained [here](https://github.com/nfrasser/linkify-shim).**
__Jump to__

@@ -171,3 +173,3 @@

Download the [**latest release**](https://github.com/SoapBox/linkifyjs/releases)
Download the [**latest release**](https://github.com/SoapBox/linkifyjs/releases) or clone the [**build repository**](https://github.com/nfrasser/linkify-shim).

@@ -174,0 +176,0 @@ **[linkify](http://soapbox.github.io/linkifyjs/docs/linkify.html)** _(required)_<br> [`.min.js`](https://github.com/nfrasser/linkify-shim/raw/master/linkify.min.js) · [`.js`](https://github.com/nfrasser/linkify-shim/raw/master/linkify.js) · [`.amd.min.js`](https://github.com/nfrasser/linkify-shim/raw/master/linkify.amd.min.js) · [`.amd.js`](https://github.com/nfrasser/linkify-shim/raw/master/linkify.amd.js)

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc