51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
// !!!
|
|
// This module is manually patched by us to not only report valid domains, but verify that subdomains are not accepted
|
|
// !!!
|
|
'use strict';
|
|
|
|
angular.module('ngTld', [])
|
|
.factory('ngTld', ngTld)
|
|
.directive('checkTld', checkTld);
|
|
|
|
function ngTld() {
|
|
function isValid(path) {
|
|
// https://github.com/oncletom/tld.js/issues/58
|
|
return (path.slice(-1) !== '.') && tld.isValid(path);
|
|
}
|
|
|
|
function tldExists(path) {
|
|
return (path.slice(-1) !== '.') && path === tld.getDomain(path);
|
|
}
|
|
|
|
function isSubdomain(path) {
|
|
return (path.slice(-1) !== '.') && !!tld.getDomain(path) && path !== tld.getDomain(path);
|
|
}
|
|
|
|
function isNakedDomain(path) {
|
|
return (path.slice(-1) !== '.') && !!tld.getDomain(path) && path === tld.getDomain(path);
|
|
}
|
|
|
|
return {
|
|
isValid: isValid,
|
|
tldExists: tldExists,
|
|
isSubdomain: isSubdomain,
|
|
isNakedDomain: isNakedDomain
|
|
};
|
|
}
|
|
|
|
function checkTld(ngTld) {
|
|
return {
|
|
restrict: 'A',
|
|
require: 'ngModel',
|
|
link: function(scope, element, attr, ngModel) {
|
|
ngModel.$validators.invalidTld = function(modelValue, viewValue) {
|
|
return ngTld.tldExists(ngModel.$viewValue.toLowerCase());
|
|
};
|
|
|
|
ngModel.$validators.invalidSubdomain = function(modelValue, viewValue) {
|
|
return !ngTld.isSubdomain(ngModel.$viewValue.toLowerCase());
|
|
};
|
|
}
|
|
};
|
|
}
|