catch exception rised in explorer 8
[brisk.git] / web / Obj / transports.phh
1 <?php
2 /*
3  *  sac-a-push - Obj/transports.phh
4  *
5  *  Copyright (C) 2012 Matteo Nastasi
6  *                          mailto: nastasi@alternativeoutput.it 
7  *                                  matteo.nastasi@milug.org
8  *                          web: http://www.alternativeoutput.it
9  *
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.
14  *
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.
22  *
23  */
24
25 /*
26  *  test: SO x Browser
27  *  Values: Y: works, N: not works, @: continuous download,
28  *          D: continuous download after first reload
29  *
30  *  Stream IFRAME:
31  *
32  * Iframe| IW | FF | Ch | Op | Ko | IE
33  * ------+----+----+----+----+----+----
34  *   Lnx | D  |    | @  |    | @  | x
35  *   Win | x  | D  | @  | @  |    | D
36  *   Mac | x  |    |    |    |    |
37  *
38  *
39  *   XHR | IW | FF | Ch | Op | Ko | IE
40  * ------+----+----+----+----+----+----
41  *   Lnx | Y  |    | ^D |    | Y  | x
42  *   Win | x  | Y  | Y  |    |    | N
43  *   Mac | x  |    |    |    |    |
44  *
45  *
46  * HtmlFl| IW | FF | Ch | Op | Ko | IE
47  * ------+----+----+----+----+----+----
48  *   Lnx | N  |    |    |    | N  |
49  *   Win | x  | N  | N  |    |    | Y* (* seems delay between click and load of a new page)
50  *   Mac | x  |    |    |    |    |
51  *
52  *
53  */
54
55
56 class Transport_template {
57
58     function Transport_template() {
59     }
60
61     function init($enc, &$header_out, $init_string, $base, $step)
62     {
63     }
64
65     static function fini($init_string, $base, $blockerr)
66     {
67     }
68
69     function chunk($step, $cont)
70     {
71     }
72 }
73
74 class Transport_xhr {
75
76     function Transport_xhr() {
77     }
78
79     function init($enc, &$header_out, $init_string, $base, $step)
80     {
81         $ret = sprintf("@BEGIN@ /* %s */ @END@", $init_string);
82         if ($enc != 'plain')
83             $header_out['Content-Encoding'] = $enc;
84         $header_out['Cache-Control'] = 'no-cache, must-revalidate';     // HTTP/1.1
85         $header_out['Expires']       = 'Mon, 26 Jul 1997 05:00:00 GMT'; // Date in the past
86         $header_out['Content-type']  = 'application/xml; charset="utf-8"';
87
88         return ($ret);
89     }
90
91     static function fini($init_string, $base, $blockerr)
92     {
93         return ("");
94     }
95
96     function chunk($step, $cont)
97     {
98         return ("@BEGIN@".$cont."@END@");
99     }
100 }
101
102 class Transport_iframe {
103
104     function Transport_iframe() {
105     }
106
107     function init($enc, &$header_out, $init_string, $base, $step)
108     {
109         $ret = "";
110
111         if ($enc != 'plain')
112             $header_out['Content-Encoding'] = $enc;
113         $header_out['Cache-Control'] = 'no-cache, must-revalidate';     // HTTP/1.1
114         $header_out['Expires']       = 'Mon, 26 Jul 1997 05:00:00 GMT'; // Date in the past
115         $header_out['Content-type']  = 'text/html; charset="utf-8"';
116         
117         $ret .= sprintf("<html>
118 <head>
119 <script type=\"text/javascript\" src=\"%scommons.js\"></script>
120 <script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
121 <script type=\"text/javascript\">
122 var xynt_streaming = \"ready\";", $base, $base);
123         if ($step > 0)
124             $ret .= sprintf("last_clean = %d;\n", ($step-1));
125         $ret .= sprintf("
126 window.onload = function () { try { if (xynt_streaming != \"ready\") { xynt_streaming.transp.stopped = true; } } catch(e) { /* console.log(\"catcha\"); */ } };
127 </script> 
128 </head>
129 <body>");
130         $ret .= sprintf("<!-- \n%s -->\n", $init_string);
131
132         return ($ret);
133     }
134
135     static function fini($init_string, $base, $blockerr)
136     {
137         $ret = "";
138         $ret .= sprintf("<html>
139 <head>
140 <script type=\"text/javascript\" src=\"%scommons.js\"></script>
141 <script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
142 <script type=\"text/javascript\">
143 var xynt_streaming = \"ready\";", $base, $base);
144         $ret .= sprintf("
145 window.onload = function () { try { if (xynt_streaming != \"ready\") { xynt_streaming.reload(); } } catch(e) { /* console.log(\"catcha\"); */ } };
146 </script>
147 </head>
148 <body>");
149         $ret .= sprintf("<!-- \n%s -->\n", $init_string);
150         $ret .= sprintf("<script id='hs%d' type='text/javascript'><!--
151 push(\"%s\");
152 // -->
153 </script>", 0, escpush($blockerr) );
154         return ($ret);
155     }
156
157     function chunk($step, $cont)
158     {
159         if ($cont == NULL) {
160             return sprintf("<script id='hs%d' type='text/javascript'><!--
161 push(null);\n// -->\n</script>", $step);
162         }
163         else {
164             return sprintf("<script id='hs%d' type='text/javascript'><!--
165 push(\"%s\");\n// -->\n</script>", $step, escpush($cont) );
166         }
167     }
168 }
169
170 class Transport_htmlfile extends Transport_iframe {
171 }
172
173 class Transport {
174     function Transport()
175     {
176     }
177
178     static function create($transp)
179     {
180         if ($transp == 'xhr') {
181             return new Transport_xhr();
182         }
183         else if ($transp == 'htmlfile') {
184             return new Transport_htmlfile();
185         }
186         else  {
187             return new Transport_iframe();
188         }
189     }
190 }
191 ?>