MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
/** @class Application 门户中嵌入的系统component对象或网页iframe(模块部署中配置的网页URL)。
* @o2cn 嵌入的系统应用
* @example
* //可以在脚本中获取该组件
* //方法1:
* var application = this.form.get("fieldId"); //获取组件
* //方法2
* var application = this.target; //在组件本身的脚本中获取
* @extends MWF.xApplication.process.Xform.$Module
* @o2category FormComponents
* @o2range {Portal}
* @hideconstructor
*/
MWF.xApplication.process.Xform.Application = MWF.APPApplication = new Class(
/** @lends MWF.xApplication.process.Xform.Application# */
{
Extends: MWF.APP$Module,
options: {
/**
* component对象初始化后,加载之前触发,this.event可获取component对象。
* @event MWF.xApplication.process.Xform.Application#queryLoadApplication
* @see {@link https://www.yuque.com/o2oa/ixsnyt/hm5uft#i0zTS|组件事件说明}
*/
"moduleEvents": ["load", "queryLoad", "postLoad", "queryLoadApplication"]
},
_loadUserInterface: function(){
/**
* @ignore
* @member parentLine
* @memberOf MWF.xApplication.process.Xform.Application#
*/
/**
* @ignore
* @member getSource
* @memberOf MWF.xApplication.process.Xform.Application#
*/
this.node.empty();
if( this.json.activeType !== "delay" ){
if( !o2.api ){
MWF.require("MWF.framework", function () {
this.loadApplication();
}.bind(this));
}else{
this.loadApplication();
}
}
},
/**
* @summary 当组件被设置为延迟激活,通过active方法激活
* @param {Function} callback 激活后的回调方法(不保证组件加载完成),另外已经激活过该方法还会被执行。
* @example
* var app = this.form.get("fieldId");
* app.active(function(){
* //do someting
* })
*/
active: function(callback){
if (!this.loaded) {
this.reload(callback);
} else {
if (callback) callback();
}
},
/**
* @summary 重新加载嵌入对象
* @param {Function} callback 重载后的回调
* @example
* this.form.get("fieldId").reload()
*/
reload: function(callback){
this.clean();
this.loadApplication( callback );
},
/**
* @summary 清除当前嵌入的对象
* @example
* this.form.get("fieldId").clean()
*/
clean: function(){
if(this.component){
try{
this.component.close();
if(this.node)this.node.empty();
}catch (e) {
console.log(e);
if(this.node)this.node.empty();
}
this.component = null;
}
if( this.iframe ){
this.iframe.destroy();
if(this.node)this.node.empty();
this.iframe = null;
}
},
loadApplication: function ( callback ) {
this.clean();
if(this.node){
this.node.empty();
this.node.setStyles({
"position": "relative"
});
if( !this.json.styles || (!this.json.styles["background"] && !this.json.styles["background-color"] )){
this.node.setStyle("background-color", "#eee");
}
}
var status = this.getComponentStatus() || {};
var options = this.getComponentOptions() || {};
this.getComponentPath(function (componentPath) {
if( componentPath && componentPath.indexOf("@url:") === 0 ){
this.loadIframe( componentPath.substring(5, componentPath.length ), callback );
}else{
this.loadComponent( componentPath, status, options, callback );
}
}.bind(this))
},
/**
* @summary 加载Iframe
* @param {String} src iframe的src,如'https://www.baidu.com/'
* @example
* this.form.get("fieldId").clean(); //清除当前嵌入的对象
* this.form.get("fieldId").loadIframe('https://www.baidu.com/'); //加载iframe
*/
loadIframe: function( src, callback ){
var attr = {
"src": src,
"width": "100%",
"height": "100%",
"frameborder": "0px",
"scrolling": "auto",
"seamless": "seamless"
};
/**
* @summary 当模块部署中配置的是@url:开头的链接时,嵌入的iframe.
* @member {Object}
* @example
* var iframe = this.form.get("fieldId").iframe; //获取iframe
* iframe.src; //获取iframe的地址
*/
this.iframe = new Element("iframe", attr).inject( this.node );
this.loaded = true;
if(callback)callback();
},
/**
* @summary 加载系统组件
* @param {String} path 组件的路径,如'Calendar'
* @param {Object} [status] 组件的状态
* @param {Object} [options] 组件的选项
* @example
* this.form.get("fieldId").clean(); //清除当前嵌入的对象
* this.form.get("fieldId").loadComponent('Calendar'); //加载日程安排
* @example
* this.form.get("fieldId").clean(); //清除当前嵌入的对象
* this.form.get("fieldId").loadComponent('cms.Module', {
* "columnId":"25434995-45d2-4c9a-a344-55ad0deff071"
* }); //加载id为25434995-45d2-4c9a-a344-55ad0deff071的内容管理栏目
*/
loadComponent: function ( path, status, options, callback ) {
var clazz = MWF.xApplication;
if( o2.typeOf(path) !== "string" )return;
path.split(".").each(function (a) {
clazz[a] = clazz[a] || {};
clazz = clazz[a];
});
clazz.options = clazz.options || {};
var _load = function () {
if( clazz.Main ){
var opt = options || {};
var stt = status || {};
opt.embededParent = this.node;
/**
* @summary 嵌入的component对象.
* @member {Object}
* @example
* var app = this.form.get("fieldId").component; //获取component对象
* app.recordStatus(); //获取应用的当前状态
* app.refresh(); //刷新应用
* app.dialog(option); //弹出一个对话框(详见MWF.widget.Dialog)
* app.notice(content, type, target, where, offset); //显示一个通知消息
* app.confirm(type, e, title, text, width, height, ok, cancel); //显示一个确认框
* app.alert(type, e, title, text, width, height); //弹出一个信息框
* app.addEvent(type, fun); //为应用绑定一个事件
*/
this.component = new clazz.Main(this.form.app.desktop, opt);
this.component.status = stt;
this.fireEvent("queryLoadApplication", this.component);
this.component.load();
this.component.setEventTarget(this.form.app);
var _self = this;
this.component.refresh = function () {
if( layout.inBrowser ){
window.location.reload();
}else{
_self.form.app.refresh();
}
};
}else{
if( MWF.xApplication.process && MWF.xApplication.process.Xform && MWF.xApplication.process.Xform.LP ){
this.form.app.notice(MWF.xApplication.process.Xform.LP.applicationNotFound+":"+path, "error");
}else{
this.form.app.notice(this.form.app.lp.applicationNotFound+":"+path, "error");
}
}
this.loaded = true;
if(callback)callback();
}.bind(this);
try{
MWF.xDesktop.requireApp(path, "lp."+o2.language, null, false);
MWF.xDesktop.requireApp(path, "Main", null, false);
if (clazz.loading && clazz.loading.then){
clazz.loading.then(function(){
_load();
});
}else{
_load();
}
}catch (e) {
this.form.app.notice( e.message, "error" );
}
},
/**
* @summary 获取获取表单设计配置的component对象的路径
* @param {Function} callback 获取路径后的回调方法,参数为路径
* @example
* this.form.get("fieldId").getComponentPath(function(path){
* //path为路径
* })
*/
getComponentPath: function(callback){
var path;
if (this.json.componentType==="script"){
if (this.json.componentScript && this.json.componentScript.code){
path = this.form.Macro.exec(this.json.componentScript.code, this);
}
}else{
if (this.json.componentSelected && this.json.componentSelected!=="none"){
path = this.json.componentSelected;
}else{
path = "";
}
}
Promise.resolve(path).then(function (p) {
callback(p || "");
})
},
/**
* @summary 获取表单设计配置的component对象的参数
* @return 设置的参数
* @example
* var param = this.form.get("fieldId").getComponentOptions()
*/
getComponentOptions : function(){
var params = "";
if( this.json.optionsType === "map" ){
params = this.json.optionsMapList;
}else if( this.json.optionsType === "script" ){
var code = (this.json.optionsScript) ? this.json.optionsScript.code : "";
if (code){
params = this.form.Macro.exec(code, this);
}
}
return params;
},
/**
* @summary 获取表单设计配置的component对象的状态
* @return 设置的状态
* @example
* var param = this.form.get("fieldId").getComponentStatus()
*/
getComponentStatus: function(){
var params = "";
if( this.json.statusType === "map" ){
params = this.json.statusMapList;
}else if( this.json.statusType === "script" ){
var code = (this.json.statusScript) ? this.json.statusScript.code : "";
if (code){
params = this.form.Macro.exec(code, this);
}
}
return params;
}
});
source