aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorThomas Lange <code@nerdmind.de>2015-04-15 21:29:19 +0200
committerThomas Lange <code@nerdmind.de>2015-04-15 21:29:19 +0200
commitbf996f7247133c536511c23b6ad30aa222bfd6d9 (patch)
tree1d9388e6331454fbc9b68b5006a64c4563c202cd /include
downloadbigpipe-bf996f7247133c536511c23b6ad30aa222bfd6d9.tar.gz
bigpipe-bf996f7247133c536511c23b6ad30aa222bfd6d9.tar.xz
bigpipe-bf996f7247133c536511c23b6ad30aa222bfd6d9.zip
Initial commit
Diffstat (limited to 'include')
-rwxr-xr-xinclude/classes/class.bigpipe.php79
-rwxr-xr-xinclude/classes/class.pagelet.php84
-rwxr-xr-xinclude/functions.php12
3 files changed, 175 insertions, 0 deletions
diff --git a/include/classes/class.bigpipe.php b/include/classes/class.bigpipe.php
new file mode 100755
index 0000000..1edefc8
--- /dev/null
+++ b/include/classes/class.bigpipe.php
@@ -0,0 +1,79 @@
+<?php
+class BigPipe {
+ public static $enabled = TRUE;
+ private static $pagelets = [];
+ private static $count = 0;
+
+ #====================================================================================================
+ # Gibt TRUE zurück wenn BigPipe eingeschaltet ist
+ #====================================================================================================
+ public static function isEnabled() {
+ return self::$enabled ? TRUE : FALSE;
+ }
+
+ #====================================================================================================
+ # Neues Pagelet zur Pipeline hinzufügen
+ #====================================================================================================
+ public static function addPagelet(Pagelet $Pagelet, $priority) {
+ self::$pagelets[$priority][] = $Pagelet;
+ self::$count++;
+ }
+
+ #====================================================================================================
+ # Gibt einen einzelnen Pagelet-Response aus
+ #====================================================================================================
+ private static function pageletResponse(Pagelet $Pagelet, $async = FALSE, $last = FALSE) {
+ $data = [
+ 'ID' => $Pagelet->getID(),
+ 'RESOURCES' => ['CSS' => $Pagelet->getCSSFiles(), 'JS' => $Pagelet->getJSFiles(), 'JS_CODE' => removeLineBreaksAndTabs($Pagelet->getJSCode())]
+ ];
+
+ if($last) {
+ $data['IS_LAST'] = true;
+ }
+
+ echo '<code class="hidden" id="_'.$data['ID'].'"><!-- '.str_replace('--', '&#45;&#45;', removeLineBreaksAndTabs($Pagelet->getHTML())).' --></code>'."\n";
+ echo '<script>BigPipe.onPageletArrive('.json_encode($data).($async ? ', document.getElementById("_'.$Pagelet->getID().'").innerHTML' : NULL).');</script>'."\n\n";
+ }
+
+ #====================================================================================================
+ # Sendet den Output-Buffer so weit wie möglich in Richtung User
+ #====================================================================================================
+ public static function flushOutputBuffer() {
+ ob_flush(); flush();
+ }
+
+ #====================================================================================================
+ # Alle Pagelets an Client schicken
+ #====================================================================================================
+ public static function render($async = FALSE) {
+ self::flushOutputBuffer();
+
+ $i = 0;
+
+ ksort(self::$pagelets);
+
+ foreach(array_reverse(self::$pagelets) as $priority => $pagelets) {
+ foreach($pagelets as $Pagelet) {
+ if(!self::isEnabled()) {
+ if($Pagelet->getJSCode()) {
+ echo '<script>'.$Pagelet->getJSCode().'</script>'."\n";
+ }
+
+ foreach($Pagelet->getCSSFiles() as $CSSFile) {
+ echo '<link href="'.$CSSFile.'" rel="stylesheet" />'."\n";
+ }
+
+ foreach($Pagelet->getJSFiles() as $JSFile) {
+ echo '<script src="'.$JSFile.'"></script>'."\n";
+ }
+ }
+
+ else {
+ self::pageletResponse($Pagelet, $async, (self::$count === ++$i));
+ self::flushOutputBuffer();
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/include/classes/class.pagelet.php b/include/classes/class.pagelet.php
new file mode 100755
index 0000000..c1f211a
--- /dev/null
+++ b/include/classes/class.pagelet.php
@@ -0,0 +1,84 @@
+<?php
+class Pagelet {
+ private $ID = NULL;
+ private $HTML = NULL;
+ private $JSCode = "";
+ private $CSSFiles = [];
+ private $JSFiles = [];
+ private static $count = 0;
+
+ public function __construct($priority = 50) {
+ $this->ID = 'P'.++self::$count;
+ BigPipe::addPagelet($this, $priority);
+ }
+
+ #====================================================================================================
+ # ID zurückgeben
+ #====================================================================================================
+ public function getID() {
+ return $this->ID;
+ }
+
+ #====================================================================================================
+ # HTML-Code zurückgeben
+ #====================================================================================================
+ public function getHTML() {
+ return $this->HTML;
+ }
+
+ #====================================================================================================
+ # CSS-Ressourcen zurückgeben
+ #====================================================================================================
+ public function getCSSFiles() {
+ return $this->CSSFiles;
+ }
+
+ #====================================================================================================
+ # JS-Ressourcen zurückgeben
+ #====================================================================================================
+ public function getJSFiles() {
+ return $this->JSFiles;
+ }
+
+ #====================================================================================================
+ # JS-Code zurückgeben
+ #====================================================================================================
+ public function getJSCode() {
+ return $this->JSCode;
+ }
+
+ #====================================================================================================
+ # HTML-Code hinzufügen
+ #====================================================================================================
+ public function addHTML($HTML) {
+ $this->HTML .= $HTML;
+ }
+
+ #====================================================================================================
+ # CSS-Ressource hinzufügen
+ #====================================================================================================
+ public function addCSS($file) {
+ $this->CSSFiles[] = $file;
+ }
+
+ #====================================================================================================
+ # JS-Ressource hinzufügen
+ #====================================================================================================
+ public function addJS($file) {
+ $this->JSFiles[] = $file;
+ }
+
+ #====================================================================================================
+ # JS-Code hinzufügen
+ #====================================================================================================
+ public function addJSCode($code) {
+ $this->JSCode .= $code;
+ }
+
+ #====================================================================================================
+ # Magische Methode: __toString()
+ #====================================================================================================
+ public function __toString() {
+ return '<div id="'.$this->getID().'">'.((!BigPipe::isEnabled()) ? $this->getHTML() : NULL).'</div>';
+ }
+} \ No newline at end of file
diff --git a/include/functions.php b/include/functions.php
new file mode 100755
index 0000000..443d594
--- /dev/null
+++ b/include/functions.php
@@ -0,0 +1,12 @@
+<?php
+#====================================================================================================
+# FUNCTION: Entfernt alle Zeilenumbrüche und Tabulatoren aus einem String
+#====================================================================================================
+function removeLineBreaksAndTabs($mixed, $replace = NULL) {
+ if(is_array($mixed)) {
+ return array_map(__FUNCTION__, $mixed);
+ }
+
+ return is_string($mixed) ? str_replace(["\r\n", "\r", "\n", "\t"], $replace, $mixed) : $mixed;
+}
+?> \ No newline at end of file