/** * IframeControl class for user layout creation. */ Ext.define("Terrasoft.controls.IframeControl", { extend: "Terrasoft.Component", alternateClassName: "Terrasoft.IframeControl", //region Properties: Private /** * Shared template of control. * @private * @override * @type {String[]} */ tpl: [ /*jshint quotmark:true */ '<iframe id="{id}" src="{src}" class="{wrapClass}"></iframe>' /*jshint quotmark:false */ ], //endregion //region Properties: Public /** * User's html layout. * @type {String} */ iframeContent: null, /** * Iframe id. * @type {String} */ id: null, /** * Iframe source. * @type {String} */ src: null, /** * Iframe css classes. * @type {Array} */ wrapClass: ["t-iframe"], //endregion //region Methods: Private /** * Set new user html layout. * @private * @param {String} value. */ setIframeContent: function (value) { value = value || ""; if (this.iframeContent !== value) { this.iframeContent = value; this.safeRerender(); } }, //endregion //region Methods: Protected /** * @inheritdoc Terrasoft.Component#init * @override */ init: function () { this.callParent(arguments); var selectors = this.selectors = this.selectors || {}; selectors.wrapEl = selectors.wrapEl || "#" + this.id; }, /** * Writes html to iframe. * @protected */ writeHTMLToIframe: function () { var iframe = this.getWrapEl(); var iframeDocument = iframe.dom.contentWindow.document; iframeDocument.open(); iframeDocument.write(this.iframeContent); iframeDocument.close(); }, /** * @inheritdoc Terrasoft.Component#onAfterRender * @override */ onAfterRender: function () { this.callParent(arguments); this.writeHTMLToIframe(); }, /** * @inheritdoc Terrasoft.Component#onAfterReRender * @override */ onAfterReRender: function () { this.callParent(arguments); this.writeHTMLToIframe(); }, /** * @inheritdoc Terrasoft.Component#getBindConfig * @override */ getBindConfig: function () { var bindConfig = this.callParent(arguments); return Ext.apply(bindConfig, { iframeContent: { changeMethod: "setIframeContent" } }); }, /** * @inheritdoc Terrasoft.BaseContentElement#getTplData * @override */ getTplData: function () { var tplData = this.callParent(arguments); return Ext.apply(tplData, { iframeContent: this.iframeContent, src: this.src, wrapClass: this.wrapClass }); } //endregion });