예제 #1
0
파일: head.php 프로젝트: eshiol/joomla-cms
 /**
  * Generates the head HTML and return the results as a string
  *
  * @param   JDocumentHtml  $document  The document for which the head will be created
  *
  * @return  string  The head hTML
  *
  * @since   3.5
  * @deprecated  4.0  Method code will be moved into the render method
  */
 public function fetchHead($document)
 {
     // Convert the tagids to titles
     if (isset($document->_metaTags['name']['tags'])) {
         $tagsHelper = new JHelperTags();
         $document->_metaTags['name']['tags'] = implode(', ', $tagsHelper->getTagNames($document->_metaTags['name']['tags']));
     }
     if ($document->getScriptOptions()) {
         JHtml::_('behavior.core');
     }
     // Trigger the onBeforeCompileHead event
     $app = JFactory::getApplication();
     $app->triggerEvent('onBeforeCompileHead');
     // Get line endings
     $lnEnd = $document->_getLineEnd();
     $tab = $document->_getTab();
     $tagEnd = ' />';
     $buffer = '';
     // Generate charset when using HTML5 (should happen first)
     if ($document->isHtml5()) {
         $buffer .= $tab . '<meta charset="' . $document->getCharset() . '" />' . $lnEnd;
     }
     // Generate base tag (need to happen early)
     $base = $document->getBase();
     if (!empty($base)) {
         $buffer .= $tab . '<base href="' . $base . '" />' . $lnEnd;
     }
     // Generate META tags (needs to happen as early as possible in the head)
     foreach ($document->_metaTags as $type => $tag) {
         foreach ($tag as $name => $content) {
             if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type')) {
                 $buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
             } elseif ($type != 'http-equiv' && !empty($content)) {
                 $buffer .= $tab . '<meta ' . $type . '="' . $name . '" content="' . htmlspecialchars($content, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
             }
         }
     }
     // Don't add empty descriptions
     $documentDescription = $document->getDescription();
     if ($documentDescription) {
         $buffer .= $tab . '<meta name="description" content="' . htmlspecialchars($documentDescription, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
     }
     // Don't add empty generators
     $generator = $document->getGenerator();
     if ($generator) {
         $buffer .= $tab . '<meta name="generator" content="' . htmlspecialchars($generator, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
     }
     $buffer .= $tab . '<title>' . htmlspecialchars($document->getTitle(), ENT_COMPAT, 'UTF-8') . '</title>' . $lnEnd;
     // Generate link declarations
     foreach ($document->_links as $link => $linkAtrr) {
         $buffer .= $tab . '<link href="' . $link . '" ' . $linkAtrr['relType'] . '="' . $linkAtrr['relation'] . '"';
         if (is_array($linkAtrr['attribs'])) {
             if ($temp = ArrayHelper::toString($linkAtrr['attribs'])) {
                 $buffer .= ' ' . $temp;
             }
         }
         $buffer .= ' />' . $lnEnd;
     }
     $defaultCssMimes = array('text/css');
     // Generate stylesheet links
     foreach ($document->_styleSheets as $strSrc => $strAttr) {
         $buffer .= $tab . '<link href="' . $strSrc . '" rel="stylesheet"';
         if (!is_null($strAttr['mime']) && (!$document->isHtml5() || !in_array($strAttr['mime'], $defaultCssMimes))) {
             $buffer .= ' type="' . $strAttr['mime'] . '"';
         }
         if (!is_null($strAttr['media'])) {
             $buffer .= ' media="' . $strAttr['media'] . '"';
         }
         if (is_array($strAttr['attribs'])) {
             if ($temp = ArrayHelper::toString($strAttr['attribs'])) {
                 $buffer .= ' ' . $temp;
             }
         }
         $buffer .= $tagEnd . $lnEnd;
     }
     // Generate stylesheet declarations
     foreach ($document->_style as $type => $content) {
         $buffer .= $tab . '<style';
         if (!is_null($type) && (!$document->isHtml5() || !in_array($type, $defaultCssMimes))) {
             $buffer .= ' type="' . $type . '"';
         }
         $buffer .= '>' . $lnEnd;
         // This is for full XHTML support.
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '/*<![CDATA[*/' . $lnEnd;
         }
         $buffer .= $content . $lnEnd;
         // See above note
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '/*]]>*/' . $lnEnd;
         }
         $buffer .= $tab . '</style>' . $lnEnd;
     }
     // Generate scripts options
     $scriptOptions = $document->getScriptOptions();
     if (!empty($scriptOptions)) {
         $buffer .= $tab . '<script type="application/json" class="joomla-script-options new">';
         $prettyPrint = JDEBUG && defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false;
         $jsonOptions = json_encode($scriptOptions, $prettyPrint);
         $jsonOptions = $jsonOptions ? $jsonOptions : '{}';
         $buffer .= $jsonOptions;
         $buffer .= '</script>' . $lnEnd;
     }
     $defaultJsMimes = array('text/javascript', 'application/javascript', 'text/x-javascript', 'application/x-javascript');
     $html5NoValueAttributes = array('defer', 'async');
     $mediaVersion = $document->getMediaVersion();
     // Generate script file links
     foreach ($document->_scripts as $src => $attribs) {
         // Check if script uses IE conditional statements.
         $conditional = isset($attribs['options']) && isset($attribs['options']['conditional']) ? $attribs['options']['conditional'] : null;
         // Check if script uses media version.
         if (strpos($src, '?') === false && isset($attribs['options']) && isset($attribs['options']['version']) && $attribs['options']['version']) {
             $src .= '?' . ($attribs['options']['version'] === 'auto' ? $mediaVersion : $attribs['options']['version']);
         }
         $buffer .= $tab;
         // This is for IE conditional statements support.
         if (!is_null($conditional)) {
             $buffer .= '<!--[if ' . $conditional . ']>';
         }
         $buffer .= '<script src="' . $src . '"';
         // Add script tag attributes.
         foreach ($attribs as $attrib => $value) {
             // Don't add the 'options' attribute. This attribute is for internal use (version, conditional, etc).
             if ($attrib === 'options') {
                 continue;
             }
             // Don't add type attribute if document is HTML5 and it's a default mime type. 'mime' is for B/C.
             if (in_array($attrib, array('type', 'mime')) && $document->isHtml5() && in_array($value, $defaultJsMimes)) {
                 continue;
             }
             // Don't add type attribute if document is HTML5 and it's a default mime type. 'mime' is for B/C.
             if ($attrib === 'mime') {
                 $attrib = 'type';
             } elseif (in_array($attrib, array('defer', 'async')) && $value === true) {
                 $value = $attrib;
             }
             // Add attribute to script tag output.
             $buffer .= ' ' . htmlspecialchars($attrib, ENT_COMPAT, 'UTF-8');
             if (!($document->isHtml5() && in_array($attrib, $html5NoValueAttributes))) {
                 // Json encode value if it's an array.
                 $value = !is_scalar($value) ? json_encode($value) : $value;
                 $buffer .= '="' . htmlspecialchars($value, ENT_COMPAT, 'UTF-8') . '"';
             }
         }
         $buffer .= '></script>';
         // This is for IE conditional statements support.
         if (!is_null($conditional)) {
             $buffer .= '<![endif]-->';
         }
         $buffer .= $lnEnd;
     }
     // Generate script declarations
     foreach ($document->_script as $type => $content) {
         $buffer .= $tab . '<script';
         if (!is_null($type) && (!$document->isHtml5() || !in_array($type, $defaultJsMimes))) {
             $buffer .= ' type="' . $type . '"';
         }
         $buffer .= '>' . $lnEnd;
         // This is for full XHTML support.
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//<![CDATA[' . $lnEnd;
         }
         $buffer .= $content . $lnEnd;
         // See above note
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//]]>' . $lnEnd;
         }
         $buffer .= $tab . '</script>' . $lnEnd;
     }
     // Output the custom tags - array_unique makes sure that we don't output the same tags twice
     foreach (array_unique($document->_custom) as $custom) {
         $buffer .= $tab . $custom . $lnEnd;
     }
     return $buffer;
 }
