Jelajahi Sumber

Merge branch 'support/apply-bootstrap4' into support/fix-subnav-layout

# Conflicts:
#	src/client/styles/scss/theme/_apply-colors-kibela.scss
itizawa 6 tahun lalu
induk
melakukan
f5c68e4d79
40 mengubah file dengan 166 tambahan dan 140 penghapusan
  1. 5 0
      .github/workflows/build-rc.yml
  2. 5 0
      .github/workflows/build.yml
  3. 7 2
      resource/locales/en-US/admin/admin.json
  4. 6 1
      resource/locales/ja/admin/admin.json
  5. 3 1
      src/client/js/components/Admin/Customize/CustomizeHeaderSetting.jsx
  6. 1 1
      src/client/js/components/Admin/Customize/CustomizeThemeOptions.jsx
  7. 1 1
      src/client/js/components/Admin/ExportArchiveData/SelectCollectionsModal.jsx
  8. 1 1
      src/client/js/components/Admin/ImportData/GrowiArchive/ErrorViewer.jsx
  9. 1 1
      src/client/js/components/Admin/ImportData/GrowiArchive/ImportCollectionConfigurationModal.jsx
  10. 17 15
      src/client/js/components/Admin/ImportData/GrowiArchive/ImportForm.jsx
  11. 3 3
      src/client/js/components/Admin/ImportData/GrowiArchive/UploadForm.jsx
  12. 14 14
      src/client/js/components/Admin/ImportDataPage.jsx
  13. 1 1
      src/client/js/components/Admin/Notification/NotificationDeleteModal.jsx
  14. 1 3
      src/client/js/components/Admin/Security/LdapAuthTestModal.jsx
  15. 1 1
      src/client/js/components/Admin/UserGroup/UserGroupDeleteModal.jsx
  16. 1 1
      src/client/js/components/Admin/UserGroupDetail/UserGroupUserModal.jsx
  17. 1 1
      src/client/js/components/Admin/Users/PasswordResetModal.jsx
  18. 1 1
      src/client/js/components/Admin/Users/UserInviteModal.jsx
  19. 1 1
      src/client/js/components/Me/AssociateModal.jsx
  20. 12 12
      src/client/js/components/Me/BasicInfoSettings.jsx
  21. 1 1
      src/client/js/components/Me/DisassociateModal.jsx
  22. 1 1
      src/client/js/components/Me/ImageCropModal.jsx
  23. 6 6
      src/client/js/components/Me/ProfileImageSettings.jsx
  24. 1 1
      src/client/js/components/Page/TagEditor.jsx
  25. 1 1
      src/client/js/components/PageAttachment/DeleteAttachmentModal.jsx
  26. 2 2
      src/client/js/components/PageComment/DeleteCommentModal.jsx
  27. 1 1
      src/client/js/components/PageEditor/Editor.jsx
  28. 3 1
      src/client/js/components/PageEditor/HandsontableModal.jsx
  29. 1 1
      src/client/js/components/SavePageControls/GrantSelector.jsx
  30. 1 1
      src/client/js/components/SearchPage/DeletePageListModal.jsx
  31. 1 1
      src/client/js/components/SearchPage/SearchPageForm.jsx
  32. 8 5
      src/client/styles/scss/_override-bootstrap.scss
  33. 3 2
      src/client/styles/scss/_search.scss
  34. 1 9
      src/client/styles/scss/theme/_apply-colors-dark.scss
  35. 0 19
      src/client/styles/scss/theme/_apply-colors-kibela.scss
  36. 6 14
      src/client/styles/scss/theme/_apply-colors.scss
  37. 2 2
      src/client/styles/scss/theme/_reboot-bootstrap-theme-colors.scss
  38. 12 0
      src/client/styles/scss/theme/antarctic.scss
  39. 14 0
      src/client/styles/scss/theme/default.scss
  40. 18 11
      src/client/styles/scss/theme/kibela.scss

+ 5 - 0
.github/workflows/build-rc.yml

@@ -52,3 +52,8 @@ jobs:
         target: weseek/growi
         target: weseek/growi
         semver: ${{ env.SEMVER }}
         semver: ${{ env.SEMVER }}
         publish: true
         publish: true
+
+    - name: Check whether workspace is clean
+      run: |
+        STATUS=`git status --porcelain`
+        if [ -z "$STATUS" ]; then exit 0; else exit 1; fi

+ 5 - 0
.github/workflows/build.yml

@@ -66,6 +66,11 @@ jobs:
         additional-tags: 'latest'
         additional-tags: 'latest'
         publish: true
         publish: true
 
 
+    - name: Check whether workspace is clean
+      run: |
+        STATUS=`git status --porcelain`
+        if [ -z "$STATUS" ]; then exit 0; else exit 1; fi
+
   publish-desc:
   publish-desc:
 
 
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest

+ 7 - 2
resource/locales/en-US/admin/admin.json

