~tempo-openerp/+junk/loewert-prod

« back to all changes in this revision

Viewing changes to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_pdf.js

  • Committer: jbe at tempo-consulting
  • Date: 2013-08-21 08:48:11 UTC
  • Revision ID: jbe@tempo-consulting.fr-20130821084811-913uo4l7b5ayxq8m
[NEW] Création de la branche trunk Loewert

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
 
3
to use it in non-GPL project. Please contact sales@dhtmlx.com for details
 
4
*/
 
5
scheduler.toPDF=function(url,mode,header,footer){ 
 
6
        var dx = 0;
 
7
        var dy = 0;
 
8
        var colors = false;
 
9
        if (mode == "fullcolor"){
 
10
                colors = true;
 
11
                mode = "color";
 
12
        }
 
13
                
 
14
        mode = mode||"color";
 
15
        html_regexp = new RegExp("<[^>]*>","g");
 
16
        newline_regexp = new RegExp("<br[^>]*>","g");
 
17
        function clean_html(val){
 
18
                return val.replace(newline_regexp, "\n").replace(html_regexp,"");
 
19
        }
 
20
        function x_norm(x) {
 
21
            x = parseFloat(x);
 
22
            if (isNaN(x)) return "auto";
 
23
            return 100 * x / (dx + 1);
 
24
        }
 
25
        function y_norm(y) {
 
26
            y = parseFloat(y);
 
27
            if (isNaN(y)) return "auto";
 
28
            return 100 * y / dy;
 
29
        }
 
30
        function xml_month_scale(xh){
 
31
                var xml="";
 
32
                if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
 
33
                        if (scheduler.matrix[scheduler._mode].second_scale)
 
34
                                var xhs = xh[1].childNodes;
 
35
 
 
36
                        xh = xh[0].childNodes;
 
37
                }
 
38
                        
 
39
 
 
40
                for (var i = 0; i < xh.length; i++)
 
41
                        xml += "\n<column><![CDATA[" + clean_html(xh[i].innerHTML) + "]]></column>";
 
42
                dx = xh[0].offsetWidth;
 
43
 
 
44
                if (xhs) {
 
45
                        var width = 0;
 
46
                        var top_width = xh[0].offsetWidth;
 
47
                        var top_col = 1;
 
48
                        for (var i = 0; i < xhs.length; i++) {
 
49
                                xml += "\n<column second_scale='"+top_col+"'><![CDATA[" + clean_html(xhs[i].innerHTML) + "]]></column>";
 
50
                                width+=xhs[i].offsetWidth;
 
51
                                if (width>=top_width){
 
52
                                        top_width+=(xh[top_col] ? xh[top_col].offsetWidth: 0);
 
53
                                        top_col++;
 
54
                                }
 
55
                                dx = xhs[0].offsetWidth;
 
56
                        }
 
57
                }
 
58
                return xml;
 
59
        }
 
60
        function de_day(node,n){ 
 
61
                var x = parseInt(node.style.left,10);
 
62
                
 
63
                for (var dx=0; dx < scheduler._cols.length; dx++){
 
64
                        x-=scheduler._cols[dx];
 
65
                        if (x<0) return dx;
 
66
                }
 
67
                return n;
 
68
        }
 
69
        function de_week(node,n){ 
 
70
                var y = parseInt(node.style.top,10);
 
71
                for (var dy=0; dy < scheduler._colsS.heights.length; dy++)
 
72
                        if (scheduler._colsS.heights[dy]>y) return dy;
 
73
                return n;
 
74
        }
 
75
        function xml_month(yh){
 
76
                var xml="";
 
77
        var r = yh.firstChild.rows;
 
78
        for (var i = 0; i < r.length; i++) {
 
79
            var days = [];
 
80
            for (var j = 0; j < r[i].cells.length; j++){
 
81
            /*  var dd = r[i].cells[j];
 
82
                var css = dd.className;
 
83
                
 
84
                if (css!=" " && css!="dhx_now ")
 
85
                        days.push("");
 
86
                else*/
 
87
                        days.push(r[i].cells[j].firstChild.innerHTML);
 
88
            }
 
89
 
 
90
            xml += "\n<row height='"+yh.firstChild.rows[i].cells[0].offsetHeight+"'><![CDATA[" + clean_html(days.join("|")) + "]]></row>";
 
91
            dy = yh.firstChild.rows[0].cells[0].offsetHeight;
 
92
        }
 
93
        return xml;
 
94
        }
 
