var MWFCalendar = MWF.xApplication.Calendar = MWF.xApplication.Calendar || {};
MWF.require("MWF.xDesktop.UserData", null, false);
MWF.require("MWF.xAction.org.express.RestActions", null,false);
//MWF.xDesktop.requireApp("Calendar", "Actions.RestActions", null, false);
MWF.xDesktop.requireApp("Calendar", "Common", null, false);
MWF.xDesktop.requireApp("Template", "MDomItem", null, false);
MWF.xApplication.Calendar.options.multitask = false;
MWFCalendar.LeftNaviWidth = 250;
MWF.xApplication.Calendar.Main = new Class({
Extends: MWF.xApplication.Common.Main,
Implements: [Options, Events],
options: {
"style": "default",
"name": "Calendar",
"icon": "icon.png",
"width": "1000",
"height": "600",
"isResize": true,
"isMax": true,
"eventId" : "",
"title": MWF.xApplication.Calendar.LP.title
},
onQueryLoad: function(){
this.lp = MWF.xApplication.Calendar.LP;
this.menuMode="show";
this.isManager = MWF.AC.isAdministrator();
this.userName = ( layout.desktop.session.user || layout.user ).distinguishedName;
if (!this.actions) this.actions = MWF.Actions.get("x_calendar_assemble_control"); //new MWF.xApplication.Calendar.Actions.RestActions();
//if (!this.personActions) this.personActions = MWF.Actions.get("x_organization_assemble_express");
},
loadApplication: function(callback) {
this.canlendarData = null;
this.content.loadCss("../x_component_Calendar/$Main/default/style.css");
MWF.UD.getDataJson("calendarConfig", function(json){
this.calendarConfig = json || {};
MWF.UD.getPublicData("calendarConfig", function(json){
var jsonData = json || {};
if (jsonData.process){
this.calendarConfig.process = jsonData.process;
}else{
this.calendarConfig.process = null;
}
if( jsonData.weekBegin ){
this.calendarConfig.weekBegin = jsonData.weekBegin;
}
for( var key in jsonData ){
if( key != "process" && key != "weekBegin" ){
this.calendarConfig[ key ] = jsonData[key];
}
}
if( !this.calendarConfig.disableViewList ) this.calendarConfig.disableViewList = [];
this.createNode();
if (!this.options.isRefresh) {
this.maxSize(function () {
this.listCalendar( function(){
this.loadLayout();
}.bind(this));
}.bind(this));
} else {
this.listCalendar( function(){
this.loadLayout();
}.bind(this))
}
if (callback) callback();
}.bind(this));
}.bind(this));
},
listCalendar : function( callback ){
if( this.canlendarData ){
if(callback)callback( this.canlendarData )
}else{
this.actions.listMyCalendar( function( json ){
if( ( json.data.myCalendars || [] ).length == 0 ){
this.createDefaultCalendar(function(){
if(callback)callback( json.data )
});
}else{
this.canlendarData = json.data;
this.calendarDataList = json.data.myCalendars;
this.currentCalendarData = json.data.myCalendars[0];
if(callback)callback( json.data )
}
}.bind(this))
}
},
getSelectedCalendarId : function(){
if( this.leftNavi ){
return this.leftNavi.getSelectedCalendarId();
}else{
return null;
}
},
createDefaultCalendar : function( callback, notCreate ){
this.actions.listMyCalendar( function( json ){
if( json.data.myCalendars && json.data.myCalendars.length ){
this.canlendarData = json.data;
this.calendarDataList = json.data.myCalendars;
this.currentCalendarData = json.data.myCalendars[0];
if(callback)callback();
}else if( json.data.unitCalendars && json.data.unitCalendars.length ){
this.canlendarData = json.data;
this.calendarDataList = json.data.unitCalendars;
this.currentCalendarData = json.data.unitCalendars[0];
if(callback)callback();
}else if( json.data.followCalendars && json.data.followCalendars.length ){
this.canlendarData = json.data;
this.calendarDataList = json.data.followCalendars;
this.currentCalendarData = json.data.followCalendars[0];
if(callback)callback();
}else if( !notCreate ){
this.actions.saveCalendar({
name : "我的日历",
type : "PERSON",
color : "",
description : "",
source : "PERSON",
isPublic : false,
manageablePersonList : [this.userName]
}, function(){
this.createDefaultCalendar( callback, true );
}.bind(this));
}
}.bind(this))
},
createNode: function(){
this.content.setStyle("overflow", "hidden");
this.node = new Element("div", {
"styles": {"width": "100%", "height": "100%", "overflow": "hidden"}
}).inject(this.content);
this.naviContainerNode = new Element("div.naviContainerNode", {
"styles": this.css.naviContainerNode
}).inject(this.node);
this.leftTitleNode = new Element("div.leftTitleNode", {
"styles": this.css.leftTitleNode
}).inject(this.naviContainerNode);
this.rightContentNode = new Element("div", {
"styles":this.css.rightContentNode
}).inject(this.node);
},
loadLayout: function(){
debugger;
if( this.status && this.status.action ) {
this.defaultAction = this.status.action;
}else if( this.options.defaultAction ){
this.defaultAction = this.options.defaultAction;
}else if (this.calendarConfig.defaultView){
this.defaultAction = this.calendarConfig.defaultView;
}else{
this.defaultAction = "toMonth";
}
if( this.calendarConfig.disableViewList.contains( this.defaultAction ) ){
this.defaultAction = "";
}
this.loadNaviTitleNode();
this.loadLeftNavi();
this.topMenu = new Element("div", {"styles": this.css.topMenu}).inject(this.rightContentNode);
this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.rightContentNode);
this.loadTopMenus();
//this.loadSideBar();
this.resizeNodes();
this.resizeNodesFun = this.resizeNodes.bind(this);
this.addEvent("resize", this.resizeNodesFun )
},
loadNaviTitleNode: function(){
this.titleContentNode = new Element("div.titleContentNode", {
"styles": this.css.titleContentNode
}).inject(this.leftTitleNode);
this.newCalendarNode = new Element("div", {
styles : this.css.newCalendarNode,
text : this.lp.createNewCalendar,
events : {
mouseover : function( ev ){
this.newCalendarNode.setStyles( this.css.newCalendarNode_over );
this.newCalendarNode.addClass("mainColor_color");
this.newCalendarIcon.setStyles( this.css.newCalendarIcon_over );
this.newCalendarIcon.addClass("mainColor_color");
}.bind(this),
mouseout : function( ev ){
this.newCalendarNode.setStyles( this.css.newCalendarNode );
this.newCalendarNode.removeClass("mainColor_color");
this.newCalendarIcon.setStyles( this.css.newCalendarIcon );
this.newCalendarIcon.removeClass("mainColor_color");
}.bind(this),
click : function(){ this.addCalendar() }.bind(this)
}
}).inject( this.titleContentNode );
this.newCalendarIcon = new Element("i.o2icon-newfiles", {
styles : this.css.newCalendarIcon
}).inject(this.newCalendarNode, "top");
//var iconAreaNode = this.iconAreaNode = new Element("div",{
// "styles" : this.css.titleIconAreaNode
//}).inject(this.titleContentNode);
//
//var iconNode = this.iconNode = new Element("img",{
// "styles" : this.css.titleIconNode,
// "src" : "../x_component_Calendar/$Main/appicon.png"
//}).inject(iconAreaNode);
//
//this.titleTextNode = new Element("div.titleTextNode", {
// "styles": this.css.titleTextNode,
// "text": this.lp.title
//}).inject(this.titleContentNode);
//this.titleDescriptionNode = new Element("div.titleDescriptionNode", {
// "styles": this.css.titleDescriptionNode
//}).inject(this.titleContentNode);
},
loadLeftNavi : function(){
this.naviNode = new Element("div.naviNode", {
"styles": this.css.naviNode
}).inject(this.naviContainerNode);
this.leftNavi = new MWF.xApplication.Calendar.Navi(this, this.naviNode, {});
},
loadTopMenus_middle : function(){
},
loadTopMenus_right: function(){
this.topMenuRight = new Element("div", {"styles": this.css.topMenuRight }).inject(this.topMenu);
this.createTopMenu_right(this.lp.addEvent, "o2icon-create", "addCalendarEvent");
//this.createTopMenu_right("新建日历", "icon_newapply", "addCalendar");
//var refreshNode = this.createTopMenu_right(this.lp.refresh, "refresh", "refresh");
//refreshNode.setStyle("float", "right");
var configNode = this.createTopMenu_right(this.lp.setting, "o2icon-config", "config");
configNode.setStyle("float", "right");
},
createTopMenu_right : function(text, icon, action){
var actionNode = new Element("div", {"styles": this.css.topMenuNode_right, "title" : text}).inject(this.topMenuRight);
var actionIconNode = new Element("div."+icon, {"styles": this.css.topMenuIconNode}).inject(actionNode);
var actionTextNode = new Element("div",{styles: this.css.topMenuTextNode, "text":text}).inject(actionNode);
// actionIconNode.setStyle("background", "url(../x_component_Calendar/$Main/default/icon/"+icon+".png) no-repeat center center");
actionNode.store("icon",icon);
actionNode.store("iconNode",actionIconNode);
var _self = this;
actionNode.addEvents({
"mouseover": function(){
this.node.setStyles(_self.css.topMenuNode_over);
this.node.addClass("mainColor_color");
this.node.retrieve("iconNode").setStyles( _self.css.topMenuIconNode_over ).addClass("mainColor_color");
// this.node.retrieve("iconNode").setStyle( "background","url(../x_component_Calendar/$Main/default/icon/"+this.node.retrieve("icon")+"_click.png) no-repeat center center" );
}.bind( { node : actionNode } ),
"mouseout": function(){
this.node.setStyles(_self.css.topMenuNode_right);
this.node.removeClass("mainColor_color");
this.node.retrieve("iconNode").setStyles( _self.css.topMenuIconNode ).removeClass("mainColor_color");
// this.node.retrieve("iconNode").setStyle( "background","url(../x_component_Calendar/$Main/default/icon/"+this.node.retrieve("icon")+".png) no-repeat center center" );
}.bind({ node:actionNode }),
"click": function(){
this.node.setStyles(_self.css.topMenuNode_down);
// this.node.retrieve("iconNode").setStyle( "background","url(../x_component_Calendar/$Main/default/icon/"+this.node.retrieve("icon")+"_click.png) no-repeat center center" );
if (_self[action]) _self[action].apply(_self);
}.bind({ node : actionNode })
});
return actionNode;
},
loadTopMenus: function(){
this.topMenuNodeMap = {};
//this.createTopMenu(this.lp.myCalendar, "icon_huiyi", "toMyCalendar");
this.createTopMenu(this.lp.month, "o2icon-month", "toMonth");
this.createTopMenu(this.lp.week, "o2icon-week", "toWeek");
this.createTopMenu(this.lp.day, "o2icon-day", "toDay");
this.createTopMenu(this.lp.list, "o2icon-list", "toList");
this.loadTopMenus_middle();
this.loadTopMenus_right();
},
isViewAvailable : function( action ){
return !this.calendarConfig.disableViewList.contains( action );
},
createTopMenu: function(text, icon, action){
if( this.calendarConfig.disableViewList.contains( action ) )return;
if( this.calendarConfig[ action + "ViewName" ] ){
text = this.calendarConfig[ action + "ViewName" ];
}
var actionNode = new Element("div", {"styles": this.css.topMenuNode}).inject(this.topMenu);
var actionIconNode = new Element("div."+icon, {"styles": this.css.topMenuIconNode}).inject(actionNode);
this.topMenuNodeMap[action] = actionNode;
// actionIconNode.setStyle("background", "url(../x_component_Calendar/$Main/default/icon/"+icon+".png) no-repeat center center");
var actionTextNode = new Element("div", {"styles": this.css.topMenuTextNode, "text": text}).inject(actionNode);
actionNode.store("icon",icon);
actionNode.store("iconNode",actionIconNode);
actionNode.store("action",action);
var _self = this;
actionNode.addEvents({
"mouseover": function(){
if( this.node != _self.currentTopMenuNode ){
this.node.setStyles(_self.css.topMenuNode_over);
this.node.addClass("mainColor_color");
this.node.retrieve("iconNode").setStyles( _self.css.topMenuIconNode_over ).addClass("mainColor_color");
// this.node.retrieve("iconNode").setStyle( "background","url(../x_component_Calendar/$Main/default/icon/"+this.node.retrieve("icon")+"_click.png) no-repeat center center" );
}
}.bind( { node : actionNode } ),
"mouseout": function(){
if(this.node != _self.currentTopMenuNode){
this.node.setStyles(_self.css.topMenuNode);
this.node.removeClass("mainColor_color");
this.node.retrieve("iconNode").setStyles( _self.css.topMenuIconNode ).removeClass("mainColor_color");
// this.node.retrieve("iconNode").setStyle( "background","url(../x_component_Calendar/$Main/default/icon/"+this.node.retrieve("icon")+".png) no-repeat center center" );
}
}.bind({ node:actionNode }),
//"mousedown": function(){this.setStyles(_self.css.topMenuNode_down);},
//"mouseup": function(){this.setStyles(_self.css.topMenuNode_over);},
"click": function(){
_self.switchTopMenuNode( this.node );
if (_self[action]) _self[action].apply(_self);
}.bind({ node : actionNode })
});
if( this.defaultAction ){
if( this.defaultAction == action ){
actionNode.click();
}
}else if( !this.loaded ){
actionNode.click();
this.loaded = true;
}
this.resizeNodes();
return actionNode;
},
switchTopMenuNode:function ( node ){
if( node !== this.currentTopMenuNode ){
node.setStyles( this.css.topMenuNode_down );
node.addClass("mainColor_color");
node.retrieve("iconNode").setStyles( this.css.topMenuIconNode_over ).addClass("mainColor_color");
}
if( this.currentTopMenuNode && node !== this.currentTopMenuNode){
this.currentTopMenuNode.setStyles( this.css.topMenuNode );
this.currentTopMenuNode.removeClass("mainColor_color");
this.currentTopMenuNode.retrieve("iconNode").setStyles( this.css.topMenuIconNode ).removeClass("mainColor_color");
}
this.currentTopMenuNode = node;
},
hideCurrentView: function(){
if (this.currentView){
this.currentView.hide();
this.currentView = null;
}
},
toList: function(){
if(this.contentNode)this.contentNode.setStyle("background", "#EEE");
if( this.currentView ){
this.currentView.destroy();
this.currentView = null;
}
this.listView = null;
this.getListView(function(){
this.listView.show();
this.currentView = this.listView;
if( this.options.eventId ){
this.openEvent( this.options.eventId );
this.options.eventId = "";
}
}.bind(this));
},
getListView: function(callback){
if (!this.listView){
MWF.xDesktop.requireApp("Calendar", "ListView", function(){
var options;
if( this.status && this.status.options ){
options = this.status.options
}else if( this.currentDate ){
//options = { date : this.currentDate };
}
this.listView = new MWF.xApplication.Calendar.ListView(this.contentNode, this, options);
if( options && this.status)this.status.options = null;
if (callback) callback();
}.bind(this));
}else{
if (callback) callback();
}
},
toMonth: function(){
if(this.contentNode)this.contentNode.setStyle("background", "#EEE");
if( this.currentView ){
this.currentView.destroy();
this.currentView = null;
}
this.monthView = null;
this.getMonthView(function(){
this.monthView.show();
this.currentView = this.monthView;
debugger;
if( this.options.eventId ){
this.openEvent( this.options.eventId );
this.options.eventId = "";
}
}.bind(this));
},
getMonthView: function(callback){
if (!this.monthView){
MWF.xDesktop.requireApp("Calendar", "MonthView", function(){
var options;
if( this.status && this.status.options ){
options = this.status.options
}else if( this.currentDate ){
//options = { date : this.currentDate.format("%Y-%m-%d") };
}
this.monthView = new MWF.xApplication.Calendar.MonthView(this.contentNode, this, options);
if( options && this.status)this.status.options = null;
if (callback) callback();
}.bind(this));
}else{
if (callback) callback();
}
},
toWeek: function(){
if(this.contentNode)this.contentNode.setStyle("background", "#EEE");
if( this.currentView ){
this.currentView.destroy();
this.currentView = null;
}
this.weekView = null;
this.getWeekView(function(){
this.weekView.show();
this.currentView = this.weekView;
if( this.options.eventId ){
this.openEvent( this.options.eventId );
this.options.eventId = "";
}
}.bind(this));
},
getWeekView: function(callback){
if (!this.weekView){
MWF.xDesktop.requireApp("Calendar", "WeekView", function(){
var options;
if( this.status && this.status.options ){
options = this.status.options
}else if( this.currentDate ){
//options = { date : this.currentDate.format("%Y-%m-%d") };
}
this.weekView = new MWF.xApplication.Calendar.WeekView(this.contentNode, this, options);
if( options && this.status)this.status.options = null;
if (callback) callback();
}.bind(this));
}else{
if (callback) callback();
}
},
toDay: function(d){
if(this.contentNode)this.contentNode.setStyle("background", "#EEE");
if( this.currentView ){
this.currentView.destroy();
this.currentView = null;
}
this.dayView = null;
this.getDayView(function(){
this.dayView.show();
this.currentView = this.dayView;
if( this.options.eventId ){
this.openEvent( this.options.eventId );
this.options.eventId = "";
}
}.bind(this), d);
},
getDayView: function(callback, d){
if (!this.dayView){
MWF.xDesktop.requireApp("Calendar", "DayView", function(){
var options;
if( this.status && this.status.options ){
options = this.status.options
}else if( d ){
options = {"date": d};
}else if( this.currentDate ){
//options = { date : this.currentDate.format("%Y-%m-%d") };
}
this.dayView = new MWF.xApplication.Calendar.DayView(this.contentNode, this, options);
if(this.status && this.status)this.status.options = null;
if (callback) callback();
}.bind(this));
}else{
this.dayView.toDay(d);
if (callback) callback();
}
},
addCalendarEvent: function(date, hour, minute, calendarId){
MWF.UD.getPublicData("calendarConfig", function(json){
var process = (json) ? json.process : null;
if (process){
this.loadCalendarProcess(process);
}else{
//new MWF.xApplication.Calendar.Creator(this, date, hour, room);
var form = new MWF.xApplication.Calendar.EventForm(this,{}, {
date : date,
hour : hour,
minute : minute,
defaultCalendarId : calendarId
}, {app:this});
form.view = this;
form.create();
//this.hideMenu();
}
}.bind(this));
},
addCalendar: function(){
var form = new MWF.xApplication.Calendar.CalendarForm(this,{}, {
}, {app:this});
form.view = this.leftNavi;
form.create();
},
editCalendar: function( data ){
var form = new MWF.xApplication.Calendar.CalendarForm(this, data, {
}, {app:this});
form.view = this.leftNavi;
this.isEventEditable(data) ? form.edit() : form.open();
},
openCalendar: function( data ){
var form = new MWF.xApplication.Calendar.CalendarForm(this,data, {
}, {app:this});
form.view = this.leftNavi;
form.open();
},
loadCalendarProcess: function(id){
this.getProcess(id, function(process){
MWF.xDesktop.requireApp("process.TaskCenter", "ProcessStarter", function(){
var starter = new MWF.xApplication.process.TaskCenter.ProcessStarter(process, this, {
"onStarted": function(data, title, processName){
this.afterStartProcess(data, title, processName);
}.bind(this)
});
starter.load();
}.bind(this));
}.bind(this));
},
afterStartProcess: function(data, title, processName){
var workInfors = [];
var currentTask = [];
data.each(function(work){
if (work.currentTaskIndex !== -1) currentTask.push(work.taskList[work.currentTaskIndex].work);
workInfors.push(this.getStartWorkInforObj(work));
}.bind(this));
if (currentTask.length===1){
var options = {"workId": currentTask[0], "appId": currentTask[0]};
this.desktop.openApplication(null, "process.Work", options);
this.createStartWorkResault(workInfors, title, processName, false);
}else{
this.createStartWorkResault(workInfors, title, processName, true);
}
},
createStartWorkResault: function(workInfors, title, processName, isopen){
var content = "";
workInfors.each(function(infor){
var users = [];
infor.users.each(function(uname){
users.push(MWF.name.cn(uname));
});
content += "
"+this.lp.nextActivity+""+infor.activity+", "+this.lp.nextUser+""+users.join(", ")+"";
if (infor.currentTask && isopen){
content += " "+this.lp.deal+"
";
}else{
content += "";
}
}.bind(this));
var msg = {
"subject": this.lp.processStarted,
"content": ""+this.lp.processStartedMessage+"“["+processName+"]"+title+"”
"+content
};
var tooltip = layout.desktop.message.addTooltip(msg);
var item = layout.desktop.message.addMessage(msg);
this.setStartWorkResaultAction(tooltip);
this.setStartWorkResaultAction(item);
},
getStartWorkInforObj: function(work){
var users = [];
var currentTask = "";
work.taskList.each(function(task, idx){
users.push(task.person+"("+task.department + ")");
if (work.currentTaskIndex===idx) currentTask = task.id;
}.bind(this));
return {"activity": work.fromActivityName, "users": users, "currentTask": currentTask};
},
setStartWorkResaultAction: function(item){
var node = item.node.getElements("span");
node.setStyles(this.app.css.dealStartedWorkAction);
var _self = this;
node.addEvent("click", function(e){
var options = {"taskId": this.get("value"), "appId": this.get("value")};
_self.desktop.openApplication(e, "process.Work", options);
});
},
getProcess: function(id, callback){
// MWF.xDesktop.requireApp("process.ProcessManager", "Actions.RestActions", function(){
// var action = new MWF.xApplication.process.ProcessManager.Actions.RestActions();
// action.getProcess(id, function(json){
if (callback) callback(id);
// }.bind(this));
// }.bind(this));
},
config: function(){
new MWF.xApplication.Calendar.Config(this, this.calendarConfig);
//this.hideMenu();
},
recordStatus: function(){
//alert( JSON.stringify(
// {
// action : this.currentTopMenuNode ? this.currentTopMenuNode.retrieve("action") : "toMyCalendar",
// options : this.currentView.recordStatus ? this.currentView.recordStatus() : null
// }
//) )
return {
action : this.currentTopMenuNode ? this.currentTopMenuNode.retrieve("action") : "toMyCalendar",
options : this.currentView.recordStatus ? this.currentView.recordStatus() : null
};
},
reloadView : function(){
if( this.currentView ){
this.currentView.reload();
}
},
reload: function( ){
this.refresh()
},
loadSideBar : function(){
//this.sideBar = new MWF.xApplication.Calendar.SideBar(this.node, this);
//this.sideBar.show();
},
resizeNodes : function(){
this.showLeftNavi = true;
if( this.inContainer ){
var size = this.container.getSize();
}else{
var size = this.node.getSize();
}
this.naviContainerNode.setStyle("height", ""+size.y+"px");
if( this.showLeftNavi ){
this.rightContentNode.setStyle("width",size.x - MWFCalendar.LeftNaviWidth );
//this.topMenu.setStyle("width",size.x - leftNaviSize.x);
//this.contentNode.setStyle("width",size.x - leftNaviSize.x);
}
if( this.currentView ){
this.currentView.resetNodeSize();
}
if( this.leftNavi )this.leftNavi.resizeNode();
},
openEvent : function (id) {
debugger;
this.actions.getEvent( id, function (json) {
var form = new MWF.xApplication.Calendar.EventForm(this, json.data, {
isFull : true
}, {app:this});
form.view = this.currentView;
form.open();
}.bind(this))
},
isEventEditable: function (data) {
if( MWF.AC.isAdministrator() )return true;
if( (data.manageablePersonList || []).contains( layout.desktop.session.user.distinguishedName ) )return true;
if( data.createPerson === layout.desktop.session.user.distinguishedName )return true;
return false;
}
});
MWF.xApplication.Calendar.Navi = new Class({
Implements: [Options, Events],
options : {
},
initialize: function(app, node, options){
this.setOptions(options);
this.app = app;
this.lp = this.app.lp;
this.node = $(node);
this.css = this.app.css;
this.load();
},
load : function(){
this.naviContainer = new Element("div", {
styles : {
overflow : "hidden"
}
}).inject(this.node);
this.naviNode = new Element("div").inject(this.naviContainer);
this.myCalendarNaviItem = [];
this.unitCalendarNaviItem = [];
this.followCalendarNaviItem = [];
this.app.listCalendar( function( data ){
this.myCalendars = data.myCalendars;
this.unitCalendars = data.unitCalendars;
this.followCalendars = data.followCalendars;
this.app.canlendarData = null;
this.loadNode();
}.bind(this));
o2.require("MWF.widget.ScrollBar", function(){
this.scrollBar = new MWF.widget.ScrollBar(this.naviContainer, {
"indent": false,
"style": "default",
"where": "before",
"distance": 60,
"friction": 4,
"axis": {"x": false, "y": true},
"onScroll": function (y) {
}.bind(this)
});
}.bind(this));
},
loadNode: function(){
this.loadMyCalendar();
this.loadUnitCalendar();
this.loadFollowCalendar();
this.loadMoreCalendarNode();
//this.resizeNode();
},
reload : function(){
this.node.empty();
this.load();
},
loadMoreCalendarNode : function(){
this.seeMore = new Element("div.seeMore", {
styles : this.css.seeMoreNode,
"text" : this.lp.calendarMarket,
"events" : {
mouseover : function(ev){
this.seeMore.setStyles( this.css.seeMoreNode_over );
this.seeMore.addClass("mainColor_color");
this.seeMoreIcon.setStyles( this.css.seeMoreIcon_over );
this.seeMoreIcon.addClass("mainColor_color");
}.bind(this),
mouseout : function(ev){
this.seeMore.setStyles( this.css.seeMoreNode );
this.seeMore.removeClass("mainColor_color");
this.seeMoreIcon.setStyles( this.css.seeMoreIcon );
this.seeMoreIcon.removeClass("mainColor_color");
}.bind(this),
click : function(ev){
var form = new MWF.xApplication.Calendar.CalendarMarket(this.app,{}, {
}, {app:this.app});
form.view = this.leftNavi;
form.create();
}.bind(this)
}
}).inject( this.node );
this.seeMoreIcon = new Element("i.o2icon-calendar-add", {
styles : this.css.seeMoreIcon
}).inject(this.seeMore, "top");
},
selectSingleCalendar : function( id ){
this.myCalendarNaviItem.each( function( item ){
if( item.isSelected && item.data.id !== id ){
item.cancelSelect()
}
if( !item.isSelected && item.data.id == id ){
item.select()
}
});
this.unitCalendarNaviItem.each( function( item ){
if( item.isSelected && item.data.id !== id ){
item.cancelSelect()
}
if( !item.isSelected && item.data.id == id ){
item.select()
}
});
this.followCalendarNaviItem.each( function( item ){
if( item.isSelected && item.data.id !== id ){
item.cancelSelect()
}
if( !item.isSelected && item.data.id == id ){
item.select()
}
});
this.app.reloadView();
},
getSelectedCalendarId : function(){
var ids = [];
this.myCalendarNaviItem.each( function( navi ){
if( navi.isSelected )ids.push( navi.data.id );
});
this.unitCalendarNaviItem.each( function( navi ){
if( navi.isSelected )ids.push( navi.data.id );
});
this.followCalendarNaviItem.each( function( navi ){
if( navi.isSelected )ids.push( navi.data.id );
});
return ids;
},
loadMyCalendar : function(){
var listNode = this.createCategoryNode(this.lp.myCalendar);
this.myCalendars.each( function( d ){
this.myCalendarNaviItem.push( new MWF.xApplication.Calendar.NaviItem( this, listNode, d, {
isSelected : true
} ) );
}.bind(this))
},
loadUnitCalendar : function(){
var listNode = this.createCategoryNode(this.lp.unitCalendar);
this.unitCalendars.each( function( d ){
this.unitCalendarNaviItem.push( new MWF.xApplication.Calendar.NaviItem( this, listNode, d, {
isSelected : true
} ));
}.bind(this))
},
loadFollowCalendar : function(){
var listNode = this.createCategoryNode(this.lp.myFollowCalendar);
this.followCalendars.each( function( d ){
this.followCalendarNaviItem.push( new MWF.xApplication.Calendar.NaviItem( this, listNode, d, {
isSelected : true
} ));
}.bind(this));
//var seeMore = new Element("div", {
// styles : this.css.seeMoreNode,
// "text" : "查看日历广场",
// "events" : {
// mouseover : function(ev){ ev.target.setStyles( this.css.seeMoreNode_over ) }.bind(this),
// mouseout : function(ev){ ev.target.setStyles( this.css.seeMoreNode ) }.bind(this),
// click : function(ev){
// var form = new MWF.xApplication.Calendar.CalendarMarket(this.app,{}, {
// }, {app:this.app});
// form.view = this.leftNavi;
// form.create();
// }.bind(this)
// }
//}).inject( this.naviNode );
},
createCategoryNode : function( text ){
var _self = this;
var categoryNaviNode = new Element("div.categoryNaviNode", {
"styles": this.css.categoryNaviNode
}).inject(this.naviNode);
var expendNode = new Element("div.categoryExpendNode", {
styles : this.css.categoryExpendNode
}).inject(categoryNaviNode);
categoryNaviNode.addEvent( "click" , function(ev){
var target = this.categoryNaviNode;
if( target.retrieve("isExpended") ){
target.store("isExpended" , false);
target.retrieve("expendNode").setStyles( _self.css.categoryCollapseNode );
target.retrieve("listNode").setStyle("display","none")
}else{
target.store("isExpended" , true);
target.retrieve("expendNode").setStyles( _self.css.categoryExpendNode );
target.retrieve("listNode").setStyle("display","")
}
}.bind( { categoryNaviNode : categoryNaviNode } ));
var textNode = new Element("div.categoryNaviTextNode",{
"styles": this.css.categoryNaviTextNode,
"text": text //this.defaultRevealData.id == "defaultList" ? this.data.name : this.defaultRevealData.showName
}).inject( categoryNaviNode);
var listNode = new Element("div.viewNaviListNode",{
"styles" : this.css.viewNaviListNode
}).inject(this.naviNode);
categoryNaviNode.store("isExpended" , true);
categoryNaviNode.store("expendNode" , expendNode);
categoryNaviNode.store("textNode" , textNode);
categoryNaviNode.store("listNode" , listNode);
return listNode;
},
resizeNode : function(){
if( this.app.inContainer ){
var size = this.app.container.getSize();
}else{
var size = this.app.node.getSize();
}
//var titleSize = this.app.leftTitleNode ? this.app.leftTitleNode.getSize() : {x:0,y:0};
this.node.setStyle("height",size.y - 80 );
this.naviContainer.setStyle("height",size.y - 122 );
}
});
MWF.xApplication.Calendar.NaviItem = new Class({
Implements: [Options, Events],
options: {
"style": "default",
"index" : 0,
"isSelected" : true
},
initialize: function ( navi, container, data, options) {
this.setOptions(options);
this.navi = navi;
this.app = navi.app;
this.data = data;
this.container = $(container);
this.css = this.app.css;
this.load();
},
load: function(){
this.isSelected = this.options.isSelected;
var _self = this;
this.node = new Element("div.naviItemNode", {
"styles": this.css.naviItemNode
}).inject(this.container);
this.node.addEvents({
"mouseover": function(){
this.setStyles(_self.css.naviItemNode_over);
this.addClass("mainColor_color");
_self.actionNode.fade("in");
},
"mouseout": function(){
this.setStyles( _self.css.naviItemNode );
this.removeClass("mainColor_color");
_self.actionNode.fade("out");
},
"click": function (el) {
if( _self.isSelected ){
_self.cancelSelect( true );
}else{
_self.select( true );
}
}
});
this.actionNode = new Element("div.naviItemActionNode",{
styles : this.css.naviItemActionNode,
events : {
click : function( ev ){
ev.stopPropagation();
}.bind(this)
}
}).inject( this.node );
this.actionNode.addClass("mainColor_bg");
this.colorNode = new Element("div", {
styles : this.css.naviColorNode
}).inject( this.node );
this.colorNode.setStyle("border-color", this.data.color);
this.textNode = new Element("div.naviItemTextNode", {
styles : this.css.naviItemTextNode,
"text" : this.data.name,
"title" : this.data.name
}).inject( this.node );
if( this.isSelected ){
this.select()
}
this.loadActionsMenu();
},
select : function( reload ){
//this.node.setStyles( this.css.naviItemNode_selected );
this.isSelected = true;
this.colorNode.setStyle("background-color", this.data.color);
this.colorNode.setStyles(this.css.naviColorNode_selected);
if(reload)this.app.reloadView();
//this.loadView();
},
cancelSelect : function(reload){
this.isSelected = false;
this.colorNode.setStyle("background-color", "transparent");
this.colorNode.setStyles(this.css.naviColorNode);
this.colorNode.setStyle("border-color", this.data.color);
if(reload)this.app.reloadView();
},
loadActionsMenu : function(){
this.menu = new MWF.xApplication.Calendar.CalendarMenu(this.actionNode, {} , this.app, {}, this.app.node);
this.menu.calendarData = this.data;
this.menu.load();
}
//loadView : function( searchKey ){
// this.app.openView( this, this.category.data, this.data, searchKey || "", this );
//}
});
MWF.xDesktop.requireApp("Template", "MSelector", null, false);
MWF.xApplication.Calendar.CalendarMenu = new Class({
Extends: MSelector,
options : {
"style": "arrow",
"width": "150px",
"height": "36px",
"mainColor_bg": "mainColor_bg",
"defaultOptionLp" : MWF.xApplication.Calendar.LP.font,
"textField" : "name",
"valueField" : "val",
"event" : "mouseenter",
"isSetSelectedValue" : false,
"isChangeOptionStyle" : false,
"emptyOptionEnable" : false,
"containerIsTarget" : true,
"tooltipsOptions" : {
axis : "x",
hasArrow : true
}
},
_selectItem : function( itemNode, itemData, ev ){
if( this[itemData.val] ){
this[itemData.val](ev);
}
},
showThis : function(){
this.app.leftNavi.selectSingleCalendar( this.calendarData.id );
},
createEvent : function(){
this.app.addCalendarEvent(null,null,null, this.calendarData.id);
},
openCalendar : function(){
this.app.actions.getCalendar( this.calendarData.id, function( json ){
this.app.openCalendar( json.data );
}.bind(this))
},
editCalendar : function(){
this.app.actions.getCalendar( this.calendarData.id, function( json ){
this.app.editCalendar( json.data );
}.bind(this))
},
deleteCalendar : function( e ){
var lp = MWF.xApplication.Calendar.LP;
var _self = this;
_self.app.confirm("warn", e, lp.deleteCalendarTitle, lp.deleteCalendarContent.replace("{name}", _self.calendarData.name), 300, 120, function(){
_self.app.actions.deleteCalendar( _self.calendarData.id, function( json ){
_self.app.notice( lp.deleteSuccess );
_self.app.leftNavi.reload();
}.bind(this));
this.close();
}, function(){
this.close();
}, null);
},
_loadData : function( callback ){
var lp = MWF.xApplication.Calendar.LP;
var actionList = [{
name: lp.onlyViewCurrent,
val: 'showThis'
}];
if( this.calendarData.publishable || this.calendarData.manageable){
actionList.push( {
name: lp.addEvent,
val: 'createEvent'
});
}
if( this.calendarData.manageable ){
actionList.push( {
name: lp.editCalendar,
val: 'editCalendar'
}, {
name: lp.deleteCalendar,
val: 'deleteCalendar'
});
}else{
actionList.push( {
name: lp.viewCalendar,
val: 'openCalendar'
});
}
if(callback)callback( actionList );
},
_postCreateItem: function( itemNode, data ){
itemNode.setStyles( {
"cursor" : "pointer",
"font-size" : "14px",
"min-height" : "36px",
"line-height" : "36px"
} );
}
});
MWF.xApplication.Calendar.CalendarMarket = new Class({
Extends: MPopupForm,
Implements: [Options, Events],
options: {
"style": "meeting",
"width": "1100",
"height": "80%",
"hasTop": true,
"hasIcon": false,
"hasBottom": false,
"hasTopIcon" : false,
"hasTopContent" : false,
"draggable": true,
"maxAction" : true,
"closeAction": true,
"title" : MWF.xApplication.Calendar.LP.calendarMarket
},
_createTableContent : function(){
var lp = MWF.xApplication.Calendar.LP;
var _self = this;
this.formTableContainer.setStyles({
"width" : "auto",
"padding-top" : "20px",
"padding-left" : "20px"
});
this.formTableArea.setStyle("overflow","hidden");
this.app.actions.listPublicCalendar( function( json ){
if( !json.data || json.data.length == 0 ){
this.noCalendarNode = new Element("div",{
"styles" : this.css.noCalendarNode,
"text" : lp.noPublicCalendar
}).inject( this.formTableArea );
}else{
( json.data || [] ).each( function(d){
var node = new Element("div", { styles : this.css.marketNode }).inject( this.formTableArea );
node.setStyle("border-left","5px solid "+ d.color);
var itemNode = new Element("div", { styles : this.css.marketItemNode }).inject( node );
var topNode = new Element("div", { styles : this.css.marketItemTopNode }).inject( itemNode );
var titleNode = new Element("div", {
styles : this.css.marketItemTitleNode,
text : d.name
}).inject( topNode );
titleNode.setStyle("color", d.color);
var middleNode = new Element("div", { styles : this.css.marketItemMiddleNode }).inject( itemNode );
new Element("div", {
styles : this.css.marketItemTopLable,
text : lp.create + ":"
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemTopInfor,
text : d.createor.split("@")[0] + ","
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemTopLable,
text : lp.time + ":"
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemTopInfor,
text : d.createTime.split(" ")[0]
}).inject( middleNode );
var middleNode = new Element("div", { styles : this.css.marketItemMiddleNode }).inject( itemNode );
new Element("div", {
styles : this.css.marketItemTopLable,
text : lp.type + ":"
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemTopInfor,
text : d.type == "PERSON" ? lp.personal : lp.unit2
}).inject( middleNode );
if( d.type == "UNIT" ){
new Element("div", {
styles : this.css.marketItemTopLable,
text : lp.belongTo + ":"
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemTopInfor,
text : d.target.split("@")[0],
title : d.target.split("@")[0]
}).inject( middleNode );
}
var middleNode = new Element("div", { styles : this.css.marketItemMiddleNode }).inject( itemNode );
new Element("div", {
styles : this.css.marketItemTopLable,
text : lp.description + ":"
}).inject( middleNode );
new Element("div", {
styles : this.css.marketItemDescriptiontInfor,
text : d.description || "",
title : d.description || ""
}).inject( middleNode );
var followedAction, followAction;
var followedAction = new Element("div",{
styles : this.css.marketItemFollowedAction,
text : lp.followed,
title : lp.clickToCancelFollow,
events : {
click : function(){
_self.app.actions.followCalendarCancel(d.id, function(){
_self.app.notice( lp.cancelFollowSuccess );
_self.needReload = true;
this.followedAction.setStyle("display","none");
this.followAction.setStyle("display","");
}.bind({ followedAction : followedAction, followAction: followAction }))
}.bind(this)
}
}).inject(node);
if( !d.followed )followedAction.setStyle("display","none");
var followAction = new Element("div",{
styles : this.css.marketItemFollowAction,
text : lp.follow ,
events : {
click: function () {
_self.app.actions.followCalendar(d.id, function () {
_self.app.notice( lp.followSuccess );
_self.needReload = true;
this.followedAction.setStyle("display","");
this.followAction.setStyle("display","none");
}.bind({ followedAction : followedAction, followAction: followAction }))
}.bind(this)
}
}).inject(node);
if( d.followed )followAction.setStyle("display","none");
//var typeNode = new Element("div", {
// styles : this.css.marketTypleLabel,
// text : d.type == "PERSON" ? "个人日历" : "组织日历"
//}).inject( topNode );
//typeNode.setStyle( "background-color" , MWFCalendar.ColorOptions.getLightColor(d.color ) );
}.bind(this))
}
}.bind(this))
},
_close : function(){
if( this.needReload )this.app.reload();
}
});
MWF.xApplication.Calendar.Config = new Class({
Implements: [Events],
initialize: function(app){
this.app = app;
this.css = this.app.css;
this.lp = this.app.lp;
this.configData = this.app.calendarConfig || {};
this.process = null;
MWF.UD.getPublicData("calendarConfig", function(json){
var jsonData = json || {};
//if (jsonData.process){
// this.configData.process = jsonData.process;
//}else{
// this.configData.process = null;
//}
if( jsonData.weekBegin ){
this.configData.weekBegin = jsonData.weekBegin;
}
//if( jsonData.mobileCreateEnable ){
// this.configData.mobileCreateEnable = jsonData.mobileCreateEnable;
//}
for( var key in jsonData ){
if( key != "process" && key != "weekBegin" && key !="mobileCreateEnable"){
this.configData[ key ] = jsonData[key];
}
}
this.load();
}.bind(this));
},
load: function(){
this.node = new Element("div", {"styles": this.css.configNode}).inject(this.app.node);
this.contentNode = new Element("div", {"styles": this.css.configContentNode}).inject(this.node);
var statusStyle = "overflow: hidden;margin-top:6px;margin-left:10px;";
var statusIconStyle = "float: left; width: 16px; height: 16px; border-radius: 100px; ";
var statusIconStyle2 = "float: left; width: 14px; height: 14px; border-radius: 100px; ";
var statusTextStyle = "margin-left:35px; line-height:16px; height:16px;font-size:14px;color:#666;";
var viewStyle = "font-size:14px;color:#666;heigh:16px;margin-top:6px;margin-left:10px;";
var inputTextStyle = "float:right; width:120px; border:1px solid #ccc";
var d = this.configData;
var configLp = this.lp.config;
var html =
//""+this.lp.config.calendarStatus+"
" +
//
//""+
//"
" +
//"
"+this.lp.config.wait+"
" +
//""+
//
//""+
//"
" +
//"
"+this.lp.config.progress+"
" +
//""+
//
//""+
//"
" +
//"
"+this.lp.config.invite+"
" +
//""+
//
//""+
//"
" +
//"
"+this.lp.config.completed+"
" +
//""+
//
//""+
//"
" +
//"
"+this.lp.config.conflict+"
" +
//""+
//
//"" +
""+this.lp.config["default"]+"
" +
"";
if( MWF.AC.isAdministrator() ){
d.disableViewList = d.disableViewList || [];
html += ""+
""+this.lp.config.viewSetting +"
" +
"" +
""+
""+this.lp.config.weekBegin +"
" +
""; //+
//""+
//""+this.lp.config.applyProcess+"
" +
//"" +
//
//
//""+this.lp.config.mobileCreateEnable +"
" +
//"";
}
this.contentNode.set("html", html);
this.contentNode.getElements("div.line").setStyles(this.css.configContentLine);
this.contentNode.getElements("div.configTitle").setStyles(this.css.configTitleDiv);
if( MWF.AC.isAdministrator() ){
//this.processNode = this.contentNode.getElement("[item='processArea']");
//this.processNode.setStyles(this.css.configProcessNode);
//this.createApplicationSelect();
//
//this.mobileCreateEnableNode = this.contentNode.getElement("[item='mobileCreateEnable']");
//this.mobileCreateEnable = new MDomItem(this.mobileCreateEnableNode, {
// name : "mobileCreateEnable", type : "select", selectValue : ["true","false"], selectText : this.lp.config.mobileCreateEnableOptions,
// value : d.mobileCreateEnable || "true"
//} , null, this.app );
//this.mobileCreateEnable.load();
}
this.actionNode = new Element("div", {"styles": this.css.configActionNode}).inject(this.node);
this.cancelNode = new Element("div", {"styles": this.css.configActionCancelNode, "text": this.app.lp.cancel}).inject(this.actionNode);
this.saveNode = new Element("div", {"styles": this.css.configActionSaveNode, "text": this.app.lp.save}).inject(this.actionNode);
this.saveNode.addClass("mainColor_bg");
this.cancelNode.addEvent("click", this.hide.bind(this));
this.saveNode.addEvent("click", this.save.bind(this));
this.node.addEvent("mousedown", function(e){e.stopPropagation();}.bind(this));
this.setSize();
this.show();
},
setSize : function(){
var sizeY = this.node.getSize().y;
if( this.app.inContainer ){
var y = this.app.container.getSize().y;
}else{
var y = this.app.content.getSize().y;
}
if( sizeY > y-50 ){
this.node.setStyle("height", y-50 );
}
},
createApplicationSelect: function(){
if (this.configData.process){
MWF.require("MWF.widget.O2Identity", function(){
var p = new MWF.widget.O2Process(this.configData.process, this.processNode);
}.bind(this));
}
this.processNode.addEvent("click", function(){
MWF.xDesktop.requireApp("Selector", "package", function(){
var options = {
"type": "Process",
"values": [this.process || this.configData.process],
"count": 1,
"onComplete": function (items) {
this.processNode.empty();
this.process = null;
this.configData.process = null;
if (items.length){
MWF.require("MWF.widget.O2Identity", function(){
var p = new MWF.widget.O2Process(items[0].data, this.processNode);
this.process = {
"name": items[0].data.name,
"id": items[0].data.id,
"application": items[0].data.application,
"applicationName": items[0].data.applicationName,
"alias": items[0].data.alias
};
this.configData.process = this.process;
}.bind(this));
}
}.bind(this)
};
var selector = new MWF.O2Selector(this.app.content, options);
}.bind(this));
}.bind(this));
},
save: function(){
//var hideMenu = "auto";
var defaultView = "toMyCalendar";
var process = null;
//var node = this.contentNode.getFirst("div");
//var hideMenuNode = node.getElement("input");
//if (hideMenuNode) if (!hideMenuNode.checked) hideMenu = "static";
//node = node.getNext();
var viewNodes = this.contentNode.getElements("input[name='configSelectDefaultView']");
for (var i=0; i