Răsfoiți Sursa

Merge branch 'support/apply-bootstrap4' into support/remove-blue-night-theme

resolve conflict
akira-s 5 ani în urmă
părinte
comite
df2e0d1233
51 a modificat fișierele cu 338 adăugiri și 1555 ștergeri
  1. 1 1
      config/webpack.common.js
  2. 1 1
      resource/locales/en-US/translation.json
  3. 1 1
      resource/locales/ja/translation.json
  4. 1 1
      src/client/js/components/Drawio.jsx
  5. 2 2
      src/client/js/components/MyDraftList/MyDraftList.jsx
  6. 89 43
      src/client/js/components/Page/CopyDropdown.jsx
  7. 1 1
      src/client/js/components/PageComment/Comment.jsx
  8. 1 1
      src/client/js/components/PageEditor/HandsontableModal.jsx
  9. 1 1
      src/client/js/components/PageEditorByHackmd.jsx
  10. 7 15
      src/client/js/components/PageList/PageListMeta.jsx
  11. 8 8
      src/client/js/legacy/crowi.js
  12. 0 172
      src/client/styles/agile-admin/inverse/colors/_apply-colors-dark.scss
  13. 0 231
      src/client/styles/agile-admin/inverse/colors/antarctic.scss
  14. 0 51
      src/client/styles/agile-admin/inverse/colors/blue-night.scss
  15. 0 130
      src/client/styles/agile-admin/inverse/colors/christmas.scss
  16. 0 37
      src/client/styles/agile-admin/inverse/colors/future.scss
  17. 0 87
      src/client/styles/agile-admin/inverse/colors/halloween.scss
  18. 0 132
      src/client/styles/agile-admin/inverse/colors/island.scss
  19. 0 43
      src/client/styles/agile-admin/inverse/colors/kibela.scss
  20. 0 40
      src/client/styles/agile-admin/inverse/colors/mono-blue.scss
  21. 0 22
      src/client/styles/agile-admin/inverse/colors/nature.scss
  22. 0 206
      src/client/styles/agile-admin/inverse/colors/spring.scss
  23. 0 90
      src/client/styles/agile-admin/inverse/colors/wood.scss
  24. 10 10
      src/client/styles/agile-admin/inverse/variables.scss
  25. 5 6
      src/client/styles/scss/_comment_growi.scss
  26. 5 5
      src/client/styles/scss/_comment_kibela.scss
  27. 0 12
      src/client/styles/scss/_handsontable.scss
  28. 0 5
      src/client/styles/scss/_layout_kibela.scss
  29. 3 2
      src/client/styles/scss/_login.scss
  30. 0 1
      src/client/styles/scss/_on-edit.scss
  31. 0 51
      src/client/styles/scss/_override-bootstrap.scss
  32. 1 10
      src/client/styles/scss/_page.scss
  33. 0 6
      src/client/styles/scss/_sidebar.scss
  34. 5 5
      src/client/styles/scss/_staff_credit.scss
  35. 1 0
      src/client/styles/scss/_variables.scss
  36. 19 0
      src/client/styles/scss/molecules/copy-dropdown.scss
  37. 3 0
      src/client/styles/scss/style-app.scss
  38. 0 14
      src/client/styles/scss/theme/_apply-colors-dark.scss
  39. 6 0
      src/client/styles/scss/theme/_apply-colors.scss
  40. 99 6
      src/client/styles/scss/theme/future.scss
  41. 9 0
      src/lib/util/path-utils.js
  42. 27 0
      src/migrations/20200514001356-update-theme-color-for-dark.js
  43. 4 11
      src/server/models/page.js
  44. 5 9
      src/server/routes/page.js
  45. 1 2
      src/server/views/layout-growi/page_list.html
  46. 1 2
      src/server/views/layout-kibela/page_list.html
  47. 2 0
      src/server/views/modal/create_page.html
  48. 0 50
      src/server/views/modal/unportalize.html
  49. 2 2
      src/server/views/widget/page_list.html
  50. 2 9
      src/server/views/widget/page_tabs.html
  51. 15 21
      src/server/views/widget/page_tabs_kibela.html

+ 1 - 1
config/webpack.common.js

