Comparing version 0.7.2 to 0.8.0
@@ -12,11 +12,8 @@ const path = require("path"); | ||
var count = 0; | ||
function build(){ | ||
rollup.rollup({ | ||
entry: srcPath, | ||
plugins:[ | ||
babel({exclude: 'node_modules/**'}), | ||
] | ||
plugins:[babel()] | ||
}).then((bundle) => { | ||
console.log("- Generating UMD bundle..."); | ||
// Universal | ||
@@ -27,6 +24,8 @@ var umd = bundle.generate({ | ||
}); | ||
console.log("- Writing file..."); | ||
fs.writeFileSync(distDir+"anchorme.js",umd.code); | ||
var minified = uglifyjs.minify(umd.code,{fromString:true}).code; | ||
fs.writeFileSync(distDir+"anchorme.min.js",minified); | ||
console.log("- Minifying..."); | ||
// var minified = uglifyjs.minify(umd.code,{fromString:true}).code; | ||
console.log("- Writing minified file..."); | ||
// fs.writeFileSync(distDir+"anchorme.min.js",minified); | ||
count++; | ||
@@ -33,0 +32,0 @@ console.log("files rebuilt for the",count,"time"); |
@@ -29,20 +29,21 @@ (function (global, factory) { | ||
options = { | ||
"attributes": false, | ||
"html": true, | ||
attributes: [], | ||
ips: true, | ||
emails: true, | ||
urls: true, | ||
TLDs: 20, | ||
files: true, | ||
truncate: 0, | ||
defaultProtocol: "http://" | ||
defaultProtocol: "http://", | ||
list: false | ||
}; | ||
} | ||
if (_typeof(options.attributes) !== "object") options.attributes = false; | ||
if (typeof options.html !== "boolean") options.html = true; | ||
if (_typeof(options.attributes) !== "object") options.attributes = []; | ||
if (typeof options.ips !== "boolean") options.ips = true; | ||
if (typeof options.emails !== "boolean") options.emails = true; | ||
if (typeof options.urls !== "boolean") options.urls = true; | ||
if (typeof options.defaultProtocol !== "string") options.defaultProtocol = "http://"; | ||
if (typeof options.files !== "boolean") options.files = true; | ||
if (typeof options.truncate !== "number") options.truncate = 0; | ||
if (typeof options.list !== "boolean") options.list = false; | ||
if (typeof options.defaultProtocol !== "string" && typeof options.defaultProtocol !== "function") options.defaultProtocol = "http://"; | ||
return options; | ||
@@ -62,3 +63,3 @@ } | ||
var allowedInEmailName = "abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-/=?^_`{|}~."; | ||
var allowedInHost = "abcdefghijklmnopqrstuvwxyz0123456789-.:"; | ||
var allowedInHost = "abcdefghijklmnopqrstuvwxyz0123456789-.:%"; | ||
var urlAllowed = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%"; | ||
@@ -263,47 +264,60 @@ var tlds = ['.com', '.net', '.org', '.edu', '.gov', '.uk', '.ca', '.de', '.jp', '.fr', '.au', '.us', '.ru', '.ch', '.it', '.nl', '.se', '.no', '.es', '.io', '.aaa', '.aarp', '.abarth', '.abb', '.abbott', '.abbvie', '.abc', '.able', '.abogado', '.abudhabi', '.ac', '.academy', '.accenture', '.accountant', '.accountants', '.aco', '.active', '.actor', '.ad', '.adac', '.ads', '.adult', '.ae', '.aeg', '.aero', '.aetna', '.af', '.afamilycompany', '.afl', '.ag', '.agakhan', '.agency', '.ai', '.aig', '.aigo', '.airbus', '.airforce', '.airtel', '.akdn', '.al', '.alfaromeo', '.alibaba', '.alipay', '.allfinanz', '.allstate', '.ally', '.alsace', '.alstom', '.am', '.americanexpress', '.americanfamily', '.amex', '.amfam', '.amica', '.amsterdam', '.analytics', '.android', '.anquan', '.anz', '.ao', '.apartments', '.app', '.apple', '.aq', '.aquarelle', '.ar', '.aramco', '.archi', '.army', '.arpa', '.art', '.arte', '.as', '.asda', '.asia', '.associates', '.at', '.athleta', '.attorney', '.au', '.auction', '.audi', '.audible', '.audio', '.auspost', '.author', '.auto', '.autos', '.avianca', '.aw', '.aws', '.ax', '.axa', '.az', '.azure', '.ba', '.baby', '.baidu', '.banamex', '.bananarepublic', '.band', '.bank', '.bar', '.barcelona', '.barclaycard', '.barclays', '.barefoot', '.bargains', '.bauhaus', '.bayern', '.bb', '.bbc', '.bbt', '.bbva', '.bcg', '.bcn', '.bd', '.be', '.beats', '.beauty', '.beer', '.bentley', '.berlin', '.best', '.bestbuy', '.bet', '.bf', '.bg', '.bh', '.bharti', '.bi', '.bible', '.bid', '.bike', '.bing', '.bingo', '.bio', '.biz', '.bj', '.black', '.blackfriday', '.blanco', '.blockbuster', '.blog', '.bloomberg', '.blue', '.bm', '.bms', '.bmw', '.bn', '.bnl', '.bnpparibas', '.bo', '.boats', '.boehringer', '.bofa', '.bom', '.bond', '.boo', '.book', '.booking', '.boots', '.bosch', '.bostik', '.bot', '.boutique', '.br', '.bradesco', '.bridgestone', '.broadway', '.broker', '.brother', '.brussels', '.bs', '.bt', '.budapest', '.bugatti', '.build', '.builders', '.business', '.buy', '.buzz', '.bv', '.bw', '.by', '.bz', '.bzh', '.ca', '.cab', '.cafe', '.cal', '.call', '.calvinklein', '.cam', '.camera', '.camp', '.cancerresearch', '.canon', '.capetown', '.capital', '.capitalone', '.car', '.caravan', '.cards', '.care', '.career', '.careers', '.cars', '.cartier', '.casa', '.cash', '.casino', '.cat', '.catering', '.cba', '.cbn', '.cbre', '.cbs', '.cc', '.cd', '.ceb', '.center', '.ceo', '.cern', '.cf', '.cfa', '.cfd', '.cg', '.ch', '.chanel', '.channel', '.chase', '.chat', '.cheap', '.chintai', '.chloe', '.christmas', '.chrome', '.chrysler', '.church', '.ci', '.cipriani', '.circle', '.cisco', '.citadel', '.citi', '.citic', '.city', '.cityeats', '.ck', '.cl', '.claims', '.cleaning', '.click', '.clinic', '.clinique', '.clothing', '.cloud', '.club', '.clubmed', '.cm', '.cn', '.co', '.coach', '.codes', '.coffee', '.college', '.cologne', '.comcast', '.commbank', '.community', '.company', '.compare', '.computer', '.comsec', '.condos', '.construction', '.consulting', '.contact', '.contractors', '.cooking', '.cookingchannel', '.cool', '.coop', '.corsica', '.country', '.coupon', '.coupons', '.courses', '.cr', '.credit', '.creditcard', '.creditunion', '.cricket', '.crown', '.crs', '.cruises', '.csc', '.cu', '.cuisinella', '.cv', '.cw', '.cx', '.cy', '.cymru', '.cyou', '.cz', '.dabur', '.dad', '.dance', '.date', '.dating', '.datsun', '.day', '.dclk', '.dds', '.de', '.deal', '.dealer', '.deals', '.degree', '.delivery', '.dell', '.deloitte', '.delta', '.democrat', '.dental', '.dentist', '.desi', '.design', '.dev', '.dhl', '.diamonds', '.diet', '.digital', '.direct', '.directory', '.discount', '.discover', '.dish', '.diy', '.dj', '.dk', '.dm', '.dnp', '.do', '.docs', '.doctor', '.dodge', '.dog', '.doha', '.domains', '.dot', '.download', '.drive', '.dtv', '.dubai', '.duck', '.dunlop', '.duns', '.dupont', '.durban', '.dvag', '.dvr', '.dz', '.earth', '.eat', '.ec', '.eco', '.edeka', '.edu', '.education', '.ee', '.eg', '.email', '.emerck', '.energy', '.engineer', '.engineering', '.enterprises', '.epost', '.epson', '.equipment', '.er', '.ericsson', '.erni', '.es', '.esq', '.estate', '.esurance', '.et', '.eu', '.eurovision', '.eus', '.events', '.everbank', '.exchange', '.expert', '.exposed', '.express', '.extraspace', '.fage', '.fail', '.fairwinds', '.faith', '.family', '.fan', '.fans', '.farm', '.farmers', '.fashion', '.fast', '.fedex', '.feedback', '.ferrari', '.ferrero', '.fi', '.fiat', '.fidelity', '.fido', '.film', '.final', '.finance', '.financial', '.fire', '.firestone', '.firmdale', '.fish', '.fishing', '.fit', '.fitness', '.fj', '.fk', '.flickr', '.flights', '.flir', '.florist', '.flowers', '.fly', '.fm', '.fo', '.foo', '.foodnetwork', '.football', '.ford', '.forex', '.forsale', '.forum', '.foundation', '.fox', '.fr', '.fresenius', '.frl', '.frogans', '.frontdoor', '.frontier', '.ftr', '.fujitsu', '.fujixerox', '.fund', '.furniture', '.futbol', '.fyi', '.ga', '.gal', '.gallery', '.gallo', '.gallup', '.game', '.games', '.gap', '.garden', '.gb', '.gbiz', '.gd', '.gdn', '.ge', '.gea', '.gent', '.genting', '.george', '.gf', '.gg', '.ggee', '.gh', '.gi', '.gift', '.gifts', '.gives', '.giving', '.gl', '.glade', '.glass', '.gle', '.global', '.globo', '.gm', '.gmail', '.gmbh', '.gmo', '.gmx', '.gn', '.godaddy', '.gold', '.goldpoint', '.golf', '.goo', '.goodhands', '.goodyear', '.goog', '.google', '.gop', '.got', '.gov', '.gp', '.gq', '.gr', '.grainger', '.graphics', '.gratis', '.green', '.gripe', '.group', '.gs', '.gt', '.gu', '.guardian', '.gucci', '.guge', '.guide', '.guitars', '.guru', '.gw', '.gy', '.hamburg', '.hangout', '.haus', '.hbo', '.hdfc', '.hdfcbank', '.health', '.healthcare', '.help', '.helsinki', '.here', '.hermes', '.hgtv', '.hiphop', '.hisamitsu', '.hitachi', '.hiv', '.hk', '.hkt', '.hm', '.hn', '.hockey', '.holdings', '.holiday', '.homedepot', '.homegoods', '.homes', '.homesense', '.honda', '.honeywell', '.horse', '.host', '.hosting', '.hot', '.hoteles', '.hotmail', '.house', '.how', '.hr', '.hsbc', '.ht', '.htc', '.hu', '.hughes', '.hyatt', '.hyundai', '.ibm', '.icbc', '.ice', '.icu', '.id', '.ie', '.ieee', '.ifm', '.iinet', '.ikano', '.il', '.im', '.imamat', '.imdb', '.immo', '.immobilien', '.in', '.industries', '.infiniti', '.info', '.ing', '.ink', '.institute', '.insurance', '.insure', '.int', '.intel', '.international', '.intuit', '.investments', '.io', '.ipiranga', '.iq', '.ir', '.irish', '.is', '.iselect', '.ismaili', '.ist', '.istanbul', '.it', '.itau', '.itv', '.iwc', '.jaguar', '.java', '.jcb', '.jcp', '.je', '.jeep', '.jetzt', '.jewelry', '.jlc', '.jll', '.jm', '.jmp', '.jnj', '.jo', '.jobs', '.joburg', '.jot', '.joy', '.jp', '.jpmorgan', '.jprs', '.juegos', '.juniper', '.kaufen', '.kddi', '.ke', '.kerryhotels', '.kerrylogistics', '.kerryproperties', '.kfh', '.kg', '.kh', '.ki', '.kia', '.kim', '.kinder', '.kindle', '.kitchen', '.kiwi', '.km', '.kn', '.koeln', '.komatsu', '.kosher', '.kp', '.kpmg', '.kpn', '.kr', '.krd', '.kred', '.kuokgroup', '.kw', '.ky', '.kyoto', '.kz', '.la', '.lacaixa', '.ladbrokes', '.lamborghini', '.lamer', '.lancaster', '.lancia', '.lancome', '.land', '.landrover', '.lanxess', '.lasalle', '.lat', '.latino', '.latrobe', '.law', '.lawyer', '.lb', '.lc', '.lds', '.lease', '.leclerc', '.lefrak', '.legal', '.lego', '.lexus', '.lgbt', '.li', '.liaison', '.lidl', '.life', '.lifeinsurance', '.lifestyle', '.lighting', '.like', '.lilly', '.limited', '.limo', '.lincoln', '.linde', '.link', '.lipsy', '.live', '.living', '.lixil', '.lk', '.loan', '.loans', '.locker', '.locus', '.loft', '.lol', '.london', '.lotte', '.lotto', '.love', '.lpl', '.lplfinancial', '.lr', '.ls', '.lt', '.ltd', '.ltda', '.lu', '.lundbeck', '.lupin', '.luxe', '.luxury', '.lv', '.ly', '.ma', '.macys', '.madrid', '.maif', '.maison', '.makeup', '.man', '.management', '.mango', '.market', '.marketing', '.markets', '.marriott', '.marshalls', '.maserati', '.mattel', '.mba', '.mc', '.mcd', '.mcdonalds', '.mckinsey', '.md', '.me', '.med', '.media', '.meet', '.melbourne', '.meme', '.memorial', '.men', '.menu', '.meo', '.metlife', '.mg', '.mh', '.miami', '.microsoft', '.mil', '.mini', '.mint', '.mit', '.mitsubishi', '.mk', '.ml', '.mlb', '.mls', '.mm', '.mma', '.mn', '.mo', '.mobi', '.mobily', '.moda', '.moe', '.moi', '.mom', '.monash', '.money', '.monster', '.montblanc', '.mopar', '.mormon', '.mortgage', '.moscow', '.motorcycles', '.mov', '.movie', '.movistar', '.mp', '.mq', '.mr', '.ms', '.msd', '.mt', '.mtn', '.mtpc', '.mtr', '.mu', '.museum', '.mutual', '.mutuelle', '.mv', '.mw', '.mx', '.my', '.mz', '.na', '.nab', '.nadex', '.nagoya', '.name', '.nationwide', '.natura', '.navy', '.nba', '.nc', '.ne', '.nec', '.netbank', '.netflix', '.network', '.neustar', '.new', '.news', '.next', '.nextdirect', '.nexus', '.nf', '.nfl', '.ng', '.ngo', '.nhk', '.ni', '.nico', '.nike', '.nikon', '.ninja', '.nissan', '.nissay', '.nl', '.no', '.nokia', '.northwesternmutual', '.norton', '.now', '.nowruz', '.nowtv', '.np', '.nr', '.nra', '.nrw', '.ntt', '.nu', '.nyc', '.nz', '.obi', '.observer', '.off', '.office', '.okinawa', '.olayan', '.olayangroup', '.oldnavy', '.ollo', '.om', '.omega', '.one', '.ong', '.onl', '.online', '.onyourside', '.ooo', '.open', '.oracle', '.orange', '.org', '.organic', '.orientexpress', '.origins', '.osaka', '.otsuka', '.ott', '.ovh', '.pa', '.page', '.pamperedchef', '.panasonic', '.panerai', '.paris', '.pars', '.partners', '.parts', '.party', '.passagens', '.pay', '.pccw', '.pe', '.pet', '.pf', '.pfizer', '.pg', '.ph', '.pharmacy', '.philips', '.photo', '.photography', '.photos', '.physio', '.piaget', '.pics', '.pictet', '.pictures', '.pid', '.pin', '.ping', '.pink', '.pioneer', '.pizza', '.pk', '.pl', '.place', '.play', '.playstation', '.plumbing', '.plus', '.pm', '.pn', '.pnc', '.pohl', '.poker', '.politie', '.porn', '.post', '.pr', '.pramerica', '.praxi', '.press', '.prime', '.pro', '.prod', '.productions', '.prof', '.progressive', '.promo', '.properties', '.property', '.protection', '.pru', '.prudential', '.ps', '.pt', '.pub', '.pw', '.pwc', '.py', '.qa', '.qpon', '.quebec', '.quest', '.qvc', '.racing', '.raid', '.re', '.read', '.realestate', '.realtor', '.realty', '.recipes', '.red', '.redstone', '.redumbrella', '.rehab', '.reise', '.reisen', '.reit', '.ren', '.rent', '.rentals', '.repair', '.report', '.republican', '.rest', '.restaurant', '.review', '.reviews', '.rexroth', '.rich', '.richardli', '.ricoh', '.rightathome', '.rio', '.rip', '.ro', '.rocher', '.rocks', '.rodeo', '.rogers', '.room', '.rs', '.rsvp', '.ru', '.ruhr', '.run', '.rw', '.rwe', '.ryukyu', '.sa', '.saarland', '.safe', '.safety', '.sakura', '.sale', '.salon', '.samsclub', '.samsung', '.sandvik', '.sandvikcoromant', '.sanofi', '.sap', '.sapo', '.sarl', '.sas', '.save', '.saxo', '.sb', '.sbi', '.sbs', '.sc', '.sca', '.scb', '.schaeffler', '.schmidt', '.scholarships', '.school', '.schule', '.schwarz', '.science', '.scjohnson', '.scor', '.scot', '.sd', '.se', '.seat', '.secure', '.security', '.seek', '.select', '.sener', '.services', '.ses', '.seven', '.sew', '.sex', '.sexy', '.sfr', '.sg', '.sh', '.shangrila', '.sharp', '.shaw', '.shell', '.shia', '.shiksha', '.shoes', '.shop', '.shopping', '.shouji', '.show', '.showtime', '.shriram', '.si', '.silk', '.sina', '.singles', '.site', '.sj', '.sk', '.ski', '.skin', '.sky', '.skype', '.sl', '.sling', '.sm', '.smart', '.smile', '.sn', '.sncf', '.so', '.soccer', '.social', '.softbank', '.software', '.sohu', '.solar', '.solutions', '.song', '.sony', '.soy', '.space', '.spiegel', '.spot', '.spreadbetting', '.sr', '.srl', '.srt', '.st', '.stada', '.staples', '.star', '.starhub', '.statebank', '.statefarm', '.statoil', '.stc', '.stcgroup', '.stockholm', '.storage', '.store', '.stream', '.studio', '.study', '.style', '.su', '.sucks', '.supplies', '.supply', '.support', '.surf', '.surgery', '.suzuki', '.sv', '.swatch', '.swiftcover', '.swiss', '.sx', '.sy', '.sydney', '.symantec', '.systems', '.sz', '.tab', '.taipei', '.talk', '.taobao', '.target', '.tatamotors', '.tatar', '.tattoo', '.tax', '.taxi', '.tc', '.tci', '.td', '.tdk', '.team', '.tech', '.technology', '.tel', '.telecity', '.telefonica', '.temasek', '.tennis', '.teva', '.tf', '.tg', '.th', '.thd', '.theater', '.theatre', '.tiaa', '.tickets', '.tienda', '.tiffany', '.tips', '.tires', '.tirol', '.tj', '.tjmaxx', '.tjx', '.tk', '.tkmaxx', '.tl', '.tm', '.tmall', '.tn', '.to', '.today', '.tokyo', '.tools', '.top', '.toray', '.toshiba', '.total', '.tours', '.town', '.toyota', '.toys', '.tr', '.trade', '.trading', '.training', '.travel', '.travelchannel', '.travelers', '.travelersinsurance', '.trust', '.trv', '.tt', '.tube', '.tui', '.tunes', '.tushu', '.tv', '.tvs', '.tw', '.tz', '.ua', '.ubank', '.ubs', '.uconnect', '.ug', '.uk', '.unicom', '.university', '.uno', '.uol', '.ups', '.us', '.uy', '.uz', '.va', '.vacations', '.vana', '.vanguard', '.vc', '.ve', '.vegas', '.ventures', '.verisign', '.versicherung', '.vet', '.vg', '.vi', '.viajes', '.video', '.vig', '.viking', '.villas', '.vin', '.vip', '.virgin', '.visa', '.vision', '.vista', '.vistaprint', '.viva', '.vivo', '.vlaanderen', '.vn', '.vodka', '.volkswagen', '.vote', '.voting', '.voto', '.voyage', '.vu', '.vuelos', '.wales', '.walmart', '.walter', '.wang', '.wanggou', '.warman', '.watch', '.watches', '.weather', '.weatherchannel', '.webcam', '.weber', '.website', '.wed', '.wedding', '.weibo', '.weir', '.wf', '.whoswho', '.wien', '.wiki', '.williamhill', '.win', '.windows', '.wine', '.winners', '.wme', '.wolterskluwer', '.woodside', '.work', '.works', '.world', '.wow', '.ws', '.wtc', '.wtf', '.xbox', '.xerox', '.xfinity', '.xihuan', '.xin', '.xn--11b4c3d', '.xn--1ck2e1b', '.xn--1qqw23a', '.xn--30rr7y', '.xn--3bst00m', '.xn--3ds443g', '.xn--3e0b707e', '.xn--3oq18vl8pn36a', '.xn--3pxu8k', '.xn--42c2d9a', '.xn--45brj9c', '.xn--45q11c', '.xn--4gbrim', '.xn--54b7fta0cc', '.xn--55qw42g', '.xn--55qx5d', '.xn--5su34j936bgsg', '.xn--5tzm5g', '.xn--6frz82g', '.xn--6qq986b3xl', '.xn--80adxhks', '.xn--80ao21a', '.xn--80asehdb', '.xn--80aswg', '.xn--8y0a063a', '.xn--90a3ac', '.xn--90ae', '.xn--90ais', '.xn--9dbq2a', '.xn--9et52u', '.xn--9krt00a', '.xn--b4w605ferd', '.xn--bck1b9a5dre4c', '.xn--c1avg', '.xn--c2br7g', '.xn--cck2b3b', '.xn--cg4bki', '.xn--clchc0ea0b2g2a9gcd', '.xn--czr694b', '.xn--czrs0t', '.xn--czru2d', '.xn--d1acj3b', '.xn--d1alf', '.xn--e1a4c', '.xn--eckvdtc9d', '.xn--efvy88h', '.xn--estv75g', '.xn--fct429k', '.xn--fhbei', '.xn--fiq228c5hs', '.xn--fiq64b', '.xn--fiqs8s', '.xn--fiqz9s', '.xn--fjq720a', '.xn--flw351e', '.xn--fpcrj9c3d', '.xn--fzc2c9e2c', '.xn--fzys8d69uvgm', '.xn--g2xx48c', '.xn--gckr3f0f', '.xn--gecrj9c', '.xn--gk3at1e', '.xn--h2brj9c', '.xn--hxt814e', '.xn--i1b6b1a6a2e', '.xn--imr513n', '.xn--io0a7i', '.xn--j1aef', '.xn--j1amh', '.xn--j6w193g', '.xn--jlq61u9w7b', '.xn--jvr189m', '.xn--kcrx77d1x4a', '.xn--kprw13d', '.xn--kpry57d', '.xn--kpu716f', '.xn--kput3i', '.xn--l1acc', '.xn--lgbbat1ad8j', '.xn--mgb9awbf', '.xn--mgba3a3ejt', '.xn--mgba3a4f16a', '.xn--mgba7c0bbn0a', '.xn--mgbaam7a8h', '.xn--mgbab2bd', '.xn--mgbayh7gpa', '.xn--mgbb9fbpob', '.xn--mgbbh1a71e', '.xn--mgbc0a9azcg', '.xn--mgbca7dzdo', '.xn--mgberp4a5d4ar', '.xn--mgbpl2fh', '.xn--mgbt3dhd', '.xn--mgbtx2b', '.xn--mgbx4cd0ab', '.xn--mix891f', '.xn--mk1bu44c', '.xn--mxtq1m', '.xn--ngbc5azd', '.xn--ngbe9e0a', '.xn--node', '.xn--nqv7f', '.xn--nqv7fs00ema', '.xn--nyqy26a', '.xn--o3cw4h', '.xn--ogbpf8fl', '.xn--p1acf', '.xn--p1ai', '.xn--pbt977c', '.xn--pgbs0dh', '.xn--pssy2u', '.xn--q9jyb4c', '.xn--qcka1pmc', '.xn--qxam', '.xn--rhqv96g', '.xn--rovu88b', '.xn--s9brj9c', '.xn--ses554g', '.xn--t60b56a', '.xn--tckwe', '.xn--unup4y', '.xn--vermgensberater-ctb', '.xn--vermgensberatung-pwb', '.xn--vhquv', '.xn--vuq861b', '.xn--w4r85el8fhu5dnra', '.xn--w4rs40l', '.xn--wgbh1c', '.xn--wgbl6a', '.xn--xhq521b', '.xn--xkc2al3hye2a', '.xn--xkc2dl3a5ee0h', '.xn--y9a3aq', '.xn--yfro4i67o', '.xn--ygbi2ammx', '.xn--zfr164b', '.xperia', '.xxx', '.xyz', '.yachts', '.yahoo', '.yamaxun', '.yandex', '.ye', '.yodobashi', '.yoga', '.yokohama', '.you', '.youtube', '.yt', '.yun', '.za', '.zappos', '.zara', '.zero', '.zip', '.zippo', '.zm', '.zone', '.zuerich', '.zw']; | ||
return inputArr.map(function (fragment, index) { | ||
var encoded = encodeURI(fragment); | ||
// quick validations | ||
// 1 | ||
if (fragment.indexOf(".") < 1 && !hasProtocol(fragment)) return fragment; | ||
if (encoded.indexOf(".") < 1 && !hasProtocol(encoded)) return fragment; | ||
// 2 | ||
if (fragment.split("").filter(function (c) { | ||
if (encoded.split("").filter(function (c) { | ||
return ~urlAllowed.indexOf(c); | ||
}).length !== fragment.length) return fragment; | ||
}).length !== encoded.length) return fragment; | ||
var urlObj = false; | ||
// starting tests that might render a positive result | ||
// test 1: it begins with a protocol | ||
var protocol = hasProtocol(fragment); | ||
var protocol = hasProtocol(encoded) || ""; | ||
if (protocol) { | ||
// test 1: it's a file | ||
if (options.files && protocol === "file:///" && encoded.substr(protocol.length).split(/\/|\\/).length - 1) { | ||
urlObj = { | ||
reason: "protocol", | ||
reason: "file", | ||
protocol: protocol, | ||
url: fragment.substr(protocol.length) | ||
raw: fragment, | ||
encoded: encoded | ||
}; | ||
} | ||
// remove the protocol before proceeding to any other test | ||
else if (protocol) encoded = encoded.substr(protocol.length); | ||
// test 2: it's a URL | ||
if (!urlObj && options.urls && urlChecker(fragment)) { | ||
if (!urlObj && options.urls && urlChecker(encoded)) { | ||
urlObj = { | ||
reason: "url", | ||
protocol: options.defaultProtocol, | ||
url: fragment | ||
protocol: protocol ? protocol : typeof options.defaultProtocol === "function" ? options.defaultProtocol(fragment) : options.defaultProtocol, | ||
raw: fragment, | ||
encoded: encoded | ||
}; | ||
} | ||
// test 3: it's an email | ||
if (!urlObj && options.emails && emailChecker(fragment)) { | ||
if (!urlObj && options.emails && emailChecker(encoded)) { | ||
urlObj = { | ||
reason: "email", | ||
protocol: "mailto:", | ||
url: fragment | ||
raw: fragment, | ||
encoded: encoded | ||
}; | ||
} | ||
// test 4: it's an IP | ||
if (!urlObj && options.ips && ipChecker(fragment)) { | ||
if (!urlObj && options.ips && ipChecker(encoded)) { | ||
urlObj = { | ||
reason: "ip", | ||
protocol: options.defaultProtocol, | ||
url: fragment | ||
protocol: protocol ? protocol : typeof options.defaultProtocol === "function" ? options.defaultProtocol(fragment) : options.defaultProtocol, | ||
raw: fragment, | ||
encoded: encoded | ||
}; | ||
} | ||
if (!urlObj) return fragment;else { | ||
@@ -318,27 +332,36 @@ var past = index - 1; | ||
var url2tag = function (url, options) { | ||
var href = removeNotationEnds(url); | ||
var nice = options.truncate > 0 && url.length > options.truncate ? url.substring(0, options.truncate) + "..." : url; | ||
var tag = "<a href='" + href + "'"; | ||
if (options.attributes) { | ||
for (var name in options.attributes) { | ||
if (options.attributes.hasOwnProperty(name)) { | ||
tag = tag + " " + name + "='" + options.attributes[name] + "' "; | ||
} | ||
} | ||
} | ||
tag = tag + ">" + nice + "</a>"; | ||
return tag; | ||
}; | ||
var transform = function (str, options) { | ||
var transform = function (str, options) { | ||
var arr = separate(str); | ||
arr = identify(arr, options).map(function (fragment) { | ||
arr = identify(arr, options); | ||
// return the current list (with words being filtered out) | ||
if (options.list) return arr.filter(function (fragment) { | ||
return typeof fragment !== "string"; | ||
}); | ||
// transform objects to HTML tags | ||
arr = arr.map(function (fragment) { | ||
if (typeof fragment === "string") return fragment; | ||
url2tag(fragment.url, options); | ||
return url2tag(fragment.protocol + fragment.url, options); | ||
return url2tag(fragment, options); | ||
}); | ||
// join and return | ||
return deSeparate(arr); | ||
}; | ||
function url2tag(fragment, options) { | ||
var href = fragment.protocol + removeNotationEnds(fragment.encoded); | ||
var original = fragment.raw; | ||
original = options.truncate > 0 && original.length > options.truncate ? original.substring(0, options.truncate) + "..." : original; | ||
return "<a href=\"" + href + "\" " + options.attributes.map(function (attribute) { | ||
if (typeof attribute === 'function') { | ||
var name = (attribute(fragment) || {}).name; | ||
var value = (attribute(fragment) || {}).value; | ||
if (name && !value) return " name "; | ||
if (name && value) return " " + name + "=\"" + value + "\" "; | ||
} else return " " + attribute.name + "=\"" + attribute.value + "\" "; | ||
}).join("") + ">" + original + "</a>"; | ||
} | ||
var anchorme = function anchorme(str, options) { | ||
@@ -353,3 +376,10 @@ options = defaultOptions(options); | ||
ip: ipChecker, | ||
url: urlChecker, | ||
url: function url(input) { | ||
// simple wrapper that does what "identify.js" does initially | ||
// remove the protocal | ||
var protocol = hasProtocol(input) || ""; | ||
input = input.substr(protocol.length); | ||
input = encodeURI(input); | ||
return urlChecker(input); | ||
}, | ||
email: emailChecker | ||
@@ -356,0 +386,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.anchorme=n()}(this,function(){"use strict";function e(e,n,a){return e.split(n).length-1}function n(e){function n(e,a){return e.endsWith(a)?(e=e.substring(0,e.length-1),n(e,a)):e}return e.endsWith("?")?e=n(e,"?"):e.endsWith(";")?e=n(e,";"):e.endsWith(":")?e=n(e,":"):e.endsWith(",")?e=n(e,","):e.endsWith(".")&&(e=n(e,".")),e}function a(e){return e||(e={attributes:!1,html:!0,ips:!0,emails:!0,urls:!0,TLDs:20,truncate:0,defaultProtocol:"http://"}),"object"!==l(e.attributes)&&(e.attributes=!1),"boolean"!=typeof e.html&&(e.html=!0),"boolean"!=typeof e.ips&&(e.ips=!0),"boolean"!=typeof e.emails&&(e.emails=!0),"boolean"!=typeof e.urls&&(e.urls=!0),"string"!=typeof e.defaultProtocol&&(e.defaultProtocol="http://"),"number"!=typeof e.truncate&&(e.truncate=0),e}function t(e){return!("string"==typeof e&&e.indexOf(".")>-1)&&(("number"!=typeof e||Math.round(e)===e)&&(""!==e&&!isNaN(1*e)))}function i(e){return!!t(e)&&!(1*e>65535)}function r(e,n,a){return e.forEach(function(t,i){!(t.indexOf(".")>-1)||e[i-1]===n&&e[i+1]===a||e[i+1]!==n&&e[i+1]!==a||(e[i]=e[i]+e[i+1],"string"==typeof e[i+2]&&(e[i]=e[i]+e[i+2]),"string"==typeof e[i+3]&&(e[i]=e[i]+e[i+3]),"string"==typeof e[i+4]&&(e[i]=e[i]+e[i+4]),e.splice(i+1,4),r(e,n,a))}),e}function o(e){return" "+e+" "}function s(e){return x.forEach(function(n){e=e.split(n).join(o(n))}),e=y(e.split(" "))}function c(e){return e=e.join(" "),x.forEach(function(n){e=e.split(o(n)).join(n)}),e}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u="abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-/=?^_`{|}~.",f="abcdefghijklmnopqrstuvwxyz0123456789-.:",d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%",b=[".com",".net",".org",".edu",".gov",".uk",".ca",".de",".jp",".fr",".au",".us",".ru",".ch",".it",".nl",".se",".no",".es",".io",".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".analytics",".android",".anquan",".anz",".ao",".apartments",".app",".apple",".aq",".aquarelle",".ar",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".bot",".boutique",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".cash",".casino",".cat",".catering",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".fly",".fm",".fo",".foo",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".host",".hosting",".hot",".hoteles",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".metlife",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".netbank",".netflix",".network",".neustar",".new",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".philips",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".rio",".rip",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".space",".spiegel",".spot",".spreadbetting",".sr",".srl",".srt",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".xn--11b4c3d",".xn--1ck2e1b",".xn--1qqw23a",".xn--30rr7y",".xn--3bst00m",".xn--3ds443g",".xn--3e0b707e",".xn--3oq18vl8pn36a",".xn--3pxu8k",".xn--42c2d9a",".xn--45brj9c",".xn--45q11c",".xn--4gbrim",".xn--54b7fta0cc",".xn--55qw42g",".xn--55qx5d",".xn--5su34j936bgsg",".xn--5tzm5g",".xn--6frz82g",".xn--6qq986b3xl",".xn--80adxhks",".xn--80ao21a",".xn--80asehdb",".xn--80aswg",".xn--8y0a063a",".xn--90a3ac",".xn--90ae",".xn--90ais",".xn--9dbq2a",".xn--9et52u",".xn--9krt00a",".xn--b4w605ferd",".xn--bck1b9a5dre4c",".xn--c1avg",".xn--c2br7g",".xn--cck2b3b",".xn--cg4bki",".xn--clchc0ea0b2g2a9gcd",".xn--czr694b",".xn--czrs0t",".xn--czru2d",".xn--d1acj3b",".xn--d1alf",".xn--e1a4c",".xn--eckvdtc9d",".xn--efvy88h",".xn--estv75g",".xn--fct429k",".xn--fhbei",".xn--fiq228c5hs",".xn--fiq64b",".xn--fiqs8s",".xn--fiqz9s",".xn--fjq720a",".xn--flw351e",".xn--fpcrj9c3d",".xn--fzc2c9e2c",".xn--fzys8d69uvgm",".xn--g2xx48c",".xn--gckr3f0f",".xn--gecrj9c",".xn--gk3at1e",".xn--h2brj9c",".xn--hxt814e",".xn--i1b6b1a6a2e",".xn--imr513n",".xn--io0a7i",".xn--j1aef",".xn--j1amh",".xn--j6w193g",".xn--jlq61u9w7b",".xn--jvr189m",".xn--kcrx77d1x4a",".xn--kprw13d",".xn--kpry57d",".xn--kpu716f",".xn--kput3i",".xn--l1acc",".xn--lgbbat1ad8j",".xn--mgb9awbf",".xn--mgba3a3ejt",".xn--mgba3a4f16a",".xn--mgba7c0bbn0a",".xn--mgbaam7a8h",".xn--mgbab2bd",".xn--mgbayh7gpa",".xn--mgbb9fbpob",".xn--mgbbh1a71e",".xn--mgbc0a9azcg",".xn--mgbca7dzdo",".xn--mgberp4a5d4ar",".xn--mgbpl2fh",".xn--mgbt3dhd",".xn--mgbtx2b",".xn--mgbx4cd0ab",".xn--mix891f",".xn--mk1bu44c",".xn--mxtq1m",".xn--ngbc5azd",".xn--ngbe9e0a",".xn--node",".xn--nqv7f",".xn--nqv7fs00ema",".xn--nyqy26a",".xn--o3cw4h",".xn--ogbpf8fl",".xn--p1acf",".xn--p1ai",".xn--pbt977c",".xn--pgbs0dh",".xn--pssy2u",".xn--q9jyb4c",".xn--qcka1pmc",".xn--qxam",".xn--rhqv96g",".xn--rovu88b",".xn--s9brj9c",".xn--ses554g",".xn--t60b56a",".xn--tckwe",".xn--unup4y",".xn--vermgensberater-ctb",".xn--vermgensberatung-pwb",".xn--vhquv",".xn--vuq861b",".xn--w4r85el8fhu5dnra",".xn--w4rs40l",".xn--wgbh1c",".xn--wgbl6a",".xn--xhq521b",".xn--xkc2al3hye2a",".xn--xkc2dl3a5ee0h",".xn--y9a3aq",".xn--yfro4i67o",".xn--ygbi2ammx",".xn--zfr164b",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw"],m=["src=","href=","cite=","formaction=","icon=","manifest=","poster=","codebase=","background=","profile=","usemap="],g=function(a){if(e(a,"@")<1)return!1;a=a.toLowerCase(),a=n(a);var t=a.substring(0,a.indexOf("@")),i=a.substr(a.indexOf("@")+1);return t.split("").filter(function(e){return~u.indexOf(e)}).length===t.length&&(i.split("").filter(function(e){return~f.indexOf(e)}).length===i.length&&(!!i.endsWith(".com")||!!~b.indexOf(i.substr(i.lastIndexOf(".")))))},p=function(a){if(e(a,".")<3)return!1;a=a.toLowerCase(),a=n(a);var r=a.split("."),o=r[0],s=r[1],c=r[2];if(!t(o)||o>255||o<0)return!1;if(!t(s)||s>255||s<0)return!1;if(!t(c)||c>255||c<0)return!1;var l,u,f,d=r[3];if(!d)return!1;if(~d.indexOf("/")){var b=d.split("/");l=b[0],f=b[1]}if(~d.indexOf(":")&&~d.indexOf("/")&&d.indexOf(":")<d.indexOf("/")){var m=d.split(":"),g=m[1].split("/");l=m[0],u=g[0]}if(~d.indexOf(":")&&d.indexOf("/")<0&&!r.slice(4).join()){var p=d.split(":");l=p[0],u=p[1]}return d.indexOf(":")<0&&d.indexOf("/")<0&&!r.slice(4).join()&&(l=d),!(!t(l)||l>255||l<0)&&(!(void 0!==u&&!i(u))&&!!l)},h=function(a){if(0===e(a,"."))return!1;if(1===e(a,".")&&a.indexOf(".")===a.length-1)return!1;if(a.indexOf("/")<3&&a.indexOf("/")>0)return!1;if(a=a.toLowerCase(),a=n(a),~a.indexOf("/")){var t=a.indexOf("/"),i=a.substring(0,t);if(~i.indexOf(".."))return!1;if(i.split("").filter(function(e){return~f.indexOf(e)}).length!==i.length)return!1;if(i.endsWith(".com"))return!0;if(i.indexOf(":")>0){var r=i.split(":"),o=r[0],s=r[1];if(!s)return!1;if(isNaN(s))return!1;if(parseInt(s)>65535)return!1;if(a.endsWith(".com"))return!0;if(!~b.indexOf(o.substr(o.lastIndexOf("."))))return!1}else if(!~b.indexOf(i.substr(i.lastIndexOf("."))))return!1}else{if(~a.indexOf(".."))return!1;if(a.split("").filter(function(e){return~f.indexOf(e)}).length!==a.length)return!1;if(a.endsWith(".com"))return!0;if(a.indexOf(":")>0){var c=a.split(":"),l=c[0],u=c[1];if(!u)return!1;if(isNaN(u))return!1;if(parseInt(u)>65535)return!1;if(a.endsWith(".com"))return!0;if(!~b.indexOf(l.substr(l.lastIndexOf("."))))return!1}else if(!~b.indexOf(a.substr(a.lastIndexOf("."))))return!1}return!0},x=["\n","\r","\t","(",")","[","]","<",">","'",'"'],y=function(e){return e=r(e,"(",")"),e=r(e,"[","]"),e=r(e,'"','"'),e=r(e,"'","'")},k=function(e){return e=e.toLowerCase(),e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":e.startsWith("ftp://")?"ftp://":e.startsWith("file:///")?"file:///":!!e.startsWith("mailto:")&&"mailto:"},v=function(e,n){return e.map(function(a,t){if(a.indexOf(".")<1&&!k(a))return a;if(a.split("").filter(function(e){return~d.indexOf(e)}).length!==a.length)return a;var i=!1,r=k(a);if(r&&(i={reason:"protocol",protocol:r,url:a.substr(r.length)}),!i&&n.urls&&h(a)&&(i={reason:"url",protocol:n.defaultProtocol,url:a}),!i&&n.emails&&g(a)&&(i={reason:"email",protocol:"mailto:",url:a}),!i&&n.ips&&p(a)&&(i={reason:"ip",protocol:n.defaultProtocol,url:a}),i){return"'"!==e[t-1]&&'"'!==e[t-1]||!~m.indexOf(e[t-2])?i:a}return a})},w=function(e,a){var t=n(e),i=a.truncate>0&&e.length>a.truncate?e.substring(0,a.truncate)+"...":e,r="<a href='"+t+"'";if(a.attributes)for(var o in a.attributes)a.attributes.hasOwnProperty(o)&&(r=r+" "+o+"='"+a.attributes[o]+"' ");return r=r+">"+i+"</a>"},j=function(e,n){var a=s(e);return a=v(a,n).map(function(e){return"string"==typeof e?e:(w(e.url,n),w(e.protocol+e.url,n))}),c(a)},z=function(e,n){n=a(n);var t=j(e,n);return t};return z.validate={ip:p,url:h,email:g},z}); | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.anchorme=n()}(this,function(){"use strict";function e(e,n,a){return e.split(n).length-1}function n(e){function n(e,a){return e.endsWith(a)?(e=e.substring(0,e.length-1),n(e,a)):e}return e.endsWith("?")?e=n(e,"?"):e.endsWith(";")?e=n(e,";"):e.endsWith(":")?e=n(e,":"):e.endsWith(",")?e=n(e,","):e.endsWith(".")&&(e=n(e,".")),e}function a(e){return e||(e={attributes:[],html:!0,ips:!0,emails:!0,urls:!0,TLDs:20,truncate:0,defaultProtocol:"http://"}),"object"!==u(e.attributes)&&(e.attributes=[]),"boolean"!=typeof e.html&&(e.html=!0),"boolean"!=typeof e.ips&&(e.ips=!0),"boolean"!=typeof e.emails&&(e.emails=!0),"boolean"!=typeof e.urls&&(e.urls=!0),"string"!=typeof e.defaultProtocol&&(e.defaultProtocol="http://"),"number"!=typeof e.truncate&&(e.truncate=0),e}function t(e){return!("string"==typeof e&&e.indexOf(".")>-1)&&(("number"!=typeof e||Math.round(e)===e)&&(""!==e&&!isNaN(1*e)))}function r(e){return!!t(e)&&!(1*e>65535)}function i(e,n,a){return e.forEach(function(t,r){!(t.indexOf(".")>-1)||e[r-1]===n&&e[r+1]===a||e[r+1]!==n&&e[r+1]!==a||(e[r]=e[r]+e[r+1],"string"==typeof e[r+2]&&(e[r]=e[r]+e[r+2]),"string"==typeof e[r+3]&&(e[r]=e[r]+e[r+3]),"string"==typeof e[r+4]&&(e[r]=e[r]+e[r+4]),e.splice(r+1,4),i(e,n,a))}),e}function o(e){return" "+e+" "}function s(e){return k.forEach(function(n){e=e.split(n).join(o(n))}),e=v(e.split(" "))}function l(e){return e=e.join(" "),k.forEach(function(n){e=e.split(o(n)).join(n)}),e}function c(e,a){var t=e.protocol+n(e.noProtocol),r=e.raw;return r=a.truncate>0&&r.length>a.truncate?r.substring(0,a.truncate)+"...":r,"<a href='"+t+"' "+a.attributes.map(function(n){if(n.filter)return n.filter(e)?" "+n.name+"="+n.value+" ":""})+">"+r+"</a>"}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f="abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-/=?^_`{|}~.",d="abcdefghijklmnopqrstuvwxyz0123456789-.:",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%",m=[".com",".net",".org",".edu",".gov",".uk",".ca",".de",".jp",".fr",".au",".us",".ru",".ch",".it",".nl",".se",".no",".es",".io",".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".analytics",".android",".anquan",".anz",".ao",".apartments",".app",".apple",".aq",".aquarelle",".ar",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".bot",".boutique",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".cash",".casino",".cat",".catering",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".fly",".fm",".fo",".foo",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".host",".hosting",".hot",".hoteles",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".iinet",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".metlife",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".mutual",".mutuelle",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".netbank",".netflix",".network",".neustar",".new",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".orientexpress",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".philips",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".rio",".rip",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".space",".spiegel",".spot",".spreadbetting",".sr",".srl",".srt",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".xn--11b4c3d",".xn--1ck2e1b",".xn--1qqw23a",".xn--30rr7y",".xn--3bst00m",".xn--3ds443g",".xn--3e0b707e",".xn--3oq18vl8pn36a",".xn--3pxu8k",".xn--42c2d9a",".xn--45brj9c",".xn--45q11c",".xn--4gbrim",".xn--54b7fta0cc",".xn--55qw42g",".xn--55qx5d",".xn--5su34j936bgsg",".xn--5tzm5g",".xn--6frz82g",".xn--6qq986b3xl",".xn--80adxhks",".xn--80ao21a",".xn--80asehdb",".xn--80aswg",".xn--8y0a063a",".xn--90a3ac",".xn--90ae",".xn--90ais",".xn--9dbq2a",".xn--9et52u",".xn--9krt00a",".xn--b4w605ferd",".xn--bck1b9a5dre4c",".xn--c1avg",".xn--c2br7g",".xn--cck2b3b",".xn--cg4bki",".xn--clchc0ea0b2g2a9gcd",".xn--czr694b",".xn--czrs0t",".xn--czru2d",".xn--d1acj3b",".xn--d1alf",".xn--e1a4c",".xn--eckvdtc9d",".xn--efvy88h",".xn--estv75g",".xn--fct429k",".xn--fhbei",".xn--fiq228c5hs",".xn--fiq64b",".xn--fiqs8s",".xn--fiqz9s",".xn--fjq720a",".xn--flw351e",".xn--fpcrj9c3d",".xn--fzc2c9e2c",".xn--fzys8d69uvgm",".xn--g2xx48c",".xn--gckr3f0f",".xn--gecrj9c",".xn--gk3at1e",".xn--h2brj9c",".xn--hxt814e",".xn--i1b6b1a6a2e",".xn--imr513n",".xn--io0a7i",".xn--j1aef",".xn--j1amh",".xn--j6w193g",".xn--jlq61u9w7b",".xn--jvr189m",".xn--kcrx77d1x4a",".xn--kprw13d",".xn--kpry57d",".xn--kpu716f",".xn--kput3i",".xn--l1acc",".xn--lgbbat1ad8j",".xn--mgb9awbf",".xn--mgba3a3ejt",".xn--mgba3a4f16a",".xn--mgba7c0bbn0a",".xn--mgbaam7a8h",".xn--mgbab2bd",".xn--mgbayh7gpa",".xn--mgbb9fbpob",".xn--mgbbh1a71e",".xn--mgbc0a9azcg",".xn--mgbca7dzdo",".xn--mgberp4a5d4ar",".xn--mgbpl2fh",".xn--mgbt3dhd",".xn--mgbtx2b",".xn--mgbx4cd0ab",".xn--mix891f",".xn--mk1bu44c",".xn--mxtq1m",".xn--ngbc5azd",".xn--ngbe9e0a",".xn--node",".xn--nqv7f",".xn--nqv7fs00ema",".xn--nyqy26a",".xn--o3cw4h",".xn--ogbpf8fl",".xn--p1acf",".xn--p1ai",".xn--pbt977c",".xn--pgbs0dh",".xn--pssy2u",".xn--q9jyb4c",".xn--qcka1pmc",".xn--qxam",".xn--rhqv96g",".xn--rovu88b",".xn--s9brj9c",".xn--ses554g",".xn--t60b56a",".xn--tckwe",".xn--unup4y",".xn--vermgensberater-ctb",".xn--vermgensberatung-pwb",".xn--vhquv",".xn--vuq861b",".xn--w4r85el8fhu5dnra",".xn--w4rs40l",".xn--wgbh1c",".xn--wgbl6a",".xn--xhq521b",".xn--xkc2al3hye2a",".xn--xkc2dl3a5ee0h",".xn--y9a3aq",".xn--yfro4i67o",".xn--ygbi2ammx",".xn--zfr164b",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw"],g=["src=","href=","cite=","formaction=","icon=","manifest=","poster=","codebase=","background=","profile=","usemap="],p=function(e){return e=e.toLowerCase(),e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":e.startsWith("ftp://")?"ftp://":e.startsWith("file:///")?"file:///":!!e.startsWith("mailto:")&&"mailto:"},h=function(a){if(e(a,"@")<1)return!1;a=a.toLowerCase(),a=n(a);var t=p(a);t&&(a=a.substr(t.length));var r=a.substring(0,a.indexOf("@")),i=a.substr(a.indexOf("@")+1);return r.split("").filter(function(e){return~f.indexOf(e)}).length===r.length&&(i.split("").filter(function(e){return~d.indexOf(e)}).length===i.length&&(!!i.endsWith(".com")||!!~m.indexOf(i.substr(i.lastIndexOf(".")))))},x=function(a){if(e(a,".")<3)return!1;a=a.toLowerCase(),a=n(a);var i=p(a);i&&(a=a.substr(i.length));var o=a.split("."),s=o[0],l=o[1],c=o[2];if(!t(s)||s>255||s<0)return!1;if(!t(l)||l>255||l<0)return!1;if(!t(c)||c>255||c<0)return!1;var u,f,d,b=o[3];if(!b)return!1;if(~b.indexOf("/")){var m=b.split("/");u=m[0],d=m[1]}if(~b.indexOf(":")&&~b.indexOf("/")&&b.indexOf(":")<b.indexOf("/")){var g=b.split(":"),h=g[1].split("/");u=g[0],f=h[0]}if(~b.indexOf(":")&&b.indexOf("/")<0&&!o.slice(4).join()){var x=b.split(":");u=x[0],f=x[1]}return b.indexOf(":")<0&&b.indexOf("/")<0&&!o.slice(4).join()&&(u=b),!(!t(u)||u>255||u<0)&&(!(void 0!==f&&!r(f))&&!!u)},y=function(a){if(0===e(a,"."))return!1;if(1===e(a,".")&&a.indexOf(".")===a.length-1)return!1;if(a.indexOf("/")<3&&a.indexOf("/")>0)return!1;a=a.toLowerCase(),a=n(a);var t=p(a);if(t&&(a=a.substr(t.length)),~a.indexOf("/")){var r=a.indexOf("/"),i=a.substring(0,r);if(~i.indexOf(".."))return!1;if(i.split("").filter(function(e){return~d.indexOf(e)}).length!==i.length)return!1;if(i.endsWith(".com"))return!0;if(i.indexOf(":")>0){var o=i.split(":"),s=o[0],l=o[1];if(!l)return!1;if(isNaN(l))return!1;if(parseInt(l)>65535)return!1;if(a.endsWith(".com"))return!0;if(!~m.indexOf(s.substr(s.lastIndexOf("."))))return!1}else if(!~m.indexOf(i.substr(i.lastIndexOf("."))))return!1}else{if(~a.indexOf(".."))return!1;if(a.split("").filter(function(e){return~d.indexOf(e)}).length!==a.length)return!1;if(a.endsWith(".com"))return!0;if(a.indexOf(":")>0){var c=a.split(":"),u=c[0],f=c[1];if(!f)return!1;if(isNaN(f))return!1;if(parseInt(f)>65535)return!1;if(a.endsWith(".com"))return!0;if(!~m.indexOf(u.substr(u.lastIndexOf("."))))return!1}else if(!~m.indexOf(a.substr(a.lastIndexOf("."))))return!1}return!0},k=["\n","\r","\t","(",")","[","]","<",">","'",'"'],v=function(e){return e=i(e,"(",")"),e=i(e,"[","]"),e=i(e,'"','"'),e=i(e,"'","'")},w=function(e,n){return e.map(function(a,t){if(a.indexOf(".")<1&&!p(a))return a;if(a.split("").filter(function(e){return~b.indexOf(e)}).length!==a.length)return a;var r=!1,i=p(a)||"";if("file:///"===i&&a.substr(i.length).split(/\/|\\/).length-1&&(r={reason:"file",protocol:i,raw:a,noProtocol:a.substr(i.length)}),!r&&n.urls&&y(a)&&(r={reason:"url",protocol:i?i:"string"==typeof n.defaultProtocol?n.defaultProtocol:n.defaultProtocol(a),raw:a,noProtocol:a.substr(i.length)}),!r&&n.emails&&h(a)&&(r={reason:"email",protocol:"mailto:",raw:a,noProtocol:a.substr(i.length)}),!r&&n.ips&&x(a)&&(r={reason:"ip",protocol:i?i:"string"==typeof n.defaultProtocol?n.defaultProtocol:n.defaultProtocol(a),raw:a,noProtocol:a.substr(i.length)}),r){return"'"!==e[t-1]&&'"'!==e[t-1]||!~g.indexOf(e[t-2])?r:a}return a})},j=function(e,n){var a=s(e);return a=w(a,n).map(function(e){return"string"==typeof e?e:c(e,n)}),l(a)},z=function(e,n){n=a(n);var t=j(e,n);return t};return z.validate={ip:x,url:y,email:h},z}); |
{ | ||
"name": "anchorme", | ||
"version": "0.7.2", | ||
"version": "0.8.0", | ||
"description": "A library to convert URLs to a clickable HTML anchor elements", | ||
@@ -8,4 +8,4 @@ "main": "./dist/anchorme.js", | ||
"test": "mocha test/run.js", | ||
"bench":"node test/bench.js", | ||
"build":"node build/build" | ||
"bench": "node test/bench.js", | ||
"build": "node build/build" | ||
}, | ||
@@ -37,2 +37,2 @@ "repository": { | ||
"dependencies": {} | ||
} | ||
} |
202
README.md
@@ -45,5 +45,18 @@ # Anchorme.js | ||
anchorme(someText,{ | ||
attributes:{ | ||
"target":"_blank" | ||
} | ||
// attributes to add to the anchor tags | ||
attributes:[ | ||
// can be objects | ||
{ | ||
name:"target", | ||
value:"_blank", | ||
}, | ||
// or functions | ||
function(obj){ | ||
if(obj.reason === "email") return {name:"class",value:"email"}; | ||
else return {name:"class",value:"regular-link"} | ||
} | ||
// read below to know more about this | ||
// and other options | ||
], | ||
}) | ||
@@ -53,17 +66,164 @@ | ||
#### Available options | ||
## Demo | ||
Option key | Default value | Description | ||
--- | --- | --- | ||
`attributes` | `false` | An object of attributes to be added to each anchor tag | ||
`html` | `true` | If you're expecting HTML input, this will make sure that your HTML won't break | ||
`ips` | `true` | Detect IPs | ||
`urls` | `true` | Detect URLs | ||
`emails` | `true` | Detect Emails | ||
`truncate` | `0` | Truncate long links | ||
`defaultProtocol` | `"http://"` | Default protocol to be added when no protocol has been defined in the input | ||
To test how this library would work for you, head over to [here](http://alexcorvi.github.io/anchorme.js/) to test it. | ||
## Available options | ||
### Validation | ||
### Truncation | ||
This will convert a long like like this: | ||
https://raw.githubusercontent.com/alexcorvi/anchorme.js/gh-pages/src/tests/hasprotocol.js | ||
to this: | ||
[https://raw.githubusercontent.com/alexcorv...](https://raw.githubusercontent.com/alexcorvi/anchorme.js/gh-pages/src/tests/hasprotocol.js) | ||
**Default Value:** `0` (Won't truncate) | ||
**Example** | ||
```javascript | ||
anchorme(string,{ | ||
truncate:40 | ||
}) | ||
``` | ||
### Excluding | ||
You can exclude IPs/Emails/URLs/Files like this: | ||
```javascript | ||
anchorme(string,{ | ||
emails:false, | ||
urls:false, | ||
ips:false, | ||
files:false | ||
}) | ||
// the example above won't do anything to your string | ||
// since you're excluding every possible change | ||
``` | ||
**Default Value:** all are `true` | ||
### Adding attributes | ||
You can add attributes to the links produced by anchorme. using the `attributes` prop in the options. this options should be an array of the attributes you'd like to pass. | ||
Values of this array can be: | ||
* Plain objects | ||
```javascript | ||
anchorme(string,{ | ||
attributes:[ | ||
{ | ||
// attribute name | ||
name:"class", | ||
// attribute value | ||
value:"something" | ||
}, | ||
{ | ||
name:"target", | ||
value:"blank" | ||
} | ||
] | ||
}); | ||
``` | ||
* Functions that return an object | ||
```javascript | ||
anchorme(string,{ | ||
attributes:[ | ||
{ | ||
name:"class", | ||
value:"link" | ||
}, | ||
function(data){ | ||
if(data.reason === "ip") return {name:"class",value:"ip-link"}; | ||
}, | ||
function(data){ | ||
if(data.protocol !== "mailto:") return {name:"target",value:"blank"}; | ||
// following conditions can also be used: | ||
// if(data.raw.indexOf("@") > 0) return {name:"target",value:"blank"}; | ||
// if(data.reason !== "email") return {name:"target",value:"blank"}; | ||
} | ||
] | ||
}); | ||
``` | ||
Where `data` is an object containing detailed info about the link in question. The example above will add `ip-link` class to all the links that are IPs, and add `target='_blank'` to all the links that are not emails. | ||
If you log the data object you'll get something similar to this: | ||
```javascript | ||
{ | ||
// the reason this fragment | ||
// was detected | ||
// possible reasons: "file", "url", "ip", "email" | ||
"reason": "email", | ||
// the protocol that the link came with | ||
// or the protocol that was added to the link | ||
"protocol": "mailto:", | ||
// the link (without any modification) | ||
"raw": "a@b.co", | ||
// the encoded version of the link | ||
// i.e. non-Latin characters -> URI encoding | ||
// also doesn't have a protocol (if it came with any) | ||
"encoded": "a@b.co", | ||
} | ||
``` | ||
### Setting default protocol | ||
If the link came without protocol, like `www.google.com` then anchorme will add the `http://` by default. However you can set your own default protocol. | ||
```javascript | ||
anchorme(string,{ | ||
defaultProtocol:"ftp://", | ||
// ... or anything | ||
}) | ||
``` | ||
In some cases, you might want the protocol to be set conditionally. Anchorme allows you to pass a function as the `defaultProtocol` and uses whatever this function returns. | ||
```javascript | ||
anchorme(string,{ | ||
defaultProtocol:function(url){ | ||
// where url is like: "www.google.com" | ||
if(url.indexOf("secure") > 0) return "https://"; | ||
else return "http://"; | ||
}, | ||
}) | ||
``` | ||
## Additional functionalities | ||
### Listing all valid URLs | ||
Although anchorme was authored to transform URLs in text strings to a click-able HTML anchor tags, passing `true` to `list` property in options will change the library's behavior and instead of returning a text with an HTML tags it will only return an array of valid URLs. | ||
```javascript | ||
anchorme(myText,{ | ||
list:true | ||
}) | ||
``` | ||
### Validating | ||
it can also be used for validation: | ||
@@ -77,9 +237,13 @@ | ||
## Contributing | ||
## Demo | ||
- Clone this repository | ||
- `cd anchorme.js && npm install` | ||
- install mocha globally (for running the tests): `mocha test/run` | ||
- .. | ||
- Build `node build/build` | ||
- Test `node test/run` | ||
To test how this library would work for you, head over to [here](http://alexcorvi.github.io/anchorme.js/) to test it. | ||
* * | ||
* * * | ||
License: The MIT License (MIT) - Copyright (c) 2016 Alex Corvi | ||
License: The MIT License (MIT) - Copyright (c) 2017 Alex Corvi |
@@ -8,2 +8,3 @@ "use strict"; | ||
import identify from "./transform/identify.js"; | ||
import hasprotocol from "./tests/hasprotocol.js"; | ||
@@ -19,3 +20,10 @@ const anchorme = function(str,options){ | ||
ip:ipChecker, | ||
url:urlChecker, | ||
url:function(input){ | ||
// simple wrapper that does what "identify.js" does initially | ||
// remove the protocal | ||
var protocol = hasprotocol(input) || ""; | ||
input = input.substr(protocol.length); | ||
input = encodeURI(input); | ||
return urlChecker(input); | ||
}, | ||
email:emailChecker | ||
@@ -22,0 +30,0 @@ }; |
const allowedInEmailName = "abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-/=?^_`{|}~."; | ||
const allowedInHost = "abcdefghijklmnopqrstuvwxyz0123456789-.:"; | ||
const allowedInHost = "abcdefghijklmnopqrstuvwxyz0123456789-.:%"; | ||
const urlAllowed = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%"; | ||
@@ -4,0 +4,0 @@ const tlds = ['.com','.net','.org','.edu','.gov','.uk','.ca','.de','.jp','.fr','.au','.us','.ru','.ch','.it','.nl','.se','.no','.es','.io','.aaa','.aarp','.abarth','.abb','.abbott','.abbvie','.abc','.able','.abogado','.abudhabi','.ac','.academy','.accenture','.accountant','.accountants','.aco','.active','.actor','.ad','.adac','.ads','.adult','.ae','.aeg','.aero','.aetna','.af','.afamilycompany','.afl','.ag','.agakhan','.agency','.ai','.aig','.aigo','.airbus','.airforce','.airtel','.akdn','.al','.alfaromeo','.alibaba','.alipay','.allfinanz','.allstate','.ally','.alsace','.alstom','.am','.americanexpress','.americanfamily','.amex','.amfam','.amica','.amsterdam','.analytics','.android','.anquan','.anz','.ao','.apartments','.app','.apple','.aq','.aquarelle','.ar','.aramco','.archi','.army','.arpa','.art','.arte','.as','.asda','.asia','.associates','.at','.athleta','.attorney','.au','.auction','.audi','.audible','.audio','.auspost','.author','.auto','.autos','.avianca','.aw','.aws','.ax','.axa','.az','.azure','.ba','.baby','.baidu','.banamex','.bananarepublic','.band','.bank','.bar','.barcelona','.barclaycard','.barclays','.barefoot','.bargains','.bauhaus','.bayern','.bb','.bbc','.bbt','.bbva','.bcg','.bcn','.bd','.be','.beats','.beauty','.beer','.bentley','.berlin','.best','.bestbuy','.bet','.bf','.bg','.bh','.bharti','.bi','.bible','.bid','.bike','.bing','.bingo','.bio','.biz','.bj','.black','.blackfriday','.blanco','.blockbuster','.blog','.bloomberg','.blue','.bm','.bms','.bmw','.bn','.bnl','.bnpparibas','.bo','.boats','.boehringer','.bofa','.bom','.bond','.boo','.book','.booking','.boots','.bosch','.bostik','.bot','.boutique','.br','.bradesco','.bridgestone','.broadway','.broker','.brother','.brussels','.bs','.bt','.budapest','.bugatti','.build','.builders','.business','.buy','.buzz','.bv','.bw','.by','.bz','.bzh','.ca','.cab','.cafe','.cal','.call','.calvinklein','.cam','.camera','.camp','.cancerresearch','.canon','.capetown','.capital','.capitalone','.car','.caravan','.cards','.care','.career','.careers','.cars','.cartier','.casa','.cash','.casino','.cat','.catering','.cba','.cbn','.cbre','.cbs','.cc','.cd','.ceb','.center','.ceo','.cern','.cf','.cfa','.cfd','.cg','.ch','.chanel','.channel','.chase','.chat','.cheap','.chintai','.chloe','.christmas','.chrome','.chrysler','.church','.ci','.cipriani','.circle','.cisco','.citadel','.citi','.citic','.city','.cityeats','.ck','.cl','.claims','.cleaning','.click','.clinic','.clinique','.clothing','.cloud','.club','.clubmed','.cm','.cn','.co','.coach','.codes','.coffee','.college','.cologne','.comcast','.commbank','.community','.company','.compare','.computer','.comsec','.condos','.construction','.consulting','.contact','.contractors','.cooking','.cookingchannel','.cool','.coop','.corsica','.country','.coupon','.coupons','.courses','.cr','.credit','.creditcard','.creditunion','.cricket','.crown','.crs','.cruises','.csc','.cu','.cuisinella','.cv','.cw','.cx','.cy','.cymru','.cyou','.cz','.dabur','.dad','.dance','.date','.dating','.datsun','.day','.dclk','.dds','.de','.deal','.dealer','.deals','.degree','.delivery','.dell','.deloitte','.delta','.democrat','.dental','.dentist','.desi','.design','.dev','.dhl','.diamonds','.diet','.digital','.direct','.directory','.discount','.discover','.dish','.diy','.dj','.dk','.dm','.dnp','.do','.docs','.doctor','.dodge','.dog','.doha','.domains','.dot','.download','.drive','.dtv','.dubai','.duck','.dunlop','.duns','.dupont','.durban','.dvag','.dvr','.dz','.earth','.eat','.ec','.eco','.edeka','.edu','.education','.ee','.eg','.email','.emerck','.energy','.engineer','.engineering','.enterprises','.epost','.epson','.equipment','.er','.ericsson','.erni','.es','.esq','.estate','.esurance','.et','.eu','.eurovision','.eus','.events','.everbank','.exchange','.expert','.exposed','.express','.extraspace','.fage','.fail','.fairwinds','.faith','.family','.fan','.fans','.farm','.farmers','.fashion','.fast','.fedex','.feedback','.ferrari','.ferrero','.fi','.fiat','.fidelity','.fido','.film','.final','.finance','.financial','.fire','.firestone','.firmdale','.fish','.fishing','.fit','.fitness','.fj','.fk','.flickr','.flights','.flir','.florist','.flowers','.fly','.fm','.fo','.foo','.foodnetwork','.football','.ford','.forex','.forsale','.forum','.foundation','.fox','.fr','.fresenius','.frl','.frogans','.frontdoor','.frontier','.ftr','.fujitsu','.fujixerox','.fund','.furniture','.futbol','.fyi','.ga','.gal','.gallery','.gallo','.gallup','.game','.games','.gap','.garden','.gb','.gbiz','.gd','.gdn','.ge','.gea','.gent','.genting','.george','.gf','.gg','.ggee','.gh','.gi','.gift','.gifts','.gives','.giving','.gl','.glade','.glass','.gle','.global','.globo','.gm','.gmail','.gmbh','.gmo','.gmx','.gn','.godaddy','.gold','.goldpoint','.golf','.goo','.goodhands','.goodyear','.goog','.google','.gop','.got','.gov','.gp','.gq','.gr','.grainger','.graphics','.gratis','.green','.gripe','.group','.gs','.gt','.gu','.guardian','.gucci','.guge','.guide','.guitars','.guru','.gw','.gy','.hamburg','.hangout','.haus','.hbo','.hdfc','.hdfcbank','.health','.healthcare','.help','.helsinki','.here','.hermes','.hgtv','.hiphop','.hisamitsu','.hitachi','.hiv','.hk','.hkt','.hm','.hn','.hockey','.holdings','.holiday','.homedepot','.homegoods','.homes','.homesense','.honda','.honeywell','.horse','.host','.hosting','.hot','.hoteles','.hotmail','.house','.how','.hr','.hsbc','.ht','.htc','.hu','.hughes','.hyatt','.hyundai','.ibm','.icbc','.ice','.icu','.id','.ie','.ieee','.ifm','.iinet','.ikano','.il','.im','.imamat','.imdb','.immo','.immobilien','.in','.industries','.infiniti','.info','.ing','.ink','.institute','.insurance','.insure','.int','.intel','.international','.intuit','.investments','.io','.ipiranga','.iq','.ir','.irish','.is','.iselect','.ismaili','.ist','.istanbul','.it','.itau','.itv','.iwc','.jaguar','.java','.jcb','.jcp','.je','.jeep','.jetzt','.jewelry','.jlc','.jll','.jm','.jmp','.jnj','.jo','.jobs','.joburg','.jot','.joy','.jp','.jpmorgan','.jprs','.juegos','.juniper','.kaufen','.kddi','.ke','.kerryhotels','.kerrylogistics','.kerryproperties','.kfh','.kg','.kh','.ki','.kia','.kim','.kinder','.kindle','.kitchen','.kiwi','.km','.kn','.koeln','.komatsu','.kosher','.kp','.kpmg','.kpn','.kr','.krd','.kred','.kuokgroup','.kw','.ky','.kyoto','.kz','.la','.lacaixa','.ladbrokes','.lamborghini','.lamer','.lancaster','.lancia','.lancome','.land','.landrover','.lanxess','.lasalle','.lat','.latino','.latrobe','.law','.lawyer','.lb','.lc','.lds','.lease','.leclerc','.lefrak','.legal','.lego','.lexus','.lgbt','.li','.liaison','.lidl','.life','.lifeinsurance','.lifestyle','.lighting','.like','.lilly','.limited','.limo','.lincoln','.linde','.link','.lipsy','.live','.living','.lixil','.lk','.loan','.loans','.locker','.locus','.loft','.lol','.london','.lotte','.lotto','.love','.lpl','.lplfinancial','.lr','.ls','.lt','.ltd','.ltda','.lu','.lundbeck','.lupin','.luxe','.luxury','.lv','.ly','.ma','.macys','.madrid','.maif','.maison','.makeup','.man','.management','.mango','.market','.marketing','.markets','.marriott','.marshalls','.maserati','.mattel','.mba','.mc','.mcd','.mcdonalds','.mckinsey','.md','.me','.med','.media','.meet','.melbourne','.meme','.memorial','.men','.menu','.meo','.metlife','.mg','.mh','.miami','.microsoft','.mil','.mini','.mint','.mit','.mitsubishi','.mk','.ml','.mlb','.mls','.mm','.mma','.mn','.mo','.mobi','.mobily','.moda','.moe','.moi','.mom','.monash','.money','.monster','.montblanc','.mopar','.mormon','.mortgage','.moscow','.motorcycles','.mov','.movie','.movistar','.mp','.mq','.mr','.ms','.msd','.mt','.mtn','.mtpc','.mtr','.mu','.museum','.mutual','.mutuelle','.mv','.mw','.mx','.my','.mz','.na','.nab','.nadex','.nagoya','.name','.nationwide','.natura','.navy','.nba','.nc','.ne','.nec','.netbank','.netflix','.network','.neustar','.new','.news','.next','.nextdirect','.nexus','.nf','.nfl','.ng','.ngo','.nhk','.ni','.nico','.nike','.nikon','.ninja','.nissan','.nissay','.nl','.no','.nokia','.northwesternmutual','.norton','.now','.nowruz','.nowtv','.np','.nr','.nra','.nrw','.ntt','.nu','.nyc','.nz','.obi','.observer','.off','.office','.okinawa','.olayan','.olayangroup','.oldnavy','.ollo','.om','.omega','.one','.ong','.onl','.online','.onyourside','.ooo','.open','.oracle','.orange','.org','.organic','.orientexpress','.origins','.osaka','.otsuka','.ott','.ovh','.pa','.page','.pamperedchef','.panasonic','.panerai','.paris','.pars','.partners','.parts','.party','.passagens','.pay','.pccw','.pe','.pet','.pf','.pfizer','.pg','.ph','.pharmacy','.philips','.photo','.photography','.photos','.physio','.piaget','.pics','.pictet','.pictures','.pid','.pin','.ping','.pink','.pioneer','.pizza','.pk','.pl','.place','.play','.playstation','.plumbing','.plus','.pm','.pn','.pnc','.pohl','.poker','.politie','.porn','.post','.pr','.pramerica','.praxi','.press','.prime','.pro','.prod','.productions','.prof','.progressive','.promo','.properties','.property','.protection','.pru','.prudential','.ps','.pt','.pub','.pw','.pwc','.py','.qa','.qpon','.quebec','.quest','.qvc','.racing','.raid','.re','.read','.realestate','.realtor','.realty','.recipes','.red','.redstone','.redumbrella','.rehab','.reise','.reisen','.reit','.ren','.rent','.rentals','.repair','.report','.republican','.rest','.restaurant','.review','.reviews','.rexroth','.rich','.richardli','.ricoh','.rightathome','.rio','.rip','.ro','.rocher','.rocks','.rodeo','.rogers','.room','.rs','.rsvp','.ru','.ruhr','.run','.rw','.rwe','.ryukyu','.sa','.saarland','.safe','.safety','.sakura','.sale','.salon','.samsclub','.samsung','.sandvik','.sandvikcoromant','.sanofi','.sap','.sapo','.sarl','.sas','.save','.saxo','.sb','.sbi','.sbs','.sc','.sca','.scb','.schaeffler','.schmidt','.scholarships','.school','.schule','.schwarz','.science','.scjohnson','.scor','.scot','.sd','.se','.seat','.secure','.security','.seek','.select','.sener','.services','.ses','.seven','.sew','.sex','.sexy','.sfr','.sg','.sh','.shangrila','.sharp','.shaw','.shell','.shia','.shiksha','.shoes','.shop','.shopping','.shouji','.show','.showtime','.shriram','.si','.silk','.sina','.singles','.site','.sj','.sk','.ski','.skin','.sky','.skype','.sl','.sling','.sm','.smart','.smile','.sn','.sncf','.so','.soccer','.social','.softbank','.software','.sohu','.solar','.solutions','.song','.sony','.soy','.space','.spiegel','.spot','.spreadbetting','.sr','.srl','.srt','.st','.stada','.staples','.star','.starhub','.statebank','.statefarm','.statoil','.stc','.stcgroup','.stockholm','.storage','.store','.stream','.studio','.study','.style','.su','.sucks','.supplies','.supply','.support','.surf','.surgery','.suzuki','.sv','.swatch','.swiftcover','.swiss','.sx','.sy','.sydney','.symantec','.systems','.sz','.tab','.taipei','.talk','.taobao','.target','.tatamotors','.tatar','.tattoo','.tax','.taxi','.tc','.tci','.td','.tdk','.team','.tech','.technology','.tel','.telecity','.telefonica','.temasek','.tennis','.teva','.tf','.tg','.th','.thd','.theater','.theatre','.tiaa','.tickets','.tienda','.tiffany','.tips','.tires','.tirol','.tj','.tjmaxx','.tjx','.tk','.tkmaxx','.tl','.tm','.tmall','.tn','.to','.today','.tokyo','.tools','.top','.toray','.toshiba','.total','.tours','.town','.toyota','.toys','.tr','.trade','.trading','.training','.travel','.travelchannel','.travelers','.travelersinsurance','.trust','.trv','.tt','.tube','.tui','.tunes','.tushu','.tv','.tvs','.tw','.tz','.ua','.ubank','.ubs','.uconnect','.ug','.uk','.unicom','.university','.uno','.uol','.ups','.us','.uy','.uz','.va','.vacations','.vana','.vanguard','.vc','.ve','.vegas','.ventures','.verisign','.versicherung','.vet','.vg','.vi','.viajes','.video','.vig','.viking','.villas','.vin','.vip','.virgin','.visa','.vision','.vista','.vistaprint','.viva','.vivo','.vlaanderen','.vn','.vodka','.volkswagen','.vote','.voting','.voto','.voyage','.vu','.vuelos','.wales','.walmart','.walter','.wang','.wanggou','.warman','.watch','.watches','.weather','.weatherchannel','.webcam','.weber','.website','.wed','.wedding','.weibo','.weir','.wf','.whoswho','.wien','.wiki','.williamhill','.win','.windows','.wine','.winners','.wme','.wolterskluwer','.woodside','.work','.works','.world','.wow','.ws','.wtc','.wtf','.xbox','.xerox','.xfinity','.xihuan','.xin','.xn--11b4c3d','.xn--1ck2e1b','.xn--1qqw23a','.xn--30rr7y','.xn--3bst00m','.xn--3ds443g','.xn--3e0b707e','.xn--3oq18vl8pn36a','.xn--3pxu8k','.xn--42c2d9a','.xn--45brj9c','.xn--45q11c','.xn--4gbrim','.xn--54b7fta0cc','.xn--55qw42g','.xn--55qx5d','.xn--5su34j936bgsg','.xn--5tzm5g','.xn--6frz82g','.xn--6qq986b3xl','.xn--80adxhks','.xn--80ao21a','.xn--80asehdb','.xn--80aswg','.xn--8y0a063a','.xn--90a3ac','.xn--90ae','.xn--90ais','.xn--9dbq2a','.xn--9et52u','.xn--9krt00a','.xn--b4w605ferd','.xn--bck1b9a5dre4c','.xn--c1avg','.xn--c2br7g','.xn--cck2b3b','.xn--cg4bki','.xn--clchc0ea0b2g2a9gcd','.xn--czr694b','.xn--czrs0t','.xn--czru2d','.xn--d1acj3b','.xn--d1alf','.xn--e1a4c','.xn--eckvdtc9d','.xn--efvy88h','.xn--estv75g','.xn--fct429k','.xn--fhbei','.xn--fiq228c5hs','.xn--fiq64b','.xn--fiqs8s','.xn--fiqz9s','.xn--fjq720a','.xn--flw351e','.xn--fpcrj9c3d','.xn--fzc2c9e2c','.xn--fzys8d69uvgm','.xn--g2xx48c','.xn--gckr3f0f','.xn--gecrj9c','.xn--gk3at1e','.xn--h2brj9c','.xn--hxt814e','.xn--i1b6b1a6a2e','.xn--imr513n','.xn--io0a7i','.xn--j1aef','.xn--j1amh','.xn--j6w193g','.xn--jlq61u9w7b','.xn--jvr189m','.xn--kcrx77d1x4a','.xn--kprw13d','.xn--kpry57d','.xn--kpu716f','.xn--kput3i','.xn--l1acc','.xn--lgbbat1ad8j','.xn--mgb9awbf','.xn--mgba3a3ejt','.xn--mgba3a4f16a','.xn--mgba7c0bbn0a','.xn--mgbaam7a8h','.xn--mgbab2bd','.xn--mgbayh7gpa','.xn--mgbb9fbpob','.xn--mgbbh1a71e','.xn--mgbc0a9azcg','.xn--mgbca7dzdo','.xn--mgberp4a5d4ar','.xn--mgbpl2fh','.xn--mgbt3dhd','.xn--mgbtx2b','.xn--mgbx4cd0ab','.xn--mix891f','.xn--mk1bu44c','.xn--mxtq1m','.xn--ngbc5azd','.xn--ngbe9e0a','.xn--node','.xn--nqv7f','.xn--nqv7fs00ema','.xn--nyqy26a','.xn--o3cw4h','.xn--ogbpf8fl','.xn--p1acf','.xn--p1ai','.xn--pbt977c','.xn--pgbs0dh','.xn--pssy2u','.xn--q9jyb4c','.xn--qcka1pmc','.xn--qxam','.xn--rhqv96g','.xn--rovu88b','.xn--s9brj9c','.xn--ses554g','.xn--t60b56a','.xn--tckwe','.xn--unup4y','.xn--vermgensberater-ctb','.xn--vermgensberatung-pwb','.xn--vhquv','.xn--vuq861b','.xn--w4r85el8fhu5dnra','.xn--w4rs40l','.xn--wgbh1c','.xn--wgbl6a','.xn--xhq521b','.xn--xkc2al3hye2a','.xn--xkc2dl3a5ee0h','.xn--y9a3aq','.xn--yfro4i67o','.xn--ygbi2ammx','.xn--zfr164b','.xperia','.xxx','.xyz','.yachts','.yahoo','.yamaxun','.yandex','.ye','.yodobashi','.yoga','.yokohama','.you','.youtube','.yt','.yun','.za','.zappos','.zara','.zero','.zip','.zippo','.zm','.zone','.zuerich','.zw']; |
@@ -8,3 +8,2 @@ "use strict"; | ||
// normalize | ||
@@ -11,0 +10,0 @@ str = str.toLowerCase(); |
"use strict"; | ||
import {countOccurrences as countOccurrences, removeNotationEnds as removeNotationEnds, isInt as isInt, isPort as isPort} from "../util.js"; | ||
@@ -4,0 +3,0 @@ |
@@ -12,45 +12,59 @@ "use strict"; | ||
return inputArr.map((fragment,index)=>{ | ||
var encoded = encodeURI(fragment); | ||
// quick validations | ||
// 1 | ||
if(fragment.indexOf(".")<1 && (!hasProtocol(fragment))) return fragment; | ||
if(encoded.indexOf(".")<1 && (!hasProtocol(encoded))) return fragment; | ||
// 2 | ||
if (fragment.split("").filter((c)=>~urlAllowed.indexOf(c)).length !== fragment.length) return fragment; | ||
if(encoded.split("").filter((c)=>~urlAllowed.indexOf(c)).length !== encoded.length) return fragment; | ||
var urlObj = false; | ||
// starting tests that might render a positive result | ||
// test 1: it begins with a protocol | ||
var protocol = hasProtocol(fragment); | ||
if(protocol) { | ||
var protocol = hasProtocol(encoded) || ""; | ||
// test 1: it's a file | ||
if(options.files && protocol === "file:///" && encoded.substr(protocol.length).split(/\/|\\/).length - 1) { | ||
urlObj = { | ||
reason:"protocol", | ||
reason:"file", | ||
protocol:protocol, | ||
url:fragment.substr(protocol.length) | ||
raw:fragment, | ||
encoded:encoded, | ||
}; | ||
} | ||
// remove the protocol before proceeding to any other test | ||
else if(protocol)encoded = encoded.substr(protocol.length); | ||
// test 2: it's a URL | ||
if((!urlObj) && options.urls && urlChecker(fragment)) { | ||
if((!urlObj) && options.urls && urlChecker(encoded)) { | ||
urlObj = { | ||
reason:"url", | ||
protocol:options.defaultProtocol, | ||
url:fragment | ||
protocol:protocol ? protocol : typeof options.defaultProtocol === "function" ? options.defaultProtocol(fragment) : options.defaultProtocol, | ||
raw:fragment, | ||
encoded:encoded, | ||
}; | ||
} | ||
// test 3: it's an email | ||
if((!urlObj) && options.emails && emailChecker(fragment)) { | ||
if((!urlObj) && options.emails && emailChecker(encoded)) { | ||
urlObj = { | ||
reason:"email", | ||
protocol:"mailto:", | ||
url:fragment | ||
raw:fragment, | ||
encoded:encoded, | ||
}; | ||
} | ||
// test 4: it's an IP | ||
if((!urlObj) && options.ips && ipChecker(fragment)) { | ||
if((!urlObj) && options.ips && ipChecker(encoded)) { | ||
urlObj = { | ||
reason:"ip", | ||
protocol:options.defaultProtocol, | ||
url:fragment | ||
protocol:protocol ? protocol : typeof options.defaultProtocol === "function" ? options.defaultProtocol(fragment) : options.defaultProtocol, | ||
raw:fragment, | ||
encoded:encoded, | ||
}; | ||
} | ||
if(!urlObj) return fragment; | ||
@@ -57,0 +71,0 @@ else { |
"use strict"; | ||
import {separate as separate} from "../separate/separate.js"; | ||
import {deSeparate as deSeparate} from "../separate/separate.js"; | ||
import {removeNotationEnds as removeNotationEnds} from "../util.js"; | ||
import identify from "./identify.js"; | ||
import url2tag from "./url2tag.js"; | ||
export default function(str,options){ | ||
export default function(str,options){ | ||
var arr = separate(str); | ||
arr = identify(arr,options).map((fragment)=>{ | ||
arr = identify(arr,options); | ||
// return the current list (with words being filtered out) | ||
if(options.list) return arr.filter((fragment)=>typeof fragment !== "string"); | ||
// transform objects to HTML tags | ||
arr = arr.map((fragment)=>{ | ||
if(typeof fragment === "string") return fragment; | ||
url2tag(fragment.url,options); | ||
return url2tag(fragment.protocol+fragment.url,options); | ||
return url2tag(fragment,options); | ||
}); | ||
// join and return | ||
return deSeparate(arr); | ||
} | ||
function url2tag (fragment,options){ | ||
var href = fragment.protocol + removeNotationEnds(fragment.encoded); | ||
var original = fragment.raw; | ||
original = (options.truncate > 0 && original.length > options.truncate) ? original.substring(0,options.truncate) + "..." : original; | ||
return `<a href="${href}" ${options.attributes.map((attribute)=>{ | ||
if(typeof attribute === 'function') { | ||
var name = (attribute(fragment) || {}).name; | ||
var value = (attribute(fragment) || {}).value; | ||
if(name && !value) return " name "; | ||
if(name && value) return ` ${name}="${value}" `; | ||
} | ||
else return ` ${attribute.name}="${attribute.value}" `; | ||
}).join("")}>${original}</a>`; | ||
} |
@@ -39,20 +39,21 @@ "use strict"; | ||
options = { | ||
"attributes":false, | ||
"html":true, | ||
attributes:[], | ||
ips:true, | ||
emails:true, | ||
urls:true, | ||
TLDs:20, | ||
files:true, | ||
truncate:0, | ||
defaultProtocol:"http://" | ||
defaultProtocol:"http://", | ||
list:false, | ||
}; | ||
} | ||
if(typeof options.attributes !== "object") options.attributes = false; | ||
if(typeof options.html !== "boolean") options.html = true; | ||
if(typeof options.attributes !== "object") options.attributes = []; | ||
if(typeof options.ips !== "boolean") options.ips = true; | ||
if(typeof options.emails !== "boolean") options.emails = true; | ||
if(typeof options.urls !== "boolean") options.urls = true; | ||
if(typeof options.defaultProtocol !== "string") options.defaultProtocol = "http://"; | ||
if(typeof options.files !== "boolean") options.files = true; | ||
if(typeof options.truncate !== "number") options.truncate = 0; | ||
if(typeof options.list !== "boolean") options.list = false; | ||
if(typeof options.defaultProtocol !== "string" && typeof options.defaultProtocol !== "function") options.defaultProtocol = "http://"; | ||
return options; | ||
@@ -59,0 +60,0 @@ } |
@@ -65,10 +65,26 @@ const assert = require('assert'); | ||
describe('options', function () { | ||
it('add attributes', function () { | ||
var result = anchorme("www.google.com",{ | ||
attributes:{ | ||
"target":"_blank" | ||
} | ||
attributes:[ | ||
{ | ||
name:"target", | ||
value:"_blank" | ||
} | ||
] | ||
}); | ||
assert.equal(result.split("_blank").length,2); | ||
}); | ||
it('attributes with filters', function () { | ||
var result = anchorme("www.google.com www.yahoo.com",{ | ||
attributes:[ | ||
function(fragment){ | ||
if(fragment.raw.indexOf("google")===-1) return {name:"target",value:"_blank"}; | ||
else return {name:"target",value:"self"}; | ||
} | ||
] | ||
}); | ||
assert.equal(result.split("_blank").length,2); | ||
}); | ||
@@ -92,4 +108,30 @@ it('truncate', function () { | ||
}); | ||
assert.equal(result.split("ftp://").length,3); | ||
assert.equal(result.split("ftp://").length,2); | ||
}); | ||
it('set default protocol as a function', function () { | ||
var result = anchorme("www.google.com www.yahoo.com",{ | ||
defaultProtocol:function(raw){ | ||
if(raw.indexOf("google") === -1) return "ftp://"; | ||
else return "https://"; | ||
} | ||
}); | ||
assert.equal(result.split("ftp://").length,2); | ||
}); | ||
}); | ||
describe('Additional functionalities', function () { | ||
it('return a list of valid URLs', function () { | ||
var result = anchorme("www.google.com mail@gmail.com",{ | ||
list:true | ||
}); | ||
assert.equal(typeof result,"object"); | ||
assert.equal(result.length,2); | ||
}); | ||
it('URLs validator works with emojis', function () { | ||
assert.equal(anchorme.validate.url("http://ππββ¨πππΈπ.ππ©.ws"),true); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
536461
1169
246
29