public function loadStyles() { $config = Config::inst(); $_path = 'themes/' . $config->get("SSViewer", 'theme') . '/'; $_isCustomCSSSpecified = count($this->_css); $_isCustomJSSpecified = count($this->_js); Requirements::clear(); $jsItems = array(THIRDPARTY_DIR . '/jquery/jquery.js', THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js', $_path . 'javascript/jquery.pubsub.js', $_path . 'javascript/getParameterByName.js', $_path . 'javascript/URLEncode.js', $_path . 'javascript/forCrappyBrowsers.js', $_path . 'javascript/ga.js', $_path . 'javascript/SocialScripts.js'); $jsItemsCustom = array(); if ($_isCustomJSSpecified) { foreach ($this->_js as $jsFileName) { array_push($jsItemsCustom, $_path . 'javascript/' . $jsFileName . '.js'); } } $cssItems = array($_path . 'css/layout.css'); $cssItemsCustom = array(); if ($_isCustomCSSSpecified) { foreach ($this->_css as $cssFileName) { array_push($cssItemsCustom, $_path . 'css/' . $cssFileName . '.css'); } } foreach ($jsItems as $item) { Requirements::javascript($item); } foreach ($cssItems as $item) { Requirements::css($item); } foreach ($jsItemsCustom as $item) { Requirements::javascript($item); } foreach ($cssItemsCustom as $item) { Requirements::css($item); } /* Combine the files, append the custom file name if specified to avoid conflict */ Requirements::combine_files('assets/cache/css/cssmin.css', $cssItems); if ($_isCustomCSSSpecified) { Requirements::combine_files('assets/cache/css/cssmin_' . str_replace('/', '_', $this->Link()) . '.css', $cssItemsCustom); } Requirements::combine_files('assets/cache/javascript/jsmin.js', $jsItems); if ($_isCustomJSSpecified) { Requirements::combine_files('assets/cache/javascript/jsmin_' . str_replace('/', '_', $this->Link()) . '.js', $jsItemsCustom); } // Now do the combine Requirements::process_combined_files(); if ($pos = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) { $version = substr($_SERVER['HTTP_USER_AGENT'], $pos + 5, 3); if ($version <= 7) { Requirements::css($_path . 'css/iesucks.css'); } Requirements::javascript($_path . 'javascript/ie-placeholder.js'); } }
public static function setupRequirements($cssArray = array(), $jsArray = array()) { $siteConfig = SiteConfig::current_site_config(); // Don't combine files if in admin to prevent error on "login as someone else" screen $inAdmin = is_subclass_of(Controller::curr(), "LeftAndMain"); // Setup requirements if (isset(Page_Controller::$themeFolderAndSubfolder) && Page_Controller::$themeFolderAndSubfolder) { self::$themeFolderAndSubfolder = Page_Controller::$themeFolderAndSubfolder; } else { $currentTheme = SSViewer::current_theme(); self::$themeFolderAndSubfolder = 'themes/' . $currentTheme; } //Set a custom combined folder under themes so relative paths to images within CSS and JavaScript files don't break Requirements::set_combined_files_folder(self::$themeFolderAndSubfolder . '/combined'); // CSS array if (count($cssArray)) { foreach ($cssArray as $css) { Requirements::css($css); } if (!$inAdmin) { Requirements::combine_files("combined-" . $siteConfig->ID . ".css", $cssArray); } } // Javascript array if (count($jsArray)) { foreach ($jsArray as $js) { Requirements::javascript($js); } if (!$inAdmin) { Requirements::combine_files("combined-" . $siteConfig->ID . ".js", $jsArray); } } if (!$inAdmin) { Requirements::process_combined_files(); } // Google analytics if (!Director::isDev()) { if (isset($siteConfig->GoogleAnalyticsCode)) { Requirements::insertHeadTags($siteConfig->GoogleAnalyticsCode); } } // End Google analytics }
public function testRequirementsCombine() { $oldBackend = Requirements::backend(); $testBackend = new Requirements_Backend(); Requirements::set_backend($testBackend); $combinedTestFilePath = BASE_PATH . '/' . $testBackend->getCombinedFilesFolder() . '/testRequirementsCombine.js'; $jsFile = FRAMEWORK_DIR . '/tests/view/themes/javascript/bad.js'; $jsFileContents = file_get_contents(BASE_PATH . '/' . $jsFile); Requirements::combine_files('testRequirementsCombine.js', array($jsFile)); require_once 'thirdparty/jsmin/jsmin.php'; // first make sure that our test js file causes an exception to be thrown try { $content = JSMin::minify($content); Requirements::set_backend($oldBackend); $this->fail('JSMin did not throw exception on minify bad file: '); } catch (Exception $e) { // exception thrown... good } // secondly, make sure that requirements combine throws the correct warning, and only that warning @unlink($combinedTestFilePath); try { Requirements::process_combined_files(); } catch (PHPUnit_Framework_Error_Warning $e) { if (strstr($e->getMessage(), 'Failed to minify') === false) { Requirements::set_backend($oldBackend); $this->fail('Requirements::process_combined_files raised a warning, which is good, but this is not the expected warning ("Failed to minify..."): ' . $e); } } catch (Exception $e) { Requirements::set_backend($oldBackend); $this->fail('Requirements::process_combined_files did not catch exception caused by minifying bad js file: ' . $e); } // and make sure the combined content matches the input content, i.e. no loss of functionality if (!file_exists($combinedTestFilePath)) { Requirements::set_backend($oldBackend); $this->fail('No combined file was created at expected path: ' . $combinedTestFilePath); } $combinedTestFileContents = file_get_contents($combinedTestFilePath); $this->assertContains($jsFileContents, $combinedTestFileContents); // reset Requirements::set_backend($oldBackend); }
} //jpeg quality Config::inst()->update('GDBackend', 'default_quality', 80); // block the default page build SiteTree::set_create_default_pages(false); Config::inst()->update('SiteTree', 'create_default_pages', false); // --------------------------------- // // Assets // --------------------------------- // Requirements::set_write_js_to_body(true); Requirements::set_combined_files_enabled(true); // HTML5 Shims // ----------- $shimRequirements = array('thirdparty/selectivizr/index.js', 'thirdparty/respond/dest/respond.min.js', 'thirdparty/modernizr/modernizr.js'); Requirements::combine_files('lte-ie8-shims.js', $shimRequirements); Requirements::process_combined_files(); // forces ss to generate the file regardless of blocking // CSS // --- $cssRequirements = array('themes/project/css/main.css', 'themes/project/css/typography.css'); Requirements::combine_files('application.css', $cssRequirements); // Primary JS // ---------- $jsRequirements = array('thirdparty/jquery/dist/jquery.min.js', 'project/javascript/main.js', 'project/javascript/forms.js'); Requirements::combine_files('application.js', $jsRequirements); // Asset loading // ------------- // block jquery // block the combined shims + component files so we can lead them manually RequirementsHelper::require_block(array_merge(array('assets/_combinedfiles/lte-ie8-shims.js', 'framework/thirdparty/jquery/jquery.js'), $shimRequirements)); // dump this into a conditional
/** * Rebuilds the cache for combined CSS and JS files. */ public function flushCombined() { // Split any the combined files. Requirements::process_combined_files(); }
/** * Returns the HTTP error response. * * @param string $code Error code * @param string $message Error message * * @return void * * @throws SS_HTTPResponse_Exception * @author Sebastian Diel <*****@*****.**> * @since 07.05.2015 */ public function httpError($code, $message = null) { $combined_files = Requirements::get_combine_files(); try { $response = parent::httpError($code, $message); } catch (SS_HTTPResponse_Exception $e) { $originalResponse = $e->getResponse(); Requirements::restore(); foreach ($combined_files as $combinedFileName => $files) { Requirements::combine_files($combinedFileName, $files); Requirements::process_combined_files(); } $response = $this->request->isMedia() ? null : self::error_response_for($code); throw new SS_HTTPResponse_Exception($response ? $response : ($originalResponse ? $originalResponse : $message), $code); } }