Skip to content

Commit 25f24b0

Browse files
committed
Add support for ob callback
1 parent b48a0b7 commit 25f24b0

File tree

8 files changed

+80
-12
lines changed

8 files changed

+80
-12
lines changed

_experimental/outcontrol/flush.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,23 @@ function flush () {
44
// * example 1: flush();
55
// * returns 1: undefined
66

7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_CONT = 2;
78
this.php_js = this.phpjs || {};
89
var phpjs = this.php_js, obs = phpjs.obs;
910

1011
// Not distinct from ob_flush() in JavaScript, since not sending to a browser
1112
if (!obs || !obs.length) {
1213
return;
1314
}
14-
this.echo(obs[obs.length-1].buffer);
15-
obs[obs.length-1].buffer = '';
15+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
16+
if (obs.callback) {
17+
if (!ob.status) {
18+
flags |= PHP_OUTPUT_HANDLER_START;
19+
}
20+
flags |= PHP_OUTPUT_HANDLER_CONT;
21+
ob.status = 2;
22+
buffer = obs.callback(buffer, flags);
23+
}
24+
this.echo(buffer);
25+
ob.buffer = '';
1626
}

_experimental/outcontrol/ob_clean.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,21 @@ function ob_clean () {
44
// * example 1: ob_clean();
55
// * returns 1: undefined
66

7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_CONT = 2;
78
this.php_js = this.phpjs || {};
89
var phpjs = this.php_js, obs = phpjs.obs;
910

1011
if (!obs || !obs.length) {
1112
return;
1213
}
13-
obs[obs.length-1].buffer = '';
14+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
15+
if (obs.callback) {
16+
if (!ob.status) {
17+
flags |= PHP_OUTPUT_HANDLER_START;
18+
}
19+
flags |= PHP_OUTPUT_HANDLER_CONT;
20+
ob.status = 1;
21+
buffer = obs.callback(buffer, flags);
22+
}
23+
ob.buffer = '';
1424
}

_experimental/outcontrol/ob_end_clean.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@ function ob_end_clean () {
44
// * example 1: ob_end_clean();
55
// * returns 1: true
66

7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_END = 4;
78
this.php_js = this.phpjs || {};
89
var phpjs = this.php_js, obs = phpjs.obs;
910

1011
if (!obs || !obs.length) {
1112
return false;
1213
}
14+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
15+
if (obs.callback) {
16+
if (!ob.status) {
17+
flags |= PHP_OUTPUT_HANDLER_START;
18+
}
19+
flags |= PHP_OUTPUT_HANDLER_END;
20+
ob.status = 2;
21+
buffer = obs.callback(buffer, flags);
22+
}
1323
obs.pop();
1424
return true;
1525
}

_experimental/outcontrol/ob_end_flush.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,26 @@ function ob_end_flush () {
33
// + original by: Brett Zamir (http://brett-zamir.me)
44
// * example 1: ob_end_flush();
55
// * returns 1: true
6+
7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_END = 4;
68

79
this.php_js = this.phpjs || {};
810
var obs = this.php_js.obs;
911

1012
if (!obs || !obs.length) {
1113
return false;
1214
}
13-
var contents = obs[obs.length-1].buffer;
15+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
16+
if (obs.callback) {
17+
if (!ob.status) {
18+
flags |= PHP_OUTPUT_HANDLER_START;
19+
}
20+
flags |= PHP_OUTPUT_HANDLER_END;
21+
ob.status = 2;
22+
buffer = obs.callback(buffer, flags);
23+
}
1424
obs.pop();
15-
this.echo(contents);
25+
this.echo(buffer);
1626

1727
return true;
1828
}

_experimental/outcontrol/ob_flush.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@ function ob_flush () {
44
// * example 1: ob_flush();
55
// * returns 1: undefined
66

7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_CONT = 2;
78
this.php_js = this.phpjs || {};
89
var phpjs = this.php_js, obs = phpjs.obs;
910

1011
if (!obs || !obs.length) {
1112
return;
1213
}
13-
this.echo(obs[obs.length-1].buffer);
14-
obs[obs.length-1].buffer = '';
14+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
15+
if (obs.callback) {
16+
if (!ob.status) {
17+
flags |= PHP_OUTPUT_HANDLER_START;
18+
}
19+
flags |= PHP_OUTPUT_HANDLER_CONT;
20+
ob.status = 1;
21+
buffer = obs.callback(buffer, flags);
22+
}
23+
this.echo(ob.buffer);
24+
ob.buffer = '';
1525
}

_experimental/outcontrol/ob_get_clean.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,23 @@ function ob_get_clean () {
33
// + original by: Brett Zamir (http://brett-zamir.me)
44
// * example 1: ob_get_clean();
55
// * returns 1: 'some buffer contents'
6-
var buffer = '';
6+
7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_END = 4;
8+
79
this.php_js = this.phpjs || {};
810
var phpjs = this.php_js, obs = phpjs.obs;
911
if (!obs || !obs.length) {
1012
return false;
1113
}
12-
buffer = obs[obs.length-1].buffer;
14+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
15+
if (obs.callback) {
16+
if (!ob.status) {
17+
flags |= PHP_OUTPUT_HANDLER_START;
18+
}
19+
flags |= PHP_OUTPUT_HANDLER_END;
20+
ob.status = 2;
21+
buffer = obs.callback(buffer, flags);
22+
}
1323
obs.pop();
1424
return buffer;
1525
}

_experimental/outcontrol/ob_get_flush.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,21 @@ function ob_get_flush () {
44
// * example 1: ob_get_flush();
55
// * returns 1: 'some buffer contents'
66

7-
var buffer = '';
7+
var PHP_OUTPUT_HANDLER_START = 1, PHP_OUTPUT_HANDLER_END = 4;
88
this.php_js = this.phpjs || {};
99
var phpjs = this.php_js, obs = phpjs.obs;
1010
if (!obs || !obs.length) {
1111
return false;
1212
}
13-
buffer = obs[obs.length-1].buffer;
13+
var flags = 0, ob = obs[obs.length-1], buffer = ob.buffer;
14+
if (obs.callback) {
15+
if (!ob.status) {
16+
flags |= PHP_OUTPUT_HANDLER_START;
17+
}
18+
flags |= PHP_OUTPUT_HANDLER_END;
19+
ob.status = 2;
20+
buffer = obs.callback(buffer, flags);
21+
}
1422
this.echo(buffer);
1523
obs.pop();
1624
return buffer;

_experimental/outcontrol/ob_start.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function ob_start (output_callback, chunk_size, erase) {
3333
return false;
3434
}
3535
}
36-
bufferObj = {erase:erase, chunk_size:chunk_size, callback:output_callback, type:1,status:0, buffer:''};
36+
bufferObj = {erase:erase, chunk_size:chunk_size, callback:output_callback, type:1, status:0, buffer:''};
3737

3838
// Fix: When else do type and status vary (see also below for non-full-status)
3939
// type: PHP_OUTPUT_HANDLER_INTERNAL (0) or PHP_OUTPUT_HANDLER_USER (1)

0 commit comments

Comments
 (0)