3 * sac-a-push - Obj/transports.phh
5 * Copyright (C) 2012 Matteo Nastasi
6 * mailto: nastasi@alternativeoutput.it
7 * matteo.nastasi@milug.org
8 * web: http://www.alternativeoutput.it
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details. You should have received a
19 * copy of the GNU General Public License along with this program; if
20 * not, write to the Free Software Foundation, Inc, 59 Temple Place -
21 * Suite 330, Boston, MA 02111-1307, USA.
27 * Values: Y: works, N: not works, @: continuous download,
28 * D: continuous download after first reload
32 * Iframe| IW | FF | Ch | Op | Ko | IE
33 * ------+----+----+----+----+----+----
34 * Lnx | D | | @ | | @ | x
35 * Win | x | D | @ | @ | | D
39 * XHR | IW | FF | Ch | Op | Ko | IE
40 * ------+----+----+----+----+----+----
41 * Lnx | Y | | ^D | | Y | x
42 * Win | x | Y | Y | | | N
46 * HtmlFl| IW | FF | Ch | Op | Ko | IE
47 * ------+----+----+----+----+----+----
49 * Win | x | N | N | | | Y* (* seems delay between click and load of a new page)
56 class Transport_template {
58 function Transport_template() {
61 function init($enc, &$header_out, $init_string, $base, $step)
65 static function fini($init_string, $base, $blockerr)
69 function chunk($step, $cont)
80 function Transport_xhr() {
83 function init($enc, &$header_out, $init_string, $base, $step)
85 $ret = sprintf("@BEGIN@ /* %s */ @END@", $init_string);
87 $header_out['Content-Encoding'] = $enc;
88 $header_out['Cache-Control'] = 'no-cache, must-revalidate'; // HTTP/1.1
89 $header_out['Expires'] = 'Mon, 26 Jul 1997 05:00:00 GMT'; // Date in the past
90 $header_out['Content-type'] = 'application/xml; charset="utf-8"';
95 static function fini($init_string, $base, $blockerr)
97 return (sprintf('@BEGIN@ %s window.onbeforeunload = null; window.onunload = null; document.location.assign("%sindex.php"); @END@', ($blockerr ? 'xstm.stop(); ' : ''), $base));
101 function chunk($step, $cont)
103 return ("@BEGIN@".$cont."@END@");
106 function is_chunked()
112 class Transport_iframe {
114 function Transport_iframe() {
117 function init($enc, &$header_out, $init_string, $base, $step)
122 $header_out['Content-Encoding'] = $enc;
123 $header_out['Cache-Control'] = 'no-cache, must-revalidate'; // HTTP/1.1
124 $header_out['Expires'] = 'Mon, 26 Jul 1997 05:00:00 GMT'; // Date in the past
125 $header_out['Content-type'] = 'text/html; charset="utf-8"';
127 $ret .= sprintf("<html>
129 <script type=\"text/javascript\" src=\"%scommons.js\"></script>
130 <script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
131 <script type=\"text/javascript\">
132 var xynt_streaming = \"ready\";", $base, $base);
134 $ret .= sprintf("last_clean = %d;\n", ($step-1));
136 window.onload = function () { try { if (xynt_streaming != \"ready\") { xynt_streaming.transp.stopped = true; } } catch(e) { /* console.log(\"catcha\"); */ } };
140 $ret .= sprintf("<!-- \n%s -->\n", $init_string);
145 static function fini($init_string, $base, $blockerr)
148 $ret .= sprintf("<html>
150 <script type=\"text/javascript\" src=\"%scommons.js\"></script>
151 <script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
152 <script type=\"text/javascript\">
153 var xynt_streaming = \"ready\";", $base, $base);
155 window.onload = function () { try { if (xynt_streaming != \"ready\") { xynt_streaming.reload(); } } catch(e) { /* console.log(\"catcha\"); */ } };
159 $ret .= sprintf("<!-- \n%s -->\n", $init_string);
160 $ret .= sprintf("<script id='hs%d' type='text/javascript'><!--
163 </script>", 0, escpush($blockerr) );
167 function chunk($step, $cont)
170 return sprintf("<script id='hs%d' type='text/javascript'><!--
171 push(null);\n// -->\n</script>", $step);
174 return sprintf("<script id='hs%d' type='text/javascript'><!--
175 push(\"%s\");\n// -->\n</script>", $step, escpush($cont) );
179 function is_chunked()
185 class Transport_htmlfile extends Transport_iframe {
193 static function create($transp)
195 if ($transp == 'xhr') {
196 return new Transport_xhr();
198 else if ($transp == 'htmlfile') {
199 return new Transport_htmlfile();
202 return new Transport_iframe();
205 static function gettype($transp)
207 if ($transp == 'xhr' || $transp == 'htmlfile') {
208 return "Transport_".$transp;
211 return 'Transport_iframe';