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
5
scheduler.toPDF=function(url,mode,header,footer){
9
if (mode == "fullcolor"){
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,"");
22
if (isNaN(x)) return "auto";
23
return 100 * x / (dx + 1);
27
if (isNaN(y)) return "auto";
30
function xml_month_scale(xh){
32
if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
33
if (scheduler.matrix[scheduler._mode].second_scale)
34
var xhs = xh[1].childNodes;
36
xh = xh[0].childNodes;
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;
46
var top_width = xh[0].offsetWidth;
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);
55
dx = xhs[0].offsetWidth;
60
function de_day(node,n){
61
var x = parseInt(node.style.left,10);
63
for (var dx=0; dx < scheduler._cols.length; dx++){
64
x-=scheduler._cols[dx];
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;
75
function xml_month(yh){
77
var r = yh.firstChild.rows;
78
for (var i = 0; i < r.length; i++) {
80
for (var j = 0; j < r[i].cells.length; j++){
81
/* var dd = r[i].cells[j];
82
var css = dd.className;
84
if (css!=" " && css!="dhx_now ")
87
days.push(r[i].cells[j].firstChild.innerHTML);
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;
95
function xml_top(profile) {
96
var xml = "<data profile='"+profile+"'";
98
xml+=" header='"+header+"'";
100
xml+=" footer='"+footer+"'";
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 + "'>";
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;
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]);
127
var xh = scheduler._els.dhx_cal_header[0].childNodes;
128
xml+=xml_month_scale(xh);
131
var yh = scheduler._els.dhx_cal_data[0];
132
if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
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>";
139
dy = yh.firstChild.rows[0].cells[0].offsetHeight;
140
} else if (yh.firstChild.tagName == "TABLE") {
141
xml += xml_month(yh);
143
yh = yh.childNodes[yh.childNodes.length - 1];
144
while (yh.className.indexOf("dhx_scale_holder") == -1)
145
yh = yh.previousSibling;
149
for (var i = 0; i < yh.length; i++)
150
xml += "\n<row><![CDATA[" + clean_html(yh[i].innerHTML) + "]]></row>";
152
dy = yh[0].offsetHeight;
158
function get_style(node, style){
159
return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||"";
161
function xml_body() {
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"):"";
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())
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>";
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]){
214
var el = evs[i].parentNode.parentNode.parentNode;
219
if (scheduler.xy.menu_width){
220
zdx+=x_norm(zdx*20/100);
221
zx-=x_norm(15-zx*20/100);
224
if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue;
225
zx += x_norm(evs[i].parentNode.style.left);
228
if (scheduler.matrix && scheduler.matrix[scheduler._mode]) {
230
dy = evs[i].parentNode.offsetHeight;
231
zy = y_norm(evs[i].style.top);
236
zdy = parseInt(evs[i].offsetHeight,10);
237
zy = parseInt(evs[i].style.top,10) - 22;
239
day = de_day(evs[i],day);
240
week = de_week(evs[i],week);
243
xml += "\n<event week='"+week+"' day='"+day+"' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "' len='" + length + "'>";
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>";
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>";
267
var uid = (new Date()).valueOf();
268
var d=document.createElement("div");
269
d.style.display="none";
270
document.body.appendChild(d);
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;
b'\\ No newline at end of file'