Initial commit
This commit is contained in:
commit
822e56506a
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 UUP dump authors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
349
css/normalize.css
vendored
Normal file
349
css/normalize.css
vendored
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||||
|
|
||||||
|
/* Document
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the line height in all browsers.
|
||||||
|
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
line-height: 1.15; /* 1 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sections
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the margin in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the `main` element consistently in IE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
main {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the font size and margin on `h1` elements within `section` and
|
||||||
|
* `article` contexts in Chrome, Firefox, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in Firefox.
|
||||||
|
* 2. Show the overflow in Edge and IE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box; /* 1 */
|
||||||
|
height: 0; /* 1 */
|
||||||
|
overflow: visible; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-family: monospace, monospace; /* 1 */
|
||||||
|
font-size: 1em; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background on active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Remove the bottom border in Chrome 57-
|
||||||
|
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: none; /* 1 */
|
||||||
|
text-decoration: underline; /* 2 */
|
||||||
|
text-decoration: underline dotted; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||||
|
* 2. Correct the odd `em` font sizing in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace; /* 1 */
|
||||||
|
font-size: 1em; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||||
|
* all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the border on images inside links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Change the font styles in all browsers.
|
||||||
|
* 2. Remove the margin in Firefox and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: inherit; /* 1 */
|
||||||
|
font-size: 100%; /* 1 */
|
||||||
|
line-height: 1.15; /* 1 */
|
||||||
|
margin: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the overflow in IE.
|
||||||
|
* 1. Show the overflow in Edge.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input { /* 1 */
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||||
|
* 1. Remove the inheritance of text transform in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select { /* 1 */
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
[type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inner border and padding in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
border-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restore the focus styles unset by the previous rule.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button:-moz-focusring,
|
||||||
|
[type="button"]:-moz-focusring,
|
||||||
|
[type="reset"]:-moz-focusring,
|
||||||
|
[type="submit"]:-moz-focusring {
|
||||||
|
outline: 1px dotted ButtonText;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the padding in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
padding: 0.35em 0.75em 0.625em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the text wrapping in Edge and IE.
|
||||||
|
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||||
|
* 3. Remove the padding so developers are not caught out when they zero out
|
||||||
|
* `fieldset` elements in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
color: inherit; /* 2 */
|
||||||
|
display: table; /* 1 */
|
||||||
|
max-width: 100%; /* 1 */
|
||||||
|
padding: 0; /* 3 */
|
||||||
|
white-space: normal; /* 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the default vertical scrollbar in IE 10+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Add the correct box sizing in IE 10.
|
||||||
|
* 2. Remove the padding in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="checkbox"],
|
||||||
|
[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the odd appearance in Chrome and Safari.
|
||||||
|
* 2. Correct the outline style in Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
outline-offset: -2px; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the inner padding in Chrome and Safari on macOS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||||
|
* 2. Change font properties to `inherit` in Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
-webkit-appearance: button; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Interactive
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
details {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add the correct display in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Misc
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the correct display in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
226
css/sakura.css
Normal file
226
css/sakura.css
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
/* Sakura.css v1.5.0
|
||||||
|
* ================
|
||||||
|
* Minimal css theme.
|
||||||
|
* Project: https://github.com/oxalorg/sakura/
|
||||||
|
*/
|
||||||
|
/* Body */
|
||||||
|
html {
|
||||||
|
font-size: 62.5%;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
line-height: 1.618;
|
||||||
|
max-width: 38em;
|
||||||
|
margin: auto;
|
||||||
|
color: #4a4a4a;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
padding: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 684px) {
|
||||||
|
body {
|
||||||
|
font-size: 1.53rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 382px) {
|
||||||
|
body {
|
||||||
|
font-size: 1.35rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
line-height: 1.1;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-top: 3rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
word-wrap: break-word;
|
||||||
|
-ms-word-break: break-all;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2.35em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
small, sub, sup {
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border-color: #1d7484;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #1d7484;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color: #144f5a;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #982c61;
|
||||||
|
border-bottom: 2px solid #4a4a4a;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-left: 1.4em;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin-left: 0px;
|
||||||
|
margin-right: 0px;
|
||||||
|
padding-left: 1em;
|
||||||
|
padding-top: 0.8em;
|
||||||
|
padding-bottom: 0.8em;
|
||||||
|
padding-right: 0.8em;
|
||||||
|
border-left: 5px solid #1d7484;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img, video {
|
||||||
|
height: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pre and Code */
|
||||||
|
pre {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
display: block;
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: auto;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, kbd, samp {
|
||||||
|
font-size: 0.9em;
|
||||||
|
padding: 0 0.5em;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > code {
|
||||||
|
padding: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
white-space: pre;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
table {
|
||||||
|
text-align: justify;
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
padding: 0.5em;
|
||||||
|
border-bottom: 1px solid #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons, forms and input */
|
||||||
|
input, textarea {
|
||||||
|
border: 1px solid #4a4a4a;
|
||||||
|
}
|
||||||
|
input:focus, textarea:focus {
|
||||||
|
border: 1px solid #1d7484;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button, button, input[type=submit], input[type=reset], input[type=button], input[type=file]::file-selector-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 5px 10px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: #1d7484;
|
||||||
|
color: #f9f9f9;
|
||||||
|
border-radius: 1px;
|
||||||
|
border: 1px solid #1d7484;
|
||||||
|
cursor: pointer;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.button[disabled], button[disabled], input[type=submit][disabled], input[type=reset][disabled], input[type=button][disabled], input[type=file]::file-selector-button[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.button:hover, button:hover, input[type=submit]:hover, input[type=reset]:hover, input[type=button]:hover, input[type=file]::file-selector-button:hover {
|
||||||
|
background-color: #982c61;
|
||||||
|
color: #f9f9f9;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
.button:focus-visible, button:focus-visible, input[type=submit]:focus-visible, input[type=reset]:focus-visible, input[type=button]:focus-visible, input[type=file]::file-selector-button:focus-visible {
|
||||||
|
outline-style: solid;
|
||||||
|
outline-width: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea, select, input {
|
||||||
|
color: #4a4a4a;
|
||||||
|
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
border: 1px solid #f1f1f1;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: none;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
textarea:focus, select:focus, input:focus {
|
||||||
|
border: 1px solid #1d7484;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=checkbox]:focus {
|
||||||
|
outline: 1px dotted #1d7484;
|
||||||
|
}
|
||||||
|
|
||||||
|
label, legend, fieldset {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
16
css/style.css
Normal file
16
css/style.css
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#search-builds-query,
|
||||||
|
#language-selection-select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-info {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
text-align: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
56
download.html
Normal file
56
download.html
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>LightUUP - Download build</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/normalize.css">
|
||||||
|
<link rel="stylesheet" href="css/sakura.css">
|
||||||
|
<link rel="stylesheet" href="css/style.css">
|
||||||
|
|
||||||
|
<script src="js/common.js" defer></script>
|
||||||
|
<script src="js/download.js" defer></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>LightUUP</h1>
|
||||||
|
<p>A simple UUP downloads generator.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
[<a href="/">Home</a>]
|
||||||
|
[<a href="known.html">Downloads</a>]
|
||||||
|
[<a href="https://git.uupdump.net/uup-dump/lightuup">Source code</a>]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Download build</h2>
|
||||||
|
<p id="build-name">Name not yet known.</p>
|
||||||
|
<input id="build-uuid" type="hidden">
|
||||||
|
|
||||||
|
<div id="language-selection" class="hidden">
|
||||||
|
<h3>Select language</h3>
|
||||||
|
<p>Please select your desired language.</p>
|
||||||
|
|
||||||
|
<p><select id="language-selection-select"></select></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="edition-selection" class="hidden">
|
||||||
|
<h3>Select editions</h3>
|
||||||
|
<p>Please select your desired editions.</p>
|
||||||
|
<div id="edition-selection-list"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="download-info" class="hidden">
|
||||||
|
<h3>Download your selection</h3>
|
||||||
|
<p>You can download your selection by clicking the link below. In case you want to customize some advanced options, such as adding additional editions, please see the <code>ConvertConfig.ini</code> file in the downloaded archive.</p>
|
||||||
|
|
||||||
|
<p><a id="download-link">Create the download package</a></p>
|
||||||
|
|
||||||
|
<p>This download is provided from <a href="https://uupdump.net">UUP dump</a>.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="status" class="hidden">
|
||||||
|
<h3 id="status-title"></h3>
|
||||||
|
<p id="status-text"></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
27
index.html
Normal file
27
index.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>LightUUP</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/normalize.css">
|
||||||
|
<link rel="stylesheet" href="css/sakura.css">
|
||||||
|
<link rel="stylesheet" href="css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>LightUUP</h1>
|
||||||
|
<p>A simple UUP downloads generator.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
[<a href="/">Home</a>]
|
||||||
|
[<a href="known.html">Downloads</a>]
|
||||||
|
[<a href="https://git.uupdump.net/uup-dump/lightuup">Source code</a>]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Welcome to LightUUP!</h2>
|
||||||
|
<p>LightUUP is a simple UUP dump JSON API client written in HTML and JavaScript. You can customize it however you want to provide your own UUP download experience.</p>
|
||||||
|
|
||||||
|
<a href="known.html">Browse available builds</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
58
js/common.js
Normal file
58
js/common.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
const UUP_API_ENDPOINT = 'https://api.uupdump.net/';
|
||||||
|
|
||||||
|
const STATUS_DIV_NAME = '#status';
|
||||||
|
const STATUS_TITLE_NAME = '#status-title';
|
||||||
|
const STATUS_TEXT_NAME = '#status-text';
|
||||||
|
|
||||||
|
const TEXT_ERROR = 'Error';
|
||||||
|
const TEXT_PLEASE_WAIT = 'Please wait...';
|
||||||
|
const TEXT_RETRIEVING_DATA = 'The data you requested is being retrieved...';
|
||||||
|
|
||||||
|
const $ = document.querySelector.bind(document)
|
||||||
|
const $$ = document.querySelectorAll.bind(document)
|
||||||
|
|
||||||
|
async function getResponseFromApi(page, params) {
|
||||||
|
let query = '';
|
||||||
|
let data;
|
||||||
|
|
||||||
|
if(Object.keys(params).length != 0)
|
||||||
|
query = '?' + new URLSearchParams(params).toString();
|
||||||
|
|
||||||
|
const url = `${UUP_API_ENDPOINT}${page}${query}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(url);
|
||||||
|
data = await response.json();
|
||||||
|
} catch(error) {
|
||||||
|
return {'error': error.message};
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!('response' in data))
|
||||||
|
return {'error': 'Response from the server is invalid.'};
|
||||||
|
|
||||||
|
return data['response'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSection(selector) {
|
||||||
|
$(selector).classList.remove('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideSection(selector) {
|
||||||
|
$(selector).classList.add('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
function setStatusError(text) {
|
||||||
|
$(STATUS_TITLE_NAME).innerHTML = TEXT_ERROR;
|
||||||
|
$(STATUS_TEXT_NAME).innerHTML = text;
|
||||||
|
showSection(STATUS_DIV_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setStatusLoading() {
|
||||||
|
$(STATUS_TITLE_NAME).innerHTML = TEXT_PLEASE_WAIT;
|
||||||
|
$(STATUS_TEXT_NAME).innerHTML = TEXT_RETRIEVING_DATA;
|
||||||
|
showSection(STATUS_DIV_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearStatus() {
|
||||||
|
hideSection(STATUS_DIV_NAME);
|
||||||
|
}
|
155
js/download.js
Normal file
155
js/download.js
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
const UUP_PACKAGE_LINK = 'https://uupdump.net/get.php';
|
||||||
|
|
||||||
|
const BUILD_NAME = '#build-name';
|
||||||
|
const BUILD_UUID = '#build-uuid';
|
||||||
|
|
||||||
|
const LANGUAGE_SELECTION = '#language-selection';
|
||||||
|
const LANGUAGE_SELECTION_SELECT = '#language-selection-select';
|
||||||
|
|
||||||
|
const EDITION_SELECTION = '#edition-selection';
|
||||||
|
const EDITION_SELECTION_LIST = '#edition-selection-list';
|
||||||
|
|
||||||
|
const DOWNLOAD_INFO = '#download-info';
|
||||||
|
const DOWNLOAD_LINK = '#download-link';
|
||||||
|
|
||||||
|
const TEXT_NO_LANGUAGES = 'This build can\'t be downloaded.';
|
||||||
|
const TEXT_UNSPECIFIED_BUILD = 'Build not specified.';
|
||||||
|
const TEXT_SELECT_EDITION = 'Please select at least one edition.'
|
||||||
|
|
||||||
|
function addListenersToEditionOptions() {
|
||||||
|
$$('.edition-option').forEach((x) => {
|
||||||
|
x.addEventListener('click', () => {
|
||||||
|
evaluateEditions();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateLanguageList(langList) {
|
||||||
|
const langs = Object.values(langList);
|
||||||
|
langs.sort();
|
||||||
|
|
||||||
|
const options = langs.map((x) => {
|
||||||
|
return `
|
||||||
|
<option value="${x}">
|
||||||
|
${x}
|
||||||
|
</option>
|
||||||
|
`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
$(LANGUAGE_SELECTION_SELECT).innerHTML = `
|
||||||
|
<option value="">--- Please select ---</option>
|
||||||
|
${options}
|
||||||
|
`;
|
||||||
|
|
||||||
|
showSection(LANGUAGE_SELECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateEditionList(editionList) {
|
||||||
|
const editions = Object.values(editionList);
|
||||||
|
editions.sort();
|
||||||
|
|
||||||
|
const options = editions.map((x) => {
|
||||||
|
return `
|
||||||
|
<label>
|
||||||
|
<input class="edition-option" type="checkbox" value="${x}">
|
||||||
|
<code>${x}</code>
|
||||||
|
</label>
|
||||||
|
`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
$(EDITION_SELECTION_LIST).innerHTML = options;
|
||||||
|
addListenersToEditionOptions();
|
||||||
|
showSection(EDITION_SELECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateBuildName(updateInfo) {
|
||||||
|
const title = updateInfo['title'];
|
||||||
|
const arch = updateInfo['arch'];
|
||||||
|
|
||||||
|
$(BUILD_NAME).innerHTML = `${title} ${arch}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildDownloadLink(editions) {
|
||||||
|
const editionsStr = editions.join(';').toLowerCase();
|
||||||
|
const query = '?' + new URLSearchParams({
|
||||||
|
'id': $(BUILD_UUID).value,
|
||||||
|
'pack': $(LANGUAGE_SELECTION_SELECT).value,
|
||||||
|
'edition': editionsStr,
|
||||||
|
'autodl': 2
|
||||||
|
}).toString();
|
||||||
|
|
||||||
|
return `${UUP_PACKAGE_LINK}${query}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function evaluateEditions() {
|
||||||
|
const selectedEditions = [];
|
||||||
|
|
||||||
|
for(const x of $$('.edition-option').values()) {
|
||||||
|
if(x.checked)
|
||||||
|
selectedEditions.push(x.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectedEditions.length < 1) {
|
||||||
|
hideSection(DOWNLOAD_INFO)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(DOWNLOAD_LINK).href = buildDownloadLink(selectedEditions);
|
||||||
|
showSection(DOWNLOAD_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function preparePage(uuid) {
|
||||||
|
setStatusLoading();
|
||||||
|
const response = await getResponseFromApi('listlangs.php', {'id': uuid});
|
||||||
|
|
||||||
|
if('error' in response) {
|
||||||
|
setStatusError(response['error']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(response['langList'].length < 1) {
|
||||||
|
setStatusError(TEXT_NO_LANGUAGES);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateBuildName(response['updateInfo']);
|
||||||
|
updateLanguageList(response['langList']);
|
||||||
|
clearStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function languageSelected(uuid, lang) {
|
||||||
|
hideSection(EDITION_SELECTION);
|
||||||
|
hideSection(DOWNLOAD_INFO);
|
||||||
|
|
||||||
|
if(lang === "")
|
||||||
|
return;
|
||||||
|
|
||||||
|
setStatusLoading();
|
||||||
|
const response = await getResponseFromApi('listeditions.php', {'id': uuid, 'lang': lang});
|
||||||
|
|
||||||
|
if('error' in response) {
|
||||||
|
setStatusError(response['error']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateEditionList(response['editionList']);
|
||||||
|
clearStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
$(LANGUAGE_SELECTION_SELECT).addEventListener('change', async () => {
|
||||||
|
const selection = $(LANGUAGE_SELECTION_SELECT).value;
|
||||||
|
const uuid = $(BUILD_UUID).value;
|
||||||
|
|
||||||
|
await languageSelected(uuid, selection);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
|
if(!window.location.hash) {
|
||||||
|
setStatusError(TEXT_UNSPECIFIED_BUILD);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uuid = window.location.hash.substring(1);
|
||||||
|
$(BUILD_UUID).value = uuid;
|
||||||
|
preparePage(uuid);
|
||||||
|
});
|
65
js/known.js
Normal file
65
js/known.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
const SEARCH_FORM = '#search-builds';
|
||||||
|
const SEARCH_INPUT = '#search-builds-query';
|
||||||
|
const SEARCH_DATE_SORT = '#search-builds-date-sort';
|
||||||
|
|
||||||
|
const SEARCH_RESULTS = '#search-results';
|
||||||
|
const SEARCH_RESULTS_TABLE = '#search-results-table-body';
|
||||||
|
|
||||||
|
function buildResultsTable(results) {
|
||||||
|
const builds = Object.values(results['builds']);
|
||||||
|
const table = builds.map((x) => {
|
||||||
|
return `
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="download.html#${x['uuid']}">
|
||||||
|
${x['title']} ${x['arch']}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
${new Date(x['created'] * 1000).toLocaleDateString()}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
$(SEARCH_RESULTS_TABLE).innerHTML = table;
|
||||||
|
showSection(SEARCH_RESULTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function performSearch(search, sort) {
|
||||||
|
const query = {
|
||||||
|
'search': search,
|
||||||
|
'sortByDate': sort
|
||||||
|
}
|
||||||
|
|
||||||
|
hideSection(SEARCH_RESULTS);
|
||||||
|
setStatusLoading();
|
||||||
|
const response = await getResponseFromApi('listid.php', query);
|
||||||
|
|
||||||
|
if('error' in response) {
|
||||||
|
setStatusError(response['error']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearStatus();
|
||||||
|
buildResultsTable(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(SEARCH_FORM).addEventListener('submit', async (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
const search = $(SEARCH_INPUT).value;
|
||||||
|
const sort = $(SEARCH_DATE_SORT).checked ? 1 : 0;
|
||||||
|
window.location.hash = search;
|
||||||
|
|
||||||
|
await performSearch(search, sort);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
|
if(!window.location.hash)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const search = window.location.hash.substring(1);
|
||||||
|
$(SEARCH_INPUT).value = search;
|
||||||
|
|
||||||
|
await performSearch(search, 0);
|
||||||
|
});
|
55
known.html
Normal file
55
known.html
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>LightUUP - Browse available builds</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/normalize.css">
|
||||||
|
<link rel="stylesheet" href="css/sakura.css">
|
||||||
|
<link rel="stylesheet" href="css/style.css">
|
||||||
|
|
||||||
|
<script src="js/common.js" defer></script>
|
||||||
|
<script src="js/known.js" defer></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>LightUUP</h1>
|
||||||
|
<p>A simple UUP downloads generator.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
[<a href="/">Home</a>]
|
||||||
|
[<a href="known.html">Downloads</a>]
|
||||||
|
[<a href="https://git.uupdump.net/uup-dump/lightuup">Source code</a>]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Browse available builds</h2>
|
||||||
|
<form id="search-builds">
|
||||||
|
<input id="search-builds-query" type="search" placeholder="Search for builds...">
|
||||||
|
|
||||||
|
<label>
|
||||||
|
<input id="search-builds-date-sort" type="checkbox">
|
||||||
|
Sort results by addition date
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<button type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div id="search-results" class="hidden">
|
||||||
|
<h3>Search results</h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Date added</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="search-results-table-body"></tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="status" class="hidden">
|
||||||
|
<h3 id="status-title"></h3>
|
||||||
|
<p id="status-text"></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user