silex-website-builder-goodevent
Version:
Free and easy website builder for everyone.
141 lines (128 loc) • 3.94 kB
text/typescript
/**
* Silex, live web creation
* http://projects.silexlabs.org/?/silex/
*
* Copyright (c) 2012 Silex Labs
* http://www.silexlabs.org/
*
* Silex is available under the GPL license
* http://www.silexlabs.org/silex/silex-licensing/
*/
/**
* @fileoverview Helper class for common tasks
*
*/
import {FileInfo} from '../types';
export class Url {
/**
* set a field in a FileInfo object, and update the `url` attribute accordingly
* @param attributes a partial FileInfo object
*/
static updateFileInfo(
fileInfo: FileInfo, attributes: any): FileInfo {
if (!fileInfo) {
return null;
}
const fileInfoNew = Object.assign({}, fileInfo, attributes);
return (Object.assign({}, fileInfoNew, {
url: Url.getBaseUrl() + fileInfoNew.service + '/get/' + fileInfoNew.path,
}) as FileInfo);
}
/**
* Get base URL of Silex server
*/
static getBaseUrl() {
return window.location.href;
}
/**
* Get root of a URL or Silex app
* @param opt_url URL or null
* @return the base url
* example: "" returns https://editor.silex.me
* example: https://duckduckgo.com returns https://duckduckgo.com
* example: https://duckduckgo.com/ returns https://duckduckgo.com
* example: https://duckduckgo.com/?q=javascript returns https://duckduckgo.com
* example: https://duckduckgo.com/abc/ returns https://duckduckgo.com
*/
static getRootUrl(opt_url?: string): string {
const url = opt_url || window.location.href;
// const rootUrl = /http.?:\/\/(.*)\//.match()[0];
const start = url.indexOf('//');
const end = url.indexOf('/', start + 2);
return url.substr(0, end);
}
/**
* Get host of Silex app
* @param opt_url URL or null
* @return the base url
* example: https://duckduckgo.com returns duckduckgo.com
* example: https://duckduckgo.com/ returns duckduckgo.com
* example: https://duckduckgo.com/?q=javascript returns duckduckgo.com
* example: https://duckduckgo.com/abc/ returns duckduckgo.com
*/
static getHost(opt_url?: string): string {
const root = Url.getRootUrl(opt_url);
const host = root.substr(root.indexOf('//') + 2);
return host;
}
/**
* Check if an URL is relative or absolute
* @return true if the url is absolute
*/
static isAbsoluteUrl(url: string): boolean {
return url.indexOf('http') === 0 || url.indexOf('//') === 0;
}
/**
* remove the url() css keyword
* also remove the '' or "" if any
* example: url(http://silex.me) would return http://silex.me
* @param url + keyword as for background-image
* @return URL without keyword
*/
static removeUrlKeyword(url: string): string {
// removes the url() keyword
if (url.startsWith('url(')) {
url = url.substr(4);
}
if (url.endsWith(')')) {
url = url.substr(0, url.length - 1);
}
// remove the ''
if (url.startsWith('\'') || url.startsWith('"')) {
url = url.substr(1);
}
if (url.endsWith('\'') || url.endsWith('"')) {
url = url.substr(0, url.length - 1);
}
// workaround firefox going crazy
if (url.startsWith('"')) {
url = url.substr(6);
}
if (url.endsWith('"')) {
url = url.substr(0, url.length - 6);
}
if (url.startsWith('%5C')) {
url = url.substr(3);
}
if (url.startsWith('%22')) {
url = url.substr(3);
}
if (url.endsWith('%22')) {
url = url.substr(0, url.length - 3);
}
if (url.endsWith('%5C')) {
url = url.substr(0, url.length - 3);
}
return url;
}
/**
* add the url() css keyword
* simple quotes are added so that the URL may contain parenthesis
* and it does not disturb the inline style double quotes
* example: http://silex.me returns url("http://silex.me")
* @return url + keyword as for background-image
*/
static addUrlKeyword(url: string): string {
return `url('${url}')`;
}
}