221 lines
11 KiB
JavaScript
Executable File
221 lines
11 KiB
JavaScript
Executable File
/*!
|
|
* URI.js - Mutating URLs
|
|
* Second Level Domain (SLD) Support
|
|
*
|
|
* Version: 1.11.2
|
|
*
|
|
* Author: Rodney Rehm
|
|
* Web: http://medialize.github.com/URI.js/
|
|
*
|
|
* Licensed under
|
|
* MIT License http://www.opensource.org/licenses/mit-license
|
|
* GPL v3 http://opensource.org/licenses/GPL-3.0
|
|
*
|
|
*/
|
|
|
|
(function (root, factory) {
|
|
// https://github.com/umdjs/umd/blob/master/returnExports.js
|
|
if (typeof exports === 'object') {
|
|
// Node
|
|
module.exports = factory();
|
|
} else if (typeof define === 'function' && define.amd) {
|
|
// AMD. Register as an anonymous module.
|
|
define(factory);
|
|
} else {
|
|
// Browser globals (root is window)
|
|
root.SecondLevelDomains = factory(root);
|
|
}
|
|
}(this, function (root) {
|
|
"use strict";
|
|
|
|
// save current SecondLevelDomains variable, if any
|
|
var _SecondLevelDomains = root && root.SecondLevelDomains;
|
|
|
|
var hasOwn = Object.prototype.hasOwnProperty;
|
|
var SLD = {
|
|
// list of known Second Level Domains
|
|
// converted list of SLDs from https://github.com/gavingmiller/second-level-domains
|
|
// ----
|
|
// publicsuffix.org is more current and actually used by a couple of browsers internally.
|
|
// downside is it also contains domains like "dyndns.org" - which is fine for the security
|
|
// issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js
|
|
// ----
|
|
list: {
|
|
"ac":"com|gov|mil|net|org",
|
|
"ae":"ac|co|gov|mil|name|net|org|pro|sch",
|
|
"af":"com|edu|gov|net|org",
|
|
"al":"com|edu|gov|mil|net|org",
|
|
"ao":"co|ed|gv|it|og|pb",
|
|
"ar":"com|edu|gob|gov|int|mil|net|org|tur",
|
|
"at":"ac|co|gv|or",
|
|
"au":"asn|com|csiro|edu|gov|id|net|org",
|
|
"ba":"co|com|edu|gov|mil|net|org|rs|unbi|unmo|unsa|untz|unze",
|
|
"bb":"biz|co|com|edu|gov|info|net|org|store|tv",
|
|
"bh":"biz|cc|com|edu|gov|info|net|org",
|
|
"bn":"com|edu|gov|net|org",
|
|
"bo":"com|edu|gob|gov|int|mil|net|org|tv",
|
|
"br":"adm|adv|agr|am|arq|art|ato|b|bio|blog|bmd|cim|cng|cnt|com|coop|ecn|edu|eng|esp|etc|eti|far|flog|fm|fnd|fot|fst|g12|ggf|gov|imb|ind|inf|jor|jus|lel|mat|med|mil|mus|net|nom|not|ntr|odo|org|ppg|pro|psc|psi|qsl|rec|slg|srv|tmp|trd|tur|tv|vet|vlog|wiki|zlg",
|
|
"bs":"com|edu|gov|net|org",
|
|
"bz":"du|et|om|ov|rg",
|
|
"ca":"ab|bc|mb|nb|nf|nl|ns|nt|nu|on|pe|qc|sk|yk",
|
|
"ck":"biz|co|edu|gen|gov|info|net|org",
|
|
"cn":"ac|ah|bj|com|cq|edu|fj|gd|gov|gs|gx|gz|ha|hb|he|hi|hl|hn|jl|js|jx|ln|mil|net|nm|nx|org|qh|sc|sd|sh|sn|sx|tj|tw|xj|xz|yn|zj",
|
|
"co":"com|edu|gov|mil|net|nom|org",
|
|
"cr":"ac|c|co|ed|fi|go|or|sa",
|
|
"cy":"ac|biz|com|ekloges|gov|ltd|name|net|org|parliament|press|pro|tm",
|
|
"do":"art|com|edu|gob|gov|mil|net|org|sld|web",
|
|
"dz":"art|asso|com|edu|gov|net|org|pol",
|
|
"ec":"com|edu|fin|gov|info|med|mil|net|org|pro",
|
|
"eg":"com|edu|eun|gov|mil|name|net|org|sci",
|
|
"er":"com|edu|gov|ind|mil|net|org|rochest|w",
|
|
"es":"com|edu|gob|nom|org",
|
|
"et":"biz|com|edu|gov|info|name|net|org",
|
|
"fj":"ac|biz|com|info|mil|name|net|org|pro",
|
|
"fk":"ac|co|gov|net|nom|org",
|
|
"fr":"asso|com|f|gouv|nom|prd|presse|tm",
|
|
"gg":"co|net|org",
|
|
"gh":"com|edu|gov|mil|org",
|
|
"gn":"ac|com|gov|net|org",
|
|
"gr":"com|edu|gov|mil|net|org",
|
|
"gt":"com|edu|gob|ind|mil|net|org",
|
|
"gu":"com|edu|gov|net|org",
|
|
"hk":"com|edu|gov|idv|net|org",
|
|
"id":"ac|co|go|mil|net|or|sch|web",
|
|
"il":"ac|co|gov|idf|k12|muni|net|org",
|
|
"in":"ac|co|edu|ernet|firm|gen|gov|i|ind|mil|net|nic|org|res",
|
|
"iq":"com|edu|gov|i|mil|net|org",
|
|
"ir":"ac|co|dnssec|gov|i|id|net|org|sch",
|
|
"it":"edu|gov",
|
|
"je":"co|net|org",
|
|
"jo":"com|edu|gov|mil|name|net|org|sch",
|
|
"jp":"ac|ad|co|ed|go|gr|lg|ne|or",
|
|
"ke":"ac|co|go|info|me|mobi|ne|or|sc",
|
|
"kh":"com|edu|gov|mil|net|org|per",
|
|
"ki":"biz|com|de|edu|gov|info|mob|net|org|tel",
|
|
"km":"asso|com|coop|edu|gouv|k|medecin|mil|nom|notaires|pharmaciens|presse|tm|veterinaire",
|
|
"kn":"edu|gov|net|org",
|
|
"kr":"ac|busan|chungbuk|chungnam|co|daegu|daejeon|es|gangwon|go|gwangju|gyeongbuk|gyeonggi|gyeongnam|hs|incheon|jeju|jeonbuk|jeonnam|k|kg|mil|ms|ne|or|pe|re|sc|seoul|ulsan",
|
|
"kw":"com|edu|gov|net|org",
|
|
"ky":"com|edu|gov|net|org",
|
|
"kz":"com|edu|gov|mil|net|org",
|
|
"lb":"com|edu|gov|net|org",
|
|
"lk":"assn|com|edu|gov|grp|hotel|int|ltd|net|ngo|org|sch|soc|web",
|
|
"lr":"com|edu|gov|net|org",
|
|
"lv":"asn|com|conf|edu|gov|id|mil|net|org",
|
|
"ly":"com|edu|gov|id|med|net|org|plc|sch",
|
|
"ma":"ac|co|gov|m|net|org|press",
|
|
"mc":"asso|tm",
|
|
"me":"ac|co|edu|gov|its|net|org|priv",
|
|
"mg":"com|edu|gov|mil|nom|org|prd|tm",
|
|
"mk":"com|edu|gov|inf|name|net|org|pro",
|
|
"ml":"com|edu|gov|net|org|presse",
|
|
"mn":"edu|gov|org",
|
|
"mo":"com|edu|gov|net|org",
|
|
"mt":"com|edu|gov|net|org",
|
|
"mv":"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro",
|
|
"mw":"ac|co|com|coop|edu|gov|int|museum|net|org",
|
|
"mx":"com|edu|gob|net|org",
|
|
"my":"com|edu|gov|mil|name|net|org|sch",
|
|
"nf":"arts|com|firm|info|net|other|per|rec|store|web",
|
|
"ng":"biz|com|edu|gov|mil|mobi|name|net|org|sch",
|
|
"ni":"ac|co|com|edu|gob|mil|net|nom|org",
|
|
"np":"com|edu|gov|mil|net|org",
|
|
"nr":"biz|com|edu|gov|info|net|org",
|
|
"om":"ac|biz|co|com|edu|gov|med|mil|museum|net|org|pro|sch",
|
|
"pe":"com|edu|gob|mil|net|nom|org|sld",
|
|
"ph":"com|edu|gov|i|mil|net|ngo|org",
|
|
"pk":"biz|com|edu|fam|gob|gok|gon|gop|gos|gov|net|org|web",
|
|
"pl":"art|bialystok|biz|com|edu|gda|gdansk|gorzow|gov|info|katowice|krakow|lodz|lublin|mil|net|ngo|olsztyn|org|poznan|pwr|radom|slupsk|szczecin|torun|warszawa|waw|wroc|wroclaw|zgora",
|
|
"pr":"ac|biz|com|edu|est|gov|info|isla|name|net|org|pro|prof",
|
|
"ps":"com|edu|gov|net|org|plo|sec",
|
|
"pw":"belau|co|ed|go|ne|or",
|
|
"ro":"arts|com|firm|info|nom|nt|org|rec|store|tm|www",
|
|
"rs":"ac|co|edu|gov|in|org",
|
|
"sb":"com|edu|gov|net|org",
|
|
"sc":"com|edu|gov|net|org",
|
|
"sh":"co|com|edu|gov|net|nom|org",
|
|
"sl":"com|edu|gov|net|org",
|
|
"st":"co|com|consulado|edu|embaixada|gov|mil|net|org|principe|saotome|store",
|
|
"sv":"com|edu|gob|org|red",
|
|
"sz":"ac|co|org",
|
|
"tr":"av|bbs|bel|biz|com|dr|edu|gen|gov|info|k12|name|net|org|pol|tel|tsk|tv|web",
|
|
"tt":"aero|biz|cat|co|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel",
|
|
"tw":"club|com|ebiz|edu|game|gov|idv|mil|net|org",
|
|
"mu":"ac|co|com|gov|net|or|org",
|
|
"mz":"ac|co|edu|gov|org",
|
|
"na":"co|com",
|
|
"nz":"ac|co|cri|geek|gen|govt|health|iwi|maori|mil|net|org|parliament|school",
|
|
"pa":"abo|ac|com|edu|gob|ing|med|net|nom|org|sld",
|
|
"pt":"com|edu|gov|int|net|nome|org|publ",
|
|
"py":"com|edu|gov|mil|net|org",
|
|
"qa":"com|edu|gov|mil|net|org",
|
|
"re":"asso|com|nom",
|
|
"ru":"ac|adygeya|altai|amur|arkhangelsk|astrakhan|bashkiria|belgorod|bir|bryansk|buryatia|cbg|chel|chelyabinsk|chita|chukotka|chuvashia|com|dagestan|e-burg|edu|gov|grozny|int|irkutsk|ivanovo|izhevsk|jar|joshkar-ola|kalmykia|kaluga|kamchatka|karelia|kazan|kchr|kemerovo|khabarovsk|khakassia|khv|kirov|koenig|komi|kostroma|kranoyarsk|kuban|kurgan|kursk|lipetsk|magadan|mari|mari-el|marine|mil|mordovia|mosreg|msk|murmansk|nalchik|net|nnov|nov|novosibirsk|nsk|omsk|orenburg|org|oryol|penza|perm|pp|pskov|ptz|rnd|ryazan|sakhalin|samara|saratov|simbirsk|smolensk|spb|stavropol|stv|surgut|tambov|tatarstan|tom|tomsk|tsaritsyn|tsk|tula|tuva|tver|tyumen|udm|udmurtia|ulan-ude|vladikavkaz|vladimir|vladivostok|volgograd|vologda|voronezh|vrn|vyatka|yakutia|yamal|yekaterinburg|yuzhno-sakhalinsk",
|
|
"rw":"ac|co|com|edu|gouv|gov|int|mil|net",
|
|
"sa":"com|edu|gov|med|net|org|pub|sch",
|
|
"sd":"com|edu|gov|info|med|net|org|tv",
|
|
"se":"a|ac|b|bd|c|d|e|f|g|h|i|k|l|m|n|o|org|p|parti|pp|press|r|s|t|tm|u|w|x|y|z",
|
|
"sg":"com|edu|gov|idn|net|org|per",
|
|
"sn":"art|com|edu|gouv|org|perso|univ",
|
|
"sy":"com|edu|gov|mil|net|news|org",
|
|
"th":"ac|co|go|in|mi|net|or",
|
|
"tj":"ac|biz|co|com|edu|go|gov|info|int|mil|name|net|nic|org|test|web",
|
|
"tn":"agrinet|com|defense|edunet|ens|fin|gov|ind|info|intl|mincom|nat|net|org|perso|rnrt|rns|rnu|tourism",
|
|
"tz":"ac|co|go|ne|or",
|
|
"ua":"biz|cherkassy|chernigov|chernovtsy|ck|cn|co|com|crimea|cv|dn|dnepropetrovsk|donetsk|dp|edu|gov|if|in|ivano-frankivsk|kh|kharkov|kherson|khmelnitskiy|kiev|kirovograd|km|kr|ks|kv|lg|lugansk|lutsk|lviv|me|mk|net|nikolaev|od|odessa|org|pl|poltava|pp|rovno|rv|sebastopol|sumy|te|ternopil|uzhgorod|vinnica|vn|zaporizhzhe|zhitomir|zp|zt",
|
|
"ug":"ac|co|go|ne|or|org|sc",
|
|
"uk":"ac|bl|british-library|co|cym|gov|govt|icnet|jet|lea|ltd|me|mil|mod|national-library-scotland|nel|net|nhs|nic|nls|org|orgn|parliament|plc|police|sch|scot|soc",
|
|
"us":"dni|fed|isa|kids|nsn",
|
|
"uy":"com|edu|gub|mil|net|org",
|
|
"ve":"co|com|edu|gob|info|mil|net|org|web",
|
|
"vi":"co|com|k12|net|org",
|
|
"vn":"ac|biz|com|edu|gov|health|info|int|name|net|org|pro",
|
|
"ye":"co|com|gov|ltd|me|net|org|plc",
|
|
"yu":"ac|co|edu|gov|org",
|
|
"za":"ac|agric|alt|bourse|city|co|cybernet|db|edu|gov|grondar|iaccess|imt|inca|landesign|law|mil|net|ngo|nis|nom|olivetti|org|pix|school|tm|web",
|
|
"zm":"ac|co|com|edu|gov|net|org|sch"
|
|
},
|
|
// SLD expression for each TLD
|
|
//expressions: {},
|
|
// SLD expression for all TLDs
|
|
has_expression: null,
|
|
is_expression: null,
|
|
// validate domain is a known SLD
|
|
has: function(domain) {
|
|
return !!domain.match(SLD.has_expression);
|
|
},
|
|
is: function(domain) {
|
|
return !!domain.match(SLD.is_expression);
|
|
},
|
|
get: function(domain) {
|
|
var t = domain.match(SLD.has_expression);
|
|
return t && t[1] || null;
|
|
},
|
|
noConflict: function(){
|
|
if (root.SecondLevelDomains === this) {
|
|
root.SecondLevelDomains = _SecondLevelDomains;
|
|
}
|
|
return this;
|
|
},
|
|
init: function() {
|
|
var t = '';
|
|
for (var tld in SLD.list) {
|
|
if (!hasOwn.call(SLD.list, tld)) {
|
|
continue;
|
|
}
|
|
|
|
var expression = '(' + SLD.list[tld] + ')\.' + tld;
|
|
//SLD.expressions[tld] = new RegExp('\.' + expression + '$', 'i');
|
|
t += '|(' + expression + ')';
|
|
}
|
|
|
|
SLD.has_expression = new RegExp('\\.(' + t.substr(1) + ')$', 'i');
|
|
SLD.is_expression = new RegExp('^(' + t.substr(1) + ')$', 'i');
|
|
}
|
|
};
|
|
|
|
SLD.init();
|
|
|
|
return SLD;
|
|
}));
|