|
|
<?php
|
|
|
|
|
|
namespace Artmark\Assets;
|
|
|
|
|
|
/**
|
|
|
* Description of Asset
|
|
|
*
|
|
|
* @author Andrey Pokidov <pokidov@e-traffic.ru>
|
|
|
*/
|
|
|
class Asset
|
|
|
{
|
|
|
const TYPE_JAVASCRIPT = 'js';
|
|
|
const TYPE_CSS = 'css';
|
|
|
|
|
|
const POSITION_HEAD = 'head';
|
|
|
const POSITION_TOP = 'top';
|
|
|
const POSITION_BOTTOM = 'bottom';
|
|
|
|
|
|
private $name = '';
|
|
|
private $type = self::TYPE_JAVASCRIPT;
|
|
|
private $position = self::POSITION_HEAD;
|
|
|
private $url = '';
|
|
|
private $version = '';
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Создаёт новый объекс Script, описывающий данные о скрипте
|
|
|
* @param string $url URL скрипта
|
|
|
* @param string|int $version Версия скрипта
|
|
|
* @param string $type Тип скрипта, может принимать одно из значений Script::TYPE_JAVASCRIPT или Script::TYPE_CSS
|
|
|
* @param string $position Место скрипта в коде страницы, может принимать одно из значений:
|
|
|
* <ul>
|
|
|
* <li>Script::POSITION_HEAD в секции <head>...</head></li>
|
|
|
* <li>Script::POSITION_TOP сразу после открывающего тега <body></li>
|
|
|
* <li>Script::POSITION_BOTTOM непосредственно перед закрывающим тегом </body></li>
|
|
|
* </ul>
|
|
|
*/
|
|
|
public function __construct($name, $url, $version, $type = self::TYPE_JAVASCRIPT, $position = self::POSITION_HEAD)
|
|
|
{
|
|
|
self::checkName($name);
|
|
|
self::checkUrl($url);
|
|
|
self::checkVersion($url);
|
|
|
self::checkAssetType($type);
|
|
|
self::checkAssetPosition($position);
|
|
|
|
|
|
$this->name = self::correctName($name);
|
|
|
$this->url = trim($url);
|
|
|
$this->version = is_string($version) ? trim($version) : $version;
|
|
|
$this->type = $type;
|
|
|
$this->position = $position;
|
|
|
}
|
|
|
|
|
|
public function name()
|
|
|
{
|
|
|
return $this->name;
|
|
|
}
|
|
|
|
|
|
public function type()
|
|
|
{
|
|
|
return $this->type;
|
|
|
}
|
|
|
|
|
|
public function isJavaScript()
|
|
|
{
|
|
|
return $this->type == self::TYPE_JAVASCRIPT;
|
|
|
}
|
|
|
|
|
|
public function isCss()
|
|
|
{
|
|
|
return $this->type == self::TYPE_CSS;
|
|
|
}
|
|
|
|
|
|
public function position()
|
|
|
{
|
|
|
return $this->position;
|
|
|
}
|
|
|
|
|
|
public function isAtHead()
|
|
|
{
|
|
|
return $this->position == self::POSITION_HEAD;
|
|
|
}
|
|
|
|
|
|
public function isAtTop()
|
|
|
{
|
|
|
return $this->position == self::POSITION_TOP;
|
|
|
}
|
|
|
|
|
|
public function isAtBottom()
|
|
|
{
|
|
|
return $this->position == self::POSITION_BOTTOM;
|
|
|
}
|
|
|
|
|
|
public function url()
|
|
|
{
|
|
|
return $this->url;
|
|
|
}
|
|
|
|
|
|
public function urlWithVersion()
|
|
|
{
|
|
|
if (!$this->hasVersion())
|
|
|
{
|
|
|
return $this->url;
|
|
|
}
|
|
|
|
|
|
return $this->url . (strpos($this->url, '?') === false ? '?' : '&') . 'v=' . urlencode($this->version);
|
|
|
}
|
|
|
|
|
|
public function hasVersion()
|
|
|
{
|
|
|
return !empty($this->version);
|
|
|
}
|
|
|
|
|
|
public function version()
|
|
|
{
|
|
|
return $this->version;
|
|
|
}
|
|
|
|
|
|
|
|
|
public static function correctName($name)
|
|
|
{
|
|
|
return strtolower(trim(strval($name)));
|
|
|
}
|
|
|
|
|
|
public static function checkName($name)
|
|
|
{
|
|
|
if (!is_string($name)) {
|
|
|
throw new AssetException('Incorrect name type: `' . gettype($name) . '`, the name of an asset must be a string');
|
|
|
}
|
|
|
|
|
|
if (trim($name) == '') {
|
|
|
throw new AssetException('The name of an asset cannot be an empty string');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static function checkUrl($url)
|
|
|
{
|
|
|
if (!is_string($url)) {
|
|
|
throw new AssetException('Incorrect URL type: `' . gettype($url) . '`, the URL of an asset must be a string');
|
|
|
}
|
|
|
|
|
|
if (trim($url) == '') {
|
|
|
throw new AssetException('The URL of an asset cannot be an empty string');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static function checkVersion($verison)
|
|
|
{
|
|
|
if (!is_string($verison) && !is_int($verison)) {
|
|
|
throw new AssetException('Incorrect version type: `' . gettype($verison) . '`, the version of an asset must be a string or an integer number');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static function checkAssetType($type)
|
|
|
{
|
|
|
if ($type != self::TYPE_JAVASCRIPT && $type != self::TYPE_CSS) {
|
|
|
throw new AssetException('Incorrect asset type: `' . $type . '`');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static function checkAssetPosition($position)
|
|
|
{
|
|
|
if ($position != self::POSITION_HEAD && $position != self::POSITION_TOP && $position != self::POSITION_BOTTOM) {
|
|
|
throw new AssetException('Incorrect asset position: `' . $position . '`');
|
|
|
}
|
|
|
}
|
|
|
}
|