import {CtlBase} from './CtlBase'
import {CtlViewerDefault} from './CtlDefaultValue'
import {parseYvanPropChangeVJson} from './CtlUtils'
import webix from 'webix'
import _ from 'lodash'
webix.protoUI(
{
name: 'viewer',
defaults: {},
$init: function (config: any) {
this.$view.innerHTML = `
`
this.$ready.push(this._ready)
_.extend(this.config, config)
if (config.on && typeof config.on.onInited === 'function') {
config.on.onInited.call(this)
}
},
_ready: function (this: any) {
//@ts-ignore
require(['viewerjs'], (Viewer: any) => {
const img = this.$view.getElementsByTagName('img')[0]
this.viewer = new Viewer(img);
})
},
_set_inner_size: function () {
},
_updateScrollSize: function () {
},
$setSize: function (x: any, y: any) {
if (webix.ui.view.prototype.$setSize.call(this, x, y)) {
this._set_inner_size()
}
}
},
webix.ui.view
)
export class CtlViewer extends CtlBase {
static create(module: any, vjson: any): CtlViewer {
const that = new CtlViewer(vjson)
that._module = module
_.defaultsDeep(vjson, CtlViewerDefault)
const yvanProp = parseYvanPropChangeVJson(vjson, ['value', 'width', 'height', 'imgWidth', 'imgHeight'])
// 将 vjson 存至 _webixConfig
that._webixConfig = vjson
// 将 yvanProp 合并至当前 Ctl 对象, 期间会操作 _webixConfig
_.assign(that, yvanProp)
// 将 事件与 _webixConfig 一起存至 vjson 交给 webix 框架做渲染
_.merge(vjson, that._webixConfig, {
on: {
onInited(this: any) {
that.attachHandle(this, {...vjson, ...yvanProp})
_.defer(() => {
that.renderImage()
})
},
onAfterDelete() {
that.removeHandle()
}
}
})
return that
}
renderImage() {
let img = this._webix.$view.getElementsByTagName('img')[0];
if (this.imgWidth.endsWith('px') || this.imgWidth.endsWith('%')) {
img.style.width = this.imgWidth;
} else {
img.style.width = ''
}
if (this.imgHeight.endsWith('px') || this.imgHeight.endsWith('%')) {
img.style.height = this.imgHeight;
} else {
img.style.height = ''
}
img.src = this.value;
return img.outerHTML;
}
/*============================ 公共属性部分 ============================*/
set value(nv: string) {
this._value = nv;
}
get value(): string {
return this._value;
}
get imgWidth(): string {
return this._imgWidth;
}
set imgWidth(nv: string) {
this._imgWidth = nv;
}
get imgHeight(): string {
return this._imgHeight;
}
set imgHeight(nv: string) {
this._imgHeight = nv;
}
get width(): any {
return this._width;
}
set width(nv: any) {
this._width = nv;
if (!this._webix) {
if (nv) {
this._webixConfig.width = nv
} else {
delete this._webixConfig.width
}
return
}
this._webix.define('width', nv)
this._webix.resize()
}
get height(): any {
return this._height;
}
set height(nv: any) {
this._height = nv;
if (!this._webix) {
if (nv) {
this._webixConfig.height = nv
} else {
delete this._webixConfig.height
}
return
}
this._webix.define('height', nv)
this._webix.resize()
}
/*============================ 私有属性部分 ============================*/
private _value: string = ''
private _imgWidth: string = ''
private _imgHeight: string = ''
private _width: any
private _height: any
}