Acp redesign (#11639)
* acp sidebar
* gap in nav
* remove shadow
* label fixes
* color fixes
* feat: settings page wip
* feat: scroll spy 👓
move social into general, store social in meta.config like other settings
write upgrade script
* remove social
* rermove openapi routes
* cleanup, highlight selected nav item
* more cleanup
* advanced margin top
* derp
* match design
* bring back version alert
fix homepage js, since it moved to general settings
* remove unused tpls
these moved to general settings
* remove more css
* offcanvas for mobile
fix search
* add timeout
* add new props
* manage categories
* small fixes
* category-edit
* feat category page fixes
* add title to settings pages
add user settings page
* small fixes
* some more settings pages
* fix: plugin page titles
* more settings pages
* more padding
* more pages, add acp paginator.tpl
so it doesn't change when active theme changes
* remove placeholder
* dashboard table
* fix: openapi
* fix: controller tests
* use fonts from core
* some small fixes
* fix rep page
* refactor: fix name of upgrade script
* create category modal
group edit
* group/groups pages
* admins mods
* privs
* uploads
* missing margin
* more acp pages
* more pages
* plugins/rewards/widgets
* wrap rewards
* fix widgets
* fix widget clone button
* fix group acp edit link
* update search dropdown
* remove display block from tbody
* use less css
* remove some derp links
* remove striped tables
* remove p tags from lang files
* update email settings
* Update api.tpl
* move tag-whitelist
isekai-main
parent
6d4ab1d0c1
commit
c3afe44686
@ -1,5 +1,4 @@
|
||||
{
|
||||
"post-sharing": "Post Sharing",
|
||||
"info-plugins-additional": "Plugins can add additional networks for sharing posts.",
|
||||
"save-success": "Successfully saved Post Sharing Networks!"
|
||||
"info-plugins-additional": "Plugins can add additional networks for sharing posts."
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
get:
|
||||
tags:
|
||||
- admin
|
||||
summary: Get homepage settings
|
||||
responses:
|
||||
"200":
|
||||
description: ""
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
properties:
|
||||
routes:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
route:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
|
@ -1,35 +0,0 @@
|
||||
get:
|
||||
tags:
|
||||
- admin
|
||||
summary: Get language settings
|
||||
responses:
|
||||
"200":
|
||||
description: A JSON object containing available languages and settings
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
properties:
|
||||
languages:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description: Localised name of the language
|
||||
code:
|
||||
type: string
|
||||
description: A language code (similar to ISO-639)
|
||||
dir:
|
||||
type: string
|
||||
description: Directionality of the language
|
||||
enum: [ltr, rtl]
|
||||
selected:
|
||||
type: boolean
|
||||
description: Denotes the currently selected default system language on the forum
|
||||
autoDetectLang:
|
||||
type: integer
|
||||
description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header
|
||||
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
|
@ -1,28 +0,0 @@
|
||||
get:
|
||||
tags:
|
||||
- admin
|
||||
summary: Get post social sharing settings
|
||||
responses:
|
||||
"200":
|
||||
description: "A JSON object containing post social sharing settings"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
properties:
|
||||
posts:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
class:
|
||||
type: string
|
||||
description: A FontAwesome icon string
|
||||
activated:
|
||||
type: boolean
|
||||
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
|
@ -1,6 +0,0 @@
|
||||
.database-info {
|
||||
span {
|
||||
display:inline-block;
|
||||
width:220px;
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
|
||||
.form-label {
|
||||
font-weight: 500;
|
||||
font-size: $font-size-sm;
|
||||
font-family: $font-family-base;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.form-text {
|
||||
font-size: 0.75rem!important;;
|
||||
font-family: $font-family-base;
|
||||
}
|
||||
|
||||
.tracking-tight { letter-spacing: -0.02em; }
|
||||
|
||||
$btn-ghost-hover-color: mix($light, $dark, 90%);
|
||||
|
||||
@mixin btn-ghost-base {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: ($spacer * 0.5);
|
||||
border-radius: $border-radius-sm;
|
||||
border-width: 1px;
|
||||
border-color: transparent;
|
||||
background-color: transparent;
|
||||
padding: ($spacer * 0.25) ($spacer * 0.5);
|
||||
text-align: left;
|
||||
--bs-text-opacity: 1;
|
||||
color: rgb(73 80 87 / var(--bs-text-opacity));
|
||||
font-family: $font-family-secondary;
|
||||
cursor: pointer;
|
||||
&:hover, &.active {
|
||||
background-color: $btn-ghost-hover-color;
|
||||
color: rgb(73 80 87 / var(--bs-text-opacity));
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-ghost {
|
||||
@include btn-ghost-base();
|
||||
line-height: 1.5rem;
|
||||
> i {
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-ghost-sm {
|
||||
@include btn-ghost-base();
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
> i {
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-outline {
|
||||
@include btn-ghost-base();
|
||||
border-color: $border-color;
|
||||
}
|
||||
|
||||
.btn-outline-sm {
|
||||
@include btn-ghost-base();
|
||||
border-color: $border-color;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
}
|
||||
|
||||
.flex-basis-md-200 {
|
||||
@include media-breakpoint-up(md) {
|
||||
flex-basis: 200px!important;
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
#rewards {
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
|
||||
> li {
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-bottom: 20px;
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rewards { width: 100%; }
|
||||
|
||||
.card {
|
||||
border-radius: 2px;
|
||||
border-width: 2px;
|
||||
color: #333;
|
||||
|
||||
&.if-block {
|
||||
border-color: $primary;
|
||||
max-width: 33%;
|
||||
}
|
||||
&.this-block {
|
||||
border-color: $warning;
|
||||
max-width: 33%;
|
||||
}
|
||||
&.then-block {
|
||||
border-color: $success;
|
||||
max-width: 33%;
|
||||
}
|
||||
&.reward-block {
|
||||
border-color: $success;
|
||||
background-color: lighten($success, 15%);
|
||||
color: #fff;
|
||||
a, select, input { color: #fff; }
|
||||
select > option { color: #333; }
|
||||
width: 100%;
|
||||
min-height: 110px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-admin-rewards {
|
||||
#new {
|
||||
bottom: calc(64px + $spacer);
|
||||
background-color: $success;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
@use "@fontsource/inter/scss/mixins" as Inter;
|
||||
@use "@fontsource/poppins/scss/mixins" as Poppins;
|
||||
|
||||
$weights: $font-weight-light, $font-weight-normal, $font-weight-semibold, $font-weight-bold;
|
||||
|
||||
@each $weight in $weights {
|
||||
@include Inter.fontFace(
|
||||
$weight: $weight,
|
||||
$display: fallback,
|
||||
$fontDir: "./plugins/core/inter"
|
||||
);
|
||||
@include Poppins.fontFace(
|
||||
$weight: $weight,
|
||||
$display: fallback,
|
||||
$fontDir: "./plugins/core/poppins"
|
||||
);
|
||||
}
|
||||
|
||||
.ff-base { font-family: $font-family-base !important; }
|
||||
.ff-sans { font-family: $font-family-sans-serif !important; }
|
||||
.ff-secondary { font-family: $font-family-secondary; }
|
@ -1,159 +0,0 @@
|
||||
.header {
|
||||
user-select: none;
|
||||
position: relative;
|
||||
background: #333;
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
margin-bottom: 50px;
|
||||
font-size: 16px;
|
||||
|
||||
#main-page-title {
|
||||
position: absolute;
|
||||
left: 48px;
|
||||
bottom: 50px;
|
||||
color: #aaa;
|
||||
font-size: 47px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.quick-actions {
|
||||
position: static;
|
||||
padding: 15px;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
margin: 0;
|
||||
|
||||
> * {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
> .menu-button {
|
||||
margin-right: 0;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.alert {
|
||||
font-size: 14px;
|
||||
margin-bottom: 0px;
|
||||
|
||||
&.alert-info {
|
||||
background-color: #eee;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
margin-right: 0px;
|
||||
|
||||
.dropdown-toggle i {
|
||||
padding: 0 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
.fa {
|
||||
line-height: 44px;
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
#user_dropdown {
|
||||
font-size: 25px;
|
||||
color: #eee;
|
||||
|
||||
i {
|
||||
margin-top: 12px;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#acp-search {
|
||||
input {
|
||||
padding: 10px 20px;
|
||||
width: 250px;
|
||||
height: 44px;
|
||||
background-color: rgba(0,0,0,.2);
|
||||
border-radius: 3px;
|
||||
box-shadow: none;
|
||||
transition: .4s ease background-color;
|
||||
|
||||
&:focus {
|
||||
background-color: #eee;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown:not(.open) {
|
||||
&:before {
|
||||
content: '/';
|
||||
border: 1px solid $gray-500;
|
||||
border-radius: 5px;
|
||||
padding: 0px 6px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
pointer-events: none;
|
||||
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
left: 1em;
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: attr(data-text);
|
||||
position: absolute;
|
||||
top: 13px;
|
||||
left: 3em;
|
||||
font-size: small;
|
||||
font-weight: 600;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
input {
|
||||
color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.search-match {
|
||||
font-weight: 700;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
#main-menu > li {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
> ul {
|
||||
list-style-type: none;
|
||||
padding: 0px;
|
||||
position: absolute;
|
||||
bottom: -16px;
|
||||
left: 50px;
|
||||
|
||||
> li {
|
||||
float: left;
|
||||
margin-right: 30px;
|
||||
border-bottom: 4px solid transparent;
|
||||
transition: border-color 150ms linear;
|
||||
|
||||
&:hover {
|
||||
border-color: darken($primary, 20%);
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-color: $primary;
|
||||
}
|
||||
|
||||
> a {
|
||||
color: white;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.plugins-menu {
|
||||
max-height: 50vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
@ -1,191 +1,12 @@
|
||||
#mobile-menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#panel {
|
||||
background-color: inherit;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
body, #panel, .slideout-menu {
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.header {
|
||||
height: 58px;
|
||||
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.26);
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
z-index: 5;
|
||||
|
||||
#main-page-title {
|
||||
bottom: -31px;
|
||||
font-size: 20px;
|
||||
color: #FFF;
|
||||
left: 52px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
#main-menu {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#mobile-menu {
|
||||
width: 22px;
|
||||
background: none;
|
||||
border: none;
|
||||
margin-right: 10px;
|
||||
margin-left: -5px;
|
||||
outline: none !important;
|
||||
display: block;
|
||||
|
||||
position: absolute;
|
||||
top: 22px;
|
||||
left: 22px;
|
||||
|
||||
.bar {
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: #fff;
|
||||
margin-bottom: 3px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
#menu {
|
||||
background-color: #1D1F20;
|
||||
background-image: linear-gradient(145deg, #1D1F20, #404348);
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-header-title {
|
||||
font-weight: 400;
|
||||
letter-spacing: 0.5px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.menu-section {
|
||||
margin: 25px 0;
|
||||
|
||||
&.quick-actions {
|
||||
margin: 0;
|
||||
|
||||
.button-group {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.alert {
|
||||
border-radius: 0;
|
||||
|
||||
.span {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.menu-section-title {
|
||||
text-transform: uppercase;
|
||||
color: #85888d;
|
||||
font-weight: 200;
|
||||
font-size: 13px;
|
||||
letter-spacing: 1px;
|
||||
padding: 0 20px;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.menu-section-list {
|
||||
padding: 0;
|
||||
margin: 10px 0;
|
||||
list-style: none;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
#panel {
|
||||
background: white;
|
||||
min-height: 100%;
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
.slideout-menu {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 0;
|
||||
width: 256px;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.slideout-panel {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.slideout-open,
|
||||
.slideout-open body,
|
||||
.slideout-open .slideout-panel {
|
||||
overflow: hidden;
|
||||
overflow-y: hidden !important;
|
||||
}
|
||||
|
||||
.slideout-open .slideout-menu {
|
||||
display: block;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
html {
|
||||
height: 100%;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.slideout-open {
|
||||
overflow-y: hidden;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.content-header, .settings-header {
|
||||
font-size: 200%;
|
||||
margin-bottom: 20px;
|
||||
margin-left: -2px;
|
||||
}
|
||||
|
||||
|
||||
.dropdown-menu {
|
||||
margin-top: -35px;
|
||||
margin-right: -2px;
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
$white: #fff !default;
|
||||
$gray-100: #f8f9fa !default;
|
||||
$gray-200: #e9ecef !default;
|
||||
$gray-300: #dee2e6 !default;
|
||||
$gray-400: #ced4da !default;
|
||||
$gray-500: #adb5bd !default;
|
||||
$gray-600: #6c757d !default;
|
||||
$gray-700: #495057 !default;
|
||||
$gray-800: #343a40 !default;
|
||||
$gray-900: #212529 !default;
|
||||
$black: #000 !default;
|
||||
|
||||
$blue: #0d6efd !default;
|
||||
$red: #dc3545 !default;
|
||||
$yellow: #ffc107 !default;
|
||||
$green: #198754 !default;
|
||||
$cyan: #0dcaf0 !default;
|
||||
|
||||
$body-color: $gray-800;
|
||||
$text-muted: $gray-600 !default;
|
||||
|
||||
// Custom fonts
|
||||
$font-family-sans-serif: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
|
||||
$font-family-secondary: "Poppins", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
|
||||
$font-weight-semibold: 500 !default;
|
||||
$font-size-base: 1rem !default;
|
||||
|
||||
$link-decoration: none;
|
||||
$link-hover-decoration: underline;
|
||||
|
||||
// options
|
||||
$enable-gradients: false;
|
||||
|
||||
// no caret on dropdown-toggle
|
||||
$enable-caret: false;
|
||||
|
||||
// disable smooth scroll, this makes window.scrollTo(0,0) in ajaxify.js take x milliseconds
|
||||
$enable-smooth-scroll: false;
|
||||
|
||||
$enable-shadows: true;
|
||||
|
||||
|
||||
// Buttons
|
||||
$input-btn-padding-y: .4rem !default;
|
||||
$input-btn-padding-x: 1rem !default;
|
||||
|
||||
// Forms
|
||||
|
||||
$input-padding-y: 0.5rem !default;
|
||||
$input-padding-x: 0.75rem !default;
|
||||
// $input-padding-y-sm: 0 !default;
|
||||
// $input-padding-x-sm: 0 !default;
|
||||
// $input-padding-y-lg: ($font-size-base * 1.25) !default;
|
||||
// $input-padding-x-lg: 0 !default;
|
||||
|
||||
$input-btn-focus-color: #c29ffa80 !default;
|
||||
$input-border-radius: 0.25rem !default;
|
||||
$input-focus-border-color: #c29ffa80 !default;
|
||||
// change inset shadow to outset
|
||||
$box-shadow-inset: 0 1px 2px rgba($black, .075) !default;
|
||||
|
@ -1,20 +0,0 @@
|
||||
.settings {
|
||||
.section-content {
|
||||
border-left: 3px solid $primary;
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
font-size: 16px;
|
||||
padding-left: 20px;
|
||||
li:not(:last-child) {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
&:hover{
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
#sidebar-left, #offcanvas {
|
||||
.btn-ghost, .btn-ghost-sm {
|
||||
i {
|
||||
color: $gray-500;
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-body {
|
||||
.btn-ghost-sm {
|
||||
padding-left: 38px!important;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
// system font family
|
||||
// based on those in [bootstrap@5.0.0-alpha1](https://github.com/twbs/bootstrap/blob/b531bda07cbea2e124194aefe3b8597b3ac2578e/scss/_variables.scss#L386)
|
||||
// and [wordpress admin](https://core.trac.wordpress.org/browser/trunk/src/wp-admin/css/common.css?rev=47835#L220)
|
||||
// system-ui : supported by the latest browsers for this very purpose
|
||||
// apple-system, BlinkMacSystemFont : iOS and MacOS
|
||||
// "Segoe UI" : Windows Vista, 7, 8, 10
|
||||
// Roboto : Android 4.0+
|
||||
// Oxygen-Sans : KDE
|
||||
// Ubuntu : Ubuntu
|
||||
// Cantarell : GNOME
|
||||
// "Helvetica Neue" : Mac OS X
|
||||
// Helvetica : backup, better looking than Arial
|
||||
// Arial : backup
|
||||
// "Noto Sans" : broader language support on Android
|
||||
// sans-serif : whatever the browser can give us
|
||||
// "Apple Color Emoji" : Emoji on iOS and MacOS
|
||||
// "Segoe UI Emoji", "Segoe UI Symbol" : Emoji on Windows
|
||||
// "Noto Color Emoji" : Emoji on Android
|
||||
$font-family-system: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
$font-family-sans-serif: $font-family-system;
|
||||
$font-size-base: 0.875rem!default;
|
||||
|
||||
$body-color: #666!default;
|
||||
$light: #f5f5f5;
|
||||
|
||||
// options
|
||||
$enable-gradients: false;
|
||||
// no caret on dropdown-toggle
|
||||
$enable-caret: false;
|
||||
|
||||
$font-size-base: 1rem !default;
|
||||
$font-weight-base: 400 !default;
|
||||
|
||||
// Buttons
|
||||
$input-btn-padding-y: .4rem !default;
|
||||
$input-btn-padding-x: 1rem !default;
|
||||
|
||||
// Forms
|
||||
|
||||
$input-padding-y: 0.4rem !default;
|
||||
$input-padding-x: 0 !default;
|
||||
$input-padding-y-sm: 0 !default;
|
||||
$input-padding-x-sm: 0 !default;
|
||||
$input-padding-y-lg: ($font-size-base * 1.25) !default;
|
||||
$input-padding-x-lg: 0 !default;
|
@ -1,22 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
define('admin/settings/homepage', ['admin/settings'], function () {
|
||||
function toggleCustomRoute() {
|
||||
if ($('[data-field="homePageRoute"]').val() === 'custom') {
|
||||
$('#homePageCustom').show();
|
||||
} else {
|
||||
$('#homePageCustom').hide();
|
||||
}
|
||||
}
|
||||
|
||||
const Homepage = {};
|
||||
|
||||
Homepage.init = function () {
|
||||
$('[data-field="homePageRoute"]').on('change', toggleCustomRoute);
|
||||
|
||||
toggleCustomRoute();
|
||||
};
|
||||
|
||||
return Homepage;
|
||||
});
|
@ -1,27 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
define('admin/settings/social', ['alerts'], function (alerts) {
|
||||
const social = {};
|
||||
|
||||
social.init = function () {
|
||||
$('#save').on('click', function () {
|
||||
const networks = [];
|
||||
$('#postSharingNetworks input[type="checkbox"]').each(function () {
|
||||
if ($(this).prop('checked')) {
|
||||
networks.push($(this).attr('id'));
|
||||
}
|
||||
});
|
||||
|
||||
socket.emit('admin.social.savePostSharingNetworks', networks, function (err) {
|
||||
if (err) {
|
||||
return alerts.error(err);
|
||||
}
|
||||
|
||||
alerts.success('[[admin/settings/social:save-success]]');
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
return social;
|
||||
});
|
@ -1,9 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const social = require('../../social');
|
||||
|
||||
const SocketSocial = module.exports;
|
||||
|
||||
SocketSocial.savePostSharingNetworks = async function (socket, data) {
|
||||
await social.setActivePostSharingNetworks(data);
|
||||
};
|
@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
const db = require('../../database');
|
||||
|
||||
module.exports = {
|
||||
name: 'Migrate post sharing values to config',
|
||||
timestamp: Date.UTC(2023, 4, 23),
|
||||
method: async () => {
|
||||
const activated = await db.getSetMembers('social:posts.activated');
|
||||
if (activated.length) {
|
||||
const data = {};
|
||||
activated.forEach((id) => {
|
||||
data[`post-sharing-${id}`] = 1;
|
||||
});
|
||||
await db.setObject('config', data);
|
||||
await db.delete('social:posts.activated');
|
||||
}
|
||||
},
|
||||
};
|
@ -1,146 +1,147 @@
|
||||
|
||||
<div class="row database">
|
||||
{{{ if mongo }}}
|
||||
<div class="col-lg-6">
|
||||
{{{ if mongo.serverStatusError }}}
|
||||
<div class="alert alert-warning">
|
||||
{mongo.serverStatusError}
|
||||
</div>
|
||||
{{{ end }}}
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:mongo]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<span>[[admin/advanced/database:mongo.version]]</span> <span class="text-end">{mongo.version}</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{mongo.uptime}</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.storage-engine]]</span> <span class="text-end">{mongo.storageEngine}</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.collections]]</span> <span class="text-end formatted-number">{mongo.collections}</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.objects]]</span> <span class="text-end formatted-number">{mongo.objects}</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.avg-object-size]]</span> <span class="text-end">[[admin/advanced/database:x-b, {mongo.avgObjSize}]]</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:mongo.data-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.dataSize}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.storage-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.storageSize}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.index-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.indexSize}]]</span><br/>
|
||||
{{{ if mongo.fileSize }}}
|
||||
<span>[[admin/advanced/database:mongo.file-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.fileSize}]]</span><br/>
|
||||
{{{ end }}}
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:mongo.resident-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.resident}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.virtual-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.virtual}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.mapped-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.mapped}]]</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:mongo.bytes-in]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.network.bytesIn}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.bytes-out]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.network.bytesOut}]]</span><br/>
|
||||
<span>[[admin/advanced/database:mongo.num-requests]]</span> <span class="text-end">{mongo.network.numRequests}</span><br/>
|
||||
<div class="acp-page-container">
|
||||
<div class="row database">
|
||||
{{{ if mongo }}}
|
||||
<div class="{{{ if redis }}}col-lg-6{{{ else }}}col-lg-12{{{ end }}}">
|
||||
{{{ if mongo.serverStatusError }}}
|
||||
<div class="alert alert-warning">
|
||||
{mongo.serverStatusError}
|
||||
</div>
|
||||
{{{ end }}}
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:mongo]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.version]]</span> <span class="text-end">{mongo.version}</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{mongo.uptime}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.storage-engine]]</span> <span class="text-end">{mongo.storageEngine}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.collections]]</span> <span class="text-end formatted-number">{mongo.collections}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.objects]]</span> <span class="text-end formatted-number">{mongo.objects}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.avg-object-size]]</span> <span class="text-end">[[admin/advanced/database:x-b, {mongo.avgObjSize}]]</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.data-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.dataSize}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.storage-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.storageSize}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.index-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.indexSize}]]</span></div>
|
||||
{{{ if mongo.fileSize }}}
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.file-size]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.fileSize}]]</span></div>
|
||||
{{{ end }}}
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.resident-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.resident}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.virtual-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.virtual}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.mapped-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.mem.mapped}]]</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.bytes-in]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.network.bytesIn}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.bytes-out]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {mongo.network.bytesOut}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:mongo.num-requests]]</span> <span class="text-end">{mongo.network.numRequests}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
{{{ end }}}
|
||||
|
||||
{{{ if redis }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:redis]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<span>[[admin/advanced/database:redis.version]]</span> <span class="text-end">{redis.redis_version}</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{redis.uptime_in_seconds}</span><br/>
|
||||
<span>[[admin/advanced/database:uptime-days]]</span> <span class="text-end">{redis.uptime_in_days}</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:redis.keys]]</span> <span class="text-end formatted-number">{redis.keys}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.expires]]</span> <span class="text-end formatted-number">{redis.expires}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.avg-ttl]]</span> <span class="text-end formatted-number">{redis.avg_ttl}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.connected-clients]]</span> <span class="text-end">{redis.connected_clients}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.connected-slaves]]</span> <span class="text-end">{redis.connected_slaves}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.blocked-clients]]</span> <span class="text-end">{redis.blocked_clients}</span><br/>
|
||||
<hr/>
|
||||
{{{ if redis }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:redis]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.version]]</span> <span class="text-end">{redis.redis_version}</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{redis.uptime_in_seconds}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:uptime-days]]</span> <span class="text-end">{redis.uptime_in_days}</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.keys]]</span> <span class="text-end formatted-number">{redis.keys}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.expires]]</span> <span class="text-end formatted-number">{redis.expires}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.avg-ttl]]</span> <span class="text-end formatted-number">{redis.avg_ttl}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.connected-clients]]</span> <span class="text-end">{redis.connected_clients}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.connected-slaves]]</span> <span class="text-end">{redis.connected_slaves}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.blocked-clients]]</span> <span class="text-end">{redis.blocked_clients}</span></div>
|
||||
<hr/>
|
||||
|
||||
<span>[[admin/advanced/database:redis.used-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.used_memory_human}]]</span><br/>
|
||||
<span>[[admin/advanced/database:redis.memory-frag-ratio]]</span> <span class="text-end">{redis.mem_fragmentation_ratio}</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:redis.total-connections-recieved]]</span> <span class="text-end formatted-number">{redis.total_connections_received}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.total-commands-processed]]</span> <span class="text-end formatted-number">{redis.total_commands_processed}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.iops]]</span> <span class="text-end formatted-number">{redis.instantaneous_ops_per_sec}</span><br/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.used-memory]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.used_memory_human}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.memory-frag-ratio]]</span> <span class="text-end">{redis.mem_fragmentation_ratio}</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.total-connections-recieved]]</span> <span class="text-end formatted-number">{redis.total_connections_received}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.total-commands-processed]]</span> <span class="text-end formatted-number">{redis.total_commands_processed}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.iops]]</span> <span class="text-end formatted-number">{redis.instantaneous_ops_per_sec}</span></div>
|
||||
|
||||
<span>[[admin/advanced/database:redis.iinput]]</span> <span class="text-end">[[admin/advanced/database:x-mb, {redis.instantaneous_input}]]</span><br/>
|
||||
<span>[[admin/advanced/database:redis.ioutput]]</span> <span class="text-end">[[admin/advanced/database:x-mb, {redis.instantaneous_output}]]</span><br/>
|
||||
<span>[[admin/advanced/database:redis.total-input]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.total_net_input}]]</span><br/>
|
||||
<span>[[admin/advanced/database:redis.total-output]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.total_net_output}]]</span><br/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.iinput]]</span> <span class="text-end">[[admin/advanced/database:x-mb, {redis.instantaneous_input}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.ioutput]]</span> <span class="text-end">[[admin/advanced/database:x-mb, {redis.instantaneous_output}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.total-input]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.total_net_input}]]</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.total-output]]</span> <span class="text-end">[[admin/advanced/database:x-gb, {redis.total_net_output}]]</span></div>
|
||||
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:redis.keyspace-hits]]</span> <span class="text-end formatted-number">{redis.keyspace_hits}</span><br/>
|
||||
<span>[[admin/advanced/database:redis.keyspace-misses]]</span> <span class="text-end formatted-number">{redis.keyspace_misses}</span><br/>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.keyspace-hits]]</span> <span class="text-end formatted-number">{redis.keyspace_hits}</span></div>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:redis.keyspace-misses]]</span> <span class="text-end formatted-number">{redis.keyspace_misses}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
{{{ end }}}
|
||||
|
||||
{{{ if postgres }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:postgres]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<span>[[admin/advanced/database:postgres.version]]</span> <span class="text-end">{postgres.version}</span><br/>
|
||||
<hr/>
|
||||
<span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{postgres.uptime}</span><br/>
|
||||
{{{ if postgres }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header"><i class="fa fa-hdd-o"></i> [[admin/advanced/database:postgres]]</div>
|
||||
<div class="card-body">
|
||||
<div class="database-info">
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:postgres.version]]</span> <span class="text-end">{postgres.version}</span></div>
|
||||
<hr/>
|
||||
<div class="d-flex justify-content-between"><span>[[admin/advanced/database:uptime-seconds]]</span> <span class="text-end formatted-number">{postgres.uptime}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
</div>
|
||||
{{{ end }}}
|
||||
</div>
|
||||
|
||||
<div class="row database">
|
||||
{{{ if mongo }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".mongodb-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:mongo.raw-info]]
|
||||
</h5>
|
||||
<div class="row">
|
||||
{{{ if mongo }}}
|
||||
<div class="{{{ if redis }}}col-lg-6{{{ else }}}col-lg-12{{{ end }}}">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".mongodb-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:mongo.raw-info]]
|
||||
</h5>
|
||||
|
||||
<div class="card-body mongodb-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{mongo.raw}</pre>
|
||||
<div class="card-body mongodb-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{mongo.raw}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
{{{ end }}}
|
||||
|
||||
{{{ if redis }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".redis-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:redis.raw-info]]
|
||||
</h5>
|
||||
{{{ if redis }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".redis-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:redis.raw-info]]
|
||||
</h5>
|
||||
|
||||
<div class="card-body redis-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{redis.raw}</pre>
|
||||
<div class="card-body redis-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{redis.raw}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
{{{ end }}}
|
||||
|
||||
{{{ if postgres }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".postgresql-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:postgres.raw-info]]
|
||||
</h5>
|
||||
{{{ if postgres }}}
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<h5 class="card-header" data-bs-toggle="collapse" data-bs-target=".postgresql-raw">
|
||||
<i class="fa fa-caret-down"></i> [[admin/advanced/database:postgres.raw-info]]
|
||||
</h5>
|
||||
|
||||
<div class="card-body postgresql-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{postgres.raw}</pre>
|
||||
<div class="card-body postgresql-raw collapse">
|
||||
<div class="highlight">
|
||||
<pre>{postgres.raw}</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{{ end }}}
|
||||
</div>
|
||||
{{{ end }}}
|
||||
</div>
|
||||
</div>
|
@ -1,77 +1,79 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-center">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div><canvas id="not-found" height="250"></canvas></div>
|
||||
<div class="px-lg-4">
|
||||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<div class="row">
|
||||
<div class="col-sm-6 text-center">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div><canvas id="not-found" height="250"></canvas></div>
|
||||
</div>
|
||||
<div class="card-footer"><small>
|
||||
<strong>[[admin/advanced/errors:figure-x, 1]]</strong> –
|
||||
[[admin/advanced/errors:error-events-per-day, [[admin/advanced/errors:error.404]]]]
|
||||
</small></div>
|
||||
</div>
|
||||
<div class="card-footer"><small>
|
||||
<strong>[[admin/advanced/errors:figure-x, 1]]</strong> –
|
||||
[[admin/advanced/errors:error-events-per-day, [[admin/advanced/errors:error.404]]]]
|
||||
</small></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 text-center">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div><canvas id="toobusy" height="250"></canvas></div>
|
||||
<div class="col-sm-6 text-center">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div><canvas id="toobusy" height="250"></canvas></div>
|
||||
</div>
|
||||
<div class="card-footer"><small>
|
||||
<strong>[[admin/advanced/errors:figure-x, 2]]</strong> –
|
||||
[[admin/advanced/errors:error-events-per-day, [[admin/advanced/errors:error.503]]]]
|
||||
</small></div>
|
||||
</div>
|
||||
<div class="card-footer"><small>
|
||||
<strong>[[admin/advanced/errors:figure-x, 2]]</strong> –
|
||||
[[admin/advanced/errors:error-events-per-day, [[admin/advanced/errors:error.503]]]]
|
||||
</small></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 acp-sidebar">
|
||||
<div class="card">
|
||||
<div class="card-header">[[admin/advanced/errors:manage-error-log]]</div>
|
||||
<div class="card-body">
|
||||
<div class="d-grid gap-2" role="group">
|
||||
<a class="btn btn-info" target="_top" href="{config.relative_path}/admin/advanced/errors/export">
|
||||
<i class="fa fa-download"></i> [[admin/advanced/errors:export-error-log]]
|
||||
</a>
|
||||
<button class="btn btn-danger" data-action="clear">
|
||||
<i class="fa fa-trash"></i> [[admin/advanced/errors:clear-error-log]]
|
||||
</button>
|
||||
<div class="col-lg-3 acp-sidebar">
|
||||
<div class="card">
|
||||
<div class="card-header">[[admin/advanced/errors:manage-error-log]]</div>
|
||||
<div class="card-body">
|
||||
<div class="d-grid gap-2" role="group">
|
||||
<a class="btn btn-info" target="_top" href="{config.relative_path}/admin/advanced/errors/export">
|
||||
<i class="fa fa-download"></i> [[admin/advanced/errors:export-error-log]]
|
||||
</a>
|
||||
<button class="btn btn-danger" data-action="clear">
|
||||
<i class="fa fa-trash"></i> [[admin/advanced/errors:clear-error-log]]
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="fa fa-exclamation-triangle"></i> [[admin/advanced/errors:error.404]]
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<th>[[admin/advanced/errors:route]]</th>
|
||||
<th>[[admin/advanced/errors:count]]</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{{ each not-found }}}
|
||||
<tr>
|
||||
<td>{./value}</td>
|
||||
<td>{./score}</td>
|
||||
</tr>
|
||||
{{{ end }}}
|
||||
{{{ if !not-found.length }}}
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="alert alert-success">
|
||||
[[admin/advanced/errors:no-routes-not-found]]
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{{ end }}}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="fa fa-exclamation-triangle"></i> [[admin/advanced/errors:error.404]]
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<th>[[admin/advanced/errors:route]]</th>
|
||||
<th>[[admin/advanced/errors:count]]</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{{ each not-found }}}
|
||||
<tr>
|
||||
<td>{./value}</td>
|
||||
<td>{./score}</td>
|
||||
</tr>
|
||||
{{{ end }}}
|
||||
{{{ if !not-found.length }}}
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="alert alert-success">
|
||||
[[admin/advanced/errors:no-routes-not-found]]
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{{ end }}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,80 +1,81 @@
|
||||
|
||||
<div id="rewards">
|
||||
<ul id="active">
|
||||
{{{ each active }}}
|
||||
<li data-rid="{active.rid}" data-id="{active.id}">
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-8">
|
||||
<form class="main d-inline-block">
|
||||
<div class="card card-body d-inline-block if-block">
|
||||
<div class="tags d-flex flex-column gap-2 px-lg-4">
|
||||
<div class="d-flex border-bottom py-2 m-0 sticky-top acp-page-main-header align-items-center justify-content-between flex-wrap gap-2">
|
||||
<div class="">
|
||||
<h4 class="fw-bold tracking-tight mb-0">[[admin/extend/rewards:rewards]]</h4>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-1">
|
||||
<button id="new" class="btn btn-light btn-sm text-nowrap" type="button">
|
||||
<i class="fa fa-fw fa-plus"></i> [[admin/extend/rewards:add-reward]]
|
||||
</button>
|
||||
<button id="save" class="btn btn-primary btn-sm fw-semibold ff-secondary w-100 text-center text-nowrap">[[admin/admin:save-changes]]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="rewards" class="">
|
||||
<ul id="active" class="list-unstyled p-0 m-0">
|
||||
{{{ each active }}}
|
||||
<li data-rid="{active.rid}" data-id="{active.id}">
|
||||
<div class="d-flex gap-1 mb-3 flex-wrap">
|
||||
<form class="main d-flex gap-1">
|
||||
<div class="card card-body m-0 if-block border-info border border-2">
|
||||
<label class="form-label" for="condition-if-users">[[admin/extend/rewards:condition-if-users]]</label>
|
||||
<select id="condition-if-users" class="form-select" name="condition" data-selected="{active.condition}">
|
||||
<select id="condition-if-users" class="form-select form-select-sm" name="condition" data-selected="{active.condition}">
|
||||
{{{ each conditions }}}
|
||||
<option value="{conditions.condition}">{conditions.name}</option>
|
||||
{{{ end }}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="card card-body d-inline-block this-block">
|
||||
<div class="card card-body m-0 this-block border-warning border border-2">
|
||||
<label class="form-label" for="condition-is">[[admin/extend/rewards:condition-is]]</label>
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<select id="condition-is" class="form-select" name="conditional" data-selected="{active.conditional}">
|
||||
{{{ each conditionals }}}
|
||||
<option value="{conditionals.conditional}">{conditionals.name}</option>
|
||||
{{{ end }}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<input class="form-control" type="text" name="value" value="{active.value}" />
|
||||
</div>
|
||||
<div class="d-flex gap-1 flex-nowrap">
|
||||
<select id="condition-is" class="form-select form-select-sm" name="conditional" data-selected="{active.conditional}" style="max-width: 64px;">
|
||||
{{{ each conditionals }}}
|
||||
<option value="{conditionals.conditional}">{conditionals.name}</option>
|
||||
{{{ end }}}
|
||||
</select>
|
||||
|
||||
<input class="form-control form-control-sm" type="text" name="value" value="{active.value}" style="max-width: 64px;"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-body d-inline-block then-block">
|
||||
<div class="card card-body m-0 then-block border-primary border border-2">
|
||||
<label class="form-label" for="condition-then">[[admin/extend/rewards:condition-then]]</label>
|
||||
<select id="condition-then" class="form-select" name="rid" data-selected="{active.rid}">
|
||||
<select id="condition-then" class="form-select form-select-sm" name="rid" data-selected="{active.rid}">
|
||||
{{{ each ../../rewards }}}
|
||||
<option value="{rewards.rid}">{rewards.name}</option>
|
||||
{{{ end }}}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-12 col-lg-4">
|
||||
<form class="rewards d-inline-block">
|
||||
<div class="inputs card card-body d-inline-block reward-block"></div>
|
||||
<form class="rewards">
|
||||
<div class="inputs card card-body m-0 h-100 reward-block border-success border border-2"><div class="d-flex h-100 align-items-center">[[admin/extend/rewards:select-reward]]</div></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="float-start">
|
||||
<div class="card-body d-inline-block">
|
||||
<form class="main">
|
||||
<label class="form-label" for="claimable">[[admin/extend/rewards:max-claims]] <small>[[admin/extend/rewards:zero-infinite]]</small></label>
|
||||
<input id="claimable" class="form-control" type="text" name="claimable" value="{active.claimable}" placeholder="1" />
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<form class="main d-flex gap-1 align-items-start gap-2">
|
||||
<div class="d-flex flex-column gap-0">
|
||||
<label class="form-label" for="claimable">[[admin/extend/rewards:max-claims]]</label>
|
||||
<p class="form-text mb-0">
|
||||
[[admin/extend/rewards:zero-infinite]]
|
||||
</p>
|
||||
</div>
|
||||
<input id="claimable" class="form-control form-control-sm" type="text" name="claimable" value="{active.claimable}" placeholder="1" style="max-width: 64px;"/>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
|
||||
<div class="float-end">
|
||||
<div class="card-body d-inline-block">
|
||||
<button class="btn btn-danger delete">[[admin/extend/rewards:delete]]</button>
|
||||
{{{ if active.disabled }}}
|
||||
<button class="btn btn-success toggle">[[admin/extend/rewards:enable]]</button>
|
||||
{{{ else }}}
|
||||
<button class="btn btn-warning toggle">[[admin/extend/rewards:disable]]</button>
|
||||
{{{ end }}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</li>
|
||||
{{{ end }}}
|
||||
</ul>
|
||||
</div>
|
||||
<button class="btn btn-light btn-sm toggle disable {{{ if active.disabled }}}hidden{{{ end }}}"><i class="fa fa-ban text-danger"></i> [[admin/extend/rewards:disable]]</button>
|
||||
|
||||
<div class="floating-button">
|
||||
<button id="new" class="btn btn-primary position-fixed end-0 px-3 py-2 mb-4 me-4 rounded-circle fs-4" type="button" style="width: 64px; height: 64px;">
|
||||
<i class="fa fa-fw fa-plus"></i>
|
||||
</button>
|
||||
<button class="btn btn-light btn-sm toggle enable {{{ if !active.disabled }}}hidden{{{ end }}}"><i class="fa fa-check text-success"></i> [[admin/extend/rewards:enable]]</button>
|
||||
|
||||
<button class="btn btn-light btn-sm delete"><i class="fa fa-trash text-danger"></i> [[admin/extend/rewards:delete]]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- IMPORT admin/partials/save_button.tpl -->
|
||||
<hr/>
|
||||
</li>
|
||||
{{{ end }}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue