private function _getJs($coffeeFile) { // get file from cache if possible: if (self::CACHING === true) { $coffeeHash = sha1_file($coffeeFile); if (file_exists($this->_cacheDir . $coffeeHash)) { return file_get_contents($this->_cacheDir . $coffeeHash); } } // file not cached or cache disabled -> covert, cache, return: $coffee = file_get_contents($coffeeFile); try { $js = CoffeeScript\compile($coffee); if (self::CACHING === true) { $this->_cacheJs($js, $coffeeFile, $coffeeHash); } return $js; } catch (Exception $e) { var_dump($e); } return false; }
/** * Caches the assets if needed and returns a list files/paths * @param array $assets * @param string $type [description] * @return array */ private static function _cache_assets($assets = null, $type = null) { $files = array(); // Will contain all the processed files if ($assets and $type) { $last_modified = 0; $path = $type == 'css' ? self::$css_path : self::$js_path; if ($type === 'css' and self::$combine_css or $type === 'js' and self::$combine_js) { // Check if it's a group (associative array) if (self::$group) { $assets = $assets[self::$group]; } // Find last modified file foreach ($assets as $asset) { $last_modified = max($last_modified, filemtime(realpath($path . '/' . $asset))); } // Build the filename and path if (self::$prefix_css and $type == 'css') { $file_name = self::$prefix_css . '.' . (self::$prefix_timestamp ? date('YmdHis', $last_modified) . '.' : '') . $type; } elseif (self::$prefix_js and $type == 'js') { $file_name = self::$prefix_js . '.' . (self::$prefix_timestamp ? date('YmdHis', $last_modified) . '.' : '') . $type; } elseif (self::$group and !self::$prefix_timestamp) { $file_name = $type; } else { $file_name = date('YmdHis', $last_modified) . '.' . $type; } $file_path = reduce_double_slashes(self::$cache_path . '/' . (self::$group ? self::$group . '.' : '') . $file_name); // Now check if the file exists in the cache directory if (!file_exists($file_path)) { $data = ''; // Get file contents foreach ($assets as $asset) { // Get file contents, for CSS file we use the LESS compiler if ($type == 'css') { $less = new lessc(self::$css_path . '/' . $asset); $contents = $less->parse(); } else { if (pathinfo($asset, PATHINFO_EXTENSION) === 'coffee') { // Try to compile CoffeeScript try { $contents = read_file(reduce_double_slashes($path . '/' . $asset)); $contents = CoffeeScript\compile($contents); } catch (Exception $e) { $contents = ''; } } else { $contents = read_file(reduce_double_slashes($path . '/' . $asset)); } } $pathinfo = pathinfo($asset); if ($pathinfo['dirname'] != '.') { $base_url = self::$css_url . '/' . $pathinfo['dirname']; } else { $base_url = self::$css_url; } // Process asset $data .= self::_process($contents, $type, 'minify', $base_url); } // Minify if ($type == 'css') { $data = self::_process($data, $type, 'minify'); } // Auto clear cache directory? if ($type == 'css' and (self::$auto_clear_cache or self::$auto_clear_css_cache) and !self::$auto_cleared_css_cache) { self::clear_css_cache(); self::$auto_cleared_css_cache = true; } if ($type == 'js' and (self::$auto_clear_cache or self::$auto_clear_js_cache) and !self::$auto_cleared_js_cache) { self::clear_js_cache(); self::$auto_cleared_js_cache = true; } // And save the file write_file($file_path, $data); } // Add to files $files[] = reduce_double_slashes(self::$cache_url . '/' . (self::$group ? self::$group . '.' : '') . $file_name); } else { // Check if it's a group (associative array) if (self::$group) { $assets = $assets[self::$group]; } foreach ($assets as $asset) { $last_modified = filemtime(realpath($path . '/' . $asset)); // Now check if the file exists in the cache directory $file = pathinfo($asset); if (self::$prefix_css and $type == 'css') { $file_name = self::$prefix_css . '.' . (self::$prefix_timestamp ? date('YmdHis', $last_modified) . '.' : '') . $file['filename'] . '.' . $type; } elseif (self::$prefix_js and $type == 'js') { $file_name = self::$prefix_js . '.' . (self::$prefix_timestamp ? date('YmdHis', $last_modified) . '.' : '') . $file['filename'] . '.' . $type; } else { $file_name = date('YmdHis', $last_modified) . '.' . $file['filename'] . '.' . $type; } $file_path = reduce_double_slashes(self::$cache_path . '/' . (self::$group ? self::$group . '.' : '') . $file_name); if (!file_exists($file_path)) { // Get file contents if ($type == 'css') { $less = new lessc(self::$css_path . '/' . $asset); $data = $less->parse(); } else { if (pathinfo($asset, PATHINFO_EXTENSION) === 'coffee') { // Try to compile CoffeeScript try { $data = read_file(reduce_double_slashes($path . '/' . $asset)); $data = CoffeeScript\compile($data); } catch (Exception $e) { $data = ''; } } else { $data = read_file(reduce_double_slashes($path . '/' . $asset)); } } // Process $data = self::_process($data, $type, 'all', site_url(self::$css_url)); // Auto clear cache directory? if ($type == 'css' and (self::$auto_clear_cache or self::$auto_clear_css_cache)) { self::clear_css_cache($asset); } if ($type == 'js' and (self::$auto_clear_cache or self::$auto_clear_js_cache)) { self::clear_js_cache($asset); } // And save the file write_file($file_path, $data); } // Add to files $files[] = reduce_double_slashes(self::$cache_url . '/' . (self::$group ? self::$group . '.' : '') . $file_name); } } } return $files; }
public static function build($file) { return CoffeeScript\compile($file); }