forked from extern/egroupware
WIP implementing Iframe widget
This commit is contained in:
parent
66f5c4bfc2
commit
be57764fa6
149
api/js/etemplate/Et2Iframe/Et2Iframe.ts
Normal file
149
api/js/etemplate/Et2Iframe/Et2Iframe.ts
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/**
|
||||||
|
* EGroupware eTemplate2 - Iframe widget (WebComponent)
|
||||||
|
*
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @package etemplate
|
||||||
|
* @subpackage api
|
||||||
|
* @link https://www.egroupware.org
|
||||||
|
* @author Hadi Nategh
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import {css, html, LitElement, SlotMixin} from "@lion/core";
|
||||||
|
import {Et2Widget} from "../Et2Widget/Et2Widget";
|
||||||
|
|
||||||
|
export class Et2Iframe extends Et2Widget(SlotMixin(LitElement))
|
||||||
|
{
|
||||||
|
|
||||||
|
static get styles()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
...super.styles,
|
||||||
|
css`
|
||||||
|
/* Custom CSS */
|
||||||
|
`,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
static get properties()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
...super.properties,
|
||||||
|
label: {type: String},
|
||||||
|
seamless: {type: Boolean},
|
||||||
|
name: {type: String},
|
||||||
|
fullscreen: {type: Boolean},
|
||||||
|
needed: {type: Boolean},
|
||||||
|
src: {type:String},
|
||||||
|
allow: {type: String}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(...args : any[])
|
||||||
|
{
|
||||||
|
super(...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
connectedCallback()
|
||||||
|
{
|
||||||
|
super.connectedCallback();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return html` <iframe ${this.id ? html`id="${this.id}"` : ''}></iframe>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
__getIframeNode()
|
||||||
|
{
|
||||||
|
return this.shadowRoot.querySelector('iframe');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the URL for the iframe
|
||||||
|
*
|
||||||
|
* Sets the src attribute to the given value
|
||||||
|
*
|
||||||
|
* @param _value String URL
|
||||||
|
*/
|
||||||
|
set_src(_value)
|
||||||
|
{
|
||||||
|
if(_value.trim() != "")
|
||||||
|
{
|
||||||
|
if(_value.trim() == 'about:blank')
|
||||||
|
{
|
||||||
|
this.__getIframeNode().src = _value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Load the new page, but display a loader
|
||||||
|
let loader = jQuery('<div class="et2_iframe loading"/>');
|
||||||
|
this.__getIframeNode().before(loader);
|
||||||
|
window.setTimeout(function() {
|
||||||
|
this.__getIframeNode().src = _value;
|
||||||
|
this.__getIframeNode().addEventListener('load',function() {
|
||||||
|
loader.remove();
|
||||||
|
});
|
||||||
|
}.bind(this),0);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set name of iframe (to be used as target for links)
|
||||||
|
*
|
||||||
|
* @param _name
|
||||||
|
*/
|
||||||
|
set_name(_name)
|
||||||
|
{
|
||||||
|
this.options.name = _name;
|
||||||
|
this.__getIframeNode().attribute('name', _name);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_allow (_allow)
|
||||||
|
{
|
||||||
|
this.options.allow = _allow;
|
||||||
|
this.__getIframeNode().attribute('allow', _allow);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Make it look like part of the containing document
|
||||||
|
*
|
||||||
|
* @param _seamless boolean
|
||||||
|
*/
|
||||||
|
set_seamless(_seamless)
|
||||||
|
{
|
||||||
|
this.options.seamless = _seamless;
|
||||||
|
this.__getIframeNode().attribute("seamless", _seamless);
|
||||||
|
}
|
||||||
|
|
||||||
|
set_value(_value)
|
||||||
|
{
|
||||||
|
if(typeof _value == "undefined") _value = "";
|
||||||
|
|
||||||
|
if(_value.trim().indexOf("http") == 0 || _value.indexOf('about:') == 0 || _value[0] == '/')
|
||||||
|
{
|
||||||
|
// Value is a URL
|
||||||
|
this.set_src(_value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Value is content
|
||||||
|
this.set_srcdoc(_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the content of the iframe
|
||||||
|
*
|
||||||
|
* Sets the srcdoc attribute to the given value
|
||||||
|
*
|
||||||
|
* @param _value String Content of a document
|
||||||
|
*/
|
||||||
|
set_srcdoc(_value)
|
||||||
|
{
|
||||||
|
this.__getIframeNode().attribute("srcdoc", _value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ts-ignore TypeScript is not recognizing that Et2Iframe is a LitElement
|
||||||
|
customElements.define("et2-iframe", Et2Iframe);
|
Loading…
Reference in New Issue
Block a user