$a_media) {
$ret .= self::wrap_css($file, $scope, $a_media);
}
return $ret;
}
public static function loadall_js(array $files, string $scope='project'): string {
$ret = '';
foreach($files as $file=>$a) {
$ret .= self::wrap_js($file, $scope, $a);
}
return $ret;
}
public static function image(string $file, string $scope = '', array $a = array()): string {
$more = '';
if (count($a)) {
foreach ($a as $k => $v) {
$more .= " {$k}=\"{$v}\"";
}
}
$file = self::wrap_asset($file, $scope);
if ($file === false) {
return '';
}
return "
\r\n";
}
public static function alert($msg) {
return self::inline_js('alert("'.$msg.'");');
}
/**
* Wrapper for JS/CSS assets for the page.
* @param string $file or CDN
* @param string $scope (project/framework/cdn)
* @retval boolean|string false is not found, else Asset REF
*/
public static function wrap_asset(string $file, string $scope = 'project') {
$scope = \tts\common::string_to_lowercase($scope);
if ($scope === 'cdn') {
$proto = \tts\safer_io::get_clean_server_var('SERVER_PROTOCOL');
if ($proto === null) {
$protocol = '://';
} else {
$protocol = strtolower(substr($proto, 0, strpos($proto, '/'))) . '://';
}
return (\tts\common::is_string_found($file, '://') === true) ? $file : $protocol . $file;
}
if ($scope === 'project' || $scope === 'app') {
$path = PROJECT_ASSETS_DIR . "/";
$tts = self::is_minified($path, $file);
return ($tts !== false) ? PROJECT_ASSETS_BASE_REF . "/" . $tts : false;
}
if ($scope === 'assets') {
$path = dirname(\tts\site_helper::get_root(), 1) . "/public/assets/";
$tts = self::is_minified($path, $file);
return ($tts !== false) ? "/assets/" . $tts : false;
}
return $file;
}
/**
* Fetch Version of file if exists
* @param string $file
* @param string $scope
* @return string|bool
*/
private static function project_paths(string $file, string $scope = 'project'): string | bool {
$scope = \tts\common::string_to_lowercase($scope);
if ($scope === 'cdn') {
return "";
} else if ($scope === 'project' || $scope === 'app') {
$path = PROJECT_ASSETS_DIR . "/";
} else if ($scope === 'assets') {
$path = dirname(\tts\site_helper::get_root(), 1) . "/public/assets/";
} else {
return "";
}
$check = self::is_minified($path, $file);
return ($check !==false) ? self::get_ver($path . $check) : false;
}
/**
* Wrapper to return the CSS href=file.. stylesheet code for use in page.
* @param string $file - CSS file
* @param string $media - default of all media
* @retval string
*/
public static function wrap_css(string $file, string $scope = 'project', array $a_media = array()): string {
$more = '';
if (count($a_media)) {
foreach ($a_media as $k => $v) {
$more .= " {$k}=\"{$v}\"";
}
} else {
$more .= " media=\"all\"";
}
$ver = self::project_paths($file, $scope);
$wrap_file = self::wrap_asset($file, $scope);
if ($ver === false || $wrap_file === false) {
return "";
}
return "\r\n";
}
/**
* Wrapper to return the JavaScript src=file... code for use with page.
* @param type $file - external JS file.
* @retval string of script src=file
*/
public static function wrap_js(string $file, string $scope = 'project', array $a = array()): string {
$more = '';
if (count($a)) {
foreach ($a as $k => $v) {
$more .= (isset($k) && $k !=0 ) ? " {$k}=\"{$v}\"" : " {$v}";
}
}
$ver = self::project_paths($file, $scope);
$wrap_file = self::wrap_asset($file, $scope);
if ($ver === false || $wrap_file === false) {
return "";
}
return "\r\n";
//return "";
}
/**
* Purpose: To do inline JavaScript.
* @param type $code string of code to inline into page.
* @retval type
*/
public static function inline_js(string $code): string {
return "\r\n";
}
/**
* Purpose: To execute this JavaScript code once JQuery is Ready().
* @param string $code to do once JQuery is Ready
* @retval string wrapped in ready code...
*/
public static function jquery_load(string $code): string {
return "\r\n$(function() { \r\n \t {$code} \r\n }); \r\n";
}
public static function is_minified(string $path, string $file) {
$safe_path = \tts\security::filter_uri($path);
$safe_file = \tts\security::filter_uri($file);
if (\tts\common::is_string_found($safe_file, '.auto.js')) {
$production = (\tts\main\configure::get('tts', 'live') === true) ? true : false;
$safe_file = str_replace('.auto.js', '', $safe_file);
if ( $production && file_exists($safe_path . $safe_file . '.min.js') ) {
return $safe_file . '.min.js';
}
return (file_exists($safe_path . $safe_file . '.js')) ? $safe_file . '.js' : false;
}
if (\tts\common::is_string_found($safe_file, '.auto.css')) {
$production = (\tts\main\configure::get('tts', 'live') === true) ? true : false;
$safe_file = str_replace('.auto.css', '', $safe_file);
if ( $production && file_exists($safe_path . $safe_file . '.min.css') ) {
return $safe_file . '.min.css';
}
return (file_exists($safe_path . $safe_file . '.css')) ? $safe_file . '.css' : false;
}
return ( file_exists($safe_path . $safe_file) ) ? $safe_file : false;
}
/**
* meta redirect when headers are already sent...
* @param string url - site to do redirect on
* @reval none
*/
public static function goto_url(string $url): void {
echo '';
exit;
}
/**
* Rediect to url and attempt to send via header.
* @param string $url - site to do redirect for
* @retval none - exits once done
*/
public static function redirect_url(string $url): void {
$url = str_replace(array('&', "\n", "\r"), array('&', '', ''), $url);
if (!headers_sent()) {
header('Location: ' . $url);
} else {
self::goto_url($url);
}
exit;
}
}