forked from extern/egroupware
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
|
import {Directive, directive, html, repeat} from "@lion/core";
|
||
|
import {et2_activateLinks} from "./et2_core_common";
|
||
|
|
||
|
/**
|
||
|
* Activates links in text
|
||
|
*
|
||
|
* @example
|
||
|
* this.value = "This text has links to https://www.egroupware.org";
|
||
|
* ...
|
||
|
* render()
|
||
|
* {
|
||
|
* return html`activateLinks(this.value)`;
|
||
|
* }
|
||
|
* renders as:
|
||
|
* <a href="https://www.egroupware.org" target="_blank">egroupware.org</a>
|
||
|
*/
|
||
|
class ActivateLinksDirective extends Directive
|
||
|
{
|
||
|
render(text_with_urls, _target)
|
||
|
{
|
||
|
let list = et2_activateLinks(text_with_urls);
|
||
|
|
||
|
return html`${repeat(list, (item, index) =>
|
||
|
{
|
||
|
// No urls in this section
|
||
|
if(typeof item == "string" || typeof item == "number")
|
||
|
{
|
||
|
// Just text. Easy (framework handles \n)
|
||
|
return item;
|
||
|
}
|
||
|
// Url found, deal with it
|
||
|
else if(item && item.text)
|
||
|
{
|
||
|
if(!item.href)
|
||
|
{
|
||
|
console.warn("et2_activateLinks gave bad data", item, _target);
|
||
|
item.href = "";
|
||
|
}
|
||
|
let click = null;
|
||
|
let target = null;
|
||
|
|
||
|
// open mailto links depending on preferences in mail app
|
||
|
if(item.href.substr(0, 7) == "mailto:" &&
|
||
|
egw.user('apps').mail &&
|
||
|
egw.preference('force_mailto', 'addressbook') != '1')
|
||
|
{
|
||
|
click = function(event)
|
||
|
{
|
||
|
egw.open_link(this);
|
||
|
return false;
|
||
|
}.bind(item.href);
|
||
|
item.href = "#";
|
||
|
}
|
||
|
|
||
|
if(typeof _target != "undefined" && _target && _target != "_self" && item.href.substr(0, 7) != "mailto:")
|
||
|
{
|
||
|
target = _target;
|
||
|
}
|
||
|
return html`<a href="${item.href}" @click=${click} target="${target}">${item.text}</a>`;
|
||
|
}
|
||
|
})}`;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export const activateLinks = directive(ActivateLinksDirective);
|