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",
|
"post-sharing": "Post Sharing",
|
||||||
"info-plugins-additional": "Plugins can add additional networks for sharing posts.",
|
"info-plugins-additional": "Plugins can add additional networks for sharing posts."
|
||||||
"save-success": "Successfully saved Post Sharing Networks!"
|
|
||||||
}
|
}
|
@ -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) {
|
@media (max-width: 991px) {
|
||||||
body {
|
body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
#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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: hidden;
|
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,80 +1,81 @@
|
|||||||
|
|
||||||
<div id="rewards">
|
<div class="tags d-flex flex-column gap-2 px-lg-4">
|
||||||
<ul id="active">
|
<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 }}}
|
{{{ each active }}}
|
||||||
<li data-rid="{active.rid}" data-id="{active.id}">
|
<li data-rid="{active.rid}" data-id="{active.id}">
|
||||||
<div class="row">
|
<div class="d-flex gap-1 mb-3 flex-wrap">
|
||||||
<div class="col-12 col-lg-8">
|
<form class="main d-flex gap-1">
|
||||||
<form class="main d-inline-block">
|
<div class="card card-body m-0 if-block border-info border border-2">
|
||||||
<div class="card card-body d-inline-block if-block">
|
|
||||||
<label class="form-label" for="condition-if-users">[[admin/extend/rewards:condition-if-users]]</label>
|
<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 }}}
|
{{{ each conditions }}}
|
||||||
<option value="{conditions.condition}">{conditions.name}</option>
|
<option value="{conditions.condition}">{conditions.name}</option>
|
||||||
{{{ end }}}
|
{{{ end }}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</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>
|
<label class="form-label" for="condition-is">[[admin/extend/rewards:condition-is]]</label>
|
||||||
<div class="row">
|
<div class="d-flex gap-1 flex-nowrap">
|
||||||
<div class="col-4">
|
<select id="condition-is" class="form-select form-select-sm" name="conditional" data-selected="{active.conditional}" style="max-width: 64px;">
|
||||||
<select id="condition-is" class="form-select" name="conditional" data-selected="{active.conditional}">
|
|
||||||
{{{ each conditionals }}}
|
{{{ each conditionals }}}
|
||||||
<option value="{conditionals.conditional}">{conditionals.name}</option>
|
<option value="{conditionals.conditional}">{conditionals.name}</option>
|
||||||
{{{ end }}}
|
{{{ end }}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
|
||||||
<div class="col-8">
|
<input class="form-control form-control-sm" type="text" name="value" value="{active.value}" style="max-width: 64px;"/>
|
||||||
<input class="form-control" type="text" name="value" value="{active.value}" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</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>
|
<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 }}}
|
{{{ each ../../rewards }}}
|
||||||
<option value="{rewards.rid}">{rewards.name}</option>
|
<option value="{rewards.rid}">{rewards.name}</option>
|
||||||
{{{ end }}}
|
{{{ end }}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
<form class="rewards">
|
||||||
<div class="col-12 col-lg-4">
|
<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 class="rewards d-inline-block">
|
|
||||||
<div class="inputs card card-body d-inline-block reward-block"></div>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<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>
|
</div>
|
||||||
|
<input id="claimable" class="form-control form-control-sm" type="text" name="claimable" value="{active.claimable}" placeholder="1" style="max-width: 64px;"/>
|
||||||
|
|
||||||
<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" />
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
<div class="">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="float-end">
|
<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="card-body d-inline-block">
|
|
||||||
<button class="btn btn-danger delete">[[admin/extend/rewards:delete]]</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>
|
||||||
{{{ if active.disabled }}}
|
|
||||||
<button class="btn btn-success toggle">[[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>
|
||||||
{{{ else }}}
|
|
||||||
<button class="btn btn-warning toggle">[[admin/extend/rewards:disable]]</button>
|
|
||||||
{{{ end }}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
|
||||||
|
<hr/>
|
||||||
</li>
|
</li>
|
||||||
{{{ end }}}
|
{{{ end }}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<!-- IMPORT admin/partials/save_button.tpl -->
|
|
||||||
</div>
|
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue