function solve_paths($text) { static $test = array('/(?<=font\\/)\\S+\\.(?:woff|eot|ttf|svg)\\b/i', '/(?<=img\\/)\\S+\\.(?:jpe?g|png|gif)\\b/i'); foreach ($test as $expr) { $text = preg_replace_callback($expr, function ($match) { return \Sauce\App\Assets::solve($match[0]); }, $text); } return $text; }
public static function initialize(\Closure $lambda) { $test = strtoupper(PHP_SAPI); if (strpos($test, 'CLI') === FALSE or $test === 'CLI-SERVER') { // static assets if ($path = \Postman\Request::value('@')) { $test = \Sauce\App\Assets::read($path); $output = new \Postman\Response(200, array('Content-Type' => $test['type']), $test['output']); \Sauce\Logger::debug("Serve {$path}"); return $output; } // settings \Labourer\Web\Session::initialize(); ignore_user_abort(FALSE); // locales if (!($key = option('language'))) { $set = \Locale\Base::all(); $key = key($set); } @setlocale(LC_ALL, "{$key}.UTF-8"); \Locale\Config::set('default', $key); \Locale\Base::load_path(path(APP_PATH, 'app', 'locale')); } \Sauce\Logger::debug('Ready'); // defaults $out = \Sauce\Base::$response; $lambda($out); if ($action = \Broil\Routing::run()) { $uri = \Broil\Config::get('request_uri'); $method = \Broil\Config::get('request_method'); \Sauce\Logger::debug("{$method} {$uri}"); \Sauce\Logger::debug("Route {$action['match']}"); if (!empty($action['before'])) { foreach ((array) $action['before'] as $callback) { $action = call_user_func($callback, $action); } } params($action['params']); if (is_string($action['to'])) { if (strpos($action['to'], '://') !== FALSE) { $out = new \Postman\Response(redirect($action)); } elseif (strpos($action['to'], '#') !== FALSE) { $cache = empty($action['no-cache']) ? isset($action['expires']) ? $action['expires'] : option('expires') : 0; $cache = APP_ENV === 'production' && \Postman\Request::method() === 'GET' ? $cache : 0; @(list($controller, $method) = explode('#', (string) $action['to'])); \Sauce\App\Handler::execute($controller, $method, $cache); } else { throw new \Exception("Unknown '{$action['to']}' action"); } } elseif (is_callable($action['to'])) { ob_start(); $tmp = call_user_func($action['to']); $old = ob_get_clean(); if (is_array($tmp)) { @(list($out->status, $out->headers, $out->response) = $tmp); } else { $out->status = is_numeric($tmp) ? (int) $tmp : 200; $out->response = is_string($tmp) ? $tmp : $old; } } elseif (is_array($action['to'])) { $out = new \Postman\Response($action['to']); } else { throw new \Exception("Cannot execute '{$action['to']}'"); } if (!empty($action['after'])) { foreach ((array) $action['after'] as $callback) { $out = call_user_func($callback, $out); } } \Sauce\Logger::debug('Done ', json_encode((array) $out->headers)); return $out; } else { throw new \Exception("Route not reach"); } }
$out[$key] = js_min($out[$key]); } } status('prepare', "{$key}"); } } // final integration if (!empty($out)) { $set = array_keys($out); write($tmp = path(TMP, md5($file)), join("\n", $out)); $hash = md5(md5_file($tmp) . filesize($tmp)); $name = str_replace($base_path . DIRECTORY_SEPARATOR, '', $file); $min_file = path($static_dir, \IO\File::extn($name) . "{$hash}.{$type}"); if (s3_handle()) { s3_upload_asset($tmp, str_replace($static_dir . DIRECTORY_SEPARATOR, '', $min_file)); } else { is_dir(dirname($min_file)) or mkdir(dirname($min_file), 0777, TRUE); rename($tmp, $min_file); } \Sauce\App\Assets::assign($path = str_replace(path($base_path, $type) . DIRECTORY_SEPARATOR, '', $file), $hash); status('hashing', "{$path} [{$hash}]"); } } }); } } status('update', 'config/resources.php'); \Sauce\App\Assets::save(); } else { error("\n Nothing to do\n"); }
function tag_for($src) { return \Sauce\App\Assets::tag_for($src); }