source: sandbox/2.3-MailArchiver/calendar/js/dhtmlx/sources/ext/ext_pdf.js @ 6779

Revision 6779, 7.2 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado Expresso(branch 2.3) integrado ao MailArchiver?.

Line 
1scheduler.toPDF=function(url,mode,header,footer){
2        var dx = 0;
3        var dy = 0;
4        var colors = false;
5        if (mode == "fullcolor"){
6                colors = true;
7                mode = "color";
8        }
9
10        mode = mode||"color";
11
12        function x_norm(x) {
13            x = parseFloat(x);
14            if (isNaN(x)) return "auto";
15            return 100 * x / dx;
16        }
17        function y_norm(y) {
18            y = parseFloat(y);
19            if (isNaN(y)) return "auto";
20            return 100 * y / dy;
21        }
22        function xml_month_scale(xh){
23                var xml="";
24                for (var i = 0; i < xh.length; i++)
25                        xml += "\n<column><![CDATA[" + xh[i].innerHTML + "]]></column>";
26                dx = xh[0].offsetWidth;
27                return xml;
28        }
29        function de_day(node,n){
30                var x = parseInt(node.style.left);
31
32                for (var dx=0; dx < scheduler._cols.length; dx++){
33                        x-=scheduler._cols[dx];
34                        if (x<0) return dx;
35                }
36                return n;
37        }
38        function de_week(node,n){
39                var y = parseInt(node.style.top);
40                for (var dy=0; dy < scheduler._colsS.heights.length; dy++)
41                        if (scheduler._colsS.heights[dy]>y) return dy;
42                return n;
43        }
44        function xml_month(yh){
45                var xml="";
46        var r = yh.firstChild.rows;
47        for (var i = 0; i < r.length; i++) {
48            var days = [];
49            for (var j = 0; j < r[i].cells.length; j++){
50            /*  var dd = r[i].cells[j];
51                var css = dd.className;
52
53                if (css!=" " && css!="dhx_now ")
54                        days.push("");
55                else*/
56                        days.push(r[i].cells[j].firstChild.innerHTML);
57            }
58
59            xml += "\n<row height='"+yh.firstChild.rows[i].cells[0].offsetHeight+"'><![CDATA[" + days.join("|") + "]]></row>";
60            dy = yh.firstChild.rows[0].cells[0].offsetHeight;
61        }
62        return xml;
63        }
64        function xml_top(profile) {
65            var xml = "<data profile='"+profile+"'";
66               if (header)
67                  xml+=" header='"+header+"'";
68               if (footer)
69                  xml+=" footer='"+footer+"'";
70            xml+=">";
71            xml += "<scale mode='" + scheduler._mode + "' today='" + scheduler._els.dhx_cal_date[0].innerHTML + "'>";
72
73            if (scheduler._mode == "agenda"){
74                var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes;
75
76                xml+="<column>"+xh[0].innerHTML+"</column><column>"+xh[1].innerHTML+"</column>"
77            } else if (scheduler._mode == "year"){
78                var xh = scheduler._els.dhx_cal_data[0].childNodes;
79                for (var i=0; i < xh.length; i++) {
80                        xml+="<month label='"+xh[i].childNodes[0].innerHTML+"'>";
81                                xml+=xml_month_scale(xh[i].childNodes[1].childNodes);
82                                xml+=xml_month(xh[i].childNodes[2]);
83                        xml+="</month>";
84                };
85            } else {
86                    xml += "<x>";
87                    var xh = scheduler._els.dhx_cal_header[0].childNodes;
88                        xml+=xml_month_scale(xh);
89                    xml += "</x>";
90
91                    var yh = scheduler._els.dhx_cal_data[0];
92                    if (yh.firstChild.tagName == "TABLE") {
93                                xml += xml_month(yh);
94                    } else {
95                                yh = yh.childNodes[yh.childNodes.length - 1];
96                        while (yh.className.indexOf("dhx_scale_holder") == -1)
97                            yh = yh.previousSibling;
98                        yh = yh.childNodes;
99
100                        xml += "<y>";
101                        for (var i = 0; i < yh.length; i++)
102                            xml += "\n<row><![CDATA[" + yh[i].innerHTML + "]]></row>";
103                        xml += "</y>";
104                        dy = yh[0].offsetHeight;
105                    }
106                }
107
108            xml += "</scale>";
109            return xml;
110        }
111        function get_style(node, style){
112                return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||"";
113        }
114        function xml_body() {
115            var xml = "";
116            var evs = scheduler._rendered;
117
118            if (scheduler._mode == "agenda"){
119                for (var i=0; i < evs.length; i++)
120                        xml+="<event><head>"+evs[i].childNodes[0].innerHTML+"</head><body>"+evs[i].childNodes[2].innerHTML+"</body></event>";
121            } else if (scheduler._mode == "year"){
122                var evs = scheduler.get_visible_events();
123                for (var i=0; i < evs.length; i++) {
124                        var d = evs[i].start_date;
125                                if (d.valueOf()<scheduler._min_date.valueOf())
126                                d = scheduler._min_date;
127                                while (d<evs[i].end_date){
128                                        var m = d.getMonth()+12*(d.getFullYear()-scheduler._min_date.getFullYear())-scheduler.week_starts._month;
129                                        var day  = scheduler.week_starts[m]+d.getDate()-1;
130
131                                        xml+="<event day='"+(day%7)+"' week='"+Math.floor(day/7)+"' month='"+m+"'></event>";
132                                scheduler._mark_year_date(d);
133                                d = scheduler.date.add(d,1,"day");
134                                if (d.valueOf()>=scheduler._max_date.valueOf())
135                                        break;
136                        }
137                        }
138            } else {
139                    for (var i = 0; i < evs.length; i++) {
140                        var zx = x_norm(evs[i].style.left);
141                        var zy = y_norm(evs[i].style.top);
142                        var zdx = x_norm(evs[i].style.width);
143                        var zdy = y_norm(evs[i].style.height);
144                        var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", "");
145                        var dets = scheduler.getEvent(evs[i].getAttribute("event_id"))
146                        var day = dets._sday;
147                        var week = dets._sweek;
148                        if (scheduler._mode != "month" && scheduler._mode != "week") {
149                           if (parseInt(evs[i].style.left) <= 26) {
150                              zx = 2;
151                              zdx += x_norm(evs[i].style.left)-1;
152                           }
153                            if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue;
154                            zx += x_norm(evs[i].parentNode.style.left);
155                            zx -= x_norm(51);
156                        } else {
157                            zdy = parseInt(evs[i].offsetHeight);
158                            zy = parseInt(evs[i].style.top) - 22;
159                            if(scheduler._mode == "month" ){
160                                day = de_day(evs[i],day);
161                                week = de_week(evs[i],week);
162                            }
163                        }
164
165                        xml += "\n<event week='"+week+"' day='"+day+"' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "'>";
166
167
168                        if (e_type == "event") {
169                            xml += "<header><![CDATA[" + evs[i].childNodes[1].innerHTML + "]]></header>";
170                            var text_color = colors?get_style(evs[i].childNodes[2],"color"):"";
171                                var bg_color = colors?get_style(evs[i].childNodes[2],"backgroundColor"):"";
172                            xml += "<body backgroundColor='"+bg_color+"' color='" + text_color + "'><![CDATA[" + evs[i].childNodes[2].innerHTML + "]]></body>";
173                        } else {
174                            var text_color = colors?get_style(evs[i],"color"):"";
175                                var bg_color = colors?get_style(evs[i],"backgroundColor"):"";
176                            xml += "<body backgroundColor='"+bg_color+"' color='" + text_color + "'><![CDATA[" + evs[i].innerHTML + "]]></body>";
177                        }
178                        xml += "</event>";
179                    }
180            }
181            return xml;
182        }
183        function xml_end(){
184            var xml = "</data>";
185            return xml;
186        }
187
188        var uid = (new Date()).valueOf();
189        var d=document.createElement("div");
190        d.style.display="none";
191        document.body.appendChild(d);
192
193        d.innerHTML = '<form id="'+uid+'" method="post" target="_blank" action="'+url+'" accept-charset="utf-8" enctype="text/html"><input type="hidden" name="mycoolxmlbody"/> </form>';
194        document.getElementById(uid).firstChild.value = xml_top(mode).replace("\u2013", "-") + xml_body() + xml_end();
195        document.getElementById(uid).submit();
196        d.parentNode.removeChild(d);grid = null;
197}
Note: See TracBrowser for help on using the repository browser.