diff --git a/db/update20.0.beta2.sql b/db/update20.0.beta2.sql index de557b8de5..eae33ea0ac 100644 --- a/db/update20.0.beta2.sql +++ b/db/update20.0.beta2.sql @@ -25,3 +25,4 @@ UPDATE `zt_grouppriv` SET `method` = 'deleteWorkhour' WHERE `module` = 'task' AN ALTER TABLE `zt_demandreview` CHANGE `reviewDate` `reviewDate` datetime NULL; DELETE FROM `zt_lang` WHERE `module` = 'project' AND `section` = 'menuOrder'; +DELETE FROM `zt_config` WHERE `module` = 'bi' AND `key` IN ('update2BI','bizGuide','pmsGuide'); diff --git a/lib/zin/wg/contactlist/js/v1.js b/lib/zin/wg/contactlist/js/v1.js index a114ff9b0a..7f515e5554 100644 --- a/lib/zin/wg/contactlist/js/v1.js +++ b/lib/zin/wg/contactlist/js/v1.js @@ -22,27 +22,27 @@ renderContactList = function() * 选择联系人列表后加载联系人。 * Load contact users after selecting contact list. * - * @param string value + * @param string target * @access public * @return void */ -window.loadContactUsers = function(value) +window.loadContactUsers = function(target) { - const event = this.base; - const $picker = $(event).zui('picker'); + const picker = event.target; + const $picker = $(picker).zui('picker'); if($picker === undefined) { if(config.debug) console.log('[ZIN] Contact picker not found'); return; } - if(!value) return; + const listID = $picker.$.value; + if(!listID) return; - const link = $.createLink('user', 'ajaxGetContactUsers', 'listID=' + value); - const target = this.props.loadTarget === undefined ? '' : this.props.loadTarget; + const link = $.createLink('user', 'ajaxGetContactUsers', 'listID=' + listID); $.getJSON(link, function(users) { - const $target = target ? $("[name^='" + target + "']") : $(event).closest('span').prev(); + const $target = target ? $("[name^='" + target + "']") : $(picker).closest('#contactBox').prev(); const $targetPicker = $target.zui('picker'); if($targetPicker === undefined) { diff --git a/lib/zin/wg/contactlist/v1.php b/lib/zin/wg/contactlist/v1.php index b985e5f800..d3c8e8240a 100644 --- a/lib/zin/wg/contactlist/v1.php +++ b/lib/zin/wg/contactlist/v1.php @@ -63,8 +63,7 @@ class contactList extends wg set::name($this->prop('name')), set::items($items), set::placeholder($this->prop('placeholder')), - set::onChange(jsRaw('loadContactUsers')), - setData('loadTarget', $target) + on::change()->call('loadContactUsers', "{$target}") ), a ( diff --git a/lib/zin/wg/formbatchpanel/v1.php b/lib/zin/wg/formbatchpanel/v1.php index 320bd18bb6..656e28c560 100644 --- a/lib/zin/wg/formbatchpanel/v1.php +++ b/lib/zin/wg/formbatchpanel/v1.php @@ -51,6 +51,7 @@ class formBatchPanel extends formPanel .panel-form-batch > .panel-body {position: relative; padding: 0; margin: 0 -16px} .panel-form-batch .form {gap: 0} .panel-form-batch .form-batch-container {max-height: calc(100vh - 214px); padding: 0 16px 16px; flex: auto; min-height: 0; overflow: auto} + .modal-body .panel-form-batch .form-batch-container {max-height: unset;} .panel-form-batch .form-actions {left: 0; position: static; flex: none; padding: 24px 0; border-top: 1px solid var(--color-border)} CSS; } diff --git a/lib/zin/wg/linkedstorylist/v1.php b/lib/zin/wg/linkedstorylist/v1.php index 8c6f34a46e..71f8732724 100644 --- a/lib/zin/wg/linkedstorylist/v1.php +++ b/lib/zin/wg/linkedstorylist/v1.php @@ -90,7 +90,7 @@ class linkedStoryList extends storyList 'data-url' => str_replace('{id}', "$story->id", $this->unlinkUrl), 'data-params' => 'event', 'data-call' => 'unlinkStory', - 'hint' => $lang->story->unlinkStory + 'hint' => $story->type == 'requirement' ? str_replace($lang->SRCommon, $lang->URCommon, $lang->story->unlinkStory) : $lang->story->unlinkStory ); if(is_array($unlinkBtn)) $btn = array_merge($btn, $unlinkBtn); diff --git a/lib/zin/wg/navbar/v1.php b/lib/zin/wg/navbar/v1.php index 515ebdd153..0074215c47 100644 --- a/lib/zin/wg/navbar/v1.php +++ b/lib/zin/wg/navbar/v1.php @@ -19,14 +19,14 @@ class navbar extends wg $object = $app->dbh->query('SELECT project,type FROM ' . TABLE_EXECUTION . " WHERE `id` = '$executionID'")->fetch(); if(empty($object)) return; - $executionPairs = array(); - $userCondition = !$app->user->admin ? " AND `id` " . helper::dbIN($app->user->view->sprints) : ''; - $orderBy = $object->type == 'stage' ? 'ORDER BY `id` ASC' : 'ORDER BY `id` DESC'; - $executionList = $app->dbh->query("SELECT id,name,parent FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll(); + $executionPairs = array(); + $userCondition = !$app->user->admin ? " AND `id` " . helper::dbIN($app->user->view->sprints) : ''; + $orderBy = $object->type == 'stage' ? 'ORDER BY `id` ASC' : 'ORDER BY `id` DESC'; + $executionList = $app->dbh->query("SELECT id,name,parent FROM " . TABLE_EXECUTION . " WHERE `project` = '{$object->project}' AND `deleted` = '0' $userCondition $orderBy")->fetchAll(); + $parentExecutions = array_flip(array_column($executionList, 'parent')); foreach($executionList as $execution) { - if(isset($executionPairs[$execution->parent])) unset($executionPairs[$execution->parent]); - if($execution->id == $executionID) continue; + if($execution->id == $executionID || isset($parentExecutions[$execution->id])) continue; $executionPairs[$execution->id] = $execution->name; } diff --git a/module/backup/control.php b/module/backup/control.php index 2d51eae0ae..ebb4ee9473 100644 --- a/module/backup/control.php +++ b/module/backup/control.php @@ -86,7 +86,7 @@ class backup extends control /** * Backup. * - * param string $reload yes|no + * @param string $reload yes|no * @access public * @return void */ @@ -306,6 +306,7 @@ class backup extends control if($attachFileName) { $log = $this->backup->getBackupDirProgress($attachFileName); + if(empty($log)) return print(''); $message = sprintf($this->lang->backup->progressAttach, zget($log, 'allCount', 0), zget($log, 'count', 0)); } @@ -313,6 +314,7 @@ class backup extends control if($codeFileName) { $log = $this->backup->getBackupDirProgress($codeFileName); + if(empty($log)) return print(''); $message = sprintf($this->lang->backup->progressCode, zget($log, 'allCount', 0), zget($log, 'count', 0)); } diff --git a/module/backup/js/index.ui.js b/module/backup/js/index.ui.js index 838b09e51e..2328cd3281 100644 --- a/module/backup/js/index.ui.js +++ b/module/backup/js/index.ui.js @@ -44,13 +44,13 @@ function backupData() { clearInterval(timeID); $('#message').append(data); - setTimeout(function(){return location.href = $.createLink('backup', 'index');}, 2000); + setTimeout(function(){return loadPage($.createLink('backup', 'index'));}, 2000); }, error: function(request, textstatus, error) { clearInterval(timeID); if(textstatus == 'timeout') $('#message').append("

" + backupTimeout + '

'); - setTimeout(function(){return location.href = $.createLink('backup', 'index');}, 2000); + setTimeout(function(){return loadPage($.createLink('backup', 'index'));}, 2000); } }); @@ -62,6 +62,7 @@ function backupData() { $.get($.createLink('backup', 'ajaxGetProgress'), function(data) { + if(data == '') return; $('#message').html(data); }); }, 1000); diff --git a/module/backup/model.php b/module/backup/model.php index 852d7f89be..f700a4386a 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -193,17 +193,18 @@ class backupModel extends model { $die = "\n"; $tmpFile = $fileName . '.tmp'; + rename($fileName, $tmpFile); - file_put_contents($tmpFile, $die); - $fh = fopen($fileName, 'r'); + file_put_contents($fileName, $die); + $fh = fopen($tmpFile, 'r'); $length = 2 * 1024 * 1024; while(!feof($fh)) { $buff = fread($fh, $length); - file_put_contents($tmpFile, $buff, FILE_APPEND); + file_put_contents($fileName, $buff, FILE_APPEND); } fclose($fh); - rename($tmpFile, $fileName); + unlink($tmpFile); return true; } @@ -331,7 +332,7 @@ class backupModel extends model $log = json_decode(file_get_contents($tmpLogFile), true); return empty($log) ? array() : $log; } - return array(); + return array('allCount' => 0, 'count' => 0); } /** @@ -401,7 +402,7 @@ class backupModel extends model /** * Get disk space. * - * @param int $backupPath + * @param string $backupPath * @access public * @return string */ diff --git a/module/backup/zen.php b/module/backup/zen.php index bf12057cae..3aaca6baaa 100644 --- a/module/backup/zen.php +++ b/module/backup/zen.php @@ -51,6 +51,7 @@ class backupZen extends backup * backupSQL * * @param string $fileName + * @param string $reload * @access protected * @return array */ @@ -83,6 +84,7 @@ class backupZen extends backup * Backup appendix file. * * @param string $fileName + * @param string $reload * @access protected * @return array */ @@ -110,6 +112,7 @@ class backupZen extends backup * Backup code * * @param string $fileName + * @param string $reload * @access protected * @return array */ diff --git a/module/block/config.php b/module/block/config.php index a1f3a108e8..aa4e89f462 100644 --- a/module/block/config.php +++ b/module/block/config.php @@ -296,7 +296,7 @@ $config->block->size['product']['releasestatistic'] = array(1 => 8, 2 => 5); $config->block->size['project']['overview'] = array(1 => 3); $config->block->size['project']['statistic'] = array(2 => 5, 1 => 8); -$config->block->size['project']['recentproject'] = array(2 => 4, 1 => 9); +$config->block->size['project']['recentproject'] = array(2 => 4, 1 => 10); $config->block->size['project']['project'] = array(2 => 6, 1 => 6); $config->block->size['scrumproject']['scrumoverview'] = array(2 => 5, 1 => 8); diff --git a/module/block/config/feedback.php b/module/block/config/feedback.php index dc764424c2..69497b3b71 100644 --- a/module/block/config/feedback.php +++ b/module/block/config/feedback.php @@ -8,7 +8,7 @@ if(in_array($config->edition, array('max', 'biz', 'ipd'))) $config->block->feedback->dtable = new stdclass(); $config->block->feedback->dtable->fieldList = array(); $config->block->feedback->dtable->fieldList['id'] = array('name' => 'id', 'title' => $lang->idAB, 'type' => 'id' , 'sort' => 'number'); - $config->block->feedback->dtable->fieldList['title'] = array('name' => 'title', 'title' => $lang->feedback->title, 'type' => 'title', 'sort' => true, 'flex' => 1, 'link' => array('module' => 'feedback', 'method' => 'adminView', 'params' => 'feedbackID={id}')); + $config->block->feedback->dtable->fieldList['title'] = array('name' => 'title', 'title' => $lang->feedback->title, 'type' => 'title', 'sort' => true, 'flex' => 1, 'link' => array('module' => 'feedback', 'method' => $config->vision == 'lite' ? 'view' : 'adminView', 'params' => 'feedbackID={id}')); $config->block->feedback->dtable->fieldList['product'] = array('name' => 'product', 'title' => $lang->feedback->product, 'type' => 'category', 'sort' => true); $config->block->feedback->dtable->fieldList['pri'] = array('name' => 'pri', 'title' => $lang->feedback->pri, 'type' => 'pri', 'sort' => true); $config->block->feedback->dtable->fieldList['status'] = array('name' => 'status', 'title' => $lang->feedback->status, 'type' => 'status', 'sort' => true, 'statusMap' => $lang->feedback->statusList); diff --git a/module/block/ui/assigntomeblock.html.php b/module/block/ui/assigntomeblock.html.php index 20412dd0aa..a99803e568 100644 --- a/module/block/ui/assigntomeblock.html.php +++ b/module/block/ui/assigntomeblock.html.php @@ -147,6 +147,7 @@ blockPanel div($contents), h::css ( + '.block-assigntome .panel-heading .panel-title {overflow: hidden; text-overflow: clip; white-space: nowrap; width : 40%}', '.block-assigntome .nav > .nav-item > a {padding: 0 16px; border-radius: 4px; height: 28px; color: var(--color-gray-700)}', '.block-assigntome .nav > .nav-item > a.active {font-weight: bold; color: var(--color-gray-900); background: var(--color-primary-50)}' ) diff --git a/module/block/ui/recentprojectblock.html.php b/module/block/ui/recentprojectblock.html.php index 41c25f4999..d6c9ea46cb 100644 --- a/module/block/ui/recentprojectblock.html.php +++ b/module/block/ui/recentprojectblock.html.php @@ -19,14 +19,14 @@ foreach($projects as $projectID => $project) $cards[] = cell ( - setClass('p-2', $longBlock ? 'w-1/3' : 'w-full h-40'), + setClass('p-2', $longBlock ? 'w-1/3' : 'w-full h-50'), div ( - setClass('border rounded-sm h-full px-4 hover:shadow hover:border-primary cursor-pointer open-url group', $longBlock ? 'py-4' : 'py-2'), + setClass('border rounded-sm h-full px-4 hover:shadow hover:border-primary cursor-pointer open-url group', $longBlock ? 'py-3' : 'py-2'), setData('url', $viewLink), div ( - setClass('mb-4'), + setClass('mb-2'), a ( setClass('font-bold text-fore text-md group-hover:text-primary'), @@ -55,9 +55,9 @@ foreach($projects as $projectID => $project) ), $project->end == LONG_TIME ? $lang->program->longTime : $project->end ), - ($project->multiple && $execution) ? array + div ( - div + $project->multiple && $execution ? div ( span ( @@ -74,8 +74,21 @@ foreach($projects as $projectID => $project) setClass('label warning-pale circle ml-2'), $lang->execution->statusList[$execution->status] ) - ), - ) : null + ) : div(setClass('h-5')) + ), + div + ( + setClass('flex items-center'), + span(setClass('num mr-1'), $project->progress . '%'), + progressBar + ( + setClass('progress flex-auto'), + set::height(8), + set::percent($project->progress), + set::color('var(--color-primary-300)'), + set::background('rgba(0,0,0,0.02)') + ) + ) ) ) ); diff --git a/module/block/zen.php b/module/block/zen.php index 31d51f36cc..5de5b44482 100644 --- a/module/block/zen.php +++ b/module/block/zen.php @@ -435,7 +435,7 @@ class blockZen extends block /* 获取昨日解决的Bug数。 */ $fixBug = 0; $fixBugGroup = $this->metric->getResultByCode('count_of_daily_fixed_bug_in_user', array('user' => $this->app->user->account, 'year' => date('Y', $yesterday), 'month' => date('m', $yesterday), 'day' => date('d', $yesterday))); - if(!empty($fixBug)) + if(!empty($fixBugGroup)) { $fixBugGroup = reset($fixBugGroup); $fixBug = zget($fixBugGroup, 'value', 0); @@ -469,27 +469,12 @@ class blockZen extends block $assignedGroup = reset($assignedGroup); $count = zget($assignedGroup, 'value', 0); } - $assignToMe[$field] = array('number' => $count, 'href' => helper::createLink('my', 'work', "mode=$field&type=$type")); + $assignToMe[$field] = array('number' => $count, 'href' => common::hasPriv('my', 'work') ? helper::createLink('my', 'work', "mode=$field&type=$type") : ''); } /* 生成待我审批的数据。 */ - $reviewByMe['reviewByMe']['number'] = 0; - $reviewByMe['reviewByMe']['href'] = helper::createLink('my', 'audit'); - foreach($this->lang->block->welcome->reviewList as $field => $label) - { - /* 根据不同的模块生成不同的度量项查询码。 */ - $code = "reviewing_{$field}"; - - /* 查询当前指派给当前用户的不同数据。 */ - $reviewingGroup = $this->metric->getResultByCode("count_of_{$code}_in_user", array('user' => $this->app->user->account)); - $count = 0; - if(!empty($reviewingGroup)) - { - $reviewingGroup = reset($reviewingGroup); - $count = zget($reviewingGroup, 'value', 0); - } - $reviewByMe['reviewByMe']['number'] += $count; - } + $reviewList = $this->loadModel('my')->getReviewingList('all'); + $reviewByMe['reviewByMe'] = array('number' => count($reviewList), 'href' => common::hasPriv('my', 'audit') ? helper::createLink('my', 'audit') : ''); $this->view->todaySummary = date(DT_DATE3, time()) . ' ' . $this->lang->datepicker->dayNames[date('w', time())]; // 当前年月日 星期几。 $this->view->welcomeType = $welcomeType; diff --git a/module/common/model.php b/module/common/model.php index 536b42e315..a737375d8a 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -947,7 +947,7 @@ class commonModel extends model } else { - if(strpos($sql, ' ORDER BY') !== false) $queryCondition = substr($sql, 0, strpos($sql, ' ORDER BY ')); + $queryCondition = strpos($sql, ' ORDER BY') !== false ? substr($sql, 0, strpos($sql, ' ORDER BY ')) : $sql; } $queryCondition = trim($queryCondition); if(empty($queryCondition)) $queryCondition = "1=1"; diff --git a/module/execution/js/kanban.ui.js b/module/execution/js/kanban.ui.js index b9a8de867b..c14e67bc88 100644 --- a/module/execution/js/kanban.ui.js +++ b/module/execution/js/kanban.ui.js @@ -193,6 +193,7 @@ window.getItem = function(info) info.item.title = info.item.title.replaceAll(searchValue, "" + searchValue + ""); info.item.title = {html: info.item.title}; } + info.item.titleAttrs = {'class': 'card-title clip'}; } window.renderAvatar = function(item) diff --git a/module/execution/js/taskkanban.ui.js b/module/execution/js/taskkanban.ui.js index 3f64df38e1..57ff3c958b 100644 --- a/module/execution/js/taskkanban.ui.js +++ b/module/execution/js/taskkanban.ui.js @@ -238,6 +238,7 @@ window.getItem = function(info) info.item.content = {html: content}; if(info.item.color && info.item.color != '#fff') info.item.className = 'color-' + info.item.color.replace('#', ''); + info.item.titleAttrs = {'class': 'card-title clip'}; } window.getItemActions = function(item) diff --git a/module/file/model.php b/module/file/model.php index c3fadb20fc..c1843d3a40 100755 --- a/module/file/model.php +++ b/module/file/model.php @@ -1109,7 +1109,7 @@ class fileModel extends model $objectType = zget($this->config->file->objectType, $file->objectType); - $html .= "
  • " . html::a($downloadLink, $fileTitle . " ({$fileSize})", '_blank', "id='fileTitle$file->id' onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\""); + $html .= "
  • " . html::a($downloadLink, $fileTitle . " ({$fileSize})", '_blank', "id='fileTitle$file->id'"); if(strpos('view,edit', $method) !== false) { if(common::hasPriv($objectType, 'view', $object)) $html = $this->buildFileActions($html, $downloadLink, $imageWidth, $showEdit, $showDelete, $file, $object); diff --git a/module/index/js/ajaxiframemodal.ui.js b/module/index/js/ajaxiframemodal.ui.js index 9daae8413e..cb84dd3e36 100644 --- a/module/index/js/ajaxiframemodal.ui.js +++ b/module/index/js/ajaxiframemodal.ui.js @@ -32,7 +32,7 @@ $(function() function resizeModal() { - const $modal = $('body>.modal-dialog>.modal-content>.modal-body,.modal-body').first(); + const $modal = $('body>.modal-dialog>.modal-content,.modal-body').first(); const height = $modal.outerHeight(); $modal.closest('body').height(height); } diff --git a/module/kanban/js/view.ui.js b/module/kanban/js/view.ui.js index 59c1ea6ec1..eec4ed1cdd 100644 --- a/module/kanban/js/view.ui.js +++ b/module/kanban/js/view.ui.js @@ -182,6 +182,8 @@ window.getItem = function(info) renderGeneralItem(info); } if(info.item.color && info.item.color != '#fff') info.item.className = 'color-' + info.item.color.replace('#', ''); + + info.item.titleAttrs = {'class': 'card-title clip'}; } window.renderGeneralItem = function(info) @@ -283,11 +285,11 @@ window.renderProductplanItem = function(info) if(info.item.deleted == '0') { - statusBox = '' + executionLang.statusList[info.item.objectStatus] + ''; + statusBox = '' + productplanLang.statusList[info.item.objectStatus] + ''; } else { - statusBox = '' + executionLang.deleted + ''; + statusBox = '' + productplanLang.deleted + ''; } const today = zui.formatDate(new Date(), 'yyyy-MM-dd'); @@ -295,7 +297,7 @@ window.renderProductplanItem = function(info) const date = '' + info.item.begin.slice(5) + ' ' + productplanLang.to + ' ' + info.item.end.slice(5) + ''; info.item.content = {html: info.item.desc} - info.item.contentClass = 'text-gray'; + info.item.contentClass = 'text-gray clip mr-2'; info.item.footer = {html: statusBox + date} } window.renderTicketItem = function(info) diff --git a/module/misc/js/downloadclient.ui.js b/module/misc/js/downloadclient.ui.js index c662020d16..8ab8f1b0af 100644 --- a/module/misc/js/downloadclient.ui.js +++ b/module/misc/js/downloadclient.ui.js @@ -66,3 +66,5 @@ window.showPackageSize = () => } }); }; + +if(!$('#downloadClient input#os:not(.hidden)').length && !$('#downloadClient button.primary').length) getClient(); diff --git a/module/mr/ui/browsebyexecution.html.php b/module/mr/ui/browsebyexecution.html.php index fa4a9b080b..359fbee84f 100644 --- a/module/mr/ui/browsebyexecution.html.php +++ b/module/mr/ui/browsebyexecution.html.php @@ -10,10 +10,7 @@ declare(strict_types=1); */ namespace zin; -dropmenu -( - set::url(createLink('execution', 'ajaxGetDropMenu', "objectID=$objectID&module={$app->rawModule}&method={$app->rawMethod}")) -); +dropmenu(set::url(createLink('execution', 'ajaxGetDropMenu', "objectID=$objectID&module={$app->rawModule}&method={$app->rawMethod}"))); foreach($MRList as $index => $MR) { @@ -78,36 +75,11 @@ if(empty($repoID)) } $MRs = initTableData($MRList, $config->mr->dtable->fieldList, $this->mr); -$repoData = array(array( - 'text' => $lang->mr->statusList['all'], - 'data-app' => $app->tab, - 'url' => createLink('mr', 'browse', "repoID=0&mode={$mode}¶m={$param}&objectID={$objectID}"), - 'active' => !$repoID -)); -foreach($repoList as $repo) -{ - if(!in_array($repo->SCM, $this->config->repo->gitServiceTypeList)) continue; - - $repoData[] = array( - 'text' => $repo->name, - 'data-app' => $app->tab, - 'url' => createLink('mr', 'browse', "repoID={$repo->id}&mode={$mode}¶m={$param}&objectID={$objectID}"), - 'active' => $repo->id == $repoID - ); -} featureBar ( set::current($mode != 'status' ? $mode : $param), - set::linkParams("repoID={$repoID}&mode=status¶m={key}&objectID={$objectID}"), - count($repoPairs) > 1 ? to::leading( - dropdown - ( - btn(setClass('ghost'), zget($repoPairs, $repoID, $lang->mr->statusList['all'])), - set::items($repoData), - set::placement('bottom-end') - ) - ) : null + set::linkParams("repoID={$repoID}&mode=status¶m={key}&objectID={$objectID}") ); toolBar diff --git a/module/mr/ui/view.html.php b/module/mr/ui/view.html.php index 69e2148f53..aaad8e87a0 100644 --- a/module/mr/ui/view.html.php +++ b/module/mr/ui/view.html.php @@ -294,7 +294,7 @@ panel div ( - setClass('flex justify-center items-center pt-6'), + setClass('detail-actions center sticky mt-4 bottom-4 z-10'), floatToolbar ( set::object($MR), diff --git a/module/my/css/managecontacts.ui.css b/module/my/css/managecontacts.ui.css index 0b6455e1bf..61e143f619 100644 --- a/module/my/css/managecontacts.ui.css +++ b/module/my/css/managecontacts.ui.css @@ -1,9 +1,6 @@ -#mainContent .tab-pane li {height: 2rem; line-height: 2rem; cursor: pointer;} -#mainContent .tab-pane li.active {background-color: var(--color-gray-100);} -#mainContent .tab-pane li {color: rgba(var(--color-black-rgb),var(--tw-text-opacity));} -#mainContent .tab-pane li.active {font-weight: 600; color: rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));} -#mainContent .tab-pane li:hover {color: rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));} -#manageContacts .tabs > .nav-tabs {margin-top: 1rem;} +#contactTab .listitem {color: inherit} +#contactTab .listitem.selected {color: var(--color-primary-500); font-weight: bold;} + #contactPanel .form-row .form-group {padding-left: 70px;} #contactPanel .form-row .form-group .form-label {padding-left: 0; justify-content: start; width: 80px;} #contactPanel .form-actions {margin-top: 0;} diff --git a/module/my/js/managecontacts.ui.js b/module/my/js/managecontacts.ui.js deleted file mode 100644 index b33dfa63d9..0000000000 --- a/module/my/js/managecontacts.ui.js +++ /dev/null @@ -1,15 +0,0 @@ -function createContact() -{ - $('#contactTab').find('.contact').removeClass('active'); - const url = $.createLink('my', 'manageContacts'); - loadPage(url, '#contactPanel'); -} - -function getContact(event) -{ - $('#contactTab').find('.contact').removeClass('active'); - const $li = $(event.target).addClass('active'); - const listID = $li.data('id'); - const url = $.createLink('my', 'manageContacts', 'listID=' + listID); - loadPage(url, '#contactPanel'); -} diff --git a/module/my/ui/managecontacts.html.php b/module/my/ui/managecontacts.html.php index cf35257ec9..84b7c22b65 100644 --- a/module/my/ui/managecontacts.html.php +++ b/module/my/ui/managecontacts.html.php @@ -12,27 +12,20 @@ namespace zin; $listID = isset($list->id) ? $list->id : 0; -$myContactList = array(); -$publicContactList = array(); +$myContactList = array(); +$publicContactList = array(); +$isActivePublicList = false; foreach($lists as $contactList) { + $selected = $listID == $contactList->id; if($contactList->account == $app->user->account) { - $myContactList[] = li - ( - setClass('contact ellipsis pl-2 ' . ($listID == $contactList->id ? 'active' : '')), - set('data-id', $contactList->id), - $contactList->listName - ); + $myContactList[] = array('text' => $contactList->listName, 'url' => createLink('my', 'manageContacts', "listID=$contactList->id"), 'selected' => $selected); } else if($contactList->public) { - $publicContactList[] = li - ( - setClass('contact ellipsis pl-2'), - set('data-id', $contactList->id), - $contactList->listName - ); + $publicContactList[] = array('text' => $contactList->listName, 'url' => createLink('my', 'manageContacts', "listID=$contactList->id"), 'selected' => $selected); + if($selected) $isActivePublicList = true; } } @@ -42,63 +35,49 @@ if(!empty($list->userList)) foreach(explode(',', $list->userList) as $account) $userList[] = zget($users, $account); } -panel +div ( - set::shadow(false), - setClass('panel-form px-4 mx-auto size-lg'), - on::click('#createContact', 'createContact'), - on::click('.contact', 'getContact'), + setClass('canvas shadow ring rounded mx-auto'), + style::maxWidth(1200), div ( setID('manageContacts'), - setClass('w-full flex'), + setClass('row'), cell ( - set::width('180px'), - setClass('border-r overflow-hidden'), - div + setClass('col flex-none p-4 gap-3 w-48 items-stretch'), + div(setClass('text-gray'), $lang->my->contactList), + btn ( - setClass('border-b py-3 pr-4'), - div(span(setClass('text-gray'), $lang->my->contactList)), - div - ( - setClass('pt-3'), - a - ( - setID('createContact'), - setClass('btn primary-pale bd-primary w-full'), - icon('plus'), - $lang->my->createContacts - ) - ) + set::type('primary-pale'), + set::icon('plus'), + set::url('my', 'manageContacts'), + setData('load', '#contactPanel'), + setClass('w-full'), + $lang->my->createContacts ), tabs ( setID('contactTab'), - setClass('pr-4'), tabPane ( - set::key('my'), set::title($lang->my->myContact), - set::active(true), - ul - ( - setClass('pl-0'), - $myContactList - ) + set::active(!$isActivePublicList), + simpleList(set::items($myContactList)), ), tabPane ( - set::key('public'), set::title($lang->my->publicContact), - ul($publicContactList) + set::active($isActivePublicList), + simpleList(set::items($publicContactList)), ) ) ), + divider(), cell ( setID('contactPanel'), - setClass('flex-1 px-8'), + setClass('flex-1 px-8 pb-8'), div ( set('class', 'panel-title text-lg flex w-full py-6'), @@ -120,6 +99,7 @@ panel ($mode == 'create' || $mode == 'edit') ? form ( set::actions(array()), + $listID ? null : on::init()->removeClass('#contactTab .selected', 'selected'), formRow ( formGroup @@ -196,5 +176,3 @@ panel ) ) ); - -render(); diff --git a/module/pivot/ui/preview.html.php b/module/pivot/ui/preview.html.php index ff3b5dd6fb..0ff819927c 100644 --- a/module/pivot/ui/preview.html.php +++ b/module/pivot/ui/preview.html.php @@ -79,7 +79,7 @@ sidebar $this->config->edition == 'open' ? div ( set::width(240), - setClass('bg-canvas px-4 py-2 module-menu shadow'), + setClass('bg-canvas px-4 py-2 module-menu'), html(empty($config->isINT) ? $lang->bizVersion : $lang->bizVersionINT) ) : null ) diff --git a/module/pivot/zen.php b/module/pivot/zen.php index 29f4ee4ee4..50f45a6930 100644 --- a/module/pivot/zen.php +++ b/module/pivot/zen.php @@ -67,10 +67,9 @@ class pivotZen extends pivot if($this->config->edition == 'open' && $group->grade == 1) continue; $pivots = $this->pivot->getAllPivotByGroupID($group->id); - if(empty($group->collector) && empty($pivots)) continue; - $menus[] = (object)array('id' => $group->id, 'parent' => 0, 'name' => $group->name); + if($group->grade > 1) $menus[] = (object)array('id' => $group->id, 'parent' => 0, 'name' => $group->name); if($pivots) $pivots = $this->pivot->processPivot($pivots, false); diff --git a/module/product/control.php b/module/product/control.php index e4003fe50d..b57b2bd9b2 100755 --- a/module/product/control.php +++ b/module/product/control.php @@ -663,7 +663,7 @@ class product extends control } $this->view->title = $this->lang->product->manageLine; - $this->view->programs = $this->loadModel('program')->getTopPairs('withDeleted'); + $this->view->programs = array(0 => $this->lang->null) + $this->loadModel('program')->getTopPairs('withDeleted'); $this->view->lines = $this->product->getLines(); $this->view->fields = $this->config->product->form->manageLine; $this->display(); @@ -1002,7 +1002,7 @@ class product extends control public function ajaxGetLine(int $programID, int $productID = 0) { $lines = array(); - if(empty($productID) or $programID) $lines = $this->product->getLinePairs($programID); + if(empty($productID) || $programID) $lines = $this->product->getLinePairs($programID, true); $items = array(); foreach($lines as $lineID => $lineName) $items[] = array('text' => $lineName, 'value' => $lineID); diff --git a/module/product/tao.php b/module/product/tao.php index 31593f36f0..60014545ad 100644 --- a/module/product/tao.php +++ b/module/product/tao.php @@ -325,7 +325,7 @@ class productTao extends productModel */ protected function createLine(int $programID, string $lineName): int|false { - if($programID <= 0) return false; + if($programID < 0) return false; if(empty($lineName)) return false; $line = new stdClass(); diff --git a/module/product/ui/browse.html.php b/module/product/ui/browse.html.php index 071b4c02e8..ed86e6fd99 100644 --- a/module/product/ui/browse.html.php +++ b/module/product/ui/browse.html.php @@ -172,8 +172,8 @@ $fnBuildLinkStoryButton = function() use($lang, $app, $product, $projectHasProdu ); } - if($canLinkStory && !$canlinkPlanStory) return item(set($linkItem + array('class' => 'btn primary link-story-btn', 'icon' => 'plus'))); - if($canlinkPlanStory && !$canLinkStory) return item(set($linkPlanItem + array('class' => 'btn primary', 'icon' => 'plus'))); + if($canLinkStory && !$canlinkPlanStory) return item(set($linkItem + array('class' => 'btn primary link-story-btn', 'icon' => 'link'))); + if($canlinkPlanStory && !$canLinkStory) return item(set($linkPlanItem + array('class' => 'btn primary', 'icon' => 'link'))); }; /* DataTable columns. */ diff --git a/module/product/ui/manageline.html.php b/module/product/ui/manageline.html.php index 6b9636ffe5..57c9dd8991 100644 --- a/module/product/ui/manageline.html.php +++ b/module/product/ui/manageline.html.php @@ -74,7 +74,7 @@ foreach($lines as $line) ( set::width('1/2'), set::className('ml-4'), - set::control(array('control' => 'picker', 'id' => "programs_id{$line->id}")), + set::control(array('control' => 'picker', 'id' => "programs_id{$line->id}", 'required' => true)), set::name("programs[id$line->id]"), set::items($programs), set::value($line->root), @@ -103,9 +103,10 @@ for($i = 0; $i <= 5; $i ++) ( set::width('1/2'), set::className('ml-4'), - set::control(array('control' => 'picker', 'id' => "programs_{$i}")), + set::control(array('control' => 'picker', 'id' => "programs_{$i}", 'required'=> true)), set::name("programs[$i]"), - set::items($programs) + set::items($programs), + set::value('0') ) : null ), cell diff --git a/module/product/zen.php b/module/product/zen.php index 7b3f8dd45e..67feb26433 100644 --- a/module/product/zen.php +++ b/module/product/zen.php @@ -639,11 +639,6 @@ class productZen extends product foreach($data->modules as $id => $name) { if(empty($name)) continue; - if(in_array($this->config->systemMode, array('ALM', 'PLM')) and empty($data->programs[$id])) - { - dao::$errors["programs[{$id}]"] = $this->lang->product->programEmpty; - return false; - } $programID = $data->programs[$id]; if(!isset($lines[$programID])) $lines[$programID] = array(); diff --git a/module/productplan/js/browse.ui.js b/module/productplan/js/browse.ui.js index 39df679684..81b7aa4327 100644 --- a/module/productplan/js/browse.ui.js +++ b/module/productplan/js/browse.ui.js @@ -235,7 +235,7 @@ window.getCol = function(col) window.getItem = function(info) { - if(info.item.delay) + if(info.item.delay && ['wait', 'doing'].includes(info.item.status)) { info.item.suffix = productplanLang.expired; info.item.suffixClass = 'label danger rounded-xl' + (info.item.status == 'doing' ? ' mr-8' : ''); diff --git a/module/project/model.php b/module/project/model.php index b1be0138df..71810dd36a 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -222,8 +222,8 @@ class projectModel extends model $this->app->loadClass('pager', true); foreach($projects as $projectID => $project) { - $orderBy = $project->model == 'waterfall' ? 'id_asc' : 'id_desc'; - $pager = $project->model == 'waterfall' ? null : new pager(0, 1, 1); + $orderBy = in_array($project->model, array('waterfall', 'ipd')) ? 'id_asc' : 'id_desc'; + $pager = in_array($project->model, array('waterfall', 'ipd')) ? null : new pager(0, 1, 1); $project->executions = $this->loadModel('execution')->getStatData($projectID, 'undone', 0, 0, false, '', $orderBy, $pager); $project->teamCount = isset($teamCount[$projectID]) ? $teamCount[$projectID] : 0; $project->estimate = isset($estimates[$projectID]) ? round($estimates[$projectID]->estimate, 2) : 0; @@ -925,10 +925,11 @@ class projectModel extends model * @param string $model all|scrum|waterfall|kanban * @param string $param noclosed * @param int $projectID + * @param bool $pairs * @access public * @return array array(projectID => projectName, ...) */ - public function getPairsByModel(string $model = 'all', string $param = '', int $projectID = 0): array + public function getPairsByModel(string $model = 'all', string $param = '', int $projectID = 0, bool $pairs = true): array { if(commonModel::isTutorialMode()) return $this->loadModel('tutorial')->getProjectPairs(); @@ -972,7 +973,7 @@ class projectModel extends model $projectPairs = array(); foreach($allProjects as $programID => $projects) { - foreach($projects as $project) $projectPairs[$project->id] = $project->name; + foreach($projects as $project) $projectPairs[$project->id] = $pairs ? $project->name : $project; } return $projectPairs; } diff --git a/module/project/ui/create.html.php b/module/project/ui/create.html.php index a4d2006456..94558f0b80 100644 --- a/module/project/ui/create.html.php +++ b/module/project/ui/create.html.php @@ -75,7 +75,7 @@ formGridPanel btn ( set::icon('copy'), - setClass('primary-ghost size-md'), + setClass('primary-ghost size-md copy-project-btn'), toggle::modal(array('target' => '#copyProjectModal', 'destoryOnHide' => true, 'size' => 'sm')), $lang->project->copy ), @@ -122,17 +122,17 @@ JS $copyProjectsBox = array(); if(!empty($copyProjects)) { - foreach($copyProjects as $id => $name) + foreach($copyProjects as $id => $project) { $copyProjectsBox[] = btn ( setClass('project-block justify-start'), setClass($copyProjectID == $id ? 'primary-outline' : ''), set('data-id', $id), - set('data-pinyin', zget($copyPinyinList, $name, '')), - icon(setClass('text-gray'), !empty($model) ? ($model == 'scrum' ? 'sprint' : $model) : $lang->icons['project']), + set('data-pinyin', zget($copyPinyinList, $project->name, '')), + icon(setClass('text-gray'), !empty($project->model) ? ($project->model == 'scrum' ? 'sprint' : $project->model) : $lang->icons['project']), on::click($toggleActiveProject), - span($name, set::title($name), setClass('text-left')) + span($project->name, set::title($project->name), setClass('text-left')) ); } } diff --git a/module/project/zen.php b/module/project/zen.php index 212294364d..10c2f7d205 100755 --- a/module/project/zen.php +++ b/module/project/zen.php @@ -316,6 +316,10 @@ class projectZen extends project } } + /* Get copy projects. */ + $copyProjects = $this->project->getPairsByModel($model, '', 0, false); + $copyProjectPairs = array_combine(array_keys($copyProjects), array_column($copyProjects, 'name')); + $this->view->title = $this->lang->project->create; $this->view->gobackLink = (isset($output['from']) && $output['from'] == 'global') ? $this->createLink('project', 'browse') : ''; $this->view->model = $model; @@ -326,8 +330,8 @@ class projectZen extends project $this->view->branchID = isset($output['branchID']) ? $output['branchID'] : 0; $this->view->allProducts = $allProducts; $this->view->multiBranchProducts = $this->product->getMultiBranchPairs((int)$topProgramID); - $this->view->copyProjects = $this->project->getPairsByModel($model); - $this->view->copyPinyinList = common::convert2Pinyin($this->view->copyProjects); + $this->view->copyProjects = $copyProjects; + $this->view->copyPinyinList = common::convert2Pinyin($copyProjectPairs); $this->view->copyProjectID = $copyProjectID; $this->view->parentProgram = $parentProgram; $this->view->programList = $this->program->getParentPairs(); diff --git a/module/repo/js/create.ui.js b/module/repo/js/create.ui.js index 0b8564e26c..98e991c358 100644 --- a/module/repo/js/create.ui.js +++ b/module/repo/js/create.ui.js @@ -128,6 +128,7 @@ function onScmChange() const $hostPicker = $('#serviceHost').zui('picker'); $hostPicker.render({items: data}); $hostPicker.$.clear(); + onHostChange(); }); } } diff --git a/module/screen/control.php b/module/screen/control.php index 372a4a3768..9279a3425a 100644 --- a/module/screen/control.php +++ b/module/screen/control.php @@ -26,7 +26,8 @@ class screen extends control */ public function browse(int $dimensionID = 0) { - $this->checkShowGuide(); + //$this->checkShowGuide(); + $this->view->showGuide = false; $dimensionID = $this->loadModel('dimension')->getDimension($dimensionID); diff --git a/module/story/model.php b/module/story/model.php index 36c9e20c38..4e3d81715b 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -3814,7 +3814,6 @@ class storyModel extends model $storyLang->legendLinkStories = str_replace($SRCommon, $URCommon, $storyLang->legendLinkStories); $storyLang->legendChildStories = str_replace($SRCommon, $URCommon, $storyLang->legendChildStories); $storyLang->legendSpec = str_replace($SRCommon, $URCommon, $storyLang->legendSpec); - $storyLang->unlinkStory = str_replace($SRCommon, $URCommon, $storyLang->unlinkStory); $storyLang->notice->closed = str_replace($SRCommon, $URCommon, $storyLang->notice->closed); $storyLang->notice->reviewerNotEmpty = str_replace($SRCommon, $URCommon, $storyLang->notice->reviewerNotEmpty); diff --git a/module/task/js/batchcreate.ui.js b/module/task/js/batchcreate.ui.js index d8f8c94a7c..06358a2505 100644 --- a/module/task/js/batchcreate.ui.js +++ b/module/task/js/batchcreate.ui.js @@ -54,7 +54,9 @@ function toggleZeroTaskStory() const $storyTd = $(this); $.getJSON(getStoryLink, function(stories) { - $storyTd.find('[name^=story]').zui('picker').render({items: stories}); + const $storyPicker = $storyTd.find('[name^=story]').zui('picker'); + $storyPicker.render({items: stories}); + $storyPicker.$.setValue(0); }); }); } @@ -87,7 +89,7 @@ function setStoryRelated(event) { const storyInfo = data['storyInfo']; - $module.zui('picker').$.setValue(parseInt(storyInfo.moduleID)); + $module.zui('picker').$.setValue(parseInt(storyInfo.moduleID), true); $storyEstimate.val(storyInfo.estimate); $storyPri.val(storyInfo.pri); $storyDesc.val(storyInfo.spec); diff --git a/module/tutorial/css/start.ui.css b/module/tutorial/css/start.ui.css index 31358686d8..c46a8d03a3 100644 --- a/module/tutorial/css/start.ui.css +++ b/module/tutorial/css/start.ui.css @@ -1,4 +1,5 @@ -#start {padding: 40px; text-align: center; color: #fff;} +#startModal {color: #fff;} +#start {padding: 40px; text-align: center;} .start-icon {position: relative; width: 140px; height: 140px; margin: 0 auto; line-height: 140px;} .start-icon .icon1{font-size: 140px; color: rgba(0,0,0,.1); text-shadow: 0 1px 7px rgb(0,0,0,.1); animation: -spin 15s linear infinite} .start-icon .icon2{font-size: 56px; position: absolute; top: 35px; left: 42px; color: #EBF2F9; z-index: 10; width: 70px; height: 70px; text-align: center; line-height: 70px; text-shadow: 0 1px 3px rgb(0,0,0,.15);} @@ -7,4 +8,4 @@ h1{font-size: 24px;} .btn-start-now{min-width: 120px; height: 42px;} .btn-lg{padding: 11px 16px; font-size: 14px; line-height: 18px; border-radius: 4px;} .btn-info{color: #2e7fff; background-color: #e6f0ff; border-color: transparent;} -.tutorial-start .modal-dialog .modal-content .modal-body {padding: 0; margin-top: 0;} +#startModal .modal-body {padding: 0; margin-top: 0;} diff --git a/module/tutorial/ui/start.html.php b/module/tutorial/ui/start.html.php index 1b000ab67b..8ca1aca59e 100644 --- a/module/tutorial/ui/start.html.php +++ b/module/tutorial/ui/start.html.php @@ -10,6 +10,8 @@ declare(strict_types=1); */ namespace zin; +setID('startModal'); + div ( setID('start'), diff --git a/www/js/zui3/zen-editor/index.esm.js b/www/js/zui3/zen-editor/index.esm.js index 3761589056..7f90d98498 100644 --- a/www/js/zui3/zen-editor/index.esm.js +++ b/www/js/zui3/zen-editor/index.esm.js @@ -1 +1 @@ -export{M as MonacoEditor,Z as ZenEditor}from"./p-38bd6d84.js";import"./p-1f29e0e0.js"; \ No newline at end of file +export{M as MonacoEditor,Z as ZenEditor}from"./p-898ed1c1.js";import"./p-b9d115dd.js"; \ No newline at end of file diff --git a/www/js/zui3/zen-editor/zen-editor.esm.js b/www/js/zui3/zen-editor/zen-editor.esm.js index 0862762793..293f2586cb 100644 --- a/www/js/zui3/zen-editor/zen-editor.esm.js +++ b/www/js/zui3/zen-editor/zen-editor.esm.js @@ -1 +1 @@ -import{p as e,b as o}from"./p-1f29e0e0.js";export{s as setNonce}from"./p-1f29e0e0.js";import"./p-49a055b9.js";(()=>{const o=import.meta.url,r={};return""!==o&&(r.resourcesUrl=new URL(".",o).href),e(r)})().then((e=>o([["p-a72657f3",[[65,"zen-editor",{name:[1],uploadUrl:[1,"upload-url"],placeholder:[1],fullscreenable:[4],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],bubbleMenu:[4,"bubble-menu"],locale:[1],css:[1],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],value:[1025],editor:[32],isFullscreen:[32],rendered:[32],setHTML:[64],getHTML:[64],getText:[64],focusEditor:[64],blurEditor:[64]},null,{css:["onCSSChange"]}],[1,"zen-editor-core",{name:[1],uploadUrl:[1,"upload-url"],placeholder:[1],initialContent:[1,"initial-content"],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],bubbleMenu:[4,"bubble-menu"],locale:[1],styles:[16],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],updateInputValue:[16],fullscreenable:[4],toggleFullscreen:[16],isFullscreen:[4,"is-fullscreen"],value:[1],editor:[32],forceUpdateCounter:[32],isMonaco:[32]},null,{locale:["onLocaleChanage"]}],[2,"zen-editor-bubble-menu",{menuProps:[16],editor:[16],disabled:[4],element:[32]}],[1,"zen-editor-menubar",{editor:[16],menubarMode:[2,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],forceUpdateCounter:[2,"force-update-counter"],states:[8],toggleMonaco:[16],toggleFullscreen:[16],styles:[16]}],[0,"monaco-editor",{options:[8],initialValue:[1,"initial-value"],tiptapEditor:[16],updateInputValue:[16],setFocus:[64],getValue:[64]},null,{options:["onOptionsChange"]}],[1,"zen-editor-content",{editor:[16],styles:[16]},[[2,"click","handleClick"]]],[0,"zen-editor-menu-item",{itemProps:[8,"item-props"],menubarMode:[2,"menubar-mode"],styles:[16]}]]],["p-5330989c",[[0,"zen-editor-floating-menu",{menuProps:[16],editor:[16],element:[32]}]]],["p-1e3048b8",[[0,"zen-editor-footer",{editor:[16],forceUpdateCounter:[2,"force-update-counter"],toggleFullscreen:[16],showCharCount:[4,"show-char-count"]}]]]],e))); \ No newline at end of file +import{p as e,b as o}from"./p-b9d115dd.js";export{s as setNonce}from"./p-b9d115dd.js";import{g as r}from"./p-90d6b5f8.js";(()=>{const o=import.meta.url,r={};return""!==o&&(r.resourcesUrl=new URL(".",o).href),e(r)})().then((async e=>(await r(),o([["p-5306bec1",[[65,"zen-editor",{name:[1],readonly:[1028],uploadUrl:[1,"upload-url"],placeholder:[1],fullscreenable:[4],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideUI:[4,"hide-ui"],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],bubbleMenu:[4,"bubble-menu"],preferHardBreak:[4,"prefer-hard-break"],locale:[1],css:[1],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],value:[1025],editor:[32],isFullscreen:[32],rendered:[32],setHTML:[64],insertHTML:[64],getHTML:[64],getText:[64],focusEditor:[64],blurEditor:[64],setReadonly:[64]},null,{css:["onCSSChange"]}],[1,"zen-editor-core",{name:[1],readonly:[4],uploadUrl:[1,"upload-url"],placeholder:[1],initialContent:[1,"initial-content"],resizable:[4],exposeEditor:[4,"expose-editor"],size:[1],hideUI:[4,"hide-ui"],hideMenubar:[4,"hide-menubar"],menubarMode:[1,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],bubbleMenu:[4,"bubble-menu"],preferHardBreak:[4,"prefer-hard-break"],locale:[1],styles:[16],collaborative:[4],hocuspocus:[1],docName:[1,"doc-name"],username:[1],userColor:[1,"user-color"],updateInputValue:[16],fullscreenable:[4],toggleFullscreen:[16],isFullscreen:[4,"is-fullscreen"],value:[1],editor:[32],forceUpdateCounter:[32],isMonaco:[32]},null,{locale:["onLocaleChanage"]}],[2,"zen-editor-bubble-menu",{menuProps:[16],editor:[16],disabled:[4],element:[32]}],[1,"zen-editor-menubar",{editor:[16],menubarMode:[2,"menubar-mode"],extraMenubarItems:[1,"extra-menubar-items"],forceUpdateCounter:[2,"force-update-counter"],states:[8],toggleMonaco:[16],toggleFullscreen:[16],styles:[16]}],[0,"monaco-editor",{options:[8],initialValue:[1,"initial-value"],tiptapEditor:[16],updateInputValue:[16],setFocus:[64],getValue:[64]},null,{options:["onOptionsChange"]}],[1,"zen-editor-content",{editor:[16],styles:[16]},[[2,"click","handleClick"]]],[0,"zen-editor-menu-item",{itemProps:[8,"item-props"],menubarMode:[2,"menubar-mode"],styles:[16]}]]],["p-de75d67e",[[0,"zen-editor-floating-menu",{menuProps:[16],editor:[16],element:[32]}]]],["p-cd71f736",[[0,"zen-editor-footer",{editor:[16],forceUpdateCounter:[2,"force-update-counter"],toggleFullscreen:[16],showCharCount:[4,"show-char-count"]}]]]],e)))); \ No newline at end of file diff --git a/www/js/zui3/zin.js b/www/js/zui3/zin.js index d39aceaf16..0be36c5d22 100644 --- a/www/js/zui3/zin.js +++ b/www/js/zui3/zin.js @@ -630,19 +630,20 @@ { $page = $('
    ') .append($('