1
1
/*!
2
2
* Autolinker.js
3
- * 1.3.4
3
+ * 1.4.0
4
4
*
5
5
* Copyright(c) 2016 Gregory Jacobs <[email protected] >
6
6
* MIT License
@@ -240,7 +240,7 @@ Autolinker.parse = function( textOrHtml, options ) {
240
240
*
241
241
* Ex: 0.25.1
242
242
*/
243
- Autolinker . version = '1.3.4 ' ;
243
+ Autolinker . version = '1.4.0 ' ;
244
244
245
245
246
246
Autolinker . prototype = {
@@ -1019,13 +1019,21 @@ Autolinker.Util = {
1019
1019
*
1020
1020
* @param {String } str The string to truncate and add an ellipsis to.
1021
1021
* @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 '... '
1024
1024
*/
1025
1025
ellipsis : function ( str , truncateLen , ellipsisChars ) {
1026
+ var ellipsisLength ;
1027
+
1026
1028
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 ;
1029
1037
}
1030
1038
return str ;
1031
1039
} ,
@@ -1127,6 +1135,7 @@ Autolinker.Util = {
1127
1135
}
1128
1136
1129
1137
} ;
1138
+
1130
1139
/*global Autolinker */
1131
1140
/*jshint boss:true */
1132
1141
/**
@@ -1668,6 +1677,12 @@ Autolinker.AnchorTagBuilder = Autolinker.Util.extend( Object, {
1668
1677
attrs [ 'rel' ] = "noopener noreferrer" ;
1669
1678
}
1670
1679
1680
+ if ( this . truncate ) {
1681
+ if ( this . truncate . length && this . truncate . length < match . getAnchorText ( ) . length ) {
1682
+ attrs [ 'title' ] = match . getAnchorHref ( ) ;
1683
+ }
1684
+ }
1685
+
1671
1686
return attrs ;
1672
1687
} ,
1673
1688
@@ -1745,13 +1760,13 @@ Autolinker.AnchorTagBuilder = Autolinker.Util.extend( Object, {
1745
1760
truncateLocation = truncate . location ;
1746
1761
1747
1762
if ( truncateLocation === 'smart' ) {
1748
- return Autolinker . truncate . TruncateSmart ( anchorText , truncateLength , '..' ) ;
1763
+ return Autolinker . truncate . TruncateSmart ( anchorText , truncateLength ) ;
1749
1764
1750
1765
} else if ( truncateLocation === 'middle' ) {
1751
- return Autolinker . truncate . TruncateMiddle ( anchorText , truncateLength , '..' ) ;
1766
+ return Autolinker . truncate . TruncateMiddle ( anchorText , truncateLength ) ;
1752
1767
1753
1768
} else {
1754
- return Autolinker . truncate . TruncateEnd ( anchorText , truncateLength , '..' ) ;
1769
+ return Autolinker . truncate . TruncateEnd ( anchorText , truncateLength ) ;
1755
1770
}
1756
1771
}
1757
1772
@@ -3947,12 +3962,25 @@ Autolinker.truncate.TruncateMiddle = function(url, truncateLen, ellipsisChars){
3947
3962
if ( url . length <= truncateLen ) {
3948
3963
return url ;
3949
3964
}
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 ;
3951
3979
var end = "" ;
3952
3980
if ( availableLength > 0 ) {
3953
3981
end = url . substr ( ( - 1 ) * Math . floor ( availableLength / 2 ) ) ;
3954
3982
}
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 ) ;
3956
3984
} ;
3957
3985
3958
3986
/*global Autolinker */
@@ -3965,10 +3993,23 @@ Autolinker.truncate.TruncateMiddle = function(url, truncateLen, ellipsisChars){
3965
3993
*
3966
3994
* @param {String } url A URL.
3967
3995
* @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. "... ".
3969
3997
* @return {String } The truncated URL.
3970
3998
*/
3971
3999
Autolinker . 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
+
3972
4013
var parse_url = function ( url ) { // Functionality inspired by PHP function of same name
3973
4014
var urlObj = { } ;
3974
4015
var urlSub = url ;
@@ -4033,7 +4074,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
4033
4074
if ( url . length <= truncateLen ) {
4034
4075
return url ;
4035
4076
}
4036
- var availableLength = truncateLen - ellipsisChars . length ;
4077
+ var availableLength = truncateLen - ellipsisLength ;
4037
4078
var urlObj = parse_url ( url ) ;
4038
4079
// Clean up the URL
4039
4080
if ( urlObj . query ) {
@@ -4061,9 +4102,9 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
4061
4102
}
4062
4103
if ( str . length >= availableLength ) {
4063
4104
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 ) ;
4065
4106
}
4066
- return buildSegment ( str , availableLength ) . substr ( 0 , truncateLen ) ;
4107
+ return buildSegment ( str , availableLength ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
4067
4108
}
4068
4109
var pathAndQuery = "" ;
4069
4110
if ( urlObj . path ) {
@@ -4078,7 +4119,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
4078
4119
return ( str + pathAndQuery ) . substr ( 0 , truncateLen ) ;
4079
4120
}
4080
4121
var remainingAvailableLength = availableLength - str . length ;
4081
- return ( str + buildSegment ( pathAndQuery , remainingAvailableLength ) ) . substr ( 0 , truncateLen ) ;
4122
+ return ( str + buildSegment ( pathAndQuery , remainingAvailableLength ) ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
4082
4123
} else {
4083
4124
str += pathAndQuery ;
4084
4125
}
@@ -4090,7 +4131,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
4090
4131
return ( str + fragment ) . substr ( 0 , truncateLen ) ;
4091
4132
}
4092
4133
var remainingAvailableLength2 = availableLength - str . length ;
4093
- return ( str + buildSegment ( fragment , remainingAvailableLength2 ) ) . substr ( 0 , truncateLen ) ;
4134
+ return ( str + buildSegment ( fragment , remainingAvailableLength2 ) ) . substr ( 0 , availableLength + ellipsisLengthBeforeParsing ) ;
4094
4135
} else {
4095
4136
str += fragment ;
4096
4137
}
@@ -4108,7 +4149,7 @@ Autolinker.truncate.TruncateSmart = function(url, truncateLen, ellipsisChars){
4108
4149
if ( availableLength > 0 ) {
4109
4150
end = str . substr ( ( - 1 ) * Math . floor ( availableLength / 2 ) ) ;
4110
4151
}
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 ) ;
4112
4153
} ;
4113
4154
4114
4155
return Autolinker ;
0 commit comments