author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Wed, 09 Jun 2010 12:32:54 +0200 | |
changeset 5697 | ec1ce7198ef4 |
parent 5658 | 7b9553a9db65 |
child 5699 | f4f6ee3af50b |
permissions | -rw-r--r-- |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
1 |
/** |
0 | 2 |
* This file contains Calendar utilities |
3 |
* :organization: Logilab |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
4 |
* :copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
0 | 5 |
* :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
6 |
*/ |
|
7 |
||
8 |
CubicWeb.require('python.js'); |
|
9 |
CubicWeb.require('ajax.js'); |
|
10 |
||
11 |
// IMPORTANT NOTE: the variables DAYNAMES AND MONTHNAMES will be added |
|
12 |
// by cubicweb automatically |
|
13 |
// dynamically computed (and cached) |
|
14 |
var _CAL_HEADER = null; |
|
15 |
||
16 |
TODAY = new Date(); |
|
17 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
18 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
19 |
* .. class:: Calendar |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
20 |
* |
0 | 21 |
* Calendar (graphical) widget |
22 |
* public methods are : |
|
23 |
* __init__ : |
|
24 |
* @param containerId: the DOM node's ID where the calendar will be displayed |
|
25 |
* @param inputId: which input needs to be updated when a date is selected |
|
26 |
* @param year, @param month: year and month to be displayed |
|
27 |
* @param cssclass: CSS class of the calendar widget (default is commandCal) |
|
28 |
* |
|
29 |
* show() / hide(): |
|
30 |
* show or hide the calendar widget |
|
31 |
* |
|
32 |
* toggle(): |
|
33 |
* show (resp. hide) the calendar if it's hidden (resp. displayed) |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
34 |
* |
0 | 35 |
* displayNextMonth(): (resp. displayPreviousMonth()) |
36 |
* update the calendar to display next (resp. previous) month |
|
37 |
*/ |
|
38 |
Calendar = function(containerId, inputId, year, month, cssclass) { |
|
39 |
this.containerId = containerId; |
|
40 |
this.inputId = inputId; |
|
41 |
this.year = year; |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
42 |
this.month = month - 1; // Javascript's counter starts at 0 for january |
0 | 43 |
this.cssclass = cssclass || "popupCalendar"; |
44 |
this.visible = false; |
|
45 |
this.domtable = null; |
|
46 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
47 |
this.cellprops = { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
48 |
'onclick': function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
49 |
dateSelected(this, containerId); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
50 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
51 |
'onmouseover': function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
52 |
this.style.fontWeight = 'bold'; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
53 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
54 |
'onmouseout': function() { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
55 |
this.style.fontWeight = 'normal'; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
56 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
57 |
} |
0 | 58 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
59 |
this.todayprops = jQuery.extend({}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
60 |
this.cellprops, { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
61 |
'class': 'today' |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
62 |
}); |
0 | 63 |
|
64 |
this._rowdisplay = function(row) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
65 |
var _td = function(elt) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
66 |
return TD(this.cellprops, elt); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
67 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
68 |
return TR(null, map(_td, row)); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
69 |
}; |
0 | 70 |
|
71 |
this._makecell = function(cellinfo) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
72 |
return TD(cellinfo[0], cellinfo[1]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
73 |
}; |
0 | 74 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
75 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
76 |
* .. function:: Calendar._uppercaseFirst(s) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
77 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
78 |
* utility function (the only use for now is inside the calendar) |
0 | 79 |
*/ |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
80 |
this._uppercaseFirst = function(s) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
81 |
return s.charAt(0).toUpperCase(); |
0 | 82 |
} |
83 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
84 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
85 |
* .. function:: Calendar._domForRows(rows) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
86 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
87 |
* accepts the cells data and builds the corresponding TR nodes |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
88 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
89 |
* * `rows`, a list of list of couples (daynum, cssprops) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
90 |
*/ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
91 |
this._domForRows = function(rows) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
92 |
var lines = []; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
93 |
for (i = 0; i < rows.length; i++) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
94 |
lines.push(TR(null, map(this._makecell, rows[i]))); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
95 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
96 |
return lines; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
97 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
98 |
|
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
99 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
100 |
* .. function:: Calendar._headdisplay(row) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
101 |
* |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
102 |
* builds the calendar headers |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
103 |
*/ |
0 | 104 |
this._headdisplay = function(row) { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
105 |
if (_CAL_HEADER) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
106 |
return _CAL_HEADER; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
107 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
108 |
var self = this; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
109 |
var _th = function(day) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
110 |
return TH(null, self._uppercaseFirst(day)); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
111 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
112 |
return TR(null, map(_th, DAYNAMES)); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
113 |
}; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
114 |
|
0 | 115 |
this._getrows = function() { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
116 |
var rows = []; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
117 |
var firstday = new Date(this.year, this.month, 1); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
118 |
var stopdate = firstday.nextMonth(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
119 |
var curdate = firstday.sub(firstday.getRealDay()); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
120 |
while (curdate.getTime() < stopdate) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
121 |
var row = [] |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
122 |
for (var i = 0; i < 7; i++) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
123 |
if (curdate.getMonth() == this.month) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
124 |
props = curdate.equals(TODAY) ? this.todayprops: this.cellprops; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
125 |
row.push([props, curdate.getDate()]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
126 |
} else { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
127 |
row.push([this.cellprops, ""]); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
128 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
129 |
curdate.iadd(1); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
130 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
131 |
rows.push(row); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
132 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
133 |
return rows; |
0 | 134 |
} |
135 |
||
136 |
this._makecal = function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
137 |
var rows = this._getrows(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
138 |
var monthname = MONTHNAMES[this.month] + " " + this.year; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
139 |
var prevlink = "javascript: togglePreviousMonth('" + this.containerId + "');"; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
140 |
var nextlink = "javascript: toggleNextMonth('" + this.containerId + "');"; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
141 |
this.domtable = TABLE({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
142 |
'class': this.cssclass |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
143 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
144 |
THEAD(null, TR(null, TH(null, A({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
145 |
'href': prevlink |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
146 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
147 |
"<<")), |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
148 |
// IE 6/7 requires colSpan instead of colspan |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
149 |
TH({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
150 |
'colSpan': 5, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
151 |
'colspan': 5, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
152 |
'style': "text-align: center;" |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
153 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
154 |
monthname), TH(null, A({ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
155 |
'href': nextlink |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
156 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
157 |
">>")))), TBODY(null, this._headdisplay(), this._domForRows(rows))); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
158 |
return this.domtable; |
0 | 159 |
} |
160 |
||
161 |
this._updateDiv = function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
162 |
if (!this.domtable) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
163 |
this._makecal(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
164 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
165 |
cw.jqNode(this.containerId).empty().append(this.domtable); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
166 |
// replaceChildNodes($(this.containerId), this.domtable); |
0 | 167 |
} |
168 |
||
169 |
this.displayNextMonth = function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
170 |
this.domtable = null; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
171 |
if (this.month == 11) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
172 |
this.year++; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
173 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
174 |
this.month = (this.month + 1) % 12; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
175 |
this._updateDiv(); |
0 | 176 |
} |
177 |
||
178 |
this.displayPreviousMonth = function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
179 |
this.domtable = null; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
180 |
if (this.month == 0) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
181 |
this.year--; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
182 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
183 |
this.month = (this.month + 11) % 12; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
184 |
this._updateDiv(); |
0 | 185 |
} |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
186 |
|
0 | 187 |
this.show = function() { |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
188 |
if (!this.visible) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
189 |
container = cw.jqNode(this.containerId); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
190 |
if (!this.domtable) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
191 |
this._makecal(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
192 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
193 |
container.empty().append(this.domtable); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
194 |
toggleVisibility(container); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
195 |
this.visible = true; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
196 |
} |
0 | 197 |
} |
198 |
||
199 |
this.hide = function(event) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
200 |
var self; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
201 |
if (event) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
202 |
self = event.data.self; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
203 |
} else { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
204 |
self = this; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
205 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
206 |
if (self.visible) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
207 |
toggleVisibility(self.containerId); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
208 |
self.visible = false; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
209 |
} |
0 | 210 |
} |
211 |
||
212 |
this.toggle = function() { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
213 |
if (this.visible) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
214 |
this.hide(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
215 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
216 |
else { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
217 |
this.show(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
218 |
} |
0 | 219 |
} |
220 |
||
221 |
// call hide() when the user explicitly sets the focus on the matching input |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
222 |
cw.jqNode(inputId).bind('focus', { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
223 |
'self': this |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
224 |
}, |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
225 |
this.hide); // connect(inputId, 'onfocus', this, 'hide'); |
0 | 226 |
}; |
227 |
||
228 |
// keep track of each calendar created |
|
229 |
Calendar.REGISTRY = {}; |
|
230 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
231 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
232 |
* .. function:: toggleCalendar(containerId, inputId, year, month) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
233 |
* |
0 | 234 |
* popup / hide calendar associated to `containerId` |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
235 |
*/ |
0 | 236 |
function toggleCalendar(containerId, inputId, year, month) { |
237 |
var cal = Calendar.REGISTRY[containerId]; |
|
238 |
if (!cal) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
239 |
cal = new Calendar(containerId, inputId, year, month); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
240 |
Calendar.REGISTRY[containerId] = cal; |
0 | 241 |
} |
242 |
/* hide other calendars */ |
|
243 |
for (containerId in Calendar.REGISTRY) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
244 |
var othercal = Calendar.REGISTRY[containerId]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
245 |
if (othercal !== cal) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
246 |
othercal.hide(); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
247 |
} |
0 | 248 |
} |
249 |
cal.toggle(); |
|
250 |
} |
|
251 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
252 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
253 |
* .. function:: toggleNextMonth(containerId) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
254 |
* |
0 | 255 |
* ask for next month to calendar displayed in `containerId` |
256 |
*/ |
|
257 |
function toggleNextMonth(containerId) { |
|
258 |
var cal = Calendar.REGISTRY[containerId]; |
|
259 |
cal.displayNextMonth(); |
|
260 |
} |
|
261 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
262 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
263 |
* .. function:: togglePreviousMonth(containerId) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
264 |
* |
0 | 265 |
* ask for previous month to calendar displayed in `containerId` |
266 |
*/ |
|
267 |
function togglePreviousMonth(containerId) { |
|
268 |
var cal = Calendar.REGISTRY[containerId]; |
|
269 |
cal.displayPreviousMonth(); |
|
270 |
} |
|
271 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
272 |
/** |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
273 |
* .. function:: dateSelected(cell, containerId) |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
274 |
* |
0 | 275 |
* Callback called when the user clicked on a cell in the popup calendar |
276 |
*/ |
|
277 |
function dateSelected(cell, containerId) { |
|
278 |
var cal = Calendar.REGISTRY[containerId]; |
|
279 |
var input = getNode(cal.inputId); |
|
280 |
// XXX: the use of innerHTML might cause problems, but it seems to be |
|
281 |
// the only way understood by both IE and Mozilla. Otherwise, |
|
282 |
// IE accepts innerText and mozilla accepts textContent |
|
283 |
var selectedDate = new Date(cal.year, cal.month, cell.innerHTML, 12); |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
284 |
var xxx = remoteExec("format_date", cw.utils.toISOTimestamp(selectedDate)); |
0 | 285 |
input.value = xxx; |
286 |
cal.hide(); |
|
287 |
} |
|
288 |
||
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
289 |
function whichElement(e) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
290 |
var targ; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
291 |
if (!e) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
292 |
var e = window.event; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
293 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
294 |
if (e.target) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
295 |
targ = e.target; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
296 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
297 |
else if (e.srcElement) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
298 |
targ = e.srcElement; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
299 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
300 |
if (targ.nodeType == 3) // defeat Safari bug |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
301 |
{ |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
302 |
targ = targ.parentNode; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
303 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
304 |
return targ; |
0 | 305 |
} |
306 |
||
307 |
function getPosition(element) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
308 |
var left; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
309 |
var top; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
310 |
var offset; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
311 |
// TODO: deal scrollbar positions also! |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
312 |
left = element.offsetLeft; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
313 |
top = element.offsetTop; |
0 | 314 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
315 |
if (element.offsetParent != null) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
316 |
offset = getPosition(element.offsetParent); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
317 |
left = left + offset[0]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
318 |
top = top + offset[1]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
319 |
|
0 | 320 |
} |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
321 |
return [left, top]; |
0 | 322 |
} |
323 |
||
324 |
function getMouseInBlock(event) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
325 |
var elt = event.target; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
326 |
var x = event.clientX; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
327 |
var y = event.clientY; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
328 |
var w = elt.clientWidth; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
329 |
var h = elt.clientHeight; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
330 |
var offset = getPosition(elt); |
0 | 331 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
332 |
x = 1.0 * (x - offset[0]) / w; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
333 |
y = 1.0 * (y - offset[1]) / h; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
334 |
return [x, y]; |
0 | 335 |
} |
336 |
function getHourFromMouse(event, hmin, hmax) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
337 |
var pos = getMouseInBlock(event); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
338 |
var y = pos[1]; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
339 |
return Math.floor((hmax - hmin) * y + hmin); |
0 | 340 |
} |
341 |
||
342 |
function addCalendarItem(event, hmin, hmax, year, month, day, duration, baseurl) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
343 |
var hour = getHourFromMouse(event, hmin, hmax); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
344 |
|
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
345 |
if (0 <= hour && hour < 24) { |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
346 |
baseurl += "&start=" + year + "%2F" + month + "%2F" + day + "%20" + hour + ":00"; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
347 |
baseurl += "&stop=" + year + "%2F" + month + "%2F" + day + "%20" + (hour + duration) + ":00"; |
0 | 348 |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
349 |
stopPropagation(event); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
350 |
window.location.assign(baseurl); |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
351 |
return false; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
352 |
} |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
353 |
return true; |
0 | 354 |
} |
355 |
||
356 |
function stopPropagation(event) { |
|
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
357 |
event.cancelBubble = true; |
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
358 |
if (event.stopPropagation) event.stopPropagation(); |
0 | 359 |
} |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
360 |
|
0 | 361 |
CubicWeb.provide('calendar.js'); |
5658
7b9553a9db65
[ajax] refactor/cleanup low-level ajax functions
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3096
diff
changeset
|
362 |