11/*!
22 * Autolinker.js
3- * 1.3.4
3+ * 1.4.0
44 *
55 * Copyright(c) 2016 Gregory Jacobs <[email protected] > 66 * MIT License
@@ -240,7 +240,7 @@ Autolinker.parse = function( textOrHtml, options ) {
240240 *
241241 * Ex: 0.25.1
242242 */
243- Autolinker . version = '1.3.4 ' ;
243+ Autolinker . version = '1.4.0 ' ;
244244
245245
246246Autolinker . prototype = {
@@ -1019,13 +1019,21 @@ Autolinker.Util = {
10191019 *
10201020 * @param {String } str The string to truncate and add an ellipsis to.
10211021 * @param {Number } truncateLen The length to truncate the string at.
1022- * @param {String } [ellipsisChars=..] The ellipsis character(s) to add to the end of `str`
1023- * when truncated. Defaults to '..'
1022+ * @param {String } [ellipsisChars=... ] The ellipsis character(s) to add to the end of `str`
1023+ * when truncated. Defaults to '... '
10241024 */
10251025 ellipsis : function ( str , truncateLen , ellipsisChars ) {
1026+ var ellipsisLength ;
1027+
10261028 if ( str . length > truncateLen ) {
1027- ellipsisChars = ( ellipsisChars == null ) ? '..' : ellipsisChars ;
1028- str = str . substring ( 0 , truncateLen - ellipsisChars . length ) + ellipsisChars ;
1029+ if ( ellipsisChars == null ) {
1030+ ellipsisChars = '…' ;
1031+ ellipsisLength = 3 ;
1032+ } else {
1033+ ellipsisLength = ellipsisChars . length ;
1034+ }
1035+
1036+ str = str . substring ( 0 , truncateLen - ellipsisLength ) + ellipsisChars ;
10291037 }
10301038 return str ;
10311039 } ,
@@ -1127,6 +1135,7 @@ Autolinker.Util = {
11271135 }
11281136
11291137} ;
1138+
11301139/*global Autolinker */
11311140/*jshint boss:true */
11321141/**
@@ -1668,6 +1677,12 @@ Autolinker.AnchorTagBuilder = Autolinker.Util.extend( Object, {
16681677 attrs [ 'rel' ] = "noopener noreferrer" ;
16691678 }
16701679
1680+ if ( this . truncate ) {
1681+ if ( this . truncate . length && this . truncate . length < match . getAnchorText ( ) . length ) {
1682+ attrs [ 'title' ] = match . getAnchorHref ( ) ;
1683+ }
1684+ }
1685+
16711686 return attrs ;
16721687 } ,
16731688
@@ -1745,13 +1760,13 @@ Autolinker.AnchorTagBuilder = Autolinker.Util.extend( Object, {
17451760 truncateLocation = truncate . location ;
17461761
17471762 if ( truncateLocation === 'smart' ) {
1748- return Autolinker . truncate . TruncateSmart ( anchorText , truncateLength , '..' ) ;
1763+ return Autolinker . truncate . TruncateSmart ( anchorText , truncateLength ) ;
17491764
17501765 } else if ( truncateLocation === 'middle' ) {
1751- return Autolinker . truncate . TruncateMiddle ( anchorText , truncateLength , '..' ) ;
1766+ return Autolinker . truncate . TruncateMiddle ( anchorText , truncateLength ) ;
17521767
17531768 } else {
1754- return Autolinker . truncate . TruncateEnd ( anchorText , truncateLength , '..' ) ;
1769+ return Autolinker . truncate . TruncateEnd ( anchorText , truncateLength ) ;
17551770 }
17561771 }
17571772
@@ -3947,12 +3962,25 @@ Autolinker.truncate.TruncateMiddle = function(url, truncateLen, ellipsisChars){
39473962 if ( url . length <= truncateLen ) {
39483963 return url ;
39493964 }
3950- var availableLength = truncateLen - ellipsisChars . length ;
3965+
3966+ var ellipsisLengthBeforeParsing ;
3967+ var ellipsisLength ;
3968+
3969+ if ( ellipsisChars == null ) {
3970+ ellipsisChars = '…' ;
3971+ ellipsisLengthBeforeParsing = 8 ;
3972+ ellipsisLength = 3 ;
3973+ } else {
3974+ ellipsisLengthBeforeParsing = ellipsisChars . length ;
3975+ ellipsisLength = ellipsisChars . length ;
3976+ }
3977+
3978+ var availableLength = truncateLen - ellipsisLength ;
39513979 var end = "" ;
39523980 if ( availableLength > 0 ) {
39533981 end = url . substr ( ( - 1 ) * Math . floor ( availableLength / 2 ) ) ;
39543982 }
3955- return ( url . substr ( 0 , Math . ceil ( availableLength / 2 ) ) + ellipsisChars + end ) . substr ( 0 , truncateLen ) ;
3983+ return ( url . substr ( 0 , Math . ceil ( availableLength / 2 ) ) + ellipsisChars + end ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
39563984} ;
39573985
39583986/*global Autolinker */
@@ -3965,10 +3993,23 @@ Autolinker.truncate.TruncateMiddle = function(url, truncateLen, ellipsisChars){
39653993 *
39663994 * @param {String } url A URL.
39673995 * @param {Number } truncateLen The maximum length of the truncated output URL string.
3968- * @param {String } ellipsisChars The characters to place within the url, e.g. "..".
3996+ * @param {String } ellipsisChars The characters to place within the url, e.g. "... ".
39693997 * @return {String } The truncated URL.
39703998 */
39713999Autolinker . truncate . TruncateSmart = function ( url , truncateLen , ellipsisChars ) {
4000+
4001+ var ellipsisLengthBeforeParsing ;
4002+ var ellipsisLength ;
4003+
4004+ if ( ellipsisChars == null ) {
4005+ ellipsisChars = '…' ;
4006+ ellipsisLength = 3 ;
4007+ ellipsisLengthBeforeParsing = 8 ;
4008+ } else {
4009+ ellipsisLength = ellipsisChars . length ;
4010+ ellipsisLengthBeforeParsing = ellipsisChars . length ;
4011+ }
4012+
39724013 var parse_url = function ( url ) { // Functionality inspired by PHP function of same name
39734014 var urlObj = { } ;
39744015 var urlSub = url ;
@@ -4033,7 +4074,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
40334074 if ( url . length <= truncateLen ) {
40344075 return url ;
40354076 }
4036- var availableLength = truncateLen - ellipsisChars . length ;
4077+ var availableLength = truncateLen - ellipsisLength ;
40374078 var urlObj = parse_url ( url ) ;
40384079 // Clean up the URL
40394080 if ( urlObj . query ) {
@@ -4061,9 +4102,9 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
40614102 }
40624103 if ( str . length >= availableLength ) {
40634104 if ( urlObj . host . length == truncateLen ) {
4064- return ( urlObj . host . substr ( 0 , ( truncateLen - ellipsisChars . length ) ) + ellipsisChars ) . substr ( 0 , truncateLen ) ;
4105+ return ( urlObj . host . substr ( 0 , ( truncateLen - ellipsisLength ) ) + ellipsisChars ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
40654106 }
4066- return buildSegment ( str , availableLength ) . substr ( 0 , truncateLen ) ;
4107+ return buildSegment ( str , availableLength ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
40674108 }
40684109 var pathAndQuery = "" ;
40694110 if ( urlObj . path ) {
@@ -4078,7 +4119,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
40784119 return ( str + pathAndQuery ) . substr ( 0 , truncateLen ) ;
40794120 }
40804121 var remainingAvailableLength = availableLength - str . length ;
4081- return ( str + buildSegment ( pathAndQuery , remainingAvailableLength ) ) . substr ( 0 , truncateLen ) ;
4122+ return ( str + buildSegment ( pathAndQuery , remainingAvailableLength ) ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
40824123 } else {
40834124 str += pathAndQuery ;
40844125 }
@@ -4090,7 +4131,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
40904131 return ( str + fragment ) . substr ( 0 , truncateLen ) ;
40914132 }
40924133 var remainingAvailableLength2 = availableLength - str . length ;
4093- return ( str + buildSegment ( fragment , remainingAvailableLength2 ) ) . substr ( 0 , truncateLen ) ;
4134+ return ( str + buildSegment ( fragment , remainingAvailableLength2 ) ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
40944135 } else {
40954136 str += fragment ;
40964137 }
@@ -4108,7 +4149,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
41084149 if ( availableLength > 0 ) {
41094150 end = str . substr ( ( - 1 ) * Math . floor ( availableLength / 2 ) ) ;
41104151 }
4111- return ( str . substr ( 0 , Math . ceil ( availableLength / 2 ) ) + ellipsisChars + end ) . substr ( 0 , truncateLen ) ;
4152+ return ( str . substr ( 0 , Math . ceil ( availableLength / 2 ) ) + ellipsisChars + end ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
41124153} ;
41134154
41144155return Autolinker ;
0 commit comments