Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More β†’
Socket
Sign inDemoInstall
Socket

anchorme

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

anchorme - npm Package Compare versions

Comparing version 0.7.2 to 0.8.0

15

build/build.js

@@ -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": {}
}
}

@@ -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

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚑️ by Socket Inc