MWF.xApplication.Meeting.ListView = new Class({ Extends: MWF.widget.Common, Implements: [Options, Events], options: { "style": "default", "date": null }, initialize: function(node, app, options){ this.setOptions(options); this.path = "/x_component_Meeting/$ListView/"; this.cssPath = "/x_component_Meeting/$ListView/"+this.options.style+"/css.wcss"; this._loadCss(); this.app = app; this.container = $(node); this.date = this.options.date || new Date(); this.load(); }, load: function(){ this.node = new Element("div", {"styles": this.css.node}).inject(this.container); this.leftNode = new Element("div", {"styles": this.css.leftNode}).inject(this.node); this.contentAreaNode = new Element("div", {"styles": this.css.contentAreaNode}).inject(this.node); this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.contentAreaNode); this.resetNodeSize(); this.app.addEvent("resize", this.resetNodeSize.bind(this)); this.loadLeftNavi(); this.toApplyWait(); //this.dateNode = new Element("div", {"styles": this.css.dateNode}).inject(this.node); //this.loadCalendar(); }, resetNodeSize: function(){ var size = this.container.getSize(); if (this.app.meetingConfig.hideMenu=="static"){ var y = size.y-120; this.node.setStyle("height", ""+y+"px"); this.node.setStyle("margin-top", "60px"); }else{ var y = size.y-20; this.node.setStyle("height", ""+y+"px"); } //var size = this.container.getSize(); //var y = size.y-20; //this.node.setStyle("height", ""+y+"px"); }, loadLeftNavi: function(){ var menuNode = new Element("div", {"styles": this.css.menuNode, "text": this.app.lp.listNavi.myApply}).inject(this.leftNode); this.loadNaviItem(this.app.lp.listNavi.wait, "toApplyWait"); this.loadNaviItem(this.app.lp.listNavi.processing, "toApplyProcessing"); this.loadNaviItem(this.app.lp.listNavi.completed, "toApplyCompleted"); var menuNode = new Element("div", {"styles": this.css.menuNode, "text": this.app.lp.listNavi.myMeeting}).inject(this.leftNode); this.loadNaviItem(this.app.lp.listNavi.wait, "toMeetingWait"); this.loadNaviItem(this.app.lp.listNavi.processing, "toMeetingProcessing"); this.loadNaviItem(this.app.lp.listNavi.completed, "toMeetingCompleted"); this.loadNaviItem(this.app.lp.listNavi.reject, "toMeetingReject"); //var menuNode = new Element("div", {"styles": this.css.menuNode, "text": this.app.lp.listNavi.room}).inject(this.leftNode); }, loadNaviItem: function(text, action){ var itemNode = new Element("div", {"styles": this.css.menuItemNode, "text": text}).inject(this.leftNode); var _self = this; itemNode.addEvents({ "mouseover": function(){if (_self.currentNavi != this) this.setStyles(_self.css.menuItemNode_over);}, "mouseout": function(){if (_self.currentNavi != this) this.setStyles(_self.css.menuItemNode);}, "click": function(){ if (_self.currentNavi) _self.currentNavi.setStyles(_self.css.menuItemNode); _self.currentNavi = this; this.setStyles(_self.css.menuItemNode_current); if (_self[action]) _self[action](); } }) }, toApplyWait: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.ApplyWait(this); }, toApplyProcessing: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.ApplyProcessing(this); }, toApplyCompleted: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.ApplyCompleted(this); }, toMeetingWait: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.MeetingWait(this); }, toMeetingProcessing: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.MeetingProcessing(this); }, toMeetingCompleted: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.MeetingCompleted(this); }, toMeetingReject: function(){ if (this.currentView) this.currentView.destroy(); this.currentView = new MWF.xApplication.Meeting.ListView.MeetingReject(this); }, hide: function(){ var fx = new Fx.Morph(this.node, { "duration": "300", "transition": Fx.Transitions.Expo.easeOut }); fx.start({ "opacity": 0 }).chain(function(){ this.node.setStyle("display", "none"); }.bind(this)); }, show: function(){ this.node.setStyles(this.css.node); var fx = new Fx.Morph(this.node, { "duration": "800", "transition": Fx.Transitions.Expo.easeOut }); this.app.fireAppEvent("resize"); fx.start({ "opacity": 1, "left": "0px" }).chain(function(){ this.node.setStyles({ "position": "static", "width": "auto" }); }.bind(this)); }, reload: function(){ } }); MWF.xApplication.Meeting.ListView.View = new Class({ initialize: function(view, action){ this.view = view; this.css = this.view.css; this.container = this.view.contentNode; this.app = this.view.app; this.items = []; this.load(); }, load: function(){ this.loadHead(); MWF.require("MWF.widget.Mask", function(){ this.mask = new MWF.widget.Mask({"style": "desktop"}); this.mask.loadNode(this.view.contentAreaNode); }.bind(this)); this.loadList(); }, loadHead: function(){ this.table = new Element("table", { "styles": this.css.listViewTable, "border": "0", "cellPadding": "0", "cellSpacing": "0", "html": ""+this.app.lp.applyPerson+""+this.app.lp.beginDate+""+this.app.lp.time+""+this.app.lp.subject+""+this.app.lp.room+"" }).inject(this.container); this.table.getElements("th").setStyles(this.css.listViewTableTh); }, loadList: function() { this.app.actions.listMeetingApplyWait(function (json) { this.loadLines(json.data); }.bind(this)); }, loadLines: function(items){ items.each(function(item){ this.loadLine(item); }.bind(this)); if (this.mask){ this.mask.hide(function(){ MWF.release(this.mask); this.mask = null; }.bind(this)); } }, loadLine: function(item){ this.items.push(new MWF.xApplication.Meeting.ListView.View.Line(this, item)); }, destroy: function(){ this.items.each(function(item){ item.destroy(); }); this.items = []; this.view.currentView = null; this.table.destroy(); MWF.release(this); } }); MWF.xApplication.Meeting.ListView.ApplyWait = new Class({ Extends: MWF.xApplication.Meeting.ListView.View }); MWF.xApplication.Meeting.ListView.ApplyProcessing = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingApplyProcessing(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.ApplyCompleted = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingApplyCompleted(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.MeetingWait = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingInvitedWait(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.MeetingProcessing = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingInvitedProcessing(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.MeetingCompleted = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingInvitedCompleted(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.MeetingReject = new Class({ Extends: MWF.xApplication.Meeting.ListView.View, loadList: function() { this.app.actions.listMeetingInvitedRejected(function (json){this.loadLines(json.data);}.bind(this)); }, }); MWF.xApplication.Meeting.ListView.View.Line = new Class({ initialize: function(table, item){ this.table = table; this.view = this.table.view; this.css = this.view.css; this.container = this.table.table; this.app = this.view.app; this.data = item; this.load(); }, load: function(){ var sTime = Date.parse(this.data.startTime); var bdate = sTime.format(this.app.lp.dateFormatDay); var btime = sTime.format("%H:%M"); var etime = Date.parse(this.data.completedTime).format("%H:%M"); this.app.actions.getRoom(this.data.room, function (json){ this.app.actions.getBuilding(json.data.building, function (bjson){ var room = json.data.name+"("+bjson.data.name+((json.data.roomNumber) ? " #"+json.data.roomNumber : "")+")"; this.node = new Element("tr",{ "html": ""+bdate+""+btime+"-"+etime+""+this.data.subject+""+room+"" }).inject(this.container); this.personNode = this.node.getFirst("td"); if (this.data.applicant){ var explorer = { "actions": this.app.personActions, "app": { "lp": this.app.lp } } MWF.require("MWF.widget.Identity", function(){ var person = new MWF.widget.Person({"name": this.data.applicant}, this.personNode, explorer, false, null, {"style": "room"});; }.bind(this)); } this.node.getElements("td").setStyles(this.css.listViewTableTd); this.node.addEvent("click", function(e){ this.openMeeting(e); }.bind(this)); }.bind(this)); }.bind(this)); }, openMeeting: function(e){ if (!this.document){ if (this.view.currentDocument) this.view.currentDocument.closeDocument(); this.document = new MWF.xApplication.Meeting.ListView.View.Document(this, e.target); this.view.currentDocument = this.document; } }, destroy: function(){ if (this.document) this.document.closeDocument(); if (this.node) this.node.destroy(); MWF.release(this); } }); MWF.xApplication.Meeting.ListView.View.Document = new Class({ Extends: MWF.xApplication.Meeting.MeetingView.Document, initialize: function(item){ this.item = item; this.view = this.item.view this.container = this.view.contentAreaNode; this.app = this.view.app; this.path = "/x_component_Meeting/$MeetingView/"; this.cssPath = "/x_component_Meeting/$MeetingView/default/css.wcss"; this._loadCss(); this.app.actions.getMeeting(this.item.data.id, function(json){ this.data = json.data; this.isEdit = (this.data.applicant == this.app.desktop.session.user.name); this.load(); }.bind(this)); }, _loadCss: function(){ var key = encodeURIComponent(this.cssPath); if (MWF.widget.css[key]){ this.css = MWF.widget.css[key]; }else{ var r = new Request.JSON({ url: this.cssPath, secure: false, async: false, method: "get", noCache: false, onSuccess: function(responseJSON, responseText){ this.css = responseJSON; MWF.widget.css[key] = responseJSON; }.bind(this), onError: function(text, error){ alert(error + text); } }); r.send(); } }, closeDocument: function(callback){ //this.saveDocument(true, true); if (this.setDescriptionNodeSizeFun) this.app.removeEvent("resize", this.setDescriptionNodeSizeFun); if (this.setNodeSizeFun) this.app.removeEvent("resize", this.setNodeSizeFun); var size = this.item.node.getSize(); var position = this.item.node.getPosition(); var fx = new Fx.Morph(this.node, { "duration": "500", "transition": Fx.Transitions.Expo.easeOut }); this.node.empty(); this.view.currentDocument = null; fx.start({ "opacity": 0, "width": ""+ size.x+"px", "height": ""+ size.y+"px", "left": ""+ position.x+"px", "top": ""+ position.y+"px", }).chain(function(){ this.destroy(); if (callback) callback(); }.bind(this)); }, });