1: <?php
  2: 
  3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21: 
 22: 
 23: namespace picon;
 24: 
 25:  26:  27:  28:  29:  30: 
 31: class HeaderResponse
 32: {
 33:     private $actualResponse;
 34:     private $rendered = array();
 35:     
 36:     public function __construct(Response $response)
 37:     {
 38:         $this->actualResponse = $response;
 39:     }
 40:     
 41:     public function renderCSS($css)
 42:     {
 43:         if(is_string($css))
 44:         {
 45:             $this->renderCSSFile($css);
 46:         }
 47:         else if($css instanceof ResourceReference)
 48:         {
 49:             $this->renderCSSResourceReference($css);
 50:         }
 51:         else
 52:         {
 53:             throw new \InvalidArgumentException('renderCSS() expects a string');
 54:         }
 55:     }
 56:      
 57:     public function renderCSSFile($file)
 58:     {
 59:         if(!$this->checkRenderedFile($file))
 60:         {
 61:             $this->actualResponse->write(sprintf("<link type=\"text/css\" rel=\"stylesheet\" href=\"%s\" />", $file));
 62:             array_push($this->rendered, $file);
 63:         }
 64:     }
 65:     
 66:     public function renderJavaScript($javaScript)
 67:     {
 68:         if(is_string($javaScript))
 69:         {
 70:             $this->renderJavaScriptFile($javaScript);
 71:         }
 72:         else if($javaScript instanceof ResourceReference)
 73:         {
 74:             $this->renderJavaScriptResourceReference($javaScript);
 75:         }
 76:         else
 77:         {
 78:             throw new \InvalidArgumentException('renderJavaScript() expects a string');
 79:         }
 80:     }
 81:     
 82:     public function renderJavaScriptFile($file)
 83:     {
 84:         if(!$this->checkRenderedFile($file))
 85:         {
 86:             $this->actualResponse->write(sprintf("<script type=\"text/javascript\" src=\"%s\"></script>", $file));
 87:             array_push($this->rendered, $file);
 88:         }
 89:     }
 90:     
 91:     private function checkRenderedFile($file)
 92:     {
 93:         return in_array($file, $this->rendered);
 94:     }
 95:     
 96:     public function renderCSSResourceReference(ResourceReference $reference)
 97:     {
 98:         $target = new ResourceRequestTarget($reference);
 99:         $url = $GLOBALS['requestCycle']->generateUrl($target);
100:         $this->renderCSSFile($url);
101:     }
102:     
103:     public function renderJavaScriptResourceReference(ResourceReference $reference)
104:     {
105:         $target = new ResourceRequestTarget($reference);
106:         $url = $GLOBALS['requestCycle']->generateUrl($target);
107:         $this->renderJavaScriptFile($url);
108:     }
109:     
110:     public function renderScript($script)
111:     {
112:         $this->actualResponse->write(sprintf("<script type=\"text/javascript\">%s</script>", $script));
113:     }
114: }
115: 
116: ?>
117: