* zin: add collapse btn wg.

This commit is contained in:
dingyongliang
2023-06-19 16:05:18 +08:00
parent faa5cb4f9e
commit d7c12e9528
4 changed files with 53 additions and 16 deletions
+11
View File
@@ -1354,6 +1354,17 @@ function backBtn(): backBtn
return createWg('backBtn', func_get_args());
}
/**
* Collapse btn widget.
*
* string target
* string parent
*/
function collapseBtn(): collapseBtn
{
return createWg('collapseBtn', func_get_args());
}
/**
* Main navbar widget.
*
+38
View File
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace zin;
require_once dirname(__DIR__) . DS . 'btn' . DS . 'v1.php';
class collapseBtn extends wg
{
protected static $defineProps = array(
'target: string', // 展开折叠的目标元素选择器。
'parent: string' // 目标元素与按钮共同的父级元素选择器,使用 closest 辅助目标元素的确定。
);
protected function build()
{
$target = $this->prop('target');
$parent = $this->prop('parent');
return btn
(
setClass('btn-link', 'collapse-btn'),
set::icon('angle-down'),
on::click
(
<<<FUNC
const btn = event.target.closest('.collapse-btn');
const icon = btn.querySelector('.icon');
icon.classList.toggle('icon-angle-down');
icon.classList.toggle('icon-angle-top');
const parent = btn.closest('$parent');
const target = parent.querySelector('$target');
if(target) target.classList.toggle('hidden');
FUNC
)
);
}
}
+1 -1
View File
@@ -3,4 +3,4 @@
.nav-tabs>.nav-item>a:before {background: none;}
.nav-tabs>.nav-item>a.active {color: var(--color-primary-500);}
.nav-tabs>.nav-item>a.active:after {border-bottom-color: var(--color-primary-500) !important; border-bottom-width: 2px;}
.tabs .btn-collapse {position: absolute; top: 16px; right: 24px; width: 24px; height: 24px;}
.tabs .collapse-btn {position: absolute; top: 16px; right: 24px; width: 24px; height: 24px;}
+3 -15
View File
@@ -94,22 +94,10 @@ class tabs extends wg
$collapse = $this->prop('collapse');
if(!$collapse) return null;
return btn
return collapseBtn
(
setClass('btn-link', 'btn-collapse'),
set::icon('angle-down'),
on::click
(
<<<FUNC
const btn = event.target;
const icon = btn.querySelector('.icon');
const tabs = btn.closest('.tabs');
const tabContent = tabs.querySelector('.tab-content');
if(tabContent) tabContent.classList.toggle('hidden');
icon.classList.toggle('icon-angle-down');
icon.classList.toggle('icon-angle-top');
FUNC
)
set::target('.tab-content'),
set::parent('.tabs')
);
}