From ea576aec26c94587dd7b20ca1d5bfa9179629839 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 9 May 2017 14:30:29 +0800 Subject: [PATCH 01/11] * Disabled novice when working is not full. --- module/common/view/footer.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/common/view/footer.html.php b/module/common/view/footer.html.php index 05c609dfdd..f7852fef5e 100755 --- a/module/common/view/footer.html.php +++ b/module/common/view/footer.html.php @@ -25,7 +25,7 @@ function ajaxIgnoreBrowser(){$.get(createLink('misc', 'ajaxIgnoreBrowser'));} $(function(){showBrowserNotice()}); -global->novice) and $this->loadModel('tutorial')->checkNovice()):?> +global->novice) and $this->loadModel('tutorial')->checkNovice() and $config->global->flow == 'full'):?> novice = confirm('tutorial->novice?>'); $.get(createLink('tutorial', 'ajaxSaveNovice', 'novice=' + (novice ? 'true' : 'false')), function() { From 21a2c8bd8b6d988a48af564d8702c7ae5278684f Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 9 May 2017 15:39:48 +0800 Subject: [PATCH 02/11] * Adjust codes. --- module/testsuite/control.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/testsuite/control.php b/module/testsuite/control.php index 5aa421adc3..574ad487c8 100644 --- a/module/testsuite/control.php +++ b/module/testsuite/control.php @@ -51,13 +51,14 @@ class testsuite extends control /* Append id for secend sort. */ $sort = $this->loadModel('common')->appendOrder($orderBy); + $productName = isset($this->products[$productID]) ? $this->products[$productID] : ''; - $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testsuite->common; - $this->view->position[] = html::a($this->createLink('testsuite', 'browse', "productID=$productID"), $this->products[$productID]); + $this->view->title = $productName . $this->lang->testsuite->common; + $this->view->position[] = html::a($this->createLink('testsuite', 'browse', "productID=$productID"), $productName); $this->view->position[] = $this->lang->testsuite->common; $this->view->productID = $productID; - $this->view->productName = $this->products[$productID]; + $this->view->productName = $productName; $this->view->orderBy = $orderBy; $this->view->suites = $this->testsuite->getSuites($productID, $sort, $pager); $this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter'); From 2aea5825e7ebc018dd6a693bb19efd4e24a557f6 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 9 May 2017 15:40:23 +0800 Subject: [PATCH 03/11] * Adjust menus. --- module/common/lang/zh-cn.php | 63 +++++++++++++------------ module/testsuite/js/common.js | 8 ++++ module/testsuite/view/browse.html.php | 1 + module/testsuite/view/create.html.php | 1 + module/testsuite/view/edit.html.php | 1 + module/testsuite/view/linkcase.html.php | 1 + module/testsuite/view/view.html.php | 1 + 7 files changed, 47 insertions(+), 29 deletions(-) create mode 100644 module/testsuite/js/common.js diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index a3560b2f26..fd603a43c5 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -654,18 +654,15 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') unset($lang->project->menuOrder); /* Add bug, testcase and testtask module. */ - $lang->menu->bug = 'Bug|bug|index'; - $lang->menu->testcase = '用例|testcase|index'; - $lang->menu->testtask = '测试|testtask|index'; - $lang->menu->testsuite = '套件|testsuite|index'; - $lang->menu->testreport = '报告|testreport|browse'; + $lang->menu->bug = 'Bug|bug|index'; + $lang->menu->testcase = '用例|testcase|index'; + $lang->menu->testtask = '测试|testtask|index'; + $lang->menu->caselib = '用例库|testsuite|library'; - $lang->menuOrder[6] = 'bug'; - $lang->menuOrder[7] = 'testcase'; - $lang->menuOrder[8] = 'testtask'; - $lang->menuOrder[9] = 'testsuite'; - $lang->menuOrder[10] = 'testreport'; - $lang->menuOrder[11] = 'product'; + $lang->menuOrder[6] = 'bug'; + $lang->menuOrder[7] = 'testcase'; + $lang->menuOrder[8] = 'testtask'; + $lang->menuOrder[9] = 'caselib'; /* Adjust sub menu of bug module. */ $lang->bug->menu = new stdclass(); @@ -679,45 +676,53 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') /* Adjust sub menu of testcase. */ $lang->testcase->menu = new stdclass(); - $lang->testcase->menu->product = '%s'; - $lang->testcase->menu->browse = array('link' => '浏览用例|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); - $lang->testcase->menu->create = array('link' => '创建用例|testcase|create|productID=%s'); + $lang->testcase->menu->product = '%s'; + $lang->testcase->menu->browse = array('link' => '浏览用例|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testcase->menu->testsuite = array('link' => '浏览套件|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view'); $lang->testcase->menuOrder[5] = 'product'; $lang->testcase->menuOrder[10] = 'browse'; - $lang->testcase->menuOrder[15] = 'create'; + $lang->testcase->menuOrder[15] = 'testsuite'; + + /* Adjust sub menu of bug module. */ + $lang->testsuite->menu = new stdclass(); + $lang->testsuite->menu->product = '%s'; + $lang->testsuite->menu->testcase = array('link' => '浏览用例|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testsuite->menu->browse = array('link' => '浏览套件|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view'); + + $lang->testsuite->menuOrder[5] = 'product'; + $lang->testsuite->menuOrder[10] = 'testcase'; + $lang->testsuite->menuOrder[15] = 'browse'; /* Adjust sub menu of testtask. */ $lang->testtask->menu = new stdclass(); $lang->testtask->menu->product = '%s'; $lang->testtask->menu->browse = array('link' => '浏览版本|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); $lang->testtask->menu->create = array('link' => '提交测试|testtask|create|productID=%s'); + $lang->testtask->menu->report = array('link' => '报告|testreport|browse'); $lang->testtask->menuOrder[5] = 'product'; $lang->testtask->menuOrder[10] = 'browse'; $lang->testtask->menuOrder[15] = 'create'; - - /* Adjust sub menu of bug module. */ - $lang->testsuite->menu = new stdclass(); - $lang->testsuite->menu->product = '%s'; - $lang->testsuite->menu->browse = array('link' => '浏览套件|testsuite|browse|productID=%s', 'alias' => 'linkcase,edit,view'); - $lang->testsuite->menu->caselib = array('link' => '用例库|testsuite|library', 'alias' => 'createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); - - $lang->testsuite->menuOrder[5] = 'product'; - $lang->testsuite->menuOrder[10] = 'browse'; - $lang->testsuite->menuOrder[15] = 'create'; + $lang->testtask->menuOrder[20] = 'report'; /* Adjust sub menu of caselib module. */ $lang->caselib->menu = new stdclass(); $lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true); - $lang->caselib->menu->testsuite = array('link' => '浏览套件|testsuite|browse|productID=%s', 'alias' => 'linkcase,edit,view'); $lang->caselib->menu->caselib = array('link' => '用例库|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); $lang->caselib->menu->createlib = array('link' => "创建库|testsuite|createLib|", 'float' => 'right'); /* Adjust sub menu of report module. */ $lang->testreport->menu = new stdclass(); $lang->testreport->menu->product = '%s'; - $lang->testreport->menu->browse = array('link' => '浏览报告|testreport|browse|productID=%s', 'alias' => 'create,edit,view'); + $lang->testreport->menu->browse = array('link' => '浏览版本|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testreport->menu->create = array('link' => '提交测试|testtask|create|productID=%s'); + $lang->testreport->menu->report = array('link' => '报告|testreport|browse'); + + $lang->testreport->menuOrder[5] = 'product'; + $lang->testreport->menuOrder[10] = 'browse'; + $lang->testreport->menuOrder[15] = 'create'; + $lang->testreport->menuOrder[20] = 'report'; /* Adjust sub menu of product module. */ unset($lang->product->menu->story); @@ -742,8 +747,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') $lang->menugroup->bug = 'bug'; $lang->menugroup->testcase = 'testcase'; $lang->menugroup->testtask = 'testtask'; - $lang->menugroup->testsuite = 'testsuite'; - $lang->menugroup->testreport = 'testreport'; + $lang->menugroup->testsuite = 'caselib'; + $lang->menugroup->testreport = 'testtask'; $lang->menugroup->build = 'product'; /* Adjust search objects. */ diff --git a/module/testsuite/js/common.js b/module/testsuite/js/common.js new file mode 100644 index 0000000000..b9480c5f28 --- /dev/null +++ b/module/testsuite/js/common.js @@ -0,0 +1,8 @@ +$(document).ready(function() +{ + if(onlyTest) + { + $('#mainmenu > .nav > li').removeClass('active'); + $('#mainmenu > .nav > li[data-id=testcase]').addClass('active'); + } +}) diff --git a/module/testsuite/view/browse.html.php b/module/testsuite/view/browse.html.php index 05d53a8a7c..cb09e20e28 100644 --- a/module/testsuite/view/browse.html.php +++ b/module/testsuite/view/browse.html.php @@ -12,6 +12,7 @@ ?> testsuite->confirmDelete)?> +global->flow == 'onlyTest')?>
testsuite->browse?>
diff --git a/module/testsuite/view/create.html.php b/module/testsuite/view/create.html.php index ec66c7e87f..08d631acf3 100644 --- a/module/testsuite/view/create.html.php +++ b/module/testsuite/view/create.html.php @@ -13,6 +13,7 @@ +global->flow == 'onlyTest')?>
diff --git a/module/testsuite/view/edit.html.php b/module/testsuite/view/edit.html.php index b1aad7a4a7..08c5591865 100644 --- a/module/testsuite/view/edit.html.php +++ b/module/testsuite/view/edit.html.php @@ -13,6 +13,7 @@ +global->flow == 'onlyTest')?>
diff --git a/module/testsuite/view/linkcase.html.php b/module/testsuite/view/linkcase.html.php index bb436ae6c0..b3b59ee416 100644 --- a/module/testsuite/view/linkcase.html.php +++ b/module/testsuite/view/linkcase.html.php @@ -12,6 +12,7 @@ ?> +global->flow == 'onlyTest')?>
id;?> diff --git a/module/testsuite/view/view.html.php b/module/testsuite/view/view.html.php index 9226aa8c13..160e15afd4 100644 --- a/module/testsuite/view/view.html.php +++ b/module/testsuite/view/view.html.php @@ -13,6 +13,7 @@ testsuite->confirmUnlinkCase)?> +global->flow == 'onlyTest')?>
id;?> From d9bb5678bbd0474cbd4b0556c0b6f7f1e3fddddf Mon Sep 17 00:00:00 2001 From: Catouse Date: Tue, 9 May 2017 15:43:03 +0800 Subject: [PATCH 04/11] * adjust style of page in dialog, fix bug #987 and finish task #3028 --- module/user/css/deny.css | 2 ++ module/user/css/login.css | 3 +++ 2 files changed, 5 insertions(+) diff --git a/module/user/css/deny.css b/module/user/css/deny.css index f6fb3e8434..8b52894237 100644 --- a/module/user/css/deny.css +++ b/module/user/css/deny.css @@ -13,3 +13,5 @@ body{background: #f1f1f1;} .alert {display: table;} .btn {transition:none;} + +.body-modal .modal-dialog {margin: 50px auto; border: none; box-shadow: none;} diff --git a/module/user/css/login.css b/module/user/css/login.css index 6858633c3d..1173eea9c5 100644 --- a/module/user/css/login.css +++ b/module/user/css/login.css @@ -18,3 +18,6 @@ body{background-color: #036} .popover {max-width: 500px} .popover-content {padding: 0; width: 297px} .btn-submit {min-width: 70px} + +.body-modal #container {margin: 0;} +.body-modal {padding: 40px 0 25px;} From 082b08ee7b6b2e81f8789deece3b68133ccc5afe Mon Sep 17 00:00:00 2001 From: Catouse Date: Tue, 9 May 2017 16:20:43 +0800 Subject: [PATCH 05/11] * fix noProject undefined error. --- module/product/js/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/product/js/common.js b/module/product/js/common.js index aba210233e..782d3a06cf 100644 --- a/module/product/js/common.js +++ b/module/product/js/common.js @@ -5,5 +5,5 @@ function setWhite(acl) $(document).ready(function() { - if(noProject) $('#aclprivate').parents('.radio').remove(); + if(window.noProject) $('#aclprivate').parents('.radio').remove(); }) From 28ce46a835af2d2b2acfb291c70ff58331872341 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 9 May 2017 16:41:53 +0800 Subject: [PATCH 06/11] * Display todo module all the time. --- module/block/control.php | 1 - module/common/lang/zh-cn.php | 3 --- module/todo/lang/zh-cn.php | 4 ++++ module/todo/model.php | 8 +++++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/module/block/control.php b/module/block/control.php index 632ab4e1ee..c3d7b09f10 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -49,7 +49,6 @@ class block extends control if(!common::hasPriv($moduleKey, 'index')) unset($modules[$moduleKey]); } - if($this->config->global->flow != 'full') unset($modules['todo']); if($this->config->global->flow == 'onlyTask' or $this->config->global->flow == 'onlyStory') unset($modules['qa']); if($this->config->global->flow == 'onlyTask' or $this->config->global->flow == 'onlyTest') unset($modules['product']); if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest') unset($modules['project']); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index fd603a43c5..09bde1c550 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -568,7 +568,6 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyStory') /* Adjust sub menu of my dashboard. */ unset($lang->my->menu->bug); - unset($lang->my->menu->todo); unset($lang->my->menu->testtask); unset($lang->my->menu->task); unset($lang->my->menu->myProject); @@ -601,7 +600,6 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTask') /* Adjust sub menu of my dashboard. */ unset($lang->my->menu->bug); - unset($lang->my->menu->todo); unset($lang->my->menu->testtask); unset($lang->my->menu->story); @@ -647,7 +645,6 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest') unset($lang->my->menu->task); unset($lang->my->menu->myProject); unset($lang->my->menu->story); - unset($lang->my->menu->todo); /* Remove sub menu of project module. */ unset($lang->project->menu); diff --git a/module/todo/lang/zh-cn.php b/module/todo/lang/zh-cn.php index cd5e51b266..7ef53a8e1e 100644 --- a/module/todo/lang/zh-cn.php +++ b/module/todo/lang/zh-cn.php @@ -57,6 +57,10 @@ $lang->todo->typeList['custom'] = '自定义'; $lang->todo->typeList['bug'] = 'Bug'; $lang->todo->typeList['task'] = $lang->projectCommon . '任务'; +global $config; +if($config->global->flow == 'onlyTest' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['task']); +if($config->global->flow == 'onlyTask' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['bug']); + $lang->todo->confirmDelete = "您确定要删除这条待办吗?"; $lang->todo->thisIsPrivate = '这是一条私人事务。:)'; $lang->todo->lblDisableDate = '暂时不设定时间'; diff --git a/module/todo/model.php b/module/todo/model.php index 7590031bcd..c8ac69d1de 100644 --- a/module/todo/model.php +++ b/module/todo/model.php @@ -323,6 +323,10 @@ class todoModel extends model while($todo = $stmt->fetch()) { + if($this->config->global->flow == 'onlyTest' and $todo->type == 'task') continue; + if($this->config->global->flow == 'onlyTask' and $todo->type == 'bug') continue; + if($this->config->global->flow == 'onlyStory' and $todo->type != 'custom') continue; + if($todo->type == 'task') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_TASK)->fetch('name'); if($todo->type == 'bug') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_BUG)->fetch('title'); $todo->begin = date::formatTime($todo->begin); @@ -330,6 +334,7 @@ class todoModel extends model /* If is private, change the title to private. */ if($todo->private and $this->app->user->account != $todo->account) $todo->name = $this->lang->todo->thisIsPrivate; + $todos[] = $todo; } return $todos; @@ -352,6 +357,3 @@ class todoModel extends model return true; } } - - - From 35ca3e4479c7223f28766a8467a25439fc8ea92b Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 9 May 2017 17:11:45 +0800 Subject: [PATCH 07/11] * Add english lang. --- module/backup/lang/en.php | 1 + module/common/lang/en.php | 203 +++++++++++++++++++++++++++++++++++ module/doc/lang/en.php | 6 ++ module/doc/lang/zh-cn.php | 1 - module/file/lang/en.php | 6 ++ module/install/lang/en.php | 6 ++ module/product/lang/en.php | 1 + module/project/lang/en.php | 7 ++ module/testsuite/lang/en.php | 2 + module/todo/lang/en.php | 4 + 10 files changed, 236 insertions(+), 1 deletion(-) diff --git a/module/backup/lang/en.php b/module/backup/lang/en.php index c80c82b839..6772be7439 100644 --- a/module/backup/lang/en.php +++ b/module/backup/lang/en.php @@ -16,6 +16,7 @@ $lang->backup->waitting = 'In Progree. Please $lang->backup->confirmDelete = 'Do you want to delete the backup?'; $lang->backup->confirmRestore = 'Do you want to restore the backup?'; $lang->backup->holdDays = 'Backup the latest %s days.'; +$lang->backup->restoreTip = 'Only attachments and databases will be restored when you click restore button, if you need to restore the code, you can restore manually.'; $lang->backup->success = new stdclass(); $lang->backup->success->backup = 'Backed up!'; diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 8ea2d64990..eec6bae734 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -553,3 +553,206 @@ $lang->icons['unlock'] = 'unlock-alt'; $lang->icons['confirmStoryChange'] = 'search'; include (dirname(__FILE__) . '/menuOrder.php'); + +global $config; +if(isset($config->global->flow) and $config->global->flow == 'onlyStory') +{ + /* Remove project, report and qa module. */ + unset($lang->menu->project); + unset($lang->menu->report); + unset($lang->menu->qa); + + unset($lang->menuOrder[15]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->bug); + unset($lang->my->menu->testtask); + unset($lang->my->menu->task); + unset($lang->my->menu->myProject); + + /* Adjust sub menu of product module. */ + unset($lang->product->menu->project); + + /* Rename product module. */ + $lang->menu->product = 'Product|product|index'; + + /* Adjust search items. */ + unset($lang->searchObjects['bug']); + unset($lang->searchObjects['task']); + unset($lang->searchObjects['testcase']); + unset($lang->searchObjects['project']); + unset($lang->searchObjects['build']); + unset($lang->searchObjects['testtask']); +} + +if(isset($config->global->flow) and $config->global->flow == 'onlyTask') +{ + /* Remove product, report and qa module. */ + unset($lang->menu->product); + unset($lang->menu->report); + unset($lang->menu->qa); + + unset($lang->menuOrder[10]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->bug); + unset($lang->my->menu->testtask); + unset($lang->my->menu->story); + + /* Adjust sub menu of project module. */ + unset($lang->project->menu->story); + unset($lang->project->menu->build); + unset($lang->project->menu->bug); + unset($lang->project->menu->testtask); + unset($lang->project->menu->product); + + /* Remove sub menu of product module. */ + unset($lang->product->menu); + unset($lang->product->menuOrder); + + $lang->project->menu->task['subModule'] = 'task'; + $lang->project->menu->task['alias'] = 'grouptask,importtask'; + + unset($lang->searchObjects['bug']); + unset($lang->searchObjects['story']); + unset($lang->searchObjects['product']); + unset($lang->searchObjects['testcase']); + unset($lang->searchObjects['build']); + unset($lang->searchObjects['release']); + unset($lang->searchObjects['productplan']); + unset($lang->searchObjects['testtask']); +} + +if(isset($config->global->flow) and $config->global->flow == 'onlyTest') +{ + /* Remove project and test module. */ + unset($lang->menu->project); + unset($lang->menu->qa); + unset($lang->menu->report); + + unset($lang->menuOrder[15]); + unset($lang->menuOrder[20]); + unset($lang->menuOrder[30]); + + /* Rename product module. */ + $lang->menu->product = 'Product|product|index'; + + /* Adjust sub menu of my dashboard. */ + unset($lang->my->menu->task); + unset($lang->my->menu->myProject); + unset($lang->my->menu->story); + + /* Remove sub menu of project module. */ + unset($lang->project->menu); + unset($lang->project->menuOrder); + + /* Add bug, testcase and testtask module. */ + $lang->menu->bug = 'Bug|bug|index'; + $lang->menu->testcase = 'Case|testcase|index'; + $lang->menu->testtask = 'Testing|testtask|index'; + $lang->menu->caselib = 'Library|testsuite|library'; + + $lang->menuOrder[6] = 'bug'; + $lang->menuOrder[7] = 'testcase'; + $lang->menuOrder[8] = 'testtask'; + $lang->menuOrder[9] = 'caselib'; + + /* Adjust sub menu of bug module. */ + $lang->bug->menu = new stdclass(); + $lang->bug->menu->product = '%s'; + $lang->bug->menu->browse = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->bug->menu->create = array('link' => 'Create Bug|bug|create|productID=%s'); + + $lang->bug->menuOrder[5] = 'product'; + $lang->bug->menuOrder[10] = 'browse'; + $lang->bug->menuOrder[15] = 'create'; + + /* Adjust sub menu of testcase. */ + $lang->testcase->menu = new stdclass(); + $lang->testcase->menu->product = '%s'; + $lang->testcase->menu->browse = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testcase->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view'); + + $lang->testcase->menuOrder[5] = 'product'; + $lang->testcase->menuOrder[10] = 'browse'; + $lang->testcase->menuOrder[15] = 'testsuite'; + + /* Adjust sub menu of bug module. */ + $lang->testsuite->menu = new stdclass(); + $lang->testsuite->menu->product = '%s'; + $lang->testsuite->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testsuite->menu->browse = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view'); + + $lang->testsuite->menuOrder[5] = 'product'; + $lang->testsuite->menuOrder[10] = 'testcase'; + $lang->testsuite->menuOrder[15] = 'browse'; + + /* Adjust sub menu of testtask. */ + $lang->testtask->menu = new stdclass(); + $lang->testtask->menu->product = '%s'; + $lang->testtask->menu->browse = array('link' => 'Build|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testtask->menu->create = array('link' => 'Create Test|testtask|create|productID=%s'); + $lang->testtask->menu->report = array('link' => 'Report|testreport|browse'); + + $lang->testtask->menuOrder[5] = 'product'; + $lang->testtask->menuOrder[10] = 'browse'; + $lang->testtask->menuOrder[15] = 'create'; + $lang->testtask->menuOrder[20] = 'report'; + + /* Adjust sub menu of caselib module. */ + $lang->caselib->menu = new stdclass(); + $lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true); + $lang->caselib->menu->caselib = array('link' => 'Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); + $lang->caselib->menu->createlib = array('link' => "Create Library|testsuite|createLib|", 'float' => 'right'); + + /* Adjust sub menu of report module. */ + $lang->testreport->menu = new stdclass(); + $lang->testreport->menu->product = '%s'; + $lang->testreport->menu->browse = array('link' => 'Build|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree'); + $lang->testreport->menu->create = array('link' => 'Create Test|testtask|create|productID=%s'); + $lang->testreport->menu->report = array('link' => 'Report|testreport|browse'); + + $lang->testreport->menuOrder[5] = 'product'; + $lang->testreport->menuOrder[10] = 'browse'; + $lang->testreport->menuOrder[15] = 'create'; + $lang->testreport->menuOrder[20] = 'report'; + + /* Adjust sub menu of product module. */ + unset($lang->product->menu->story); + unset($lang->product->menu->project); + unset($lang->product->menu->release); + unset($lang->product->menu->dynamic); + unset($lang->product->menu->plan); + unset($lang->product->menu->roadmap); + unset($lang->product->menu->doc); + unset($lang->product->menu->module); + + $lang->product->menu->build = array('link' => 'Build|product|build', 'subModule' => 'build'); + + $lang->product->menuOrder[5] = 'build'; + $lang->product->menuOrder[10] = 'view'; + $lang->product->menuOrder[15] = 'order'; + + $lang->build->menu = $lang->product->menu; + $lang->build->menuOrder = $lang->product->menuOrder; + + /* Adjust menu group. */ + $lang->menugroup->bug = 'bug'; + $lang->menugroup->testcase = 'testcase'; + $lang->menugroup->testtask = 'testtask'; + $lang->menugroup->testsuite = 'caselib'; + $lang->menugroup->testreport = 'testtask'; + $lang->menugroup->build = 'product'; + + /* Adjust search objects. */ + unset($lang->searchObjects['story']); + unset($lang->searchObjects['task']); + unset($lang->searchObjects['release']); + unset($lang->searchObjects['productplan']); + + $lang->zentaoPMS = 'zentao test'; +} diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index beec17f585..1fd02a9a4e 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -82,6 +82,12 @@ $lang->doc->libTypeList['custom'] = 'Custom Library'; $lang->doc->systemLibs['product'] = $lang->productCommon . 'DocumentLibrary'; $lang->doc->systemLibs['project'] = $lang->projectCommon . 'DocumentLibrary'; +global $config; +if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->systemLibs['project']); +if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->libTypeList['project']); +if($config->global->flow == 'onlyTask') unset($lang->doc->systemLibs['product']); +if($config->global->flow == 'onlyTask') unset($lang->doc->libTypeList['product']); + $lang->doc->aclList['open'] = 'Public'; $lang->doc->aclList['custom'] = 'Custom'; $lang->doc->aclList['private'] = 'Private'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 17d8cd12e3..c14c19a519 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -88,7 +88,6 @@ if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') if($config->global->flow == 'onlyTask') unset($lang->doc->systemLibs['product']); if($config->global->flow == 'onlyTask') unset($lang->doc->libTypeList['product']); - $lang->doc->aclList['open'] = '公开'; $lang->doc->aclList['custom'] = '自定义'; $lang->doc->aclList['private'] = '私有'; diff --git a/module/file/lang/en.php b/module/file/lang/en.php index f9f20b7b60..56f2e20962 100644 --- a/module/file/lang/en.php +++ b/module/file/lang/en.php @@ -26,12 +26,18 @@ $lang->file->exportFields = "Fileds to be Exported"; $lang->file->defaultTPL = "Default Template"; $lang->file->setExportTPL = "Settings"; $lang->file->preview = "Preview"; +$lang->file->addFile = 'Add File'; +$lang->file->beginUpload = 'Start uploading'; +$lang->file->uploadSuccess = 'uploaded Successfully'; +$lang->file->dragFile = 'Please drag here.'; $lang->file->errorNotExists = "'%s' is not found."; $lang->file->errorCanNotWrite = "'%s' is not writable. Please change its permission. Enter sudo chmod -R 777 '%s' in Linux."; $lang->file->confirmDelete = " Do you want to delete it?"; $lang->file->errorFileSize = " File size exceeds the limit. It cannot be uploaded!"; $lang->file->errorFileUpload = " Uploading failed. File size might exceeds the limit."; +$lang->file->errorFileFormate = " Uploading failed, file format is limited."; +$lang->file->errorFileMove = " Uploading failed, there was an error when moving file."; $lang->file->dangerFile = " File has been rejected to upload for security issues."; $lang->file->errorSuffix = 'Format is incorrect. .zip files ONLY!'; $lang->file->errorExtract = 'Extracting file failed. File might be damaged or invalid files in the zip package.'; diff --git a/module/install/lang/en.php b/module/install/lang/en.php index 6be2075c9d..bad485b79b 100644 --- a/module/install/lang/en.php +++ b/module/install/lang/en.php @@ -81,10 +81,16 @@ $lang->install->dbName = 'Database Library'; $lang->install->dbPrefix = 'Database Table Prefix'; $lang->install->clearDB = 'Clear Database'; $lang->install->importDemoData = 'Import Demo Data'; +$lang->install->working = 'Working way'; $lang->install->requestTypes['GET'] = 'GET'; $lang->install->requestTypes['PATH_INFO'] = 'PATH_INFO'; +$lang->install->workingList['full'] = 'Full'; +$lang->install->workingList['onlyTest'] = 'Only Test'; +$lang->install->workingList['onlyStory'] = 'Only Story'; +$lang->install->workingList['onlyTask'] = 'Only Task'; + $lang->install->errorConnectDB = 'Connection to database Failed. '; $lang->install->errorDBName = 'Database name should exclude “.” '; $lang->install->errorCreateDB = 'Database creation failed.'; diff --git a/module/product/lang/en.php b/module/product/lang/en.php index f567d3f6b3..fb2d2633c9 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -40,6 +40,7 @@ $lang->product->builds = 'Builds'; $lang->product->roadmap = 'Roadmap'; $lang->product->doc = 'Documents'; $lang->product->project = $lang->projectCommon . 'List'; +$lang->product->build = 'Build List'; $lang->product->confirmDelete = " Do you want to delete {$lang->productCommon}?"; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 2fc63a3887..63f23eafce 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -262,3 +262,10 @@ $lang->project->treeLevel['root'] = 'Show Root'; $lang->project->treeLevel['story'] = 'Show Story'; $lang->project->treeLevel['task'] = 'Show Task'; $lang->project->treeLevel['all'] = 'Show All'; + +global $config; +if($config->global->flow == 'onlyTask') +{ + unset($lang->project->groups['story']); + unset($lang->project->featureBar['task']['needconfirm']); +} diff --git a/module/testsuite/lang/en.php b/module/testsuite/lang/en.php index 39bcc7f151..7ee91be91c 100644 --- a/module/testsuite/lang/en.php +++ b/module/testsuite/lang/en.php @@ -20,6 +20,8 @@ $lang->testsuite->linkVersion = "Version"; $lang->testsuite->unlinkCase = "Unlink"; $lang->testsuite->batchUnlinkCases = "Batch unlink cases"; $lang->testsuite->deleted = 'deleted'; +$lang->testsuite->exportTemplet = 'Export template'; +$lang->testsuite->importFile = 'Import CSV'; $lang->testsuite->common = 'Test Suite'; $lang->testsuite->product = $lang->productCommon; diff --git a/module/todo/lang/en.php b/module/todo/lang/en.php index 35cbd11dc6..a2d1fb6f61 100644 --- a/module/todo/lang/en.php +++ b/module/todo/lang/en.php @@ -57,6 +57,10 @@ $lang->todo->typeList['custom'] = 'Custom'; $lang->todo->typeList['bug'] = 'Bug'; $lang->todo->typeList['task'] = $lang->projectCommon . 'Task'; +global $config; +if($config->global->flow == 'onlyTest' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['task']); +if($config->global->flow == 'onlyTask' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['bug']); + $lang->todo->confirmDelete = "Are you sure to delete this To-Do?"; $lang->todo->thisIsPrivate = 'This is a private To-Do:)'; $lang->todo->lblDisableDate = 'Set later.'; From 7187e8a221c275956e54ac1cb00195c0dc8166b4 Mon Sep 17 00:00:00 2001 From: Catouse Date: Tue, 9 May 2017 17:25:45 +0800 Subject: [PATCH 08/11] * update datatable and improve perfermance. --- www/js/zui/min.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/www/js/zui/min.js b/www/js/zui/min.js index b5949e051a..a8f3ea36ea 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,22 +1,22 @@ /*! - * ZUI: zui for zentao - v1.5.0 - 2017-03-02 + * ZUI: zui for zentao - v1.6.0 - 2017-05-09 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2017 cnezsoft.com; Licensed MIT */ /*! Some code copy from Bootstrap v3.0.0 by @fat and @mdo. (Copyright 2013 Twitter, Inc. Licensed under http://www.apache.org/licenses/)*/ -!function(t,e){"use strict";if("undefined"==typeof t)throw new Error("ZUI requires jQuery");t.zui||(t.zui=function(e){t.isPlainObject(e)&&t.extend(t.zui,e)});var i=0;t.zui({uuid:function(){return 1e3*(new Date).getTime()+i++%1e3},callEvent:function(e,i,a){if(t.isFunction(e)){void 0!==a&&(e=t.proxy(e,a));var o=e(i);return i&&(i.result=o),!(void 0!==o&&!o)}return 1},clientLang:function(){var i,a=e.config;if("undefined"!=typeof a&&a.clientLang&&(i=a.clientLang),!i){var o=t("html").attr("lang");i=o?o:navigator.userLanguage||navigator.userLanguage||"zh_cn"}return i.replace("-","_").toLowerCase()},strCode:function(t){var e=0;if(t&&t.length)for(var i=0;in?e:e.substring(0,n),r=t.Event(s,i);if(void 0===a&&n>0&&(a=o.data(e.substring(n+1))),a&&a.options){var l=a.options[s];t.isFunction(l)&&t.zui.callEvent(l,r,a)}return o.trigger(r),r}}(jQuery,window),function(){"use strict";String.prototype.format||(String.prototype.format=function(t){var e=this;if(arguments.length>0){var i;if(arguments.length<=2&&"object"==typeof t)for(var a in t)void 0!==t[a]&&(i=new RegExp("("+(arguments[1]?arguments[1].replace("0",a):"{"+a+"}")+")","g"),e=e.replace(i,t[a]));else for(var o=0;o0&&(i=o.data(e.substring(n+1))),i&&i.options){var l=i.options[s];t.isFunction(l)&&t.zui.callEvent(l,r,i)}return o.trigger(r),r}}(jQuery,window),function(){"use strict";String.prototype.format||(String.prototype.format=function(t){var e=this;if(arguments.length>0){var a;if(arguments.length<=2&&"object"==typeof t)for(var i in t)void 0!==t[i]&&(a=new RegExp("("+(arguments[1]?arguments[1].replace("0",i):"{"+i+"}")+")","g"),e=e.replace(a,t[i]));else for(var o=0;o=e&&i>t}),Date.prototype.isSameYear||(Date.prototype.isSameYear=function(t){return this.getFullYear()===t.getFullYear()})}(),function(t,e){"use strict";var i,a,o="localStorage",n="page_"+t.location.pathname+t.location.search,s=function(){this.slience=!0;try{o in t&&t[o]&&t[o].setItem&&(this.enable=!0,i=t[o])}catch(s){}this.enable||(a={},i={getLength:function(){var t=0;return e.each(a,function(){t++}),t},key:function(t){var i,o=0;return e.each(a,function(e){return o===t?(i=e,!1):void o++}),i},removeItem:function(t){delete a[t]},getItem:function(t){return a[t]},setItem:function(t,e){a[t]=e},clear:function(){a={}}}),this.storage=i,this.page=this.get(n,{})};s.prototype.pageSave=function(){if(e.isEmptyObject(this.page))this.remove(n);else{var t,i=[];for(t in this.page){var a=this.page[t];null===a&&i.push(t)}for(t=i.length-1;t>=0;t--)delete this.page[i[t]];this.set(n,this.page)}},s.prototype.pageRemove=function(t){"undefined"!=typeof this.page[t]&&(this.page[t]=null,this.pageSave())},s.prototype.pageClear=function(){this.page={},this.pageSave()},s.prototype.pageGet=function(t,e){var i=this.page[t];return void 0===e||null!==i&&void 0!==i?i:e},s.prototype.pageSet=function(t,i){e.isPlainObject(t)?e.extend(!0,this.page,t):this.page[this.serialize(t)]=i,this.pageSave()},s.prototype.check=function(){if(!this.enable&&!this.slience)throw new Error("Browser not support localStorage or enable status been set true.");return this.enable},s.prototype.length=function(){return this.check()?i.getLength?i.getLength():i.length:0},s.prototype.removeItem=function(t){return i.removeItem(t),this},s.prototype.remove=function(t){return this.removeItem(t)},s.prototype.getItem=function(t){return i.getItem(t)},s.prototype.get=function(t,e){var i=this.deserialize(this.getItem(t));return"undefined"!=typeof i&&null!==i||"undefined"==typeof e?i:e},s.prototype.key=function(t){return i.key(t)},s.prototype.setItem=function(t,e){return i.setItem(t,e),this},s.prototype.set=function(t,e){return void 0===e?this.remove(t):(this.setItem(t,this.serialize(e)),this)},s.prototype.clear=function(){return i.clear(),this},s.prototype.forEach=function(t){for(var e=this.length(),a=e-1;a>=0;a--){var o=i.key(a);t(o,this.get(o))}return this},s.prototype.getAll=function(){var t={};return this.forEach(function(e,i){t[e]=i}),t},s.prototype.serialize=function(t){return"string"==typeof t?t:JSON.stringify(t)},s.prototype.deserialize=function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(e){return t||void 0}},e.zui({store:new s})}(window,jQuery),function(t,e,i,a){"use strict";function o(t){if(t=t.toLowerCase(),t&&c.test(t)){var e;if(4===t.length){var i="#";for(e=1;4>e;e+=1)i+=t.slice(e,e+1).concat(t.slice(e,e+1));t=i}var a=[];for(e=1;7>e;e+=2)a.push(y("0x"+t.slice(e,e+2)));return{r:a[0],g:a[1],b:a[2],a:1}}throw new Error("Wrong hex string! (hex: "+t+")")}function n(e){return typeof e===u&&("transparent"===e.toLowerCase()||v[e.toLowerCase()]||c.test(t.trim(e.toLowerCase())))}function s(t){function e(t){return t=0>t?t+1:t>1?t-1:t,1>6*t?r+(s-r)*t*6:1>2*t?s:2>3*t?r+(s-r)*(2/3-t)*6:r}var i=t.h,a=t.s,o=t.l,n=t.a;i=d(i)%h/h,a=l(d(a)),o=l(d(o)),n=l(d(n));var s=.5>=o?o*(a+1):o+a-o*a,r=2*o-s,c={r:e(i+1/3)*p,g:e(i)*p,b:e(i-1/3)*p,a:n};return c}function r(t,i,a){return m(a)&&(a=0),m(i)&&(i=p),e.min(e.max(t,a),i)}function l(t,e){return r(t,e)}function d(t){return"number"==typeof t?t:parseFloat(t)}var c=/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/,p=255,h=360,f=100,u="string",g="object",v={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},m=function(t){return t===a},b=function(t){return!m(t)},y=function(t){return parseInt(t)},w=function(t){return y(l(d(t),p))},C=function(t,e,i,a){var n=this;if(n.r=n.g=n.b=0,n.a=1,b(a)&&(n.a=l(d(a),1)),b(t)&&b(e)&&b(i))n.r=w(t),n.g=w(e),n.b=w(i);else if(b(t)){var r=typeof t;if(r==u)t=t.toLowerCase(),"transparent"===t?n.a=0:v[t]?this.rgb(o(v[t])):n.rgb(o(t));else if("number"==r&&m(e))n.r=n.g=n.b=w(t);else if(r==g&&b(t.r))n.r=w(t.r),b(t.g)&&(n.g=w(t.g)),b(t.b)&&(n.b=w(t.b)),b(t.a)&&(n.a=l(d(t.a),1));else if(r==g&&b(t.h)){var c={h:l(d(t.h),h),s:1,l:1,a:1};b(t.s)&&(c.s=l(d(t.s),1)),b(t.l)&&(c.l=l(d(t.l),1)),b(t.a)&&(c.a=l(d(t.a),1)),n.rgb(s(c))}}};C.prototype.rgb=function(t){var e=this;if(b(t)){if(typeof t==g)b(t.r)&&(e.r=w(t.r)),b(t.g)&&(e.g=w(t.g)),b(t.b)&&(e.b=w(t.b)),b(t.a)&&(e.a=l(d(t.a),1));else{var i=y(d(t));e.r=i,e.g=i,e.b=i}return e}return{r:e.r,g:e.g,b:e.b,a:e.a}},C.prototype.hue=function(t){var e=this,i=e.toHsl();return m(t)?i.h:(i.h=l(d(t),h),e.rgb(s(i)),e)},C.prototype.darken=function(t){var e=this,i=e.toHsl();return i.l-=t/f,i.l=l(i.l,1),e.rgb(s(i)),e},C.prototype.clone=function(){var t=this;return new C(t.r,t.g,t.b,t.a)},C.prototype.lighten=function(t){return this.darken(-t)},C.prototype.fade=function(t){return this.a=l(t/f,1),this},C.prototype.spin=function(t){var e=this.toHsl(),i=(e.h+t)%h;return e.h=0>i?h+i:i,this.rgb(s(e))},C.prototype.toHsl=function(){var t,i,a=this,o=a.r/p,n=a.g/p,s=a.b/p,r=a.a,l=e.max(o,n,s),d=e.min(o,n,s),c=(l+d)/2,f=l-d;if(l===d)t=i=0;else{switch(i=c>.5?f/(2-l-d):f/(l+d),l){case o:t=(n-s)/f+(s>n?6:0);break;case n:t=(s-o)/f+2;break;case s:t=(o-n)/f+4}t/=6}return{h:t*h,s:i,l:c,a:r}},C.prototype.luma=function(){var t=this.r/p,i=this.g/p,a=this.b/p;return t=.03928>=t?t/12.92:e.pow((t+.055)/1.055,2.4),i=.03928>=i?i/12.92:e.pow((i+.055)/1.055,2.4),a=.03928>=a?a/12.92:e.pow((a+.055)/1.055,2.4),.2126*t+.7152*i+.0722*a},C.prototype.saturate=function(t){var e=this.toHsl();return e.s+=t/f,e.s=l(e.s),this.rgb(s(e))},C.prototype.desaturate=function(t){return this.saturate(-t)},C.prototype.contrast=function(t,e,i){if(e=m(e)?new C(p,p,p,1):new C(e),t=m(t)?new C(0,0,0,1):new C(t),t.luma()>e.luma()){var a=e;e=t,t=a}return this.a<.5?t:(i=m(i)?.43:d(i),this.luma()0?t.a<1?"rgba("+t.r+","+t.g+","+t.b+","+t.a+")":t.hexStr():"transparent"},C.isColor=n,C.names=v,t.zui({Color:C})}(jQuery,Math,window,void 0),/*! - * ZUI: Generated from less code - v1.5.0 - 2017-03-02 +function(t,e,a){"$:nomunge";function i(){o=e[r](function(){n.each(function(){var e=t(this),a=e.width(),i=e.height(),o=t.data(this,d);a===o.w&&i===o.h||e.trigger(l,[o.w=a,o.h=i])}),i()},s[c])}var o,n=t([]),s=t.resize=t.extend(t.resize,{}),r="setTimeout",l="resize",d=l+"-special-event",c="delay",p="throttleWindow";s[c]=250,s[p]=!0,t.event.special[l]={setup:function(){if(!s[p]&&this[r])return!1;var e=t(this);n=n.add(e),t.data(this,d,{w:e.width(),h:e.height()}),1===n.length&&i()},teardown:function(){if(!s[p]&&this[r])return!1;var e=t(this);n=n.not(e),e.removeData(d),n.length||clearTimeout(o)},add:function(e){function i(e,i,n){var s=t(this),r=t.data(this,d)||{};r.w=i!==a?i:s.width(),r.h=n!==a?n:s.height(),o.apply(this,arguments)}if(!s[p]&&this[r])return!1;var o;return t.isFunction(e)?(o=e,i):(o=e.handler,void(e.handler=i))}}}(jQuery,this),function(){"use strict";Date.ONEDAY_TICKS=864e5,Date.prototype.format||(Date.prototype.format=function(t){var e={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S+":this.getMilliseconds()};/(y+)/i.test(t)&&(t=t.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length)));for(var a in e)new RegExp("("+a+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[a]:("00"+e[a]).substr((""+e[a]).length)));return t}),Date.prototype.addMilliseconds||(Date.prototype.addMilliseconds=function(t){return this.setTime(this.getTime()+t),this}),Date.prototype.addDays||(Date.prototype.addDays=function(t){return this.addMilliseconds(t*Date.ONEDAY_TICKS),this}),Date.prototype.clone||(Date.prototype.clone=function(){var t=new Date;return t.setTime(this.getTime()),t}),Date.isLeapYear||(Date.isLeapYear=function(t){return t%4===0&&t%100!==0||t%400===0}),Date.getDaysInMonth||(Date.getDaysInMonth=function(t,e){return[31,Date.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}),Date.prototype.isLeapYear||(Date.prototype.isLeapYear=function(){return Date.isLeapYear(this.getFullYear())}),Date.prototype.clearTime||(Date.prototype.clearTime=function(){return this.setHours(0),this.setMinutes(0),this.setSeconds(0),this.setMilliseconds(0),this}),Date.prototype.getDaysInMonth||(Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())}),Date.prototype.addMonths||(Date.prototype.addMonths=function(t){var e=this.getDate();return this.setDate(1),this.setMonth(this.getMonth()+t),this.setDate(Math.min(e,this.getDaysInMonth())),this}),Date.prototype.getLastWeekday||(Date.prototype.getLastWeekday=function(t){t=t||1;for(var e=this.clone();e.getDay()!=t;)e.addDays(-1);return e.clearTime(),e}),Date.prototype.isSameDay||(Date.prototype.isSameDay=function(t){return t.toDateString()===this.toDateString()}),Date.prototype.isSameWeek||(Date.prototype.isSameWeek=function(t){var e=this.getLastWeekday(),a=e.clone().addDays(7);return t>=e&&t=0;t--)delete this.page[a[t]];this.set(n,this.page)}},s.prototype.pageRemove=function(t){"undefined"!=typeof this.page[t]&&(this.page[t]=null,this.pageSave())},s.prototype.pageClear=function(){this.page={},this.pageSave()},s.prototype.pageGet=function(t,e){var a=this.page[t];return void 0===e||null!==a&&void 0!==a?a:e},s.prototype.pageSet=function(t,a){e.isPlainObject(t)?e.extend(!0,this.page,t):this.page[this.serialize(t)]=a,this.pageSave()},s.prototype.check=function(){if(!this.enable&&!this.slience)throw new Error("Browser not support localStorage or enable status been set true.");return this.enable},s.prototype.length=function(){return this.check()?a.getLength?a.getLength():a.length:0},s.prototype.removeItem=function(t){return a.removeItem(t),this},s.prototype.remove=function(t){return this.removeItem(t)},s.prototype.getItem=function(t){return a.getItem(t)},s.prototype.get=function(t,e){var a=this.deserialize(this.getItem(t));return"undefined"!=typeof a&&null!==a||"undefined"==typeof e?a:e},s.prototype.key=function(t){return a.key(t)},s.prototype.setItem=function(t,e){return a.setItem(t,e),this},s.prototype.set=function(t,e){return void 0===e?this.remove(t):(this.setItem(t,this.serialize(e)),this)},s.prototype.clear=function(){return a.clear(),this},s.prototype.forEach=function(t){for(var e=this.length(),i=e-1;i>=0;i--){var o=a.key(i);t(o,this.get(o))}return this},s.prototype.getAll=function(){var t={};return this.forEach(function(e,a){t[e]=a}),t},s.prototype.serialize=function(t){return"string"==typeof t?t:JSON.stringify(t)},s.prototype.deserialize=function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(e){return t||void 0}},e.zui({store:new s})}(window,jQuery),function(t,e,a,i){"use strict";function o(t){if(t=t.toLowerCase(),t&&c.test(t)){var e;if(4===t.length){var a="#";for(e=1;e<4;e+=1)a+=t.slice(e,e+1).concat(t.slice(e,e+1));t=a}var i=[];for(e=1;e<7;e+=2)i.push(y("0x"+t.slice(e,e+2)));return{r:i[0],g:i[1],b:i[2],a:1}}throw new Error("Wrong hex string! (hex: "+t+")")}function n(e){return typeof e===u&&("transparent"===e.toLowerCase()||v[e.toLowerCase()]||c.test(t.trim(e.toLowerCase())))}function s(t){function e(t){return t=t<0?t+1:t>1?t-1:t,6*t<1?r+(s-r)*t*6:2*t<1?s:3*t<2?r+(s-r)*(2/3-t)*6:r}var a=t.h,i=t.s,o=t.l,n=t.a;a=d(a)%h/h,i=l(d(i)),o=l(d(o)),n=l(d(n));var s=o<=.5?o*(i+1):o+i-o*i,r=2*o-s,c={r:e(a+1/3)*p,g:e(a)*p,b:e(a-1/3)*p,a:n};return c}function r(t,a,i){return m(i)&&(i=0),m(a)&&(a=p),e.min(e.max(t,i),a)}function l(t,e){return r(t,e)}function d(t){return"number"==typeof t?t:parseFloat(t)}var c=/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/,p=255,h=360,f=100,u="string",g="object",v={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},m=function(t){return t===i},b=function(t){return!m(t)},y=function(t){return parseInt(t)},w=function(t){return y(l(d(t),p))},C=function(t,e,a,i){var n=this;if(n.r=n.g=n.b=0,n.a=1,b(i)&&(n.a=l(d(i),1)),b(t)&&b(e)&&b(a))n.r=w(t),n.g=w(e),n.b=w(a);else if(b(t)){var r=typeof t;if(r==u)t=t.toLowerCase(),"transparent"===t?n.a=0:v[t]?this.rgb(o(v[t])):n.rgb(o(t));else if("number"==r&&m(e))n.r=n.g=n.b=w(t);else if(r==g&&b(t.r))n.r=w(t.r),b(t.g)&&(n.g=w(t.g)),b(t.b)&&(n.b=w(t.b)),b(t.a)&&(n.a=l(d(t.a),1));else if(r==g&&b(t.h)){var c={h:l(d(t.h),h),s:1,l:1,a:1};b(t.s)&&(c.s=l(d(t.s),1)),b(t.l)&&(c.l=l(d(t.l),1)),b(t.a)&&(c.a=l(d(t.a),1)),n.rgb(s(c))}}};C.prototype.rgb=function(t){var e=this;if(b(t)){if(typeof t==g)b(t.r)&&(e.r=w(t.r)),b(t.g)&&(e.g=w(t.g)),b(t.b)&&(e.b=w(t.b)),b(t.a)&&(e.a=l(d(t.a),1));else{var a=y(d(t));e.r=a,e.g=a,e.b=a}return e}return{r:e.r,g:e.g,b:e.b,a:e.a}},C.prototype.hue=function(t){var e=this,a=e.toHsl();return m(t)?a.h:(a.h=l(d(t),h),e.rgb(s(a)),e)},C.prototype.darken=function(t){var e=this,a=e.toHsl();return a.l-=t/f,a.l=l(a.l,1),e.rgb(s(a)),e},C.prototype.clone=function(){var t=this;return new C(t.r,t.g,t.b,t.a)},C.prototype.lighten=function(t){return this.darken(-t)},C.prototype.fade=function(t){return this.a=l(t/f,1),this},C.prototype.spin=function(t){var e=this.toHsl(),a=(e.h+t)%h;return e.h=a<0?h+a:a,this.rgb(s(e))},C.prototype.toHsl=function(){var t,a,i=this,o=i.r/p,n=i.g/p,s=i.b/p,r=i.a,l=e.max(o,n,s),d=e.min(o,n,s),c=(l+d)/2,f=l-d;if(l===d)t=a=0;else{switch(a=c>.5?f/(2-l-d):f/(l+d),l){case o:t=(n-s)/f+(ne.luma()){var i=e;e=t,t=i}return this.a<.5?t:(a=m(a)?.43:d(a),this.luma()0?t.a<1?"rgba("+t.r+","+t.g+","+t.b+","+t.a+")":t.hexStr():"transparent"},C.isColor=n,C.names=v,C.get=function(t){return new C(t)},t.zui({Color:C})}(jQuery,Math,window,void 0),/*! + * ZUI: Generated from less code - v1.6.0 - 2017-05-09 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2017 cnezsoft.com; Licensed MIT */ -function(t){"use strict";var e=0,i=["primary","red","yellow","green","blue","purple","brown","dark"],a={primary:"#3280fc",secondary:"#145ccd",pale:"#ebf2f9",fore:"#353535",back:"#fff",grayDarker:"#222222",grayDark:"#333333",gray:"#808080",grayLight:"#dddddd",grayLighter:"#e5e5e5",grayPale:"#f1f1f1",white:"#fff",black:"#000",red:"#ea644a",yellow:"#f1a325",green:"#38b03f",blue:"#03b8cf",purple:"#8666b8",brown:"#bd7b46",greenPale:"#ddf4df",yellowPale:"#fff0d5",redPale:"#ffe5e0",bluePale:"#ddf3f5",brownPale:"#f7ebe1",purplePale:"#f5eeff",light:"#fff",dark:"#353535",success:"#38b03f",warning:"#f1a325",danger:"#ea644a",info:"#03b8cf",important:"#bd7b46",special:"#8666b8",successPale:"#ddf4df",warningPale:"#fff0d5",dangerPale:"#ffe5e0",infoPale:"#ddf3f5",importantPale:"#f7ebe1",specialPale:"#f5eeff"};a.get=function(o){("undefined"==typeof o||"random"===o)&&(o=i[e++%i.length]);var n=a[o]?a[o]:o;return t.zui.Color?new t.zui.Color(n):n},t.zui({colorset:a}),t.zui.Color&&t.extend(t.zui.Color,a)}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,a=this;t(this).one("bsTransitionEnd",function(){i=!0});var o=function(){i||t(a).trigger(t.support.transition.end)};return setTimeout(o,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";var e=function(i,a){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,a),this.isLoading=!1};e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var i="disabled",a=this.$element,o=a.is("input")?"val":"html",n=a.data();e+="Text",n.resetText||a.data("resetText",a[o]()),a[o](n[e]||this.options[e]),setTimeout(t.proxy(function(){"loadingText"==e?(this.isLoading=!0,a.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,a.removeClass(i).removeAttr(i))},this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}t&&this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=function(i){return this.each(function(){var a=t(this),o=a.data("zui.button"),n="object"==typeof i&&i;o||a.data("zui.button",o=new e(this,n)),"toggle"==i?o.toggle():i&&o.setState(i)})},t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.zui.button.data-api","[data-toggle^=button]",function(e){var i=t(e.target);i.hasClass("btn")||(i=i.closest(".btn")),i.button("toggle"),e.preventDefault()})}(jQuery),function(t){"use strict";var e={zh_cn:'您的浏览器版本过低,无法体验所有功能,建议升级或者更换浏览器。 了解更多...',zh_tw:'您的瀏覽器版本過低,無法體驗所有功能,建議升級或者更换瀏覽器。了解更多...',en:'Your browser is too old, it has been unable to experience the colorful internet. We strongly recommend that you upgrade a better one. Learn more...'},i=function(){var t=this.isIE()||this.isIE10()||!1;if(t)for(var e=10;e>5;e--)if(this.isIE(e)){t=e;break}this.ie=t,this.cssHelper()};i.prototype.cssHelper=function(){var e=this.ie,i=t("html");i.toggleClass("ie",e).removeClass("ie-6 ie-7 ie-8 ie-9 ie-10"),e&&i.addClass("ie-"+e).toggleClass("gt-ie-7 gte-ie-8 support-ie",e>=8).toggleClass("lte-ie-7 lt-ie-8 outdated-ie",8>e).toggleClass("gt-ie-8 gte-ie-9",e>=9).toggleClass("lte-ie-8 lt-ie-9",9>e).toggleClass("gt-ie-9 gte-ie-10",e>=10).toggleClass("lte-ie-9 lt-ie-10",10>e)},i.prototype.tip=function(i){var a=t("#browseHappyTip");a.length||(a=t('
'),a.prependTo("body")),a.find(".content").html(i||this.browseHappyTip||e[t.zui.clientLang()||"zh_cn"])},i.prototype.isIE=function(t){if(10===t)return this.isIE10();var e=document.createElement("b");return e.innerHTML="",1===e.getElementsByTagName("i").length},i.prototype.isIE10=function(){return!1},t.zui({browser:new i}),t(function(){t("body").hasClass("disabled-browser-tip")||t.zui.browser.ie&&t.zui.browser.ie<8&&t.zui.browser.tip()})}(jQuery),+function(t){"use strict";var e="zui.collapse",i=function(e,a){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,a),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i=t.Event("show."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var a=this.$parent&&this.$parent.find(".in");if(a&&a.length){var o=a.data(e);if(o&&o.transitioning)return;a.collapse("hide"),o||a.data(e,null)}var n=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[n](0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("in")[n]("auto"),this.transitioning=0,this.$element.trigger("shown."+e)};if(!t.support.transition)return s.call(this);var r=t.camelCase(["scroll",n].join("-"));this.$element.one(t.support.transition.end,t.proxy(s,this)).emulateTransitionEnd(350)[n](this.$element[0][r])}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var a=this.dimension();this.$element[a](this.$element[a]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden."+e).removeClass("collapsing").addClass("collapse")};return t.support.transition?void this.$element[a](0).one(t.support.transition.end,t.proxy(o,this)).emulateTransitionEnd(350):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var a=t.fn.collapse;t.fn.collapse=function(a){return this.each(function(){var o=t(this),n=o.data(e),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof a&&a);n||o.data(e,n=new i(this,s)),"string"==typeof a&&n[a]()})},t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=a,this},t(document).on("click."+e+".data-api","[data-toggle=collapse]",function(i){var a,o=t(this),n=o.attr("data-target")||i.preventDefault()||(a=o.attr("href"))&&a.replace(/.*(?=#[^\s]+$)/,""),s=t(n),r=s.data(e),l=r?"toggle":o.data(),d=o.attr("data-parent"),c=d&&t(d);r&&r.transitioning||(c&&c.find('[data-toggle=collapse][data-parent="'+d+'"]').not(o).addClass("collapsed"),o[s.hasClass("in")?"addClass":"removeClass"]("collapsed")),s.collapse(l)})}(window.jQuery),+function(t){"use strict";function e(){t(o).remove(),t(n).each(function(e){var o=i(t(this));o.hasClass("open")&&(o.trigger(e=t.Event("hide."+a)),e.isDefaultPrevented()||o.removeClass("open").trigger("hidden."+a))})}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var a;try{a=i&&t(i)}catch(o){}return a&&a.length?a:e.parent()}var a="zui.dropdown",o=".dropdown-backdrop",n="[data-toggle=dropdown]",s=function(e){t(e).on("click."+a,this.toggle)};s.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=i(n),r=s.hasClass("open");if(e(),!r){if("ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t('