mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-15 11:11:49 +01:00
108 lines
2.3 KiB
TypeScript
108 lines
2.3 KiB
TypeScript
/**
|
|
* EGroupware eTemplate2 - Url input widget
|
|
*
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package api
|
|
* @link https://www.egroupware.org
|
|
* @author Ralf Becker
|
|
*/
|
|
|
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
import {Et2InvokerMixin} from "./Et2InvokerMixin";
|
|
import {Et2Textbox} from "../Et2Textbox/Et2Textbox";
|
|
import {colorsDefStyles} from "../Styles/colorsDefStyles";
|
|
import {css} from "lit";
|
|
import {egw} from "../../jsapi/egw_global";
|
|
|
|
/**
|
|
* @customElement et2-url
|
|
*
|
|
* @ToDo: implement allowPath attributes
|
|
*/
|
|
export class Et2Url extends Et2InvokerMixin(Et2Textbox)
|
|
{
|
|
/** @type {any} */
|
|
static get properties()
|
|
{
|
|
return {
|
|
...super.properties,
|
|
/**
|
|
* Allow a path instead of a URL, path must start with /, default false = not allowed
|
|
*/
|
|
allowPath: {
|
|
type: Boolean,
|
|
},
|
|
/**
|
|
* Require (or forbid) that the path ends with a /, default not checked
|
|
*/
|
|
trailingSlash: {
|
|
type: Boolean,
|
|
},
|
|
};
|
|
}
|
|
|
|
static get styles()
|
|
{
|
|
return [
|
|
...super.styles,
|
|
colorsDefStyles,
|
|
css`
|
|
::slotted([slot="suffix"]) {
|
|
font-size: 133% !important;
|
|
position: relative;
|
|
height: auto;
|
|
width: auto;
|
|
}
|
|
`,
|
|
];
|
|
}
|
|
|
|
constructor(...args : any[])
|
|
{
|
|
super(...args);
|
|
|
|
this._invokerLabel = '⎆';
|
|
this._invokerTitle = 'Open';
|
|
this._invokerAction = () => {
|
|
Et2Url.action(this.value);
|
|
}
|
|
this.allowPath = false;
|
|
this.trailingSlash = undefined;
|
|
}
|
|
|
|
/**
|
|
* Change handler calling custom handler set via onchange attribute
|
|
*
|
|
* Reimplemented to add/remove trailing slash depending on trailingSlash attribute
|
|
*
|
|
* @param _ev
|
|
* @returns
|
|
*/
|
|
_oldChange(_ev: Event): boolean
|
|
{
|
|
const value = this.value;
|
|
if (typeof this.trailingSlash !== 'undefined' && value && this.trailingSlash !== (value.substr(-1)==='/'))
|
|
{
|
|
if (!this.trailingSlash)
|
|
{
|
|
this.value = value.replace(/\/+$/, '');
|
|
}
|
|
else
|
|
{
|
|
this.value += '/';
|
|
}
|
|
}
|
|
return super._oldChange(_ev);
|
|
}
|
|
|
|
static action(value)
|
|
{
|
|
if (!value) return;
|
|
// implicit add http:// if no protocol given
|
|
if(value.indexOf("://") === -1) value = "http://"+value;
|
|
// as this is static, we can NOT use this.egw(), but global egw
|
|
egw.open_link(value, '_blank');
|
|
}
|
|
}
|
|
// @ts-ignore TypeScript is not recognizing that this is a LitElement
|
|
customElements.define("et2-url", Et2Url); |