Простой компонент для yii-1 для регистрации jQuery. Сама библиотека тоже присутствует. Расположение - рекомендованное для проектов на yii-1.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yii1-component-jquery/protected/components/JQueryComponent.php

118 lines
3.6 KiB

<?php
/**
* Простой помошник регистрации jQuery
*/
/**
* Вывод скрипта
*/
class JQueryComponent extends CApplicationComponent
{
const VERSION = '3.6.0';
// Global options
public $debug = null; // null == авто-режим,
// false - использовать .min.js файлы,
// true - использовать несжатые файлы
public $cdn = false; // bool, использовать cdn
public $slim = false; // bool, использовать короткую версию библиотеки
public $position = CClientScript::POS_END; // int, где разместить скрипт
public $async = false; // bool, использовать асинхронную загрузку
public $defer = false; // bool, использовать асинхронную загрузку, запустить после разбора страницы
public $localUrl = 'js/'; // локальная ссылка, относительно публичного каталога document_root
public $cdnUrl = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/{version}';
// ссылка на CDN
public $baseJs = 'jquery.js'; // название базового файла
public $slimJs = 'jquery.slim.js'; // название файла короткой версии
private $_registered = array();
public function init()
{
$this->cdnUrl = str_replace('{version}', self::VERSION, $this->cdnUrl);
if ($this->debug === null) {
if (defined('YII_DEBUG') && YII_DEBUG === true) {
$this->debug = true;
}
if (defined('YII_ENV') && YII_ENV == 'dev') {
$this->debug = true;
}
if (defined('APPLICATION_ENV') && APPLICATION_ENV == 'dev') {
$this->debug = true;
}
}
if ($this->debug === null) {
$this->debug = false;
}
parent::init();
}
public function powered()
{
return '<a href="https://jquery.com/download">jQuery</a>';
}
public function getVersion()
{
return self::VERSION;
}
protected function _getUrl($jsFile)
{
if ($this->cdn) {
$url = $this->cdnUrl;
} else {
$url = Yii::app()->getAssetManager()->publish(dirname(dirname(__DIR__)).'/public/'.$this->localUrl, false, -1);
}
if ($this->debug === false) {
if (strpos($jsFile, '.min.js') === false) {
$jsFile = str_replace('.js', '.min.js', $jsFile);
}
}
$url .= '/' . $jsFile;
return $url;
}
public function register()
{
$jsFile = $this->baseJs;
if ($this->slim) $jsFile = $this->slimJs;
if (empty($this->_registered[$jsFile])) {
$options = array();
if ($this->async) $options['async'] = true;
if ($this->defer) $options['defer'] = true;
$url = $this->_getUrl($jsFile);
$cs = Yii::app()->clientScript;
$cs->scriptMap = array(
'jquery.js' => $url,
'jquery.min.js' => $url,
);
$cs->registerScriptFile(
$url,
$this->position,
$options
);
$this->_registered[$jsFile] = true;
}
}
}