Add files via upload
948
sleeky-backend/assets/css/_base.scss
Normal file
@ -0,0 +1,948 @@
|
||||
@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800');
|
||||
@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
|
||||
|
||||
// Mobile mixin
|
||||
@mixin for-size($range) {
|
||||
$phone-upper-boundary: 900px;
|
||||
$tablet-portrait-upper-boundary: 1100px;
|
||||
$tablet-landscape-upper-boundary: 1200px;
|
||||
$desktop-upper-boundary: 1800px;
|
||||
|
||||
@if $range == phone-only {
|
||||
@media (max-width: #{$phone-upper-boundary - 1}) { @content; }
|
||||
} @else if $range == tablet-portrait-up {
|
||||
@media (min-width: $phone-upper-boundary) { @content; }
|
||||
} @else if $range == tablet-landscape-up {
|
||||
@media (min-width: $tablet-portrait-upper-boundary) { @content; }
|
||||
} @else if $range == desktop-up {
|
||||
@media (min-width: $tablet-landscape-upper-boundary) { @content; }
|
||||
} @else if $range == big-desktop-up {
|
||||
@media (min-width: $desktop-upper-boundary) { @content; }
|
||||
}
|
||||
}
|
||||
|
||||
// Use it like this:
|
||||
// @include for-size(phone-only) {
|
||||
// margin: 30px;
|
||||
// }
|
||||
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
body {
|
||||
background-color: $darker;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div, p, td, input, p {
|
||||
font-family: 'Open Sans', sans-serif !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
color: $title;
|
||||
}
|
||||
|
||||
p {
|
||||
color: $text;
|
||||
}
|
||||
|
||||
a, a:link, a:active, a:visited {
|
||||
color: #828282;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: darken($title, 20%);
|
||||
transition: 0.4s all;
|
||||
}
|
||||
|
||||
input {
|
||||
padding: 10px;
|
||||
border: none !important;
|
||||
background: $light !important;
|
||||
color: $text !important;
|
||||
font-size: 1em !important;
|
||||
outline: none;
|
||||
margin: 0px 5px !important;
|
||||
border-radius: 0 !important;
|
||||
|
||||
@if ($theme == "light") {
|
||||
border-radius: 3px !important;
|
||||
}
|
||||
}
|
||||
|
||||
input.button,
|
||||
input.submit,
|
||||
input[type="submit"] {
|
||||
border-left: 7px solid $accent !important;
|
||||
background: $light !important;
|
||||
font-weight: 600;
|
||||
transition: 0.3s all !important;
|
||||
cursor: pointer;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: $accent !important;
|
||||
border-left: none !important;
|
||||
color: white !important;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
// Need to fix this, because I've had to copy this down lower to make it apply to the add URL button
|
||||
input.button:hover,
|
||||
input.submit:hover,
|
||||
input[type="submit"]:hover {
|
||||
background: darken($accent, 15%) !important;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: darken($accent, 15%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="button"]:disabled,
|
||||
input[type="submit"]:disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
input.text,
|
||||
input[type="text"] {
|
||||
border: 1px solid rgba(255, 255, 255, 0.25) !important;
|
||||
transition: 0.4s all;
|
||||
}
|
||||
|
||||
@if ($theme != "light") {
|
||||
input.text:active,
|
||||
input.text:focus {
|
||||
border: 1px solid $accent !important;
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
width: 150px;
|
||||
padding: 5px 35px 5px 10px;
|
||||
// font-size: 0.9em;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
height: 26px;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
color: $text;
|
||||
background: url(data:image/png;base64,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) 96% / 15% no-repeat $light;
|
||||
margin: 5px 10px;
|
||||
transition: 0.4s all;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
select:hover {
|
||||
background: url(data:image/png;base64,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) 96% / 15% no-repeat $light;
|
||||
}
|
||||
|
||||
#javascript_error {
|
||||
background: red;
|
||||
color: white;
|
||||
padding: 20px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
// End Globals
|
||||
|
||||
//
|
||||
// Notification Bar
|
||||
//
|
||||
.jquery-notify-bar {
|
||||
color: #fff;
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
opacity: 1;
|
||||
box-shadow: none;
|
||||
font-size: 1.1em;
|
||||
font-weight: 500;
|
||||
position: static;
|
||||
margin-top: 30px;
|
||||
margin-bottom: -45px;
|
||||
padding: 10px;
|
||||
|
||||
a, a:link, a:active, a:visited {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.jquery-notify-bar.error,
|
||||
.jquery-notify-bar.fail {
|
||||
background-color: #FF9800;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.jquery-notify-bar.success {
|
||||
color: white;
|
||||
background-color: #4CAF50;
|
||||
}
|
||||
|
||||
// End Notification Bar
|
||||
|
||||
//
|
||||
// Login page
|
||||
//
|
||||
.login {
|
||||
#wrap {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 1em;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.login-logo {
|
||||
width: 150px;
|
||||
margin: 30px auto;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
input.text {
|
||||
width: 270px !important;
|
||||
}
|
||||
|
||||
input.button {
|
||||
font-weight: 600;
|
||||
padding: 10px 25px;
|
||||
margin-top: 15px !important;
|
||||
font-weight: 600;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: $accent !important;
|
||||
} else {
|
||||
background: $light !important;
|
||||
border-left: 7px solid $accent !important;
|
||||
}
|
||||
}
|
||||
|
||||
input.button:hover {
|
||||
background: darken($accent, 10%) !important;
|
||||
}
|
||||
|
||||
.error {
|
||||
padding: 10px;
|
||||
background: $accent;
|
||||
color: white;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
text-align: center
|
||||
}
|
||||
}
|
||||
|
||||
// End login page
|
||||
|
||||
//
|
||||
// Start Index page
|
||||
//
|
||||
.index {
|
||||
#add-url {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#new_url_form {
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
// min-width: 900px;
|
||||
}
|
||||
|
||||
#new_url {
|
||||
border: none;
|
||||
background: $default;
|
||||
text-align: left;
|
||||
|
||||
input.button {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
|
||||
div {
|
||||
background: $default;
|
||||
padding: 4px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.create {
|
||||
background: $accent !important;
|
||||
width: 150px;
|
||||
font-size: 1.3em !important;
|
||||
border: none !important;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
margin-top: 10px !important;
|
||||
margin-left: 20px !important;
|
||||
}
|
||||
|
||||
.top {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 50px;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: darken($accent, 10%);
|
||||
} @else {
|
||||
background: $default;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 1em;
|
||||
font-weight: 600;
|
||||
color: $text;
|
||||
|
||||
@if ($theme == "light") {
|
||||
color: $default;
|
||||
}
|
||||
}
|
||||
|
||||
input.text {
|
||||
width: 360px;
|
||||
padding: 4px;
|
||||
font-weight: 200;
|
||||
font-size: 1em !important;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: $default !important;
|
||||
} @else {
|
||||
background: $lightest !important;
|
||||
}
|
||||
}
|
||||
|
||||
.short {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#add-keyword {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
input.button {
|
||||
font-weight: 500;
|
||||
padding: 5px 10px;
|
||||
font-size: 1em !important;
|
||||
margin-left: 10px !important;
|
||||
background: $lightest !important;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: $default !important;
|
||||
font-weight: 700;
|
||||
color: $accent !important;
|
||||
}
|
||||
}
|
||||
|
||||
input.button:hover {
|
||||
background: darken($accent, 10%) !important;
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: darken(white, 10%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
#new_url_form {
|
||||
margin-left: 260px;
|
||||
padding: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
// Table stuff
|
||||
table.tblSorter {
|
||||
background-color: $default;
|
||||
color: $text;
|
||||
|
||||
a {
|
||||
color: $text;
|
||||
}
|
||||
|
||||
small a {
|
||||
color: darken(white, 50%)
|
||||
}
|
||||
|
||||
thead tr .tablesorter-header {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
tfoot tr {
|
||||
background-color: $default;
|
||||
}
|
||||
|
||||
thead tr th,
|
||||
tfoot tr th,
|
||||
th.header {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
/* font-size: 8pt; */
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
thead tr .tablesorter-headerAsc,
|
||||
thead tr .tablesorter-headerDesc {
|
||||
background-color: $lightest !important;
|
||||
}
|
||||
|
||||
tbody td {
|
||||
color: $text;
|
||||
padding: 5px;
|
||||
background-color: $light;
|
||||
vertical-align: middle;
|
||||
transition: 0.4s all;
|
||||
}
|
||||
|
||||
tbody tr:hover td {
|
||||
background-color: $lightest !important;
|
||||
}
|
||||
|
||||
tbody tr.normal-row td {
|
||||
background: $light;
|
||||
}
|
||||
|
||||
.keyword {
|
||||
border-left: 7px solid $accent;
|
||||
}
|
||||
|
||||
input.text {
|
||||
padding: 5px;
|
||||
margin: 8px 5px !important;
|
||||
}
|
||||
|
||||
.navigation .nav_link a {
|
||||
background: $light;
|
||||
border: none;
|
||||
|
||||
&:hover {
|
||||
background: $lightest;
|
||||
}
|
||||
}
|
||||
|
||||
tr.edit-row td {
|
||||
background: $default !important;
|
||||
}
|
||||
|
||||
// Icons
|
||||
$icons-list: stats, share, edit, delete;
|
||||
@each $icon in $icons-list {
|
||||
@if $icon == delete {
|
||||
td.actions .button_#{$icon} {
|
||||
background: red url(../img/#{$icon}.png) 0px center no-repeat;
|
||||
background-size: 23px;
|
||||
background-position: center;
|
||||
border: none;
|
||||
padding: 3px;
|
||||
border-radius: 2px;
|
||||
|
||||
&:hover {
|
||||
background: darken(red, 10%) url(../img/#{$icon}.png) 0px center no-repeat;
|
||||
background-size: 23px;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
} @else {
|
||||
td.actions .button_#{$icon} {
|
||||
background: $accent url(../img/#{$icon}.png) 0px center no-repeat;
|
||||
background-size: 23px;
|
||||
background-position: center;
|
||||
border: none;
|
||||
padding: 3px;
|
||||
border-radius: 2px;
|
||||
|
||||
&:hover {
|
||||
background: darken($accent, 10%) url(../img/#{$icon}.png) 0px center no-repeat;
|
||||
background-size: 23px;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End index page
|
||||
|
||||
|
||||
//
|
||||
// Nav
|
||||
//
|
||||
nav {
|
||||
background: $default;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: 50px 30px;
|
||||
width: 200px;
|
||||
z-index: 10;
|
||||
|
||||
li#admin_menu_logout_link {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
ul#admin_menu li:hover {
|
||||
list-style-type: none;
|
||||
color: darken($title, 20%);
|
||||
}
|
||||
|
||||
ul#admin_menu li {
|
||||
color: $title;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
#admin_menu_logout_link:hover {
|
||||
color: $title !important;
|
||||
}
|
||||
|
||||
.admin_menu_sublevel {
|
||||
font-weight: 100;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
.material-icons {
|
||||
font-size: 1em;
|
||||
vertical-align: middle;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
|
||||
img.logo {
|
||||
width: 90px;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: $accent;
|
||||
padding: 9px 150px 8px 20px;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.nav-open {
|
||||
color: white;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 30;
|
||||
padding: 10px 15px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
|
||||
i {
|
||||
font-size: 2em;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// End nav
|
||||
|
||||
//
|
||||
// Information
|
||||
//
|
||||
#wrap {
|
||||
#tabs {
|
||||
min-width: 580px;
|
||||
|
||||
.tab {
|
||||
background: $light !important;
|
||||
}
|
||||
|
||||
.wrap_unfloat {
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
ul#headers {
|
||||
border: none;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
li {
|
||||
color: $text;
|
||||
}
|
||||
|
||||
#historical_clicks li:hover {
|
||||
background: darken($default, 10%) !important;
|
||||
}
|
||||
|
||||
ul#headers li a,
|
||||
#stats_lines li a {
|
||||
outline: none;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background: $light;
|
||||
color: $text;
|
||||
padding: 10px 15px 7px 25px;
|
||||
|
||||
&:hover {
|
||||
background: darken($default, 10%);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-weight: 400;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: $lightest;
|
||||
border-bottom: 2px solid $accent;
|
||||
|
||||
&:hover {
|
||||
background: darken($default, 15%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#stats_lines li a {
|
||||
padding: 7px 15px;
|
||||
}
|
||||
|
||||
ul.toggle_display {
|
||||
border: none;
|
||||
}
|
||||
|
||||
svg {
|
||||
ellipse {
|
||||
fill: $accent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// General Styles
|
||||
//
|
||||
|
||||
body.index #wrap {
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
#wrap {
|
||||
background: none;
|
||||
margin-left: 270px;
|
||||
border: none;
|
||||
color: $text;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.notice {
|
||||
width: calc(100% - 22px);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
background: $accent;
|
||||
border: 1px solid $accent;
|
||||
padding: 10px;
|
||||
|
||||
p {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
#shareboxes {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
#sharebox {
|
||||
width: 558px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
div.share {
|
||||
background: $default;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
padding: 0px 20px 10px;
|
||||
margin-top: 10px;
|
||||
|
||||
textarea {
|
||||
background: $light;
|
||||
color: $text;
|
||||
border: none;
|
||||
padding: 3px;
|
||||
outline: none;
|
||||
margin: 1px !important;
|
||||
}
|
||||
|
||||
#charcount {
|
||||
padding-left: 5px;
|
||||
color: $text;
|
||||
}
|
||||
|
||||
#share_links a {
|
||||
color: $text;
|
||||
}
|
||||
}
|
||||
|
||||
.sub_wrap,
|
||||
.plugins main,
|
||||
.plugin_page_sleeky_settings main,
|
||||
code {
|
||||
background: $default;
|
||||
padding: 10px;
|
||||
padding: 5px 25px;
|
||||
max-width: 100%;
|
||||
|
||||
span {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
code,
|
||||
tt {
|
||||
background: rgba(0, 123, 255, 0.7);
|
||||
|
||||
@if ($theme == "light") {
|
||||
background: rgba(35, 185, 222, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
a.bookmarklet {
|
||||
border: none;
|
||||
background: #ffffff url(/images/favicon.gif) 4px center no-repeat;
|
||||
color: #3c3c3c;
|
||||
border-radius: 1px;
|
||||
padding: 7px 7px 7px 25px;
|
||||
color: darken(white, 80%) !important;
|
||||
|
||||
&:hover {
|
||||
background: #e0e0e0 url(/images/favicon.gif) 4px center no-repeat;
|
||||
}
|
||||
}
|
||||
|
||||
// Table
|
||||
table.tblSorter {
|
||||
background: $default;
|
||||
|
||||
a {
|
||||
color: $text;
|
||||
|
||||
&:hover {
|
||||
color: darken($text, 30%);
|
||||
}
|
||||
}
|
||||
|
||||
thead tr th,
|
||||
tfoot tr th,
|
||||
th.header {
|
||||
border: none;
|
||||
background-color: $light;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
tbody td {
|
||||
background: $lightest;
|
||||
color: $text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#filter_options {
|
||||
padding: 0px 10px !important;
|
||||
}
|
||||
|
||||
body > div > pre {
|
||||
overflow-x: scroll;
|
||||
padding-left: 290px;
|
||||
}
|
||||
|
||||
// End General Styles
|
||||
|
||||
|
||||
//
|
||||
// Footer
|
||||
//
|
||||
|
||||
#footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 230px;
|
||||
color: #828282;
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
z-index: 10;
|
||||
|
||||
p {
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 1em;
|
||||
|
||||
a {
|
||||
background: none;
|
||||
padding-left: 0;
|
||||
color: $text;
|
||||
|
||||
&:hover {
|
||||
color: #828282;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End footer
|
||||
|
||||
// Mobile styles
|
||||
@include for-size(phone-only) {
|
||||
body.index #wrap {
|
||||
padding-top: 210px;
|
||||
}
|
||||
|
||||
body.tools #wrap,
|
||||
body.plugins #wrap,
|
||||
body.plugin_page_sleeky_settings #wrap {
|
||||
padding-top: 50px;
|
||||
}
|
||||
#wrap {
|
||||
margin-left: 0;
|
||||
|
||||
main {
|
||||
overflow-x: scroll;
|
||||
}
|
||||
}
|
||||
|
||||
img.logo {
|
||||
padding: 9px 100% 8px 20px;
|
||||
}
|
||||
|
||||
.nav-open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav {
|
||||
height: 0;
|
||||
padding: 0;
|
||||
width: 0;
|
||||
|
||||
ul#admin_menu {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 9999 !important;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 50px;
|
||||
display: none;
|
||||
@if ($theme == "light") {
|
||||
background: darken($accent, 10%);
|
||||
} @else {
|
||||
background: $default;
|
||||
}
|
||||
|
||||
li {
|
||||
color: white;
|
||||
}
|
||||
|
||||
a, a:link, a:active, a:visited {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.index {
|
||||
.top {
|
||||
display: block;
|
||||
margin-top: 50px;
|
||||
width: 100vw;
|
||||
height: auto;
|
||||
|
||||
form {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
#new_url_form {
|
||||
min-width: unset;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.short {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#add-url,
|
||||
#add-keyword {
|
||||
width: calc(100% - 10px);
|
||||
margin: 10px 0px !important;
|
||||
}
|
||||
|
||||
input.button {
|
||||
margin: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
table.tblSorter {
|
||||
min-width: 600px;
|
||||
|
||||
// Icons
|
||||
$icons-list: stats, share, edit, delete;
|
||||
@each $icon in $icons-list {
|
||||
td.actions .button_#{$icon} {
|
||||
background-size: 15px;
|
||||
margin: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#copybox {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.jquery-notify-bar {
|
||||
margin-top: 210px;
|
||||
margin-bottom: -210px;
|
||||
width: calc(100vw - 20px);
|
||||
|
||||
a {
|
||||
margin-left: -30px;
|
||||
}
|
||||
}
|
||||
|
||||
#footer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.infos #wrap {
|
||||
margin-top: 30px;
|
||||
|
||||
|
||||
#headers {
|
||||
li {
|
||||
margin: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.infos #tabs {
|
||||
min-width: initial;
|
||||
|
||||
.tab {
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
ul#headers {
|
||||
margin: 20px 0;
|
||||
|
||||
li {
|
||||
a {
|
||||
padding: 10px 5px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body > div > pre {
|
||||
padding-left: 20px;
|
||||
}
|
||||
}
|
11
sleeky-backend/assets/css/animate.min.css
vendored
Normal file
1
sleeky-backend/assets/css/dark.css
Normal file
1
sleeky-backend/assets/css/light.css
Normal file
22
sleeky-backend/assets/css/themes/dark.scss
Normal file
@ -0,0 +1,22 @@
|
||||
// Sleeky Admin Dark UI Theme
|
||||
|
||||
// Define theme
|
||||
$theme: "dark";
|
||||
|
||||
// Set up our basic colour scheme
|
||||
$lightest: #464646;
|
||||
$light: #313131;
|
||||
$default: #232323;
|
||||
$darker: #1d1d1d;
|
||||
$darkest: #161616;
|
||||
|
||||
// Accents
|
||||
$accent: #007bff;
|
||||
// $accent_primary: #007bff;
|
||||
|
||||
// Text colours
|
||||
$title: #ececec;
|
||||
$text: #dcdcdc;
|
||||
|
||||
// Import the base styles
|
||||
@import "../base.scss";
|
22
sleeky-backend/assets/css/themes/light.scss
Normal file
@ -0,0 +1,22 @@
|
||||
// Sleeky Admin Light UI Theme
|
||||
|
||||
// Define theme
|
||||
$theme: "light";
|
||||
|
||||
// Set up our basic colour scheme
|
||||
$lightest: #e8e8e8;
|
||||
$light: white;
|
||||
$default: #f7f7f7;
|
||||
$darker: #efefef;
|
||||
$darkest: #161616;
|
||||
|
||||
// Accents
|
||||
$accent: #007bff;
|
||||
// $accent_secondary: black;
|
||||
|
||||
// Text colours
|
||||
$title: #1d1d1d;
|
||||
$text: #313131;
|
||||
|
||||
// Import the base styles
|
||||
@import "../base.scss";
|
10
sleeky-backend/assets/html/form.html
Normal file
@ -0,0 +1,10 @@
|
||||
<div class="top" id="add">
|
||||
<form id="new_url_form" action="javascript:add_link();" method="get">
|
||||
<label>Link</label>
|
||||
<input type="url" id="add-url" name="url" value="" class="text" placeholder="e.g. sleeky.flynntes.com" required>
|
||||
<label class="short">Short URL</label>
|
||||
<input type="text" id="add-keyword" name="keyword" value="" class="text" placeholder="e.g. theme">
|
||||
<input type="hidden" id="nonce-add" name="nonce-add" value="">
|
||||
<input type="button" id="add-button" name="add-button" value="Shorten" class="button" onclick="add_link();">
|
||||
</form>
|
||||
</div>
|
BIN
sleeky-backend/assets/img/delete.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
sleeky-backend/assets/img/edit.png
Normal file
After Width: | Height: | Size: 239 B |
BIN
sleeky-backend/assets/img/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
sleeky-backend/assets/img/logo_black.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
sleeky-backend/assets/img/logo_white.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
sleeky-backend/assets/img/share.png
Normal file
After Width: | Height: | Size: 496 B |
BIN
sleeky-backend/assets/img/stats.png
Normal file
After Width: | Height: | Size: 243 B |
144
sleeky-backend/assets/js/theme.js
Normal file
@ -0,0 +1,144 @@
|
||||
// Sleeky Admin Theme
|
||||
// 2019 Flynn Tesoriero
|
||||
|
||||
console.log("Sleeky Admin Theme Running");
|
||||
|
||||
$( document ).ready(function() {
|
||||
// Get the theme URL
|
||||
var url;
|
||||
if ($('meta[name=pluginURL]').attr("content")) {
|
||||
url = $('meta[name=pluginURL]').attr("content");
|
||||
} else {
|
||||
// If for some reason we can't find the URL attribute
|
||||
url = "/user/plugins/sleeky_backend";
|
||||
}
|
||||
|
||||
// Detect theme
|
||||
var theme;
|
||||
if ($('meta[name=sleeky_theme]').attr("content") == 'light') {
|
||||
theme = "light";
|
||||
} else if ($('meta[name=sleeky_theme]').attr("content") == 'dark') {
|
||||
theme = "dark";
|
||||
}
|
||||
|
||||
console.log("Theme is", theme)
|
||||
|
||||
// Update favicon
|
||||
$('link[rel="shortcut icon"]').attr('href', url + "/assets/img/favicon.ico");
|
||||
|
||||
// Update meta viewport
|
||||
$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1.0">');
|
||||
|
||||
// Detect pages
|
||||
if ($("body").hasClass("login")) {
|
||||
// Login page
|
||||
console.log("Login page");
|
||||
|
||||
if (theme == "light") {
|
||||
$("#login").prepend(`<img class="login-logo" src="${url}/assets/img/logo_black.png">`);
|
||||
} else if (theme == "dark") {
|
||||
$("#login").prepend(`<img class="login-logo" src="${url}/assets/img/logo_white.png">`);
|
||||
}
|
||||
|
||||
|
||||
} else if ($("body").hasClass("index")) {
|
||||
// Index page
|
||||
console.log("Index page");
|
||||
|
||||
handleNav()
|
||||
|
||||
// Hide YOURLS new URL section
|
||||
$("#new_url").hide();
|
||||
|
||||
// Grab the nonce id
|
||||
var nonce = $("#nonce-add").val();
|
||||
|
||||
// Remove the YOURLS new URL Section
|
||||
$("#new_url").remove();
|
||||
|
||||
// Create the sleeky new URL section from the template
|
||||
$("nav").append($('<div>').load(`${url}/assets/html/form.html`, function () {
|
||||
$("#nonce-add").val(nonce);
|
||||
}));
|
||||
} else if ($("body").hasClass("tools")) {
|
||||
// Tools page
|
||||
console.log("Tools page");
|
||||
|
||||
handleNav()
|
||||
|
||||
} else if ($("body").hasClass("plugins")) {
|
||||
// Plugins page
|
||||
console.log("Plugins page");
|
||||
|
||||
handleNav()
|
||||
|
||||
} else if ($("body").hasClass("plugin_page_sleeky_settings")) {
|
||||
// Tools page
|
||||
console.log("Sleeky Settings Page");
|
||||
|
||||
handleNav()
|
||||
|
||||
$("#ui_selector").val($("#ui_selector").attr("value"));
|
||||
|
||||
} else if ($("body").hasClass("infos")) {
|
||||
// Information page
|
||||
console.log("Information page");
|
||||
|
||||
handleNav()
|
||||
|
||||
$("#historical_clicks li").each(function (index) {
|
||||
if (index % 2 != 0) {
|
||||
$("#historical_clicks li").eq(index).css("background", "");
|
||||
}
|
||||
})
|
||||
|
||||
// Update tab headers
|
||||
var titles = ['Statistics', 'Location', 'Sources']
|
||||
for (let i = 0; i < 3; i++) {
|
||||
$($('#headers > li')[i]).find('h2').text(titles[i]);
|
||||
}
|
||||
} else {
|
||||
console.warn("Unknown page");
|
||||
|
||||
handleNav();
|
||||
}
|
||||
|
||||
function handleNav() {
|
||||
// Add logo
|
||||
$("#wrap").prepend(`<img class="logo" src="${url}/assets/img/logo_white.png">`);
|
||||
|
||||
// Add mobile nav hamburger
|
||||
$("#wrap").prepend(`<div class="nav-open" id="navOpen"><i class="material-icons">menu</i></div>`);
|
||||
|
||||
// Add frontend link
|
||||
$('#admin_menu').append('<li class="admin_menu_toplevel frontend_link"><a href="/"><i class="material-icons">arrow_back</i> Frontend Interface</a></li>');
|
||||
|
||||
// admin_menu
|
||||
$('#navOpen').on('click', function() {
|
||||
$('#admin_menu').slideToggle();
|
||||
})
|
||||
|
||||
$(window).resize(function () {
|
||||
if ($(window).width() > 899) {
|
||||
$('#admin_menu').show();
|
||||
} else {
|
||||
$('#admin_menu').hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Update P elements
|
||||
$("p").each(function (index) {
|
||||
if (/Display/.test($(this).text()) || /Overall/.test($(this).text())) {
|
||||
// Move info on index page to the bottom
|
||||
$("main").append("<p>" + $(this).html() + "</p>");
|
||||
$(this).remove();
|
||||
} else if (/Powered by/.test($(this).text())) {
|
||||
// Update footer
|
||||
var content = $(this).html();
|
||||
var i = 77
|
||||
var updated_content = "Running on" + content.slice(13, i) + '& <a href="https://sleeky.flynntes.com/" title="Sleeky">Sleeky</a>' + content.slice(i-1)
|
||||
$(this).html(updated_content);
|
||||
}
|
||||
});
|
||||
});
|
1293
sleeky-backend/package-lock.json
generated
Normal file
15
sleeky-backend/package.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "sleeky-admin",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node-sass --watch assets/css/themes -o assets/css --output-style compressed"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"node-sass": "^4.12.0"
|
||||
}
|
||||
}
|
147
sleeky-backend/plugin.php
Normal file
@ -0,0 +1,147 @@
|
||||
<?php
|
||||
/*
|
||||
Plugin Name: Sleeky Backend
|
||||
Plugin URI: https://sleeky.flynntes.com
|
||||
Description: UI overhaul of the YOURLS backend
|
||||
Version: 2.4.1
|
||||
Author: Flynn Tesoriero
|
||||
Author URI: https://flynntes.com
|
||||
*/
|
||||
|
||||
// No direct call
|
||||
if( !defined( 'YOURLS_ABSPATH' ) ) die();
|
||||
|
||||
// Plugin location URL
|
||||
$url = yourls_plugin_url( __DIR__ );
|
||||
|
||||
yourls_add_action( 'html_head', 'init' );
|
||||
|
||||
function init()
|
||||
{
|
||||
echo <<<HEAD
|
||||
<style>body {background: unset;}</style>
|
||||
HEAD;
|
||||
}
|
||||
|
||||
// Inject Sleeky files
|
||||
yourls_add_action( 'html_head', 'sleeky_head_scripts' );
|
||||
|
||||
function sleeky_head_scripts() {
|
||||
|
||||
// This is so the user doesn't have to reload page twice in settings screen
|
||||
if (isset( $_POST['theme_choice'] )) {
|
||||
// User has just changed theme
|
||||
if ($_POST['theme_choice'] == "light") {
|
||||
setTheme("light");
|
||||
} else {
|
||||
setTheme("dark");
|
||||
}
|
||||
} else {
|
||||
// User has not just changed theme
|
||||
if (yourls_get_option( 'theme_choice' ) == "light") {
|
||||
setTheme("light");
|
||||
} else {
|
||||
setTheme("dark");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Inject Sleeky files
|
||||
|
||||
function setTheme($theme) {
|
||||
$url = yourls_plugin_url( __DIR__ );
|
||||
if ($theme == "light") {
|
||||
echo <<<HEAD
|
||||
<link rel="stylesheet" href="$url/assets/css/light.css">
|
||||
<link rel="stylesheet" href="$url/assets/css/animate.min.css">
|
||||
<script src="$url/assets/js/theme.js"></script>
|
||||
<meta name="sleeky_theme" content="light">
|
||||
HEAD;
|
||||
} else if ($theme == "dark") {
|
||||
echo <<<HEAD
|
||||
<link rel="stylesheet" href="$url/assets/css/dark.css">
|
||||
<link rel="stylesheet" href="$url/assets/css/animate.min.css">
|
||||
<script src="$url/assets/js/theme.js"></script>
|
||||
<meta name="sleeky_theme" content="dark">
|
||||
HEAD;
|
||||
}
|
||||
}
|
||||
|
||||
// Inject information and options into the frontend
|
||||
yourls_add_action( 'html_head', 'addOptions' );
|
||||
|
||||
function addOptions()
|
||||
{
|
||||
$url = yourls_plugin_url( __DIR__ );
|
||||
echo <<<HEAD
|
||||
<meta name="pluginURL" content="$url">
|
||||
HEAD;
|
||||
}
|
||||
|
||||
// Register our plugin admin page
|
||||
yourls_add_action( 'plugins_loaded', 'sleeky_add_settings' );
|
||||
function sleeky_add_settings() {
|
||||
yourls_register_plugin_page( 'sleeky_settings', 'Sleeky Settings', 'sleeky_do_settings_page' );
|
||||
// parameters: page slug, page title, and function that will display the page itself
|
||||
}
|
||||
|
||||
// Display admin page
|
||||
function sleeky_do_settings_page() {
|
||||
|
||||
// Check if a form was submitted
|
||||
if( isset( $_POST['theme_choice'] ) ) {
|
||||
// Check nonce
|
||||
yourls_verify_nonce( 'sleeky_settings' );
|
||||
|
||||
// Process form
|
||||
sleeky_settings_update();
|
||||
}
|
||||
|
||||
// Get value from database
|
||||
$theme_choice = yourls_get_option( 'theme_choice' );
|
||||
|
||||
// Create nonce
|
||||
$nonce = yourls_create_nonce( 'sleeky_settings' );
|
||||
|
||||
echo <<<HTML
|
||||
<main>
|
||||
<h2>Sleeky Settings</h2>
|
||||
<form method="post">
|
||||
<input type="hidden" name="nonce" value="$nonce" />
|
||||
<p>
|
||||
<label>Theme</label>
|
||||
<select name="theme_choice" size="1" value="$theme_choice" id="ui_selector">
|
||||
<option value="dark">Dark</option>
|
||||
<option value="light">Light</option>
|
||||
</select>
|
||||
</p>
|
||||
<p><input type="submit" value="Save" class="button" /></p>
|
||||
</form>
|
||||
</main>
|
||||
HTML;
|
||||
}
|
||||
|
||||
// Update option in database
|
||||
function sleeky_settings_update() {
|
||||
$in = $_POST['theme_choice'];
|
||||
|
||||
if( $in ) {
|
||||
// Validate theme_choice. ALWAYS validate and sanitize user input.
|
||||
// Here, we want an integer
|
||||
// $in = intval( $in);
|
||||
if ($in == "light" or $in == "dark") {
|
||||
// Update value in database
|
||||
yourls_update_option( 'theme_choice', $in );
|
||||
} else {
|
||||
echo "Error";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Hide admin links for non-authenticated users
|
||||
if (yourls_is_valid_user() != 1) {
|
||||
echo <<<HEAD
|
||||
<style>ul#admin_menu li:not(.frontend_link) {display: none}</style>
|
||||
HEAD;
|
||||
}
|