mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-11 00:14:50 +03:00
Updated Autolinker library (Closes #532)
This commit is contained in:
parent
45fc261b28
commit
f817a680a2
15 changed files with 3145 additions and 869 deletions
|
|
@ -17,8 +17,7 @@
|
|||
|
||||
this.sBase = '#/';
|
||||
this.sServer = './?';
|
||||
this.sSubQuery = '&s=/';
|
||||
this.sSubSubQuery = '&ss=/';
|
||||
|
||||
this.sVersion = Settings.settingsGet('Version');
|
||||
this.sSpecSuffix = Settings.settingsGet('AuthAccountHash') || '0';
|
||||
this.sWebPrefix = Settings.settingsGet('WebPath') || '';
|
||||
|
|
@ -26,6 +25,14 @@
|
|||
this.sStaticPrefix = this.sVersionPrefix + 'static/';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
Links.prototype.subQueryPrefix = function ()
|
||||
{
|
||||
return '&q[]=';
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
|
|
@ -48,7 +55,7 @@
|
|||
*/
|
||||
Links.prototype.attachmentDownload = function (sDownload)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/Download/' + this.sSubSubQuery + sDownload;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/Download/' + this.subQueryPrefix() + '/' + sDownload;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -57,7 +64,7 @@
|
|||
*/
|
||||
Links.prototype.attachmentPreview = function (sDownload)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/View/' + this.sSubSubQuery + sDownload;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/View/' + this.subQueryPrefix() + '/' + sDownload;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -66,7 +73,7 @@
|
|||
*/
|
||||
Links.prototype.attachmentThumbnailPreview = function (sDownload)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/ViewThumbnail/' + this.sSubSubQuery + sDownload;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/ViewThumbnail/' + this.subQueryPrefix() + '/' + sDownload;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -75,7 +82,7 @@
|
|||
*/
|
||||
Links.prototype.attachmentPreviewAsPlain = function (sDownload)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/ViewAsPlain/' + this.sSubSubQuery + sDownload;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/ViewAsPlain/' + this.subQueryPrefix() + '/' + sDownload;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -84,7 +91,7 @@
|
|||
*/
|
||||
Links.prototype.attachmentFramed = function (sDownload)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/FramedView/' + this.sSubSubQuery + sDownload;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/FramedView/' + this.subQueryPrefix() + '/' + sDownload;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -92,7 +99,7 @@
|
|||
*/
|
||||
Links.prototype.upload = function ()
|
||||
{
|
||||
return this.sServer + '/Upload/' + this.sSubQuery + this.sSpecSuffix + '/';
|
||||
return this.sServer + '/Upload/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -100,7 +107,7 @@
|
|||
*/
|
||||
Links.prototype.uploadContacts = function ()
|
||||
{
|
||||
return this.sServer + '/UploadContacts/' + this.sSubQuery + this.sSpecSuffix + '/';
|
||||
return this.sServer + '/UploadContacts/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -108,7 +115,7 @@
|
|||
*/
|
||||
Links.prototype.uploadBackground = function ()
|
||||
{
|
||||
return this.sServer + '/UploadBackground/' + this.sSubQuery + this.sSpecSuffix + '/';
|
||||
return this.sServer + '/UploadBackground/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -116,7 +123,7 @@
|
|||
*/
|
||||
Links.prototype.append = function ()
|
||||
{
|
||||
return this.sServer + '/Append/' + this.sSubQuery + this.sSpecSuffix + '/';
|
||||
return this.sServer + '/Append/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -125,7 +132,7 @@
|
|||
*/
|
||||
Links.prototype.change = function (sEmail)
|
||||
{
|
||||
return this.sServer + '/Change/' + this.sSubQuery + this.sSpecSuffix + '/' + Utils.encodeURIComponent(sEmail) + '/';
|
||||
return this.sServer + '/Change/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/' + Utils.encodeURIComponent(sEmail) + '/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -134,7 +141,7 @@
|
|||
*/
|
||||
Links.prototype.ajax = function (sAdd)
|
||||
{
|
||||
return this.sServer + '/Ajax/' + this.sSubQuery + this.sSpecSuffix + '/' + sAdd;
|
||||
return this.sServer + '/Ajax/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/' + sAdd;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -143,7 +150,7 @@
|
|||
*/
|
||||
Links.prototype.messageViewLink = function (sRequestHash)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/ViewAsPlain/' + this.sSubSubQuery + sRequestHash;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/ViewAsPlain/' + this.subQueryPrefix() + '/' + sRequestHash;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -152,7 +159,7 @@
|
|||
*/
|
||||
Links.prototype.messageDownloadLink = function (sRequestHash)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/Download/' + this.sSubSubQuery + sRequestHash;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/Download/' + this.subQueryPrefix() + '/' + sRequestHash;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -179,8 +186,8 @@
|
|||
*/
|
||||
Links.prototype.userBackground = function (sHash)
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/UserBackground/' +
|
||||
this.sSubSubQuery + sHash;
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix +
|
||||
'/UserBackground/' + this.subQueryPrefix() + '/' + sHash;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -298,7 +305,7 @@
|
|||
*/
|
||||
Links.prototype.exportContactsVcf = function ()
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/ContactsVcf/';
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/ContactsVcf/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -306,7 +313,7 @@
|
|||
*/
|
||||
Links.prototype.exportContactsCsv = function ()
|
||||
{
|
||||
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/ContactsCsv/';
|
||||
return this.sServer + '/Raw/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/ContactsCsv/';
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -363,7 +370,7 @@
|
|||
*/
|
||||
Links.prototype.socialGoogle = function ()
|
||||
{
|
||||
return this.sServer + 'SocialGoogle' + ('' !== this.sSpecSuffix ? '/' + this.sSubQuery + this.sSpecSuffix + '/' : '');
|
||||
return this.sServer + 'SocialGoogle' + ('' !== this.sSpecSuffix ? '/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/' : '');
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -371,7 +378,7 @@
|
|||
*/
|
||||
Links.prototype.socialTwitter = function ()
|
||||
{
|
||||
return this.sServer + 'SocialTwitter' + ('' !== this.sSpecSuffix ? '/' + this.sSubQuery + this.sSpecSuffix + '/' : '');
|
||||
return this.sServer + 'SocialTwitter' + ('' !== this.sSpecSuffix ? '/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/' : '');
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -379,7 +386,7 @@
|
|||
*/
|
||||
Links.prototype.socialFacebook = function ()
|
||||
{
|
||||
return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.sSubQuery + this.sSpecSuffix + '/' : '');
|
||||
return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.subQueryPrefix() + '/' + this.sSpecSuffix + '/' : '');
|
||||
};
|
||||
|
||||
module.exports = new Links();
|
||||
|
|
|
|||
|
|
@ -1062,6 +1062,7 @@
|
|||
*/
|
||||
Utils.findEmailAndLinks = function (sHtml)
|
||||
{
|
||||
// return sHtml;
|
||||
sHtml = Autolinker.link(sHtml, {
|
||||
'newWindow': true,
|
||||
'stripPrefix': false,
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
// Utils = require('Common/Utils'),
|
||||
// Base64 = require('Common/Base64'),
|
||||
// Cache = require('Common/Cache'),
|
||||
// Links = require('Common/Links'),
|
||||
//
|
||||
// AppStore = require('Stores/User/App'),
|
||||
// SettingsStore = require('Stores/User/Settings'),
|
||||
|
|
@ -31,8 +32,6 @@
|
|||
|
||||
this.messageListSimpleHash = '';
|
||||
this.messageListSimpleCache = null;
|
||||
|
||||
this.sSubSubQuery = '&ss=/';
|
||||
}
|
||||
|
||||
_.extend(UserAjaxUserPromises.prototype, AbstractAjaxPromises.prototype);
|
||||
|
|
@ -123,7 +122,7 @@
|
|||
// {
|
||||
// return this.abort('Message')
|
||||
// .getRequest('Message', fTrigger,
|
||||
// this.sSubSubQuery + Base64.urlsafe_encode([
|
||||
// Links.subQueryPrefix() + '/' + Base64.urlsafe_encode([
|
||||
// sFolderFullNameRaw, iUid,
|
||||
// AppStore.projectHash(),
|
||||
// AppStore.threadsAllowed() && SettingsStore.useThreads() ? '1' : '0'
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
Base64 = require('Common/Base64'),
|
||||
|
||||
Cache = require('Common/Cache'),
|
||||
Links = require('Common/Links'),
|
||||
|
||||
Settings = require('Storage/Settings'),
|
||||
|
||||
|
|
@ -29,8 +30,6 @@
|
|||
AbstractAjaxRemote.call(this);
|
||||
|
||||
this.oRequests = {};
|
||||
|
||||
this.sSubSubQuery = '&ss=/';
|
||||
}
|
||||
|
||||
_.extend(RemoteUserAjax.prototype, AbstractAjaxRemote.prototype);
|
||||
|
|
@ -352,7 +351,7 @@
|
|||
{
|
||||
return this.defaultRequest(fCallback, 'MessageList', {},
|
||||
'' === sSearch ? Consts.Defaults.DefaultAjaxTimeout : Consts.Defaults.SearchAjaxTimeout,
|
||||
'MessageList/' + this.sSubSubQuery + Base64.urlsafe_encode([
|
||||
'MessageList/' + Links.subQueryPrefix() + '/' + Base64.urlsafe_encode([
|
||||
sFolderFullNameRaw,
|
||||
iOffset,
|
||||
iLimit,
|
||||
|
|
@ -402,7 +401,7 @@
|
|||
if (Cache.getFolderFromCacheList(sFolderFullNameRaw) && 0 < iUid)
|
||||
{
|
||||
this.defaultRequest(fCallback, 'Message', {}, null,
|
||||
'Message/' + this.sSubSubQuery + Base64.urlsafe_encode([
|
||||
'Message/' + Links.subQueryPrefix() + '/' + Base64.urlsafe_encode([
|
||||
sFolderFullNameRaw,
|
||||
iUid,
|
||||
AppStore.projectHash(),
|
||||
|
|
|
|||
|
|
@ -372,11 +372,24 @@ class Actions
|
|||
|
||||
$sQuery = \trim(\trim($sQuery), ' /');
|
||||
|
||||
$sSubQuerty = \trim(\trim($this->Http()->GetQuery('s', '')), ' /');
|
||||
$sSubSubQuerty = \trim(\trim($this->Http()->GetQuery('ss', '')), ' /');
|
||||
$aSubQuery = $this->Http()->GetQuery('q', null);
|
||||
if (\is_array($aSubQuery))
|
||||
{
|
||||
$aSubQuery = \array_map(function ($sS) {
|
||||
return \trim(\trim($sS), ' /');
|
||||
}, $aSubQuery);
|
||||
|
||||
$sQuery .= 0 < \strlen($sSubQuerty) ? '/'.$sSubQuerty : '';
|
||||
$sQuery .= 0 < \strlen($sSubSubQuerty) ? '/'.$sSubSubQuerty : '';
|
||||
if (0 < \count($aSubQuery))
|
||||
{
|
||||
$sQuery .= '/'.\implode('/', $aSubQuery);
|
||||
}
|
||||
}
|
||||
|
||||
// $sSubQuerty = \trim(\trim($this->Http()->GetQuery('s', '')), ' /');
|
||||
// $sSubSubQuerty = \trim(\trim($this->Http()->GetQuery('ss', '')), ' /');
|
||||
//
|
||||
// $sQuery .= 0 < \strlen($sSubQuerty) ? '/'.$sSubQuerty : '';
|
||||
// $sQuery .= 0 < \strlen($sSubSubQuerty) ? '/'.$sSubSubQuerty : '';
|
||||
|
||||
if ('' === $this->GetSpecAuthToken())
|
||||
{
|
||||
|
|
|
|||
1038
vendors/Autolinker/Autolinker.js
vendored
1038
vendors/Autolinker/Autolinker.js
vendored
File diff suppressed because it is too large
Load diff
6
vendors/Autolinker/Autolinker.min.js
vendored
6
vendors/Autolinker/Autolinker.min.js
vendored
File diff suppressed because one or more lines are too long
216
vendors/Autolinker/README.md
vendored
216
vendors/Autolinker/README.md
vendored
|
|
@ -50,13 +50,13 @@ JavaScript:
|
|||
```javascript
|
||||
var Autolinker = require( 'autolinker' );
|
||||
// note: npm wants an all-lowercase package name, but the utility is a class and should be
|
||||
// aliased with a captial letter
|
||||
// aliased with a capital letter
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Using the static `link()` method:
|
||||
Using the static [link()](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-static-method-link) method:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( textToAutolink[, options] );
|
||||
|
|
@ -71,7 +71,7 @@ var linkedText = autolinker.link( textToAutoLink );
|
|||
```
|
||||
|
||||
Note: if using the same options to autolink multiple pieces of html/text, it is slightly more efficient to create a single
|
||||
Autolinker instance, and run the `link()` method repeatedly (i.e. use the "class" form above).
|
||||
Autolinker instance, and run the [link()](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-method-link) method repeatedly (i.e. use the "class" form above).
|
||||
|
||||
|
||||
#### Example:
|
||||
|
|
@ -83,16 +83,16 @@ var linkedText = Autolinker.link( "Check out google.com", { className: "myLink"
|
|||
|
||||
## Options
|
||||
|
||||
These are the options which may be specified for linking. These are specified by providing an Object as the second parameter to `Autolinker.link()`. These include:
|
||||
These are the options which may be specified for linking. These are specified by providing an Object as the second parameter to [Autolinker.link()](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-static-method-link). These include:
|
||||
|
||||
- **newWindow** : Boolean<br />
|
||||
- [newWindow](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-newWindow) : Boolean<br />
|
||||
`true` to have the links should open in a new window when clicked, `false` otherwise. Defaults to `true`.<br /><br />
|
||||
- **stripPrefix** : Boolean<br />
|
||||
- [stripPrefix](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-stripPrefix) : Boolean<br />
|
||||
`true` to have the 'http://' or 'https://' and/or the 'www.' stripped from the beginning of links, `false` otherwise. Defaults to `true`.<br /><br />
|
||||
- **truncate** : Number<br />
|
||||
- [truncate](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-truncate) : Number<br />
|
||||
A number for how many characters long URLs/emails/twitter handles should be truncated to inside the text of a link. If the URL/email/twitter is over the number of characters, it will be truncated to this length by replacing the end of the string with a two period ellipsis ('..').<br /><br />
|
||||
Example: a url like 'http://www.yahoo.com/some/long/path/to/a/file' truncated to 25 characters may look like this: 'yahoo.com/some/long/pat..'<br />
|
||||
- **className** : String<br />
|
||||
Example: a url like 'http://www.yahoo.com/some/long/path/to/a/file' truncated to 25 characters may look like this: 'yahoo.com/some/long/pat..'<br /><br />
|
||||
- [className](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-className) : String<br />
|
||||
A CSS class name to add to the generated anchor tags. This class will be added to all links, as well as this class
|
||||
plus "url"/"email"/"twitter" suffixes for styling url/email/twitter links differently.
|
||||
|
||||
|
|
@ -102,18 +102,18 @@ These are the options which may be specified for linking. These are specified by
|
|||
2) Email links will have the CSS classes: "myLink myLink-email", and<br />
|
||||
3) Twitter links will have the CSS classes: "myLink myLink-twitter"<br />
|
||||
|
||||
- **urls** : Boolean<br />
|
||||
- [urls](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-urls) : Boolean<br />
|
||||
`true` to have URLs auto-linked, `false` to skip auto-linking of URLs. Defaults to `true`.<br />
|
||||
- **email** : Boolean<br />
|
||||
- [email](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-email) : Boolean<br />
|
||||
`true` to have email addresses auto-linked, `false` to skip auto-linking of email addresses. Defaults to `true`.<br /><br />
|
||||
- **twitter** : Boolean<br />
|
||||
`true` to have Twitter handles auto-linked, `false` to skip auto-linking of Twitter handles. Defaults to `true`.
|
||||
- **replaceFn** : Function<br />
|
||||
- [twitter](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-twitter) : Boolean<br />
|
||||
`true` to have Twitter handles auto-linked, `false` to skip auto-linking of Twitter handles. Defaults to `true`.<br /><br />
|
||||
- [replaceFn](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-replaceFn) : Function<br />
|
||||
A function to use to programmatically make replacements of matches in the input string, one at a time. See the section
|
||||
<a href="#custom-replacement-function">Custom Replacement Function</a> for more details.
|
||||
|
||||
|
||||
For example, if you wanted to disable links from opening in new windows, you could do:
|
||||
For example, if you wanted to disable links from opening in [new windows](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-newWindow), you could do:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( "Check out google.com", { newWindow: false } );
|
||||
|
|
@ -135,7 +135,7 @@ var myTextEl = document.getElementById( 'text' );
|
|||
myTextEl.innerHTML = Autolinker.link( myTextEl.innerHTML );
|
||||
```
|
||||
|
||||
Using the same pre-configured Autolinker instance in multiple locations of a codebase (usually by dependency injection):
|
||||
Using the same pre-configured [Autolinker](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker) instance in multiple locations of a codebase (usually by dependency injection):
|
||||
|
||||
```javascript
|
||||
var autolinker = new Autolinker( { newWindow: false, truncate: 25 } );
|
||||
|
|
@ -155,7 +155,7 @@ autolinker.link( "Go to www.google.com" );
|
|||
|
||||
## Custom Replacement Function
|
||||
|
||||
A custom replacement function (`replaceFn`) may be provided to replace url/email/twitter matches on an individual basis, based
|
||||
A custom replacement function ([replaceFn](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-cfg-replaceFn)) may be provided to replace url/email/twitter matches on an individual basis, based
|
||||
on the return from this function.
|
||||
|
||||
Full example, for purposes of documenting the API:
|
||||
|
|
@ -165,39 +165,39 @@ var input = "..."; // string with URLs, Email Addresses, and Twitter Handles
|
|||
|
||||
var linkedText = Autolinker.link( input, {
|
||||
replaceFn : function( autolinker, match ) {
|
||||
console.log( "href = ", match.getAnchorHref() );
|
||||
console.log( "text = ", match.getAnchorText() );
|
||||
console.log( "href = ", match.getAnchorHref() );
|
||||
console.log( "text = ", match.getAnchorText() );
|
||||
|
||||
switch( match.getType() ) {
|
||||
case 'url' :
|
||||
console.log( "url: ", match.getUrl() );
|
||||
case 'url' :
|
||||
console.log( "url: ", match.getUrl() );
|
||||
|
||||
if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {
|
||||
var tag = autolinker.getTagBuilder().build( match ); // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes
|
||||
tag.setAttr( 'rel', 'nofollow' );
|
||||
tag.addClass( 'external-link' );
|
||||
if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {
|
||||
var tag = autolinker.getTagBuilder().build( match ); // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes
|
||||
tag.setAttr( 'rel', 'nofollow' );
|
||||
tag.addClass( 'external-link' );
|
||||
|
||||
return tag;
|
||||
|
||||
return tag;
|
||||
|
||||
} else {
|
||||
return true; // let Autolinker perform its normal anchor tag replacement
|
||||
}
|
||||
} else {
|
||||
return true; // let Autolinker perform its normal anchor tag replacement
|
||||
}
|
||||
|
||||
case 'email' :
|
||||
var email = match.getEmail();
|
||||
console.log( "email: ", email );
|
||||
case 'email' :
|
||||
var email = match.getEmail();
|
||||
console.log( "email: ", email );
|
||||
|
||||
if( email === "my@own.address" ) {
|
||||
return false; // don't auto-link this particular email address; leave as-is
|
||||
} else {
|
||||
return; // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)
|
||||
}
|
||||
if( email === "my@own.address" ) {
|
||||
return false; // don't auto-link this particular email address; leave as-is
|
||||
} else {
|
||||
return; // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)
|
||||
}
|
||||
|
||||
case 'twitter' :
|
||||
var twitterHandle = match.getTwitterHandle();
|
||||
console.log( twitterHandle );
|
||||
|
||||
return '<a href="http://newplace.to.link.twitter.handles.to/">' + twitterHandle + '</a>';
|
||||
case 'twitter' :
|
||||
var twitterHandle = match.getTwitterHandle();
|
||||
console.log( twitterHandle );
|
||||
|
||||
return '<a href="http://newplace.to.link.twitter.handles.to/">' + twitterHandle + '</a>';
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
|
@ -207,8 +207,8 @@ var linkedText = Autolinker.link( input, {
|
|||
The function is provided two arguments:
|
||||
|
||||
1. The Autolinker instance that is performing replacements. This can be used to query the options that the Autolinker
|
||||
instance is configured with, or to retrieve its TagBuilder instance (via `autolinker.getTagBuilder()`).
|
||||
2. An `Autolinker.match.Match` object which details the match that is to be replaced.
|
||||
instance is configured with, or to retrieve its TagBuilder instance (via [autolinker.getTagBuilder()](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker-method-getTagBuilder)).
|
||||
2. An [Autolinker.match.Match](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker.match.Match) object which details the match that is to be replaced.
|
||||
|
||||
|
||||
A replacement of the match is made based on the return value of the function. The following return values may be provided:
|
||||
|
|
@ -217,7 +217,7 @@ A replacement of the match is made based on the return value of the function. Th
|
|||
- `false` (Boolean): Do not replace the current match at all - leave as-is.
|
||||
- Any String: If a string is returned from the function, the string will be used directly as the replacement HTML for
|
||||
the match.
|
||||
- An `Autolinker.HtmlTag` instance, which can be used to build/modify an HTML tag before writing out its HTML text.
|
||||
- An [Autolinker.HtmlTag](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker.HtmlTag) instance, which can be used to build/modify an HTML tag before writing out its HTML text.
|
||||
|
||||
|
||||
## Full API Docs
|
||||
|
|
@ -225,126 +225,6 @@ A replacement of the match is made based on the return value of the function. Th
|
|||
The full API docs for Autolinker may be referenced at: [http://gregjacobs.github.io/Autolinker.js/docs/](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker)
|
||||
|
||||
|
||||
## Changelog:
|
||||
## Changelog
|
||||
|
||||
### 0.12.3
|
||||
|
||||
- Add `Autolinker.match.Match#getMatchedText` method
|
||||
|
||||
### 0.12.2
|
||||
|
||||
- Add documentation generation, and update inline documentation.
|
||||
|
||||
### 0.12.1
|
||||
|
||||
- Expose the `Autolinker.HtmlTag` class, and allow it to be used in the `replaceFn`
|
||||
|
||||
### 0.12.0
|
||||
|
||||
- Add `replaceFn` option
|
||||
|
||||
### 0.11.0
|
||||
|
||||
- Allow Autolinker to link fully-capitalized URLs/Emails/Twitter handles.
|
||||
|
||||
### 0.10.1
|
||||
|
||||
- Added fix to not autolink strings like "version:1.0", which were accidentally being interpreted as a protocol:domain string.
|
||||
|
||||
### 0.10.0
|
||||
|
||||
- Added support for protocol-relative URLs (ex: `//google.com`, which will effectively either have the `http://` or `https://`
|
||||
protocol depending on the protocol that is hosting the website)
|
||||
|
||||
### 0.9.4
|
||||
|
||||
- Fixed an issue where a string in the form of `abc:def` would be autolinked as a protocol and domain name URL. Autolinker now
|
||||
requires the domain name to have at least one period in it to be considered.
|
||||
|
||||
### 0.9.3
|
||||
|
||||
- Fixed an issue where Twitter handles wouldn't be autolinked if they existed as the sole entity within parenthesis or brackets
|
||||
(thanks [@busticated](https://github.com/busticated) for pointing this out and providing unit tests)
|
||||
|
||||
### 0.9.2
|
||||
|
||||
- Fixed an issue with nested tags within an existing <a> tag, where the nested tags' inner text would be accidentally
|
||||
removed from the output (thanks [@mjsabin01](https://github.com/mjsabin01))
|
||||
|
||||
### 0.9.1
|
||||
|
||||
- Added a patch to attempt to better handle extraneous </a> tags in the input string if any exist. This is for when the
|
||||
input may have some invalid markup (for instance, on sites which allow user comments, blog posts, etc.).
|
||||
|
||||
### 0.9.0
|
||||
|
||||
- Added better support for the processing of existing HTML in the input string. Now handles namespaced tags, and attribute names
|
||||
with dashes or any other Unicode character (thanks [@aziraphale](https://github.com/aziraphale))
|
||||
|
||||
### 0.8.0
|
||||
|
||||
- Added `className` option for easily styling produced links (thanks [@busticated](https://github.com/busticated))
|
||||
- Refactored into a JS class. Autolinker can now be instantiated using:
|
||||
|
||||
```javascript
|
||||
var autolinker = new Autolinker( { newWindow: false, truncate: 25 } );
|
||||
|
||||
autolinker.link( "Check out http://www.yahoo.com/some/long/path/to/a/file" );
|
||||
// Produces: "Check out <a href="http://www.yahoo.com/some/long/path/to/a/file">yahoo.com/some/long/pat..</a>"
|
||||
```
|
||||
|
||||
This allows options to be set on a single instance, and used throughout a codebase by injecting the `autolinker` instance as a dependency to the modules/classes that use it. (Note: Autolinker may still be used with the static `Autolinker.link()` method as was previously available as well.)
|
||||
|
||||
### 0.7.0
|
||||
|
||||
- Changed build system to Grunt.
|
||||
- Added AMD and CommonJS module loading support (ex: RequireJS, and Node.js's module loader).
|
||||
- Added command line Jasmine test runner (`grunt test`)
|
||||
- Upgraded Jasmine from 1.3.1 to 2.0
|
||||
- Added license header to dist files.
|
||||
|
||||
(Thanks to [@busticated](https://github.com/busticated)!)
|
||||
|
||||
### 0.6.1
|
||||
|
||||
- Added LICENSE file to repository.
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- Added options for granular control of which types are linked (urls, email addresses, and/or twitter handles).
|
||||
(thanks [@aziraphale](https://github.com/aziraphale))
|
||||
|
||||
### 0.5.0
|
||||
|
||||
- Simplified the path / query string / hash processing into a single regular expression instead of 3 separate ones.
|
||||
- Added support for parenthesis in URLs, such as: `en.wikipedia.org/wiki/IANA_(disambiguation)` (thanks [@dandv](https://github.com/dandv))
|
||||
- Add all known top-level domains (TLDs) (thanks [@wouter0100](https://github.com/wouter0100))
|
||||
|
||||
### 0.4.0
|
||||
|
||||
Merged pull requests from [@afeld](https://github.com/afeld):
|
||||
|
||||
- strip protocol and 'www.' by default - fixes #1
|
||||
- truncate URLs from the end
|
||||
- make simpler regex for detecting prefix
|
||||
- remove trailing slashes from URLs, and handle periods at the end of paths
|
||||
- re-use domain+TLD regexes for email matching
|
||||
- add .me and .io to list of TLDs
|
||||
|
||||
Thanks Aidan :)
|
||||
|
||||
### 0.3.1
|
||||
|
||||
- Fixed an issue with handling nested HTML tags within anchor tags.
|
||||
|
||||
### 0.3
|
||||
|
||||
- Implemented the `truncate` option.
|
||||
|
||||
### 0.2
|
||||
|
||||
- Implemented autolinking Twitter handles.
|
||||
|
||||
### 0.1
|
||||
|
||||
* Initial implementation, which autolinks URLs and email addresses. Working on linking Twitter handles.
|
||||
See [Releases](https://github.com/gregjacobs/Autolinker.js/releases)
|
||||
|
|
|
|||
1263
vendors/Autolinker/_/Autolinker.js
vendored
1263
vendors/Autolinker/_/Autolinker.js
vendored
File diff suppressed because it is too large
Load diff
4
vendors/Autolinker/_/Autolinker.min.js
vendored
4
vendors/Autolinker/_/Autolinker.min.js
vendored
File diff suppressed because one or more lines are too long
95
vendors/Autolinker/_/README.md
vendored
95
vendors/Autolinker/_/README.md
vendored
|
|
@ -70,6 +70,9 @@ var autolinker = new Autolinker( [ options ] );
|
|||
var linkedText = autolinker.link( textToAutoLink );
|
||||
```
|
||||
|
||||
Note: if using the same options to autolink multiple pieces of html/text, it is slightly more efficient to create a single
|
||||
Autolinker instance, and run the `link()` method repeatedly (i.e. use the "class" form above).
|
||||
|
||||
|
||||
#### Example:
|
||||
|
||||
|
|
@ -105,6 +108,10 @@ These are the options which may be specified for linking. These are specified by
|
|||
`true` to have email addresses auto-linked, `false` to skip auto-linking of email addresses. Defaults to `true`.<br /><br />
|
||||
- **twitter** : Boolean<br />
|
||||
`true` to have Twitter handles auto-linked, `false` to skip auto-linking of Twitter handles. Defaults to `true`.
|
||||
- **replaceFn** : Function<br />
|
||||
A function to use to programmatically make replacements of matches in the input string, one at a time. See the section
|
||||
<a href="#custom-replacement-function">Custom Replacement Function</a> for more details.
|
||||
|
||||
|
||||
For example, if you wanted to disable links from opening in new windows, you could do:
|
||||
|
||||
|
|
@ -146,8 +153,96 @@ autolinker.link( "Go to www.google.com" );
|
|||
```
|
||||
|
||||
|
||||
## Custom Replacement Function
|
||||
|
||||
A custom replacement function (`replaceFn`) may be provided to replace url/email/twitter matches on an individual basis, based
|
||||
on the return from this function.
|
||||
|
||||
Full example, for purposes of documenting the API:
|
||||
|
||||
```javascript
|
||||
var input = "..."; // string with URLs, Email Addresses, and Twitter Handles
|
||||
|
||||
var linkedText = Autolinker.link( input, {
|
||||
replaceFn : function( autolinker, match ) {
|
||||
console.log( "href = ", match.getAnchorHref() );
|
||||
console.log( "text = ", match.getAnchorText() );
|
||||
|
||||
switch( match.getType() ) {
|
||||
case 'url' :
|
||||
console.log( "url: ", match.getUrl() );
|
||||
|
||||
if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {
|
||||
var tag = autolinker.getTagBuilder().build( match ); // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes
|
||||
tag.setAttr( 'rel', 'nofollow' );
|
||||
tag.addClass( 'external-link' );
|
||||
|
||||
return tag;
|
||||
|
||||
} else {
|
||||
return true; // let Autolinker perform its normal anchor tag replacement
|
||||
}
|
||||
|
||||
case 'email' :
|
||||
var email = match.getEmail();
|
||||
console.log( "email: ", email );
|
||||
|
||||
if( email === "my@own.address" ) {
|
||||
return false; // don't auto-link this particular email address; leave as-is
|
||||
} else {
|
||||
return; // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)
|
||||
}
|
||||
|
||||
case 'twitter' :
|
||||
var twitterHandle = match.getTwitterHandle();
|
||||
console.log( twitterHandle );
|
||||
|
||||
return '<a href="http://newplace.to.link.twitter.handles.to/">' + twitterHandle + '</a>';
|
||||
}
|
||||
}
|
||||
} );
|
||||
```
|
||||
|
||||
|
||||
The function is provided two arguments:
|
||||
|
||||
1. The Autolinker instance that is performing replacements. This can be used to query the options that the Autolinker
|
||||
instance is configured with, or to retrieve its TagBuilder instance (via `autolinker.getTagBuilder()`).
|
||||
2. An `Autolinker.match.Match` object which details the match that is to be replaced.
|
||||
|
||||
|
||||
A replacement of the match is made based on the return value of the function. The following return values may be provided:
|
||||
|
||||
- No return value (`undefined`), or `true` (Boolean): Delegate back to Autolinker to replace the match as it normally would.
|
||||
- `false` (Boolean): Do not replace the current match at all - leave as-is.
|
||||
- Any String: If a string is returned from the function, the string will be used directly as the replacement HTML for
|
||||
the match.
|
||||
- An `Autolinker.HtmlTag` instance, which can be used to build/modify an HTML tag before writing out its HTML text.
|
||||
|
||||
|
||||
## Full API Docs
|
||||
|
||||
The full API docs for Autolinker may be referenced at: [http://gregjacobs.github.io/Autolinker.js/docs/](http://gregjacobs.github.io/Autolinker.js/docs/#!/api/Autolinker)
|
||||
|
||||
|
||||
## Changelog:
|
||||
|
||||
### 0.12.3
|
||||
|
||||
- Add `Autolinker.match.Match#getMatchedText` method
|
||||
|
||||
### 0.12.2
|
||||
|
||||
- Add documentation generation, and update inline documentation.
|
||||
|
||||
### 0.12.1
|
||||
|
||||
- Expose the `Autolinker.HtmlTag` class, and allow it to be used in the `replaceFn`
|
||||
|
||||
### 0.12.0
|
||||
|
||||
- Add `replaceFn` option
|
||||
|
||||
### 0.11.0
|
||||
|
||||
- Allow Autolinker to link fully-capitalized URLs/Emails/Twitter handles.
|
||||
|
|
|
|||
1020
vendors/Autolinker/_/_/Autolinker.js
vendored
Normal file
1020
vendors/Autolinker/_/_/Autolinker.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
10
vendors/Autolinker/_/_/Autolinker.min.js
vendored
Normal file
10
vendors/Autolinker/_/_/Autolinker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
22
vendors/Autolinker/_/_/LICENSE
vendored
Normal file
22
vendors/Autolinker/_/_/LICENSE
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Gregory Jacobs (http://greg-jacobs.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
255
vendors/Autolinker/_/_/README.md
vendored
Normal file
255
vendors/Autolinker/_/_/README.md
vendored
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
# Autolinker.js
|
||||
|
||||
Because I had so much trouble finding a good autolinking implementation out in the wild, I decided to roll my own. It
|
||||
seemed that everything I found out there was either an implementation that didn't cover every case, or was just limited
|
||||
in one way or another.
|
||||
|
||||
So, this utility attempts to handle everything. It:
|
||||
|
||||
- Autolinks URLs, whether or not they start with the protocol (i.e. 'http://'). In other words, it will automatically link the
|
||||
text "google.com", as well as "http://google.com".
|
||||
- Will properly handle URLs with special characters
|
||||
- Will properly handle URLs with query parameters or a named anchor (i.e. hash)
|
||||
- Will autolink email addresses.
|
||||
- Will autolink Twitter handles.
|
||||
- Will properly handle HTML input. The utility will not change the `href` attribute inside anchor (<a>) tags (or any other
|
||||
tag/attribute for that matter), and will not accidentally wrap the inner text of an anchor tag with a new one (which would cause
|
||||
doubly-nested anchor tags).
|
||||
|
||||
Hope that this utility helps you as well!
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
#### Download
|
||||
|
||||
Simply clone or download the zip of the project, and link to either `dist/Autolinker.js` or `dist/Autolinker.min.js` with a script tag:
|
||||
|
||||
```html
|
||||
<script src="path/to/Autolinker.min.js"></script>
|
||||
```
|
||||
|
||||
#### Using with the [Bower](http://bower.io) package manager:
|
||||
|
||||
Command line:
|
||||
|
||||
```shell
|
||||
bower install Autolinker.js --save
|
||||
```
|
||||
|
||||
#### Using with [Node.js](http://nodejs.org) via [npm](https://www.npmjs.org/):
|
||||
|
||||
Command Line:
|
||||
|
||||
```shell
|
||||
npm install autolinker --save
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
|
||||
```javascript
|
||||
var Autolinker = require( 'autolinker' );
|
||||
// note: npm wants an all-lowercase package name, but the utility is a class and should be
|
||||
// aliased with a captial letter
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Using the static `link()` method:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( textToAutolink[, options] );
|
||||
```
|
||||
|
||||
Using as a class:
|
||||
|
||||
```javascript
|
||||
var autolinker = new Autolinker( [ options ] );
|
||||
|
||||
var linkedText = autolinker.link( textToAutoLink );
|
||||
```
|
||||
|
||||
|
||||
#### Example:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( "Check out google.com", { className: "myLink" } );
|
||||
// Produces: "Check out <a class="myLink myLink-url" href="http://google.com" target="_blank">google.com</a>"
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
These are the options which may be specified for linking. These are specified by providing an Object as the second parameter to `Autolinker.link()`. These include:
|
||||
|
||||
- **newWindow** : Boolean<br />
|
||||
`true` to have the links should open in a new window when clicked, `false` otherwise. Defaults to `true`.<br /><br />
|
||||
- **stripPrefix** : Boolean<br />
|
||||
`true` to have the 'http://' or 'https://' and/or the 'www.' stripped from the beginning of links, `false` otherwise. Defaults to `true`.<br /><br />
|
||||
- **truncate** : Number<br />
|
||||
A number for how many characters long URLs/emails/twitter handles should be truncated to inside the text of a link. If the URL/email/twitter is over the number of characters, it will be truncated to this length by replacing the end of the string with a two period ellipsis ('..').<br /><br />
|
||||
Example: a url like 'http://www.yahoo.com/some/long/path/to/a/file' truncated to 25 characters may look like this: 'yahoo.com/some/long/pat..'<br />
|
||||
- **className** : String<br />
|
||||
A CSS class name to add to the generated anchor tags. This class will be added to all links, as well as this class
|
||||
plus "url"/"email"/"twitter" suffixes for styling url/email/twitter links differently.
|
||||
|
||||
For example, if this config is provided as "myLink", then:
|
||||
|
||||
1) URL links will have the CSS classes: "myLink myLink-url"<br />
|
||||
2) Email links will have the CSS classes: "myLink myLink-email", and<br />
|
||||
3) Twitter links will have the CSS classes: "myLink myLink-twitter"<br />
|
||||
|
||||
- **urls** : Boolean<br />
|
||||
`true` to have URLs auto-linked, `false` to skip auto-linking of URLs. Defaults to `true`.<br />
|
||||
- **email** : Boolean<br />
|
||||
`true` to have email addresses auto-linked, `false` to skip auto-linking of email addresses. Defaults to `true`.<br /><br />
|
||||
- **twitter** : Boolean<br />
|
||||
`true` to have Twitter handles auto-linked, `false` to skip auto-linking of Twitter handles. Defaults to `true`.
|
||||
|
||||
For example, if you wanted to disable links from opening in new windows, you could do:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( "Check out google.com", { newWindow: false } );
|
||||
// Produces: "Check out <a href="http://google.com">google.com</a>"
|
||||
```
|
||||
|
||||
And if you wanted to truncate the length of URLs (while also not opening in a new window), you could do:
|
||||
|
||||
```javascript
|
||||
var linkedText = Autolinker.link( "http://www.yahoo.com/some/long/path/to/a/file", { truncate: 25, newWindow: false } );
|
||||
// Produces: "<a href="http://www.yahoo.com/some/long/path/to/a/file">yahoo.com/some/long/pat..</a>"
|
||||
```
|
||||
|
||||
## More Examples
|
||||
One could update an entire DOM element that has unlinked text to auto-link them as such:
|
||||
|
||||
```javascript
|
||||
var myTextEl = document.getElementById( 'text' );
|
||||
myTextEl.innerHTML = Autolinker.link( myTextEl.innerHTML );
|
||||
```
|
||||
|
||||
Using the same pre-configured Autolinker instance in multiple locations of a codebase (usually by dependency injection):
|
||||
|
||||
```javascript
|
||||
var autolinker = new Autolinker( { newWindow: false, truncate: 25 } );
|
||||
|
||||
//...
|
||||
|
||||
autolinker.link( "Check out http://www.yahoo.com/some/long/path/to/a/file" );
|
||||
// Produces: "Check out <a href="http://www.yahoo.com/some/long/path/to/a/file">yahoo.com/some/long/pat..</a>"
|
||||
|
||||
//...
|
||||
|
||||
autolinker.link( "Go to www.google.com" );
|
||||
// Produces: "Go to <a href="http://www.google.com">google.com</a>"
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Changelog:
|
||||
|
||||
### 0.11.0
|
||||
|
||||
- Allow Autolinker to link fully-capitalized URLs/Emails/Twitter handles.
|
||||
|
||||
### 0.10.1
|
||||
|
||||
- Added fix to not autolink strings like "version:1.0", which were accidentally being interpreted as a protocol:domain string.
|
||||
|
||||
### 0.10.0
|
||||
|
||||
- Added support for protocol-relative URLs (ex: `//google.com`, which will effectively either have the `http://` or `https://`
|
||||
protocol depending on the protocol that is hosting the website)
|
||||
|
||||
### 0.9.4
|
||||
|
||||
- Fixed an issue where a string in the form of `abc:def` would be autolinked as a protocol and domain name URL. Autolinker now
|
||||
requires the domain name to have at least one period in it to be considered.
|
||||
|
||||
### 0.9.3
|
||||
|
||||
- Fixed an issue where Twitter handles wouldn't be autolinked if they existed as the sole entity within parenthesis or brackets
|
||||
(thanks [@busticated](https://github.com/busticated) for pointing this out and providing unit tests)
|
||||
|
||||
### 0.9.2
|
||||
|
||||
- Fixed an issue with nested tags within an existing <a> tag, where the nested tags' inner text would be accidentally
|
||||
removed from the output (thanks [@mjsabin01](https://github.com/mjsabin01))
|
||||
|
||||
### 0.9.1
|
||||
|
||||
- Added a patch to attempt to better handle extraneous </a> tags in the input string if any exist. This is for when the
|
||||
input may have some invalid markup (for instance, on sites which allow user comments, blog posts, etc.).
|
||||
|
||||
### 0.9.0
|
||||
|
||||
- Added better support for the processing of existing HTML in the input string. Now handles namespaced tags, and attribute names
|
||||
with dashes or any other Unicode character (thanks [@aziraphale](https://github.com/aziraphale))
|
||||
|
||||
### 0.8.0
|
||||
|
||||
- Added `className` option for easily styling produced links (thanks [@busticated](https://github.com/busticated))
|
||||
- Refactored into a JS class. Autolinker can now be instantiated using:
|
||||
|
||||
```javascript
|
||||
var autolinker = new Autolinker( { newWindow: false, truncate: 25 } );
|
||||
|
||||
autolinker.link( "Check out http://www.yahoo.com/some/long/path/to/a/file" );
|
||||
// Produces: "Check out <a href="http://www.yahoo.com/some/long/path/to/a/file">yahoo.com/some/long/pat..</a>"
|
||||
```
|
||||
|
||||
This allows options to be set on a single instance, and used throughout a codebase by injecting the `autolinker` instance as a dependency to the modules/classes that use it. (Note: Autolinker may still be used with the static `Autolinker.link()` method as was previously available as well.)
|
||||
|
||||
### 0.7.0
|
||||
|
||||
- Changed build system to Grunt.
|
||||
- Added AMD and CommonJS module loading support (ex: RequireJS, and Node.js's module loader).
|
||||
- Added command line Jasmine test runner (`grunt test`)
|
||||
- Upgraded Jasmine from 1.3.1 to 2.0
|
||||
- Added license header to dist files.
|
||||
|
||||
(Thanks to [@busticated](https://github.com/busticated)!)
|
||||
|
||||
### 0.6.1
|
||||
|
||||
- Added LICENSE file to repository.
|
||||
|
||||
### 0.6.0
|
||||
|
||||
- Added options for granular control of which types are linked (urls, email addresses, and/or twitter handles).
|
||||
(thanks [@aziraphale](https://github.com/aziraphale))
|
||||
|
||||
### 0.5.0
|
||||
|
||||
- Simplified the path / query string / hash processing into a single regular expression instead of 3 separate ones.
|
||||
- Added support for parenthesis in URLs, such as: `en.wikipedia.org/wiki/IANA_(disambiguation)` (thanks [@dandv](https://github.com/dandv))
|
||||
- Add all known top-level domains (TLDs) (thanks [@wouter0100](https://github.com/wouter0100))
|
||||
|
||||
### 0.4.0
|
||||
|
||||
Merged pull requests from [@afeld](https://github.com/afeld):
|
||||
|
||||
- strip protocol and 'www.' by default - fixes #1
|
||||
- truncate URLs from the end
|
||||
- make simpler regex for detecting prefix
|
||||
- remove trailing slashes from URLs, and handle periods at the end of paths
|
||||
- re-use domain+TLD regexes for email matching
|
||||
- add .me and .io to list of TLDs
|
||||
|
||||
Thanks Aidan :)
|
||||
|
||||
### 0.3.1
|
||||
|
||||
- Fixed an issue with handling nested HTML tags within anchor tags.
|
||||
|
||||
### 0.3
|
||||
|
||||
- Implemented the `truncate` option.
|
||||
|
||||
### 0.2
|
||||
|
||||
- Implemented autolinking Twitter handles.
|
||||
|
||||
### 0.1
|
||||
|
||||
* Initial implementation, which autolinks URLs and email addresses. Working on linking Twitter handles.
|
||||
Loading…
Add table
Add a link
Reference in a new issue