@@ -105,7 +105,7 @@
     },
     },
     "behavior": "Behavior",
     "behavior": "Behavior",
     "behavior_desc": {
     "behavior_desc": {
-      "growi_text1": "Both of <code>/page</code> and <code>/page/</code> shows the same page",
+      "growi_text1": "Both of <code>/page</code> and <code>/page/</code> shows the same page.",
       "growi_text2": "<code>/nonexistent_page</code> shows editing form",
       "growi_text2": "<code>/nonexistent_page</code> shows editing form",
       "growi_text3": "All pages shows the list of sub pages <b>if using GROWI Enhanced Layout</b>",
       "growi_text3": "All pages shows the list of sub pages <b>if using GROWI Enhanced Layout</b>",
       "crowi_text1": "<code>/page</code> shows the page",
       "crowi_text1": "<code>/page</code> shows the page",
@@ -151,7 +151,12 @@
     "import_from": "Import from {{from}}",
     "import_from": "Import from {{from}}",
     "import_growi_archive": "Import GROWI Archive",
     "import_growi_archive": "Import GROWI Archive",
     "growi_settings": {
     "growi_settings": {
-      "overwrite_documents": "Imported documents will overwrite existing documents",
+      "description_of_import_mode": {
+        "about": "When you import data with the same name as an existing one, choose from the following three modes below.",
+        "insert": "Insert: Skip importing the data.",
+        "upsert": "Upsert: Overwrite and update the existing data with imported data.",
+        "flash_and_insert": "Flash and Insert: After deleting the existing data completely, import the data"
+      },
       "growi_archive_file": "GROWI Archive File",
       "growi_archive_file": "GROWI Archive File",
       "uploaded_data": "Uploaded Data",
       "uploaded_data": "Uploaded Data",
       "extracted_file": "Extracted File",
       "extracted_file": "Extracted File",

+ 6 - 1
resource/locales/ja/admin/admin.json

@@ -169,7 +169,12 @@
     "import_from": "{{from}} からインポート",
     "import_from": "{{from}} からインポート",
     "import_growi_archive": "GROWI アーカイブをインポート",
     "import_growi_archive": "GROWI アーカイブをインポート",
     "growi_settings": {
     "growi_settings": {
-      "overwrite_documents": "インポートされたドキュメントは既存のドキュメントを上書きします",
+      "description_of_import_mode": {
+        "about": "既存のデータと同名であるデータをインポートする際の挙動は以下の3つのモードから選べます。",
+        "insert": "Insert: 当該データのインポートをスキップします。",
+        "upsert": "Upsert: 既存のデータをインポートデータで上書き更新します。",
+        "flash_and_insert": "Flash and Insert: 既存のデータを完全に削除した後、インポートを行います。"
+      },
       "growi_archive_file": "GROWI アーカイブファイル",
       "growi_archive_file": "GROWI アーカイブファイル",
       "uploaded_data": "アップロードされたデータ",
       "uploaded_data": "アップロードされたデータ",
       "extracted_file": "展開されたファイル",
       "extracted_file": "展開されたファイル",

+ 3 - 1
src/client/js/components/Admin/Customize/CustomizeHeaderSetting.jsx

@@ -53,7 +53,9 @@ class CustomizeHeaderSetting extends React.Component {
               { t('Example') }:
               { t('Example') }:
               <pre className="hljs">
               <pre className="hljs">
                 {/* eslint-disable-next-line react/no-unescaped-entities */}
                 {/* eslint-disable-next-line react/no-unescaped-entities */}
-                <code>&lt;script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.13.0/build/languages/yaml.min.js" defer&gt;&lt;/script&gt;</code>
+                <code className="text-wrap">&lt;script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.13.0/build/languages/yaml.min.js"
+                defer&gt;&lt;/script&gt;
+                </code>
               </pre>
               </pre>
             </div>
             </div>
 
 

+ 1 - 1
src/client/js/components/Admin/Customize/CustomizeThemeOptions.jsx

@@ -42,7 +42,7 @@ class CustomizeThemeOptions extends React.Component {
     return (
     return (
       <div id="themeOptions" className={`${currentLayout === 'kibela' && 'disabled'}`}>
       <div id="themeOptions" className={`${currentLayout === 'kibela' && 'disabled'}`}>
         {/* Light Themes  */}
         {/* Light Themes  */}
-        <div className="d-flex">
+        <div className="d-flex flex-wrap">
           {lightTheme.map((theme) => {
           {lightTheme.map((theme) => {
             return (
             return (
               <ThemeColorBox
               <ThemeColorBox

+ 1 - 1
src/client/js/components/Admin/ExportArchiveData/SelectCollectionsModal.jsx

@@ -175,7 +175,7 @@ class SelectCollectionsModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" toggle={this.props.onClose}>
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-info text-light">
           {t('admin:export_management.export_collections')}
           {t('admin:export_management.export_collections')}
         </ModalHeader>
         </ModalHeader>
 
 

+ 1 - 1
src/client/js/components/Admin/ImportData/GrowiArchive/ErrorViewer.jsx

@@ -21,7 +21,7 @@ class ErrorViewer extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-danger text-white">
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-danger text-light">
           Errors
           Errors
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Admin/ImportData/GrowiArchive/ImportCollectionConfigurationModal.jsx

@@ -204,7 +204,7 @@ class ImportCollectionConfigurationModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose} onEnter={this.initialize}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose} onEnter={this.initialize}>
-        <ModalHeader tag="h4" toggle={this.props.onClose}>
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-info text-light">
           {`'${collectionName}'`} Configuration
           {`'${collectionName}'`} Configuration
         </ModalHeader>
         </ModalHeader>
 
 

+ 17 - 15
src/client/js/components/Admin/ImportData/GrowiArchive/ImportForm.jsx

@@ -333,7 +333,7 @@ class ImportForm extends React.Component {
     );
     );
   }
   }
 
 
-  renderGroups(groupList, groupName, errors, { wellContent } = {}) {
+  renderGroups(groupList, groupName, errors) {
     const collectionNames = groupList.filter((collectionName) => {
     const collectionNames = groupList.filter((collectionName) => {
       return this.allCollectionNames.includes(collectionName);
       return this.allCollectionNames.includes(collectionName);
     });
     });
@@ -343,19 +343,10 @@ class ImportForm extends React.Component {
     }
     }
 
 
     return (
     return (
-      <div className="mt-4 row">
-        <div className="col-12">
-          <h3 className="admin-setting-header">{groupName} Collections</h3>
-          { wellContent != null && (
-            <div className="card well small" role="alert">
-              <ul>
-                <li>{wellContent}</li>
-              </ul>
-            </div>
-          )}
-          {this.renderImportItems(collectionNames)}
-          {this.renderWarnForGroups(errors, `warnFor${groupName}`)}
-        </div>
+      <div className="mt-4">
+        <legend>{groupName} Collections</legend>
+        {this.renderImportItems(collectionNames)}
+        {this.renderWarnForGroups(errors, `warnFor${groupName}`)}
       </div>
       </div>
     );
     );
   }
   }
@@ -466,7 +457,18 @@ class ImportForm extends React.Component {
           </div>
           </div>
         </form>
         </form>
 
 
-        {this.renderGroups(GROUPS_PAGE, 'Page', warnForPageGroups, { wellContent: t('admin:importer_management.growi_settings.overwrite_documents') })}
+        <div className="card well small my-4">
+          <ul>
+            <li>{t('admin:importer_management.growi_settings.description_of_import_mode.about')}</li>
+            <ul>
+              <li>{t('admin:importer_management.growi_settings.description_of_import_mode.insert')}</li>
+              <li>{t('admin:importer_management.growi_settings.description_of_import_mode.upsert')}</li>
+              <li>{t('admin:importer_management.growi_settings.description_of_import_mode.flash_and_insert')}</li>
+            </ul>
+          </ul>
+        </div>
+
+        {this.renderGroups(GROUPS_PAGE, 'Page', warnForPageGroups)}
         {this.renderGroups(GROUPS_USER, 'User', warnForUserGroups)}
         {this.renderGroups(GROUPS_USER, 'User', warnForUserGroups)}
         {this.renderGroups(GROUPS_CONFIG, 'Config', warnForConfigGroups)}
         {this.renderGroups(GROUPS_CONFIG, 'Config', warnForConfigGroups)}
         {this.renderOthers()}
         {this.renderOthers()}

+ 3 - 3
src/client/js/components/Admin/ImportData/GrowiArchive/UploadForm.jsx

@@ -51,8 +51,8 @@ class UploadForm extends React.Component {
       <form onSubmit={this.uploadZipFile}>
       <form onSubmit={this.uploadZipFile}>
         <fieldset>
         <fieldset>
           <div className="form-group row">
           <div className="form-group row">
-            <label htmlFor="file" className="col-3 control-label">{t('admin:importer_management.growi_settings.growi_archive_file')}</label>
-            <div className="col-6">
+            <label htmlFor="file" className="col-md-3 control-label">{t('admin:importer_management.growi_settings.growi_archive_file')}</label>
+            <div className="col-md-6">
               <input
               <input
                 type="file"
                 type="file"
                 name="file"
                 name="file"
@@ -64,7 +64,7 @@ class UploadForm extends React.Component {
             </div>
             </div>
           </div>
           </div>
           <div className="form-group row">
           <div className="form-group row">
-            <div className="offset-3 col-6">
+            <div className="mx-auto">
               <button type="submit" className="btn btn-primary" disabled={!this.validateForm()}>
               <button type="submit" className="btn btn-primary" disabled={!this.validateForm()}>
                 {t('admin:importer_management.growi_settings.upload')}
                 {t('admin:importer_management.growi_settings.upload')}
               </button>
               </button>

+ 14 - 14
src/client/js/components/Admin/ImportDataPage.jsx

@@ -182,26 +182,26 @@ class ImportDataPage extends React.Component {
             </div>
             </div>
 
 
             <div className="form-group row">
             <div className="form-group row">
-              <label htmlFor="settingForm[importer:esa:team_name]" className="col-3 col-form-label">
+              <label htmlFor="settingForm[importer:esa:team_name]" className="text-left text-md-right col-md-3 col-form-label">
                 { t('admin:importer_management.esa_settings.team_name') }
                 { t('admin:importer_management.esa_settings.team_name') }
               </label>
               </label>
-              <div className="col-6">
+              <div className="col-md-6">
                 <input className="form-control" type="text" name="esaTeamName" value={esaTeamName} onChange={this.handleInputValue} />
                 <input className="form-control" type="text" name="esaTeamName" value={esaTeamName} onChange={this.handleInputValue} />
               </div>
               </div>
 
 
             </div>
             </div>
 
 
             <div className="form-group row">
             <div className="form-group row">
-              <label htmlFor="settingForm[importer:esa:access_token]" className="col-3 col-form-label">
+              <label htmlFor="settingForm[importer:esa:access_token]" className="text-left text-md-right col-md-3 col-form-label">
                 { t('admin:importer_management.esa_settings.access_token') }
                 { t('admin:importer_management.esa_settings.access_token') }
               </label>
               </label>
-              <div className="col-6">
+              <div className="col-md-6">
                 <input className="form-control" type="password" name="esaAccessToken" value={esaAccessToken} onChange={this.handleInputValue} />
                 <input className="form-control" type="password" name="esaAccessToken" value={esaAccessToken} onChange={this.handleInputValue} />
               </div>
               </div>
             </div>
             </div>
 
 
             <div className="form-group row">
             <div className="form-group row">
-              <div className="offset-3 col-6">
+              <div className="offset-md-3 col-md-6">
                 <input
                 <input
                   id="testConnectionToEsa"
                   id="testConnectionToEsa"
                   type="button"
                   type="button"
@@ -211,11 +211,11 @@ class ImportDataPage extends React.Component {
                   value={t('admin:importer_management.import')}
                   value={t('admin:importer_management.import')}
                 />
                 />
                 <input type="button" className="btn btn-secondary" onClick={this.esaHandleSubmitUpdate} value={t('Update')} />
                 <input type="button" className="btn btn-secondary" onClick={this.esaHandleSubmitUpdate} value={t('Update')} />
-                <span className="offset-1">
+                <span className="offset-0 offset-sm-1">
                   <input
                   <input
-                    name="Esa"
-                    type="button"
                     id="importFromEsa"
                     id="importFromEsa"
+                    type="button"
+                    name="Esa"
                     className="btn btn-secondary btn-esa"
                     className="btn btn-secondary btn-esa"
                     onClick={this.esaHandleSubmitTest}
                     onClick={this.esaHandleSubmitTest}
                     value={t('admin:importer_management.esa_settings.test_connection')}
                     value={t('admin:importer_management.esa_settings.test_connection')}
@@ -275,26 +275,26 @@ class ImportDataPage extends React.Component {
               <input type="password" name="dummypass" style={{ display: 'none', top: '-100px', left: '-100px' }} />
               <input type="password" name="dummypass" style={{ display: 'none', top: '-100px', left: '-100px' }} />
             </div>
             </div>
             <div className="form-group row">
             <div className="form-group row">
-              <label htmlFor="settingForm[importer:qiita:team_name]" className="col-3 col-form-label">
+              <label htmlFor="settingForm[importer:qiita:team_name]" className="text-left text-md-right col-md-3 col-form-label">
                 { t('admin:importer_management.qiita_settings.team_name') }
                 { t('admin:importer_management.qiita_settings.team_name') }
               </label>
               </label>
-              <div className="col-6">
+              <div className="col-md-6">
                 <input className="form-control" type="text" name="qiitaTeamName" value={qiitaTeamName} onChange={this.handleInputValue} />
                 <input className="form-control" type="text" name="qiitaTeamName" value={qiitaTeamName} onChange={this.handleInputValue} />
               </div>
               </div>
             </div>
             </div>
 
 
             <div className="form-group row">
             <div className="form-group row">
-              <label htmlFor="settingForm[importer:qiita:access_token]" className="col-3 col-form-label">
+              <label htmlFor="settingForm[importer:qiita:access_token]" className="text-left text-md-right col-md-3 col-form-label">
                 { t('admin:importer_management.qiita_settings.access_token') }
                 { t('admin:importer_management.qiita_settings.access_token') }
               </label>
               </label>
-              <div className="col-6">
+              <div className="col-md-6">
                 <input className="form-control" type="password" name="qiitaAccessToken" value={qiitaAccessToken} onChange={this.handleInputValue} />
                 <input className="form-control" type="password" name="qiitaAccessToken" value={qiitaAccessToken} onChange={this.handleInputValue} />
               </div>
               </div>
             </div>
             </div>
 
 
 
 
             <div className="form-group row">
             <div className="form-group row">
-              <div className="offset-3 col-6">
+              <div className="offset-md-3 col-md-6">
                 <input
                 <input
                   id="testConnectionToQiita"
                   id="testConnectionToQiita"
                   type="button"
                   type="button"
@@ -304,7 +304,7 @@ class ImportDataPage extends React.Component {
                   value={t('admin:importer_management.import')}
                   value={t('admin:importer_management.import')}
                 />
                 />
                 <input type="button" className="btn btn-secondary" onClick={this.qiitaHandleSubmitUpdate} value={t('Update')} />
                 <input type="button" className="btn btn-secondary" onClick={this.qiitaHandleSubmitUpdate} value={t('Update')} />
-                <span className="offset-1">
+                <span className="offset-0 offset-sm-1">
                   <input
                   <input
                     name="Qiita"
                     name="Qiita"
                     type="button"
                     type="button"

+ 1 - 1
src/client/js/components/Admin/Notification/NotificationDeleteModal.jsx

@@ -12,7 +12,7 @@ class NotificationDeleteModal extends React.PureComponent {
     const { t, notificationForConfiguration } = this.props;
     const { t, notificationForConfiguration } = this.props;
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" toggle={this.props.onClose} className="modal-header">
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-danger text-light">
           <i className="icon icon-fire"></i> Delete Global Notification Setting
           <i className="icon icon-fire"></i> Delete Global Notification Setting
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 3
src/client/js/components/Admin/Security/LdapAuthTestModal.jsx

@@ -6,7 +6,6 @@ import {
   Modal,
   Modal,
   ModalHeader,
   ModalHeader,
   ModalBody,
   ModalBody,
-  ModalFooter,
 } from 'reactstrap';
 } from 'reactstrap';
 
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import { createSubscribedElement } from '../../UnstatedUtils';
@@ -48,7 +47,7 @@ class LdapAuthTestModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" className="modal-header" toggle={this.props.onClose}>
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-info text-light">
           Test LDAP Account
           Test LDAP Account
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>
@@ -59,7 +58,6 @@ class LdapAuthTestModal extends React.Component {
             onChangePassword={this.onChangePassword}
             onChangePassword={this.onChangePassword}
           />
           />
         </ModalBody>
         </ModalBody>
-        <ModalFooter />
       </Modal>
       </Modal>
     );
     );
   }
   }

+ 1 - 1
src/client/js/components/Admin/UserGroup/UserGroupDeleteModal.jsx

@@ -164,7 +164,7 @@ class UserGroupDeleteModal extends React.Component {
 
 
     return (
     return (
       <Modal className="modal-md" isOpen={this.props.isShow} toggle={this.props.onHide}>
       <Modal className="modal-md" isOpen={this.props.isShow} toggle={this.props.onHide}>
-        <ModalHeader tag="h4" toggle={this.props.onHide} className="modal-header bg-danger">
+        <ModalHeader tag="h4" toggle={this.props.onHide} className="bg-danger text-light">
           <i className="icon icon-fire"></i> {t('admin:user_group_management.delete_modal.header')}
           <i className="icon icon-fire"></i> {t('admin:user_group_management.delete_modal.header')}
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/UserGroupUserModal.jsx

@@ -19,7 +19,7 @@ class UserGroupUserModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={adminUserGroupDetailContainer.state.isUserGroupUserModalOpen} toggle={adminUserGroupDetailContainer.closeUserGroupUserModal}>
       <Modal isOpen={adminUserGroupDetailContainer.state.isUserGroupUserModalOpen} toggle={adminUserGroupDetailContainer.closeUserGroupUserModal}>
-        <ModalHeader tag="h4" toggle={adminUserGroupDetailContainer.closeUserGroupUserModal}>
+        <ModalHeader tag="h4" toggle={adminUserGroupDetailContainer.closeUserGroupUserModal} className="bg-info text-light">
           {t('admin:user_group_management.add_modal.add_user') }
           {t('admin:user_group_management.add_modal.add_user') }
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Admin/Users/PasswordResetModal.jsx

@@ -83,7 +83,7 @@ class PasswordResetModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader tag="h4" toggle={this.props.onClose} className="modal-header">
+        <ModalHeader tag="h4" toggle={this.props.onClose} className="bg-warning text-light">
           {t('admin:user_management.reset_password') }
           {t('admin:user_management.reset_password') }
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Admin/Users/UserInviteModal.jsx

@@ -194,7 +194,7 @@ class UserInviteModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={adminUsersContainer.state.isUserInviteModalShown}>
       <Modal isOpen={adminUsersContainer.state.isUserInviteModalShown}>
-        <ModalHeader tag="h4" toggle={this.onToggleModal} className="modal-header">
+        <ModalHeader tag="h4" toggle={this.onToggleModal} className="bg-info text-light">
           {t('admin:user_management.invite_users') }
           {t('admin:user_management.invite_users') }
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Me/AssociateModal.jsx

@@ -71,7 +71,7 @@ class AssociateModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose} size="lg">
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose} size="lg">
-        <ModalHeader className="bg-info" toggle={this.props.onClose}>
+        <ModalHeader className="bg-info text-light" toggle={this.props.onClose}>
           { t('Create External Account') }
           { t('Create External Account') }
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 12 - 12
src/client/js/components/Me/BasicInfoSettings.jsx

@@ -45,9 +45,9 @@ class BasicInfoSettings extends React.Component {
     return (
     return (
       <Fragment>
       <Fragment>
 
 
-        <div className="row form-group mb-3">
-          <label htmlFor="userForm[name]" className="col-sm-2 text-right">{t('Name')}</label>
-          <div className="col-sm-4 text-left">
+        <div className="form-group row">
+          <label htmlFor="userForm[name]" className="text-left text-md-right col-md-3 col-form-label">{t('Name')}</label>
+          <div className="col-md-6">
             <input
             <input
               className="form-control"
               className="form-control"
               type="text"
               type="text"
@@ -58,9 +58,9 @@ class BasicInfoSettings extends React.Component {
           </div>
           </div>
         </div>
         </div>
 
 
-        <div className="row form-group mb-3">
-          <label htmlFor="userForm[email]" className="col-sm-2 text-right">{t('Email')}</label>
-          <div className="col-sm-4 text-left">
+        <div className="form-group row">
+          <label htmlFor="userForm[email]" className="text-left text-md-right col-md-3 col-form-label">{t('Email')}</label>
+          <div className="col-md-6">
             <input
             <input
               className="form-control"
               className="form-control"
               type="text"
               type="text"
@@ -81,9 +81,9 @@ class BasicInfoSettings extends React.Component {
           )}
           )}
         </div>
         </div>
 
 
-        <div className="row mb-3">
-          <label className="col-sm-2 text-right">{t('Disclose E-mail')}</label>
-          <div className="col-6">
+        <div className="form-group row">
+          <label className="text-left text-md-right col-md-3 col-form-label">{t('Disclose E-mail')}</label>
+          <div className="col-md-6">
             <div className="custom-control custom-radio custom-control-inline">
             <div className="custom-control custom-radio custom-control-inline">
               <input
               <input
                 type="radio"
                 type="radio"
@@ -109,9 +109,9 @@ class BasicInfoSettings extends React.Component {
           </div>
           </div>
         </div>
         </div>
 
 
-        <div className="row mb-3">
-          <label className="col-sm-2 col-form-label text-right">{t('Language')}</label>
-          <div className="col-6">
+        <div className="form-group row">
+          <label className="text-left text-md-right col-md-3 col-form-label">{t('Language')}</label>
+          <div className="col-md-6">
             <div className="custom-control custom-radio custom-control-inline">
             <div className="custom-control custom-radio custom-control-inline">
               <input
               <input
                 type="radio"
                 type="radio"

+ 1 - 1
src/client/js/components/Me/DisassociateModal.jsx

@@ -49,7 +49,7 @@ class DisassociateModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
       <Modal isOpen={this.props.isOpen} toggle={this.props.onClose}>
-        <ModalHeader className="bg-info" toggle={this.props.onClose}>
+        <ModalHeader className="bg-info text-light" toggle={this.props.onClose}>
           {t('personal_settings.disassociate_external_account')}
           {t('personal_settings.disassociate_external_account')}
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/Me/ImageCropModal.jsx

@@ -87,7 +87,7 @@ class ImageCropModal extends React.Component {
   render() {
   render() {
     return (
     return (
       <Modal isOpen={this.props.show} toggle={this.props.onModalClose}>
       <Modal isOpen={this.props.show} toggle={this.props.onModalClose}>
-        <ModalHeader tag="h4" toggle={this.props.onModalClose}>
+        <ModalHeader tag="h4" toggle={this.props.onModalClose} className="bg-info text-light">
           Image Crop
           Image Crop
         </ModalHeader>
         </ModalHeader>
         <ModalBody className="my-4">
         <ModalBody className="my-4">

+ 6 - 6
src/client/js/components/Me/ProfileImageSettings.jsx

@@ -102,7 +102,7 @@ class ProfileImageSettings extends React.Component {
     return (
     return (
       <React.Fragment>
       <React.Fragment>
         <div className="row">
         <div className="row">
-          <div className="col-md-2 offset-1 col-sm-4">
+          <div className="col-md-3 offset-1 col-sm-4">
             <h4>
             <h4>
               <div className="custom-control custom-radio radio-primary">
               <div className="custom-control custom-radio radio-primary">
                 <input
                 <input
@@ -126,7 +126,7 @@ class ProfileImageSettings extends React.Component {
             <img src={this.generateGravatarSrc()} width="64" />
             <img src={this.generateGravatarSrc()} width="64" />
           </div>
           </div>
 
 
-          <div className="col-md-4 col-sm-7">
+          <div className="col-md-3 offset-1 col-sm-4">
             <h4>
             <h4>
               <div className="custom-control custom-radio radio-primary">
               <div className="custom-control custom-radio radio-primary">
                 <input
                 <input
@@ -144,19 +144,19 @@ class ProfileImageSettings extends React.Component {
               </div>
               </div>
             </h4>
             </h4>
             <div className="row mb-3">
             <div className="row mb-3">
-              <label className="col-sm-4 control-label">
+              <label className="col-sm-4 col-12 control-label">
                 { t('Current Image') }
                 { t('Current Image') }
               </label>
               </label>
-              <div className="col-sm-8">
+              <div className="col-sm-8 col-12">
                 {uploadedPictureSrc && (<p><img src={uploadedPictureSrc} className="picture picture-lg rounded-circle" id="settingUserPicture" /></p>)}
                 {uploadedPictureSrc && (<p><img src={uploadedPictureSrc} className="picture picture-lg rounded-circle" id="settingUserPicture" /></p>)}
                 {isUploadedPicture && <button type="button" className="btn btn-danger" onClick={this.onClickDeleteBtn}>{ t('Delete Image') }</button>}
                 {isUploadedPicture && <button type="button" className="btn btn-danger" onClick={this.onClickDeleteBtn}>{ t('Delete Image') }</button>}
               </div>
               </div>
             </div>
             </div>
             <div className="row">
             <div className="row">
-              <label className="col-sm-4 control-label">
+              <label className="col-sm-4 col-12 control-label">
                 {t('Upload new image')}
                 {t('Upload new image')}
               </label>
               </label>
-              <div className="col-sm-8">
+              <div className="col-sm-8 col-12">
                 <input type="file" onChange={this.onSelectFile} name="profileImage" accept="image/*" />
                 <input type="file" onChange={this.onSelectFile} name="profileImage" accept="image/*" />
               </div>
               </div>
             </div>
             </div>

+ 1 - 1
src/client/js/components/Page/TagEditor.jsx

@@ -47,7 +47,7 @@ export default class TagEditor extends React.Component {
   render() {
   render() {
     return (
     return (
       <Modal isOpen={this.state.isOpenModal} toggle={this.closeModalHandler} id="edit-tag-modal">
       <Modal isOpen={this.state.isOpenModal} toggle={this.closeModalHandler} id="edit-tag-modal">
-        <ModalHeader tag="h4" toggle={this.closeModalHandler} className="bg-primary">
+        <ModalHeader tag="h4" toggle={this.closeModalHandler} className="bg-primary text-light">
           <span className="text-white">Edit Tags</span>
           <span className="text-white">Edit Tags</span>
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/PageAttachment/DeleteAttachmentModal.jsx

@@ -73,7 +73,7 @@ export default class DeleteAttachmentModal extends React.Component {
 
 
     return (
     return (
       <Modal {...props} className="attachment-delete-modal" bssize="large" aria-labelledby="contained-modal-title-lg">
       <Modal {...props} className="attachment-delete-modal" bssize="large" aria-labelledby="contained-modal-title-lg">
-        <ModalHeader tag="h4" toggle={this.props.toggle}>
+        <ModalHeader tag="h4" toggle={this.props.toggle} className="bg-danger text-light">
           <span id="contained-modal-title-lg">Delete attachment?</span>
           <span id="contained-modal-title-lg">Delete attachment?</span>
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 2 - 2
src/client/js/components/PageComment/DeleteCommentModal.jsx

@@ -37,9 +37,9 @@ export default class DeleteCommentModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isShown} toggle={this.props.cancel} className="page-comment-delete-modal">
       <Modal isOpen={this.props.isShown} toggle={this.props.cancel} className="page-comment-delete-modal">
-        <ModalHeader tag="h4" toggle={this.props.cancel}>
+        <ModalHeader tag="h4" toggle={this.props.cancel} className="bg-danger text-light">
           <span>
           <span>
-            <i className="icon-fw icon-fire text-danger"></i>
+            <i className="icon-fw icon-fire"></i>
             Delete comment?
             Delete comment?
           </span>
           </span>
         </ModalHeader>
         </ModalHeader>

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

@@ -260,7 +260,7 @@ export default class Editor extends AbstractEditor {
 
 
     return (
     return (
       <Modal isOpen={this.state.isCheatsheetModalShown} toggle={hideCheatsheetModal} className="modal-gfm-cheatsheet">
       <Modal isOpen={this.state.isCheatsheetModalShown} toggle={hideCheatsheetModal} className="modal-gfm-cheatsheet">
-        <ModalHeader tag="h4" toggle={hideCheatsheetModal} className="bg-primary">
+        <ModalHeader tag="h4" toggle={hideCheatsheetModal} className="bg-primary text-light">
           <span className="text-white"><i className="icon-fw icon-question" />Markdown Help</span>
           <span className="text-white"><i className="icon-fw icon-question" />Markdown Help</span>
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

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

@@ -433,7 +433,9 @@ export default class HandsontableModal extends React.PureComponent {
 
 
     return (
     return (
       <Modal isOpen={this.state.show} toggle={this.cancel} size="lg" className={dialogClassName}>
       <Modal isOpen={this.state.show} toggle={this.cancel} size="lg" className={dialogClassName}>
-        <ModalHeader tag="h4" toggle={this.cancel} close={buttons}>Edit Table</ModalHeader>
+        <ModalHeader tag="h4" toggle={this.cancel} close={buttons} className="bg-primary text-light">
+          Edit Table
+        </ModalHeader>
         <ModalBody className="p-0 d-flex flex-column">
         <ModalBody className="p-0 d-flex flex-column">
           <div className="px-4 py-3 modal-navbar bg-light">
           <div className="px-4 py-3 modal-navbar bg-light">
             <button
             <button

+ 1 - 1
src/client/js/components/SavePageControls/GrantSelector.jsx

@@ -217,7 +217,7 @@ class GrantSelector extends React.Component {
         isOpen={this.state.isSelectGroupModalShown}
         isOpen={this.state.isSelectGroupModalShown}
         toggle={this.hideSelectGroupModal}
         toggle={this.hideSelectGroupModal}
       >
       >
-        <ModalHeader tag="h4" toggle={this.hideSelectGroupModal}>
+        <ModalHeader tag="h4" toggle={this.hideSelectGroupModal} className="bg-info text-light">
           Select a Group
           Select a Group
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/SearchPage/DeletePageListModal.jsx

@@ -29,7 +29,7 @@ export default class DeletePageListModal extends React.Component {
 
 
     return (
     return (
       <Modal isOpen={this.props.isShown} toggle={this.props.cancel} className="page-list-delete-modal">
       <Modal isOpen={this.props.isShown} toggle={this.props.cancel} className="page-list-delete-modal">
-        <ModalHeader tag="h4" toggle={this.props.cancel}>
+        <ModalHeader tag="h4" toggle={this.props.cancel} className="bg-danger text-light">
           Deleting pages:
           Deleting pages:
         </ModalHeader>
         </ModalHeader>
         <ModalBody>
         <ModalBody>

+ 1 - 1
src/client/js/components/SearchPage/SearchPageForm.jsx

@@ -42,7 +42,7 @@ class SearchPageForm extends React.Component {
           />
           />
         </div>
         </div>
         <div className="input-group-append">
         <div className="input-group-append">
-          <button className="btn btn-outline-secondary" type="button" id="button-addon2" onClick={this.search}>
+          <button className="btn btn-secondary" type="button" id="button-addon2" onClick={this.search}>
             <i className="icon-magnifier"></i>
             <i className="icon-magnifier"></i>
           </button>
           </button>
         </div>
         </div>

+ 8 - 5
src/client/styles/scss/_override-bootstrap.scss

@@ -39,11 +39,6 @@
     line-height: 14px;
     line-height: 14px;
   }
   }
 
 
-  .small {
-    font-size: 65%;
-    line-height: 10px;
-  }
-
   code {
   code {
     padding: 2px 4px;
     padding: 2px 4px;
     font-size: 90%;
     font-size: 90%;
@@ -59,6 +54,14 @@
     }
     }
   }
   }
 
 
+  // Custom Control
+  .custom-control {
+    .custom-control-input,
+    .custom-control-input + .custom-control-label {
+      cursor: pointer;
+    }
+  }
+
   // card (substitute panel of bootstrap3)
   // card (substitute panel of bootstrap3)
   .card {
   .card {
     margin-bottom: 20px;
     margin-bottom: 20px;

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

@@ -177,8 +177,9 @@
 
 
 .search-page-input {
 .search-page-input {
   position: sticky;
   position: sticky;
-  top: 15px;
-  z-index: 1;
+  top: 65px;
+  // placed at front-most
+  z-index: 15;
 
 
   margin-bottom: 15px;
   margin-bottom: 15px;
 
 

+ 1 - 9
src/client/styles/scss/theme/_apply-colors-dark.scss

@@ -7,7 +7,7 @@
   &.active,
   &.active,
   &.active:hover,
   &.active:hover,
   &.active:focus {
   &.active:focus {
-    color: white;
+    color: $light;
     background-color: lighten($bgcolor-global, 5%);
     background-color: lighten($bgcolor-global, 5%);
   }
   }
 }
 }
@@ -47,14 +47,6 @@ textarea.form-control {
   }
   }
 }
 }
 
 
-.modal {
-  .modal-header {
-    .close {
-      color: white;
-    }
-  }
-}
-
 /*
 /*
  * Panel
  * Panel
  */
  */

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

@@ -137,25 +137,6 @@ body.kibela {
     background-color: $bgcolor-inline-code;
     background-color: $bgcolor-inline-code;
   }
   }
 
 
-  /* Card */
-  .card {
-    border: 1px solid $border-color-theme;
-
-    .card-header {
-      background-color: $lightthemecolor;
-      border-bottom: 1px solid $border-color-theme;
-    }
-
-    .card-body {
-      background-color: $themelight;
-    }
-
-    .card-footer {
-      background: white;
-      border-top: 1px solid $border-color-theme;
-    }
-  }
-
   /* button */
   /* button */
   .btn-primary {
   .btn-primary {
     background: $primary;
     background: $primary;

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

@@ -25,6 +25,12 @@ $link-hover-color: $color-link-hover;
 }
 }
 
 
 // Dropdown
 // Dropdown
+.dropdown-menu {
+  form {
+    color: $color-global;
+  }
+}
+
 .dropdown-item {
 .dropdown-item {
   color: $color-global;
   color: $color-global;
   &.active,
   &.active,
@@ -110,22 +116,8 @@ $link-hover-color: $color-link-hover;
 .modal {
 .modal {
   .modal-header {
   .modal-header {
     border-bottom-color: $border-color-theme;
     border-bottom-color: $border-color-theme;
-
-    &.bg-primary,
-    &.bg-info,
-    &.bg-success,
-    &.bg-warning,
-    &.bg-danger {
-      color: white;
-
-      .close {
-        color: white;
-      }
-    }
-
     .close {
     .close {
       opacity: 0.5;
       opacity: 0.5;
-
       &:hover {
       &:hover {
         opacity: 0.9;
         opacity: 0.9;
       }
       }

+ 2 - 2
src/client/styles/scss/theme/_reboot-bootstrap-theme-colors.scss

@@ -42,7 +42,7 @@
 
 
 @each $theme-color, $color in $theme-colors {
 @each $theme-color, $color in $theme-colors {
   .alert.alert-#{$theme-color} {
   .alert.alert-#{$theme-color} {
-    color: $bgcolor-global;
+    color: $color-alert;
     background: $color;
     background: $color;
     border: none;
     border: none;
 
 
@@ -59,7 +59,7 @@
 
 
 @each $theme-color, $color in $theme-colors {
 @each $theme-color, $color in $theme-colors {
   .badge.badge-#{$theme-color} {
   .badge.badge-#{$theme-color} {
-    color: $bgcolor-global;
+    color: $color-badge;
     background: $color;
     background: $color;
   }
   }
 }
 }

+ 12 - 0
src/client/styles/scss/theme/antarctic.scss

@@ -75,6 +75,12 @@ html[light] {
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-hover: $color-global;
   $color-dropdown-link-hover: $color-global;
 
 
+  // alert
+  $color-alert: $color-reversal;
+
+  // badge
+  $color-badge: $color-reversal;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-light';
   @import 'apply-colors-light';
 }
 }
@@ -115,6 +121,12 @@ html[dark] {
   $color-dropdown-link-active: $color-global;
   $color-dropdown-link-active: $color-global;
   $color-dropdown-link-hover: $color-reversal;
   $color-dropdown-link-hover: $color-reversal;
 
 
+  // alert
+  $color-alert: $color-global;
+
+  // badge
+  $color-badge: $color-global;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-dark';
   @import 'apply-colors-dark';
 }
 }

+ 14 - 0
src/client/styles/scss/theme/default.scss

@@ -17,6 +17,7 @@
 //
 //
 html[light] {
 html[light] {
   $primary: #112744;
   $primary: #112744;
+  $light: white;
 
 
   // Background colors
   // Background colors
   $bgcolor-global: white;
   $bgcolor-global: white;
@@ -47,6 +48,12 @@ html[light] {
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-hover: $color-reversal;
   $color-dropdown-link-hover: $color-reversal;
 
 
+  // alert
+  $color-alert: $color-reversal;
+
+  // badge
+  $color-badge: $color-reversal;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-light';
   @import 'apply-colors-light';
 }
 }
@@ -55,6 +62,7 @@ html[light] {
 //
 //
 html[dark] {
 html[dark] {
   $primary: #d65a31;
   $primary: #d65a31;
+  $light: white;
 
 
   $basecolor: #222831;
   $basecolor: #222831;
 
 
@@ -87,6 +95,12 @@ html[dark] {
   $color-dropdown-link-active: $color-global;
   $color-dropdown-link-active: $color-global;
   $color-dropdown-link-hover: $color-reversal;
   $color-dropdown-link-hover: $color-reversal;
 
 
+  // alert
+  $color-alert: $color-reversal;
+
+  // badge
+  $color-badge: $color-reversal;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-dark';
   @import 'apply-colors-dark';
 }
 }

+ 18 - 11
src/client/styles/scss/theme/kibela.scss

@@ -1,18 +1,18 @@
 @import '../variables';
 @import '../variables';
 @import '../override-bootstrap-variables';
 @import '../override-bootstrap-variables';
 
 
+$bgcolor-theme: rgb(18, 86, 163);
+$themelight: #f4f5f6;
+$subthemecolor: rgb(88, 130, 250);
+$lightthemecolor: rgba(181, 203, 247, 0.61);
+
 // Light Mode
 // Light Mode
 html[light] {
 html[light] {
-  $bgcolor-theme: rgb(18, 86, 163);
-  $themelight: #f4f5f6;
-  $subthemecolor: rgb(88, 130, 250);
-  $lightthemecolor: rgba(181, 203, 247, 0.61);
-
   // Background colors
   // Background colors
   $bgcolor-navbar: white;
   $bgcolor-navbar: white;
   $bgcolor-navbar-active: $bgcolor-theme;
   $bgcolor-navbar-active: $bgcolor-theme;
   $bgcolor-global: $themelight;
   $bgcolor-global: $themelight;
-  $bgcolor-card: #e3e5e7;
+  $bgcolor-card: $lightthemecolor;
   $bgcolor-inline-code: lighten($subthemecolor, 70%);
   $bgcolor-inline-code: lighten($subthemecolor, 70%);
 
 
   $color-header: $bgcolor-theme;
   $color-header: $bgcolor-theme;
@@ -44,6 +44,12 @@ html[light] {
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-hover: $color-global;
   $color-dropdown-link-hover: $color-global;
 
 
+  // alert
+  $color-alert: $color-reversal;
+
+  // badge
+  $color-badge: $color-reversal;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-light';
   @import 'apply-colors-light';
   @import 'apply-colors-kibela';
   @import 'apply-colors-kibela';
@@ -51,11 +57,6 @@ html[light] {
 
 
 // Dark Mode ( same as Light Mode )
 // Dark Mode ( same as Light Mode )
 html[dark] {
 html[dark] {
-  $bgcolor-theme: rgb(18, 86, 163);
-  $themelight: #f4f5f6;
-  $subthemecolor: rgb(88, 130, 250);
-  $lightthemecolor: rgba(181, 203, 247, 0.61);
-
   // Background colors
   // Background colors
   $bgcolor-navbar: transparent;
   $bgcolor-navbar: transparent;
   $bgcolor-navbar-active: $bgcolor-theme;
   $bgcolor-navbar-active: $bgcolor-theme;
@@ -92,6 +93,12 @@ html[dark] {
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-active: $color-reversal;
   $color-dropdown-link-hover: $color-global;
   $color-dropdown-link-hover: $color-global;
 
 
+  // alert
+  $color-alert: $color-global;
+
+  // badge
+  $color-badge: $color-global;
+
   @import 'apply-colors';
   @import 'apply-colors';
   @import 'apply-colors-light';
   @import 'apply-colors-light';
   @import 'apply-colors-kibela';
   @import 'apply-colors-kibela';