From 593910ae68c4226b1d4430129854541a1b83d84a Mon Sep 17 00:00:00 2001 From: vidhyasagargm Date: Tue, 1 Apr 2025 20:09:54 +0200 Subject: [PATCH 1/4] Wiki-tree-editing-toggle-button --- controllers/OverviewController.php | 12 ++++ messages/de/base.php | 2 + .../functional/WikiTreeEditingButtonCest.php | 59 +++++++++++++++++++ views/overview/list-categories.php | 5 ++ widgets/PageListItemTitle.php | 6 +- 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 tests/codeception/functional/WikiTreeEditingButtonCest.php diff --git a/controllers/OverviewController.php b/controllers/OverviewController.php index 58917478..3b12d748 100644 --- a/controllers/OverviewController.php +++ b/controllers/OverviewController.php @@ -113,4 +113,16 @@ public function actionUpdateFoldingState(int $categoryId, int $state) { $this->updateFoldingState($categoryId, $state); } + + public function actionToggleWikiTreeEditing() + { + $module = Yii::$app->getModule('wiki'); + $user = Yii::$app->user->identity; + $editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled'); + + $newState = !$editingEnabled; + $module->settings->contentContainer($user)->set('wikiTreeEditingEnabled', $newState); + + return $this->redirect(Url::toOverview($this->contentContainer)); + } } diff --git a/messages/de/base.php b/messages/de/base.php index 009bf43c..a01025d7 100644 --- a/messages/de/base.php +++ b/messages/de/base.php @@ -85,4 +85,6 @@ 'last update {dateTime}' => 'letztes Update {dateTime}', 'show changes' => 'Änderungen anzeigen', '{userName} edited the Wiki page "{wikiPageTitle}".' => '{userName} hat die Wiki-Seite "{wikiPageTitle}" bearbeitet.', + 'Disable wiki tree editing' => 'Bearbeitung der Seitenhierachie deaktivieren', + 'Enable wiki tree editing' => 'Bearbeitung der Seitenhierachie aktivieren', ]; diff --git a/tests/codeception/functional/WikiTreeEditingButtonCest.php b/tests/codeception/functional/WikiTreeEditingButtonCest.php new file mode 100644 index 00000000..626de373 --- /dev/null +++ b/tests/codeception/functional/WikiTreeEditingButtonCest.php @@ -0,0 +1,59 @@ +wantTo('check if the wiki tree editing button toggles between enabled and disabled states at overview'); + $space = $I->loginBySpaceUserGroup(Space::USERGROUP_ADMIN); + $I->enableModule($space->guid, 'wiki'); + $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); + + $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); + + $I->see('Enable wiki tree editing'); + $I->dontSeeElement('.drag-icon'); + + $I->click('Enable wiki tree editing'); + $I->see('Disable wiki tree editing'); + $I->seeElement('.drag-icon'); + + $I->click('Disable wiki tree editing'); + $I->see('Enable wiki tree editing'); + $I->dontSeeElement('.drag-icon'); + } + + public function testEditingButtonVisibilityForMember(FunctionalTester $I) + { + $I->wantTo('Check if editing button is not visible for member'); + $space = $I->loginBySpaceUserGroup(Space::USERGROUP_MEMBER); + $I->enableModule($space->guid, 'wiki'); + $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); + + $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); + $I->dontSee('Enable wiki tree editing'); + $I->dontSee('Disable wiki tree editing'); + + } + + public function testEditingButtonVisibilityForModerator(FunctionalTester $I) + { + $I->wantTo('Check if editing button is visible for moderator'); + $space = $I->loginBySpaceUserGroup(Space::USERGROUP_MODERATOR); + $I->enableModule($space->guid, 'wiki'); + $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); + + $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); + $I->see('Enable wiki tree editing'); + } +} diff --git a/views/overview/list-categories.php b/views/overview/list-categories.php index cfb43355..bd2c8330 100644 --- a/views/overview/list-categories.php +++ b/views/overview/list-categories.php @@ -16,6 +16,7 @@ use humhub\modules\wiki\widgets\WikiContent; use humhub\modules\wiki\widgets\WikiSearchForm; use humhub\widgets\Button; +use humhub\modules\wiki\permissions\AdministerPages; /* @var $this View */ /* @var $contentContainer ContentContainerActiveRecord */ @@ -29,6 +30,9 @@ } $settings = new DefaultSettings(['contentContainer' => $contentContainer]); +$module = Yii::$app->getModule('wiki'); +$user = Yii::$app->user->identity; +$editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled', FALSE); ?>
@@ -38,6 +42,7 @@

module_label) ?>

