first commit
This commit is contained in:
23
src/CGSelect.php
Normal file
23
src/CGSelect.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Itguild\PhpCgSelect;
|
||||
|
||||
class CGSelect
|
||||
{
|
||||
protected $driver;
|
||||
|
||||
public function __construct(string $selector, array $options = [])
|
||||
{
|
||||
$this->driver = new CGSelectDriver($selector, $options);
|
||||
}
|
||||
|
||||
public function getJS(){
|
||||
return $this->driver->getJS();
|
||||
}
|
||||
|
||||
public static function renderCDN($version = 'latest')
|
||||
{
|
||||
CGSelectDriver::renderCDN($version);
|
||||
}
|
||||
|
||||
}
|
182
src/CGSelectDriver.php
Normal file
182
src/CGSelectDriver.php
Normal file
@ -0,0 +1,182 @@
|
||||
<?php
|
||||
|
||||
namespace Itguild\PhpCgSelect;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class CGSelectDriver
|
||||
{
|
||||
public array $initData = [];
|
||||
public string $itemsStr = '';
|
||||
|
||||
public string $stylesStr = '';
|
||||
public string $paramsStr = '';
|
||||
public string $html = '';
|
||||
|
||||
public string $js = '';
|
||||
|
||||
public function __construct(string $selector, array $options = [])
|
||||
{
|
||||
$this->initData['selector'] = $selector;
|
||||
$this->initData = array_merge($this->initData, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function createJS(): void
|
||||
{
|
||||
$this->js .= 'const dropdown = new CGSelect({';
|
||||
$this->js .= $this->getParams();
|
||||
$this->js .= $this->getItems();
|
||||
$this->js .= $this->getStyles();
|
||||
$this->js .= '});';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getJS(): string
|
||||
{
|
||||
$this->createJS();
|
||||
return $this->js;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
* @return void
|
||||
*/
|
||||
public static function renderCDN(string $version = 'latest'): void
|
||||
{
|
||||
echo "<script src='https://cdn.itguild.info/items/cg-select/$version/main.js'></script>";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getParams(): string
|
||||
{
|
||||
return $this->createParams($this->initData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
private function createParams(array $data): string
|
||||
{
|
||||
foreach ($data as $key => $datum) {
|
||||
if (is_string($datum)) {
|
||||
$this->paramsStr .= "$key: '$datum',";
|
||||
}
|
||||
if (is_integer($datum)) {
|
||||
$this->paramsStr .= "$key: $datum,";
|
||||
}
|
||||
if (is_bool($datum)) {
|
||||
$this->paramsStr .= "$key: $datum,";
|
||||
}
|
||||
}
|
||||
|
||||
return $this->paramsStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
private function createParamsLocal(array $data): string
|
||||
{
|
||||
$paramsStr = '';
|
||||
foreach ($data as $key => $datum) {
|
||||
if (is_string($datum)) {
|
||||
$paramsStr .= "$key: '$datum',";
|
||||
}
|
||||
if (is_integer($datum)) {
|
||||
$paramsStr .= "$key: $datum,";
|
||||
}
|
||||
if (is_bool($datum)) {
|
||||
$paramsStr .= "$key: $datum,";
|
||||
}
|
||||
}
|
||||
|
||||
return $paramsStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|bool
|
||||
*/
|
||||
public function getItems(): string|bool
|
||||
{
|
||||
if (isset($this->initData['items'])) {
|
||||
$this->createItems($this->initData['items']);
|
||||
return $this->itemsStr;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
private function createItems(array $data): void
|
||||
{
|
||||
$this->itemsStr .= "items: [";
|
||||
foreach ($data as $datum) {
|
||||
if (is_string($datum)) {
|
||||
$this->itemsStr .= "'$datum',";
|
||||
}
|
||||
if (is_array($datum)) {
|
||||
$this->itemsStr .= "{";
|
||||
if (isset($datum['category']) && isset($datum['categoryItems'])) {
|
||||
$this->itemsStr .= "category: '" . $datum['category'] . "',";
|
||||
$this->itemsStr .= "categoryItems: [";
|
||||
foreach ($datum['categoryItems'] as $item) {
|
||||
if (is_string($item)) {
|
||||
$this->itemsStr .= "'$item',";
|
||||
}
|
||||
if (is_array($item)) {
|
||||
$this->itemsStr .= "{";
|
||||
$this->itemsStr .= $this->createParamsLocal($item);
|
||||
$this->itemsStr .= "},";
|
||||
}
|
||||
}
|
||||
$this->itemsStr .= "],";
|
||||
} else {
|
||||
$this->itemsStr .= $this->createParamsLocal($datum);
|
||||
}
|
||||
$this->itemsStr .= "},";
|
||||
}
|
||||
}
|
||||
|
||||
$this->itemsStr .= "],";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|bool
|
||||
*/
|
||||
public function getStyles(): string|bool
|
||||
{
|
||||
if (isset($this->initData['styles'])) {
|
||||
$this->createStyle($this->initData['styles']);
|
||||
return $this->stylesStr;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $styles
|
||||
* @return void
|
||||
*/
|
||||
public function createStyle(array $styles): void
|
||||
{
|
||||
$this->stylesStr .= "styles: {";
|
||||
foreach ($styles as $key => $style) {
|
||||
$this->stylesStr .= "$key: {" . $this->createParamsLocal($style) . "}";
|
||||
}
|
||||
$this->stylesStr .= "},";
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user