MWF.require("MWF.widget.MaskNode", null, false);
MWF.xApplication.O2Bug.options.multitask = false;
MWF.xApplication.O2Bug.Main = new Class({
Extends: MWF.xApplication.Common.Main,
Implements: [Options, Events],
options: {
"style": "default",
"name": "O2Bug",
"icon": "icon.png",
"width": "1200",
"height": "700",
"isResize": true,
"isMax": true,
"title": MWF.xApplication.O2Bug.LP.title
},
onQueryLoad: function(){
this.lp = MWF.xApplication.O2Bug.LP;
},
loadApplication: function(callback){
this.loadTitle();
this.loadFilter();
},
loadTitle: function(){
this.loadTitleBar();
this.loadTitleUserNode();
this.loadCreateActionNode();
this.loadTitleTextNode();
this.loadSearchNode();
},
loadTitleBar: function(){
this.titleBar = new Element("div", {
"styles": this.css.titleBar
}).inject(this.content);
},
loadTitleUserNode: function(){
this.titleUserNode = new Element("div", {
"styles": this.css.titleUserNode
}).inject(this.titleBar);
this.titleUserIconNode = new Element("div", {
"styles": this.css.titleUserIconNode
}).inject(this.titleUserNode);
this.titleUserTextNode = new Element("div", {
"styles": this.css.titleUserTextNode,
"text": this.desktop.session.user.name
}).inject(this.titleUserNode);
},
loadCreateActionNode: function() {
this.createAction = new Element("div", {
"styles": this.css.createAction
}).inject(this.titleBar);
this.createAction.addEvents({
"click": function(e){
this.createBug();
}.bind(this)
});
},
loadTitleTextNode: function(){
this.titleTextNode = new Element("div", {
"styles": this.css.titleTextNode,
"text": this.lp.title
}).inject(this.titleBar);
},
loadSearchNode: function(){
this.searchBarAreaNode = new Element("div", {
"styles": this.css.searchBarAreaNode
}).inject(this.titleBar);
this.searchBarNode = new Element("div", {
"styles": this.css.searchBarNode
}).inject(this.searchBarAreaNode);
this.searchBarActionNode = new Element("div", {
"styles": this.css.searchBarActionNode
}).inject(this.searchBarNode);
this.searchBarInputBoxNode = new Element("div", {
"styles": this.css.searchBarInputBoxNode
}).inject(this.searchBarNode);
this.searchBarInputNode = new Element("input", {
"type": "text",
"value": this.lp.searchKey,
"styles": this.css.searchBarInputNode
}).inject(this.searchBarInputBoxNode);
var _self = this;
this.searchBarActionNode.addEvent("click", function(){
this.searchTask();
}.bind(this));
this.searchBarInputNode.addEvents({
"focus": function(){
if (this.value==_self.lp.searchKey) this.set("value", "");
},
"blur": function(){if (!this.value) this.set("value", _self.lp.searchKey);},
"keydown": function(e){
if (e.code==13){
this.searchTask();
e.preventDefault();
}
}.bind(this),
"selectstart": function(e){
e.preventDefault();
}
});
},
loadFilter: function(){
this.filterBar = new Element("div", {"styles": this.css.filterBar}).inject(this.content);
this.filterTitleNode = new Element("div", {"styles": this.css.filterTitleNode}).inject(this.filterBar);
this.filterTitleNode.set("text", this.lp.filter);
this.filterContentNode = new Element("div", {"styles": this.css.filterContentNode}).inject(this.filterBar);
var html = this.lp.bugType+": "+
this.lp.creator+": "+
this.lp.targetUser+": "+
this.lp.status+": ";
this.filterContentNode.set("html", html);
this.filterBugTypeNode = this.filterContentNode.getElementById("sel_bugType");
this.filterCreatorNode = this.filterContentNode.getElementById("sel_targetUser");
this.filterTargetUserNode = this.filterContentNode.getElementById("sel_targetUser");
this.filterStatusNode = this.filterContentNode.getElementById("sel_status");
Object.each(this.lp.bugTypeList, function(v, k){new Element("option", {"value": k,"text": v}).inject(this.filterBugTypeNode)}.bind(this));
Object.each(this.lp.statusList, function(v, k){new Element("option", {"value": k,"text": v}).inject(this.filterStatusNode)}.bind(this));
},
createBug: function(){
this.note = new MWF.xApplication.O2Bug.Note(null, this.createAction, this);
}
});
MWF.xApplication.O2Bug.Note = new Class({
initialize: function(data, node, app){
this.data = data;
this.startNode = node;
this.app = app;
this.css = this.app.css;
this.container = this.app.content;
this.isNew = ((this.data) && (this.data.id)) ? true : false;
this.load();
},
load: function(){
if (!this.data) this.createNewData();
this.mask = new MWF.widget.MaskNode(this.container, {"loading": false});
this.mask.load();
this.createNode();
this.show();
//this.loadContent();
},
createNewData: function(){
this.data = {}
},
createNode: function(){
var size = this.startNode.getSize();
this.node = new Element("div", {
"styles": this.css.bugNoteNode
}).inject(this.container);
this.node.setStyles({
"width": ""+size.x+"px",
"height": ""+size.y+"px"
});
this.node.position({
relativeTo: this.startNode,
position: 'topLeft',
edge: 'topLeft'
});
},
show: function(){
var o = this.getNodeCoordinates();
var fx = new Fx.Morph(this.node, {
"duration": "500",
"transition": Fx.Transitions.Expo.easeOut
});
fx.start({
"opacity": 1,
"width": ""+ o.width+"px",
"height": ""+ o.height+"px",
"left": ""+ o.left+"px",
"top": ""+ o.top+"px"
}).chain(function(){
this.setNodeSizeFun = this.setNodeSize.bind(this);
this.app.addEvent("resize", this.setNodeSizeFun);
}.bind(this));
},
setNodeSize: function(){
var o = this.getNodeCoordinates();
this.node.setStyles({
"width": ""+ o.width+"px",
"height": ""+ o.height+"px",
"left": ""+ o.left+"px",
"top": ""+ o.top+"px"
});
},
getNodeCoordinates: function(){
var size = this.container.getSize();
var w = size.x*0.8;
if (w<800) w = 800;
var h = size.y*0.8;
if (h<300) h = 300;
var position = this.container.getPosition(this.container.getOffsetParent());
var l = size.x/2-w/2;
if (l<0) l=0;
l = position.x+l;
var t = size.y/2-h/2;
if (t<0) t=0;
t = position.y+t;
return {
"width": w,
"height": h,
"left": l,
"top": t
}
},
});