$contentContainer, 'cssClass' => 'pull-left']) ?>
+ sm()->link(Url::current(['toggle-wiki-tree-editing']))->visible($contentContainer->can(AdministerPages::class))?> sm()->link(Url::toLastEdited($contentContainer))->cssClass(Helper::isEnterpriseTheme() ? 'hidden-lg' : '') ?> icon('fa-plus')->sm()->link(Url::toWikiCreate($contentContainer))->visible($canCreate) ?>
diff --git a/widgets/PageListItemTitle.php b/widgets/PageListItemTitle.php index de78f6dd..9a089501 100644 --- a/widgets/PageListItemTitle.php +++ b/widgets/PageListItemTitle.php @@ -89,6 +89,10 @@ public function run() } } + $module = Yii::$app->getModule('wiki'); + $user = Yii::$app->user->identity; + $editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled', FALSE); + return $this->render('pageListItemTitle', [ 'service' => $this->service, 'item' => $this->item, @@ -97,7 +101,7 @@ public function run() 'titleInfo' => $this->titleInfo, 'url' => $this->service->getWikiUrl($this->item), 'icon' => $this->icon ?? $icon, - 'showDrag' => $this->showDrag, + 'showDrag' => $this->showDrag and $editingEnabled, 'showAddPage' => $this->showAddPage, 'options' => $this->getOptions(), 'level' => $this->level, From a76683a250892073dcdc8c903f285c87d7622413 Mon Sep 17 00:00:00 2001 From: vidhyasagargm Date: Thu, 10 Apr 2025 14:20:19 +0200 Subject: [PATCH 2/4] Drag button visiblility on hover --- controllers/OverviewController.php | 12 ---- messages/de/base.php | 2 - resources/css/humhub.wiki.less | 12 ++-- resources/js/humhub.wiki.CategoryListView.js | 24 ++++++++ .../functional/WikiTreeEditingButtonCest.php | 59 ------------------- views/overview/list-categories.php | 5 -- widgets/PageListItemTitle.php | 6 +- 7 files changed, 32 insertions(+), 88 deletions(-) delete mode 100644 tests/codeception/functional/WikiTreeEditingButtonCest.php diff --git a/controllers/OverviewController.php b/controllers/OverviewController.php index 3b12d748..58917478 100644 --- a/controllers/OverviewController.php +++ b/controllers/OverviewController.php @@ -113,16 +113,4 @@ public function actionUpdateFoldingState(int $categoryId, int $state) { $this->updateFoldingState($categoryId, $state); } - - public function actionToggleWikiTreeEditing() - { - $module = Yii::$app->getModule('wiki'); - $user = Yii::$app->user->identity; - $editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled'); - - $newState = !$editingEnabled; - $module->settings->contentContainer($user)->set('wikiTreeEditingEnabled', $newState); - - return $this->redirect(Url::toOverview($this->contentContainer)); - } } diff --git a/messages/de/base.php b/messages/de/base.php index a01025d7..009bf43c 100644 --- a/messages/de/base.php +++ b/messages/de/base.php @@ -85,6 +85,4 @@ 'last update {dateTime}' => 'letztes Update {dateTime}', 'show changes' => 'Änderungen anzeigen', '{userName} edited the Wiki page "{wikiPageTitle}".' => '{userName} hat die Wiki-Seite "{wikiPageTitle}" bearbeitet.', - 'Disable wiki tree editing' => 'Bearbeitung der Seitenhierachie deaktivieren', - 'Enable wiki tree editing' => 'Bearbeitung der Seitenhierachie aktivieren', ]; diff --git a/resources/css/humhub.wiki.less b/resources/css/humhub.wiki.less index ca3f2a56..5fcd99d5 100644 --- a/resources/css/humhub.wiki.less +++ b/resources/css/humhub.wiki.less @@ -789,20 +789,22 @@ } .drag-icon { + opacity: 0; visibility: hidden; + transition: opacity 0.3s ease; color: @text-color-control; - + .fa { font-size: 11px; } - } - - .page-title:hover { - .drag-icon { + + &.visible { + opacity: 1; visibility: visible; cursor: move; } } + } // Sidebar is used on Enterprise themes diff --git a/resources/js/humhub.wiki.CategoryListView.js b/resources/js/humhub.wiki.CategoryListView.js index 74417c14..c3266a85 100644 --- a/resources/js/humhub.wiki.CategoryListView.js +++ b/resources/js/humhub.wiki.CategoryListView.js @@ -19,6 +19,7 @@ humhub.module('wiki.CategoryListView', function(module, require, $) { this.initFoldingSubpages(); this.initSorting(); this.initPageTitleLink(); + this.initDragButtonHoverDelay(); } CategoryListView.prototype.initFoldingSubpages = function() { @@ -266,5 +267,28 @@ humhub.module('wiki.CategoryListView', function(module, require, $) { }); }; + CategoryListView.prototype.initDragButtonHoverDelay = function() { + const HOVER_DELAY = 1000; + const dragClass = '.wiki-page-control.drag-icon'; + + this.$.find('.page-title').each(function () { + const $item = $(this); + const $dragBtn = $item.find(dragClass); + + let timer = null; + + $item.on('mouseenter', function () { + timer = setTimeout(() => { + $dragBtn.addClass('visible'); + }, HOVER_DELAY); + }); + + $item.on('mouseleave', function () { + clearTimeout(timer); + $dragBtn.removeClass('visible'); + }); + }); + }; + module.export = CategoryListView; }); diff --git a/tests/codeception/functional/WikiTreeEditingButtonCest.php b/tests/codeception/functional/WikiTreeEditingButtonCest.php deleted file mode 100644 index 626de373..00000000 --- a/tests/codeception/functional/WikiTreeEditingButtonCest.php +++ /dev/null @@ -1,59 +0,0 @@ -wantTo('check if the wiki tree editing button toggles between enabled and disabled states at overview'); - $space = $I->loginBySpaceUserGroup(Space::USERGROUP_ADMIN); - $I->enableModule($space->guid, 'wiki'); - $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); - - $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); - - $I->see('Enable wiki tree editing'); - $I->dontSeeElement('.drag-icon'); - - $I->click('Enable wiki tree editing'); - $I->see('Disable wiki tree editing'); - $I->seeElement('.drag-icon'); - - $I->click('Disable wiki tree editing'); - $I->see('Enable wiki tree editing'); - $I->dontSeeElement('.drag-icon'); - } - - public function testEditingButtonVisibilityForMember(FunctionalTester $I) - { - $I->wantTo('Check if editing button is not visible for member'); - $space = $I->loginBySpaceUserGroup(Space::USERGROUP_MEMBER); - $I->enableModule($space->guid, 'wiki'); - $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); - - $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); - $I->dontSee('Enable wiki tree editing'); - $I->dontSee('Disable wiki tree editing'); - - } - - public function testEditingButtonVisibilityForModerator(FunctionalTester $I) - { - $I->wantTo('Check if editing button is visible for moderator'); - $space = $I->loginBySpaceUserGroup(Space::USERGROUP_MODERATOR); - $I->enableModule($space->guid, 'wiki'); - $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); - - $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); - $I->see('Enable wiki tree editing'); - } -} diff --git a/views/overview/list-categories.php b/views/overview/list-categories.php index bd2c8330..cfb43355 100644 --- a/views/overview/list-categories.php +++ b/views/overview/list-categories.php @@ -16,7 +16,6 @@ use humhub\modules\wiki\widgets\WikiContent; use humhub\modules\wiki\widgets\WikiSearchForm; use humhub\widgets\Button; -use humhub\modules\wiki\permissions\AdministerPages; /* @var $this View */ /* @var $contentContainer ContentContainerActiveRecord */ @@ -30,9 +29,6 @@ } $settings = new DefaultSettings(['contentContainer' => $contentContainer]); -$module = Yii::$app->getModule('wiki'); -$user = Yii::$app->user->identity; -$editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled', FALSE); ?>
@@ -42,7 +38,6 @@

module_label) ?>

