MWF.xApplication.Execution.Chat = new Class({
Extends: MWF.widget.Common,
Implements: [Options, Events],
options: {
"style" : "default",
"documentId" : ""
},
initialize: function (dialogContainer, editorContainer, app, actions, lp, options) {
this.setOptions(options);
this.dialogContainer = $(dialogContainer);
this.editorContainer = $(editorContainer);
this.app = app;
this.actions = actions;
this.lp = lp;
this.userName = layout.desktop.session.user.name;
this.userName = layout.desktop.session.user.distinguishedName;
this.path = "../x_component_Execution/$Chat/"+this.options.style+"/";
this.actionSettingPath = MWF.defaultPath+"/widget/$SimpleEditor/"+this.options.style+"/ActionSetting.js";
this.cssPath = this.path + "css.wcss";
this._loadCss();
this.orgActionsAlpha = MWF.Actions.get("x_organization_assemble_control");
},
load: function () {
this._loadEmotionSetting();
if( this.dialogContainer ){
this.dialogNode = new Element( "div.dialogNode", {
"styles" : this.css.dialogNode
}).inject(this.dialogContainer);
//this.dialogContainer.setStyle("height","400px");
var _self = this;
MWF.require("MWF.widget.ScrollBar", function () {
this.scrollObj = new MWF.widget.ScrollBar(this.dialogContainer, {
"indent": false,
"style": "default",
"where": "before",
"distance": 60,
"friction": 4,
"axis": {"x": false, "y": true},
"onScroll": function (y) {
//var scrollSize = _self.dialogContainer.getScrollSize();
//var clientSize = _self.dialogContainer.getSize();
//var scrollHeight = scrollSize.y - clientSize.y;
//
//if (y + 200 > scrollHeight && _self.loadDialog) {
// if (! _self.isItemsLoaded) _self.loadDialog();
//}
if( y == 0 ){
if (! _self.isItemsLoaded) _self.loadDialog();
}
}
});
//this.scrollObj.scrollVNode.setStyles({"margin-top":"300px"})
}.bind(this), false);
this.items = [];
this.isItemsLoaded = false;
this.isItemLoadding = false;
this.loadDialog( function(){
this.scrollToLater();
}.bind(this) );
}
if(this.editorContainer){
this.loadEditor( this.editorContainer, "" );
}
},
scrollToLater : function(){
setTimeout( function(){
var clientSize = this.scrollObj.node.getSize();
if( !this.scrollObj.scrollVNode )this.scrollObj.checkScroll();
if( this.scrollObj.scrollVNode ){
var scrollVNodeSize = this.scrollObj.scrollVNode.getSize();
var maxY = (clientSize.y.toFloat())-(scrollVNodeSize.y.toFloat());
this.scrollObj.scroll( maxY, null );
}
}.bind(this), 500 )
},
_loadEmotionSetting : function(){
if( this.emotionSetting )return;
var r = new Request({
url: this.actionSettingPath,
async: false,
method: "get",
onSuccess: function(responseText, responseXML){
this.emotionSetting = MWF.widget.SimpleEditor.Actions.setting.emotion;
}.bind(this),
onFailure: function(xhr){
alert(xhr.responseText);
}
});
r.send();
},
loadDialog: function( callback ){
if (!this.isItemsLoaded) {
if (!this.isItemLoadding) {
this.isItemLoadding = true;
this.getCurrentPageData(function (json) { //alert(JSON.stringify(json))
var length = json.count; //|| json.data.length;
if (length <= this.items.length) {
this.isItemsLoaded = true;
}
json.data.each(function (d) { //alert(JSON.stringify(d))
this.loadDialogItem( d );
}.bind(this));
this.isItemLoadding = false;
if( callback )callback();
}.bind(this), 10 )
}
}
//this.dialogContainer.scrollTo(0, 400 );
//alert(this.dialogContainer.getScrollSize().y)
},
loadDialogItem: function( d , position){
this.items.push(d.id);
var isCurrentUser = ( d.senderName == this.userName );
//var isCurrentUser = false
var msg_li = new Element("div.msg_li", {"styles": this.css.msg_li}).inject(this.dialogNode, position || "top");
var msg_item = new Element("div", {"styles": this.css.msg_item}).inject(msg_li);
var msg_person = new Element("div", {
"styles": this.css[isCurrentUser ? "msg_person_right" : "msg_person_left"]
}).inject(msg_item);
var msg_face = new Element("img", {
"styles": this.css.msg_face
}).inject(msg_person);
this.setUserFace(d.senderName, msg_face);
if (!isCurrentUser) {
var msg_name = new Element("div", {
"styles": this.css.msg_person_name,
"text": d.senderName.split("@")[0]
}).inject(msg_person)
}
var msg_arrow_left = new Element("div", {
"styles": this.css[isCurrentUser ? "msg_arrow_right" : "msg_arrow_left"]
}).inject(msg_item);
var msg_content_body = new Element("div", {
"styles": this.css[isCurrentUser ? "msg_content_body_right" : "msg_content_body_left"]
}).inject(msg_item);
//if (isCurrentUser) {
// var msg_del = new Element("span", {
// "styles": this.css.msg_del,
// "title": "点击删除"
// }).inject(msg_content_body);
// msg_del.addEvent("click", function () {
// if (confirm("删除后无法恢复,确定要删除该信息?")) {
// this.deleteSingleMessage(docid, seq, jQuery(this).parents(".msg_li"));
// }
// }.bind(this))
//}
var msg_content_area = new Element("div", {
"styles": this.css.msg_content_area
}).inject(msg_content_body);
var msg_content_text = new Element("p", {
"styles": this.css.msg_content_text,
"html": this.parseEmotion( d.content )
}).inject(msg_content_area);
var msg_content_time = new Element("p", {
"styles": this.css.msg_content_time,
"text": d.createTime
}).inject(msg_content_area);
},
parseEmotion : function( content ){
return content.replace(/\[emotion=(.*?)\]/g, function( a,b ){
return "
";
}.bind(this));
},
//listMessageData: function( callback ){
// var json = {
// "type": "success",
// "data": [
// {
// "id": "53a508ec-7862-4036-a273-c15830cd3f86",
// "createTime": "2016-04-19 15:38:50",
// "updateTime": "2016-04-19 15:38:50",
// "sequence": "2016041915385053a508ec-7862-4036-a273-c15830cd3f46",
// "content": "飞哥,找时间和孟总对一下设计,看看情况。飞哥,找时间和孟总对一下设计,看看情况飞哥,找时间和孟总对一下设计,看看情况飞哥,找时间和孟总对一下设计,看看情况",
// "person": "李义"
// },
// {
// "id": "53a508ec-7862-4036-a273-c15830cd3f87",
// "createTime": "2016-04-19 15:38:50",
// "updateTime": "2016-04-19 15:38:50",
// "sequence": "2016041915385053a508ec-7862-4036-a273-c15830cd3f46",
// "content": "下周我们就开始写代码.下周我们就开始写代码.下周我们就开始写代码.下周我们就开始写代码.下周我们就开始写代码下周我们就开始写代码.",
// "person": "金飞"
// }
// ],
// "date": "2016-05-27 14:20:07",
// "spent": 2,
// "size": 2,
// "count": 0,
// "position": 0,
// "message": ""
// }
//
//},
getCurrentPageData:function(callback,count){
if (!count)count = 5;
var id = (this.items && this.items.length) ? this.items[this.items.length - 1] : "(0)";
var filter = {"workId":this.options.workId} || {};
this.actions.getChatListNext(id, count, filter, function (json) { //alert("action="+JSON.stringify(json))
if (callback) callback(json);
}.bind(this),null,false)
},
setUserFace: function(userName, faceNode ){
faceNode.set("src",this.orgActionsAlpha.getPersonIcon(userName));
//this.orgActionsAlpha.getPersonIcon(userName, function(url){
// faceNode.set("src",url);
// //var json = { data : { icon : url } };
// //this.userCache[ name ] = json;
// //if( callback )callback( json );
//}.bind(this), function(){ alert("err");
// //var json = { data : { icon : "../x_component_ForumDocument/$Main/"+this.options.style+"/icon/noavatar_big.gif" } };
// //this.userCache[ name ] = json;
// //if( callback )callback( json );
//}.bind(this));
//this.getUserData( userName, function( userData ){
// var icon;
// if( userData.icon ){
// icon = "data:image/png;base64,"+userData.icon;
// }else{
// icon = this.path+ ( userData.genderType=="f" ? "female.png" : "man.png");
// }
// faceNode.set("src", icon );
//})
},
//getUserData : function( userName, callback ){
// this.userData = this.userData || {};
// if( this.userData[userName] ){
// if(callback)callback(this.userData[userName])
// }else{
// this.actions.getPerson(function(json){
// this.userData[userName] = json.data;
// if(callback)callback(json.data)
// }.bind(this),null,userName,false)
// }
//},
sendMessage : function(content, callback){
var d = {
"workId" : this.options.workId,
"createTime": new Date().format("db"),
"content": content,
"targetIdentity": this.app.identity,
"senderName" : this.userName
};
this.actions.submitChat(d, function(json){
}.bind(this),
function(xhr,text,error){
var errorText = error;
if (xhr) errorMessage = xhr.responseText;
var e = JSON.parse(errorMessage);
if(e.message){
this.app.notice( e.message,"error");
}else{
this.app.notice( errorText,"error");
}
}.bind(this),false);
this.loadDialogItem(d, "bottom");
if(callback)callback();
},
loadEditor: function ( container, data ) {
MWF.require("MWF.widget.SimpleEditor", function () {
this.editor = new MWF.widget.SimpleEditor({
"style": "chatReceive", //使用的样式文件夹
"hasHeadNode" : false,
"hasTitleNode": false, //是否有标题区
"editorDisabled": false, //编辑区是否能进行编辑
"hasToolbar": true, //是否生成操作条
"toolbarDisable": false, //操作条是否失效
"hasSubmit": true, //是否形成提交按钮
"submitDisable": false, //提交按钮是否失效
"hasCustomArea": true, //是否有提示区
"paragraphise": false, //回车是否形成段落
"minHeight": 100, //最小高度
"maxHeight": 100, //编辑区的最大高度
"overFlow": "visible", //可选项为 visible, auto 和 max ,visible 高度随内容变化, auto 内容高度超过minHeight时滚动条,max 内容高度超过maxHeight时滚动条(ie6 和 文档模式为杂项时,失效)
"width": "100%", //编辑器的宽度
"action": "Emotion", //操作条上面有哪些操作,如果是all,表示使用 toolbarItems.json 里配置的所有操作,否则传入操作的 action ,用 空格隔开,比如 "Image | Emotion"
"limit": 255, //输入长度限制,0表示无限制
"onQueryLoad": function () {
return true;
},
"onPostLoad": function ( editor ) {
editor.setCustomInfo("");
},
"onSubmitForm": function ( editor ) {
var content = editor.getContent(true);
if( content.trim() != "
" && content.trim()!=""){
this.sendMessage( content, function(){
editor.setContent("");
this.scrollToLater();
}.bind(this));
}else{
this.app.notice("不能发送空消息","error");
}
}.bind(this)
}, container, data||"", null, null);
this.editor.load();
}.bind(this));
}
});