95
        function xml_top(profile) {
 
96
            var xml = "<data profile='"+profile+"'";
 
97
               if (header)
 
98
                  xml+=" header='"+header+"'";
 
99
               if (footer)
 
100
                  xml+=" footer='"+footer+"'";
 
101
            xml+=">";
 
102
                // detects if current mode is timeline
 
103
                var mode = scheduler._mode;
 
104
                if (scheduler.matrix && scheduler.matrix[scheduler._mode])
 
105
                        mode = (scheduler.matrix[scheduler._mode].render == "cell") ? "matrix" : "timeline";
 
106
            xml += "<scale mode='" + mode + "' today='" + scheduler._els.dhx_cal_date[0].innerHTML + "'>";
 
107
            
 
108
            if (scheduler._mode == "week_agenda"){
 
109
                var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV");
 
110
                for (var i=0; i<xh.length; i++)
 
111
                        if (xh[i].className == "dhx_wa_scale_bar")
 
112
                                xml+="<column>"+clean_html(xh[i].innerHTML)+"</column>";
 
113
            } else if (scheduler._mode == "agenda" || scheduler._mode == "map"){
 
114
                var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes;
 
115
                
 
116
                xml+="<column>"+clean_html(xh[0].innerHTML)+"</column><column>"+clean_html(xh[1].innerHTML)+"</column>";
 
117
            } else if (scheduler._mode == "year"){
 
118
                var xh = scheduler._els.dhx_cal_data[0].childNodes;
 
119
                for (var i=0; i < xh.length; i++) {
 
120
                        xml+="<month label='"+clean_html(xh[i].childNodes[0].innerHTML)+"'>";
 
121
                                xml+=xml_month_scale(xh[i].childNodes[1].childNodes);
 
122
                                xml+=xml_month(xh[i].childNodes[2]);
 
123
                        xml+="</month>";
 
124
                }
 
125
                } else {
 
126
                        xml += "<x>";
 
127
                    var xh = scheduler._els.dhx_cal_header[0].childNodes;
 
128
                        xml+=xml_month_scale(xh);
 
129
                    xml += "</x>";
 
130
 
 
131
                        var yh = scheduler._els.dhx_cal_data[0];
 
132
                        if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
 
133
                                xml += "<y>";
 
134
                                for (var i=0; i < yh.firstChild.rows.length; i++) {
 
135
                                        var el = yh.firstChild.rows[i];
 
136
                                        xml+="<row><![CDATA["+clean_html(el.cells[0].innerHTML)+"]]></row>";
 
137
                                }
 
138
                                xml+="</y>";
 
139
                                dy = yh.firstChild.rows[0].cells[0].offsetHeight;
 
140
                        } else if (yh.firstChild.tagName == "TABLE") {
 
141
                                xml += xml_month(yh);
 
142
                    } else {
 
143
                                yh = yh.childNodes[yh.childNodes.length - 1];
 
144
                        while (yh.className.indexOf("dhx_scale_holder") == -1)
 
145
                            yh = yh.previousSibling;
 
146
                        yh = yh.childNodes;
 
147
 
 
148
                        xml += "<y>";
 
149
                        for (var i = 0; i < yh.length; i++)
 
150
                            xml += "\n<row><![CDATA[" + clean_html(yh[i].innerHTML) + "]]></row>";
 
151
                        xml += "</y>";
 
152
                        dy = yh[0].offsetHeight;
 
153
                    }
 
154
                }
 
155
            xml += "</scale>";
 
156
            return xml;
 
157
        }
 
158
        function get_style(node, style){
 
159
                return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||"";
 
160
        }
 