@@ -36,7 +36,7 @@ module.exports = (options) => {
       'styles/theme-default':         './src/client/styles/scss/theme/default.scss',
       'styles/theme-nature':          './src/client/styles/scss/theme/nature.scss',
       'styles/theme-mono-blue':       './src/client/styles/scss/theme/mono-blue.scss',
-      // 'styles/theme-future':          './src/client/styles/scss/theme/future.scss',
+      'styles/theme-future':          './src/client/styles/scss/theme/future.scss',
       'styles/theme-kibela':          './src/client/styles/scss/theme/kibela.scss',
       'styles/theme-halloween':       './src/client/styles/scss/theme/halloween.scss',
       'styles/theme-wood':          './src/client/styles/scss/theme/wood.scss',

+ 1 - 1
resource/locales/en-US/translation.json

@@ -55,7 +55,6 @@
   "Share Link": "Share Link",
   "Markdown Link": "Markdown Link",
   "Create/Edit Template": "Create/Edit Template Page",
-  "Unportalize": "Unportalize",
   "Go to this version": "View this version",
   "View diff": "View diff",
   "No diff": "No diff",
@@ -200,6 +199,7 @@
   "copy_to_clipboard": {
     "Copy to clipboard": "Copy to clipboard",
     "Page path": "Page path",
+    "Page URL": "Page URL",
     "Parmanent link": "Parmanent link",
     "Page path and parmanent link": "Page path and parmanent link",
     "Markdown link": "Markdown link"

+ 1 - 1
resource/locales/ja/translation.json

@@ -55,7 +55,6 @@
   "Share Link": "共有用リンク",
   "Markdown Link": "Markdown形式のリンク",
   "Create/Edit Template": "テンプレートページの作成/編集",
-  "Unportalize": "ポータル解除",
   "Go to this version": "このバージョンを見る",
   "View diff": "差分を表示",
   "No diff": "差分なし",
@@ -199,6 +198,7 @@
   "copy_to_clipboard": {
     "Copy to clipboard": "クリップボードにコピー",
     "Page path": "ページ名",
+    "Page URL": "ページURL",
     "Parmanent link": "パーマリンク",
     "Page path and parmanent link": "ページ名とパーマリンク",
     "Markdown link": "マークダウン形式のリンク"

+ 1 - 1
src/client/js/components/Drawio.jsx

@@ -55,7 +55,7 @@ class Drawio extends React.Component {
       <div className="editable-with-drawio position-relative">
         { !this.isPreview
           && (
-          <button type="button" className="drawio-iframe-trigger position-absolute btn" onClick={this.onEdit}>
+          <button type="button" className="drawio-iframe-trigger position-absolute btn btn-outline-secondary" onClick={this.onEdit}>
             <i className="icon-note mr-1"></i>{this.props.t('Edit')}
           </button>
           )

+ 2 - 2
src/client/js/components/MyDraftList/MyDraftList.jsx

@@ -141,8 +141,8 @@ class MyDraftList extends React.Component {
             <div className="d-flex justify-content-between">
               <h4>Total: {totalCount} drafts</h4>
               <div className="align-self-center">
-                <button type="button" className="btn btn-sm btn-outline-secondary" onClick={this.clearAllDrafts}>
-                  <i className="icon-fw icon-fire text-danger"></i>
+                <button type="button" className="btn btn-sm btn-outline-danger" onClick={this.clearAllDrafts}>
+                  <i className="icon-fw icon-fire"></i>
                   {t('Delete All')}
                 </button>
               </div>

+ 89 - 43
src/client/js/components/Page/CopyDropdown.jsx

@@ -15,9 +15,6 @@ class CopyDropdown extends React.Component {
   constructor(props) {
     super(props);
 
-    // retrieve xss library from window
-    this.xss = window.xss;
-
     this.state = {
       dropdownOpen: false,
       tooltipOpen: false,
@@ -25,7 +22,10 @@ class CopyDropdown extends React.Component {
 
     this.toggle = this.toggle.bind(this);
     this.showToolTip = this.showToolTip.bind(this);
-    this.generatePageUrl = this.generatePageUrl.bind(this);
+    this.generatePagePathWithParams = this.generatePagePathWithParams.bind(this);
+    this.generatePagePathUrl = this.generatePagePathUrl.bind(this);
+    this.generatePermalink = this.generatePermalink.bind(this);
+    this.generateMarkdownLink = this.generateMarkdownLink.bind(this);
   }
 
   toggle() {
@@ -39,25 +39,65 @@ class CopyDropdown extends React.Component {
     }, 1000);
   }
 
-  generatePageUrl() {
-    return (this.props.pageId == null)
-      ? decodeURIComponent(window.location.pathname + window.location.search)
-      : `${window.location.origin}/${this.props.pageId}`;
+  generatePagePathWithParams() {
+    const { pagePath } = this.props;
+    const {
+      search, hash,
+    } = window.location;
+
+    return decodeURI(`${pagePath}${search}${hash}`);
+  }
+
+  generatePagePathUrl() {
+    const { origin } = window.location;
+    return `${origin}${this.generatePagePathWithParams()}`;
+  }
+
+  generatePermalink() {
+    const { pageId } = this.props;
+    const { location } = window;
+
+    if (pageId == null) {
+      return null;
+    }
+
+    const {
+      origin, search, hash,
+    } = location;
+    return decodeURI(`${origin}/${pageId}${search}${hash}`);
   }
 
   generateMarkdownLink() {
-    return;
+    const { pagePath } = this.props;
+    const {
+      search, hash,
+    } = window.location;
+
+    const label = `${pagePath}${search}${hash}`;
+    const permalink = this.generatePermalink();
+
+    return decodeURI(`[${label}](${permalink})`);
   }
 
+  DropdownItemContents = ({ title, contents }) => (
+    <>
+      <div className="h6 mt-1 mb-2"><strong>{title}</strong></div>
+      <div className="card well mb-1 p-2">{contents}</div>
+    </>
+  );
+
   render() {
-    const { t } = this.props;
+    const { t, pageId } = this.props;
+
+    const pagePathWithParams = this.generatePagePathWithParams();
+    const pagePathUrl = this.generatePagePathUrl();
+    const permalink = this.generatePermalink();
 
-    const safePagePath = this.xss.process(this.props.pagePath);
-    const url = this.generatePageUrl();
+    const { DropdownItemContents } = this;
 
     return (
       <>
-        <Dropdown id="copyPagePathDropdown" isOpen={this.state.dropdownOpen} toggle={this.toggle}>
+        <Dropdown id="copyPagePathDropdown" className="grw-copy-dropdown" isOpen={this.state.dropdownOpen} toggle={this.toggle}>
 
           <DropdownToggle
             caret
@@ -68,49 +108,55 @@ class CopyDropdown extends React.Component {
           </DropdownToggle>
 
           <DropdownMenu>
-            <h5 className="ml-3 my-0 text-muted">{ t('copy_to_clipboard.Copy to clipboard') }</h5>
-            <DropdownItem divider></DropdownItem>
+            <DropdownItem header className="px-3">{ t('copy_to_clipboard.Copy to clipboard') }</DropdownItem>
+
+            <DropdownItem divider className="my-0"></DropdownItem>
 
             {/* Page path */}
-            <CopyToClipboard text={this.props.pagePath} onCopy={this.showToolTip}>
-              <DropdownItem tag="a">
-                <div className="d-inline-flex flex-column">
-                  <h6 className="mt-1 mb-2"><strong>{ t('copy_to_clipboard.Page path') }</strong></h6>
-                  <span className="small">{safePagePath}</span>
-                </div>
+            <CopyToClipboard text={pagePathWithParams} onCopy={this.showToolTip}>
+              <DropdownItem className="px-3">
+                <DropdownItemContents title={t('copy_to_clipboard.Page path')} contents={pagePathWithParams} />
+              </DropdownItem>
+            </CopyToClipboard>
+
+            <DropdownItem divider className="my-0"></DropdownItem>
+
+            {/* Page path URL */}
+            <CopyToClipboard text={pagePathUrl} onCopy={this.showToolTip}>
+              <DropdownItem className="px-3">
+                <DropdownItemContents title={t('copy_to_clipboard.Page URL')} contents={pagePathUrl} />
               </DropdownItem>
             </CopyToClipboard>
+
+            <DropdownItem divider className="my-0"></DropdownItem>
+
             {/* Parmanent Link */}
-            { this.props.pageId && (
-              <CopyToClipboard text={url} onCopy={this.showToolTip}>
-                <DropdownItem tag="a">
-                  <div className="d-inline-flex flex-column">
-                    <h6 className="mt-1 mb-2"><strong>{ t('copy_to_clipboard.Parmanent link') }</strong></h6>
-                    <span className="small">{url}</span>
-                  </div>
+            { pageId && (
+              <CopyToClipboard text={permalink} onCopy={this.showToolTip}>
+                <DropdownItem className="px-3">
+                  <DropdownItemContents title={t('copy_to_clipboard.Parmanent link')} contents={permalink} />
                 </DropdownItem>
               </CopyToClipboard>
             )}
+
+            <DropdownItem divider className="my-0"></DropdownItem>
+
             {/* Page path + Parmanent Link */}
-            { this.props.pageId && (
-              <CopyToClipboard text={`${this.props.pagePath}\n${url}`} onCopy={this.showToolTip}>
-                <DropdownItem tag="a">
-                  <div className="d-inline-flex flex-column">
-                    <h6 className="mt-1 mb-2"><strong>{ t('copy_to_clipboard.Page path and parmanent link') }</strong></h6>
-                    <span className="small mb-3">{safePagePath}</span>
-                    <span className="small">{url}</span>
-                  </div>
+            { pageId && (
+              <CopyToClipboard text={`${pagePathWithParams}\n${permalink}`} onCopy={this.showToolTip}>
+                <DropdownItem className="px-3">
+                  <DropdownItemContents title={t('copy_to_clipboard.Page path and parmanent link')} contents={<>{pagePathWithParams}<br />{permalink}</>} />
                 </DropdownItem>
               </CopyToClipboard>
             )}
+
+            <DropdownItem divider className="my-0"></DropdownItem>
+
             {/* Markdown Link */}
-            { this.props.pageId && (
-              <CopyToClipboard text={`[${this.props.pagePath}](${url})`} onCopy={this.showToolTip}>
-                <DropdownItem tag="a">
-                  <div className="d-inline-flex flex-column">
-                    <h6 className="mt-1 mb-2"><strong>{ t('copy_to_clipboard.Markdown link') }</strong></h6>
-                    <span className="small">{`[${safePagePath}](${url})`}</span>
-                  </div>
+            { pageId && (
+              <CopyToClipboard text={this.generateMarkdownLink()} onCopy={this.showToolTip}>
+                <DropdownItem className="px-3 text-wrap">
+                  <DropdownItemContents title={t('copy_to_clipboard.Markdown link')} contents={this.generateMarkdownLink()} isContentsWrap />
                 </DropdownItem>
               </CopyToClipboard>
             )}

+ 1 - 1
src/client/js/components/PageComment/Comment.jsx

@@ -200,7 +200,7 @@ class Comment extends React.PureComponent {
             <div className="page-comment-writer">
               <UserPicture user={creator} />
             </div>
-            <div className="page-comment-main ml-0">
+            <div className="page-comment-main">
               <div className="page-comment-creator">
                 <Username user={creator} />
               </div>

+ 1 - 1
src/client/js/components/PageEditor/HandsontableModal.jsx

@@ -437,7 +437,7 @@ export default class HandsontableModal extends React.PureComponent {
           Edit Table
         </ModalHeader>
         <ModalBody className="p-0 d-flex flex-column">
-          <div className="px-4 py-3 modal-navbar bg-light">
+          <div className="px-4 py-3 border-bottom bg-light">
             <button
               type="button"
               className="mr-4 data-import-button btn btn-secondary"

+ 1 - 1
src/client/js/components/PageEditorByHackmd.jsx

@@ -314,7 +314,7 @@ class PageEditorByHackmd extends React.Component {
 
       content = (
         <div>
-          <p className="text-center hackmd-status-label"><i className="fa fa-file-text"></i> HackMD is READY!</p>
+          <p className="text-muted text-center hackmd-status-label"><i className="fa fa-file-text"></i> HackMD is READY!</p>
           <div className="text-center hackmd-start-button-container mb-3">
             <button
               className="btn btn-info btn-lg waves-effect waves-light"

+ 7 - 15
src/client/js/components/PageList/PageListMeta.jsx

@@ -1,25 +1,17 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 import templateChecker from '@commons/util/template-checker';
+import { isTopPage } from '@commons/util/path-utils';
 
 export default class PageListMeta extends React.Component {
 
-  isPortalPath(path) {
-    if (path.match(/.*\/$/)) {
-      return true;
-    }
-
-    return false;
-  }
-
   render() {
-    // TODO isPortal()
-    const page = this.props.page;
+    const { page } = this.props;
 
-    // portal check
-    let portalLabel;
-    if (this.isPortalPath(page.path)) {
-      portalLabel = <span className="badge badge-info">PORTAL</span>;
+    // top check
+    let topLabel;
+    if (isTopPage(page.path)) {
+      topLabel = <span className="badge badge-info">TOP</span>;
     }
 
     // template check
@@ -45,7 +37,7 @@ export default class PageListMeta extends React.Component {
 
     return (
       <span className="page-list-meta">
-        {portalLabel}
+        {topLabel}
         {templateLabel}
         {commentCount}
         {likerCount}

+ 8 - 8
src/client/js/legacy/crowi.js

@@ -259,12 +259,12 @@ $(() => {
     return false;
   });
 
-  // rename/unportalize
-  $('#renamePage, #unportalize').on('shown.bs.modal', (e) => {
+  // rename
+  $('#renamePage').on('shown.bs.modal', (e) => {
     $('#renamePage #newPageName').focus();
-    $('#renamePage .msg, #unportalize .msg').hide();
+    $('#renamePage .msg').hide();
   });
-  $('#renamePageForm, #unportalize-form').submit(function(e) {
+  $('#renamePageForm').submit(function(e) {
     // create name-value map
     const nameValueMap = {};
     $(this).serializeArray().forEach((obj) => {
@@ -282,9 +282,9 @@ $(() => {
       // error
         if (!res.ok) {
           const linkPath = pathUtils.normalizePath(nameValueMap.new_path);
-          $('#renamePage .msg, #unportalize .msg').hide();
-          $(`#renamePage .msg-${res.code}, #unportalize .msg-${res.code}`).show();
-          $('#renamePage #linkToNewPage, #unportalize #linkToNewPage').html(`
+          $('#renamePage .msg').hide();
+          $(`#renamePage .msg-${res.code}`).show();
+          $('#renamePage #linkToNewPage').html(`
           <a href="${linkPath}">${linkPath} <i class="icon-login"></i></a>
         `);
         }
@@ -302,7 +302,7 @@ $(() => {
     $('#duplicatePage #duplicatePageName').focus();
     $('#duplicatePage .msg').hide();
   });
-  $('#duplicatePageForm, #unportalize-form').submit(function(e) {
+  $('#duplicatePageForm').submit(function(e) {
     // create name-value map
     const nameValueMap = {};
     $(this).serializeArray().forEach((obj) => {

+ 0 - 172
src/client/styles/agile-admin/inverse/colors/_apply-colors-dark.scss

@@ -1,172 +0,0 @@
-/*
- * Button
- */
-.btn-default {
-  &:hover,
-  &:focus,
-  &.active,
-  &.active:hover,
-  &.active:focus {
-    color: white;
-    background-color: lighten($bodycolor, 5%);
-  }
-}
-
-/*
-  * Form
-  */
-input.form-control,
-textarea.form-control {
-  color: lighten($bodytext, 30%);
-  background-color: darken($bodycolor, 5%);
-  border: 1px solid darken($border, 30%);
-}
-.form-control[disabled],
-.form-control[readonly] {
-  color: lighten($bodytext, 10%);
-  background-color: lighten($bodycolor, 5%);
-}
-.input-group .input-group-addon {
-  color: $dark;
-  background-color: rgba($topbar, 0.4);
-  border: 1px solid darken($border, 30%);
-  border-right: none;
-}
-
-/*
- * Dropdown
- */
-.dropdown-menu {
-  background-color: $bodycolor;
-  > li > a {
-    color: $bodytext;
-  }
-
-  .divider {
-    background-color: $border;
-  }
-}
-
-.modal {
-  .modal-header {
-    .close {
-      color: white;
-    }
-  }
-}
-
-/*
- * Panel
- */
-.panel {
-  &,
-  &.panel-white,
-  &.panel-default {
-    .panel-heading,
-    .panel-body {
-      color: $light;
-    }
-  }
-}
-
-/*
- * Table
- */
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td,
-.table > thead > tr > th,
-.table-bordered {
-  border-top: 1px solid $border;
-}
-
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid $border;
-}
-.table > thead > tr > th {
-  border-bottom: 1px solid $border;
-}
-
-.table-bordered {
-  border: 1px solid $border;
-}
-
-/*
- * GROWI page list
- */
-.page-list {
-  .page-list-ul {
-    > li {
-      > a strong {
-        color: lighten($bodytext, 25%);
-      }
-      > span.page-list-meta {
-        color: $bodytext;
-      }
-    }
-  }
-}
-
-/*
- * GROWI search page
- */
-.search-page {
-  .input-group-btn {
-    .btn-default {
-      border: 1px solid darken($border, 30%); // fit to input.form-control
-    }
-  }
-}
-
-/*
- * GROWI on-edit
- */
-.page-editor-footer {
-  #slack-mark-black {
-    display: none;
-  }
-}
-
-legend {
-  border-color: lighten($border, 10%);
-}
-.wiki {
-  h1 {
-    border-color: lighten($border, 10%);
-  }
-  h2 {
-    border-color: $border;
-  }
-}
-.editor-container .navbar-editor svg {
-  fill: $bodytext;
-}
-
-/*
- * GROWI admin page #themeOptions
- */
-.admin-page {
-  #themeOptions {
-    .theme-option-container.active a {
-      background-color: darken($themecolor, 15%);
-      border-color: darken($themecolor, 15%);
-    }
-  }
-}
-
-/*
- * GROWI comment form
- */
-.comment-form {
-  #slack-mark-black {
-    display: none;
-  }
-}

+ 0 - 231
src/client/styles/agile-admin/inverse/colors/antarctic.scss

@@ -1,231 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #000080;
-$themelight: #f0f8ff;
-$subthemecolor: black;
-$accentcolor: #ffd700;
-$sidebar-text: $themelight;
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: $themelight;
-$bgcolor-global: $themelight;
-$color-header: $subthemecolor;
-$color-global: $subthemecolor;
-$linktext: lighten(blue, 5%);
-$primary: $bgcolor-theme;
-$active-nav-tabs-bgcolor: $bgcolor-theme;
-$fillcolor-logo-mark: $themelight;
-$color-link-wiki: lighten($bgcolor-theme, 5%);
-$color-link-wiki-hover: lighten($color-link-wiki, 15%);
-$color-inline-code: #c7254e;
-$bgcolor-inline-code: #f9f2f4;
-$border: $subthemecolor;
-$border-original: $subthemecolor;
-$navbar-border: $bgcolor-theme;
-$background-color: rgba(
-  $color: $themelight,
-  $alpha: 0.8,
-);
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// change color of highlighted header in wiki (default: orange)
-.code-line,
-ul > .text-muted {
-  color: $subthemecolor;
-}
-
-.wiki {
-  h1 {
-    border-color: $subthemecolor;
-  }
-
-  .code-line.revision-head.highlighted {
-    color: $themelight;
-    background-color: lighten($bgcolor-theme, 50%);
-
-    .icon-note,
-    .icon-link {
-      color: $themelight;
-    }
-  }
-}
-
-// add background-image
-#wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-image: url('/images/themes/antarctic/bg.svg');
-  background-attachment: fixed;
-  background-position: center center;
-  background-size: cover;
-}
-
-.sidebar {
-  background: $bgcolor-theme;
-}
-
-table,
-.hljs,
-.help-block {
-  background-color: $background-color;
-}
-
-.grw-subnav,
-.nav-navbar {
-  background-color: $themelight;
-}
-
-.edit-button {
-  color: $themelight;
-}
-
-.editor-container .btn-open-dropzone {
-  border-top: none;
-}
-
-.help-block {
-  padding: 5px;
-}
-
-/*
- * Accentcolor (yellow)
- */
-
-.modal {
-  .modal-header {
-    border-bottom: 4px solid $accentcolor;
-  }
-}
-
-#wrapper > .navbar > .navbar-header {
-  border-bottom: 4px solid $accentcolor;
-}
-
-/*
- * Comments
- */
-
-.page-comment {
-  .page-comment-main {
-    box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);
-
-    .page-comment-creator > a {
-      border-bottom: 1px double $subthemecolor;
-    }
-  }
-}
-
-.growi .main {
-  .page-comments-row {
-    border-top-color: transparent;
-  }
-
-  .page-comment .page-comment-main,
-  .page-comment-form .comment-form-main {
-    background-color: $background-color;
-
-    &::before {
-      border-right-color: $background-color;
-    }
-
-    .nav.nav-tabs {
-      > li.active > a {
-        background: $bgcolor-theme;
-        border-bottom: solid 1px $bgcolor-theme;
-        border-bottom-color: $bgcolor-theme;
-      }
-    }
-  }
-}
-
-/*
- * Tabs
- */
-
-.nav.nav-tabs > li.active > a {
-  color: $themelight;
-}
-
-.text-info,
-body:not(.on-edit) .nav.nav-tabs {
-  > li > a {
-    color: $subthemecolor;
-  }
-
-  > li.active > a {
-    color: $themelight;
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 50%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-    background-color: $bgcolor-theme;
-  }
-}
-
-/*
- * Panel
- */
-
-.panel {
-  width: 80%;
-  margin: 0px auto;
-
-  &.panel-white,
-  &.panel-default {
-    border: 1px solid $subthemecolor;
-    border-color: $border-original;
-
-    .panel-heading {
-      color: $subthemecolor;
-      background-color: $background-color;
-    }
-  }
-}
-
-/*
- *  Right space for readable
- */
-
-.growi {
-  .revision-toc {
-    max-width: 360px;
-    background-color: $background-color;
-    border-radius: 5px;
-
-    .revision-toc-content {
-      padding: 10px;
-
-      ul {
-        padding-left: 5px;
-      }
-    }
-  }
-}
-
-/*
- *  Login page
- */
-
-.login-page > #wrapper > #page-wrapper {
-  background-image: url('/images/themes/antarctic/topimage.svg');
-  background-attachment: fixed;
-  background-position: center center;
-  background-size: cover;
-
-  .link-switch {
-    color: dimgray;
-
-    &:hover {
-      color: #000080;
-    }
-  }
-}
-
-/*
- *  for Hightlight-js
- */
-
-.hljs-ln {
-  background-color: transparent;
-}

+ 0 - 51
src/client/styles/agile-admin/inverse/colors/blue-night.scss

@@ -1,51 +0,0 @@
-@import '../variables';
-
-$basecolor: #061f2f;
-$bgcolor-theme: #0090c8;
-
-$linkcolor: #97d1f0;
-
-$bgcolor-navbar: #27343b;
-$bgcolor-global: #061f2f;
-$bgcolor-global: #061f2f;
-$color-header: #fff;
-$color-global: #d3d4d4;
-$linktext: $linkcolor;
-$linktext-hover: rgba($linktext, 0.8);
-$sidebar-text: #d3d4d4;
-$dark-themecolor: #4f5467;
-
-$primary: $bgcolor-theme;
-
-$fillcolor-logo-mark: lighten(desaturate($bgcolor-navbar, 10%), 15%);
-$color-link-wiki: $linkcolor;
-$color-link-wiki-hover: rgba($linktext, 0.8);
-
-$dark: darken($color-global, 5%);
-$border: #fff;
-$navbar-border: lighten($basecolor, 25%);
-$active-navbar-border: darken($navbar-border, 3%);
-$btn-default-bgcolor: darken($basecolor, 10%);
-$color-inline-code: #c1f1f0;
-$bgcolor-inline-code: #0a121b;
-
-@import 'apply-colors';
-@import 'apply-colors-dark';
-
-.wiki {
-  .highlighted {
-    background-color: lighten($bgcolor-theme, 20%);
-  }
-}
-
-.panel {
-  &,
-  &.panel-white,
-  &.panel-default {
-    border-color: $color-global;
-    .panel-heading {
-      color: $basecolor;
-      background-color: 1px solid $color-global;
-    }
-  }
-}

+ 0 - 130
src/client/styles/agile-admin/inverse/colors/christmas.scss

@@ -1,130 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #b3000c;
-$themelight: white;
-$subthemecolor: #017e20;
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: $themelight;
-$bgcolor-global: $themelight;
-$color-header: $subthemecolor;
-$color-global: black;
-$linktext: lighten(#0d5901, 5%);
-$linktext-hover: lighten($linktext, 12%);
-$sidebar-text: #ffffff;
-$primary: $bgcolor-theme;
-$fillcolor-logo-mark: lighten(desaturate($bgcolor-navbar, 50%), 50%);
-$color-link-wiki: lighten($bgcolor-theme, 5%);
-$color-link-wiki-hover: lighten($color-link-wiki, 15%);
-$color-inline-code: darken($subthemecolor, 5%);
-$bgcolor-inline-code: lighten($subthemecolor, 70%);
-$border-original: $border;
-$border: $subthemecolor;
-$navbar-border: $bgcolor-theme;
-$active-nav-tabs-bgcolor: white;
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// change color of highlighted header in wiki (default: orange)
-.wiki {
-  .code-line.revision-head.highlighted {
-    color: $themelight;
-    background-color: lighten($bgcolor-theme, 20%);
-
-    .icon-note,
-    .icon-link {
-      color: $themelight;
-    }
-  }
-}
-
-.sidebar {
-  background: $bgcolor-theme;
-}
-
-.rbt-menu {
-  background: $themelight;
-}
-
-#wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-image: url('/images/themes/christmas/christmas.jpg');
-  background-attachment: fixed;
-  background-size: cover;
-}
-
-.grw-subnav {
-  background-color: #ffffff;
-}
-
-#wrapper > .navbar > .navbar-header {
-  background-image: url('/images/themes/christmas/christmas-navbar.jpg');
-  border-bottom: 4px solid $subthemecolor;
-}
-
-/*
- * Tabs
- */
-body:not(.on-edit) .nav.nav-tabs {
-  > li.active > a {
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 0%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-  }
-}
-
-// login page
-.nologin {
-  .input-group {
-    .input-group-addon {
-      background-color: rgba(lighten(black, 10%), 0.6);
-    }
-    .form-control {
-      background-color: rgba(lighten(black, 10%), 0.6);
-    }
-  }
-
-  &.login-page {
-    .login-header,
-    .login-dialog {
-      background-color: rgba(#ccc, 0.5);
-    }
-    .link-switch {
-      color: #bd3425;
-    }
-  }
-}
-
-/*
- * Modal
- */
-.modal-dialog .modal-header.bg-primary {
-  background-image: url('/images/themes/christmas/christmas-navbar.jpg');
-  border-bottom: 2px solid $subthemecolor;
-}
-
-/*
- * Panel
- */
-.panel {
-  &.panel-white,
-  &.panel-default {
-    border-color: $border-original;
-    .panel-heading {
-      color: $dark;
-      background-color: $border-original;
-      border-bottom: 1px solid $border-original;
-    }
-  }
-}
-
-.panel.panel-primary {
-  border-color: #bd3425;
-  .panel-heading {
-    color: white;
-    background-color: $bgcolor-theme;
-    background-image: url('/images/themes/christmas/christmas-navbar.jpg');
-  }
-}

+ 0 - 37
src/client/styles/agile-admin/inverse/colors/future.scss

@@ -1,37 +0,0 @@
-@import '../variables';
-
-$basecolor: #16282d;
-$bgcolor-theme: rgba(11, 79, 104, 0.616);
-
-$bgcolor-navbar: #011414;
-$bgcolor-global: #fff;
-$bgcolor-global: $basecolor;
-$color-header: #d9a364;
-$color-global: lighten($basecolor, 35%);
-$linktext: lighten($basecolor, 45%);
-$linktext-hover: lighten($linktext, 80%);
-$sidebar-text: rgb(65, 133, 124);
-$dark-themecolor: #4f5467;
-
-$primary: $bgcolor-theme;
-$info: lighten($bgcolor-theme, 20%);
-
-$fillcolor-logo-mark: rgb(170, 245, 237);
-$color-link-wiki: saturate($color-global, 20%);
-$color-link-wiki-hover: darken($color-link-wiki, 5%);
-
-$dark: darken($color-global, 5%);
-$border: lighten($basecolor, 15%);
-$navbar-border: lighten($border, 10%);
-$active-navbar-border: darken($border, 3%);
-$btn-default-bgcolor: darken($basecolor, 10%);
-$bgcolor-inline-code: darken($bgcolor-global, 5%);
-
-@import 'apply-colors';
-@import 'apply-colors-dark';
-
-body:not(.on-edit) {
-  .grw-subnav {
-    border-bottom: 1px solid rgb(131, 228, 215);
-  }
-}

+ 0 - 87
src/client/styles/agile-admin/inverse/colors/halloween.scss

@@ -1,87 +0,0 @@
-@import '../variables';
-
-$basecolor: #0a010a;
-$bgcolor-theme: #aa4a04;
-$subthemecolor: #e9af2b;
-$linkcolor: #aa4a04;
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: #061f2f;
-$subthemecolor: #e9af2b;
-$bgcolor-global: #0f0101;
-$color-header: #e9af2b;
-$color-global: #e9af2b;
-$linktext: $linkcolor;
-$linktext-hover: rgba($linktext, 0.8);
-$sidebar-text: $bgcolor-theme;
-$dark-themecolor: #4f5467;
-$primary: $bgcolor-theme;
-$fillcolor-logo-mark: lighten($subthemecolor, 20%);
-$color-link-wiki: $linkcolor;
-$color-link-wiki-hover: rgba($linktext, 0.8);
-$dark: darken($color-global, 5%);
-$border: $bgcolor-theme;
-$navbar-border: lighten($basecolor, 25%);
-$active-navbar-border: darken($navbar-border, 3%);
-$active-nav-tabs-bgcolor: #231313;
-$btn-default-bgcolor: darken($basecolor, 10%);
-$color-inline-code: #a94f04;
-$bgcolor-inline-code: #0a121b;
-
-@import 'apply-colors';
-@import 'apply-colors-dark';
-
-.wiki {
-  .highlighted {
-    background-color: lighten($bgcolor-theme, 20%);
-  }
-}
-
-.panel {
-  &,
-  &.panel-white,
-  &.panel-default {
-    background-color: lighten($basecolor, 5%);
-    border-color: $color-global;
-
-    .panel-heading {
-      color: $basecolor;
-      background-color: 1px solid $color-global;
-    }
-  }
-}
-
-.rbt-menu {
-  background: lighten($basecolor, 7%);
-}
-
-.nav-pills > li > a:hover {
-  color: $white;
-  background: #d3671a;
-}
-
-#wrapper > .navbar > .navbar-header {
-  background-image: url('/images/themes/halloween/halloween-navbar.jpg');
-}
-
-#wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-image: url('/images/themes/halloween/halloween.jpg');
-  background-attachment: fixed;
-}
-
-.grw-subnav {
-  background-color: rgba(0, 0, 0, 0.3);
-}
-
-/*
- * Tabs
- */
-body:not(.on-edit) .nav.nav-tabs {
-  > li.active > a {
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 0%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-  }
-}

+ 0 - 132
src/client/styles/agile-admin/inverse/colors/island.scss

@@ -1,132 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #0c2a44;
-$themelight: rgba(183, 226, 219, 1);
-
-$subthemecolor: rgba($linktext, 0.8);
-$linkcolor: #3c6d72;
-$bgcolor-theme: #97cbc3;
-$bgcolor-navbar: #0c2a44;
-$bgcolor-global: $themelight;
-$bgcolor-global: lighten($themelight, 10%);
-$color-header: #3c6d72;
-$color-global: #3c6d72;
-$linktext: $linkcolor;
-$linktext-hover: rgba($linktext, 0.8);
-$sidebar-text: $bgcolor-theme;
-$primary: $bgcolor-theme;
-$fillcolor-logo-mark: lighten($themelight, 10%);
-$color-link-wiki: $linkcolor;
-$color-link-wiki-hover: rgba($linktext, 0.8);
-$dark: darken($color-global, 5%);
-$border: #76b1a8;
-$navbar-border: #76b1a8;
-$active-navbar-border: darken($navbar-border, 13%);
-$active-nav-tabs-bgcolor: #dbf0ed;
-$btn-default-bgcolor: darken($bgcolor-theme, 10%);
-$color-inline-code: #8f5313;
-$bgcolor-inline-code: darken($themelight, 3%);
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-.wiki {
-  .highlighted {
-    background-color: lighten($bgcolor-theme, 20%);
-  }
-}
-
-.panel {
-  &,
-  &.panel-white,
-  &.panel-default {
-    color: $bgcolor-theme;
-    background-color: lighten($bgcolor-theme, 30%);
-    border-color: white;
-
-    .panel-heading {
-      color: $bgcolor-theme;
-      background-color: white;
-    }
-
-    ul {
-      li {
-        a {
-          color: darken($bgcolor-theme, 15%);
-        }
-      }
-    }
-  }
-}
-
-/* GROWI page list */
-.page-list {
-  .page-list-ul {
-    > li {
-      > a strong {
-        color: $linkcolor;
-      }
-    }
-  }
-}
-
-.rbt-menu {
-  background: lighten($themelight, 5%);
-}
-
-#wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-image: url('/images/themes/island/island.png');
-  background-attachment: fixed;
-}
-
-/*
- * Tabs
- */
-body:not(.on-edit) .nav.nav-tabs {
-  > li.active > a {
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 0%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-  }
-}
-
-/* Table */
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td,
-.table > thead > tr > th,
-.table-bordered {
-  border-top: 1px solid $border;
-}
-
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid $border;
-}
-
-.table > thead > tr > th {
-  border-bottom: 1px solid $border;
-}
-
-.table-bordered {
-  border: 1px solid $border;
-}
-
-// login page
-.nologin {
-  &.login-page {
-    > #wrapper > #page-wrapper {
-      background-image: unset;
-    }
-  }
-}

+ 0 - 43
src/client/styles/agile-admin/inverse/colors/kibela.scss

@@ -1,43 +0,0 @@
-@import '../variables';
-
-$radius: 3px;
-
-$bgcolor-theme: rgb(18, 86, 163);
-$themelight: #f4f5f6;
-$subthemecolor: rgb(90, 149, 216);
-
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: $themelight;
-$bgcolor-global: $themelight;
-
-$color-header: $bgcolor-theme;
-$color-global: #3c4a60;
-$linktext: rgb(74, 109, 204);
-$linktext-hover: lighten($linktext, 12%);
-$sidebar-text: $bgcolor-theme;
-
-$primary: $bgcolor-theme;
-$info: lighten($bgcolor-theme, 20%);
-
-$fillcolor-logo-mark: lighten($bgcolor-theme, 20%);
-$color-link-wiki: lighten($bgcolor-theme, 20%);
-$color-link-wiki-hover: lighten($color-link-wiki, 20%);
-$color-inline-code: $subthemecolor;
-$bgcolor-inline-code: lighten($subthemecolor, 70%);
-$border: rgba(181, 203, 247, 0.61);
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// change color of highlighted header in wiki (default: orange)
-.wiki {
-  .code-line.revision-head.highlighted {
-    color: $themelight;
-    background-color: lighten($bgcolor-theme, 20%);
-
-    .icon-note,
-    .icon-link {
-      color: $themelight;
-    }
-  }
-}

+ 0 - 40
src/client/styles/agile-admin/inverse/colors/mono-blue.scss

@@ -1,40 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #00587a;
-$themelight: #f7fbfd;
-$subthemecolor: #186718;
-
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: $themelight;
-$bgcolor-global: $themelight;
-
-$color-header: $bgcolor-theme;
-$color-global: $bgcolor-theme;
-$linktext: lighten($bgcolor-theme, 5%);
-$linktext-hover: lighten($linktext, 12%);
-$sidebar-text: $bgcolor-theme;
-
-$primary: $bgcolor-theme;
-$info: lighten($bgcolor-theme, 20%);
-
-$fillcolor-logo-mark: lighten(desaturate($bgcolor-navbar, 30%), 20%);
-$color-link-wiki: lighten($bgcolor-theme, 20%);
-$color-link-wiki-hover: lighten($color-link-wiki, 20%);
-$color-inline-code: $subthemecolor;
-$bgcolor-inline-code: lighten($subthemecolor, 70%);
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// change color of highlighted header in wiki (default: orange)
-.wiki {
-  .code-line.revision-head.highlighted {
-    color: $themelight;
-    background-color: lighten($bgcolor-theme, 20%);
-
-    .icon-note,
-    .icon-link {
-      color: $themelight;
-    }
-  }
-}

+ 0 - 22
src/client/styles/agile-admin/inverse/colors/nature.scss

@@ -1,22 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #460039;
-
-$bgcolor-navbar: #118050;
-$bgcolor-global: #fff;
-$bgcolor-global: #fefffd;
-
-$color-header: #46694e;
-$color-global: #333333;
-$linktext: lighten($bgcolor-theme, 5%);
-$linktext-hover: lighten($linktext, 12%);
-$sidebar-text: #5c7253;
-
-$primary: $bgcolor-theme;
-
-$fillcolor-logo-mark: lighten(desaturate($bgcolor-navbar, 30%), 20%);
-$color-link-wiki: lighten($bgcolor-theme, 20%);
-$color-link-wiki-hover: lighten($color-link-wiki, 20%);
-
-@import 'apply-colors';
-@import 'apply-colors-light';

+ 0 - 206
src/client/styles/agile-admin/inverse/colors/spring.scss

@@ -1,206 +0,0 @@
-@import '../variables';
-$radius: 5px;
-
-$themecolor: #ffb8c6;
-$buttoncolor: rgba(255, 184, 197, 0.5);
-$subthemecolor: #67a856;
-$themelight: #fff0f5;
-$topbar: $themecolor;
-$sidebar: #fff;
-$bodycolor: $sidebar;
-$headingtext: $subthemecolor;
-$bodytext: #333333;
-$linktext: $subthemecolor;
-$linktext-hover: lighten($linktext, 20%);
-$sidebar-text: #38495a;
-$accentcolor: #e08dbc;
-$accentlight: rgba(224, 141, 188, 0.2);
-$accentdark: rgba(224, 141, 188, 0.5);
-$background-color: rgba(171, 224, 174, 0.4);
-$third-main-color: antiquewhite;
-$textcolor: dimgray;
-$primary: #e87b98;
-$logo-mark-fill: lighten(desaturate($topbar, 10%), 15%);
-$wikilinktext: $subthemecolor;
-$wikilinktext-hover: gba(171, 224, 174, 0.9);
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// add background-image
-.main-container > #wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-color: rgba(255, 255, 255, 0.8);
-  background-image: url('/images/themes/spring/spring02.svg');
-  background-attachment: fixed;
-  background-position: bottom;
-  background-size: cover;
-}
-
-.sidebar {
-  background: $themelight;
-}
-
-/*
- * user's page
- */
-
-.growi .main .page-comments-row {
-  border-top-color: $third-main-color;
-}
-
-.modal {
-  .modal-header {
-    border-bottom: 4px solid $accentcolor;
-  }
-}
-
-#wrapper > .navbar > .navbar-header {
-  border-bottom: 4px solid $accentcolor;
-}
-
-/*
- * Comments
- */
-
-.page-comment {
-  .page-comment-main {
-    box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);
-
-    .page-comment-creator > a {
-      border-bottom: 1px double $subthemecolor;
-    }
-  }
-}
-
-div .page-comment-main {
-  border-radius: 10px;
-}
-
-// add comment
-div .comment-form-main {
-  border-radius: 10px;
-}
-
-/*
- * Tabs
- */
-
-.nav.nav-tabs > li.active > a {
-  color: $subthemecolor;
-}
-
-.text-info,
-body:not(.on-edit) .nav.nav-tabs {
-  > li > a {
-    color: $subthemecolor;
-  }
-
-  > li.active > a {
-    color: $subthemecolor;
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 50%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-    background-color: $themelight;
-  }
-}
-
-/*
- * button
- */
-
-.btn-link {
-  color: $subthemecolor;
-}
-
-.label-default {
-  background-color: $primary;
-}
-
-div .btn-inverse {
-  background-color: $themecolor;
-  border: $themecolor;
-}
-
-div .btn-default {
-  background-color: $accentlight;
-  border-color: $accentdark;
-}
-
-.admin-page .btn-group.btn-toggle .btn.active[data-active-class='primary'] {
-  color: $sidebar;
-  background-color: $accentcolor;
-  border-color: $accentdark;
-}
-
-/*
- * GROWI admin page #themeOptions
- */
-.admin-page {
-  #themeOptions {
-    .theme-option-container.active a {
-      border-color: $accentcolor;
-    }
-  }
-}
-
-button .btn-outline {
-  background-color: $themelight;
-}
-
-input .btn-secondary {
-  background: $themecolor;
-}
-
-/*
- *  Login page
- */
-
-.login-page > #wrapper > #page-wrapper {
-  background: $themelight;
-  background-image: url('/images/themes/spring/spring.svg');
-  background-attachment: fixed;
-  background-position: bottom;
-  background-size: cover;
-
-  .link-switch {
-    color: $themecolor;
-
-    &:hover {
-      color: $subthemecolor;
-    }
-  }
-}
-
-/*
- *  letter
- */
-
-.help-block {
-  padding: 5px;
-  color: $textcolor;
-  background-color: $accentlight;
-  border-radius: 3px;
-}
-
-.panel-primary a {
-  color: $subthemecolor;
-}
-
-/*
- *  panel
- */
-
-.panel-timeline > .panel-heading {
-  background-color: $third-main-color;
-}
-
-.panel-default > .panel-heading {
-  background-color: $third-main-color;
-}
-
-.panel .panel-body {
-  border-radius: 10px;
-}

+ 0 - 90
src/client/styles/agile-admin/inverse/colors/wood.scss

@@ -1,90 +0,0 @@
-@import '../variables';
-
-$bgcolor-theme: #aaa45f;
-$themelight: #f5f3ee;
-$subthemecolor: #dddebf;
-$bgcolor-navbar: $bgcolor-theme;
-$bgcolor-global: $themelight;
-$bgcolor-global: $themelight;
-$color-header: #577254;
-$color-global: #7c7a70;
-$linktext: lighten(#6d8969, 5%);
-$linktext-hover: lighten($linktext, 12%);
-$sidebar-text: #859083;
-$primary: $bgcolor-theme;
-$info: lighten($bgcolor-theme, 10%);
-$fillcolor-logo-mark: lighten(desaturate($bgcolor-navbar, 50%), 50%);
-$color-link-wiki: lighten($bgcolor-theme, 5%);
-$color-link-wiki-hover: lighten($color-link-wiki, 15%);
-$color-inline-code: darken($bgcolor-theme, 20%);
-$bgcolor-inline-code: lighten($subthemecolor, 70%);
-$active-nav-tabs-bgcolor: #fffffc;
-
-@import 'apply-colors';
-@import 'apply-colors-light';
-
-// change color of highlighted header in wiki (default: orange)
-.wiki {
-  .code-line.revision-head.highlighted {
-    color: $themelight;
-    background-color: lighten($bgcolor-theme, 20%);
-
-    .icon-note,
-    .icon-link {
-      color: $themelight;
-    }
-  }
-}
-
-.rbt-menu {
-  background: $themelight;
-}
-
-#wrapper > #page-wrapper,
-.page-editor-preview-container {
-  background-image: url('/images/themes/wood/wood.jpg');
-  background-attachment: fixed;
-}
-
-.grw-subnav {
-  background-color: rgba(226, 221, 192, 0.205);
-}
-
-#wrapper > .navbar > .navbar-header {
-  background-image: url('/images/themes/wood/wood-navbar.jpg');
-}
-
-/*
- * Tabs
- */
-body:not(.on-edit) .nav.nav-tabs {
-  > li.active > a {
-    background: linear-gradient(
-      rgba($active-nav-tabs-bgcolor, 0) 0%,
-      rgba($active-nav-tabs-bgcolor, 0) 90%,
-      $active-nav-tabs-bgcolor 100%
-    ); // overwrite only the bottom pixel
-  }
-}
-
-// login page
-.nologin {
-  .input-group {
-    .input-group-addon {
-      background-color: rgba(lighten(black, 10%), 0.6);
-    }
-    .form-control {
-      background-color: rgba(lighten(black, 10%), 0.6);
-    }
-  }
-
-  &.login-page {
-    .login-header,
-    .login-dialog {
-      background-color: rgba(#ccc, 0.5);
-    }
-    .link-switch {
-      color: $color-global;
-    }
-  }
-}

+ 10 - 10
src/client/styles/agile-admin/inverse/variables.scss

@@ -4,7 +4,7 @@
 
 // $basefont1:'Rubik', sans-serif;
 // $basefont2:'Rubik', sans-serif;
-$basefont1: Lato, -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif !default;
+// $basefont1: Lato, -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif !default;
 // $basefont2: Lato, -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif !default;
 
 /* GROWI Color */
@@ -17,11 +17,11 @@ $basefont1: Lato, -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN'
 // $warning: #ffa32b !default;
 // $primary: $growi-blue !default;
 // $info: #009fbb !default;
-$muted: #98a6ad !default;
+// $muted: #98a6ad !default;
 // $dark: #3e4d6c !default;
-$inverse: #3e4d6c !default;
+// $inverse: #3e4d6c !default;
 // $light: #e4e7ea !default;
-$extralight: #f7fafc !default;
+// $extralight: #f7fafc !default;
 
 /*Normal Color*/
 // $white: #ffffff !default;
@@ -29,16 +29,16 @@ $extralight: #f7fafc !default;
 // $purple: #7b00ce !default;
 // $blue: #0d00c5 !default;
 // $yellow: #cccf0e !default;
-$border: #f0f0f0 !default;
+// $border: #f0f0f0 !default;
 // $megna: #00b5c2 !default;
 
 /*Theme Colors*/
 // $topbar: #3c4451 !default;
 // $sidebar: #4f5467 !default;
 // $bodycolor: #fff !default;
-$headingtext: #2b2b2b !default;
-$bodytext: #686868 !default;
-$linktext: $inverse !default;
+// $headingtext: #2b2b2b !default;
+// $bodytext: #686868 !default;
+// $linktext: $inverse !default;
 // $linktext-hover: lighten($inverse, 20%) !default;
 // $sidebar-text: #54667a !default;
 // $themecolor: #ff6849 !default;
@@ -50,12 +50,12 @@ $linktext: $inverse !default;
 // $dark-text: #848a96 !default;
 // $navbar-border: #ccc !default;
 // $active-navbar-border: lighten($navbar-border, 10%) !default;
-$btn-default-bgcolor: darken(#fff, 10%) !default;
+// $btn-default-bgcolor: darken(#fff, 10%) !default;
 // $color-inline-code: #c7254e !default;
 // $bgcolor-inline-code: #f9f2f4 !default;
 
 /*Border radius*/
-$radius: 0 !default;
+// $radius: 0 !default;
 
 /*Preloader*/
 /*

+ 5 - 6
src/client/styles/scss/_comment_growi.scss

@@ -2,11 +2,6 @@
   %comment-section {
     position: relative;
     padding: 1em;
-    margin-left: 4.5em;
-
-    @include media-breakpoint-down(xs) {
-      margin-left: 3.5em;
-    }
 
     // speech balloon
     &:before {
@@ -75,7 +70,7 @@
     .page-comment-main {
       @extend %comment-section;
       @include media-breakpoint-up(sm) {
-        margin-left: 4.5em !important;
+        margin-left: 4.5em;
       }
       @include media-breakpoint-down(xs) {
         &:before {
@@ -129,6 +124,10 @@
     // seciton
     .comment-form-main {
       @extend %comment-section;
+      margin-left: 4.5em;
+      @include media-breakpoint-down(xs) {
+        margin-left: 3.5em;
+      }
     }
 
     // textarea

+ 5 - 5
src/client/styles/scss/_comment_kibela.scss

@@ -3,11 +3,6 @@
   %comment-section {
     position: relative;
     padding: 1em;
-    margin-left: 4.5em;
-
-    @include media-breakpoint-down(xs) {
-      margin-left: 3.5em;
-    }
 
     // speech balloon
     &:before {
@@ -69,6 +64,7 @@
     // コメントセクション
     .page-comment-main {
       @extend %comment-section;
+      margin-left: 4.5em;
       background: #e6e9ec;
       border-radius: 0.35em;
     }
@@ -123,6 +119,10 @@
     // seciton
     .comment-form-main {
       @extend %comment-section;
+      margin-left: 4.5em;
+      @include media-breakpoint-down(xs) {
+        margin-left: 3.5em;
+      }
       background: #e6e9ec;
       border-radius: 0.35em;
       .CodeMirror {

+ 0 - 12
src/client/styles/scss/_handsontable.scss

@@ -23,18 +23,6 @@
 .modal.in .modal-dialog.handsontable-modal {
   transform: none;
 
-  .modal-navbar {
-    border-bottom: $border 1px solid;
-  }
-
-  .data-import-form {
-    color: $headingtext;
-
-    .btn + .btn {
-      margin-left: 5px;
-    }
-  }
-
   .data-import-button {
     position: relative;
     padding-right: 35px;

+ 0 - 5
src/client/styles/scss/_layout_kibela.scss

@@ -113,11 +113,6 @@ body.kibela {
     }
   }
 
-  /* button */
-  .btn {
-    // border-radius: $radius;
-  }
-
   /* edit */
   .CodeMirror {
     border-radius: 0.35em;

+ 3 - 2
src/client/styles/scss/_login.scss

@@ -1,10 +1,11 @@
 .nologin {
   $gray-800-for-login: darken(white, 30%);
+  $color-gradient: #3e4d6c;
 
   // background color
-  background: linear-gradient(45deg, darken($inverse, 30%) 0%, hsla(340, 100%, 55%, 0) 70%),
+  background: linear-gradient(45deg, darken($color-gradient, 30%) 0%, hsla(340, 100%, 55%, 0) 70%),
     linear-gradient(135deg, $growi-green 10%, hsla(225, 95%, 50%, 0) 70%), linear-gradient(225deg, $growi-blue 10%, hsla(140, 90%, 50%, 0) 80%),
-    linear-gradient(315deg, darken($inverse, 25%) 100%, hsla(35, 95%, 55%, 0) 70%);
+    linear-gradient(315deg, darken($color-gradient, 25%) 100%, hsla(35, 95%, 55%, 0) 70%);
 
   #page-wrapper {
     background: none;

+ 0 - 1
src/client/styles/scss/_on-edit.scss

@@ -248,7 +248,6 @@ body.on-edit {
 
     .hackmd-status-label {
       font-size: 3em;
-      color: $muted;
     }
 
     .hackmd-resume-button-container,

+ 0 - 51
src/client/styles/scss/_override-bootstrap.scss

@@ -97,57 +97,6 @@
     }
   }
 
-  // agile-admin style
-  .dropdown-menu {
-    padding-bottom: 8px;
-    margin-top: 0px;
-    border: 1px solid $border;
-    border-radius: $radius;
-    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.05) !important;
-  }
-
-  .dropdown-menu > li > a {
-    width: 100%;
-    padding: 9px 20px;
-  }
-
-  .dropdown-menu > li > a:focus,
-  .dropdown-menu > li > a:hover {
-    background: $extralight;
-  }
-
-  // btn-light (substitute for btn-default of bootstrap3)  (agile-admin style)
-  .btn-light,
-  .btn-light.disabled {
-    color: $bodytext;
-    $this-color: $btn-default-bgcolor;
-    background: $this-color;
-    border: 1px solid $this-color;
-
-    &:hover,
-    &:focus,
-    &.focus {
-      color: $bodytext;
-      background: $this-color;
-      border: 1px solid $this-color;
-      opacity: 0.8;
-    }
-
-    &:active &.active {
-      box-shadow: none;
-    }
-  }
-
-  .btn-light.btn-outline {
-    background-color: transparent;
-
-    &:hover,
-    &:focus,
-    &.focus {
-      background: $btn-default-bgcolor;
-    }
-  }
-
   //Modals
   .modal-content {
     box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.1);

+ 1 - 10
src/client/styles/scss/_page.scss

@@ -31,7 +31,7 @@
     .revision-history-outer {
       // add border-top except of first element
       &:not(:first-of-type) {
-        border-top: 1px solid $border;
+        @extend .border-top;
       }
 
       .revision-history-main {
@@ -132,15 +132,6 @@
     z-index: 14;
     font-size: 12px;
     line-height: 1;
-    color: $linktext;
-    background-color: transparent;
-    border: 1px solid $linktext;
-    opacity: 1;
-
-    &:hover {
-      color: $white;
-      background-color: $linktext;
-    }
   }
 }
 

+ 0 - 6
src/client/styles/scss/_sidebar.scss

@@ -11,12 +11,6 @@
     // Adjust to be on top of the growi subnavigation
     z-index: $zindex-sticky + 5;
   }
-  div[class$='-Outer'] {
-    div[class$='-Shadow'] {
-      background: unset;
-      border-right: 1px solid $border;
-    }
-  }
 
   .grw-global-item-container {
     i {

+ 5 - 5
src/client/styles/scss/_staff_credit.scss

@@ -2,8 +2,11 @@
 .staff-credit {
   // attached !important for updating from .modal-dialog class style
   width: 80vw !important;
-  height: 80vh !important;
   max-width: initial !important;
+  height: 80vh !important;
+
+  font-family: 'Press Start 2P', $font-family-for-staff-credit;
+  color: white;
   // see https://css-tricks.com/old-timey-terminal-styling/
   @mixin old-timey-terminal-styling() {
     text-shadow: 0 0 10px #c8c8c8;
@@ -11,16 +14,13 @@
     background-image: radial-gradient(rgba(50, 100, 100, 0.75), black 120%);
   }
 
-  font-family: 'Press Start 2P', $basefont1;
-  color: white;
-
   h1,
   h2,
   h3,
   h4,
   h5,
   h6 {
-    font-family: 'Press Start 2P', $basefont1;
+    font-family: 'Press Start 2P', $font-family-for-staff-credit;
     color: white;
   }
 

+ 1 - 0
src/client/styles/scss/_variables.scss

@@ -2,6 +2,7 @@
 $growi-green: #74bc46;
 $growi-blue: #175fa5;
 
+$font-family-for-staff-credit: Lato, -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif !default;
 $font-family-monospace-not-strictly: Monaco, Menlo, Consolas, 'Courier New', MeiryoKe_Gothic, monospace;
 
 //== Layout

+ 19 - 0
src/client/styles/scss/molecules/copy-dropdown.scss

@@ -0,0 +1,19 @@
+.grw-copy-dropdown {
+  .dropdown-menu {
+    .dropdown-header {
+      margin-bottom: 0.5em;
+      font-size: 1.1em;
+    }
+
+    // unset active styles
+    .dropdown-item:active {
+      color: unset;
+      background-color: unset;
+    }
+
+    .well {
+      font-size: 0.6em;
+      word-break: break-all;
+    }
+  }
+}

+ 3 - 0
src/client/styles/scss/style-app.scss

@@ -20,6 +20,9 @@
 @import 'atoms/spinners';
 @import 'atoms/custom_control';
 
+// molecules
+@import 'molecules/copy-dropdown';
+
 // growi component
 @import 'admin';
 @import 'attachments';

+ 0 - 14
src/client/styles/scss/theme/_apply-colors-dark.scss

@@ -1,17 +1,3 @@
-/*
- * Button
- */
-.btn-light {
-  &:hover,
-  &:focus,
-  &.active,
-  &.active:hover,
-  &.active:focus {
-    color: $light;
-    background-color: lighten($bgcolor-global, 5%);
-  }
-}
-
 /*
   * Form
   */

+ 6 - 0
src/client/styles/scss/theme/_apply-colors.scss

@@ -128,6 +128,12 @@ $input-focus-color: $color-global;
       background-color: $bgcolor-sidebar-context;
     }
   }
+  div[class$='-Outer'] {
+    div[class$='-Shadow'] {
+      background: unset;
+      border-right: 1px solid $gray-300;
+    }
+  }
 }
 
 /*

+ 99 - 6
src/client/styles/scss/theme/future.scss

@@ -1,8 +1,101 @@
-// import colors
-@import '../../agile-admin/inverse/colors/future';
+@import '../variables';
+@import '../override-bootstrap-variables';
 
-// apply agile-admin theme
-@import '../../agile-admin/inverse/style';
+$themecolor: #16282d;
+$themelight: rgba(11, 79, 104, 0.616);
+$accentcolor: #66eddf;
 
-// override
-@import 'override-agileadmin';
+$primary: $themelight;
+$dark: darken($themecolor, 5%);
+
+html[light],
+html[dark] {
+  // Background colors
+  $bgcolor-global: $themecolor;
+  $bgcolor-navbar: #011414;
+  $bgcolor-inline-code: darken($themecolor, 5%);
+  $bgcolor-card: darken($themecolor, 5%);
+
+  // Font colors
+  $color-global: lighten($themecolor, 35%);
+  $color-reversal: #eeeeee;
+  $color-header: #d9a364;
+  $color-link: lighten($primary, 20%);
+  $color-link-hover: lighten($color-link, 20%);
+  $color-link-wiki: darken($themecolor, 5%);
+  $color-link-wiki-hover: darken($color-link-wiki, 5%);
+  $color-link-nabvar: $color-reversal;
+  $color-inline-code: #c7254e;
+  $color-search: #050a0b;
+
+  // List Group colors
+  $color-list: $color-global;
+  $bgcolor-list: transparent;
+  $color-list-active: $color-reversal;
+  $bgcolor-list-active: $primary;
+  $color-list-hover: $color-reversal;
+
+  // Logo colors
+  $bgcolor-logo: darken($themecolor, 10%);
+  $fillcolor-logo-mark: lighten($accentcolor, 15%);
+
+  // Icon colors
+  $color-editor-icons: $color-global;
+
+  // Border colors
+  $border-color-theme: #407483;
+
+  // Dropdown colors
+  $bgcolor-dropdown-link-active: $primary;
+  $color-dropdown-link-active: $color-reversal;
+  $color-dropdown-link-hover: $color-global;
+
+  // alert
+  $color-alert: $color-reversal;
+
+  // badge
+  $color-badge: $color-reversal;
+
+  // Sidebar
+  $bgcolor-sidebar: $bgcolor-navbar;
+  $color-sidebar-context: $color-reversal;
+  $bgcolor-sidebar-context: lighten($bgcolor-navbar, 10%);
+
+  @import 'apply-colors';
+  @import 'apply-colors-dark';
+
+  // headers
+  @for $i from 1 through 6 {
+    h#{$i} {
+      color: $color-header;
+    }
+  }
+
+  // Navs {
+  .nav-tabs {
+    border-bottom: $border-color-theme 1px solid;
+    .nav-link {
+      &:hover {
+        border-color: darken($border-color-theme, 10%);
+        border-bottom: none;
+      }
+      &.active {
+        color: $color-link;
+        background-color: transparent;
+        border-color: $border-color-theme;
+      }
+    }
+  }
+
+  // Search Top
+  .search-top {
+    .input-group-prepend .dropdown-toggle {
+      color: #5193a5;
+      background-color: $color-search;
+      border-color: $color-search;
+      &:hover {
+        background-color: darken($color-search, 10%);
+      }
+    }
+  }
+}

+ 9 - 0
src/lib/util/path-utils.js

@@ -1,3 +1,11 @@
+/**
+ * Whether path is the top page
+ * @param {string} path
+ * @returns {boolean}
+ */
+const isTopPage = (path) => {
+  return path === '/';
+};
 
 /**
  * Whether path belongs to the trash page
@@ -40,6 +48,7 @@ const userPageRoot = (user) => {
 };
 
 module.exports = {
+  isTopPage,
   isTrashPage,
   isUserPage,
   userPageRoot,

+ 27 - 0
src/migrations/20200514001356-update-theme-color-for-dark.js

@@ -0,0 +1,27 @@
+require('module-alias/register');
+const logger = require('@alias/logger')('growi:migrate:update-theme-color-for-dark');
+
+const mongoose = require('mongoose');
+const config = require('@root/config/migrate');
+
+const { getModelSafely } = require('@commons/util/mongoose-utils');
+
+module.exports = {
+  async up(db, client) {
+    logger.info('Apply migration');
+    mongoose.connect(config.mongoUri, config.mongodb.options);
+
+    const Config = getModelSafely('Config') || require('@server/models/config')();
+
+    await Promise.all([
+      await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('default-dark') }, { value: JSON.stringify('default') }), // update default-dark
+      await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('blue-night') }, { value: JSON.stringify('mono-blue') }), // update blue-night
+    ]);
+
+    logger.info('Migration has successfully applied');
+  },
+
+  async down(db, client) {
+    // do not rollback
+  },
+};

+ 4 - 11
src/server/models/page.js

@@ -14,6 +14,7 @@ const differenceInYears = require('date-fns/differenceInYears');
 
 const { pathUtils } = require('growi-commons');
 const templateChecker = require('@commons/util/template-checker');
+const { isTopPage } = require('@commons/util/path-utils');
 const escapeStringRegexp = require('escape-string-regexp');
 
 const ObjectId = mongoose.Schema.Types.ObjectId;
@@ -291,14 +292,6 @@ module.exports = function(crowi) {
     pageEvent.on('update', pageEvent.onUpdate);
   }
 
-  function isPortalPath(path) {
-    if (path.match(/.*\/$/)) {
-      return true;
-    }
-
-    return false;
-  }
-
   function validateCrowi() {
     if (crowi == null) {
       throw new Error('"crowi" is null. Init User model with "crowi" argument first.');
@@ -317,8 +310,8 @@ module.exports = function(crowi) {
     return false;
   };
 
-  pageSchema.methods.isPortal = function() {
-    return isPortalPath(this.path);
+  pageSchema.methods.isTopPage = function() {
+    return isTopPage(this.path);
   };
 
   pageSchema.methods.isTemplate = function() {
@@ -991,7 +984,7 @@ module.exports = function(crowi) {
 
     let grant = options.grant;
     // force public
-    if (isPortalPath(path)) {
+    if (isTopPage(path)) {
       grant = GRANT_PUBLIC;
     }
 

+ 5 - 9
src/server/routes/page.js

@@ -334,8 +334,8 @@ module.exports = function(crowi, app) {
     return res.render('page_presentation', renderVars);
   }
 
-  async function showPageListForCrowiBehavior(req, res, next) {
-    const portalPath = pathUtils.addTrailingSlash(getPathFromRequest(req));
+  async function showTopPage(req, res, next) {
+    const portalPath = req.path;
     const revisionId = req.query.revision;
 
     const view = 'customlayout-selector/page_list';
@@ -414,19 +414,15 @@ module.exports = function(crowi, app) {
   };
 
   actions.showTopPage = function(req, res) {
-    return showPageListForCrowiBehavior(req, res);
+    return showTopPage(req, res);
   };
 
   /**
-   * switch action by behaviorType
+   * Redirect to the page without trailing slash
    */
-  /* eslint-disable no-else-return */
   actions.showPageWithEndOfSlash = function(req, res, next) {
-    const path = getPathFromRequest(req); // end of slash should be omitted
-    // redirect and showPage action will be triggered
-    return res.redirect(path);
+    return res.redirect(pathUtils.removeTrailingSlash(req.path));
   };
-  /* eslint-enable no-else-return */
 
   /**
    * switch action

+ 1 - 2
src/server/views/layout-growi/page_list.html

@@ -34,7 +34,7 @@
 
   </div>
 
-  <div class="row page-list d-edit-none d-print-none {% if page.isPortal() %}mt-5{% endif %}">
+  <div class="row page-list d-edit-none d-print-none {% if page.isTopPage() %}mt-5{% endif %}">
     <div class="col-md-10">
       {% include '../widget/page_list_and_timeline.html' %}
     </div>
@@ -55,6 +55,5 @@
   </div>
   <div id="crowi-modals">
     {% include '../widget/page_modals.html' %}
-    {% include '../modal/unportalize.html' %}
   </div>
 {% endblock %}

+ 1 - 2
src/server/views/layout-kibela/page_list.html

@@ -32,7 +32,7 @@
 
 </div>
 
-  <div class="row page-list bg-white round-corner grw-pt-10px my-5 d-edit-none {% if page.isPortal() %}mt-5{% endif %}">
+  <div class="row page-list bg-white round-corner grw-pt-10px my-5 d-edit-none {% if page.isTopPage() %}mt-5{% endif %}">
     <div class="col">
       {% include '../widget/page_list_and_timeline_kibela.html' %}
     </div>
@@ -53,6 +53,5 @@
 </div>
 <div id="crowi-modals">
   {% include '../widget/page_modals.html' %}
-  {% include '../modal/unportalize.html' %}
 </div>
 {% endblock %}

+ 2 - 0
src/server/views/modal/create_page.html

@@ -28,6 +28,7 @@
           </div>
         </form>
 
+        {% if !isTrashPage() %}
         <form id="create-page-under-tree" role="form">
           <div class="row form-group">
             <fieldset class="col-12 mb-4">
@@ -80,6 +81,7 @@
             </div>
           </fieldset>
         </div>
+        {% endif %}
 
         <script>
           $('#dd-template-type .dropdown-item').on('click', function() {

+ 0 - 50
src/server/views/modal/unportalize.html

@@ -1,50 +0,0 @@
-{% if isTopPage() %}
-  {% set unportalizedPath = '/top-' + Date.now() %}
-{% else %}
-  {% set unportalizedPath = page.path|replace('(\/)$', '') %}
-{% endif %}
-  <div class="modal" id="unportalize">
-    <div class="modal-dialog">
-      <div class="modal-content">
-
-      <form role="form" id="unportalize-form" onsubmit="return false;">
-
-        <div class="modal-header bg-warning">
-          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-          <div class="modal-title">ポータル化を解除する</div>
-        </div>
-        <div class="modal-body">
-          <ul>
-           <li>このポータル化を解除し、通常のページに戻します。</li>
-          </ul>
-            <div class="form-group">
-              <p>
-                <label for="">このページ</label><br><code>{{ page.path }}</code>
-              </p>
-              <p>
-                <label for="">解除後のページ</label><br><code>{{ unportalizedPath }}</code>
-              </p>
-              {% if isTopPage() %}
-              <p class="alert alert-info">
-              このポータルはトップページのポータルのため、特別なページに移動します。
-              </p>
-              {% endif %}
-            </div>
-        </div>
-        <div class="modal-footer">
-          <div class="d-flex justify-content-between">
-            {% include '../widget/modal/page-api-error-messages.html' %}
-            <div>
-              <input type="hidden" name="_csrf" value="{{ csrf() }}">
-              <input type="hidden" name="path" value="{{ page.path }}">
-              <input type="hidden" name="new_path" value="{{ unportalizedPath }}">
-              <input type="hidden" name="page_id" value="{{ page._id.toString() }}">
-              <input type="hidden" name="revision_id" value="{{ page.revision._id.toString() }}">
-              <button type="submit" class="btn btn-warning">Unportalize</button>
-            </div>
-        </div>
-
-      </form>
-      </div><!-- /.modal-content -->
-    </div><!-- /.modal-dialog -->
-  </div><!-- /.modal -->

+ 2 - 2
src/server/views/widget/page_list.html

@@ -14,8 +14,8 @@
     data-path="{{ page.path }}">{{ decodeURIComponent(page.path) }}
   </a>
   <span class="page-list-meta">
-    {% if page.isPortal() %}
-      <span class="badge badge-info">PORTAL</span>
+    {% if page.isTopPage() %}
+      <span class="badge badge-info">TOP</span>
     {% endif  %}
 
     {% if page.isTemplate() %}

+ 2 - 9
src/server/views/widget/page_tabs.html

@@ -48,7 +48,7 @@
   <div class="mr-auto"></div>
 
   <!-- presentation -->
-  {% if not page.isPortal() %}
+  {% if not page.isTopPage() %}
     <li class="nav-item">
       <a href="?presentation=1" class="nav-link toggle-presentation">
         <i class="icon-film"></i><span class="d-none d-md-inline"> {{ t('Presentation Mode') }}</span>
@@ -65,7 +65,7 @@
 
   <!-- icon-options-vertical -->
   {% if !isTrashPage() %}
-    {% if page.isPortal() %}
+    {% if page.isTopPage() %}
     <li class="nav-item dropdown">
       <a
         {% if user %} role="button" class="nav-link dropdown-toggle dropdown-toggle-no-caret" href="#" data-toggle="dropdown" {% endif %}
@@ -78,13 +78,6 @@
       </a>
       <div class="dropdown-menu dropdown-menu-right">
         <a class="dropdown-item" href="#" data-target="#create-template" data-toggle="modal"><i class="icon-fw icon-magic-wand"></i> {{ t('template.option_label.create/edit') }}</a>
-        {% if ('/' !== path) %}
-          <div class="dropdown-divider"></div>
-          <a class="dropdown-item" href="#" data-target="#unportalize" data-toggle="modal"><i class="fa fa-share"></i> {{ t('Unportalize') }}</a>
-          {% if isDeletablePage() %}
-            <a class="dropdown-item" href="#" data-target="#deletePage" data-toggle="modal"><i class="icon-fw icon-fire text-danger"></i> {{ t('Delete') }}</a>
-          {% endif %}
-        {% endif %}
       </div>
     </li>
     {% else %}

+ 15 - 21
src/server/views/widget/page_tabs_kibela.html

@@ -46,7 +46,7 @@
   {# to place right side #}
   <div class="mr-auto"></div>
 
-  {% if not page.isPortal() %}
+  {% if not page.isTopPage() %}
   <li class="nav-item">
     <a href="?presentation=1" class="nav-link toggle-presentation">
       <i class="icon-film"></i><span class="d-none d-sm-inline"> {{ t('Presentation Mode') }}</span>
@@ -61,7 +61,7 @@
   </li>
 
   {% if !isTrashPage() %}
-    {% if page.isPortal() %}
+    {% if page.isTopPage() %}
     <li class="nav-item dropdown">
       <a
         {% if user %} role="button" class="nav-link dropdown-toggle dropdown-toggle-no-caret" data-toggle="dropdown" {% endif %}
@@ -72,15 +72,11 @@
       >
         <i class="icon-options-vertical"></i>
       </a>
-      <ul class="dropdown-menu dropdown-menu-right">
-        <li class="dropdown-item">
-          <a href="#" data-target="#create-template" data-toggle="modal"><i class="icon-fw icon-magic-wand"></i> {{ t('template.option_label.create/edit') }}</a>
-        </li>
-        {% if ('/' !== path) %}
-        <li class="dropdown-divider"></li>
-        <li class="dropdown-item"><a href="#" data-target="#unportalize" data-toggle="modal"><i class="fa fa-share"></i> {{ t('Unportalize') }}</a></li>
-        {% endif %}
-      </ul>
+      <div class="dropdown-menu dropdown-menu-right">
+        <a class="dropdown-item" href="#" data-target="#create-template" data-toggle="modal">
+          <i class="icon-fw icon-magic-wand"></i> {{ t('template.option_label.create/edit') }}
+        </a>
+      </div>
     </li>
     {% else %}
     <li class="nav-item dropdown">
@@ -93,18 +89,16 @@
       >
         <i class="icon-options-vertical"></i>
       </a>
-      <ul class="dropdown-menu dropdown-menu-right">
-        <li class="dropdown-item"><a href="#" data-target="#renamePage" data-toggle="modal"><i class="icon-fw icon-action-redo"></i> {{ t('Move/Rename') }}</a></li>
-        <li class="dropdown-item"><a href="#" data-target="#duplicatePage" data-toggle="modal"><i class="icon-fw icon-docs"></i> {{ t('Duplicate') }}</a></li>
-        <li class="dropdown-divider"></li>
-        <li class="dropdown-item">
-          <a href="#" data-target="#create-template" data-toggle="modal"><i class="icon-fw icon-magic-wand"></i> {{ t('template.option_label.create/edit') }}</a>
-        </li>
+      <div class="dropdown-menu dropdown-menu-right">
+        <a class="dropdown-item" href="#" data-target="#renamePage" data-toggle="modal"><i class="icon-fw icon-action-redo"></i> {{ t('Move/Rename') }}</a>
+        <a class="dropdown-item" href="#" data-target="#duplicatePage" data-toggle="modal"><i class="icon-fw icon-docs"></i> {{ t('Duplicate') }}</a>
+        <div class="dropdown-divider"></div>
+        <a class="dropdown-item" href="#" data-target="#create-template" data-toggle="modal"><i class="icon-fw icon-magic-wand"></i> {{ t('template.option_label.create/edit') }}</a>
         {% if isDeletablePage() %}
-        <li class="dropdown-divider"></li>
-        <li class="dropdown-item"><a href="#" data-target="#deletePage" data-toggle="modal"><i class="icon-fw icon-fire text-danger"></i> {{ t('Delete') }}</a></li>
+        <div class="dropdown-divider"></div>
+        <a class="dropdown-item" href="#" data-target="#deletePage" data-toggle="modal"><i class="icon-fw icon-fire text-danger"></i> {{ t('Delete') }}</a>
         {% endif %}
-      </ul>
+      </div>
     </li>
     {% endif %}
   {% endif %}