Add files via upload

This commit is contained in:
2022-04-19 17:41:59 -07:00
committed by GitHub
parent 62c49ea66d
commit 871210bc19
18 changed files with 2614 additions and 0 deletions

View 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,iVBORw0KGgoAAAANSUhEUgAAABkAAAAeCAYAAADZ7LXbAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAKRJREFUeNrs1TEKwkAQheEvIoI2nsk7qFdIq1hoJ3gCC5sUVpY23sDKXnvrYOUBbGITG0kQjQriPlgYhmF/3ryFjbIs82nVfEEBEiAB8k+Q+q1IkqSDNVq4lMy3scIkjuP0FSdbjNHMLys6OwyQVlnXEsOS2QP6OL8jkzlmd70jus86eBT8FIu8PqGXg6oFX6ARGthgX+V1ReFnDJAACZAfhFwHAJI7HF2lZGQaAAAAAElFTkSuQmCC) 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;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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";

View 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";

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

View 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

File diff suppressed because it is too large Load Diff

View 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
View 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;
}