161
        function xml_body() { 
 
162
            var xml = "";
 
163
            var evs = scheduler._rendered;
 
164
            if (scheduler._mode == "agenda" || scheduler._mode == "map"){
 
165
                for (var i=0; i < evs.length; i++)
 
166
                        xml+="<event><head>"+clean_html(evs[i].childNodes[0].innerHTML)+"</head><body>"+clean_html(evs[i].childNodes[2].innerHTML)+"</body></event>";
 
167
            } else if (scheduler._mode == "week_agenda"){
 
168
                for (var i=0; i < evs.length; i++)
 
169
                        xml+="<event day='"+evs[i].parentNode.getAttribute("day")+"'><body>"+clean_html(evs[i].innerHTML)+"</body></event>";
 
170
            } else if (scheduler._mode == "year"){
 
171
                var evs = scheduler.get_visible_events();
 
172
                for (var i=0; i < evs.length; i++) {
 
173
                        var d = evs[i].start_date;
 
174
                                if (d.valueOf()<scheduler._min_date.valueOf()) 
 
175
                                d = scheduler._min_date;
 
176
                                while (d<evs[i].end_date){
 
177
                                        var m = d.getMonth()+12*(d.getFullYear()-scheduler._min_date.getFullYear())-scheduler.week_starts._month; 
 
178
                                        var day  = scheduler.week_starts[m]+d.getDate()-1;
 
179
                                        var text_color = colors?get_style(scheduler._get_year_cell(d),"color"):"";
 
180
                                        var bg_color = colors?get_style(scheduler._get_year_cell(d),"backgroundColor"):"";
 
181
 
 
182
                                        xml+="<event day='"+(day%7)+"' week='"+Math.floor(day/7)+"' month='"+m+"' backgroundColor='"+bg_color+"' color='" + text_color + "'></event>";
 
183
                                d = scheduler.date.add(d,1,"day");
 
184
                                if (d.valueOf()>=scheduler._max_date.valueOf()) 
 
185
                                        break;
 
186
                        }
 
187
                        }   
 
188
            } else {
 
189
                    var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode];
 
190
                    if (matrix && matrix.render == "cell"){
 
191
                        var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD");
 
192
                        for (var i = 0; i < evs.length; i++){
 
193
                                var text_color = colors?get_style(evs[i],"color"):"";
 
194
                                var bg_color = colors?get_style(evs[i],"backgroundColor"):"";
 
195
                            xml += "\n<event><body backgroundColor='"+bg_color+"' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body></event>";
 
196
                        }
 
197
                    } else {
 
198
                            for (var i = 0; i < evs.length; i++) {
 
199
                                var zx = x_norm(evs[i].style.left);
 
200
                                var zdx = x_norm(evs[i].style.width);
 
201
                                if (isNaN(zdx*1)) continue;
 
202
                                var zy = y_norm(evs[i].style.top);
 
203
                                var zdy = y_norm(evs[i].style.height);
 
204
                                var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", "");
 
205
                                        if (e_type === 'dhx_tooltip_line') continue;
 
206
                                var dets = scheduler.getEvent(evs[i].getAttribute("event_id"));
 
207
//                                      if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue;
 
208
                                var day = dets._sday;
 
209
                                var week = dets._sweek;
 
210
                                        var length = dets._length || 0;
 
211
                                if (scheduler._mode != "month") {
 
212
                                    if (scheduler.matrix && scheduler.matrix[scheduler._mode]){
 
213
                                        day = 0;
 
214
                                                        var el = evs[i].parentNode.parentNode.parentNode;
 
215
                                        week = el.rowIndex;
 
216
                                        zdx += x_norm(10);
 
217
                                    } else {
 
218
                                        
 
219
                                        if (scheduler.xy.menu_width){
 
220
                                                zdx+=x_norm(zdx*20/100);
 
221
                                                                zx-=x_norm(15-zx*20/100);
 
222
                                                        }
 
223
                                                
 
224
                                        if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue;
 
225
                                        zx += x_norm(evs[i].parentNode.style.left);
 
226
                                        zx -= x_norm(51);
 
227
                                    }
 
228
                                                if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
 
229
                                                        var dy_copy = dy;
 
230
                                                        dy = evs[i].parentNode.offsetHeight;
 
231
                                                        zy = y_norm(evs[i].style.top);
 
232
                                                        zy -= zy*0.2;
 
233
                                                        dy = dy_copy;
 
234
                                                }
 
235
                                } else {
 
236
                                    zdy = parseInt(evs[i].offsetHeight,10);
 
237
                                    zy = parseInt(evs[i].style.top,10) - 22;
 
238
                                    
 
239
                                    day = de_day(evs[i],day);
 
240
                                    week = de_week(evs[i],week);
 
241
                                }
 
242
                                
 
243
                                xml += "\n<event week='"+week+"' day='"+day+"' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "' len='" + length + "'>";
 
244
                                
 
245
                                
 
246
                                if (e_type == "event") {
 
247
                                    xml += "<header><![CDATA[" + clean_html(evs[i].childNodes[1].innerHTML) + "]]></header>";
 
248
                                    var text_color = colors?get_style(evs[i].childNodes[2],"color"):"";
 
249
                                        var bg_color = colors?get_style(evs[i].childNodes[2],"backgroundColor"):"";
 
250
                                    xml += "<body backgroundColor='"+bg_color+"' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body>";
 
251
                                } else {
 
252
                                    var text_color = colors?get_style(evs[i],"color"):"";
 
253
                                        var bg_color = colors?get_style(evs[i],"backgroundColor"):"";
 
254
                                    xml += "<body backgroundColor='"+bg_color+"' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body>";
 
255
                                }
 
256
                                xml += "</event>";
 
257
                            }
 
258
                        }
 
259
            }
 
260
            return xml;
 
261
        }
 
262
        function xml_end(){
 
263
            var xml = "</data>";
 
264
            return xml;
 
265
        }
 
266
        
 
267
        var uid = (new Date()).valueOf();
 
268
        var d=document.createElement("div");
 
269
        d.style.display="none";
 
270
        document.body.appendChild(d);
 
271
 
 
272
        d.innerHTML = '<form id="'+uid+'" method="post" target="_blank" action="'+url+'" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>';
 
273
        document.getElementById(uid).firstChild.value = encodeURIComponent(xml_top(mode).replace("\u2013", "-") + xml_body() + xml_end());
 
274
        document.getElementById(uid).submit();
 
275
        d.parentNode.removeChild(d);grid = null;        
 
276
};
 
 
b'\\ No newline at end of file'