Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
96 lines
2.4 KiB
JavaScript
Executable file
96 lines
2.4 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
var rscheme = /^(?:[a-z\u00a1-\uffff0-9-+]+)(?::(?:\/\/)?)/i;
|
|
|
|
var UrlHelper = {
|
|
|
|
// Placeholder anchor tag to format URLs.
|
|
a: null,
|
|
|
|
getUrlFromInput: function urlHelper_getUrlFromInput(input) {
|
|
this.a = this.a || document.createElement('a');
|
|
this.a.href = input;
|
|
return this.a.href;
|
|
},
|
|
|
|
_getScheme: function(input) {
|
|
// This function returns one of followings
|
|
// - scheme + ':' (ex. http:)
|
|
// - scheme + '://' (ex. http://)
|
|
// - null
|
|
return (rscheme.exec(input) || [])[0];
|
|
},
|
|
|
|
hasScheme: function(input) {
|
|
return !!this._getScheme(input);
|
|
},
|
|
|
|
isURL: function urlHelper_isURL(input) {
|
|
return !UrlHelper.isNotURL(input);
|
|
},
|
|
|
|
isNotURL: function urlHelper_isNotURL(input) {
|
|
// in bug 904731, we use <input type='url' value=''> to
|
|
// validate url. However, there're still some cases
|
|
// need extra validation. We'll remove it til bug fixed
|
|
// for native form validation.
|
|
//
|
|
// for cases, ?abc and "a? b" which should searching query
|
|
var case1Reg = /^(\?)|(\?.+\s)/;
|
|
// for cases, pure string
|
|
var case2Reg = /[\?\.\s\:]/;
|
|
// for cases, data:uri and view-source:uri
|
|
var case3Reg = /^(data|view-source)\:/;
|
|
|
|
var str = input.trim();
|
|
if (case1Reg.test(str) || !case2Reg.test(str) ||
|
|
this._getScheme(str) === str) {
|
|
return true;
|
|
}
|
|
if (case3Reg.test(str)) {
|
|
return false;
|
|
}
|
|
// require basic scheme before form validation
|
|
if (!this.hasScheme(str)) {
|
|
str = 'http://' + str;
|
|
}
|
|
if (!this.urlValidate) {
|
|
this.urlValidate = document.createElement('input');
|
|
this.urlValidate.setAttribute('type', 'url');
|
|
}
|
|
this.urlValidate.setAttribute('value', str);
|
|
return !this.urlValidate.validity.valid;
|
|
},
|
|
|
|
/**
|
|
* Resolve a URL against a base URL.
|
|
*
|
|
* @param url String URL to resolve.
|
|
* @param baseURL String Base URL to resolve against.
|
|
* @returns String resolved URL or null.
|
|
*/
|
|
resolveUrl: function urlHelper_resolveURL(url, baseUrl) {
|
|
if (!url) {
|
|
return null;
|
|
}
|
|
try {
|
|
return new URL(url, baseUrl).href;
|
|
} catch(e) {
|
|
return null;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Get the hostname from a URL.
|
|
*
|
|
* @param String URL to process.
|
|
* @returns String hostname of URL.
|
|
*/
|
|
getHostname: function urlHelper_getHostname(url) {
|
|
try {
|
|
return new URL(url).hostname;
|
|
} catch(e) {
|
|
return null;
|
|
}
|
|
}
|
|
};
|