diff --git a/config/filter.php b/config/filter.php
index 42bd625242..59fe2874da 100644
--- a/config/filter.php
+++ b/config/filter.php
@@ -187,6 +187,7 @@ $filter->project->default->cookie['lastProject'] = 'int';
$filter->project->default->cookie['lastPRJ'] = 'int';
$filter->project->default->cookie['projectMode'] = 'code';
$filter->project->browse->cookie['involved'] = 'code';
+$filter->project->browse->cookie['projectType'] = 'code';
$filter->project->story->cookie['storyModuleParam'] = 'int';
$filter->project->story->cookie['storyPreProjectID'] = 'int';
$filter->project->story->cookie['storyProductParam'] = 'int';
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 773bb0ad30..a4a9412257 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -112,7 +112,7 @@ $lang->loading = 'Loading...';
$lang->notFound = 'Not found!';
$lang->notPage = 'Sorry, the features you are visiting are in development!';
$lang->showAll = '[[Show All]]';
-$lang->selectedItems = 'Seleted {0} items';
+$lang->selectedItems = 'Selected {0} items';
$lang->future = 'Waiting';
$lang->year = 'Year';
diff --git a/module/common/model.php b/module/common/model.php
index 525876f09e..37d7afb21d 100644
--- a/module/common/model.php
+++ b/module/common/model.php
@@ -544,7 +544,8 @@ class commonModel extends model
if($config->systemMode == 'classic' and $openApp == 'execution') $icon = zget($lang->navIcons, 'project', '');
$link = helper::createLink($currentModule, $currentMethod);
- $html = $link ? html::a($link, "$icon {$lang->$openApp->common}", '', "class='btn'") : "$icon {$lang->$openApp->common}";
+ $className = $openApp == 'devops' ? 'btn num' : 'btn';
+ $html = $link ? html::a($link, "$icon {$lang->$openApp->common}", '', "class='$className'") : "$icon {$lang->$openApp->common}";
echo "
';
}
diff --git a/module/compile/model.php b/module/compile/model.php
index d18c4a10a7..5fe8999488 100644
--- a/module/compile/model.php
+++ b/module/compile/model.php
@@ -12,9 +12,9 @@
class compileModel extends model
{
/**
- * Get by id
- *
- * @param int $buildID
+ * Get by id
+ *
+ * @param int $buildID
* @access public
* @return object
*/
@@ -25,10 +25,10 @@ class compileModel extends model
/**
* Get build list.
- *
- * @param int $jobID
- * @param string $orderBy
- * @param object $pager
+ *
+ * @param int $jobID
+ * @param string $orderBy
+ * @param object $pager
* @access public
* @return array
*/
@@ -48,7 +48,7 @@ class compileModel extends model
/**
* Get unexecuted list.
- *
+ *
* @access public
* @return array
*/
@@ -59,7 +59,7 @@ class compileModel extends model
/**
* Get last result.
- *
+ *
* @param int $jobID
* @access public
* @return object
@@ -71,7 +71,7 @@ class compileModel extends model
/**
* Get build url.
- *
+ *
* @param object $jenkins
* @access public
* @return object
@@ -91,10 +91,10 @@ class compileModel extends model
/**
* Save build by job
- *
- * @param int $jobID
- * @param string $data
- * @param string $type
+ *
+ * @param int $jobID
+ * @param string $data
+ * @param string $type
* @access public
* @return void
*/
@@ -114,7 +114,7 @@ class compileModel extends model
/**
* Execute compile
- *
+ *
* @param object $compile
* @access public
* @return bool
diff --git a/module/doc/config.php b/module/doc/config.php
index 9300f4c4c0..0b18228a9d 100644
--- a/module/doc/config.php
+++ b/module/doc/config.php
@@ -28,6 +28,8 @@ $config->doc->editor->view = array('id' => 'comment,lastComment', 'tools' => '
$config->doc->markdown = new stdclass();
$config->doc->markdown->create = array('id' => 'contentMarkdown', 'tools' => 'withchange');
+$config->doc->defaultShowNumber = 10;
+
$config->doc->search['module'] = 'doc';
$config->doc->search['fields']['title'] = $lang->doc->title;
$config->doc->search['fields']['id'] = $lang->doc->id;
diff --git a/module/doc/control.php b/module/doc/control.php
index c30d61dc8a..e0b78957f1 100644
--- a/module/doc/control.php
+++ b/module/doc/control.php
@@ -911,7 +911,8 @@ class doc extends control
$actionURL = $this->createLink('doc', 'browse', "lib=0&browseType=bySearch&queryID=myQueryID");
$this->doc->buildSearchForm(0, array(), 0, $actionURL, 'objectLibs');
- $this->lang->TRActions = common::hasPriv('doc', 'create') ? $this->doc->buildCreateButton4Doc($type, $objectID, $libID) : '';
+ $this->lang->TRActions = $this->doc->buildCollectButton4Doc();
+ $this->lang->TRActions .= common::hasPriv('doc', 'create') ? $this->doc->buildCreateButton4Doc($type, $objectID, $libID) : '';
$moduleTree = $type == 'book' ? $this->doc->getBookStructure($libID) : $this->doc->getTreeMenu($type, $objectID, $libID, 0, $docID);
@@ -923,7 +924,7 @@ class doc extends control
if($doc->keywords)
{
- $doc->keywords = preg_replace("/(\n)|(\s)|(\t)|(\')|(')|(,)/", ',', $doc->keywords);
+ $doc->keywords = preg_replace("/(,)/", ',', $doc->keywords);
$doc->keywords = explode(',', $doc->keywords);
}
diff --git a/module/doc/lang/de.php b/module/doc/lang/de.php
index 32b4c921f1..48e0412c9e 100644
--- a/module/doc/lang/de.php
+++ b/module/doc/lang/de.php
@@ -89,20 +89,21 @@ $lang->doc->cancelCollection = 'Favorit entfernen';
$lang->doc->deleteFile = 'Delete File';
$lang->doc->menuTitle = 'Menu';
-$lang->doc->libName = 'Name';
-$lang->doc->libType = 'Kategorie';
-$lang->doc->custom = 'Eigene Dok Bibliothek';
-$lang->doc->customAB = 'Eigene Bibliothek';
-$lang->doc->createlib = 'Bibliothek erstellen';
-$lang->doc->allLibs = 'Bibliothek';
-$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Bibliothek Liste";
-$lang->doc->showFiles = 'Dok Bibliothek';
-$lang->doc->editlib = 'Bibliothek bearbeiten';
-$lang->doc->deleteLib = 'Bibliothek löschen';
-$lang->doc->fixedMenu = 'Im Menü fixieren';
-$lang->doc->removeMenu = 'Vom Menü entfernen';
-$lang->doc->search = 'Suche';
-$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
+$lang->doc->libName = 'Name';
+$lang->doc->libType = 'Kategorie';
+$lang->doc->custom = 'Eigene Dok Bibliothek';
+$lang->doc->customAB = 'Eigene Bibliothek';
+$lang->doc->createlib = 'Bibliothek erstellen';
+$lang->doc->allLibs = 'Bibliothek';
+$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Bibliothek Liste";
+$lang->doc->showFiles = 'Dok Bibliothek';
+$lang->doc->editlib = 'Bibliothek bearbeiten';
+$lang->doc->deleteLib = 'Bibliothek löschen';
+$lang->doc->fixedMenu = 'Im Menü fixieren';
+$lang->doc->removeMenu = 'Vom Menü entfernen';
+$lang->doc->search = 'Suche';
+$lang->doc->allCollections = 'All Collections';
+$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
/* 查询条件列表 */
$lang->doc->allProduct = 'Alle' . $lang->productCommon;
diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php
index c31465638e..48b7e2db6c 100644
--- a/module/doc/lang/en.php
+++ b/module/doc/lang/en.php
@@ -92,20 +92,21 @@ $lang->doc->menuTitle = 'Menu';
$lang->doc->collectAction = 'Add Favorite';
-$lang->doc->libName = 'Document Library';
-$lang->doc->libType = 'Category';
-$lang->doc->custom = 'Custom Document Library';
-$lang->doc->customAB = 'Custom Doc Lib';
-$lang->doc->createLib = 'Create Document Library';
-$lang->doc->allLibs = 'Library List';
-$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Libraries";
-$lang->doc->showFiles = 'Attachments';
-$lang->doc->editLib = 'Edit Document Library';
-$lang->doc->deleteLib = 'Delete Document Library';
-$lang->doc->fixedMenu = 'Fix to Menu';
-$lang->doc->removeMenu = 'Remove from Menu';
-$lang->doc->search = 'Search';
-$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
+$lang->doc->libName = 'Document Library';
+$lang->doc->libType = 'Category';
+$lang->doc->custom = 'Custom Document Library';
+$lang->doc->customAB = 'Custom Doc Lib';
+$lang->doc->createLib = 'Create Document Library';
+$lang->doc->allLibs = 'Library List';
+$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Libraries";
+$lang->doc->showFiles = 'Attachments';
+$lang->doc->editLib = 'Edit Document Library';
+$lang->doc->deleteLib = 'Delete Document Library';
+$lang->doc->fixedMenu = 'Fix to Menu';
+$lang->doc->removeMenu = 'Remove from Menu';
+$lang->doc->search = 'Search';
+$lang->doc->allCollections = 'All Collections';
+$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
global $config;
/* Query condition list. */
diff --git a/module/doc/lang/fr.php b/module/doc/lang/fr.php
index 1a4658f5a2..f1a2151826 100644
--- a/module/doc/lang/fr.php
+++ b/module/doc/lang/fr.php
@@ -89,20 +89,21 @@ $lang->doc->cancelCollection = 'Retirer des Favoris';
$lang->doc->deleteFile = 'Supprimer Fichier';
$lang->doc->menuTitle = 'Menu';
-$lang->doc->libName = 'Bibliothèque de Documents';
-$lang->doc->libType = 'Catégorie';
-$lang->doc->custom = 'Personnaliser Bibliothèque de Documents';
-$lang->doc->customAB = 'Person. Bib Doc';
-$lang->doc->createlib = 'Créer une Bibliothèque';
-$lang->doc->allLibs = 'Liste des Bibliothèque';
-$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Bibliothèque";
-$lang->doc->showFiles = 'Pièces Jointes';
-$lang->doc->editlib = 'Editer Bibliothèque';
-$lang->doc->deleteLib = 'Supprimer Bibliothèque';
-$lang->doc->fixedMenu = 'Coller au Menu';
-$lang->doc->removeMenu = 'Décoller du Menu';
-$lang->doc->search = 'Rechercher';
-$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
+$lang->doc->libName = 'Bibliothèque de Documents';
+$lang->doc->libType = 'Catégorie';
+$lang->doc->custom = 'Personnaliser Bibliothèque de Documents';
+$lang->doc->customAB = 'Person. Bib Doc';
+$lang->doc->createlib = 'Créer une Bibliothèque';
+$lang->doc->allLibs = 'Liste des Bibliothèque';
+$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Bibliothèque";
+$lang->doc->showFiles = 'Pièces Jointes';
+$lang->doc->editlib = 'Editer Bibliothèque';
+$lang->doc->deleteLib = 'Supprimer Bibliothèque';
+$lang->doc->fixedMenu = 'Coller au Menu';
+$lang->doc->removeMenu = 'Décoller du Menu';
+$lang->doc->search = 'Rechercher';
+$lang->doc->allCollections = 'All Collections';
+$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
/* 查询条件列表 */
$lang->doc->allProduct = 'Tous les' . $lang->productCommon . 's';
diff --git a/module/doc/lang/vi.php b/module/doc/lang/vi.php
index 739ecf4e48..54e8f30b41 100644
--- a/module/doc/lang/vi.php
+++ b/module/doc/lang/vi.php
@@ -89,20 +89,21 @@ $lang->doc->cancelCollection = 'Remove Favorite';
$lang->doc->deleteFile = 'Xóa File';
$lang->doc->menuTitle = 'Menu';
-$lang->doc->libName = 'Thư viện tài liệu';
-$lang->doc->libType = 'Danh mục';
-$lang->doc->custom = 'Tùy biến thư viện tài liệu';
-$lang->doc->customAB = 'Tùy biến Doc Lib';
-$lang->doc->createlib = 'Tạo thư viện tài liệu';
-$lang->doc->allLibs = 'Library danh sách';
-$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Libraries";
-$lang->doc->showFiles = 'Attachments';
-$lang->doc->editlib = 'Sửa thư viện tài liệu';
-$lang->doc->deleteLib = 'Xóa thư viện tài liệu';
-$lang->doc->fixedMenu = 'Sửa to Menu';
-$lang->doc->removeMenu = 'Remove from Menu';
-$lang->doc->search = 'Tìm kiếm';
-$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
+$lang->doc->libName = 'Thư viện tài liệu';
+$lang->doc->libType = 'Danh mục';
+$lang->doc->custom = 'Tùy biến thư viện tài liệu';
+$lang->doc->customAB = 'Tùy biến Doc Lib';
+$lang->doc->createlib = 'Tạo thư viện tài liệu';
+$lang->doc->allLibs = 'Library danh sách';
+$lang->doc->objectLibs = "{$lang->productCommon}/{$lang->executionCommon} Libraries";
+$lang->doc->showFiles = 'Attachments';
+$lang->doc->editlib = 'Sửa thư viện tài liệu';
+$lang->doc->deleteLib = 'Xóa thư viện tài liệu';
+$lang->doc->fixedMenu = 'Sửa to Menu';
+$lang->doc->removeMenu = 'Remove from Menu';
+$lang->doc->search = 'Tìm kiếm';
+$lang->doc->allCollections = 'All Collections';
+$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
/* Query condition list. */
$lang->doc->allProduct = 'All' . $lang->productCommon;
diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php
index a332ab805e..be111d38e5 100644
--- a/module/doc/lang/zh-cn.php
+++ b/module/doc/lang/zh-cn.php
@@ -105,6 +105,7 @@ $lang->doc->deleteLib = '删除文档库';
$lang->doc->fixedMenu = '固定到菜单栏';
$lang->doc->removeMenu = '从菜单栏移除';
$lang->doc->search = '搜索';
+$lang->doc->allCollections = '全部收藏文档';
$lang->doc->keywordsTips = '多个关键字请用逗号分隔。';
global $config;
diff --git a/module/doc/model.php b/module/doc/model.php
index 6bbbc17901..d2d6c8dbc5 100644
--- a/module/doc/model.php
+++ b/module/doc/model.php
@@ -1676,6 +1676,47 @@ class docModel extends model
return $html;
}
+ public function buildCollectButton4Doc()
+ {
+ $allLibs = array_keys($this->getLibs('all'));
+ $docs = $this->dao->select('t1.id,t1.title,t1.lib,t2.type,t2.product,t2.project,t2.execution')->from(TABLE_DOC)->alias('t1')
+ ->leftJoin(TABLE_DOCLIB)->alias('t2')->on('t1.lib=t2.id')
+ ->where('t1.deleted')->eq(0)
+ ->andWhere('t1.lib')->in($allLibs)
+ ->beginIF($this->config->doc->notArticleType)->andWhere('t1.type')->notIN($this->config->doc->notArticleType)->fi()
+ ->andWhere('t1.collector')->like("%,{$this->app->user->account},%")
+ ->orderBy('t1.id_desc')
+ ->limit($this->config->doc->defaultShowNumber)
+ ->fetchAll();
+
+ $html = "
| job->customParam;?> |
diff --git a/module/product/css/all.css b/module/product/css/all.css
index 13db8c8a15..266a78f19a 100644
--- a/module/product/css/all.css
+++ b/module/product/css/all.css
@@ -42,7 +42,7 @@ th.table-nest-title .sort-up {padding-left: 5px;}
th.table-nest-title .sort-down {padding-left: 5px;}
th .check-all {left: -16px;}
-#productTableList .icon-product:before {content: '\e98f'; width: 22px; height: 22px; background: none; color: #16a8f8; top: 0; line-height: 22px; margin-right: 2px; font-size: 14px;}
+#productTableList .icon-product:before {content: '\e98f'; width: 22px; height: 22px; background: none; color: rgb(166, 170, 184); top: 0; line-height: 22px; margin-right: 2px; font-size: 14px;}
.table.has-sort-head thead>tr>th>a:after, .table.has-sort-head thead>tr>th>a:before {top: -3px;}
.main-table thead>tr>th {padding: 0px 8px; line-height: 24px;}
diff --git a/module/program/model.php b/module/program/model.php
index 15930d5742..03fc536628 100644
--- a/module/program/model.php
+++ b/module/program/model.php
@@ -247,6 +247,7 @@ class programModel extends model
{
$TotalProgress = array();
$projectCount = array();
+ $viewPrjCount = array();
$progressList = array();
$programPairs = $this->getPairs();
$projectStats = $this->getProjectStats(0, 'all', 0, 'id_desc', null, 0, 0, true);
@@ -256,16 +257,29 @@ class programModel extends model
{
$TotalProgress[$programID] = 0;
$projectCount[$programID] = 0;
+ $viewPrjCount[$programID] = 0;
$progressList[$programID] = 0;
foreach($projectStats as $project)
{
if(strpos($project->path, ',' . $programID . ',') === false) continue;
+
+ /* The number of projects under this program that the user can view. */
+ if(strpos(',' . $this->app->user->view->projects . ',', ',' . $project->id . ',') !== false) $viewPrjCount[$programID]++;
+
$TotalProgress[$programID] += $project->hours->progress;
$projectCount[$programID]++;
}
if(empty($projectCount[$programID])) continue;
+
+ /* Program progress can't see when this user don't have all projects priv. */
+ if(!$this->app->user->admin and $viewPrjCount[$programID] != $projectCount[$programID])
+ {
+ unset($progressList[$programID]);
+ continue;
+ }
+
$progressList[$programID] = round($TotalProgress[$programID] / $projectCount[$programID]);
}
@@ -931,7 +945,7 @@ class programModel extends model
$project->hours = isset($hours[$project->id]) ? $hours[$project->id] : (object)$emptyHour;
$project->teamCount = isset($teams[$project->id]) ? $teams[$project->id]->teams : 0;
- $stats[] = $project;
+ $stats[$key] = $project;
}
return $stats;
}
diff --git a/module/program/view/browsebylist.html.php b/module/program/view/browsebylist.html.php
index b310fae7e0..bea3df1a5d 100644
--- a/module/program/view/browsebylist.html.php
+++ b/module/program/view/browsebylist.html.php
@@ -75,9 +75,11 @@
| begin;?> |
end == LONG_TIME ? $lang->program->longTime : $program->end;?> |
+ id])):?>
+
|
type == 'program'):?>
diff --git a/module/project/control.php b/module/project/control.php
index a55a8b610d..afc592d2dc 100644
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -216,6 +216,8 @@ class project extends control
$this->loadModel('execution');
$this->session->set('projectList', $this->app->getURI(true), 'project');
+ $projectType = $this->cookie->projectType ? $this->cookie->projectType : 'bylist';
+
/* Load pager and get tasks. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
@@ -232,10 +234,15 @@ class project extends control
$this->view->programID = $programID;
$this->view->program = $this->program->getByID($programID);
$this->view->programTree = $this->project->getTreeMenu(0, array('projectmodel', 'createManageLink'), 0, 'list');
+ $this->view->programs = array('0' => '') + $this->program->getParentPairs();
$this->view->users = $this->loadModel('user')->getPairs('noletter|pofirst|nodeleted');
$this->view->browseType = $browseType;
+ $this->view->projectType = $projectType;
$this->view->param = $param;
$this->view->orderBy = $orderBy;
+ $this->view->recTotal = $recTotal;
+ $this->view->recPerPage = $recPerPage;
+ $this->view->pageID = $pageID;
$this->display();
}
diff --git a/module/project/css/browse.css b/module/project/css/browse.css
index 3c5a1c9361..d2a3a5f620 100644
--- a/module/project/css/browse.css
+++ b/module/project/css/browse.css
@@ -5,3 +5,6 @@
th.c-budget,{text-align:right;}
td.c-actions {overflow: visible;}
.c-actions .btn {overflow: visible;}
+#programBox {float: left; margin-right: 10px;}
+#switchButton {background: #fff !important;}
+.panel-actions {position: relative; display: inline-block; vertical-align: middle; padding: 0 0;}
diff --git a/module/project/js/browse.js b/module/project/js/browse.js
index 6f812d1ef3..1bdb8ed328 100644
--- a/module/project/js/browse.js
+++ b/module/project/js/browse.js
@@ -6,6 +6,26 @@ $(function()
$.cookie('involved', involved, {expires:config.cookieLife, path:config.webRoot});
window.location.reload();
});
+
+ $('[id="switchButton"]').click(function()
+ {
+ var projectType = $(this).attr('data-type');
+ $.cookie('projectType', projectType, {expires:config.cookieLife, path:config.webRoot});
+ window.location.reload();
+ });
});
+/**
+ * Change program.
+ *
+ * @param int $programID
+ * @access public
+ * @return void
+ */
+function changeProgram(programID)
+{
+ link = createLink('project', 'browse', 'programID=' + programID + '&browseType=' + browseType + '¶m=' + param + '&orderBy=order_asc&recTotal=' + recTotal + '&recPerPage=' + recPerPage + '&pageID=' + pageID);
+ location.href = link;
+}
+
$(".tree #program" + programID).parent('li').addClass('active');
diff --git a/module/project/lang/de.php b/module/project/lang/de.php
index 5f1501217b..4a6f67d7a8 100644
--- a/module/project/lang/de.php
+++ b/module/project/lang/de.php
@@ -48,6 +48,8 @@ $lang->project->copyNoProject = 'There are no items available to copy.';
$lang->project->searchByName = 'Enter the project name to search';
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
+$lang->project->testreport = 'Testreport';
+$lang->project->selectProgram = 'Select Program';
/* Fields. */
$lang->project->common = 'Program';
@@ -74,6 +76,7 @@ $lang->project->realEnd = 'Actual End';
$lang->project->realBegan = 'Actual Began';
$lang->project->bygrid = 'Kanban';
$lang->project->bylist = 'List';
+$lang->project->bycard = 'Card';
$lang->project->mine = 'My';
$lang->project->myProject = 'Meine Zuständigkeit';
$lang->project->other = 'Andere';
diff --git a/module/project/lang/en.php b/module/project/lang/en.php
index 03385ee0f4..70d3c8d814 100644
--- a/module/project/lang/en.php
+++ b/module/project/lang/en.php
@@ -50,6 +50,8 @@ $lang->project->deleted = 'Deleted';
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
$lang->project->testreport = 'Test Report';
+$lang->project->testreport = 'Testreport';
+$lang->project->selectProgram = 'Select Program';
/* Fields. */
$lang->project->common = 'Project';
@@ -75,6 +77,7 @@ $lang->project->realEnd = 'Actual End';
$lang->project->realBegan = 'Actual Began';
$lang->project->bygrid = 'Kanban';
$lang->project->bylist = 'List';
+$lang->project->bycard = 'Card';
$lang->project->mine = 'My';
$lang->project->myProject = 'Mine';
$lang->project->other = 'Others';
diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php
index 29b5792fb9..b6d7071b7f 100644
--- a/module/project/lang/fr.php
+++ b/module/project/lang/fr.php
@@ -48,6 +48,8 @@ $lang->project->copyNoProject = 'There are no items available to copy.';
$lang->project->searchByName = 'Enter the project name to retrieve';
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
+$lang->project->testreport = 'Testreport';
+$lang->project->selectProgram = 'Select Program';
/* Fields. */
$lang->project->common = 'Project';
@@ -74,6 +76,7 @@ $lang->project->realEnd = 'Actual End';
$lang->project->realBegan = 'Actual Began';
$lang->project->bygrid = 'Kanban';
$lang->project->bylist = 'List';
+$lang->project->bycard = 'Card';
$lang->project->mine = 'My';
$lang->project->myProject = 'Mine';
$lang->project->other = 'Others';
diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php
index c531f3bedb..ecfd5a1981 100644
--- a/module/project/lang/vi.php
+++ b/module/project/lang/vi.php
@@ -48,6 +48,8 @@ $lang->project->copyNoProject = 'There are no items available to copy.';
$lang->project->searchByName = 'Enter the project name to retrieve';
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
+$lang->project->testreport = 'Testreport';
+$lang->project->selectProgram = 'Select Program';
/* Fields. */
$lang->project->common = 'Project';
@@ -74,6 +76,7 @@ $lang->project->realEnd = 'Actual End';
$lang->project->realBegan = 'Actual Began';
$lang->project->bygrid = 'Kanban';
$lang->project->bylist = 'List';
+$lang->project->bycard = 'Card';
$lang->project->mine = 'My';
$lang->project->myProject = 'Mine';
$lang->project->other = 'Others';
diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php
index 4fc6289d47..a11abd6f5a 100644
--- a/module/project/lang/zh-cn.php
+++ b/module/project/lang/zh-cn.php
@@ -50,6 +50,7 @@ $lang->project->deleted = '已删除';
$lang->project->linkedProducts = '已关联';
$lang->project->unlinkedProducts = '未关联';
$lang->project->testreport = '测试报告';
+$lang->project->selectProgram = '筛选项目集';
/* Fields. */
$lang->project->common = '项目';
@@ -75,6 +76,7 @@ $lang->project->realEnd = '实际完成日期';
$lang->project->realBegan = '实际开始日期';
$lang->project->bygrid = '看板';
$lang->project->bylist = '列表';
+$lang->project->bycard = '卡片';
$lang->project->mine = '我参与的';
$lang->project->myProject = '我负责';
$lang->project->other = '其他';
diff --git a/module/project/view/browse.html.php b/module/project/view/browse.html.php
index 22a6f3e066..2dd5b6751f 100644
--- a/module/project/view/browse.html.php
+++ b/module/project/view/browse.html.php
@@ -15,115 +15,20 @@
js::set('orderBy', $orderBy);
js::set('programID', $programID);
js::set('browseType', $browseType);
+js::set('param', $param);
+js::set('orderBy', $orderBy);
+js::set('recTotal', $recTotal);
+js::set('recPerPage', $recPerPage);
+js::set('pageID', $pageID);
+?>
+
-
-
- config->systemMode == 'new'):?>
-
-
-
- project->featureBar as $key => $label):?>
-
- $label";?>
- {$pager->recTotal}";?>
-
-
- $lang->project->mine), '', $this->cookie->involved ? 'checked=checked' : '');?>
-
-
- config->maxVersion)):?>
- ' . $lang->project->create, '', 'class="btn btn-primary" data-toggle="modal" data-target="#guideDialog"');?>
- config->systemMode == 'new'):?>
- ' . $lang->project->create, '', 'class="btn btn-primary"');?>
-
- ' . $lang->execution->create, '', 'class="btn btn-primary"');?>
-
-
-
-
- config->systemMode == 'new'):?>
-
-
-
-
-
-
- project->empty;?>
- config->maxVersion)):?>
- ' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal" data-target="#guideDialog"');?>
- config->systemMode == 'new'):?>
- ' . $lang->project->create, '', 'class="btn btn-info"');?>
-
- ' . $lang->execution->create, '', 'class="btn btn-info"');?>
-
-
-
-
-
-
-
-
diff --git a/module/project/view/browsebycard.html.php b/module/project/view/browsebycard.html.php
new file mode 100644
index 0000000000..5f13d3636e
--- /dev/null
+++ b/module/project/view/browsebycard.html.php
@@ -0,0 +1,95 @@
+
+ * @package project
+ * @version $Id: browsebycard.html.php 4769 2021-07-23 11:29:21Z $
+ * @link https://www.zentao.net
+ */
+?>
+
+
+ $project):?>
+
+
+
+ maxVersion) and $project->model === 'waterfall'):?>
+
+ maxVersion)):?>
+
+
+ name);?>
+
+
+
+
+
+
+
diff --git a/module/project/view/browsebylist.html.php b/module/project/view/browsebylist.html.php
new file mode 100644
index 0000000000..ca451913f1
--- /dev/null
+++ b/module/project/view/browsebylist.html.php
@@ -0,0 +1,126 @@
+
+ * @package project
+ * @version $Id: browsebylist.html.php 4769 2021-07-23 11:16:21Z $
+ * @link https://www.zentao.net
+ */
+?>
+
+
+ config->systemMode == 'new'):?>
+
+
+
+ project->featureBar as $key => $label):?>
+
+ $label";?>
+ {$pager->recTotal}";?>
+
+
+ $lang->project->mine), '', $this->cookie->involved ? 'checked=checked' : '');?>
+
+
+
+
+ config->systemMode == 'new'):?>
+
+
+
+
+
+
+ project->empty;?>
+ config->maxVersion)):?>
+ ' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal" data-target="#guideDialog"');?>
+ config->systemMode == 'new'):?>
+ ' . $lang->project->create, '', 'class="btn btn-info"');?>
+
+ ' . $lang->execution->create, '', 'class="btn btn-info"');?>
+
+
+
+
+
+
+
+
diff --git a/www/js/zui/min.js b/www/js/zui/min.js
index b8ad610805..5fde049660 100644
--- a/www/js/zui/min.js
+++ b/www/js/zui/min.js
@@ -1,5 +1,5 @@
/*!
- * ZUI: ZUI for Zentao - v1.9.2 - 2021-07-23
+ * ZUI: ZUI for Zentao - v1.9.2 - 2021-07-26
* http://openzui.com
* GitHub: https://github.com/easysoft/zui.git
* Copyright (c) 2021 cnezsoft.com; Licensed MIT
@@ -76,4 +76,4 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"=
*/
function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],a=String.fromCharCode(e.which).toLowerCase(),s="",r={};e.altKey&&"alt"!==o&&(s+="alt+"),e.ctrlKey&&"ctrl"!==o&&(s+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(s+="meta+"),e.shiftKey&&"shift"!==o&&(s+="shift+"),o?r[s+o]=!0:(r[s+a]=!0,r[s+t.hotkeys.shiftNums[a]]=!0,"shift+"===s&&(r[t.hotkeys.shiftNums[a]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return Array.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},s[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",o=0,a=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},s={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};a.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},a.prototype.add=function(e,i,n,o,a){var s,r=t(e),l=this.options;if(r.is("li")?(s=r.children("ul"),s.length||(s=t(""),r.append(s),this._initList(s,r))):s=r,s){var h=this;Array.isArray(i)||(i=[i]),t.each(i,function(e,i){var n=t("").data(i).appendTo(s);void 0!==i.id&&n.attr("data-id",i.id);var o=l.itemWrapper?t(l.itemWrapper===!0?'':l.itemWrapper).appendTo(n):n;if(i.html)o.html(i.html);else if("function"==typeof h.options.itemCreator){var a=h.options.itemCreator(n,i);a!==!0&&a!==!1&&o.html(a)}else i.url?o.append(t("",{href:i.url}).text(i.title||i.name)):o.append(t("").text(i.title||i.name));h._initItem(n,i.idx||e,s,i),i.children&&i.children.length&&h.add(n,i.children)}),this._initList(s),n&&!s.hasClass("tree")&&h.expand(s.parent("li"),o,a)}},a.prototype.reload=function(e){var i=this;e&&(i.$.empty(),i.add(i.$,e)),i.isPreserve&&i.store.time&&i.$.find("li:not(.tree-action-item)").each(function(){var e=t(this);i[i.store[e.data("id")]?"expand":"collapse"](e,!0,!0)})},a.prototype._initList=function(n,o,a,s){var r=this;n.hasClass("tree")?(a=0,o=null):(o=(o||n.closest("li")).addClass("has-list"),o.find(".list-toggle").length||o.prepend(this.options.toggleTemplate),a=a||o.data("idx")),n.removeClass("has-active-item");var l=n.attr("data-idx",a||0).children("li:not(.tree-action-item)").each(function(e){r._initItem(t(this),e+1,n)});1!==l.length||l.find("ul").length||l.addClass("tree-single-item"),s=s||(o?o.data():null);var h=e(s?s.actions:null,this.actions);if(h){if(h.add&&h.add.templateInList!==!1){var c=n.children("li.tree-action-item");c.length?c.detach().appendTo(n):t('').append(i(h.add,"add",h.add.templateInList)).appendTo(n)}h.sort&&n.sortable(t.extend({dragCssClass:"tree-drag-holder",trigger:".sort-handler",selector:"li:not(.tree-action-item)",finish:function(t){r.callEvent("action",{action:h.sort,$list:n,target:t.target,item:s})}},h.sort.options,t.isPlainObject(this.options.sortable)?this.options.sortable:null))}o&&(o.hasClass("open")||s&&s.open)&&o.addClass("open in")},a.prototype._initItem=function(n,o,a,s){if(void 0===o){var r=n.prev("li");o=r.length?r.data("idx")+1:1}if(a=a||n.closest("ul"),n.attr("data-idx",o).removeClass("tree-single-item"),!n.data("id")){var l=o;a.hasClass("tree")||(l=a.parent("li").data("id")+"-"+l),n.attr("data-id",l)}n.hasClass("active")&&a.parent("li").addClass("has-active-item"),s=s||n.data();var h=e(s.actions,this.actions);if(h){var c=n.find(".tree-actions");c.length||(c=t('').appendTo(this.options.itemWrapper?n.find(".tree-item-wrapper"):n),t.each(h,function(t,e){e&&c.append(i(e,t))}))}var d=n.children("ul");d.length&&this._initList(d,n,o,s)},a.prototype._init=function(){var i=this.options,a=this;this.actions=e(i.actions),this.$.addClass("tree"),i.animate&&this.$.addClass("tree-animate"),this._initList(this.$);var s=i.initialState,r=t.zui&&t.zui.store&&t.zui.store.enable;r&&(this.selector=n+"::"+(i.name||"")+"#"+(this.$.attr("id")||o++),this.store=t.zui.store[i.name?"get":"pageGet"](this.selector,{})),"preserve"===s&&(r?this.isPreserve=!0:this.options.initialState=s="normal"),this.reload(i.data),r&&(this.isPreserve=!0),"expand"===s?this.expand():"collapse"===s?this.collapse():"active"===s&&this.expandSelect(".active"),this.$.on("click",'.list-toggle,a[href="#"],.tree-toggle',function(e){var i=t(this),n=i.parent("li");a.callEvent("hit",{target:n,item:n.data()}),a.toggle(n),i.is("a")&&e.preventDefault()}).on("click",".tree-action",function(){var e=t(this),i=e.data();if(i.action&&(i=i.action),"sort"!==i.type){var n=e.closest("li:not(.tree-action-item)");a.callEvent("action",{action:i,target:this,$item:n,item:n.data()})}})},a.prototype.preserve=function(e,i,n){if(this.isPreserve)if(e)i=i||e.data("id"),n=void 0===n&&e.hasClass("open"),n?this.store[i]=n:delete this.store[i],this.store.time=(new Date).getTime(),t.zui.store[this.options.name?"set":"pageSet"](this.selector,this.store);else{var o=this;this.store={},this.$.find("li").each(function(){o.preserve(t(this))})}},a.prototype.expandSelect=function(t){this.show(t,!0)},a.prototype.expand=function(t,e,i){t?(t.addClass("open"),!e&&this.options.animate?setTimeout(function(){t.addClass("in")},10):t.addClass("in")):t=this.$.find("li.has-list").addClass("open in"),i||this.preserve(t),this.callEvent("expand",t,this)},a.prototype.show=function(e,i,n){var o=this;e instanceof t||(e=o.$.find("li").filter(e)),e.each(function(){var e=t(this);if(o.expand(e,i,n),e)for(var a=e.parent("ul");a&&a.length&&!a.hasClass("tree");){var s=a.parent("li");s.length?(o.expand(s,i,n),a=s.parent("ul")):a=!1}})},a.prototype.collapse=function(t,e,i){t?!e&&this.options.animate?(t.removeClass("in"),setTimeout(function(){t.removeClass("open")},300)):t.removeClass("open in"):t=this.$.find("li.has-list").removeClass("open in"),i||this.preserve(t),this.callEvent("collapse",t,this)},a.prototype.toggle=function(t){var e=t&&t.hasClass("open")||t===!1||void 0===t&&this.$.find("li.has-list.open").length;this[e?"collapse":"expand"](t)},a.prototype.getOptions=function(e){this.options=t.extend({},a.DEFAULTS,this.$.data(),e),null===this.options.animate&&this.$.hasClass("tree-animate")&&(this.options.animate=!0)},a.prototype.toData=function(e,i){"function"==typeof e&&(i=e,e=null),e=e||this.$;var n=this;return e.children("li:not(.tree-action-item)").map(function(){var e=t(this),o=e.data();delete o["zui.droppable"];var a=e.children("ul");return a.length&&(o.children=n.toData(a)),"function"==typeof i?i(o,e):o}).get()},a.prototype.callEvent=function(e,i){var n;return"function"==typeof this.options[e]&&(n=this.options[e](i,this)),this.$.trigger(t.Event(e+"."+this.name,i)),n},t.fn.tree=function(e,i){return this.each(function(){var o=t(this),s=o.data(n),r="object"==typeof e&&e;s||o.data(n,s=new a(this,r)),"string"==typeof e&&s[e](i)})},t.fn.tree.Constructor=a,t(function(){t('[data-ride="tree"]').tree()})}(jQuery),function(t){"use strict";var e="zui.colorPicker",i='',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},o=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};o.prototype.init=function(){var e=this,n=e.options,o=e.$,a=o.parent(),s=!1;a.hasClass("colorpicker")?e.$picker=a:(e.$picker=t(n.template||i),s=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),o.attr("data-provide",null),s&&o.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var o=new t.zui.Color(n);e.colors[o.toCssStr()]=o}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=o.val(),a=t.zui.Color.isColor(i);o.parent().toggleClass("has-error",!(a||n.optional&&""===i)),a?e.setValue(i,!0):n.optional&&""===i?o.tooltip("hide"):o.is(":focus")||o.tooltip("show",n.errorTip)};o.is("input:not([type=hidden])")?(n.tooltip&&o.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),o.on("keyup paste input change",r)):o.appendTo(e.$picker),r()},o.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var o=t('',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("").css({width:n.tileSize,height:n.tileSize}).append(o)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},o.prototype.updateColors=function(e){var i=this.$menu,n=this.options,e=e||this.colors,o=this,a=0;if(i.children("li:not(.heading)").remove(),t.each(e,function(t,e){o.addColor(e),a++}),n.optional){var s=t('').css({width:n.tileSize,height:n.tileSize});this.$menu.append(s),a++}i.css("width",Math.min(a,n.lineCount)*n.tileSize+6)},o.prototype.setValue=function(e,i){var n=this,o=n.options,a=n.$btn,s="";n.$menu.find(".cp-tile.active").removeClass("active");var r=o.updateBtn;if("auto"===r){var l=a.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var h=new t.zui.Color(e);s=h.toCssStr().toLowerCase(),r&&("function"==typeof r?r(s,a,n):a.css({background:s,color:h.contrast().toCssStr(),borderColor:h.luma()>.43?"#ccc":s})),n.colors[s]||n.addColor(h),i||n.$.val().toLowerCase()===s||n.$.val(s).trigger("change"),n.$menu.find('.cp-tile[data-color="'+s+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",h)}else r&&("function"==typeof r?r(null,a,n):a.attr("style",null)),i||""===n.$.val()||n.$.val(s).trigger("change"),o.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);o.updateBorder&&t(o.updateBorder).css("border-color",s),o.updateBackground&&t(o.updateBackground).css("background-color",s),o.updateColor&&t(o.updateColor).css("color",s),o.updateText&&t(o.updateText).text(s)},o.prototype.getOptions=function(i){var a=t.extend({},o.DEFAULTS,this.$.data(),i);"string"==typeof a.colors&&(a.colors=a.colors.split(","));var s=a.lang||t.zui.clientLang(),r=this.lang=t.zui.getLangData?t.zui.getLangData(e,s,n):n[s]||n.en;a.errorTip||(a.errorTip=r.errorTip),t.fn.tooltip||(a.btnTip=!1),this.options=a},o.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},o.LANG=n,t.fn.colorPicker=function(e){return this.each(function(){var i=t(this),n=i.data(name),a="object"==typeof e&&e;n||i.data(name,n=new o(this,a)),"string"==typeof e&&n[e]()})},t.fn.colorPicker.Constructor=o,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=o+=1),a[t%a.length]}function n(e,i){var n=t(e);i=t.extend({percent:0,size:20,backColor:"#eee",color:"#00da88",borderColor:"#ccc",borderSize:1,rotate:-90,doughnut:8},n.data(),i);var o=i.percent,a=i.size;"string"==typeof o&&(o=Number.parseFloat(o,10)),"string"==typeof a&&(a=Number.parseFloat(a,10)),a=Math.floor(a);var s=a/2,r=3.14*s,l="http://www.w3.org/2000/svg",h=document.createElementNS(l,"svg"),c=document.createElementNS(l,"circle"),d=document.createElementNS(l,"circle"),u=document.createElementNS(l,"circle");d.setAttribute("r",s),d.setAttribute("cx",s),d.setAttribute("cy",s),d.setAttribute("fill",i.backColor),d.setAttribute("stroke",i.borderColor),d.setAttribute("stroke-width",i.borderSize),u.setAttribute("r",i.doughnut),u.setAttribute("cx",s),u.setAttribute("cy",s),u.setAttribute("fill",i.backColor),c.setAttribute("r",s/2),c.setAttribute("cx",s),c.setAttribute("cy",s),c.setAttribute("fill","transparent"),c.setAttribute("stroke-dasharray",(o*r/100).toFixed(1)+" "+r),c.setAttribute("stroke-width",s),c.setAttribute("stroke",i.color),c.setAttribute("transform","rotate(-90) translate(-"+a+")"),h.setAttribute("viewBox","0 0 "+a+" "+a),h.setAttribute("width",a),h.setAttribute("height",a),h.setAttribute("transform","rotate(180)"),h.appendChild(d),h.appendChild(c),h.appendChild(u),n[0].appendChild(h);var f={width:a,height:a};"inline"===n.css("display")&&(f.display="inline-block",f.verticalAlign="middle"),n.css(f)}var o=0,a=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),o=n.chart||"pie",a=t(n.target);if(a.length){var s=null;if("pie"===o){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),o=i();n.attr("data-id",e).find(".chart-color-dot").css("background",o),r.push({label:n.find(".chart-label").text(),value:parseFloat(n.data("value")||n.find(".chart-value").text()),color:o,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),s=a.pieChart(r,n),a.on("mousemove",function(t){var e=s.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(i.data("value")||parseFloat(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),s=a.barChart(r,n)}else if("line"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),s=a.lineChart(r,n)}null!==s&&e.data("zui.chart",s)}})},t(".table-chart").tableChart();var s=function(i,n){var o=t(i);if(!o.data("pieChart")){var a=o.is("canvas")?o:o.find("canvas"),s=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(o.find(".progress-value").text())},n,o.data()),r=a.length;r||(a=t(" |