Main #5
39
frontend/main.html
Normal file
39
frontend/main.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Kodex Muzic</title>
|
||||
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/css/main.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<!-- <h3><center>Kodex Muzic</center></h3> -->
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-brand mb-0 h1">Kodex Muzic</span>
|
||||
</div>
|
||||
<p style="margin-left: 10px;"><b>Поиск:</b> <input type="text" placeholder="Поиск по ключевым словам" class="form-control" id="search-input" style="width: 250%"></p>
|
||||
</nav>
|
||||
|
||||
<div id="app-window">
|
||||
<p><center>Включите поддержку javascript!</center></p>
|
||||
</div>
|
||||
<!-- <div class="author-element" id="author-0"> -->
|
||||
<!-- <h3>Автор_Нейм</h3> -->
|
||||
<!-- <p>Произведения</p> -->
|
||||
<!-- <hr/> -->
|
||||
<!-- <div id="playlist-author-0"> -->
|
||||
<!-- <p> -->
|
||||
<!-- <h6>Muzic</h6> -->
|
||||
<!-- <button class="btn btn-primary" onclick="playMuzic(4)" id="play-4">Прослушать</button> -->
|
||||
<!-- <button class="btn btn-primary" onclick="" id="pause-4" disabled>Пауза</button> -->
|
||||
<!-- <input type="range" id="road-4" name="stop" min="0" max="0" value="0" style="width: 70%;" readonly/> -->
|
||||
<!-- </p> -->
|
||||
<!-- </div> -->
|
||||
<!-- </div> -->
|
||||
|
||||
<script src="/js/api-module.js"></script>
|
||||
<script src="/js/sound.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
5051
frontend/public/bootstrap/css/bootstrap-grid.css
vendored
Normal file
5051
frontend/public/bootstrap/css/bootstrap-grid.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/css/bootstrap-grid.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap-grid.css.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap-grid.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap-grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/css/bootstrap-grid.min.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap-grid.min.css.map
Normal file
File diff suppressed because one or more lines are too long
5050
frontend/public/bootstrap/css/bootstrap-grid.rtl.css
vendored
Normal file
5050
frontend/public/bootstrap/css/bootstrap-grid.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/css/bootstrap-grid.rtl.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap-grid.rtl.css.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap-grid.rtl.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap-grid.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
485
frontend/public/bootstrap/css/bootstrap-reboot.css
vendored
Normal file
485
frontend/public/bootstrap/css/bootstrap-reboot.css
vendored
Normal file
@ -0,0 +1,485 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
:root {
|
||||
--bs-blue: #0d6efd;
|
||||
--bs-indigo: #6610f2;
|
||||
--bs-purple: #6f42c1;
|
||||
--bs-pink: #d63384;
|
||||
--bs-red: #dc3545;
|
||||
--bs-orange: #fd7e14;
|
||||
--bs-yellow: #ffc107;
|
||||
--bs-green: #198754;
|
||||
--bs-teal: #20c997;
|
||||
--bs-cyan: #0dcaf0;
|
||||
--bs-white: #fff;
|
||||
--bs-gray: #6c757d;
|
||||
--bs-gray-dark: #343a40;
|
||||
--bs-gray-100: #f8f9fa;
|
||||
--bs-gray-200: #e9ecef;
|
||||
--bs-gray-300: #dee2e6;
|
||||
--bs-gray-400: #ced4da;
|
||||
--bs-gray-500: #adb5bd;
|
||||
--bs-gray-600: #6c757d;
|
||||
--bs-gray-700: #495057;
|
||||
--bs-gray-800: #343a40;
|
||||
--bs-gray-900: #212529;
|
||||
--bs-primary: #0d6efd;
|
||||
--bs-secondary: #6c757d;
|
||||
--bs-success: #198754;
|
||||
--bs-info: #0dcaf0;
|
||||
--bs-warning: #ffc107;
|
||||
--bs-danger: #dc3545;
|
||||
--bs-light: #f8f9fa;
|
||||
--bs-dark: #212529;
|
||||
--bs-primary-rgb: 13, 110, 253;
|
||||
--bs-secondary-rgb: 108, 117, 125;
|
||||
--bs-success-rgb: 25, 135, 84;
|
||||
--bs-info-rgb: 13, 202, 240;
|
||||
--bs-warning-rgb: 255, 193, 7;
|
||||
--bs-danger-rgb: 220, 53, 69;
|
||||
--bs-light-rgb: 248, 249, 250;
|
||||
--bs-dark-rgb: 33, 37, 41;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-body-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
|
||||
--bs-body-font-family: var(--bs-font-sans-serif);
|
||||
--bs-body-font-size: 1rem;
|
||||
--bs-body-font-weight: 400;
|
||||
--bs-body-line-height: 1.5;
|
||||
--bs-body-color: #212529;
|
||||
--bs-body-bg: #fff;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
direction: ltr /* rtl:ignore */;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: left;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
1
frontend/public/bootstrap/css/bootstrap-reboot.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap-reboot.css.map
Normal file
File diff suppressed because one or more lines are too long
8
frontend/public/bootstrap/css/bootstrap-reboot.min.css
vendored
Normal file
8
frontend/public/bootstrap/css/bootstrap-reboot.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
482
frontend/public/bootstrap/css/bootstrap-reboot.rtl.css
vendored
Normal file
482
frontend/public/bootstrap/css/bootstrap-reboot.rtl.css
vendored
Normal file
@ -0,0 +1,482 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
:root {
|
||||
--bs-blue: #0d6efd;
|
||||
--bs-indigo: #6610f2;
|
||||
--bs-purple: #6f42c1;
|
||||
--bs-pink: #d63384;
|
||||
--bs-red: #dc3545;
|
||||
--bs-orange: #fd7e14;
|
||||
--bs-yellow: #ffc107;
|
||||
--bs-green: #198754;
|
||||
--bs-teal: #20c997;
|
||||
--bs-cyan: #0dcaf0;
|
||||
--bs-white: #fff;
|
||||
--bs-gray: #6c757d;
|
||||
--bs-gray-dark: #343a40;
|
||||
--bs-gray-100: #f8f9fa;
|
||||
--bs-gray-200: #e9ecef;
|
||||
--bs-gray-300: #dee2e6;
|
||||
--bs-gray-400: #ced4da;
|
||||
--bs-gray-500: #adb5bd;
|
||||
--bs-gray-600: #6c757d;
|
||||
--bs-gray-700: #495057;
|
||||
--bs-gray-800: #343a40;
|
||||
--bs-gray-900: #212529;
|
||||
--bs-primary: #0d6efd;
|
||||
--bs-secondary: #6c757d;
|
||||
--bs-success: #198754;
|
||||
--bs-info: #0dcaf0;
|
||||
--bs-warning: #ffc107;
|
||||
--bs-danger: #dc3545;
|
||||
--bs-light: #f8f9fa;
|
||||
--bs-dark: #212529;
|
||||
--bs-primary-rgb: 13, 110, 253;
|
||||
--bs-secondary-rgb: 108, 117, 125;
|
||||
--bs-success-rgb: 25, 135, 84;
|
||||
--bs-info-rgb: 13, 202, 240;
|
||||
--bs-warning-rgb: 255, 193, 7;
|
||||
--bs-danger-rgb: 220, 53, 69;
|
||||
--bs-light-rgb: 248, 249, 250;
|
||||
--bs-dark-rgb: 33, 37, 41;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-body-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
|
||||
--bs-body-font-family: var(--bs-font-sans-serif);
|
||||
--bs-body-font-size: 1rem;
|
||||
--bs-body-font-weight: 400;
|
||||
--bs-body-line-height: 1.5;
|
||||
--bs-body-color: #212529;
|
||||
--bs-body-bg: #fff;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-right: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
direction: ltr ;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: right;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
|
File diff suppressed because one or more lines are too long
8
frontend/public/bootstrap/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
8
frontend/public/bootstrap/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4866
frontend/public/bootstrap/css/bootstrap-utilities.css
vendored
Normal file
4866
frontend/public/bootstrap/css/bootstrap-utilities.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap-utilities.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap-utilities.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4857
frontend/public/bootstrap/css/bootstrap-utilities.rtl.css
vendored
Normal file
4857
frontend/public/bootstrap/css/bootstrap-utilities.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
11266
frontend/public/bootstrap/css/bootstrap.css
vendored
Normal file
11266
frontend/public/bootstrap/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/css/bootstrap.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap.css.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/css/bootstrap.min.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
11242
frontend/public/bootstrap/css/bootstrap.rtl.css
vendored
Normal file
11242
frontend/public/bootstrap/css/bootstrap.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/css/bootstrap.rtl.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap.rtl.css.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/css/bootstrap.rtl.min.css
vendored
Normal file
7
frontend/public/bootstrap/css/bootstrap.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/css/bootstrap.rtl.min.css.map
Normal file
1
frontend/public/bootstrap/css/bootstrap.rtl.min.css.map
Normal file
File diff suppressed because one or more lines are too long
6812
frontend/public/bootstrap/js/bootstrap.bundle.js
vendored
Normal file
6812
frontend/public/bootstrap/js/bootstrap.bundle.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/js/bootstrap.bundle.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.bundle.js.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/js/bootstrap.bundle.min.js
vendored
Normal file
7
frontend/public/bootstrap/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/js/bootstrap.bundle.min.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.bundle.min.js.map
Normal file
File diff suppressed because one or more lines are too long
4999
frontend/public/bootstrap/js/bootstrap.esm.js
vendored
Normal file
4999
frontend/public/bootstrap/js/bootstrap.esm.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/js/bootstrap.esm.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.esm.js.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/js/bootstrap.esm.min.js
vendored
Normal file
7
frontend/public/bootstrap/js/bootstrap.esm.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/js/bootstrap.esm.min.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.esm.min.js.map
Normal file
File diff suppressed because one or more lines are too long
5046
frontend/public/bootstrap/js/bootstrap.js
vendored
Normal file
5046
frontend/public/bootstrap/js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/public/bootstrap/js/bootstrap.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.js.map
Normal file
File diff suppressed because one or more lines are too long
7
frontend/public/bootstrap/js/bootstrap.min.js
vendored
Normal file
7
frontend/public/bootstrap/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
frontend/public/bootstrap/js/bootstrap.min.js.map
Normal file
1
frontend/public/bootstrap/js/bootstrap.min.js.map
Normal file
File diff suppressed because one or more lines are too long
14
frontend/public/css/main.css
Normal file
14
frontend/public/css/main.css
Normal file
@ -0,0 +1,14 @@
|
||||
body {
|
||||
background-color : #fff;
|
||||
}
|
||||
|
||||
.author-element {
|
||||
background-color : #e5f4fe;
|
||||
border-radius : 25px;
|
||||
padding-left : 30px;
|
||||
padding-right : 30px;
|
||||
padding-top : 7px;
|
||||
padding-bottom : 5px;
|
||||
margin : 15px;
|
||||
margin-top : 15px;
|
||||
}
|
47
frontend/public/js/api-module.js
Normal file
47
frontend/public/js/api-module.js
Normal file
@ -0,0 +1,47 @@
|
||||
class Api {
|
||||
getAuthors (params, cb) {
|
||||
const xhr = new XMLHttpRequest();
|
||||
params = Object.entries(params).map(([key, value]) => `${key}=${value}`).join('&');
|
||||
params = params !== '' ? `&${params}` : '';
|
||||
xhr.open("GET", `/api/v/1.0/get-authors?response_format=json${params}`, true);
|
||||
xhr.onreadystatechange = function (event) {
|
||||
//console.log(event);
|
||||
if (this.readyState != 4) return;
|
||||
cb(JSON.parse(this.responseText).response);
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
getMuzic (params, cb) {
|
||||
const xhr = new XMLHttpRequest();
|
||||
params = Object.entries(params).map(([key, value]) => `${key}=${value}`).join('&');
|
||||
params = params !== '' ? `&${params}` : '';
|
||||
xhr.open("GET", `/api/v/1.0/get-muzic?response_format=json${params}`, true);
|
||||
xhr.onreadystatechange = function (event) {
|
||||
//console.log(event);
|
||||
if (this.readyState != 4) return;
|
||||
cb(JSON.parse(this.responseText).response);
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
createMuzic (author_id, name, data=null, cb) {
|
||||
data = data === null ? undefined : data;
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", `/api/v/1.0/create-item?response_format=json`, true);
|
||||
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
|
||||
xhr.onreadystatechange = function (event) {
|
||||
//console.log(event);
|
||||
if (this.readyState != 4) return;
|
||||
cb(JSON.parse(this.responseText).response);
|
||||
};
|
||||
xhr.send(JSON.stringify({
|
||||
type: 'muzic',
|
||||
name,
|
||||
author_id,
|
||||
data
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
const api = new Api();
|
118
frontend/public/js/main.js
Normal file
118
frontend/public/js/main.js
Normal file
@ -0,0 +1,118 @@
|
||||
document.getElementById('app-window').innerHTML = '<p><center>Загрузка произведений...</center></p>';
|
||||
|
||||
function toggleShow (authorId) {
|
||||
document.getElementById(`playlist-author-${authorId}`).hidden = !document.getElementById(`playlist-author-${authorId}`).hidden;
|
||||
}
|
||||
|
||||
function showAudio (settingsAuthors, settingsAudio) {
|
||||
const step2 = (muzic) => {
|
||||
//console.log(muzic.items);
|
||||
const showedAuthors = [...(new Set(muzic.items.map(i => `author-${i.author_id}`)))];
|
||||
[...document.getElementsByClassName('author-element')].forEach(el => {
|
||||
el.hidden = !showedAuthors.includes(el.id);
|
||||
});
|
||||
|
||||
muzic.items.forEach(muzic => {
|
||||
document.getElementById(`loader-muzic-${muzic.author_id}`).hidden = true;
|
||||
if (muzic.is_data_exists) document.getElementById(`playlist-author-${muzic.author_id}`).innerHTML += `<p>
|
||||
<h6>${muzic.name}</h6>
|
||||
<button class="btn btn-primary play-button" onclick="playMuzic(${muzic.id})" id="play-${muzic.id}">Прослушать</button>
|
||||
<button class="btn btn-primary pause-button" onclick="" id="pause-${muzic.id}" disabled>Пауза</button>
|
||||
<input class="road-muzic" type="range" id="road-${muzic.id}" name="stop" min="0" max="0" value="0" step="0.01" style="width: 70%;"/>
|
||||
</p>`;
|
||||
else document.getElementById(`playlist-author-${muzic.author_id}`).innerHTML += `<p>
|
||||
<h6>${muzic.name}</h6>
|
||||
<button class="btn btn-secondary" onclick="" id="add-file-${muzic.id}">Добавить звуковой файл</button>
|
||||
</p>`;
|
||||
});
|
||||
}
|
||||
api.getAuthors(settingsAuthors, (authors) => {
|
||||
document.getElementById('app-window').innerHTML = '';
|
||||
authors.items.forEach((author) => {
|
||||
document.getElementById('app-window').innerHTML += `<div class="author-element" id="author-${author.id}">
|
||||
<h3>${author.name}</h3>
|
||||
<p>Произведения</p>
|
||||
<hr/>
|
||||
<a href='#' onclick="toggleShow(${author.id})">Показать/Скрыть</a>
|
||||
<div id="playlist-author-${author.id}">
|
||||
<p id="loader-muzic-${author.id}">Загрузка..</p>
|
||||
</div>
|
||||
<div id="add-muzic-${author.id}" style="margin-bottom: 15px;"><center><button class="btn btn-primary" id="add-muzic-button-${author.id}">Добавить произведение</button></center></div>
|
||||
</div>`;
|
||||
const addMuzicButtonFunct = () => setTimeout( () =>
|
||||
document.getElementById(`add-muzic-button-${author.id}`).onclick = async () => {
|
||||
// console.log('>>', author.id);
|
||||
document.getElementById(`add-muzic-${author.id}`).innerHTML = `<p><input class="form-control" type="text" placeholder="Введите название произведения" id="muzic-name-input-${author.id}" style="width: 90%"></p>
|
||||
<p><button class="btn btn-primary" id="attach-file-${author.id}">Добавить файл (.mp3)</button>
|
||||
<button class="btn btn-primary" id="add-muzic-${author.id}">Добавить произведение</button>
|
||||
<button class="btn btn-danger" id="cancel-add-muzic-${author.id}">Отменить</button></p>
|
||||
`;
|
||||
setTimeout(
|
||||
() => {
|
||||
document.getElementById(`cancel-add-muzic-${author.id}`).onclick = function () {
|
||||
document.getElementById(`add-muzic-${author.id}`).innerHTML = `<center><button class="btn btn-primary" id="add-muzic-button-${author.id}">Добавить произведение</button></center>`;
|
||||
addMuzicButtonFunct();
|
||||
};
|
||||
|
||||
document.getElementById(`add-muzic-${author.id}`).onclick = function () {
|
||||
if (document.getElementById(`muzic-name-input-${author.id}`).value.length >= 2) {
|
||||
api.createMuzic(
|
||||
author.id,
|
||||
document.getElementById(`muzic-name-input-${author.id}`).value,
|
||||
document.getElementById(`attach-file-${author.id}`).filedata,
|
||||
() => {
|
||||
showAudio(settingsAuthors, settingsAudio);
|
||||
}
|
||||
);
|
||||
document.getElementById(`add-muzic-${author.id}`).innerHTML = 'Добавление файла...';
|
||||
}
|
||||
};
|
||||
|
||||
document.getElementById(`attach-file-${author.id}`).onclick = function () {
|
||||
const input = document.createElement('input');
|
||||
input.type = 'file';
|
||||
input.accept = 'audio/mpeg';
|
||||
input.click();
|
||||
input.onchange = function (e) {
|
||||
function arrayBufferToBase64( buffer ) {
|
||||
let binary = '';
|
||||
let bytes = new Uint8Array( buffer );
|
||||
let len = bytes.byteLength;
|
||||
for (let i = 0; i < len; i++) {
|
||||
binary += String.fromCharCode( bytes[ i ] );
|
||||
}
|
||||
return window.btoa( binary );
|
||||
}
|
||||
|
||||
const file = e.target.files[0];
|
||||
// console.log(file);
|
||||
const reader = new FileReader();
|
||||
reader.readAsArrayBuffer(file);
|
||||
reader.onload = function() {
|
||||
// console.log('reader.result', reader.result);
|
||||
if (file.type === 'audio/mpeg') {
|
||||
document.getElementById(`attach-file-${author.id}`).filedata = arrayBufferToBase64(reader.result);
|
||||
document.getElementById(`attach-file-${author.id}`).innerText = "Загружен файл: " + file.name;
|
||||
}
|
||||
// console.log(arrayBufferToBase64(reader.result));
|
||||
};
|
||||
};
|
||||
};
|
||||
}, 0
|
||||
);
|
||||
}, 0);
|
||||
addMuzicButtonFunct();
|
||||
});
|
||||
api.getMuzic(settingsAudio, step2);
|
||||
document.getElementById('app-window').innerHTML += '<div id="add-author" style="margin-bottom: 15px;"><center><button class="btn btn-primary" id="add-author-button">Добавить исполнителя</button></center></div>'
|
||||
});
|
||||
}
|
||||
|
||||
setTimeout(() => showAudio({}, {}), 0);
|
||||
|
||||
document.getElementById('search-input').onchange = function () {
|
||||
console.log(this.value);
|
||||
setTimeout(() => showAudio({}, {
|
||||
q : this.value
|
||||
}), 0);
|
||||
};
|
61
frontend/public/js/sound.js
Normal file
61
frontend/public/js/sound.js
Normal file
@ -0,0 +1,61 @@
|
||||
let audio = new Audio('/api/v/1.0/muzic');
|
||||
|
||||
function stopMuzic(id, interval) {
|
||||
audio.pause();
|
||||
audio.currentTime = 0;
|
||||
document.getElementById(`play-${id}`).innerText = "Прослушать";
|
||||
document.getElementById(`pause-${id}`).disabled = true;
|
||||
document.getElementById(`play-${id}`).onclick = () => playMuzic(id);
|
||||
|
||||
clearInterval(interval);
|
||||
document.getElementById(`road-${id}`).value = 0;
|
||||
document.getElementById(`road-${id}`).max = 0;
|
||||
}
|
||||
|
||||
function pauseMuzic(id) {
|
||||
document.getElementById(`play-${id}`).disabled = true;
|
||||
document.getElementById(`pause-${id}`).innerText = "Продолжить";
|
||||
document.getElementById(`pause-${id}`).onclick = () => resumeMuzic(id);
|
||||
audio.pause();
|
||||
}
|
||||
|
||||
function resumeMuzic(id) {
|
||||
document.getElementById(`play-${id}`).disabled = false;
|
||||
document.getElementById(`pause-${id}`).innerText = "Пауза";
|
||||
document.getElementById(`pause-${id}`).onclick = () => pauseMuzic(id);
|
||||
audio.play();
|
||||
}
|
||||
|
||||
function changeTime (value, id) {
|
||||
audio.currentTime = value;
|
||||
}
|
||||
|
||||
function playMuzic(id) {
|
||||
audio.pause();
|
||||
audio.currentTime = 0;
|
||||
if (audio.muzId !== undefined) stopMuzic(
|
||||
audio.muzId,
|
||||
audio.muzTimer
|
||||
);
|
||||
|
||||
audio = new Audio(`/api/v/1.0/muzic?id=${id}`);
|
||||
audio.onloadedmetadata = function () {
|
||||
audio.muzId = id;
|
||||
document.getElementById(`play-${id}`).innerText = "Остановить";
|
||||
document.getElementById(`pause-${id}`).disabled = false;
|
||||
document.getElementById(`road-${id}`).max = audio.duration;
|
||||
audio.play();
|
||||
|
||||
const interval = setInterval(() => {
|
||||
document.getElementById(`road-${id}`).value = audio.currentTime;
|
||||
}, 750);
|
||||
audio.muzTimer = interval;
|
||||
document.getElementById(`play-${id}`).onclick = () => stopMuzic(id, interval);
|
||||
document.getElementById(`pause-${id}`).onclick = () => pauseMuzic(id);
|
||||
|
||||
document.getElementById(`road-${id}`).onchange = function () {
|
||||
// console.log('value', this.value);
|
||||
changeTime(this.value, id)
|
||||
};
|
||||
}
|
||||
}
|
11
page-view.js
11
page-view.js
@ -0,0 +1,11 @@
|
||||
const router = require('express').Router();
|
||||
const fs = require('fs');
|
||||
router.use(require('express').static('./frontend/public'));
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
res.send(
|
||||
fs.readFileSync("./frontend/main.html", { encoding: "utf-8" })
|
||||
);
|
||||
})
|
||||
|
||||
module.exports = router;
|
@ -64,6 +64,7 @@ app.use((req, res, next) => {
|
||||
);
|
||||
});
|
||||
|
||||
app.use("/", async (rq, rs, next) => next(), require("./page-view"));
|
||||
app.use("/api", async (rq, rs, next) => next(), require("./api"));
|
||||
|
||||
// Подключение через HTTPS
|
||||
@ -89,4 +90,4 @@ server.listen(config().port, config().address, async (err) => {
|
||||
`Kodex Muzic catalog runned at ${config().address}:${config().port}`,
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue
Block a user