$contentContainer, 'cssClass' => 'pull-left']) ?>
- sm()->link(Url::current(['toggle-wiki-tree-editing']))->visible($contentContainer->can(AdministerPages::class))?> sm()->link(Url::toLastEdited($contentContainer))->cssClass(Helper::isEnterpriseTheme() ? 'hidden-lg' : '') ?> icon('fa-plus')->sm()->link(Url::toWikiCreate($contentContainer))->visible($canCreate) ?>
diff --git a/widgets/PageListItemTitle.php b/widgets/PageListItemTitle.php index 9a089501..de78f6dd 100644 --- a/widgets/PageListItemTitle.php +++ b/widgets/PageListItemTitle.php @@ -89,10 +89,6 @@ public function run() } } - $module = Yii::$app->getModule('wiki'); - $user = Yii::$app->user->identity; - $editingEnabled = $module->settings->contentContainer($user)->get('wikiTreeEditingEnabled', FALSE); - return $this->render('pageListItemTitle', [ 'service' => $this->service, 'item' => $this->item, @@ -101,7 +97,7 @@ public function run() 'titleInfo' => $this->titleInfo, 'url' => $this->service->getWikiUrl($this->item), 'icon' => $this->icon ?? $icon, - 'showDrag' => $this->showDrag and $editingEnabled, + 'showDrag' => $this->showDrag, 'showAddPage' => $this->showAddPage, 'options' => $this->getOptions(), 'level' => $this->level, From c1c8a6a0a1e7b31da0a94b9a362c461f33a40cf0 Mon Sep 17 00:00:00 2001 From: vidhyasagargm Date: Thu, 10 Apr 2025 14:25:04 +0200 Subject: [PATCH 3/4] Updated humhub.wiki.less --- resources/css/humhub.wiki.less | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/css/humhub.wiki.less b/resources/css/humhub.wiki.less index 5fcd99d5..f4de3ce5 100644 --- a/resources/css/humhub.wiki.less +++ b/resources/css/humhub.wiki.less @@ -793,7 +793,7 @@ visibility: hidden; transition: opacity 0.3s ease; color: @text-color-control; - + .fa { font-size: 11px; } @@ -804,7 +804,6 @@ cursor: move; } } - } // Sidebar is used on Enterprise themes From d55441bac7add2aa3589bd7472d41b32165b01e6 Mon Sep 17 00:00:00 2001 From: vidhyasagargm Date: Tue, 15 Apr 2025 13:18:46 +0200 Subject: [PATCH 4/4] Updated all min and bundle files --- resources/css/humhub.wiki.css | 5 +++- resources/css/humhub.wiki.min.css | 2 +- resources/js/humhub.wiki.bundle.js | 40 ++++++++++++++++++++------ resources/js/humhub.wiki.bundle.min.js | 2 +- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/resources/css/humhub.wiki.css b/resources/css/humhub.wiki.css index 40178538..502a37c5 100644 --- a/resources/css/humhub.wiki.css +++ b/resources/css/humhub.wiki.css @@ -571,13 +571,16 @@ margin-bottom: -2px; } #category_list_view .drag-icon { + opacity: 0; visibility: hidden; + transition: opacity 0.3s ease; color: var(--text-color-soft); } #category_list_view .drag-icon .fa { font-size: 11px; } -#category_list_view .page-title:hover .drag-icon { +#category_list_view .drag-icon.visible { + opacity: 1; visibility: visible; cursor: move; } diff --git a/resources/css/humhub.wiki.min.css b/resources/css/humhub.wiki.min.css index a3251ae7..b1ee38fb 100644 --- a/resources/css/humhub.wiki.min.css +++ b/resources/css/humhub.wiki.min.css @@ -1 +1 @@ -.layout-content-container .wiki-welcome h1{font-size:36px;font-weight:700}.layout-content-container .wiki-welcome h2{font-size:14px;font-weight:200;line-height:24px;margin:10px 100px}@media (max-width:768px){.layout-content-container .wiki-welcome h2{margin:10px}}.layout-content-container .wiki-bg{padding:150px 0 150px;background-repeat:no-repeat;background-position:center 100px}@media only screen and (max-width:520px){.layout-content-container .wiki-bg{background-size:contain}}.layout-content-container .wiki-page-path{padding-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;font-weight:600;color:var(--text-color-highlight)}.layout-content-container .wiki-page-path.wiki-page-path-length-0 .fa{font-size:28px}@media only screen and (max-width:520px){.layout-content-container .wiki-page-path .wiki-page-path-categories{display:none}.layout-content-container .wiki-page-path .fa{font-size:28px}}@media only screen and (max-width:1199px){.layout-content-container .wiki-page-path .wiki-page-path-first-categories{display:none}}.layout-content-container .wiki-menu{white-space:nowrap}.layout-content-container .wiki-menu .btn-group{margin-left:4px}.layout-content-container .wiki-page-index{border:1px solid #eee;border-radius:4px;padding:3px 5px;margin:30px 0}@media (min-width:480px){.layout-content-container .wiki-page-index{width:50%}}.layout-content-container .wiki-page-index .nav{padding:0;margin:0}.layout-content-container .wiki-page-index .nav li{margin:2px 0}.layout-content-container .wiki-page-index .nav li a{padding:3px 15px;color:var(--info)!important}.layout-content-container .wiki-page-index .nav li a>span{font-weight:600;color:var(--text-color-highlight)!important;margin-right:10px}.layout-content-container .wiki-page-index .nav li:first-child a{font-size:14px;font-weight:600;color:var(--text-color-highlight)!important}.layout-content-container .wiki-page-index .wiki-page-index-section .header-anchor{text-overflow:ellipsis;overflow:hidden;padding-left:20px}.layout-content-container .wiki-page-index .wiki-page-index-section-level2 .header-anchor{padding-left:50px}.layout-content-container .wiki-page-index .wiki-page-index-section-level3 .header-anchor{padding-left:80px}.layout-content-container .current-anchor-header{background:var(--background-color-highlight);width:fit-content;border-radius:4px}.layout-content-container #wiki-page-edit .ProseMirror-menubar-wrapper{z-index:8}.layout-content-container #wiki-page-edit .ProseMirror{min-height:150px!important}.layout-content-container .wiki-content hr.dashed,.layout-content-container .wiki-page-index hr.dashed{border-style:dashed}.layout-content-container .wiki-page-content{min-height:220px}.layout-content-container .wiki-page-content .topic-label-list{margin-bottom:10px}.layout-content-container .wiki-page-content .wiki-page-title{font-size:1.75em;font-weight:500;color:var(--text-color-highlight);clear:both}.layout-content-container .wiki-page-content .wiki-page-title i.fa{margin-right:4px}.layout-content-container .wiki-page-content .wiki-page-body{padding:0 30px 30px}.layout-content-container .wiki-page-content .wiki-page-body .wiki-sub-pages .wiki-page-list .page-title .page-title-text{padding-left:0}.layout-content-container .wiki-page-content .wiki-headline{padding-bottom:8px;margin-bottom:10px;border-bottom:1px solid #eee}.layout-content-container .wiki-page-content .wiki-headline .wiki-headline-top{display:flex;justify-content:space-between;align-items:center}.layout-content-container .wiki-page-content .wiki-headline .label{margin-left:2px}.layout-content-container .wiki-page-content .wiki-headline .wiki-page-path a{color:var(--info)}.layout-content-container .wiki-page-content .wiki-headline .wiki-page-path a:hover{color:var(--text-color-highlight)}.layout-content-container .wiki-page-content hr.wiki-headline-seperator{margin:20px 0 10px}.layout-content-container .wiki-page-content .wiki-category-list-item{padding-bottom:0!important;position:relative}.layout-content-container .wiki-page-content .wiki-category-list-sort-fixer{position:absolute;visibility:hidden}.layout-content-container .wiki-page-content .markdown-render{margin-bottom:10px}.layout-content-container .wiki-page-content .wiki-sub-pages{border:1px solid #ddd;padding:15px 0;margin-bottom:10px}@media (min-width:480px){.layout-content-container .wiki-page-content .wiki-sub-pages{width:50%}}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list{margin-bottom:0;padding-left:2px}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title .fa{font-size:11px;color:var(--text-color-main);margin:0 5px}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title:hover{border-color:transparent}.layout-content-container .wiki-page-content .wiki-sub-pages a,.layout-content-container .wiki-page-content .wiki-sub-pages span.page-title-info{font-size:13px;font-weight:500;color:var(--text-color-main);white-space:nowrap;padding-left:3px}.layout-content-container .wiki-page-content .wiki-sub-pages a{color:var(--info)}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list{padding:0}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title{padding-top:0;padding-bottom:0}.layout-content-container .wiki-page-content .wiki-sub-pages span.page-title-text{display:inline-block;margin-bottom:10px;color:var(--text-color-highlight);font-weight:600}.layout-content-container .wiki-page-list-row-details,.layout-content-container .wiki-page-list-row-details .time,.layout-content-container .wiki-page-list-row-details a{color:var(--text-color-secondary);font-size:12px}.layout-content-container .wiki-content .wiki-content-info{margin-top:5px}.layout-content-container .wiki-content .wiki-content-info a{color:var(--text-color-main)}.layout-content-container .wiki-content .wiki-content-info a:hover{color:var(--info)}.layout-content-container .wiki-content [data-wiki-page]{color:#ec4332!important}.layout-content-container .wiki-content [data-wiki-page="#"]{color:#4cc159!important}.layout-content-container .wiki-content .social-controls{margin-bottom:10px}.layout-content-container .wiki-content ul.wiki-page-list{list-style:none;padding-left:0}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target{height:15px;bottom:9px;position:absolute;width:100%;display:block!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target li{display:none!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target .ui-sortable-drop-area{margin-top:10px!important;border:none!important}.layout-content-container .wiki-content ul.wiki-page-list li{font-size:14px;padding-bottom:6px}.layout-content-container .wiki-content ul.wiki-page-list .wiki-list-item-selected{background:var(--background-color-highlight-soft)}.layout-content-container .wiki-content ul.wiki-page-list .wiki-list-item-selected>.page-title{background:var(--background-color-highlight)}.layout-content-container .wiki-content ul.wiki-page-list .page-title{padding:4px 12px;border:1px solid transparent;border-radius:4px;display:flex;cursor:pointer;transition:background 1s ease}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa[class*=fa-caret]{cursor:default}.layout-content-container .wiki-content ul.wiki-page-list .page-title:hover{border-color:var(--info)}.layout-content-container .wiki-content ul.wiki-page-list .page-title:hover .wiki-category-add{display:block}.layout-content-container .wiki-content ul.wiki-page-list .page-title:not(.page-is-category) .page-title-text{padding-left:24px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-page-control{color:var(--text-color-secondary)}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-page-control.wiki-category-add{color:var(--text-color-highlight);margin-left:8px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-category-add{display:none}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa{font-size:14px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa-caret-down{margin:0 6px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa-caret-right{margin:0 8px 0 7px}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div{display:flex;overflow:hidden}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div .page-title-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div>i.fa{padding:3px 2px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .page-title-icon{margin-left:8px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .page-title-icon .page-title-icon-visibility{color:var(--text-color-soft2)}.layout-content-container .wiki-content ul.wiki-page-list .page-title.wiki-page-dropped{background:rgba(255,193,7,.12)}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping ul.wiki-page-list:not(.wiki-page-list-droppable-target){padding-top:25px;margin-top:-25px}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping li:not(.wiki-current-target-category-over)>.page-title:hover{border-color:transparent!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping .wiki-category-add{display:none!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping .drag-icon{visibility:hidden!important}.layout-content-container .wiki-content ul.wiki-page-history{list-style:none;margin-left:22px;padding-left:0;border-left:1px dashed #aeaeae}.layout-content-container .wiki-content ul.wiki-page-history.wiki-page-history-with-diff li{padding-left:56px}.layout-content-container .wiki-content ul.wiki-page-history li{padding:20px 18px;position:relative}.layout-content-container .wiki-content ul.wiki-page-history li:first-child::before{content:'';background:var(--background-color-main);display:block;position:absolute;top:0;left:-1px;width:1px;height:38px}.layout-content-container .wiki-content ul.wiki-page-history li h4.media-heading{font-size:16px;font-weight:600}.layout-content-container .wiki-content ul.wiki-page-history li h5{margin-bottom:0;color:var(--text-color-highlight);font-size:13px}.layout-content-container .wiki-content ul.wiki-page-history li .horizontal-line{position:absolute;left:2px;top:38px;letter-spacing:1px;border-top:1px dashed #aeaeae}.layout-content-container .wiki-content ul.wiki-page-history li .horizontal-line input[type=radio]{position:relative;right:-27px;top:-9px}.layout-content-container .wiki-content ul.wiki-page-history li .wiki-author-link{color:var(--text-color-soft);text-decoration:underline}.layout-content-container .wiki-content ul.wiki-page-history li .media{padding:0 11px}.layout-content-container .wiki-content ul.wiki-page-history li .alert{padding:10px;margin-bottom:0}.layout-content-container .wiki-content ul.wiki-page-history li .alert .horizontal-line{top:48px}.layout-content-container .wiki-content button.wiki-page-history-btn-compare{margin-left:15px}.layout-content-container .wiki-content.wiki-page-diff ins{text-decoration:none;background-color:#d4fcbc}.layout-content-container .wiki-content.wiki-page-diff del{text-decoration:line-through;background-color:#fbb6c2;color:var(--text-color-main)}.layout-content-container .wiki-page-history-title{padding-left:15px;font-weight:600;font-size:20px}.layout-content-container .wiki-page-history-title .fa{font-size:14px}.layout-content-container .wiki-content .new{color:#4cc159}.layout-content-container .wiki-content .delete{color:#ec4332}.layout-content-container .wiki-content .history{color:#ff8a00}.layout-content-container .wiki-content .fa-link{color:#7880dd;margin-right:4px}.layout-content-container .wiki-content .back{color:var(--text-color-main)}@media (max-width:768px){.wiki-page-content{min-height:220px}}.wiki-page-content-header{display:flex;margin-bottom:10px;padding:10px 10px}.wiki-page-content-header h3{color:var(--text-color-highlight);float:left;font-size:28px;white-space:nowrap;margin:0 30px 0 0;padding:0 0 0 15px}.wiki-page-content-header h3 .fa{font-size:20px;margin-right:8px;position:relative;top:-3px}.wiki-page-content-header .wiki-search-form{margin:0 0 10px}.wiki-page-content-header .wiki-page-content-header-actions{float:right;padding-top:5px}.wiki-page-content-header .wiki-page-content-header-actions .btn{margin-bottom:4px}.wiki-page-content-header .wiki-search-form{width:100%;max-width:none;margin-right:50px!important}.wiki-page-content-header .wiki-page-content-header-actions{white-space:nowrap}@media (max-width:991px){.wiki-page-content-header .wiki-search-form{margin-right:10px!important}}@media (max-width:479px){.wiki-page-content-header{display:block!important}.wiki-page-content-header .wiki-search-form{width:auto;margin-right:0!important}.wiki-page-content-header .wiki-page-content-header-actions{white-space:normal}}.wiki-page-header-wrapper p:last-child{margin:0 0 1.2em}.wiki-page-header-wrapper:last-child p:last-child{margin:0}.wiki-page-header-wrapper a.header-edit-link{display:none;color:var(--text-color-main)!important}.wiki-page-header-wrapper:hover .header-edit-link{display:inline}.wiki-page-header-wrapper h1:hover a,.wiki-page-header-wrapper h2:hover a,.wiki-page-header-wrapper h3:hover a{display:inline!important}.wiki-search-form{float:right;position:relative;margin-left:4px;max-width:168px}.wiki-search-form input[name=keyword]{background:#f3f3f3;font-size:13px;border:none;color:var(--text-color-main);padding-left:26px;height:36px;min-height:36px}.wiki-search-form input[name=keyword]::placeholder{color:var(--text-color-secondary)!important;opacity:1}.wiki-search-form input[name=keyword]:not(:placeholder-shown)+button[type=submit] i.fa{color:var(--text-color-main)!important}.wiki-search-form button[type=submit]{position:absolute;top:0;background:0 0;padding:5px 8px}.wiki-search-form button[type=submit]:focus{background:0 0;box-shadow:none}.wiki-search-form button[type=submit] i.fa{color:var(--text-color-secondary)!important;margin-top:6px}#category_list_view.wiki-page-list>li>div>.page-title-text{font-weight:600}#category_list_view .wiki-current-target-category>.page-title{border-color:var(--info)}#category_list_view .ui-sortable-drop-area+.wiki-current-target-category>.page-title{border-color:transparent}#category_list_view .wiki-current-dropping-page{background:rgba(33,161,179,.12)}#category_list_view .wiki-current-dropping-page+.ui-sortable-drop-area{display:none}#category_list_view .ui-sortable-helper{visibility:hidden}#category_list_view .ui-sortable-helper .fa{display:none}#category_list_view .ui-sortable-drop-area{border-bottom:2px solid #000;margin-top:-6px;margin-bottom:-2px}#category_list_view .drag-icon{visibility:hidden;color:var(--text-color-soft)}#category_list_view .drag-icon .fa{font-size:11px}#category_list_view .page-title:hover .drag-icon{visibility:visible;cursor:move}.wiki-page-sidebar{padding-right:0;position:relative}.wiki-page-sidebar #category_list_view.wiki-page-list{padding:0 0 10px 0;margin:0 -14px}.wiki-page-sidebar #category_list_view.wiki-page-list .page-title{padding-left:12px;padding-right:12px}.wiki-page-sidebar .wiki-page-content{padding:0 4px}.wiki-page-sidebar .wiki-page-content-header{display:block;padding:3px 0 0;border:none}@media (max-width:1199px){.wiki-page-sidebar .wiki-page-content-header{display:flex}}.wiki-page-sidebar .wiki-page-content-header h3{font-size:28px;font-weight:600;color:var(--text-color-highlight);padding:0;margin:5px 0}.wiki-page-sidebar .wiki-page-content-header h3 .fa{font-size:16px;margin:0}.wiki-page-sidebar .wiki-page-content-header .btn-add-page{float:left;padding:4px 6px;margin:9px 0 0 9px;line-height:9px}.wiki-page-sidebar .wiki-page-content-header .btn-add-page:active{padding:3px 5px}.wiki-page-sidebar .wiki-page-content-header .wiki-page-content-header-actions{padding:0}.wiki-page-sidebar .wiki-search-form{margin:55px 0 15px;display:block;float:none;clear:both;max-width:none}.wiki-page-sidebar .wiki-content ul.wiki-page-list .page-title:hover{border-radius:0}.wiki-page-sidebar .ui-resizable-handle.ui-resizable-e{cursor:ew-resize}@media (max-width:1199px){.wiki-page-sidebar{padding-right:15px}.wiki-page-sidebar:not(.visible-lg){width:100%!important}.wiki-page-sidebar:not(.visible-lg) .ui-resizable-handle{display:none}.wiki-page-sidebar #category_list_view.wiki-page-list{margin-left:0;margin-right:0}.wiki-page-sidebar #category_list_view.wiki-page-list .page-title:hover{border-radius:4px}.wiki-page-sidebar .wiki-page-content-header{padding:14px 8px 20px}.wiki-page-sidebar .wiki-page-content-header h3{color:var(--text-color-main);font-weight:400;text-transform:none;font-size:12px;margin-right:16px}.wiki-page-sidebar .wiki-page-content-header h3,.wiki-page-sidebar .wiki-page-content-header h3 .fa{font-size:28px}.wiki-page-sidebar .wiki-page-content-header .btn-sm{padding:4px 8px;margin-top:4px}.wiki-page-sidebar .wiki-page-content-header .btn-add-page{display:none}.wiki-page-sidebar .wiki-search-form{float:left;clear:none;max-width:none;margin:0}}.wiki-page-list-table .wiki-search-form{float:left}.wiki-page-list-table .table-responsive{padding-left:15px;padding-right:15px}.wiki-page-list-table .table-responsive .grid-view{padding:15px 0}.wiki-page-list-table .table-responsive .grid-view .pagination{margin-bottom:0}.wiki-page-list-table .table-responsive table a:hover{color:var(--info)}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title{font-size:14px;font-weight:500}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title a{display:block}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title a:hover{color:var(--text-color-highlight)}.wiki-page-list-table .table-responsive table td{font-size:14px;border:none}.wiki-page-list-table .table-responsive table td:hover{cursor:pointer}.wiki-page-list-table .table-responsive table td:first-child{padding-left:12px;border-top-left-radius:4px;border-bottom-left-radius:4px}.wiki-page-list-table .table-responsive table td:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.wiki-page-list-table .table-responsive .pagination>.active>a,.wiki-page-list-table .table-responsive .pagination>.active>a:focus,.wiki-page-list-table .table-responsive .pagination>.active>a:hover,.wiki-page-list-table .table-responsive .pagination>.active>span,.wiki-page-list-table .table-responsive .pagination>.active>span:focus,.wiki-page-list-table .table-responsive .pagination>.active>span:hover{background-color:var(--info);border-color:var(--info)}@media (max-width:1199px){.wiki-page-list-table .table-responsive{border:none}.wiki-right-part:not(.visible-lg){width:100%!important}}@media (max-width:768px){.layout-content-container .wiki-page-content .wiki-page-body{padding-left:0;padding-right:0}}.wiki-preview{border:1px solid #e1e1e1;border-radius:4px;padding:10px}.wiki-preview .wiki-preview-content{margin-bottom:10px}.wiki-icon-print{float:right;cursor:pointer}@media print{#topbar-first,.comment-container,.footer-nav,.social-controls,.space-nav,.wiki-content-info,.wiki-icon-print,.wiki-menu{display:none}.layout-content-container .wiki-content{border:none}.space-layout-container{margin:0}#page-content-wrapper{padding:0}} \ No newline at end of file +.layout-content-container .wiki-welcome h1{font-size:36px;font-weight:700}.layout-content-container .wiki-welcome h2{font-size:14px;font-weight:200;line-height:24px;margin:10px 100px}@media (max-width:768px){.layout-content-container .wiki-welcome h2{margin:10px}}.layout-content-container .wiki-bg{padding:150px 0 150px;background-repeat:no-repeat;background-position:center 100px}@media only screen and (max-width:520px){.layout-content-container .wiki-bg{background-size:contain}}.layout-content-container .wiki-page-path{padding-right:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;font-weight:600;color:var(--text-color-highlight)}.layout-content-container .wiki-page-path.wiki-page-path-length-0 .fa{font-size:28px}@media only screen and (max-width:520px){.layout-content-container .wiki-page-path .wiki-page-path-categories{display:none}.layout-content-container .wiki-page-path .fa{font-size:28px}}@media only screen and (max-width:1199px){.layout-content-container .wiki-page-path .wiki-page-path-first-categories{display:none}}.layout-content-container .wiki-menu{white-space:nowrap}.layout-content-container .wiki-menu .btn-group{margin-left:4px}.layout-content-container .wiki-page-index{border:1px solid #eee;border-radius:4px;padding:3px 5px;margin:30px 0}@media (min-width:480px){.layout-content-container .wiki-page-index{width:50%}}.layout-content-container .wiki-page-index .nav{padding:0;margin:0}.layout-content-container .wiki-page-index .nav li{margin:2px 0}.layout-content-container .wiki-page-index .nav li a{padding:3px 15px;color:var(--info)!important}.layout-content-container .wiki-page-index .nav li a>span{font-weight:600;color:var(--text-color-highlight)!important;margin-right:10px}.layout-content-container .wiki-page-index .nav li:first-child a{font-size:14px;font-weight:600;color:var(--text-color-highlight)!important}.layout-content-container .wiki-page-index .wiki-page-index-section .header-anchor{text-overflow:ellipsis;overflow:hidden;padding-left:20px}.layout-content-container .wiki-page-index .wiki-page-index-section-level2 .header-anchor{padding-left:50px}.layout-content-container .wiki-page-index .wiki-page-index-section-level3 .header-anchor{padding-left:80px}.layout-content-container .current-anchor-header{background:var(--background-color-highlight);width:fit-content;border-radius:4px}.layout-content-container #wiki-page-edit .ProseMirror-menubar-wrapper{z-index:8}.layout-content-container #wiki-page-edit .ProseMirror{min-height:150px!important}.layout-content-container .wiki-content hr.dashed,.layout-content-container .wiki-page-index hr.dashed{border-style:dashed}.layout-content-container .wiki-page-content{min-height:220px}.layout-content-container .wiki-page-content .topic-label-list{margin-bottom:10px}.layout-content-container .wiki-page-content .wiki-page-title{font-size:1.75em;font-weight:500;color:var(--text-color-highlight);clear:both}.layout-content-container .wiki-page-content .wiki-page-title i.fa{margin-right:4px}.layout-content-container .wiki-page-content .wiki-page-body{padding:0 30px 30px}.layout-content-container .wiki-page-content .wiki-page-body .wiki-sub-pages .wiki-page-list .page-title .page-title-text{padding-left:0}.layout-content-container .wiki-page-content .wiki-headline{padding-bottom:8px;margin-bottom:10px;border-bottom:1px solid #eee}.layout-content-container .wiki-page-content .wiki-headline .wiki-headline-top{display:flex;justify-content:space-between;align-items:center}.layout-content-container .wiki-page-content .wiki-headline .label{margin-left:2px}.layout-content-container .wiki-page-content .wiki-headline .wiki-page-path a{color:var(--info)}.layout-content-container .wiki-page-content .wiki-headline .wiki-page-path a:hover{color:var(--text-color-highlight)}.layout-content-container .wiki-page-content hr.wiki-headline-seperator{margin:20px 0 10px}.layout-content-container .wiki-page-content .wiki-category-list-item{padding-bottom:0!important;position:relative}.layout-content-container .wiki-page-content .wiki-category-list-sort-fixer{position:absolute;visibility:hidden}.layout-content-container .wiki-page-content .markdown-render{margin-bottom:10px}.layout-content-container .wiki-page-content .wiki-sub-pages{border:1px solid #ddd;padding:15px 0;margin-bottom:10px}@media (min-width:480px){.layout-content-container .wiki-page-content .wiki-sub-pages{width:50%}}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list{margin-bottom:0;padding-left:2px}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title .fa{font-size:11px;color:var(--text-color-main);margin:0 5px}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title:hover{border-color:transparent}.layout-content-container .wiki-page-content .wiki-sub-pages a,.layout-content-container .wiki-page-content .wiki-sub-pages span.page-title-info{font-size:13px;font-weight:500;color:var(--text-color-main);white-space:nowrap;padding-left:3px}.layout-content-container .wiki-page-content .wiki-sub-pages a{color:var(--info)}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list{padding:0}.layout-content-container .wiki-page-content .wiki-sub-pages ul.wiki-page-list .page-title{padding-top:0;padding-bottom:0}.layout-content-container .wiki-page-content .wiki-sub-pages span.page-title-text{display:inline-block;margin-bottom:10px;color:var(--text-color-highlight);font-weight:600}.layout-content-container .wiki-page-list-row-details,.layout-content-container .wiki-page-list-row-details .time,.layout-content-container .wiki-page-list-row-details a{color:var(--text-color-secondary);font-size:12px}.layout-content-container .wiki-content .wiki-content-info{margin-top:5px}.layout-content-container .wiki-content .wiki-content-info a{color:var(--text-color-main)}.layout-content-container .wiki-content .wiki-content-info a:hover{color:var(--info)}.layout-content-container .wiki-content [data-wiki-page]{color:#ec4332!important}.layout-content-container .wiki-content [data-wiki-page="#"]{color:#4cc159!important}.layout-content-container .wiki-content .social-controls{margin-bottom:10px}.layout-content-container .wiki-content ul.wiki-page-list{list-style:none;padding-left:0}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target{height:15px;bottom:9px;position:absolute;width:100%;display:block!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target li{display:none!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-list-droppable-target .ui-sortable-drop-area{margin-top:10px!important;border:none!important}.layout-content-container .wiki-content ul.wiki-page-list li{font-size:14px;padding-bottom:6px}.layout-content-container .wiki-content ul.wiki-page-list .wiki-list-item-selected{background:var(--background-color-highlight-soft)}.layout-content-container .wiki-content ul.wiki-page-list .wiki-list-item-selected>.page-title{background:var(--background-color-highlight)}.layout-content-container .wiki-content ul.wiki-page-list .page-title{padding:4px 12px;border:1px solid transparent;border-radius:4px;display:flex;cursor:pointer;transition:background 1s ease}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa[class*=fa-caret]{cursor:default}.layout-content-container .wiki-content ul.wiki-page-list .page-title:hover{border-color:var(--info)}.layout-content-container .wiki-content ul.wiki-page-list .page-title:hover .wiki-category-add{display:block}.layout-content-container .wiki-content ul.wiki-page-list .page-title:not(.page-is-category) .page-title-text{padding-left:24px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-page-control{color:var(--text-color-secondary)}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-page-control.wiki-category-add{color:var(--text-color-highlight);margin-left:8px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .wiki-category-add{display:none}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa{font-size:14px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa-caret-down{margin:0 6px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .fa-caret-right{margin:0 8px 0 7px}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div{display:flex;overflow:hidden}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div .page-title-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layout-content-container .wiki-content ul.wiki-page-list .page-title>div>i.fa{padding:3px 2px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .page-title-icon{margin-left:8px}.layout-content-container .wiki-content ul.wiki-page-list .page-title .page-title-icon .page-title-icon-visibility{color:var(--text-color-soft2)}.layout-content-container .wiki-content ul.wiki-page-list .page-title.wiki-page-dropped{background:rgba(255,193,7,.12)}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping ul.wiki-page-list:not(.wiki-page-list-droppable-target){padding-top:25px;margin-top:-25px}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping li:not(.wiki-current-target-category-over)>.page-title:hover{border-color:transparent!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping .wiki-category-add{display:none!important}.layout-content-container .wiki-content ul.wiki-page-list.wiki-page-is-dropping .drag-icon{visibility:hidden!important}.layout-content-container .wiki-content ul.wiki-page-history{list-style:none;margin-left:22px;padding-left:0;border-left:1px dashed #aeaeae}.layout-content-container .wiki-content ul.wiki-page-history.wiki-page-history-with-diff li{padding-left:56px}.layout-content-container .wiki-content ul.wiki-page-history li{padding:20px 18px;position:relative}.layout-content-container .wiki-content ul.wiki-page-history li:first-child::before{content:'';background:var(--background-color-main);display:block;position:absolute;top:0;left:-1px;width:1px;height:38px}.layout-content-container .wiki-content ul.wiki-page-history li h4.media-heading{font-size:16px;font-weight:600}.layout-content-container .wiki-content ul.wiki-page-history li h5{margin-bottom:0;color:var(--text-color-highlight);font-size:13px}.layout-content-container .wiki-content ul.wiki-page-history li .horizontal-line{position:absolute;left:2px;top:38px;letter-spacing:1px;border-top:1px dashed #aeaeae}.layout-content-container .wiki-content ul.wiki-page-history li .horizontal-line input[type=radio]{position:relative;right:-27px;top:-9px}.layout-content-container .wiki-content ul.wiki-page-history li .wiki-author-link{color:var(--text-color-soft);text-decoration:underline}.layout-content-container .wiki-content ul.wiki-page-history li .media{padding:0 11px}.layout-content-container .wiki-content ul.wiki-page-history li .alert{padding:10px;margin-bottom:0}.layout-content-container .wiki-content ul.wiki-page-history li .alert .horizontal-line{top:48px}.layout-content-container .wiki-content button.wiki-page-history-btn-compare{margin-left:15px}.layout-content-container .wiki-content.wiki-page-diff ins{text-decoration:none;background-color:#d4fcbc}.layout-content-container .wiki-content.wiki-page-diff del{text-decoration:line-through;background-color:#fbb6c2;color:var(--text-color-main)}.layout-content-container .wiki-page-history-title{padding-left:15px;font-weight:600;font-size:20px}.layout-content-container .wiki-page-history-title .fa{font-size:14px}.layout-content-container .wiki-content .new{color:#4cc159}.layout-content-container .wiki-content .delete{color:#ec4332}.layout-content-container .wiki-content .history{color:#ff8a00}.layout-content-container .wiki-content .fa-link{color:#7880dd;margin-right:4px}.layout-content-container .wiki-content .back{color:var(--text-color-main)}@media (max-width:768px){.wiki-page-content{min-height:220px}}.wiki-page-content-header{display:flex;margin-bottom:10px;padding:10px 10px}.wiki-page-content-header h3{color:var(--text-color-highlight);float:left;font-size:28px;white-space:nowrap;margin:0 30px 0 0;padding:0 0 0 15px}.wiki-page-content-header h3 .fa{font-size:20px;margin-right:8px;position:relative;top:-3px}.wiki-page-content-header .wiki-search-form{margin:0 0 10px}.wiki-page-content-header .wiki-page-content-header-actions{float:right;padding-top:5px}.wiki-page-content-header .wiki-page-content-header-actions .btn{margin-bottom:4px}.wiki-page-content-header .wiki-search-form{width:100%;max-width:none;margin-right:50px!important}.wiki-page-content-header .wiki-page-content-header-actions{white-space:nowrap}@media (max-width:991px){.wiki-page-content-header .wiki-search-form{margin-right:10px!important}}@media (max-width:479px){.wiki-page-content-header{display:block!important}.wiki-page-content-header .wiki-search-form{width:auto;margin-right:0!important}.wiki-page-content-header .wiki-page-content-header-actions{white-space:normal}}.wiki-page-header-wrapper p:last-child{margin:0 0 1.2em}.wiki-page-header-wrapper:last-child p:last-child{margin:0}.wiki-page-header-wrapper a.header-edit-link{display:none;color:var(--text-color-main)!important}.wiki-page-header-wrapper:hover .header-edit-link{display:inline}.wiki-page-header-wrapper h1:hover a,.wiki-page-header-wrapper h2:hover a,.wiki-page-header-wrapper h3:hover a{display:inline!important}.wiki-search-form{float:right;position:relative;margin-left:4px;max-width:168px}.wiki-search-form input[name=keyword]{background:#f3f3f3;font-size:13px;border:none;color:var(--text-color-main);padding-left:26px;height:36px;min-height:36px}.wiki-search-form input[name=keyword]::placeholder{color:var(--text-color-secondary)!important;opacity:1}.wiki-search-form input[name=keyword]:not(:placeholder-shown)+button[type=submit] i.fa{color:var(--text-color-main)!important}.wiki-search-form button[type=submit]{position:absolute;top:0;background:0 0;padding:5px 8px}.wiki-search-form button[type=submit]:focus{background:0 0;box-shadow:none}.wiki-search-form button[type=submit] i.fa{color:var(--text-color-secondary)!important;margin-top:6px}#category_list_view.wiki-page-list>li>div>.page-title-text{font-weight:600}#category_list_view .wiki-current-target-category>.page-title{border-color:var(--info)}#category_list_view .ui-sortable-drop-area+.wiki-current-target-category>.page-title{border-color:transparent}#category_list_view .wiki-current-dropping-page{background:rgba(33,161,179,.12)}#category_list_view .wiki-current-dropping-page+.ui-sortable-drop-area{display:none}#category_list_view .ui-sortable-helper{visibility:hidden}#category_list_view .ui-sortable-helper .fa{display:none}#category_list_view .ui-sortable-drop-area{border-bottom:2px solid #000;margin-top:-6px;margin-bottom:-2px}#category_list_view .drag-icon{opacity:0;visibility:hidden;transition:opacity .3s ease;color:var(--text-color-soft)}#category_list_view .drag-icon .fa{font-size:11px}#category_list_view .drag-icon.visible{opacity:1;visibility:visible;cursor:move}.wiki-page-sidebar{padding-right:0;position:relative}.wiki-page-sidebar #category_list_view.wiki-page-list{padding:0 0 10px 0;margin:0 -14px}.wiki-page-sidebar #category_list_view.wiki-page-list .page-title{padding-left:12px;padding-right:12px}.wiki-page-sidebar .wiki-page-content{padding:0 4px}.wiki-page-sidebar .wiki-page-content-header{display:block;padding:3px 0 0;border:none}@media (max-width:1199px){.wiki-page-sidebar .wiki-page-content-header{display:flex}}.wiki-page-sidebar .wiki-page-content-header h3{font-size:28px;font-weight:600;color:var(--text-color-highlight);padding:0;margin:5px 0}.wiki-page-sidebar .wiki-page-content-header h3 .fa{font-size:16px;margin:0}.wiki-page-sidebar .wiki-page-content-header .btn-add-page{float:left;padding:4px 6px;margin:9px 0 0 9px;line-height:9px}.wiki-page-sidebar .wiki-page-content-header .btn-add-page:active{padding:3px 5px}.wiki-page-sidebar .wiki-page-content-header .wiki-page-content-header-actions{padding:0}.wiki-page-sidebar .wiki-search-form{margin:55px 0 15px;display:block;float:none;clear:both;max-width:none}.wiki-page-sidebar .wiki-content ul.wiki-page-list .page-title:hover{border-radius:0}.wiki-page-sidebar .ui-resizable-handle.ui-resizable-e{cursor:ew-resize}@media (max-width:1199px){.wiki-page-sidebar{padding-right:15px}.wiki-page-sidebar:not(.visible-lg){width:100%!important}.wiki-page-sidebar:not(.visible-lg) .ui-resizable-handle{display:none}.wiki-page-sidebar #category_list_view.wiki-page-list{margin-left:0;margin-right:0}.wiki-page-sidebar #category_list_view.wiki-page-list .page-title:hover{border-radius:4px}.wiki-page-sidebar .wiki-page-content-header{padding:14px 8px 20px}.wiki-page-sidebar .wiki-page-content-header h3{color:var(--text-color-main);font-weight:400;text-transform:none;font-size:12px;margin-right:16px}.wiki-page-sidebar .wiki-page-content-header h3,.wiki-page-sidebar .wiki-page-content-header h3 .fa{font-size:28px}.wiki-page-sidebar .wiki-page-content-header .btn-sm{padding:4px 8px;margin-top:4px}.wiki-page-sidebar .wiki-page-content-header .btn-add-page{display:none}.wiki-page-sidebar .wiki-search-form{float:left;clear:none;max-width:none;margin:0}}.wiki-page-list-table .wiki-search-form{float:left}.wiki-page-list-table .table-responsive{padding-left:15px;padding-right:15px}.wiki-page-list-table .table-responsive .grid-view{padding:15px 0}.wiki-page-list-table .table-responsive .grid-view .pagination{margin-bottom:0}.wiki-page-list-table .table-responsive table a:hover{color:var(--info)}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title{font-size:14px;font-weight:500}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title a{display:block}.wiki-page-list-table .table-responsive table .wiki-page-list-row-title a:hover{color:var(--text-color-highlight)}.wiki-page-list-table .table-responsive table td{font-size:14px;border:none}.wiki-page-list-table .table-responsive table td:hover{cursor:pointer}.wiki-page-list-table .table-responsive table td:first-child{padding-left:12px;border-top-left-radius:4px;border-bottom-left-radius:4px}.wiki-page-list-table .table-responsive table td:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.wiki-page-list-table .table-responsive .pagination>.active>a,.wiki-page-list-table .table-responsive .pagination>.active>a:focus,.wiki-page-list-table .table-responsive .pagination>.active>a:hover,.wiki-page-list-table .table-responsive .pagination>.active>span,.wiki-page-list-table .table-responsive .pagination>.active>span:focus,.wiki-page-list-table .table-responsive .pagination>.active>span:hover{background-color:var(--info);border-color:var(--info)}@media (max-width:1199px){.wiki-page-list-table .table-responsive{border:none}.wiki-right-part:not(.visible-lg){width:100%!important}}@media (max-width:768px){.layout-content-container .wiki-page-content .wiki-page-body{padding-left:0;padding-right:0}}.wiki-preview{border:1px solid #e1e1e1;border-radius:4px;padding:10px}.wiki-preview .wiki-preview-content{margin-bottom:10px}.wiki-icon-print{float:right;cursor:pointer}@media print{#topbar-first,.comment-container,.footer-nav,.social-controls,.space-nav,.wiki-content-info,.wiki-icon-print,.wiki-menu{display:none}.layout-content-container .wiki-content{border:none}.space-layout-container{margin:0}#page-content-wrapper{padding:0}} \ No newline at end of file diff --git a/resources/js/humhub.wiki.bundle.js b/resources/js/humhub.wiki.bundle.js index 1a2a9c28..e9a51903 100644 --- a/resources/js/humhub.wiki.bundle.js +++ b/resources/js/humhub.wiki.bundle.js @@ -135,7 +135,7 @@ humhub.module('wiki', function(module, require, $) { unload: unload }) }); - + humhub.module('wiki.Page', function (module, require, $) { var Widget = require('ui.widget').Widget; var wikiView = require('wiki'); @@ -305,7 +305,7 @@ humhub.module('wiki.Page', function (module, require, $) { module.export = Page; }); - + humhub.module('wiki.Form', function(module, require, $) { var Widget = require('ui.widget').Widget; var wikiView = require('wiki'); @@ -388,7 +388,7 @@ humhub.module('wiki.Form', function(module, require, $) { module.export = Form; }); - + humhub.module('wiki.CategoryListView', function(module, require, $) { var Widget = require('ui.widget').Widget; var client = require('client'); @@ -410,6 +410,7 @@ humhub.module('wiki.CategoryListView', function(module, require, $) { this.initFoldingSubpages(); this.initSorting(); this.initPageTitleLink(); + this.initDragButtonHoverDelay(); } CategoryListView.prototype.initFoldingSubpages = function() { @@ -657,9 +658,32 @@ humhub.module('wiki.CategoryListView', function(module, require, $) { }); }; + CategoryListView.prototype.initDragButtonHoverDelay = function() { + const HOVER_DELAY = 1000; + const dragClass = '.wiki-page-control.drag-icon'; + + this.$.find('.page-title').each(function () { + const $item = $(this); + const $dragBtn = $item.find(dragClass); + + let timer = null; + + $item.on('mouseenter', function () { + timer = setTimeout(() => { + $dragBtn.addClass('visible'); + }, HOVER_DELAY); + }); + + $item.on('mouseleave', function () { + clearTimeout(timer); + $dragBtn.removeClass('visible'); + }); + }); + }; + module.export = CategoryListView; }); - + humhub.module('wiki.linkExtension', function (module, require, $) { var richtext = require('ui.richtext.prosemirror'); var Widget = require('ui.widget').Widget; @@ -929,7 +953,7 @@ humhub.module('wiki.linkExtension', function (module, require, $) { setEditorLink: setEditorLink }); }); - + humhub.module('wiki.History', function(module, require, $) { var Widget = require('ui.widget').Widget; var client = require('client'); @@ -988,7 +1012,7 @@ humhub.module('wiki.History', function(module, require, $) { } module.export = History; -}); +}); humhub.module('wiki.Sidebar', function(module, require, $) { const Widget = require('ui.widget').Widget; @@ -1044,7 +1068,7 @@ humhub.module('wiki.Sidebar', function(module, require, $) { } module.export = Sidebar; -}); +}); humhub.module('wiki.ListTable', function(module, require, $) { const Widget = require('ui.widget').Widget; @@ -1063,7 +1087,7 @@ humhub.module('wiki.ListTable', function(module, require, $) { }; module.export = ListTable; -}); +}); /** * htmldiff.js a diff algorithm that understands HTML, and produces HTML in the browser. * diff --git a/resources/js/humhub.wiki.bundle.min.js b/resources/js/humhub.wiki.bundle.min.js index 6d1b84fe..38832601 100644 --- a/resources/js/humhub.wiki.bundle.min.js +++ b/resources/js/humhub.wiki.bundle.min.js @@ -1 +1 @@ -humhub.module("wiki",function(i,t,s){function e(t,e,i){c.push({$node:t,$trigger:e,condition:i})}var n=t("ui.widget").Widget,r=t("event"),l=t("ui.view"),a=t("client"),o=t("ui.loader"),c=[],t=n.extend();t.prototype.init=function(){s(window).off("scroll.wiki").on("scroll.wiki",function(){s.each(c,function(t,e){var i=s(window).scrollTop()+l.getContentTop()>e.$trigger.offset().top,n=!e.condition||e.condition.call(),i=i&&n,n=e.$node.data("menu-top"),r=n&&n.length?n.height():0,a={position:"relative",top:"0",left:"initial"},o="flex"===e.$node.parent().css("display")?"fixed":"sticky";i&&(a.position=o,a.top=l.getContentTop()+r+"px","fixed"==o)&&(a.left=e.$node.offset().left),e.$node.css(a),r&&(i&&(a.top=parseInt(a.top)-r+"px"),n.css(a))})});var t=this.$.find(".wiki-menu");t.length&&e(t,this.$,{call:()=>s(window).width()<768})},t.prototype.loader=function(t){var e=this.$.find(".wiki-menu");!1===t?o.reset(e):o.set(e,{size:"8px",css:{padding:0,width:"60px"}})},t.prototype.reloadEntry=function(t){var e;if(t)return(e=t.parent('[data-ui-widget="wiki.Content"]')).loader(),a.get(t.data("entry-url")).then(function(t){return t.output&&(e.$.html(t.output),e.$.find("[data-ui-widget]").each(function(){n.instance(s(this))})),t}).catch(function(t){i.log.error(t,!0)}).finally(function(){e.loader(!1)})};i.export({Content:t,toAnchor:function(t){t=s("#"+s.escapeSelector(t.substr(1,t.length)));t.length&&(s("html, body").animate({scrollTop:t.offset().top-l.getContentTop()},200),s(".current-anchor-header").removeClass("current-anchor-header"),t.addClass("current-anchor-header"),history)&&history.replaceState&&history.replaceState(null,null,"#"+t.attr("id"))},revertRevision:function(t){a.post(t).then(function(t){a.redirect(t.redirect),i.log.success("saved")}).catch(function(t){i.log.error(t,!0)})},actionDelete:function(t){a.pjax.post(t)},registerStickyElement:e,unload:function(){c=[],s(window).off("scroll.wiki"),r.off("humhub:content:afterMove.wiki")}})}),humhub.module("wiki.Page",function(e,t,h){var i=t("ui.widget").Widget,p=t("wiki"),t=i.extend(),n=(t.prototype.init=function(){var t=this;this.$.find("#wiki-page-richtext").on("afterInit",function(){h(this).data("inited-richtext",!0),t.$.data("diff")?n(h(t.$.data("diff")).find("#wiki-page-richtext"),h(this)):t.$.fadeIn("slow"),t.buildIndex(),t.initAnchor(),t.initHeaderEditIcons()})},t.print=function(){window.print()},t.prototype.initAnchor=function(){window.location.hash&&p.toAnchor(window.location.hash),h(".wiki-content").find(".header-anchor").on("click",function(t){t.preventDefault(),p.toAnchor(h(this).attr("href"))})},t.prototype.initHeaderEditIcons=function(){const i=this.data("edit-url");void 0!==i&&(this.$.html(this.$.html().replace(/(.+?<\/h\2>([\s\S]*?(?=$1
')),this.$.find("h1,h2,h3").each(function(){var t=h(this).find("a.header-anchor"),e='';t.length?t.before(e+" "):h(this).append(" "+e)}))},t.prototype.buildIndex=function(){var o=h('