* @package dev * @link https://www.zentao.net */ namespace zin; $featureBarItems = array(); foreach($lang->dev->featureBar['api'] as $key => $label) { $featureBarItems[] = array ( 'text' => $label, 'active' => ($selectedModule == $key || ($key == 'index' and $selectedModule != 'restapi')), 'url' => inlink('api', "module=$key") ); } $fnBuildAPIContent = function() use($selectedModule, $apis) { global $lang, $config, $app; $app->loadLang($selectedModule); $app->loadConfig($selectedModule); $contents = array(); foreach($apis as $api) { $methodName = zget($api, 'name', ''); $params = array(); $paramTR = array(); if(isset($api['param'])) { foreach($api['param'] as $param) { $params[] = "{$param['var']}=[{$param['var']}]"; $paramTR[] = h::tr ( h::td($param['var']), h::td($param['type']), h::td($param['desc']) ); } } $params = implode('&', $params); $postTR = array(); if(isset($config->dev->postParams[$selectedModule][$methodName])) { foreach($config->dev->postParams[$selectedModule][$methodName] as $paramName => $paramType) { $paramDesc = ''; $listKey = $paramName . 'List'; if(isset($lang->$selectedModule->$paramName)) $paramDesc .= $lang->$selectedModule->$paramName . ' '; if(isset($lang->$selectedModule->$listKey)) $paramDesc .= sprintf($lang->dev->paramRange, join(' | ', array_keys($lang->$selectedModule->$listKey))); if($paramType == 'date') $paramDesc .= $lang->dev->paramDate; if($paramName == 'color') $paramDesc .= $lang->dev->paramColor; if(isset($config->$selectedModule->$methodName->requiredFields) and strpos($config->$selectedModule->$methodName->requiredFields, $paramName) !== false) $paramDesc .= "*{$lang->required}"; if($paramName == 'product') $paramDesc .= "*{$lang->required}"; if($paramName == 'mailto') $paramDesc .= $lang->dev->paramMailto; $postTR[] = h::tr ( h::td($paramName), h::td($paramType), h::td(html($paramDesc)) ); } } $contents[] = div ( setClass('detail'), div ( setClass('detail-title font-bold'), !empty($api['post']) ? 'GET/POST' : 'GET', ' ' . helper::createLink($selectedModule, $methodName, $params, 'json') ), div ( setClass('detail-content mt-3'), html(zget($api, 'doc', '')), h::table ( setClass('table bordered'), h::tr ( h::th($lang->dev->params), h::th($lang->dev->type), h::th($lang->dev->desc), ), isset($api['param']) ? $paramTR : h::tr(h::td(set::colspan(3), $lang->dev->noParam)) ), isset($config->dev->postParams[$selectedModule][$methodName]) ? h::table ( setClass('table bordered'), h::caption(setClass('text-left'), $lang->dev->post), h::tr ( h::th($lang->dev->params), h::th($lang->dev->type), h::th($lang->dev->desc) ), $postTR ) : null ) ); } return $contents; }; $activeGroup = ''; foreach($moduleTree as $module) { if($module->active) $activeGroup = $module->id; } h::css(" .sidebar .tree [data-level=\"0\"][id=\"{$activeGroup}\"] {color: var(--color-primary-600); font-weight:bolder} .sidebar .tree [data-level=\"1\"][id=\"{$selectedModule}\"] {color: var(--color-primary-600); font-weight:bolder} "); featureBar ( set::items($featureBarItems), icon(set('title', $lang->dev->apiTips), 'help') ); sidebar ( setClass('bg-white'), h::header ( setClass('h-10 flex items-center pl-4 flex-none gap-3'), div(setClass('text-lg font-semibold flex items-center'), icon(setClass('pr-2'), 'list'), span($lang->dev->moduleList)), ), treeEditor(set(array('items' => $moduleTree, 'canEdit' => false, 'canDelete' => false, 'canSplit' => false))) ); div ( setClass('bg-white p-3'), $selectedModule ? div(setClass("module-content"), $fnBuildAPIContent()) : null );