예제 #2
0
 /**
  * Generates the head HTML and return the results as a string
  *
  * @param   JDocumentHtml  $document  The document for which the head will be created
  *
  * @return  string  The head hTML
  *
  * @since   3.5
  * @deprecated  4.0  Method code will be moved into the render method
  */
 public function fetchHead($document)
 {
     // Convert the tagids to titles
     if (isset($document->_metaTags['name']['tags'])) {
         $tagsHelper = new JHelperTags();
         $document->_metaTags['name']['tags'] = implode(', ', $tagsHelper->getTagNames($document->_metaTags['name']['tags']));
     }
     // Trigger the onBeforeCompileHead event
     $app = JFactory::getApplication();
     $app->triggerEvent('onBeforeCompileHead');
     // Get line endings
     $lnEnd = $document->_getLineEnd();
     $tab = $document->_getTab();
     $tagEnd = ' />';
     $buffer = '';
     // Generate charset when using HTML5 (should happen first)
     if ($document->isHtml5()) {
         $buffer .= $tab . '<meta charset="' . $document->getCharset() . '" />' . $lnEnd;
     }
     // Generate base tag (need to happen early)
     $base = $document->getBase();
     if (!empty($base)) {
         $buffer .= $tab . '<base href="' . $base . '" />' . $lnEnd;
     }
     // Generate META tags (needs to happen as early as possible in the head)
     foreach ($document->_metaTags as $type => $tag) {
         foreach ($tag as $name => $content) {
             if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type')) {
                 $buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
             } elseif ($type != 'http-equiv' && !empty($content)) {
                 $buffer .= $tab . '<meta ' . $type . '="' . $name . '" content="' . htmlspecialchars($content, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
             }
         }
     }
     // Don't add empty descriptions
     $documentDescription = $document->getDescription();
     if ($documentDescription) {
         $buffer .= $tab . '<meta name="description" content="' . htmlspecialchars($documentDescription, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
     }
     // Don't add empty generators
     $generator = $document->getGenerator();
     if ($generator) {
         $buffer .= $tab . '<meta name="generator" content="' . htmlspecialchars($generator, ENT_COMPAT, 'UTF-8') . '" />' . $lnEnd;
     }
     $buffer .= $tab . '<title>' . htmlspecialchars($document->getTitle(), ENT_COMPAT, 'UTF-8') . '</title>' . $lnEnd;
     // Generate link declarations
     foreach ($document->_links as $link => $linkAtrr) {
         $buffer .= $tab . '<link href="' . $link . '" ' . $linkAtrr['relType'] . '="' . $linkAtrr['relation'] . '"';
         if (is_array($linkAtrr['attribs'])) {
             if ($temp = ArrayHelper::toString($linkAtrr['attribs'])) {
                 $buffer .= ' ' . $temp;
             }
         }
         $buffer .= ' />' . $lnEnd;
     }
     $defaultCssMimes = array('text/css');
     // Generate stylesheet links
     foreach ($document->_styleSheets as $strSrc => $strAttr) {
         $buffer .= $tab . '<link rel="stylesheet" href="' . $strSrc . '"';
         if (!is_null($strAttr['mime']) && (!$document->isHtml5() || !in_array($strAttr['mime'], $defaultCssMimes))) {
             $buffer .= ' type="' . $strAttr['mime'] . '"';
         }
         if (!is_null($strAttr['media'])) {
             $buffer .= ' media="' . $strAttr['media'] . '"';
         }
         if (is_array($strAttr['attribs'])) {
             if ($temp = ArrayHelper::toString($strAttr['attribs'])) {
                 $buffer .= ' ' . $temp;
             }
         }
         $buffer .= $tagEnd . $lnEnd;
     }
     // Generate stylesheet declarations
     foreach ($document->_style as $type => $content) {
         $buffer .= $tab . '<style';
         if (!is_null($type) && (!$document->isHtml5() || !in_array($type, $defaultCssMimes))) {
             $buffer .= ' type="' . $type . '"';
         }
         $buffer .= '>' . $lnEnd;
         // This is for full XHTML support.
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '/*<![CDATA[*/' . $lnEnd;
         }
         $buffer .= $content . $lnEnd;
         // See above note
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '/*]]>*/' . $lnEnd;
         }
         $buffer .= $tab . '</style>' . $lnEnd;
     }
     $defaultJsMimes = array('text/javascript', 'application/javascript', 'text/x-javascript', 'application/x-javascript');
     // Generate script file links
     foreach ($document->_scripts as $strSrc => $strAttr) {
         $buffer .= $tab . '<script src="' . $strSrc . '"';
         if (!is_null($strAttr['mime']) && (!$document->isHtml5() || !in_array($strAttr['mime'], $defaultJsMimes))) {
             $buffer .= ' type="' . $strAttr['mime'] . '"';
         }
         if ($strAttr['defer']) {
             $buffer .= ' defer';
             if (!$document->isHtml5()) {
                 $buffer .= '="defer"';
             }
         }
         if ($strAttr['async']) {
             $buffer .= ' async';
             if (!$document->isHtml5()) {
                 $buffer .= '="async"';
             }
         }
         $buffer .= '></script>' . $lnEnd;
     }
     // Generate scripts options
     $scriptOptions = $document->getScriptOptions();
     if (!empty($scriptOptions)) {
         $buffer .= $tab . '<script type="text/javascript">' . $lnEnd;
         // This is for full XHTML support.
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//<![CDATA[' . $lnEnd;
         }
         $pretyPrint = JDEBUG && defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false;
         $jsonOptions = json_encode($scriptOptions, $pretyPrint);
         $jsonOptions = $jsonOptions ? $jsonOptions : '{}';
         // TODO: use .extend(Joomla.optionsStorage, options) when it will be safe
         $buffer .= $tab . 'var Joomla = Joomla || {};' . $lnEnd;
         $buffer .= $tab . 'Joomla.optionsStorage = ' . $jsonOptions . ';' . $lnEnd;
         // See above note
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//]]>' . $lnEnd;
         }
         $buffer .= $tab . '</script>' . $lnEnd;
     }
     // Generate script declarations
     foreach ($document->_script as $type => $content) {
         $buffer .= $tab . '<script';
         if (!is_null($type) && (!$document->isHtml5() || !in_array($type, $defaultJsMimes))) {
             $buffer .= ' type="' . $type . '"';
         }
         $buffer .= '>' . $lnEnd;
         // This is for full XHTML support.
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//<![CDATA[' . $lnEnd;
         }
         $buffer .= $content . $lnEnd;
         // See above note
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//]]>' . $lnEnd;
         }
         $buffer .= $tab . '</script>' . $lnEnd;
     }
     // Generate script language declarations.
     if (count(JText::script())) {
         $buffer .= $tab . '<script';
         if (!$document->isHtml5()) {
             $buffer .= ' type="text/javascript"';
         }
         $buffer .= '>' . $lnEnd;
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//<![CDATA[' . $lnEnd;
         }
         $buffer .= $tab . $tab . '(function() {' . $lnEnd;
         $buffer .= $tab . $tab . $tab . 'Joomla.JText.load(' . json_encode(JText::script()) . ');' . $lnEnd;
         $buffer .= $tab . $tab . '})();' . $lnEnd;
         if ($document->_mime != 'text/html') {
             $buffer .= $tab . $tab . '//]]>' . $lnEnd;
         }
         $buffer .= $tab . '</script>' . $lnEnd;
     }
     // Output the custom tags - array_unique makes sure that we don't output the same tags twice
     foreach (array_unique($document->_custom) as $custom) {
         $buffer .= $tab . $custom . $lnEnd;
     }
     return $buffer;
 }
예제 #3
0
 /**
  * @testdox  Test the default return for isHtml5
  */
 public function testTheDefaultReturnForIsHtml5()
 {
     $this->assertTrue($this->object->isHtml5());
 }