MOBILE-3565 services: Fix url utils linting
parent
426540ce49
commit
d11b7ab657
|
@ -55,7 +55,7 @@ export class CoreUrlUtilsProvider {
|
||||||
* @param boolToNumber Whether to convert bools to 1 or 0.
|
* @param boolToNumber Whether to convert bools to 1 or 0.
|
||||||
* @return URL with params.
|
* @return URL with params.
|
||||||
*/
|
*/
|
||||||
addParamsToUrl(url: string, params?: {[key: string]: any}, anchor?: string, boolToNumber?: boolean): string {
|
addParamsToUrl(url: string, params?: CoreUrlParams, anchor?: string, boolToNumber?: boolean): string {
|
||||||
let separator = url.indexOf('?') != -1 ? '&' : '?';
|
let separator = url.indexOf('?') != -1 ? '&' : '?';
|
||||||
|
|
||||||
for (const key in params) {
|
for (const key in params) {
|
||||||
|
@ -63,7 +63,7 @@ export class CoreUrlUtilsProvider {
|
||||||
|
|
||||||
if (boolToNumber && typeof value == 'boolean') {
|
if (boolToNumber && typeof value == 'boolean') {
|
||||||
// Convert booleans to 1 or 0.
|
// Convert booleans to 1 or 0.
|
||||||
value = value ? 1 : 0;
|
value = value ? '1' : '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore objects.
|
// Ignore objects.
|
||||||
|
@ -102,7 +102,7 @@ export class CoreUrlUtilsProvider {
|
||||||
canUseTokenPluginFile(url: string, siteUrl: string, accessKey?: string): boolean {
|
canUseTokenPluginFile(url: string, siteUrl: string, accessKey?: string): boolean {
|
||||||
// Do not use tokenpluginfile if site doesn't use slash params, the URL doesn't work.
|
// Do not use tokenpluginfile if site doesn't use slash params, the URL doesn't work.
|
||||||
// Also, only use it for "core" pluginfile endpoints. Some plugins can implement their own endpoint (like customcert).
|
// Also, only use it for "core" pluginfile endpoints. Some plugins can implement their own endpoint (like customcert).
|
||||||
return accessKey && !url.match(/[\&?]file=/) && (
|
return accessKey && !url.match(/[&?]file=/) && (
|
||||||
url.indexOf(CoreTextUtils.instance.concatenatePaths(siteUrl, 'pluginfile.php')) === 0 ||
|
url.indexOf(CoreTextUtils.instance.concatenatePaths(siteUrl, 'pluginfile.php')) === 0 ||
|
||||||
url.indexOf(CoreTextUtils.instance.concatenatePaths(siteUrl, 'webservice/pluginfile.php')) === 0);
|
url.indexOf(CoreTextUtils.instance.concatenatePaths(siteUrl, 'webservice/pluginfile.php')) === 0);
|
||||||
}
|
}
|
||||||
|
@ -113,13 +113,13 @@ export class CoreUrlUtilsProvider {
|
||||||
* @param url URL to treat.
|
* @param url URL to treat.
|
||||||
* @return Object with the params.
|
* @return Object with the params.
|
||||||
*/
|
*/
|
||||||
extractUrlParams(url: string): any {
|
extractUrlParams(url: string): CoreUrlParams {
|
||||||
const regex = /[?&]+([^=&]+)=?([^&]*)?/gi;
|
const regex = /[?&]+([^=&]+)=?([^&]*)?/gi;
|
||||||
const subParamsPlaceholder = '@@@SUBPARAMS@@@';
|
const subParamsPlaceholder = '@@@SUBPARAMS@@@';
|
||||||
const params: any = {};
|
const params: CoreUrlParams = {};
|
||||||
const urlAndHash = url.split('#');
|
const urlAndHash = url.split('#');
|
||||||
const questionMarkSplit = urlAndHash[0].split('?');
|
const questionMarkSplit = urlAndHash[0].split('?');
|
||||||
let subParams;
|
let subParams: string;
|
||||||
|
|
||||||
if (questionMarkSplit.length > 2) {
|
if (questionMarkSplit.length > 2) {
|
||||||
// There is more than one question mark in the URL. This can happen if any of the params is a URL with params.
|
// There is more than one question mark in the URL. This can happen if any of the params is a URL with params.
|
||||||
|
@ -190,10 +190,10 @@ export class CoreUrlUtilsProvider {
|
||||||
url = url.replace('/pluginfile', '/webservice/pluginfile');
|
url = url.replace('/pluginfile', '/webservice/pluginfile');
|
||||||
}
|
}
|
||||||
|
|
||||||
url = this.addParamsToUrl(url, {token});
|
url = this.addParamsToUrl(url, { token });
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.addParamsToUrl(url, {offline: 1}); // Always send offline=1 (it's for external repositories).
|
return this.addParamsToUrl(url, { offline: '1' }); // Always send offline=1 (it's for external repositories).
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -206,7 +206,7 @@ export class CoreUrlUtilsProvider {
|
||||||
url = url.trim();
|
url = url.trim();
|
||||||
|
|
||||||
// Check if the URL starts by http or https.
|
// Check if the URL starts by http or https.
|
||||||
if (! /^http(s)?\:\/\/.*/i.test(url)) {
|
if (! /^http(s)?:\/\/.*/i.test(url)) {
|
||||||
// Test first allways https.
|
// Test first allways https.
|
||||||
url = 'https://' + url;
|
url = 'https://' + url;
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ export class CoreUrlUtilsProvider {
|
||||||
* @param page Docs page to go to.
|
* @param page Docs page to go to.
|
||||||
* @return Promise resolved with the Moodle docs URL.
|
* @return Promise resolved with the Moodle docs URL.
|
||||||
*/
|
*/
|
||||||
getDocsUrl(release?: string, page: string = 'Mobile_app'): Promise<string> {
|
async getDocsUrl(release?: string, page: string = 'Mobile_app'): Promise<string> {
|
||||||
let docsUrl = 'https://docs.moodle.org/en/' + page;
|
let docsUrl = 'https://docs.moodle.org/en/' + page;
|
||||||
|
|
||||||
if (typeof release != 'undefined') {
|
if (typeof release != 'undefined') {
|
||||||
|
@ -240,11 +240,13 @@ export class CoreUrlUtilsProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CoreLang.instance.getCurrentLanguage().then((lang) => {
|
try {
|
||||||
|
const lang = await CoreLang.instance.getCurrentLanguage();
|
||||||
|
|
||||||
return docsUrl.replace('/en/', '/' + lang + '/');
|
return docsUrl.replace('/en/', '/' + lang + '/');
|
||||||
}).catch(() => {
|
} catch (error) {
|
||||||
return docsUrl;
|
return docsUrl;
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,13 +260,13 @@ export class CoreUrlUtilsProvider {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let videoId;
|
let videoId: string;
|
||||||
const params: any = {};
|
const params: CoreUrlParams = {};
|
||||||
|
|
||||||
url = CoreTextUtils.instance.decodeHTML(url);
|
url = CoreTextUtils.instance.decodeHTML(url);
|
||||||
|
|
||||||
// Get the video ID.
|
// Get the video ID.
|
||||||
let match = url.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);
|
let match = url.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/);
|
||||||
|
|
||||||
if (match && match[2].length === 11) {
|
if (match && match[2].length === 11) {
|
||||||
videoId = match[2];
|
videoId = match[2];
|
||||||
|
@ -276,7 +278,7 @@ export class CoreUrlUtilsProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now get the playlist (if any).
|
// Now get the playlist (if any).
|
||||||
match = url.match(/[?&]list=([^#\&\?]+)/);
|
match = url.match(/[?&]list=([^#&?]+)/);
|
||||||
|
|
||||||
if (match && match[1]) {
|
if (match && match[1]) {
|
||||||
params.list = match[1];
|
params.list = match[1];
|
||||||
|
@ -286,13 +288,15 @@ export class CoreUrlUtilsProvider {
|
||||||
match = url.match(/[?&]start=(\d+)/);
|
match = url.match(/[?&]start=(\d+)/);
|
||||||
|
|
||||||
if (match && match[1]) {
|
if (match && match[1]) {
|
||||||
params.start = parseInt(match[1], 10);
|
params.start = parseInt(match[1], 10).toString();
|
||||||
} else {
|
} else {
|
||||||
// No start param, but it could have a time param.
|
// No start param, but it could have a time param.
|
||||||
match = url.match(/[?&]t=(\d+h)?(\d+m)?(\d+s)?/);
|
match = url.match(/[?&]t=(\d+h)?(\d+m)?(\d+s)?/);
|
||||||
if (match) {
|
if (match) {
|
||||||
params.start = (match[1] ? parseInt(match[1], 10) * 3600 : 0) + (match[2] ? parseInt(match[2], 10) * 60 : 0) +
|
const start = (match[1] ? parseInt(match[1], 10) * 3600 : 0) +
|
||||||
(match[3] ? parseInt(match[3], 10) : 0);
|
(match[2] ? parseInt(match[2], 10) * 60 : 0) +
|
||||||
|
(match[3] ? parseInt(match[3], 10) : 0);
|
||||||
|
params.start = start.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,7 +332,7 @@ export class CoreUrlUtilsProvider {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const matches = url.match(/^([^\/:\.\?]*):\/\//);
|
const matches = url.match(/^([^/:.?]*):\/\//);
|
||||||
if (matches && matches[1]) {
|
if (matches && matches[1]) {
|
||||||
return matches[1];
|
return matches[1];
|
||||||
}
|
}
|
||||||
|
@ -361,11 +365,11 @@ export class CoreUrlUtilsProvider {
|
||||||
getUsernameFromUrl(url: string): string {
|
getUsernameFromUrl(url: string): string {
|
||||||
if (url.indexOf('@') > -1) {
|
if (url.indexOf('@') > -1) {
|
||||||
// Get URL without protocol.
|
// Get URL without protocol.
|
||||||
const withoutProtocol = url.replace(/^[^?@\/]*:\/\//, '');
|
const withoutProtocol = url.replace(/^[^?@/]*:\/\//, '');
|
||||||
const matches = withoutProtocol.match(/[^@]*/);
|
const matches = withoutProtocol.match(/[^@]*/);
|
||||||
|
|
||||||
// Make sure that @ is at the start of the URL, not in a param at the end.
|
// Make sure that @ is at the start of the URL, not in a param at the end.
|
||||||
if (matches && matches.length && !matches[0].match(/[\/|?]/)) {
|
if (matches && matches.length && !matches[0].match(/[/|?]/)) {
|
||||||
return matches[0];
|
return matches[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,7 +412,7 @@ export class CoreUrlUtilsProvider {
|
||||||
* @return Whether the url uses http or https protocol.
|
* @return Whether the url uses http or https protocol.
|
||||||
*/
|
*/
|
||||||
isHttpURL(url: string): boolean {
|
isHttpURL(url: string): boolean {
|
||||||
return /^https?\:\/\/.+/i.test(url);
|
return /^https?:\/\/.+/i.test(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -427,10 +431,11 @@ export class CoreUrlUtilsProvider {
|
||||||
* Check whether a URL scheme belongs to a local file.
|
* Check whether a URL scheme belongs to a local file.
|
||||||
*
|
*
|
||||||
* @param scheme Scheme to check.
|
* @param scheme Scheme to check.
|
||||||
* @param domain The domain. Needed because in Android the WebView scheme is http.
|
* @param notUsed Unused parameter.
|
||||||
* @return Whether the scheme belongs to a local file.
|
* @return Whether the scheme belongs to a local file.
|
||||||
*/
|
*/
|
||||||
isLocalFileUrlScheme(scheme: string, domain: string): boolean {
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
isLocalFileUrlScheme(scheme: string, notUsed?: string): boolean {
|
||||||
if (scheme) {
|
if (scheme) {
|
||||||
scheme = scheme.toLowerCase();
|
scheme = scheme.toLowerCase();
|
||||||
}
|
}
|
||||||
|
@ -483,7 +488,7 @@ export class CoreUrlUtilsProvider {
|
||||||
* @return URL without params.
|
* @return URL without params.
|
||||||
*/
|
*/
|
||||||
removeUrlParams(url: string): string {
|
removeUrlParams(url: string): string {
|
||||||
const matches = url.match(/^[^\?]+/);
|
const matches = url.match(/^[^?]+/);
|
||||||
|
|
||||||
return matches && matches[0];
|
return matches && matches[0];
|
||||||
}
|
}
|
||||||
|
@ -515,6 +520,9 @@ export class CoreUrlUtilsProvider {
|
||||||
|
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CoreUrlUtils extends makeSingleton(CoreUrlUtilsProvider) {}
|
export class CoreUrlUtils extends makeSingleton(CoreUrlUtilsProvider) {}
|
||||||
|
|
||||||
|
export type CoreUrlParams = {[key: string]: string};
|
||||||
|
|
Loading…
Reference in New Issue