Ejemplo n.º 1
0
 /**
  * Loads the CSS files defined in the form, based on its cssfiles attribute
  *
  * @since 2.0
  */
 public function loadCSSFiles()
 {
     // Support for CSS files
     $cssfiles = $this->getAttribute('cssfiles');
     if (!empty($cssfiles)) {
         $cssfiles = explode(',', $cssfiles);
         foreach ($cssfiles as $cssfile) {
             FOFTemplateUtils::addCSS(trim($cssfile));
         }
     }
     // Support for LESS files
     $lessfiles = $this->getAttribute('lessfiles');
     if (!empty($lessfiles)) {
         $lessfiles = explode(',', $lessfiles);
         foreach ($lessfiles as $def) {
             $parts = explode('||', $def, 2);
             $lessfile = $parts[0];
             $alt = count($parts) > 1 ? trim($parts[1]) : null;
             FOFTemplateUtils::addLESS(trim($lessfile), $alt);
         }
     }
 }
Ejemplo n.º 2
0
/**
 * This is a workaround which ensures that Akeeba's namespaced JavaScript and CSS will be loaded
 * wihtout being tampered with by any system pluign. Moreover, since we are loading first, we can
 * be pretty sure that namespacing *will* work and we won't cause any incompatibilities with third
 * party extensions loading different versions of these GUI libraries.
 *
 * This code works by registering a system plugin hook :) It will grab the HTML and drop its own
 * JS and CSS definitions in the head of the script, before anything else has the chance to run.
 *
 * Peace.
 */
function AkeebaStrapperLoader()
{
    // If there are no script defs, just go to sleep
    if (empty(AkeebaStrapper::$scriptURLs) && empty(AkeebaStrapper::$scriptDefs) && empty(AkeebaStrapper::$cssDefs) && empty(AkeebaStrapper::$cssURLs) && empty(AkeebaStrapper::$lessURLs)) {
        return;
    }
    // Get the query tag
    $tag = AkeebaStrapper::$tag;
    if (empty($tag)) {
        $tag = '';
    } else {
        $tag = '?' . ltrim($tag, '?');
    }
    $myscripts = '';
    $preload = (bool) AkeebaStrapper::getPreference('preload_joomla2', 1);
    if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
        $buffer = JResponse::getBody();
    } else {
        $preload = false;
    }
    // Include Javascript files
    if (!empty(AkeebaStrapper::$scriptURLs)) {
        foreach (AkeebaStrapper::$scriptURLs as $url) {
            if ($preload && basename($url) == 'bootstrap.min.js') {
                // Special case: check that nobody else is using bootstrap[.min].js on the page.
                $scriptRegex = "/<script [^>]+(\\/>|><\\/script>)/i";
                $jsRegex = "/([^\"\\'=]+\\.(js)(\\?[^\"\\']*){0,1})[\"\\']/i";
                preg_match_all($scriptRegex, $buffer, $matches);
                $scripts = @implode('', $matches[0]);
                preg_match_all($jsRegex, $scripts, $matches);
                $skip = false;
                foreach ($matches[1] as $scripturl) {
                    $scripturl = basename($scripturl);
                    if (in_array($scripturl, array('bootstrap.min.js', 'bootstrap.js'))) {
                        $skip = true;
                    }
                }
                if ($skip) {
                    continue;
                }
            }
            if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
                $myscripts .= '<script type="text/javascript" src="' . $url . $tag . '"></script>' . "\n";
            } else {
                JFactory::getDocument()->addScript($url . $tag);
            }
        }
    }
    // Include Javscript snippets
    if (!empty(AkeebaStrapper::$scriptDefs)) {
        if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
            $myscripts .= '<script type="text/javascript" language="javascript">' . "\n";
        } else {
            $myscripts = '';
        }
        foreach (AkeebaStrapper::$scriptDefs as $def) {
            $myscripts .= $def . "\n";
        }
        if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
            $myscripts .= '</script>' . "\n";
        } else {
            JFactory::getDocument()->addScriptDeclaration($myscripts);
        }
    }
    // Include LESS files
    if (!empty(AkeebaStrapper::$lessURLs)) {
        foreach (AkeebaStrapper::$lessURLs as $entry) {
            list($lessFile, $altFiles) = $entry;
            $url = FOFTemplateUtils::addLESS($lessFile, $altFiles, true);
            if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
                if (empty($url)) {
                    if (!is_array($altFiles) && empty($altFiles)) {
                        $altFiles = array($altFiles);
                    }
                    if (!empty($altFiles)) {
                        foreach ($altFiles as $altFile) {
                            $url = FOFTemplateUtils::parsePath($altFile);
                            $myscripts .= '<link type="text/css" rel="stylesheet" href="' . $url . $tag . '" />' . "\n";
                        }
                    }
                } else {
                    $myscripts .= '<link type="text/css" rel="stylesheet" href="' . $url . $tag . '" />' . "\n";
                }
            } else {
                if (empty($url)) {
                    if (!is_array($altFiles) && empty($altFiles)) {
                        $altFiles = array($altFiles);
                    }
                    if (!empty($altFiles)) {
                        foreach ($altFiles as $altFile) {
                            $url = FOFTemplateUtils::parsePath($altFile);
                            JFactory::getDocument()->addStyleSheet($url . $tag);
                        }
                    }
                } else {
                    JFactory::getDocument()->addStyleSheet($url . $tag);
                }
            }
        }
    }
    // Include CSS files
    if (!empty(AkeebaStrapper::$cssURLs)) {
        foreach (AkeebaStrapper::$cssURLs as $url) {
            if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
                $myscripts .= '<link type="text/css" rel="stylesheet" href="' . $url . $tag . '" />' . "\n";
            } else {
                JFactory::getDocument()->addStyleSheet($url . $tag);
            }
        }
    }
    // Include style definitions
    if (!empty(AkeebaStrapper::$cssDefs)) {
        $myscripts .= '<style type="text/css">' . "\n";
        foreach (AkeebaStrapper::$cssDefs as $def) {
            if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
                $myscripts .= $def . "\n";
            } else {
                JFactory::getDocument()->addScriptDeclaration($def . "\n");
            }
        }
        $myscripts .= '</style>' . "\n";
    }
    if (version_compare(JVERSION, '3.0', 'lt') && $preload) {
        $pos = strpos($buffer, "<head>");
        if ($pos > 0) {
            $buffer = substr($buffer, 0, $pos + 6) . $myscripts . substr($buffer, $pos + 6);
            JResponse::setBody($buffer);
        }
    }
}