diff --git a/VERSION b/VERSION index ab69bef60c..646b71216b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -12.3.4 +12.4.stable diff --git a/config/config.php b/config/config.php index 414761215c..b202bf6e94 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '12.3.4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '12.4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/db/standard/xuanxuan12.3.4.sql b/db/standard/xuanxuan12.4.sql similarity index 100% rename from db/standard/xuanxuan12.3.4.sql rename to db/standard/xuanxuan12.4.sql diff --git a/db/standard/zentao12.3.4.sql b/db/standard/zentao12.4.sql similarity index 100% rename from db/standard/zentao12.3.4.sql rename to db/standard/zentao12.4.sql diff --git a/doc/CHANGELOG b/doc/CHANGELOG index aa48ae3289..c428a20238 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,4 +1,4 @@ -2020-07-27 12.3.4 +2020-07-27 12.4.stable 修复的Bug 3196 内网快速开发平台第二期排版错行 2784 用户可以修改他人记录的工时信息 diff --git a/module/bug/control.php b/module/bug/control.php index 027ae7c08f..66e2107a8d 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -114,6 +114,9 @@ class bug extends control $moduleTree = $this->tree->getTreeMenu($productID, $viewType = 'bug', $startModuleID = 0, array('treeModel', 'createBugLink'), '', (int)$this->cookie->treeBranch); } + if(($browseType != 'bymodule' && $browseType != 'bybranch')) $this->session->set('bugBrowseType', $browseType); + if(($browseType == 'bymodule' || $browseType == 'bybranch') and $this->session->bugBrowseType == 'bysearch') $this->session->set('bugBrowseType', 'unclosed'); + /* Process the order by field. */ if(!$orderBy) $orderBy = $this->cookie->qaBugOrder ? $this->cookie->qaBugOrder : 'id_desc'; setcookie('qaBugOrder', $orderBy, 0, $this->config->webRoot, '', false, true); diff --git a/module/bug/js/create.js b/module/bug/js/create.js index 5a12118e4a..f38e1376cd 100644 --- a/module/bug/js/create.js +++ b/module/bug/js/create.js @@ -64,7 +64,7 @@ function setAssignedTo(moduleID, productID) var realName = owner[1]; var isExist = false; var count = $('#assignedTo').find('option').length; - for(var i=0;ibug->mySelects[$browseType]) && in_array($brow foreach($menus as $menuItem) { if(isset($menuItem->hidden)) continue; - $menuBrowseType = strpos($menuItem->name, 'QUERY') === 0 ? 'bySearch' : $menuItem->name; $label = "{$menuItem->text}"; - if($this->session->bugBrowseType != 'bysearch' && ($browseType == 'bymodule' or $browseType == 'bybranch')) $browseType = $this->session->bugBrowseType; - $label .= $menuBrowseType == $browseType ? " {$pager->recTotal}" : ''; - $active = $menuBrowseType == $browseType ? 'btn-active-text' : ''; + $label .= $menuBrowseType == $this->session->bugBrowseType ? " {$pager->recTotal}" : ''; + $active = $menuBrowseType == $this->session->bugBrowseType ? 'btn-active-text' : ''; if($menuItem->name == 'my') { diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 393185028a..42087dfda1 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -336,7 +336,6 @@ $lang->testreport->menu->caselib = array('link' => '用例庫|caselib|browse') $lang->caselib = new stdclass(); $lang->caselib->menu = new stdclass(); -$lang->caselib->subMenu = $lang->qa->subMenu; $lang->caselib->menu->bug = array('link' => 'Bug|bug|browse|'); $lang->caselib->menu->testcase = array('link' => '用例|testcase|browse|', 'class' => 'dropdown dropdown-hover'); $lang->caselib->menu->testtask = array('link' => '測試單|testtask|browse|'); @@ -344,6 +343,11 @@ $lang->caselib->menu->testsuite = array('link' => '套件|testsuite|browse|'); $lang->caselib->menu->report = array('link' => '報告|testreport|browse|'); $lang->caselib->menu->caselib = array('link' => '用例庫|caselib|browse|libID=%s', 'alias' => 'create,createcase,view,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase'); +$lang->caselib->subMenu = new stdclass(); +$lang->caselib->subMenu->testcase = new stdclass(); +$lang->caselib->subMenu->testcase->feature = array('link' => '功能測試|testcase|browse|', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree,story'); +$lang->caselib->subMenu->testcase->unit = array('link' => '單元測試|testtask|browseUnits|'); + $lang->ci = new stdclass(); $lang->ci->menu = new stdclass(); $lang->ci->menu->code = array('link' => '代碼|repo|browse|repoID=%s', 'alias' => 'diff,view,revision,log,blame,showsynccomment'); @@ -523,7 +527,7 @@ $lang->error->date = "『%s』應當為合法的日期。"; $lang->error->datetime = "『%s』應當為合法的日期。"; $lang->error->code = "『%s』應當為字母或數字的組合。"; $lang->error->account = "『%s』只能是字母和數字的組合三位以上。"; -$lang->error->passwordsame = "兩次密碼應當相等。"; +$lang->error->passwordsame = "兩次密碼應該相同。"; $lang->error->passwordrule = "密碼應該符合規則,長度至少為六位。"; $lang->error->accessDenied = '您沒有訪問權限'; $lang->error->pasteImg = '您的瀏覽器不支持粘貼圖片!'; diff --git a/module/dev/config.php b/module/dev/config.php index f364a1725d..573cbdaa6a 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -59,6 +59,10 @@ $config->dev->group['score'] = 'admin'; $config->dev->group['config'] = 'admin'; $config->dev->group['svn'] = 'repo'; $config->dev->group['git'] = 'repo'; +$config->dev->group['ci'] = 'repo'; +$config->dev->group['compile'] = 'repo'; +$config->dev->group['jenkins'] = 'repo'; +$config->dev->group['job'] = 'repo'; $config->dev->group['api'] = 'api'; $config->dev->group['entry'] = 'api'; $config->dev->group['log'] = 'api'; diff --git a/module/dev/lang/de.php b/module/dev/lang/de.php index 122186af66..e955c42700 100644 --- a/module/dev/lang/de.php +++ b/module/dev/lang/de.php @@ -110,6 +110,10 @@ $lang->dev->tableList['repo'] = 'Code'; $lang->dev->tableList['repohistory'] = 'Repo History'; $lang->dev->tableList['repofiles'] = 'Repo Files'; $lang->dev->tableList['repobranch'] = 'Repo Branch'; +$lang->dev->tableList['ci'] = 'CI'; +$lang->dev->tableList['compile'] = 'Compile'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = 'Job'; $lang->dev->groupList['my'] = 'Dashboard'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -118,7 +122,7 @@ $lang->dev->groupList['qa'] = 'QA'; $lang->dev->groupList['doc'] = 'Dok'; $lang->dev->groupList['report'] = 'Report'; $lang->dev->groupList['company'] = 'Unternehmen'; -$lang->dev->groupList['repo'] = 'Code'; +$lang->dev->groupList['repo'] = 'CI'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = 'Message'; diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 0a71ec4ebe..6c735544a1 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -110,6 +110,10 @@ $lang->dev->tableList['repo'] = 'Code'; $lang->dev->tableList['repohistory'] = 'Repo History'; $lang->dev->tableList['repofiles'] = 'Repo Files'; $lang->dev->tableList['repobranch'] = 'Repo Branch'; +$lang->dev->tableList['ci'] = 'CI'; +$lang->dev->tableList['compile'] = 'Compile'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = 'Job'; $lang->dev->groupList['my'] = 'Dashboard'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -118,7 +122,7 @@ $lang->dev->groupList['qa'] = 'Test'; $lang->dev->groupList['doc'] = 'Doc'; $lang->dev->groupList['report'] = 'Report'; $lang->dev->groupList['company'] = 'Company'; -$lang->dev->groupList['repo'] = 'Code'; +$lang->dev->groupList['repo'] = 'CI'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = 'Message'; diff --git a/module/dev/lang/fr.php b/module/dev/lang/fr.php index b62b4021b7..c52ca19677 100644 --- a/module/dev/lang/fr.php +++ b/module/dev/lang/fr.php @@ -110,6 +110,10 @@ $lang->dev->tableList['repo'] = 'Code'; $lang->dev->tableList['repohistory'] = 'Repo History'; $lang->dev->tableList['repofiles'] = 'Repo Files'; $lang->dev->tableList['repobranch'] = 'Repo Branch'; +$lang->dev->tableList['ci'] = 'CI'; +$lang->dev->tableList['compile'] = 'Compile'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = 'Job'; $lang->dev->groupList['my'] = 'Dashboard'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -118,7 +122,7 @@ $lang->dev->groupList['qa'] = 'QA'; $lang->dev->groupList['doc'] = 'Doc'; $lang->dev->groupList['report'] = 'Rapport'; $lang->dev->groupList['company'] = 'Entreprise'; -$lang->dev->groupList['repo'] = 'Code'; +$lang->dev->groupList['repo'] = 'CI'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = 'Message'; diff --git a/module/dev/lang/vi.php b/module/dev/lang/vi.php index 9b1637df1e..2e8269085a 100644 --- a/module/dev/lang/vi.php +++ b/module/dev/lang/vi.php @@ -110,6 +110,10 @@ $lang->dev->tableList['repo'] = 'Mã'; $lang->dev->tableList['repohistory'] = 'Repo History'; $lang->dev->tableList['repofiles'] = 'Repo Files'; $lang->dev->tableList['repobranch'] = 'Repo nhánh'; +$lang->dev->tableList['ci'] = 'CI'; +$lang->dev->tableList['compile'] = 'Compile'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = 'Job'; $lang->dev->groupList['my'] = 'Dashboard'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -118,7 +122,7 @@ $lang->dev->groupList['qa'] = 'QA'; $lang->dev->groupList['doc'] = 'Tài liệu'; $lang->dev->groupList['report'] = 'Báo cáo'; $lang->dev->groupList['company'] = 'Doanh nghiệp'; -$lang->dev->groupList['repo'] = 'Mã'; +$lang->dev->groupList['repo'] = 'CI'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = 'Tin nhắn'; diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php index 74eb8021a9..c932c62b2e 100644 --- a/module/dev/lang/zh-cn.php +++ b/module/dev/lang/zh-cn.php @@ -110,6 +110,10 @@ $lang->dev->tableList['repo'] = '代码'; $lang->dev->tableList['repohistory'] = '版本历史'; $lang->dev->tableList['repofiles'] = '代码文件'; $lang->dev->tableList['repobranch'] = '代码分支'; +$lang->dev->tableList['ci'] = '持续集成'; +$lang->dev->tableList['compile'] = '构建'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = '构建任务'; $lang->dev->groupList['my'] = '我的地盘'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -118,7 +122,7 @@ $lang->dev->groupList['qa'] = '测试'; $lang->dev->groupList['doc'] = '文档'; $lang->dev->groupList['report'] = '统计'; $lang->dev->groupList['company'] = '组织'; -$lang->dev->groupList['repo'] = '代码'; +$lang->dev->groupList['repo'] = '持续集成'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = '消息'; diff --git a/module/dev/lang/zh-tw.php b/module/dev/lang/zh-tw.php index 5ce8a90da6..fecbf9efc0 100644 --- a/module/dev/lang/zh-tw.php +++ b/module/dev/lang/zh-tw.php @@ -88,6 +88,7 @@ $lang->dev->tableList['svn'] = 'SVN'; $lang->dev->tableList['testcase'] = '測試用例'; $lang->dev->tableList['testreport'] = '測試報告'; $lang->dev->tableList['testsuite'] = '測試套件'; +$lang->dev->tableList['caselib'] = '用例庫'; $lang->dev->tableList['tree'] = '模組關係'; $lang->dev->tableList['upgrade'] = '更新'; $lang->dev->tableList['cron'] = '定時任務'; @@ -105,13 +106,14 @@ $lang->dev->tableList['log'] = '介面日誌'; $lang->dev->tableList['message'] = '消息'; $lang->dev->tableList['notify'] = '通知'; $lang->dev->tableList['userview'] = '可訪問權限'; -$lang->dev->tableList['im_chatuser'] = '客戶端用戶'; -$lang->dev->tableList['im_message'] = '客戶端消息'; -$lang->dev->tableList['im_messagestatus'] = '客戶端狀態'; $lang->dev->tableList['repo'] = '代碼'; $lang->dev->tableList['repohistory'] = '版本歷史'; $lang->dev->tableList['repofiles'] = '代碼檔案'; $lang->dev->tableList['repobranch'] = '代碼分支'; +$lang->dev->tableList['ci'] = '持續整合'; +$lang->dev->tableList['compile'] = '構建'; +$lang->dev->tableList['jenkins'] = 'Jenkins'; +$lang->dev->tableList['job'] = '構建任務'; $lang->dev->groupList['my'] = '我的地盤'; $lang->dev->groupList['product'] = $lang->productCommon; @@ -120,7 +122,7 @@ $lang->dev->groupList['qa'] = '測試'; $lang->dev->groupList['doc'] = '文檔'; $lang->dev->groupList['report'] = '統計'; $lang->dev->groupList['company'] = '組織'; -$lang->dev->groupList['repo'] = '代碼'; +$lang->dev->groupList['repo'] = '持續整合'; $lang->dev->groupList['api'] = 'API'; $lang->dev->groupList['message'] = '消息'; diff --git a/module/dev/model.php b/module/dev/model.php index b816bba5dc..4e8bc4e641 100644 --- a/module/dev/model.php +++ b/module/dev/model.php @@ -241,6 +241,8 @@ class devModel extends model $modules = array(); foreach($moduleList as $module) { + if(!file_exists($module . DS . 'control.php')) continue; + $module = basename($module); if($module == 'editor' or $module == 'help' or $module == 'setting' or $module == 'common') continue; $group = zget($this->config->dev->group, $module, 'other'); diff --git a/module/file/lang/zh-tw.php b/module/file/lang/zh-tw.php index 9ca24199d5..22f3e3cb9e 100644 --- a/module/file/lang/zh-tw.php +++ b/module/file/lang/zh-tw.php @@ -62,3 +62,4 @@ $lang->file->dangerFile = " 您選擇的檔案存在安全風險,系統 $lang->file->errorSuffix = '壓縮包格式錯誤,只能上傳zip壓縮包!'; $lang->file->errorExtract = '解壓縮失敗!可能檔案已經損壞,或壓縮包裡含有非法上傳檔案。'; $lang->file->fileNotFound = '未找到該檔案,可能物理檔案已被刪除!'; +$lang->file->fileContentEmpty = '上傳檔案內容為空,請檢查後重新上傳。'; diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php index 31a9775752..dad98de62e 100644 --- a/module/misc/lang/de.php +++ b/module/misc/lang/de.php @@ -86,7 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Letzte Version'; $lang->misc->feature->detailed = 'Details'; -$lang->misc->releaseDate['12.3.4'] = '2020-07-27'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -131,7 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['12.3.4'][] = array('title'=>'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'Fix Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'Fix Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'Fix workflow', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'Fix bugs of high severity.', 'desc' => ''); diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index e423d54280..f8b590899c 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -86,7 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Detail'; -$lang->misc->releaseDate['12.3.4'] = '2020-07-27'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -131,7 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['12.3.4'][] = array('title'=>'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'Fix Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'Fix Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'Fix workflow', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'Fix bugs of high severity.', 'desc' => ''); diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php index 93114b5a7e..f0085fddb9 100644 --- a/module/misc/lang/fr.php +++ b/module/misc/lang/fr.php @@ -86,7 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Dernière Version'; $lang->misc->feature->detailed = 'Détail'; -$lang->misc->releaseDate['12.3.4'] = '2020-07-27'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -131,7 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['12.3.4'][] = array('title'=>'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'Fix Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'Fix Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'Fix workflow', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'Fix bugs of high severity.', 'desc' => ''); diff --git a/module/misc/lang/vi.php b/module/misc/lang/vi.php index bbe6b0cc38..e3c4151b1d 100644 --- a/module/misc/lang/vi.php +++ b/module/misc/lang/vi.php @@ -86,7 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Chi tiết'; -$lang->misc->releaseDate['12.3.4'] = '2020-07-27'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -131,7 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['12.3.4'][] = array('title'=>'Fix Bug', 'desc' => ''); +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'Fix Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'Fix Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'Fix workflow', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'Fix bugs of high severity.', 'desc' => ''); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index 74c861b417..7793d188d5 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -86,7 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; -$lang->misc->releaseDate['12.3.4'] = '2020-07-27'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -131,7 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['12.3.4'][] = array('title'=>'修复Bug', 'desc' => ''); +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'修复Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'修复Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'修复工作流。', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'修复重要程度高的Bug。', 'desc' => ''); diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index 93821076e6..7cb3ef82fa 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['12.4.stable'] = '2020-07-28'; $lang->misc->releaseDate['12.3.3'] = '2020-07-02'; $lang->misc->releaseDate['12.3.2'] = '2020-06-01'; $lang->misc->releaseDate['12.3.1'] = '2020-05-15'; @@ -130,6 +131,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['12.4.stable'][] = array('title'=>'修復Bug', 'desc' => ''); + $lang->misc->feature->all['12.3.3'][] = array('title'=>'修復Bug', 'desc' => ''); $lang->misc->feature->all['12.3.2'][] = array('title'=>'修復工作流。', 'desc' => ''); $lang->misc->feature->all['12.3.1'][] = array('title'=>'修復重要程度高的Bug。', 'desc' => ''); diff --git a/module/product/control.php b/module/product/control.php index 171e438725..4dfe862056 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -133,7 +133,6 @@ class product extends control if($browseType == '') setcookie('treeBranch', (int)$branch, 0, $this->config->webRoot, '', false, false); } if($browseType == 'bybranch') setcookie('storyBranch', (int)$branch, 0, $this->config->webRoot, '', false, false); - if($browseType != 'bymodule' and $browseType != 'bybranch') $this->session->set('storyBrowseType', $browseType); $moduleID = ($browseType == 'bymodule') ? (int)$param : (($browseType == 'bysearch' or $browseType == 'bybranch') ? 0 : ($this->cookie->storyModule ? $this->cookie->storyModule : 0)); $queryID = ($browseType == 'bysearch') ? (int)$param : 0; @@ -154,6 +153,9 @@ class product extends control $moduleTree = $this->tree->getTreeMenu($productID, $viewType = 'story', $startModuleID = 0, array('treeModel', $createModuleLink), '', (int)$this->cookie->treeBranch); } + if($browseType != 'bymodule' and $browseType != 'bybranch') $this->session->set('storyBrowseType', $browseType); + if(($browseType == 'bymodule' or $browseType == 'bybranch') and $this->session->storyBrowseType == 'bysearch') $this->session->set('storyBrowseType', 'unclosed'); + /* Process the order by field. */ if(!$orderBy) $orderBy = $this->cookie->productStoryOrder ? $this->cookie->productStoryOrder : 'id_desc'; setcookie('productStoryOrder', $orderBy, 0, $this->config->webRoot, '', false, true); diff --git a/module/product/model.php b/module/product/model.php index 86c235e4d7..8f6dc83503 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -561,6 +561,7 @@ class productModel extends model /* Set modules and browse type. */ $modules = $moduleID ? $this->loadModel('tree')->getAllChildID($moduleID) : '0'; + $browseType = $browseType == 'bybranch' ? 'bymodule' : $browseType; $browseType = ($browseType == 'bymodule' and $this->session->storyBrowseType and $this->session->storyBrowseType != 'bysearch') ? $this->session->storyBrowseType : $browseType; diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 67a31a1c2f..ab806ef73a 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -39,7 +39,6 @@ js::set('foldAll', $lang->project->treeLevel['root']);
session->storyBrowseType == 'bysearch') $this->session->set('storyBrowseType', 'allstory'); foreach(customModel::getFeatureMenu($this->moduleName, $this->methodName) as $menuItem) { if(isset($menuItem->hidden)) continue; diff --git a/module/project/control.php b/module/project/control.php index cf9626bf9d..6631a89c6e 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -149,6 +149,8 @@ class project extends control $this->session->set('taskBrowseType', $browseType); } + if($browseType == 'bymodule' and $this->session->taskBrowseType == 'bysearch') $this->session->set('taskBrowseType', 'unclosed'); + /* Set queryID, moduleID and productID. */ $queryID = ($browseType == 'bysearch') ? (int)$param : 0; $moduleID = ($browseType == 'bymodule') ? (int)$param : (($browseType == 'bysearch' or $browseType == 'byproduct') ? 0 : $this->cookie->moduleBrowseParam); diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php index eb1b516816..85cbdfd2eb 100644 --- a/module/project/lang/zh-tw.php +++ b/module/project/lang/zh-tw.php @@ -227,6 +227,7 @@ $lang->project->end = '截止日期'; $lang->project->lblStats = '工時統計'; $lang->project->stats = '可用工時 %s 工時,總共預計 %s 工時,已經消耗 %s 工時,預計剩餘 %s 工時'; $lang->project->taskSummary = "本頁共 %s 個任務,未開始 %s,進行中 %s,總預計 %s 工時,已消耗 %s 工時,剩餘 %s 工時。"; +$lang->project->pageSummary = "本頁共 %total% 個任務,未開始 %wait%,進行中 %doing%,總預計 %estimate% 工時,已消耗 %consumed% 工時,剩餘 %left% 工時。"; $lang->project->checkedSummary = "選中 %total% 個任務,未開始 %wait%,進行中 %doing%,總預計 %estimate% 工時,已消耗 %consumed% 工時,剩餘 %left% 工時。"; $lang->project->memberHoursAB = "
%s有 %s 工時
"; $lang->project->memberHours = '
%s可用工時
%s
'; @@ -276,6 +277,7 @@ $lang->project->fixFirstWithLeft = '修改剩餘工時'; $lang->project->action = new stdclass(); $lang->project->action->opened = '$date, 由 $actor 創建。$extra' . "\n"; $lang->project->action->managed = '$date, 由 $actor 維護。$extra' . "\n"; +$lang->project->action->edited = '$date, 由 $actor 編輯。$extra' . "\n"; $lang->project->action->extra = '相關產品為 %s。'; /* 統計。*/ diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index ef85df8506..8965770cd3 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -69,8 +69,8 @@ js::set('foldAll', $lang->project->treeLevel['root']); elseif($menuType != 'status' and $menuType != 'QUERY') { $label = "{$menuItem->text}"; - $label .= $menuType == $browseType ? " {$pager->recTotal}" : ''; - $active = $menuType == $browseType ? 'btn-active-text' : ''; + $label .= $menuType == $this->session->taskBrowseType ? " {$pager->recTotal}" : ''; + $active = $menuType == $this->session->taskBrowseType ? 'btn-active-text' : ''; $title = $menuType == 'needconfirm' ? "title='{$lang->task->storyChange}'" : ''; echo html::a(inlink('task', "project=$projectID&type=$menuType"), $label, '', "id='{$menuType}' class='btn btn-link $active' $title"); } diff --git a/module/story/lang/de.php b/module/story/lang/de.php index f1b2546967..86cd133eec 100644 --- a/module/story/lang/de.php +++ b/module/story/lang/de.php @@ -59,6 +59,7 @@ $lang->story->batchAssignTo = "Mehere zuordnen"; $lang->story->batchChangeModule = "Mehere Module ändern"; $lang->story->viewAll = "Alle"; $lang->story->skipStory = '%s is a parent story. It cannot be closed.'; +$lang->story->closedStory = 'Story %s is closed and will not be closed.'; $lang->story->common = 'Story'; $lang->story->id = 'ID'; diff --git a/module/story/lang/en.php b/module/story/lang/en.php index de5fe3af85..09ff7bfb45 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -59,6 +59,7 @@ $lang->story->batchAssignTo = "Batch Assign"; $lang->story->batchChangeModule = "Batch Change Modules"; $lang->story->viewAll = "See All"; $lang->story->skipStory = '%s is a parent story. It cannot be closed.'; +$lang->story->closedStory = 'Story %s is closed and will not be closed.'; $lang->story->common = 'Story'; $lang->story->id = 'ID'; diff --git a/module/story/lang/fr.php b/module/story/lang/fr.php index b561cac450..afaeaad0a5 100644 --- a/module/story/lang/fr.php +++ b/module/story/lang/fr.php @@ -59,6 +59,7 @@ $lang->story->batchAssignTo = "Affecter par lot"; $lang->story->batchChangeModule = "Changer Modules par lot"; $lang->story->viewAll = "Voir Tout"; $lang->story->skipStory = '%s is a parent story. It cannot be closed.'; +$lang->story->closedStory = 'Story %s is closed and will not be closed.'; $lang->story->common = 'Story'; $lang->story->id = 'ID'; diff --git a/module/story/lang/vi.php b/module/story/lang/vi.php index 31c943b058..b031669e38 100644 --- a/module/story/lang/vi.php +++ b/module/story/lang/vi.php @@ -59,6 +59,7 @@ $lang->story->batchAssignTo = "Bàn giao hàng loạt"; $lang->story->batchChangeModule = "Thay đổi Module hàng loạt"; $lang->story->viewAll = "Xem tất cả"; $lang->story->skipStory = '%s is a parent story. It cannot be closed.'; +$lang->story->closedStory = 'Story %s is closed and will not be closed.'; $lang->story->common = 'Câu chuyện'; $lang->story->id = 'ID'; diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php index a0e1ad8b9b..4c12730a9b 100644 --- a/module/story/lang/zh-tw.php +++ b/module/story/lang/zh-tw.php @@ -125,6 +125,9 @@ $lang->story->released = "已發佈{$lang->storyCommon}數"; $lang->story->ditto = '同上'; $lang->story->dittoNotice = "該{$lang->storyCommon}與上一{$lang->storyCommon}不屬於同一產品!"; +$lang->story->needNotReviewList[0] = '需要評審'; +$lang->story->needNotReviewList[1] = '不需要評審'; + $lang->story->useList[0] = '不使用'; $lang->story->useList[1] = '使用'; @@ -224,6 +227,7 @@ $lang->story->mustChoosePreVersion = '必須選擇回溯的版本'; $lang->story->noStory = "暫時沒有{$lang->storyCommon}。"; $lang->story->ignoreChangeStage = "{$lang->storyCommon} %s 為草稿狀態,沒有修改其階段。"; $lang->story->cannotDeleteParent = "不能刪除父{$lang->storyCommon}"; +$lang->story->moveChildrenTips = "修改父{$lang->storyCommon}的所屬產品會將其下的子{$lang->storyCommon}也移動到所選產品下。"; $lang->story->form = new stdclass(); $lang->story->form->area = "該{$lang->storyCommon}所屬範圍"; diff --git a/module/task/lang/zh-tw.php b/module/task/lang/zh-tw.php index 40de616a4b..6edcc33015 100644 --- a/module/task/lang/zh-tw.php +++ b/module/task/lang/zh-tw.php @@ -47,7 +47,7 @@ $lang->task->case = '相關用例'; $lang->task->confirmStoryChange = "確認{$lang->storyCommon}變動"; $lang->task->storyChange = "{$lang->storyCommon}變更"; $lang->task->progress = '進度'; -$lang->task->progressAB = '%'; +$lang->task->progressAB = '進度'; $lang->task->progressTips = '已消耗/(已消耗+剩餘)'; $lang->task->copy = '複製任務'; $lang->task->waitTask = '未開始的任務'; @@ -200,7 +200,8 @@ $lang->task->cannotDeleteParent = '不能刪除父任務。'; $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"總計消耗"必須為數字'; $lang->task->error->consumedNumber = '"本次消耗"必須為數字'; -$lang->task->error->estimateNumber = '"預計剩餘"必須為數字'; +$lang->task->error->estimateNumber = '"最初預計"必須為數字'; +$lang->task->error->leftNumber = '"預計剩餘"必須為數字'; $lang->task->error->recordMinus = '工時不能為負數'; $lang->task->error->consumedSmall = '"總計消耗"必須大於之前消耗'; $lang->task->error->consumedThisTime = '請填寫"工時"'; @@ -211,6 +212,7 @@ $lang->task->error->consumed = '任務:%s工時不能小於0,忽略 $lang->task->error->assignedTo = '當前狀態的多人任務不能指派給任務團隊外的成員。'; $lang->task->error->consumedEmpty = '"本次消耗"不能為空'; $lang->task->error->deadlineSmall = '"截止日期"必須大於"預計開始"'; +$lang->task->error->alreadyStarted = '此任務已被啟動,不能重複啟動!'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/testreport/control.php b/module/testreport/control.php index ef45d3ca46..26599e1af6 100644 --- a/module/testreport/control.php +++ b/module/testreport/control.php @@ -349,6 +349,8 @@ class testreport extends control $tasks = $this->testtask->getByList($report->tasks); $productIdList[$report->product] = $report->product; + foreach($tasks as $task) $this->setChartDatas($task->id); + $builds = $this->build->getByList($report->builds); $stories = !empty($builds) ? $this->testreport->getStories4Test($builds) : $this->story->getProjectStories($project->id);; $bugs = $this->testreport->getBugs4Test($builds, $productIdList, $begin, $end, 'project'); diff --git a/module/testreport/css/common.css b/module/testreport/css/common.css index 3fd7843301..4d4b231646 100644 --- a/module/testreport/css/common.css +++ b/module/testreport/css/common.css @@ -1 +1,2 @@ i.icon-help{font-size:10px;} +#refresh a.btn {border-left:none;} diff --git a/module/todo/lang/zh-tw.php b/module/todo/lang/zh-tw.php index ae3f6d9c3c..45570a7502 100644 --- a/module/todo/lang/zh-tw.php +++ b/module/todo/lang/zh-tw.php @@ -16,6 +16,7 @@ $lang->todo->createCycle = "創建周期待辦"; $lang->todo->assignTo = "指派給"; $lang->todo->assignedDate = "指派日期"; $lang->todo->assignAction = "指派待辦"; +$lang->todo->start = "開始待辦"; $lang->todo->activate = "激活待辦"; $lang->todo->batchCreate = "批量添加"; $lang->todo->edit = "編輯待辦"; diff --git a/module/tree/lang/zh-tw.php b/module/tree/lang/zh-tw.php index f006694934..56adcbf2a9 100644 --- a/module/tree/lang/zh-tw.php +++ b/module/tree/lang/zh-tw.php @@ -43,6 +43,7 @@ $lang->tree->confirmRoot4Doc = "修改所屬文檔庫,會同時修改該分 $lang->tree->successSave = '成功保存'; $lang->tree->successFixed = '成功修正數據!'; $lang->tree->repeatName = '模組名“%s”已經存在!'; +$lang->tree->shouldNotBlank = '模組名不能為空格!'; $lang->tree->module = '模組'; $lang->tree->name = '模組名稱'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index b9fc2fc92e..6ccba155a9 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -596,7 +596,7 @@ class upgradeModel extends model $this->saveLogs('Execute 12_3_2'); $this->execSQL($this->getUpgradeFile('12.3.2')); $this->appendExec('12_3_2'); - case '12.3.3': + case '12_3_3': $this->saveLogs('Execute 12_3_3'); $this->execSQL($this->getUpgradeFile('12.3.3')); $this->addPriv12_3_3(); diff --git a/www/js/zui/min.js b/www/js/zui/min.js index ac1fc887e8..b9c596be47 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,5 +1,5 @@ /*! - * ZUI: ZUI for Zentao - v1.9.2 - 2020-07-24 + * ZUI: ZUI for Zentao - v1.9.2 - 2020-07-29 * http://openzui.com * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2020 cnezsoft.com; Licensed MIT @@ -16,7 +16,7 @@ function(t,e,i){"$:nomunge";function n(){o=e[r](function(){a.each(function(){var * Copyright 2006, 2014 Klaus Hartl * Released under the MIT license */ -function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){function e(t){return r.raw?t:encodeURIComponent(t)}function i(t){return r.raw?t:decodeURIComponent(t)}function n(t){return e(r.json?JSON.stringify(t):String(t))}function o(t){0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return t=decodeURIComponent(t.replace(s," ")),r.json?JSON.parse(t):t}catch(e){}}function a(e,i){var n=r.raw?e:o(e);return t.isFunction(i)?i(n):n}var s=/\+/g,r=t.cookie=function(o,s,l){if(void 0!==s&&!t.isFunction(s)){if(l=t.extend({},r.defaults,l),"number"==typeof l.expires){var h=l.expires,c=l.expires=new Date;c.setTime(+c+864e5*h)}return document.cookie=[e(o),"=",n(s),l.expires?"; expires="+l.expires.toUTCString():"",l.path?"; path="+l.path:"",l.domain?"; domain="+l.domain:"",l.secure?"; secure":""].join("")}for(var d=o?void 0:{},u=document.cookie?document.cookie.split("; "):[],p=0,f=u.length;p=0;t--)delete this.page[i[t]];this.set(a,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.silence)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(),n=e-1;n>=0;n--){var o=i.key(n);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){"use strict";var e="zui.searchBox",i=function(e,n){var o=this;o.name=name,o.$=t(e),o.options=n=t.extend({},i.DEFAULTS,o.$.data(),n);var a=o.$.is(n.inputSelector)?o.$:o.$.find(n.inputSelector);if(a.length){var s=function(){o.changeTimer&&(clearTimeout(o.changeTimer),o.changeTimer=null)},r=function(){s();var t=o.getSearch();if(t!==o.lastValue){var e=""===t;a.toggleClass("empty",e),o.$.callComEvent(o,"onSearchChange",[t,e]),o.lastValue=t}};o.$input=a=a.first(),a.on(n.listenEvent,function(t){o.changeTimer=setTimeout(function(){r()},n.changeDelay)}).on("focus",function(t){a.addClass("focus"),o.$.callComEvent(o,"onFocus",[t])}).on("blur",function(t){a.removeClass("focus"),o.$.callComEvent(o,"onBlur",[t])}).on("keydown",function(t){var e=0,i=t.which;27===i&&n.escToClear?(this.setSearch("",!0),r(),e=1):13===i&&n.onPressEnter&&(r(),o.$.callComEvent(o,"onPressEnter",[t]));var a=o.$.callComEvent(o,"onKeyDown",[t]);a===!1&&(e=1),e&&t.preventDefault()}),o.$.on("click",".search-clear-btn",function(t){o.setSearch("",!0),r(),o.focus(),t.preventDefault()}),r()}else console.error("ZUI: search box init error, cannot find search box input element.")};i.DEFAULTS={inputSelector:'input[type="search"],input[type="text"]',listenEvent:"change input paste",changeDelay:500},i.prototype.getSearch=function(){return this.$input&&t.trim(this.$input.val())},i.prototype.setSearch=function(t,e){var i=this.$input;i&&(i.val(t),e||i.trigger("change"))},i.prototype.focus=function(){this.$input&&this.$input.focus()},t.fn.searchBox=function(n){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof n&&n;a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},i.NAME=e,t.fn.searchBox.Constructor=i}(jQuery),function(t,e){"use strict";var i="zui.draggable",n={container:"body",move:!0},o=0,a=function(e,i){var a=this;a.$=t(e),a.id=o++,a.options=t.extend({},n,a.$.data(),i),a.init()};a.DEFAULTS=n,a.NAME=i,a.prototype.init=function(){var n,o,a,s,r,l=this,h=l.$,c="before",d="drag",u="finish",p="."+i+"."+l.id,f="mousedown"+p,g="mouseup"+p,m="mousemove"+p,v=l.options,y=v.selector,b=v.handle,w=h,x=t.isFunction(v.move),C=function(t){var e=t.pageX,i=t.pageY;r=!0;var o={left:e-a.x,top:i-a.y};w.removeClass("drag-ready").addClass("dragging"),v.move&&(x?v.move(o,w):w.css(o)),v[d]&&v[d]({event:t,element:w,startOffset:a,pos:o,offset:{x:e-n.x,y:i-n.y},smallOffset:{x:e-s.x,y:i-s.y}}),s.x=e,s.y=i,v.stopPropagation&&t.stopPropagation()},_=function(i){if(t(e).off(p),!r)return void w.removeClass("drag-ready");var o={left:i.pageX-a.x,top:i.pageY-a.y};w.removeClass("drag-ready dragging"),v.move&&(x?v.move(o,w):w.css(o)),v[u]&&v[u]({event:i,element:w,startOffset:a,pos:o,offset:{x:i.pageX-n.x,y:i.pageY-n.y},smallOffset:{x:i.pageX-s.x,y:i.pageY-s.y}}),i.preventDefault(),v.stopPropagation&&i.stopPropagation()},k=function(i){var l=t.zui.getMouseButtonCode(v.mouseButton);if(!(l>-1&&i.button!==l)){var h=t(this);if(y&&(w=b?h.closest(y):h),v[c]){var d=v[c]({event:i,element:w});if(d===!1)return}var u=t(v.container),p=w.offset();o=u.offset(),n={x:i.pageX,y:i.pageY},a={x:i.pageX-p.left+o.left,y:i.pageY-p.top+o.top},s=t.extend({},n),r=!1,w.addClass("drag-ready"),i.preventDefault(),v.stopPropagation&&i.stopPropagation(),t(e).on(m,C).on(g,_)}};b?h.on(f,b,k):y?h.on(f,y,k):h.on(f,k)},a.prototype.destroy=function(){var n="."+i+"."+this.id;this.$.off(n),t(e).off(n),this.$.data(i,null)},t.fn.draggable=function(e){return this.each(function(){var n=t(this),o=n.data(i),s="object"==typeof e&&e;o||n.data(i,o=new a(this,s)),"string"==typeof e&&o[e]()})},t.fn.draggable.Constructor=a}(jQuery,document),function(t,e,i){"use strict";var n="zui.droppable",o={target:".droppable-target",deviation:5,sensorOffsetX:0,sensorOffsetY:0,dropToClass:"drop-to"},a=0,s=function(e,i){var n=this;n.id=a++,n.$=t(e),n.options=t.extend({},o,n.$.data(),i),n.init()};s.DEFAULTS=o,s.NAME=n,s.prototype.trigger=function(e,i){return t.zui.callEvent(this.options[e],i,this)},s.prototype.init=function(){var o,a,s,r,l,h,c,d,u,p,f,g,m,v=this,y=v.$,b=v.options,w=b.deviation,x="."+n+"."+v.id,C="mousedown"+x,_="mouseup"+x,k="mousemove"+x,T=b.selector,S=b.handle,D=b.flex,M=b.container,P=b.canMoveHere,z=b.dropToClass,F=y,L=!1,I=M?t(b.container).first():T?y:t("body"),E=function(e){if(L&&(f={left:e.pageX,top:e.pageY},!(i.abs(f.left-d.left)a&&f.top>s&&f.left-1&&i.button!==n)){var f=t(this);T&&(F=S?f.closest(T):f),F.hasClass("drag-shadow")||b.before&&b.before({event:i,element:F})===!1||(L=!0,o=t.isFunction(b.target)?b.target(F,y):I.find(b.target),a=null,s=null,r=!1,l=!0,h=null,c=F.offset(),u=I.offset(),u.top=u.top-I.scrollTop(),u.left=u.left-I.scrollLeft(),d={left:i.pageX,top:i.pageY},g=t.extend({},d),p={left:d.left-c.left,top:d.top-c.top},F.addClass("drag-from"),t(e).on(k,E).on(_,$),m=setTimeout(function(){t(e).on(C,$)},10),i.preventDefault(),b.stopPropagation&&i.stopPropagation())}};S?y.on(C,S,A):T?y.on(C,T,A):y.on(C,A)},s.prototype.destroy=function(){var i="."+n+"."+this.id;this.$.off(i),t(e).off(i),this.$.data(n,null)},s.prototype.reset=function(){this.destroy(),this.init()},t.fn.droppable=function(e){return this.each(function(){var i=t(this),o=i.data(n),a="object"==typeof e&&e;o||i.data(n,o=new s(this,a)),"string"==typeof e&&o[e]()})},t.fn.droppable.Constructor=s}(jQuery,document,Math),+function(t,e){"use strict";function i(e,i,a){return this.each(function(){var s=t(this),r=s.data(n),l=t.extend({},o.DEFAULTS,s.data(),"object"==typeof e&&e);r||s.data(n,r=new o(this,l)),"string"==typeof e?r[e](i,a):l.show&&r.show(i,a)})}var n="zui.modal",o=function(i,o){var a=this;a.options=o,a.$body=t(document.body),a.$element=t(i),a.$backdrop=a.isShown=null,a.scrollbarWidth=0,o.moveable===e&&(a.options.moveable=a.$element.hasClass("modal-moveable")),o.remote&&a.$element.find(".modal-content").load(o.remote,function(){a.$element.trigger("loaded."+n)}),o.scrollInside&&t(window).on("resize."+n,function(){a.isShown&&a.adjustPosition()})};o.VERSION="3.2.0",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0,position:"fit"};var a=function(e,i){var n=t(window);i.left=Math.max(0,Math.min(i.left,n.width()-e.outerWidth())),i.top=Math.max(0,Math.min(i.top,n.height()-e.outerHeight())),e.css(i)};o.prototype.toggle=function(t,e){return this.isShown?this.hide():this.show(t,e)},o.prototype.adjustPosition=function(i){var o=this,s=o.options;if(i===e&&(i=s.position),i!==e&&null!==i){t.isFunction(i)&&(i=i(o));var r=o.$element.find(".modal-dialog"),l=t(window).height(),h={maxHeight:"initial",overflow:"visible"},c=r.find(".modal-body").css(h);if(s.scrollInside&&c.length){var d=s.headerHeight,u=s.footerHeight,p=r.find(".modal-header"),f=r.find(".modal-footer");d="number"!=typeof d&&p.length?p.outerHeight():t.isFunction(d)?d(p):0,u="number"!=typeof u&&f.length?f.outerHeight():t.isFunction(u)?u(f):0,h.maxHeight=l-d-u,h.overflow=c[0].scrollHeight>h.maxHeight?"auto":"visible",c.css(h)}var g=Math.max(0,(l-r.outerHeight())/2);if("fit"===i?i={top:g>50?Math.floor(2*g/3):g}:"center"===i?i={top:g}:t.isPlainObject(i)||(i={top:i}),r.hasClass("modal-moveable")){var m=null,v=s.rememberPos;v&&(v===!0?m=o.$element.data("modal-pos"):t.zui.store&&(m=t.zui.store.pageGet(n+".rememberPos."+v))),i=t.extend(i,{left:Math.max(0,(t(window).width()-r.outerWidth())/2)},m),"inside"===s.moveable?a(r,i):r.css(i)}else r.css(i)}},o.prototype.setMoveable=function(){t.fn.draggable||console.error("Moveable modal requires draggable.js.");var e=this,i=e.options,o=e.$element.find(".modal-dialog").removeClass("modal-dragged");o.toggleClass("modal-moveable",!!i.moveable),e.$element.data("modal-moveable-setup")||o.draggable({container:e.$element,handle:".modal-header",before:function(){var t=o.css("margin-top");t&&"0px"!==t&&o.css("top",t).css("margin-top","").addClass("modal-dragged")},finish:function(o){var a=i.rememberPos;a&&(e.$element.data("modal-pos",o.pos),t.zui.store&&a!==!0&&t.zui.store.pageSet(n+".rememberPos."+a,o.pos))},move:"inside"!==i.moveable||function(t){a(o,t)}})},o.prototype.show=function(e,i){var a=this,s=t.Event("show."+n,{relatedTarget:e});a.$element.trigger(s),a.$element.toggleClass("modal-scroll-inside",!!a.options.scrollInside),a.isShown||s.isDefaultPrevented()||(a.isShown=!0,a.options.moveable&&a.setMoveable(),a.options.backdrop!==!1&&(a.$body.addClass("modal-open"),a.setScrollbar()),a.escape(),a.$element.on("click.dismiss."+n,'[data-dismiss="modal"]',function(t){a.hide(),t.stopPropagation()}),a.backdrop(function(){var s=t.support.transition&&a.$element.hasClass("fade");a.$element.parent().length||a.$element.appendTo(a.$body),a.$element.show().scrollTop(0),s&&a.$element[0].offsetWidth,a.$element.addClass("in").attr("aria-hidden",!1),a.adjustPosition(i),a.enforceFocus();var r=t.Event("shown."+n,{relatedTarget:e});s?a.$element.find(".modal-dialog").one("bsTransitionEnd",function(){a.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(o.TRANSITION_DURATION):a.$element.trigger("focus").trigger(r)}))},o.prototype.hide=function(e){e&&e.preventDefault&&e.preventDefault();var i=this;e=t.Event("hide."+n),i.$element.trigger(e),i.isShown&&!e.isDefaultPrevented()&&(i.isShown=!1,i.options.backdrop!==!1&&(i.$body.removeClass("modal-open"),i.resetScrollbar()),i.escape(),t(document).off("focusin."+n),i.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss."+n),t.support.transition&&i.$element.hasClass("fade")?i.$element.one("bsTransitionEnd",t.proxy(i.hideModal,i)).emulateTransitionEnd(o.TRANSITION_DURATION):i.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin."+n).on("focusin."+n,t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?t(document).on("keydown.dismiss."+n,t.proxy(function(i){if(27==i.which){var o=t.Event("escaping."+n),a=this.$element.triggerHandler(o,"esc");if(a!=e&&!a)return;this.hide()}},this)):this.isShown||t(document).off("keydown.dismiss."+n)},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$element.trigger("hidden."+n)})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,a=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&a;if(this.$backdrop=t('',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.extend(!0,t.zui.Messager.DEFAULTS,{cssClass:"messagger-zt",icons:{success:"check-circle",info:"chat-line",warning:"exclamation-sign",danger:"exclamation-sign"}}),t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);if(!n.data("historiesInited")){n.data("historiesInited",1),i=t.extend({},n.data(),i);var o=n.find(".histories-list"),a=!0,s=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),a=!a,t(this).find(".icon").toggleClass("icon-arrow-up",a).toggleClass("icon-arrow-down",!a);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");s=!s,e.toggleClass("icon-plus",!s).toggleClass("icon-minus",s),o.children("li").toggleClass("show-changes",s)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})}};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),a={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(a={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(a)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");if(i.length){i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=e.find(".sidebar-toggle");if(o.length){var a=function(){var e=o[0].getBoundingClientRect(),i=t(window).height(),n=Math.max(0,Math.floor(Math.min(i-40,e.top+e.height)-Math.max(e.top,0))/2)+(e.top<0?0-e.top:0);o.removeClass("fade").find(".icon").css("top",n+(t.zui.browser.isIE()?(i-80)/2:0))};a(),e.data("init",1).on("sidebar.toggle",a);var s=t.zui.browser.isIE()?1500:0,r=0,l=null,c=function(){var t=Date.now();return l&&(clearTimeout(l),l=null),t-rtr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),a=n.text();if(a.length>o.limitSize){e=a,i=a.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var s=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");s.text(s.data("textExpand")),s.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),s.text(s.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),a=null,s=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var s=e.width();if(o.length){if(a!==s){a=s;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",s).on("resize",s),s()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,m),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0),r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),T()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var S=function(){var e,i="en"==config.clientLang?"//www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"ja"==config.clientLang?"//www.zentao.jp/book/zentaomanual/8.html?fullScreen=zentao":"//www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,a=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},s=t.openHelp=function(s){s=s||i,a(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var r=t("#helpContent");if(r.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(s)}else{r=t('

'+lang.timeout+'

'+s+'

'),t("#header").after(r);var l=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),l.onload=l.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||a()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t(this),o=t("#helpMenuItem");o.length||(o=t('
  • '+i.text()+'
  • '),n.append('
  • ').append(o)),s(i.attr("href")),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(S),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var D=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){this.style.height="auto";var t=this.value?this.scrollHeight+2:32;o=Math.max(o,t)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(D)},t(function(){t("textarea.autosize").each(D),t(document).on("input keyup paste change","textarea.autosize",D); +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 t.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("
    ').append(t('
    ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),c){var d=h[0].getBoundingClientRect();l.css({left:d.left,width:h.width()}),l.find(".fixed-header-copy").css({left:o.left-d.left,position:"relative",minWidth:i.width()}),a||h.data("fixHeaderScroll")||(h.data("fixHeaderScroll",1),i.width()>h.width()&&h.on("scroll",function(){e.fixHeader()}))}else l.css({left:o.left,width:o.width});var u=l.find("th");n.find("th").each(function(e){u.eq(e).css("width",t(this).outerWidth())})}else l.remove()},r.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var a=n.find("tbody");if(!a.length)return;e=a[0].getBoundingClientRect()}var s=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(s)?s(e,o):e.bottom>window.innerHeight-50-("number"==typeof s?s:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},r.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},r.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var a=t.find('input[type="checkbox"]');a.length&&(i===e&&(i=!a.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,a.prop("checked",i).trigger("change"),n||o.updateCheckUI())},r.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,a=null,s=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),a&&a.toggleClass("row-check-end",!r&&o),r&&(s+=1),a=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",s>0).find(".check-all").toggleClass("checked",!(!l||s!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},r.DEFAULTS={checkable:!0,checkOnClickRow:!0,ajaxForm:!1,selectable:!0,fixHeader:!a,fixFooter:!a,iframeWidth:900,replaceId:"self",hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new r(this,a)),"string"==typeof e&&o[e]()})},r.NAME=i,t.fn.table.Constructor=r,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="",a="ja"===t.zui.clientLang()?"":";";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n,o){"string"==typeof e||e instanceof t?e=t(e):(o=n,n=i,i=e,e=t("form")), +e.enableForm(i!==!1,n,o)},t.disableForm=function(e,i,n){t.enableForm(e,!1,i,n)};var s=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(r,l){var h=t(r);if(h.length>1)return h.each(function(){t.ajaxForm(this,l)});t.isFunction(l)&&(l={complete:l}),l=t.extend({},n,h.data(),l);var c=l.beforeSubmit,d=l.error,u=l.success,p=l.finish;delete l.finish,delete l.success,delete l.onError,delete l.beforeSubmit,l=t.extend({beforeSubmit:function(n,a,s){if(h.enableForm(!1),(c&&c(n,a,s))!==!1){var r={},l=a.find('[type="file"]');r.fileapi=l.length&&l[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&a.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=a.attr("enctype")==p||a.attr("encoding")==p,g=r.fileapi&&r.formdata,m=u&&!g||f&&!r.formdata;m&&(""==o&&(o=s.url),s.url!=o&&(s.url=o),s.url=s.url.indexOf("&")>=0?s.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":s.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest")}},success:function(i,n,o){if((u&&u(i,n,o,h))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(r){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var c=l.responser?t(l.responser):h.find(".form-responser");c.length||(c=t("#responser"));var d=i.message,f=function(){var n=i.callback;if(n){var o=n.indexOf("("),a=(o>0?n.substr(0,o):n).split("."),s=e,r=a[0];a.length>1&&(r=a[1],"top"===a[0]?s=e.top:"parent"===a[0]&&(s=e.parent));var l=s[r];if(t.isFunction(l)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),l.apply(h,c)}}};if("success"===i.result){var g=l.locate||i.locate;if(h.enableForm(!0,!!g),d){var m=h.find('[type="submit"]').first(),v=!1;m.length&&(m.popover({container:"body",trigger:"manual",content:d,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||l.popoverPlacement||"right"}).popover("show"),setTimeout(function(){m.popover("destroy")},l.popoverTime||2e3),v=!0),c.length&&(c.html(''+d+"").show().delay(3e3).fadeOut(100),v=!0),v||s(d,"success")}if(p)return p(i,!0,h);if((l.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,l.closeModalTime||2e3),f()===!1)return;if(g)if("loadInModal"==g){var y=t(".modal");setTimeout(function(){y.load(y.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else if("parent"===g||"top"===g)e[g]&&setTimeout(function(){e[g].location.reload()},1200);else{var b="reload"==g?e.location.href:g;setTimeout(function(){e.location.href=b},1200)}var w=l.ajaxReload||i.ajaxReload;if(w){var x=t(w);x.length&&x.load(e.location.href+" "+w,function(){x.find('[data-toggle="modal"]').modalTrigger()})}}else{if(h.enableForm(),"string"==typeof d)c.length?c.html(''+d+"").show().delay(3e3).fadeOut(100):s(d,"danger");else if("object"==typeof d){var C=!1,_=[];t.each(d,function(e,i){var n=t.isArray(i)?i.join(a):i,o=t("#"+e);if(!o.length)return void _.push(n);var s=e+"Label",r=t("#"+s);if(!r.length){var l=o.closest(".input-group").length,h=o.closest("td").length;r=t('
    ').appendTo(h?o.closest("td"):l?o.closest(".input-group").parent():o.parent())}r.empty().append(n),o.addClass("has-error");var c=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",c);var d=t("#"+e+"_chosen");if(d.length&&d.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){c()===!0&&t(this).removeClass("has-error")}),!C){if(o.hasClass("chosen"))o.trigger("chosen:activate");else if(o.is("textarea")&&o.data("keditor")){var u=o.data("keditor");u.focus(),u.edit.doc.body.focus()}else o.focus();C=!0}}),_.length&&s(_.join(";"),"danger")}if(p)return p(i,!1,h);if(f()===!1)return}}},error:function(t,i,n){if((d&&d(t,i,n,h))!==!1){h.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},l),h._ajaxForm(l).data("zui.ajaxform",!0),h.on("click","[data-form-action]",function(){h.attr("action",t(this).data("formAction")).submit()})},t.setAjaxForm=function(e,i,n){t.ajaxForm(e,t.isPlainObject(i)?i:{onFinish:i,beforeSubmit:n})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(s)),i.$menu.append(s),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoViewIfNeeded&&t[0].scrollIntoViewIfNeeded({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var a=n.getItems().removeClass("active");if(o)a.removeClass("hidden");else{var s=t.trim(e).split(" ");a.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(s,n))})}n.scrollTo(a.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof i&&i;a||o.data(e,a=new n(this,s)),"string"==typeof i&&a[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var a=this;a.name=e,a.$=t(n),o=a.options=t.extend({},i.DEFAULTS,this.$.data(),o),a.$.hide(),a.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var a=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},s=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!s&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),s&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",a===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof n&&n;a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ts.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(s.fileSizeError.format(n(s.fileMaxSize)))),r.update()}),r.update()};a.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},a.prototype.update=function(){var t=this,e=t.$,i=t.getFile(),o=!i;e.toggleClass("normal",!o).toggleClass("empty",o),i?(t.oldName=i.name,e.find(".file-title").text(i.name).attr("title",i.name),e.find(".file-size").text(n(i.size)),e.find(".file-editbox").val(i.name).attr("size",i.name.length),t.options.onSelect&&t.options.onSelect(i,t)):e.find(".file-editbox").val("")},a.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),s="object"==typeof i&&i;o||n.data(e,o=new a(this,s)),"string"==typeof i&&o[i]()})},a.NAME=e,t.fn.fileInput.Constructor=a,t(function(){t('[data-provide="fileInput"]').fileInput()});var s="zui.fileInputList",r=function(e,i){var n=this;n.name=s;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(s),o="object"==typeof e&&e;n||i.data(s,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=s,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,a,s){if(o||(o=config.defaultView),a||(a=!1),n)for(n=n.split("&"),i=0;i0?"&":"?")+"pgm="+s),l},t(function(){var e=t("#main,#mainContent,#mainRow,.auto-fade-in");e.length&&e.hasClass("fade")&&setTimeout(function(){e.addClass("in")},e.data("fadeTime")||200)}),t.ajaxSendScore=function(e){t.get(t.createLink("score","ajax","method="+e))};var e=function(t){var e=0;if(t){var i=t.split(":");e+=60*parseInt(i[0]),e+=parseInt(i[1])}return e},n=function(t){t%=1440;var e=Math.floor(t/60),i=t%60;return e<10&&(e="0"+e),i<10&&(i="0"+i),e+":"+i},o=function(t){if("string"==typeof t&&(t=e(t)),"number"==typeof t)if(t<1e5){var i=new Date;i.setHours(Math.floor(t/60)%24),i.setMinutes(t%60),t=i}else t=new Date(t);return t},a=function(t,i){for(var a=i?o(i):new Date,s=a.getHours(),r=10*Math.floor(a.getMinutes()/10)+10,l=0;l<24;++l){var h=(l+s)%24;if(!(h<5))for(var c=0;c<6;++c){var d=n(60*h+10*c+r);t.append('")}}t.val()||(time=e(a.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var s=t(this),r=t.extend({},i,s.data()),l=s.find('[name="begin"],.control-time-begin'),h=s.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(s.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(s.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),a(l,r.begin),a(h,r.end),s.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:a,createTime:o};var s=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var a=o.find('a[data-value="'+e+'"]'),s=a.text();a.parent().addClass("selected"),t("#searchTypeName").text(s),i||t("#searchInput").focus()};t.gotoObject=function(e,i){if(e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e)if(i=i.replace(/[^\d]/g,""))window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i);else{var n={zh_cn:"请输入数字ID进行搜索",zh_tw:"請輸入數值ID行搜索"};alert(lang.searchTip||n[t.zui.clientLang()]||"Please enter a numberic id to search")}t("#searchInput").val(i).focus()},t(function(){s(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.zui.Picker&&t.zui.Picker.enableChosen(),t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,max_drop_width:500,no_wrap:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),a=n.outerHeight();return o.top>=a&&o.top+a{page}/{totalPage}',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.extend(!0,t.zui.Messager.DEFAULTS,{cssClass:"messagger-zt",icons:{success:"check-circle",info:"chat-line",warning:"exclamation-sign",danger:"exclamation-sign"}}),t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);if(!n.data("historiesInited")){n.data("historiesInited",1),i=t.extend({},n.data(),i);var o=n.find(".histories-list"),a=!0,s=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),a=!a,t(this).find(".icon").toggleClass("icon-arrow-up",a).toggleClass("icon-arrow-down",!a);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");s=!s,e.toggleClass("icon-plus",!s).toggleClass("icon-minus",s),o.children("li").toggleClass("show-changes",s)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})}};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),a={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(a={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(a)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");if(i.length){i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=e.find(".sidebar-toggle");if(o.length){var a=function(){var e=o[0].getBoundingClientRect(),i=t(window).height(),n=Math.max(0,Math.floor(Math.min(i-40,e.top+e.height)-Math.max(e.top,0))/2)+(e.top<0?0-e.top:0);o.removeClass("fade").find(".icon").css("top",n+(t.zui.browser.isIE()?(i-80)/2:0))};a(),e.data("init",1).on("sidebar.toggle",a);var s=t.zui.browser.isIE()?1500:0,r=0,l=null,c=function(){var t=Date.now();return l&&(clearTimeout(l),l=null),t-rtr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),a=n.text();if(a.length>o.limitSize){e=a,i=a.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var s=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");s.text(s.data("textExpand")),s.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),s.text(s.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),a=null,s=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var s=e.width();if(o.length){if(a!==s){a=s;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
    ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",s).on("resize",s),s()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,m),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0),r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),T()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var S=function(){var e,i="en"==config.clientLang?"//www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"ja"==config.clientLang?"//www.zentao.jp/book/zentaomanual/8.html?fullScreen=zentao":"//www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,a=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},s=t.openHelp=function(s){s=s||i,a(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var r=t("#helpContent");if(r.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(s)}else{r=t('

    '+lang.timeout+'

    '+s+'

    '),t("#header").after(r);var l=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),l.onload=l.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||a()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t(this),o=t("#helpMenuItem");o.length||(o=t('
  • '+i.text()+'
  • '),n.append('
  • ').append(o)),s(i.attr("href")),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(S),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var D=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){this.style.height="auto";var t=this.value?this.scrollHeight+2:32;o=Math.max(o,t)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(D)},t(function(){t("textarea.autosize").each(D),t(document).on("input keyup paste change","textarea.autosize",D); }),t(function(){var e=t("#dropMenu,.drop-menu");e.length&&e.on("click",".toggle-right-col",function(e){t(this).closest("#dropMenu,.drop-menu").toggleClass("show-right-col"),e.stopPropagation(),e.preventDefault()})});var M="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=M,t("html").toggleClass("is-firefox",M).toggleClass("not-firefox",!M),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions");if(i.length){var n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")}),t(function(){var e=t(".dropdown-menu.with-search");e.length&&(e.find(".menu-search").on("click",function(t){return t.stopPropagation(),!1}),e.on("keyup change paste","input",function(){var e=t(this),i=e.closest(".dropdown-menu.with-search"),n=e.val().toLowerCase(),o=i.find(".option");""==n?o.removeClass("hide"):o.each(function(){var e=t(this);e.toggleClass("hide",e.text().toString().toLowerCase().indexOf(n)<0&&e.data("key").toString().toLowerCase().indexOf(n)<0)})}),e.parents(".dropdown-submenu").one("mouseenter",function(){var e=t(this).find(".dropdown-list")[0];e&&e.getBoundingClientRect&&setTimeout(function(){var t=270,i=e.getBoundingClientRect();i.top<0&&(t=Math.min(270,i.height)+i.top),e.style.maxHeight=Math.min(270,t)+"px"},50)})),t(".dropdown-menu.with-search .menu-search").on("click",function(t){return t.stopPropagation(),!1})})}(jQuery),$.zui.lang("de",{"zui.pager":{pageOfText:"Seite {0}",prev:"Zurück",next:"Nächste Seite",first:"Erste Seite",last:"Letzte Seite","goto":"Goto",pageOf:"Seite {page}",totalPage:"{totalPage} Seiten",totalCount:"Total: {recTotal} Artikel",pageSize:"{recPerPage} Artikel pro Seite",itemsRange:"Seiten {start} bis {end}",pageOfTotal:"Seite {page}/{totalPage}"},"zui.boards":{append2end:"Gehen Sie zum Ende"},"zui.browser":{tip:"Online. Sorgenfrei. Aktualisiere deinen Browser noch heute!"},"zui.calendar":{weekNames:["Son","Mon","Die","Mit","Don","Fri","Sam"],monthNames:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",year:"{0}Jahr",month:"{0}Monat",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Kein Icon]",commonIcons:"Gemeinsame Symbole",webIcons:"Web-Symbol",editorIcons:"Editor-Symbol",directionalIcons:"Pfeil Zusammenfluss",otherIcons:"Andere Symbole"},"zui.colorPicker":{errorTip:"Kein gültiger Farbwert"},"zui.datagrid":{errorCannotGetDataFromRemote:"Daten vom Remote-Server ({0}) können nicht abgerufen werden.",errorCannotHandleRemoteData:"Die vom Remote-Server zurückgegebenen Daten können nicht verarbeitet werden."},"zui.guideViewer":{prevStep:"Vorheriger Schritt",nextStep:"Nächster Schritt"},"zui.tabs":{reload:"Neu laden",close:"Schliessen",closeOthers:"Schließen Sie andere Registerkarten",closeRight:"Schließen Sie die rechte Registerkarte",reopenLast:"Letzten geschlossenen Tab wiederherstellen",errorCannotFetchFromRemote:"Inhalt kann nicht vom Remote-Server abgerufen werden ({0})."},"zui.uploader":{},datetimepicker:{days:["Sonntag","Montag","Diensteg","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fri","Sam"],daysMin:["Son","Mon","Die","Mit","Don","Fri","Sam"],months:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",suffix:[],meridiem:[]},chosen:{no_results_text:"Nicht gefunden"},bootbox:{OK:"OK",CANCEL:"Stornieren",CONFIRM:"Bestätigen"}}),$.zui.lang("fr",{"zui.pager":{pageOfText:"Page {0}",prev:"Prev",next:"Suivant",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"De {start} à {end}",pageOfTotal:"Page {page} de {totalPage}"},"zui.boards":{append2end:"Aller jusqu'au bout"},"zui.browser":{tip:"Naviguez sans crainte sur Internet. Mettez votre navigateur à jour dès aujourd'hui!"},"zui.calendar":{weekNames:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],monthNames:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",year:"{0} Année",month:"{0} Mois",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Aucune icône]",commonIcons:"Icônes communes",webIcons:"Icône Web",editorIcons:"Icône de l'éditeur",directionalIcons:"Flèche confluence",otherIcons:"Autres icônes"},"zui.colorPicker":{errorTip:"Pas une valeur de couleur valide"},"zui.datagrid":{errorCannotGetDataFromRemote:"Impossible d'obtenir les données du serveur distant ({0}).",errorCannotHandleRemoteData:"Impossible de traiter les données renvoyées par le serveur distant."},"zui.guideViewer":{prevStep:"Étape précédente",nextStep:"Prochaine étape"},"zui.tabs":{reload:"Recharger",close:"Fermer",closeOthers:"Fermez les autres onglets",closeRight:"Fermer l'onglet de droite",reopenLast:"Restaurer le dernier onglet fermé",errorCannotFetchFromRemote:"Impossible d'obtenir le contenu du serveur distant ({0})."},"zui.uploader":{},datetimepicker:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",suffix:[],meridiem:[]},chosen:{no_results_text:"Pas trouvé"},bootbox:{OK:"D'accord",CANCEL:"Annuler",CONFIRM:"Confirmer"}}); \ No newline at end of file