blob: 4cd22432451da498aee3b6fd8087cbf965ca9dae (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
<?php
namespace BigPipe;
class Pagelet {
private $ID = NULL;
private $HTML = '';
private $JSCode = '';
private $JSFiles = [];
private $CSSFiles = [];
private $phaseDoneJS = [];
private static $count = 0;
#===============================================================================
# Priorities for pagelet sorting
#===============================================================================
const PRIORITY_HIGHEST = 100;
const PRIORITY_HIGH = 75;
const PRIORITY_NORMAL = 50;
const PRIORITY_LOW = 25;
const PRIORITY_LOWEST = 0;
#===============================================================================
# Callback phase numbers for PhaseDoneJS
#===============================================================================
const PHASE_ARRIVE = 0; # After the pagelet reached BigPipe
const PHASE_LOADCSS = 1; # After all the CSS resources have been loaded
const PHASE_PUTHTML = 2; # After the HTML content has been injected into the placeholders
const PHASE_LOADJS = 3; # After all the JS resources have been loaded
const PHASE_EXECJS = 4; # After the static JS code has been executed
public function __construct($customID = NULL, $priority = self::PRIORITY_NORMAL) {
$this->phaseDoneJS = array_pad([], 5, []);
$this->ID = is_string($customID) ? $customID : 'P'.++self::$count;
BigPipe::addPagelet($this, $priority);
}
#===============================================================================
# Return the unique ID
#===============================================================================
public function getID() {
return $this->ID;
}
#===============================================================================
# Return the HTML content
#===============================================================================
public function getHTML() {
return $this->HTML;
}
#===============================================================================
# Return the CSS resources
#===============================================================================
public function getCSSFiles() {
return $this->CSSFiles;
}
#===============================================================================
# Return the JS resources
#===============================================================================
public function getJSFiles() {
return $this->JSFiles;
}
#===============================================================================
# Return the main JS code
#===============================================================================
public function getJSCode() {
return $this->JSCode;
}
#===============================================================================
# Add HTML or attach more
#===============================================================================
public function addHTML($HTML) {
return $this->HTML .= $HTML;
}
#===============================================================================
# Attach a CSS resource
#===============================================================================
public function addCSS($file) {
return $this->CSSFiles[] = $file;
}
#===============================================================================
# Attach a JS resource
#===============================================================================
public function addJS($file) {
return $this->JSFiles[] = $file;
}
#===============================================================================
# Add JS code or attach more
#===============================================================================
public function addJSCode($code) {
return $this->JSCode .= $code;
}
#===============================================================================
# Attach a PhaseDoneJS callback
#===============================================================================
public function addPhaseDoneJS($phase, $callback) {
return $this->phaseDoneJS[$phase][] = removeLineBreaksAndTabs($callback);
}
#===============================================================================
# Return all registered PhaseDoneJS callbacks
#===============================================================================
public function getPhaseDoneJS() {
return $this->phaseDoneJS;
}
#===============================================================================
# Magic method: __toString()
#===============================================================================
public function __toString() {
return '<div id="'.$this->getID().'">'.((!BigPipe::isEnabled()) ? $this->getHTML() : NULL).'</div>';
}
}
|